{
  "version": 3,
  "sources": ["../library/src/engine/consts.ts", "../library/src/utils/text.ts", "../library/src/engine/errors.ts", "../library/src/engine/csp.ts", "../library/src/utils/polyfills.ts", "../library/src/utils/paths.ts", "../library/src/engine/signals.ts", "../library/src/utils/dom.ts", "../library/src/engine/engine.ts", "../library/src/plugins/actions/peek.ts", "../library/src/plugins/actions/setAll.ts", "../library/src/plugins/actions/toggleAll.ts", "../library/src/plugins/actions/fetch.ts", "../library/src/plugins/attributes/attr.ts", "../library/src/plugins/attributes/bind.ts", "../library/src/plugins/attributes/class.ts", "../library/src/plugins/attributes/computed.ts", "../library/src/plugins/attributes/effect.ts", "../library/src/plugins/attributes/indicator.ts", "../library/src/utils/tags.ts", "../library/src/utils/timing.ts", "../library/src/utils/view-transitions.ts", "../library/src/plugins/attributes/init.ts", "../library/src/plugins/attributes/jsonSignals.ts", "../library/src/plugins/attributes/on.ts", "../library/src/utils/math.ts", "../library/src/plugins/attributes/onIntersect.ts", "../library/src/plugins/attributes/onInterval.ts", "../library/src/plugins/attributes/onSignalPatch.ts", "../library/src/plugins/attributes/ref.ts", "../library/src/plugins/attributes/show.ts", "../library/src/plugins/attributes/signals.ts", "../library/src/plugins/attributes/style.ts", "../library/src/plugins/attributes/text.ts", "../library/src/plugins/watchers/patchElements.ts", "../library/src/plugins/watchers/patchSignals.ts", "../library/src/rocket/codecs.ts", "../library/src/rocket/template.ts", "../library/src/rocket/conditional.ts", "../library/src/rocket/for.ts", "../library/src/rocket/runtime.ts"],
  "sourcesContent": ["export const DATASTAR_FETCH_EVENT = 'datastar-fetch'\nexport const DATASTAR_PROP_CHANGE_EVENT = 'datastar-prop-change'\nexport const DATASTAR_READY_EVENT = 'datastar-ready'\nexport const DATASTAR_SCOPE_CHILDREN_EVENT = 'datastar-scope-children'\nexport const DATASTAR_SIGNAL_PATCH_EVENT = 'datastar-signal-patch'\nexport const DOCUMENT = document\nexport const HTMLInput = HTMLInputElement\nexport const MutationObserverClass = MutationObserver\n", "import { compileExpression } from '@engine/csp'\nimport type { Modifiers } from '@engine/types'\n\nexport const kebab = (str: string): string =>\n  str\n    .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')\n    .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n    .replace(/([a-z])([0-9]+)/gi, '$1-$2')\n    .replace(/([0-9]+)([a-z])/gi, '$1-$2')\n    .replace(/[\\s_]+/g, '-')\n    .toLowerCase()\n\nexport const camel = (str: string): string =>\n  kebab(str).replace(/-./g, (x) => x[1].toUpperCase())\n\nexport const snake = (str: string): string => kebab(str).replace(/-/g, '_')\n\nexport const pascal = (str: string): string =>\n  camel(str).replace(/(^.|(?<=\\.).)/g, (x) => x[0].toUpperCase())\n\nexport const title = (str: string): string =>\n  str.replace(/\\b\\w/g, (char) => char.toUpperCase())\n\nexport const isStringTrue = (value: unknown): value is string =>\n  typeof value === 'string' && value.trim() === 'true'\n\nconst RE_FUNCTION_LITERAL =\n  /^(?:(?:async\\s+)?function\\b|(?:async\\s*)?(?:\\([^)]*\\)|[A-Za-z_$][\\w$]*)\\s*=>)/\n\ntype JsStrToObjectOptions = {\n  reviveFunctionStrings?: boolean\n}\n\nconst evaluate = (source: string): any =>\n  compileExpression([], `return (${source})`)()\n\nexport const jsStrToObject = (\n  raw: string,\n  options: JsStrToObjectOptions = {},\n) => {\n  const { reviveFunctionStrings = false } = options\n  try {\n    if (!reviveFunctionStrings) return JSON.parse(raw)\n    return JSON.parse(raw, (_k, value) => {\n      if (typeof value !== 'string') return value\n      const trimmed = value.trim()\n      if (!RE_FUNCTION_LITERAL.test(trimmed)) return value\n      try {\n        const revived = evaluate(trimmed)\n        return typeof revived === 'function' ? revived : value\n      } catch {\n        return value\n      }\n    })\n  } catch {\n    // If JSON parsing fails, try to evaluate as a JavaScript object\n    // This is less safe and should be used with caution\n    return evaluate(raw)\n  }\n}\n\nconst caseFns: Record<string, (s: string) => string> = {\n  camel: (str) => str.replace(/-[a-z]/g, (x) => x[1].toUpperCase()),\n  snake: (str) => str.replace(/-/g, '_'),\n  pascal: (str) => str[0].toUpperCase() + caseFns.camel(str.slice(1)),\n}\n\nexport const modifyCasing = (\n  str: string,\n  mods: Modifiers,\n  defaultCase = 'camel',\n): string => {\n  for (const c of mods.get('case') || [defaultCase]) {\n    str = caseFns[c]?.(str) || str\n  }\n  return str\n}\n\nexport const aliasify = (name: string) =>\n  ALIAS ? `data-${ALIAS}-${name}` : `data-${name}`\n\nexport const unaliasify = (name: string) => {\n  if (!ALIAS) return name\n  if (!name.startsWith(`${ALIAS}-`)) return null\n  return name.slice(ALIAS.length + 1)\n}\n", "import { snake } from '@utils/text'\n\nconst url = 'https://data-star.dev/errors'\n\nexport const createError = (\n  ctx: Record<string, any>,\n  reason: string,\n  metadata: Record<string, any> = {},\n): Error => {\n  Object.assign(metadata, ctx)\n  const r = snake(reason)\n  const q = new URLSearchParams({\n    metadata: JSON.stringify(metadata),\n  }).toString()\n  const c = JSON.stringify(metadata, null, 2)\n  return new Error(`${reason}\\nMore info: ${url}/${r}?${q}\\nContext: ${c}`)\n}\n", "import { DOCUMENT } from '@engine/consts'\nimport { createError } from '@engine/errors'\nimport { aliasify } from '@utils/text'\n\ntype ExpressionFn = (...args: any[]) => any\n\nconst nonceAttribute = aliasify('nonce')\nconst root = DOCUMENT.documentElement\nconst pageNonce = root.getAttribute(nonceAttribute)\n\nconst cspEnabled = pageNonce !== null\n\nlet policy: any\nif (cspEnabled) {\n  if (!pageNonce) {\n    throw createError({}, 'NonceRequired')\n  }\n  root.removeAttribute(nonceAttribute)\n  policy = (window as any).trustedTypes?.createPolicy('datastar', {\n    createHTML: (html: string) => html,\n    createScript: (script: string) => script,\n  })\n}\n\nexport const prepareScript = (\n  script: HTMLScriptElement,\n  content: string,\n): void => {\n  if (cspEnabled) script.nonce = pageNonce!\n  script.text = policy ? policy.createScript(content) : content\n}\n\nexport const createHTML = (html: string): any =>\n  policy ? policy.createHTML(html) : html\n\nconst compiledExpressions = new Map<string, ExpressionFn>()\n\nexport const compileExpression = (\n  argNames: string[],\n  expression: string,\n): ExpressionFn => {\n  if (!cspEnabled) return Function(...argNames, expression) as ExpressionFn\n\n  const source = `function(${argNames.join(',')}){${expression}\\n}`\n  const cached = compiledExpressions.get(source)\n  if (cached) return cached\n\n  const script = DOCUMENT.createElement('script')\n  prepareScript(script, `document.currentScript.x=${source}`)\n  DOCUMENT.head.appendChild(script)\n  script.remove()\n\n  const compiled = (script as any).x as ExpressionFn | undefined\n  if (!compiled) {\n    throw new Error('Blocked by CSP.')\n  }\n  compiledExpressions.set(source, compiled)\n  return compiled\n}\n", "export const hasOwn: (obj: object, prop: PropertyKey) => boolean =\n  // @ts-expect-error\n  Object.hasOwn ?? Object.prototype.hasOwnProperty.call\n", "import type { Paths } from '@engine/types'\nimport { hasOwn } from '@utils/polyfills'\n\nexport const isPojo = (obj: any): obj is Record<string, any> =>\n  obj !== null &&\n  typeof obj === 'object' &&\n  (Object.getPrototypeOf(obj) === Object.prototype ||\n    Object.getPrototypeOf(obj) === null)\n\nexport const isEmpty = (obj: Record<string, any>): boolean => {\n  for (const prop in obj) {\n    if (hasOwn(obj, prop)) {\n      return false\n    }\n  }\n  return true\n}\n\nexport const updateLeaves = (\n  obj: Record<string, any>,\n  fn: (oldValue: any) => any,\n) => {\n  for (const key in obj) {\n    const val = obj[key]\n    if (isPojo(val) || Array.isArray(val)) {\n      updateLeaves(val, fn)\n    } else {\n      obj[key] = fn(val)\n    }\n  }\n}\n\nexport const pathToObj = (paths: Paths): Record<string, any> => {\n  const result: Record<string, any> = {}\n  for (const [path, value] of paths) {\n    const keys = path.split('.')\n    const lastKey = keys.pop()!\n    const obj = keys.reduce((acc, key) => (acc[key] ??= {}), result)\n    obj[lastKey] = value\n  }\n  return result\n}\n", "import { DATASTAR_SIGNAL_PATCH_EVENT, DOCUMENT } from '@engine/consts'\nimport type {\n  Computed,\n  Effect,\n  JSONPatch,\n  MergePatchArgs,\n  Paths,\n  Signal,\n  SignalFilterOptions,\n} from '@engine/types'\nimport { isPojo, pathToObj } from '@utils/paths'\nimport { hasOwn } from '@utils/polyfills'\n\ninterface ReactiveNode {\n  deps_?: Link\n  depsTail_?: Link\n  subs_?: Link\n  subsTail_?: Link\n  flags_: ReactiveFlags\n}\n\ninterface Link {\n  version_: number\n  dep_: ReactiveNode\n  sub_: ReactiveNode\n  prevSub_?: Link\n  nextSub_?: Link\n  prevDep_?: Link\n  nextDep_?: Link\n}\n\ninterface Stack<T> {\n  value_: T\n  prev_?: Stack<T>\n}\n\nenum ReactiveFlags {\n  None = 0,\n  Mutable = 1 << 0,\n  Watching = 1 << 1,\n  RecursedCheck = 1 << 2,\n  Recursed = 1 << 3,\n  Dirty = 1 << 4,\n  Pending = 1 << 5,\n}\n\nenum EffectFlags {\n  Queued = 1 << 6,\n}\n\ninterface AlienEffect extends ReactiveNode {\n  fn_(): void\n}\n\ninterface AlienComputed<T = unknown> extends ReactiveNode {\n  value_?: T\n  getter_(previousValue?: T): T\n}\n\ninterface AlienSignal<T = unknown> extends ReactiveNode {\n  previousValue_: T\n  value_: T\n}\n\nconst currentPatch: Paths = []\nconst queuedEffects: (AlienEffect | undefined)[] = []\nlet batchDepth = 0\nlet notifyIndex = 0\nlet queuedEffectsLength = 0\nlet subStack: Stack<ReactiveNode | undefined> | undefined\nlet activeSub: ReactiveNode | undefined\nlet version = 0\n\nexport const beginBatch = (): void => {\n  batchDepth++\n}\n\nexport const endBatch = (): void => {\n  if (!--batchDepth) {\n    flush()\n    dispatch()\n  }\n}\n\nexport const startPeeking = (sub?: ReactiveNode): void => {\n  subStack = {\n    value_: activeSub,\n    prev_: subStack,\n  }\n  activeSub = sub\n}\n\nexport const stopPeeking = (): void => {\n  activeSub = subStack?.value_\n  subStack = subStack?.prev_\n}\n\nexport const signal = <T>(initialValue?: T): Signal<T> => {\n  return signalOper.bind(0, {\n    previousValue_: initialValue,\n    value_: initialValue,\n    flags_: 1 satisfies ReactiveFlags.Mutable,\n  }) as Signal<T>\n}\n\nconst computedSymbol = Symbol('computed')\nexport const computed = <T>(getter: (previousValue?: T) => T): Computed<T> => {\n  const c = computedOper.bind(0, {\n    flags_: 17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty,\n    getter_: getter,\n  }) as Computed<T>\n  // @ts-expect-error\n  c[computedSymbol] = 1\n  return c\n}\n\nexport const effect = (fn: () => void): Effect => {\n  const e: AlienEffect = {\n    fn_: fn,\n    flags_: 2 satisfies ReactiveFlags.Watching,\n  }\n  if (activeSub) {\n    link(e, activeSub)\n  }\n  startPeeking(e)\n  beginBatch()\n  try {\n    e.fn_()\n  } finally {\n    endBatch()\n    stopPeeking()\n  }\n  return effectOper.bind(0, e)\n}\n\nconst flush = () => {\n  while (notifyIndex < queuedEffectsLength) {\n    const effect = queuedEffects[notifyIndex]!\n    queuedEffects[notifyIndex++] = undefined\n    run(effect, (effect.flags_ &= ~EffectFlags.Queued))\n  }\n  notifyIndex = 0\n  queuedEffectsLength = 0\n}\n\nconst update = (signal: AlienSignal | AlienComputed): boolean => {\n  if ('getter_' in signal) {\n    return updateComputed(signal)\n  }\n  return updateSignal(signal, signal.value_)\n}\n\nconst updateComputed = (c: AlienComputed): boolean => {\n  startPeeking(c)\n  startTracking(c)\n  try {\n    const oldValue = c.value_\n    return oldValue !== (c.value_ = c.getter_(oldValue))\n  } finally {\n    stopPeeking()\n    endTracking(c)\n  }\n}\n\nconst updateSignal = <T>(s: AlienSignal<T>, value: T): boolean => {\n  s.flags_ = 1 satisfies ReactiveFlags.Mutable\n  return s.previousValue_ !== (s.previousValue_ = value)\n}\n\nconst notify = (e: AlienEffect): void => {\n  const flags = e.flags_\n  if (!(flags & EffectFlags.Queued)) {\n    e.flags_ = flags | EffectFlags.Queued\n    const subs = e.subs_\n    if (subs) {\n      notify(subs.sub_ as AlienEffect)\n    } else {\n      queuedEffects[queuedEffectsLength++] = e\n    }\n  }\n}\n\nconst run = (e: AlienEffect, flags: ReactiveFlags): void => {\n  if (\n    flags & (16 satisfies ReactiveFlags.Dirty) ||\n    (flags & (32 satisfies ReactiveFlags.Pending) && checkDirty(e.deps_!, e))\n  ) {\n    startPeeking(e)\n    startTracking(e)\n    beginBatch()\n    try {\n      e.fn_()\n    } finally {\n      endBatch()\n      stopPeeking()\n      endTracking(e)\n    }\n    return\n  }\n  if (flags & (32 satisfies ReactiveFlags.Pending)) {\n    e.flags_ = flags & ~(32 satisfies ReactiveFlags.Pending)\n  }\n  let link = e.deps_\n  while (link) {\n    const dep = link.dep_\n    const depFlags = dep.flags_\n    if (depFlags & EffectFlags.Queued) {\n      run(dep as AlienEffect, (dep.flags_ = depFlags & ~EffectFlags.Queued))\n    }\n    link = link.nextDep_\n  }\n}\n\nconst signalOper = <T>(s: AlienSignal<T>, ...value: [T]): T | boolean => {\n  if (value.length) {\n    if (s.value_ !== (s.value_ = value[0])) {\n      s.flags_ = 17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty\n      const subs = s.subs_\n      if (subs) {\n        propagate(subs)\n        if (!batchDepth) {\n          flush()\n        }\n      }\n      return true\n    }\n    return false\n  }\n  const currentValue = s.value_\n  if (s.flags_ & (16 satisfies ReactiveFlags.Dirty)) {\n    if (updateSignal(s, currentValue)) {\n      const subs_ = s.subs_\n      if (subs_) {\n        shallowPropagate(subs_)\n      }\n    }\n  }\n  if (activeSub) {\n    link(s, activeSub)\n  }\n  return currentValue\n}\n\nconst computedOper = <T>(c: AlienComputed<T>): T => {\n  const flags = c.flags_\n  if (\n    flags & (16 satisfies ReactiveFlags.Dirty) ||\n    (flags & (32 satisfies ReactiveFlags.Pending) && checkDirty(c.deps_!, c))\n  ) {\n    if (updateComputed(c)) {\n      const subs = c.subs_\n      if (subs) {\n        shallowPropagate(subs)\n      }\n    }\n  } else if (flags & (32 satisfies ReactiveFlags.Pending)) {\n    c.flags_ = flags & ~(32 satisfies ReactiveFlags.Pending)\n  }\n  if (activeSub) {\n    link(c, activeSub)\n  }\n  return c.value_!\n}\n\nconst effectOper = (e: AlienEffect): void => {\n  let dep = e.deps_\n  while (dep) {\n    dep = unlink(dep, e)\n  }\n  const sub = e.subs_\n  if (sub) {\n    unlink(sub)\n  }\n  e.flags_ = 0 satisfies ReactiveFlags.None\n}\n\nconst link = (dep: ReactiveNode, sub: ReactiveNode): void => {\n  const prevDep = sub.depsTail_\n  if (prevDep && prevDep.dep_ === dep) {\n    return\n  }\n  const nextDep = prevDep ? prevDep.nextDep_ : sub.deps_\n  if (nextDep && nextDep.dep_ === dep) {\n    nextDep.version_ = version\n    sub.depsTail_ = nextDep\n    return\n  }\n  const prevSub = dep.subsTail_\n  if (prevSub && prevSub.version_ === version && prevSub.sub_ === sub) {\n    return\n  }\n  const newLink =\n    (sub.depsTail_ =\n    dep.subsTail_ =\n      {\n        version_: version,\n        dep_: dep,\n        sub_: sub,\n        prevDep_: prevDep,\n        nextDep_: nextDep,\n        prevSub_: prevSub,\n      })\n  if (nextDep) {\n    nextDep.prevDep_ = newLink\n  }\n  if (prevDep) {\n    prevDep.nextDep_ = newLink\n  } else {\n    sub.deps_ = newLink\n  }\n  if (prevSub) {\n    prevSub.nextSub_ = newLink\n  } else {\n    dep.subs_ = newLink\n  }\n}\n\nconst unlink = (link: Link, sub = link.sub_): Link | undefined => {\n  const dep_ = link.dep_\n  const prevDep_ = link.prevDep_\n  const nextDep_ = link.nextDep_\n  const nextSub_ = link.nextSub_\n  const prevSub_ = link.prevSub_\n  if (nextDep_) {\n    nextDep_.prevDep_ = prevDep_\n  } else {\n    sub.depsTail_ = prevDep_\n  }\n  if (prevDep_) {\n    prevDep_.nextDep_ = nextDep_\n  } else {\n    sub.deps_ = nextDep_\n  }\n  if (nextSub_) {\n    nextSub_.prevSub_ = prevSub_\n  } else {\n    dep_.subsTail_ = prevSub_\n  }\n  if (prevSub_) {\n    prevSub_.nextSub_ = nextSub_\n  } else if (!(dep_.subs_ = nextSub_)) {\n    if ('getter_' in dep_) {\n      let toRemove = dep_.deps_\n      if (toRemove) {\n        dep_.flags_ = 17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty\n        do {\n          toRemove = unlink(toRemove, dep_)\n        } while (toRemove)\n      }\n    } else if (!('previousValue_' in dep_)) {\n      effectOper(dep_ as AlienEffect)\n    }\n  }\n  return nextDep_\n}\n\nconst propagate = (link: Link): void => {\n  let next = link.nextSub_\n  let stack: Stack<Link | undefined> | undefined\n\n  top: while (true) {\n    const sub = link.sub_\n\n    let flags = sub.flags_\n\n    if (\n      !(\n        flags &\n        (60 as\n          | ReactiveFlags.RecursedCheck\n          | ReactiveFlags.Recursed\n          | ReactiveFlags.Dirty\n          | ReactiveFlags.Pending)\n      )\n    ) {\n      sub.flags_ = flags | (32 satisfies ReactiveFlags.Pending)\n    } else if (\n      !(flags & (12 as ReactiveFlags.RecursedCheck | ReactiveFlags.Recursed))\n    ) {\n      flags = 0 satisfies ReactiveFlags.None\n    } else if (!(flags & (4 satisfies ReactiveFlags.RecursedCheck))) {\n      sub.flags_ =\n        (flags & ~(8 satisfies ReactiveFlags.Recursed)) |\n        (32 satisfies ReactiveFlags.Pending)\n    } else if (\n      !(flags & (48 as ReactiveFlags.Dirty | ReactiveFlags.Pending)) &&\n      isValidLink(link, sub)\n    ) {\n      sub.flags_ =\n        flags | (40 as ReactiveFlags.Recursed | ReactiveFlags.Pending)\n      flags &= 1 satisfies ReactiveFlags.Mutable\n    } else {\n      flags = 0 satisfies ReactiveFlags.None\n    }\n\n    if (flags & (2 satisfies ReactiveFlags.Watching)) {\n      notify(sub as AlienEffect)\n    }\n\n    if (flags & (1 satisfies ReactiveFlags.Mutable)) {\n      const subSubs = sub.subs_\n      if (subSubs) {\n        const nextSub = (link = subSubs).nextSub_\n        if (nextSub) {\n          stack = { value_: next, prev_: stack }\n          next = nextSub\n        }\n        continue\n      }\n    }\n\n    if ((link = next!)) {\n      next = link.nextSub_\n      continue\n    }\n\n    while (stack) {\n      link = stack.value_!\n      stack = stack.prev_\n      if (link) {\n        next = link.nextSub_\n        continue top\n      }\n    }\n\n    break\n  }\n}\n\nconst startTracking = (sub: ReactiveNode): void => {\n  version++\n  sub.depsTail_ = undefined\n  sub.flags_ =\n    (sub.flags_ &\n      ~(56 as\n        | ReactiveFlags.Recursed\n        | ReactiveFlags.Dirty\n        | ReactiveFlags.Pending)) |\n    (4 satisfies ReactiveFlags.RecursedCheck)\n}\n\nconst endTracking = (sub: ReactiveNode): void => {\n  const depsTail_ = sub.depsTail_\n  let toRemove = depsTail_ ? depsTail_.nextDep_ : sub.deps_\n  while (toRemove) {\n    toRemove = unlink(toRemove, sub)\n  }\n  sub.flags_ &= ~(4 satisfies ReactiveFlags.RecursedCheck)\n}\n\nconst checkDirty = (link: Link, sub: ReactiveNode): boolean => {\n  let stack: Stack<Link> | undefined\n  let checkDepth = 0\n  let dirty = false\n\n  top: while (true) {\n    const dep = link.dep_\n    const flags = dep.flags_\n\n    if (sub.flags_ & (16 satisfies ReactiveFlags.Dirty)) {\n      dirty = true\n    } else if (\n      (flags & (17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty)) ===\n      (17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty)\n    ) {\n      if (update(dep as AlienSignal | AlienComputed)) {\n        const subs = dep.subs_!\n        if (subs.nextSub_) {\n          shallowPropagate(subs)\n        }\n        dirty = true\n      }\n    } else if (\n      (flags & (33 as ReactiveFlags.Mutable | ReactiveFlags.Pending)) ===\n      (33 as ReactiveFlags.Mutable | ReactiveFlags.Pending)\n    ) {\n      if (link.nextSub_ || link.prevSub_) {\n        stack = { value_: link, prev_: stack }\n      }\n      link = dep.deps_!\n      sub = dep\n      ++checkDepth\n      continue\n    }\n\n    if (!dirty) {\n      const nextDep = link.nextDep_\n      if (nextDep) {\n        link = nextDep\n        continue\n      }\n    }\n\n    while (checkDepth--) {\n      const firstSub = sub.subs_!\n      const hasMultipleSubs = firstSub.nextSub_\n      if (hasMultipleSubs) {\n        link = stack!.value_\n        stack = stack!.prev_\n      } else {\n        link = firstSub\n      }\n      if (dirty) {\n        if (update(sub as AlienSignal | AlienComputed)) {\n          if (hasMultipleSubs) {\n            shallowPropagate(firstSub)\n          }\n          sub = link.sub_\n          continue\n        }\n        dirty = false\n      } else {\n        sub.flags_ &= ~(32 satisfies ReactiveFlags.Pending)\n      }\n      sub = link.sub_\n      if (link.nextDep_) {\n        link = link.nextDep_\n        continue top\n      }\n    }\n\n    return dirty\n  }\n}\n\nconst shallowPropagate = (link: Link): void => {\n  do {\n    const sub = link.sub_\n    const flags = sub.flags_\n    if (\n      (flags & (48 as ReactiveFlags.Pending | ReactiveFlags.Dirty)) ===\n      (32 satisfies ReactiveFlags.Pending)\n    ) {\n      sub.flags_ = flags | (16 satisfies ReactiveFlags.Dirty)\n      if (flags & (2 satisfies ReactiveFlags.Watching)) {\n        notify(sub as AlienEffect)\n      }\n    }\n  } while ((link = link.nextSub_!))\n}\n\nconst isValidLink = (checkLink: Link, sub: ReactiveNode): boolean => {\n  let link = sub.depsTail_\n  while (link) {\n    if (link === checkLink) {\n      return true\n    }\n    link = link.prevDep_\n  }\n  return false\n}\n\nexport const getPath = <T = any>(path: string): T | undefined => {\n  let result = root\n  const split = path.split('.')\n  for (const path of split) {\n    if (result == null || !hasOwn(result, path)) {\n      return\n    }\n    result = result[path]\n  }\n  return result as T\n}\n\nconst deep = (value: any, prefix = ''): any => {\n  const isArr = Array.isArray(value)\n  if (isArr || isPojo(value)) {\n    const deepObj = (isArr ? [] : {}) as Record<string, Signal<any>>\n    for (const key in value) {\n      deepObj[key] = signal(\n        deep((value as Record<string, Signal<any>>)[key], `${prefix + key}.`),\n      )\n    }\n    const keys = signal(0)\n    return new Proxy(deepObj, {\n      get(_, prop: string) {\n        // JSON.stringify calls `.toJSON()` directly instead of checking if it exists on the object\n        // so we have to check if `toJSON` is being called and prevent a signal from automatically\n        // being made so JSON.stringify can fallback to the default stringify\n        if (!(prop === 'toJSON' && !hasOwn(deepObj, prop))) {\n          // special case for when prop is an array function because every array function needs to\n          // be reactive to when the keys change\n          if (isArr && prop in Array.prototype) {\n            keys()\n            return deepObj[prop]\n          }\n          // if prop is a symbol just return the symbol because we don't want to make up that theres\n          // an iterator symbol on an object or not\n          if (typeof prop === 'symbol') {\n            return deepObj[prop]\n          }\n          // if obj doesnt have prop OR prop is null or undefined then create a signal and default\n          // to an empty string\n          if (!hasOwn(deepObj, prop) || deepObj[prop]() == null) {\n            deepObj[prop] = signal('')\n            dispatch(prefix + prop, '')\n            keys(keys() + 1)\n          }\n          return deepObj[prop]()\n        }\n      },\n      set(_, prop: string, newValue) {\n        const path = prefix + prop\n        // special case for when setting length so we can make a diff patch\n        if (isArr && prop === 'length') {\n          const oldLength = deepObj[prop] as unknown as number\n          deepObj[prop] = newValue\n          // Setting an array\u2019s length bypasses the `deleteProperty` trap, so manually patch removed indexes.\n          if (oldLength > newValue) {\n            const patch: Record<string, any> = {}\n            for (let i = newValue; i < oldLength; i++) {\n              patch[i] = null\n            }\n            dispatch(prefix.slice(0, -1), patch)\n            keys(keys() + 1)\n          }\n        } else if (hasOwn(deepObj, prop)) {\n          if (newValue == null) {\n            delete deepObj[prop]\n            dispatch(path, null)\n            keys(keys() + 1)\n            // if newValue is a computed set the computed directly instead of wrapping in signal\n          } else if (hasOwn(newValue, computedSymbol)) {\n            deepObj[prop] = newValue\n            dispatch(path, '')\n            // if prop changed after setting it then dispatch\n          } else {\n            const currentValue = deepObj[prop]()\n            const pathStr = `${path}.`\n            if (isPojo(currentValue) && isPojo(newValue)) {\n              for (const key in currentValue) {\n                if (!hasOwn(newValue, key)) {\n                  delete currentValue[key]\n                  dispatch(pathStr + key, null)\n                }\n              }\n              for (const key in newValue) {\n                const nextVal = newValue[key]\n                if (currentValue[key] !== nextVal) {\n                  currentValue[key] = nextVal\n                }\n              }\n            } else if (deepObj[prop](deep(newValue, pathStr))) {\n              dispatch(path, newValue)\n            }\n          }\n          // if newValue is null or undefined then noop\n        } else if (newValue != null) {\n          // if newValue is a computed set the computed directly instead of wrapping in signal\n          if (hasOwn(newValue, computedSymbol)) {\n            deepObj[prop] = newValue\n            dispatch(path, '')\n          } else {\n            deepObj[prop] = signal(deep(newValue, `${path}.`))\n            dispatch(path, newValue)\n          }\n          keys(keys() + 1)\n        }\n\n        return true\n      },\n      deleteProperty(_, prop: string) {\n        delete deepObj[prop]\n        keys(keys() + 1)\n        return true\n      },\n      ownKeys() {\n        keys()\n        return Reflect.ownKeys(deepObj)\n      },\n      has(_, prop) {\n        keys()\n        return prop in deepObj\n      },\n    })\n  }\n  return value\n}\n\nconst dispatch = (path?: string, value?: any) => {\n  if (path !== undefined && value !== undefined) {\n    currentPatch.push([path, value])\n  }\n  if (!batchDepth && currentPatch.length) {\n    const detail = pathToObj(currentPatch)\n    currentPatch.length = 0\n    DOCUMENT.dispatchEvent(\n      new CustomEvent<JSONPatch>(DATASTAR_SIGNAL_PATCH_EVENT, {\n        detail,\n      }),\n    )\n  }\n}\n\nexport const mergePatch = (\n  patch: JSONPatch,\n  { ifMissing }: MergePatchArgs = {},\n): void => {\n  beginBatch()\n  for (const key in patch) {\n    if (patch[key] == null) {\n      if (!ifMissing) {\n        delete root[key]\n      }\n    } else {\n      mergeInner(patch[key], key, root, '', ifMissing)\n    }\n  }\n  endBatch()\n}\n\nexport const mergePaths = (paths: Paths, options?: MergePatchArgs): void =>\n  mergePatch(pathToObj(paths), options)\n\nconst mergeInner = (\n  patch: any,\n  target: string,\n  targetParent: Record<string, any>,\n  prefix: string,\n  ifMissing: boolean | undefined,\n): void => {\n  if (isPojo(patch)) {\n    if (\n      !(\n        hasOwn(targetParent, target) &&\n        (isPojo(targetParent[target]) || Array.isArray(targetParent[target]))\n      )\n    ) {\n      targetParent[target] = {}\n    }\n\n    for (const key in patch) {\n      if (patch[key] == null) {\n        if (!ifMissing) {\n          delete targetParent[target][key]\n        }\n      } else {\n        mergeInner(\n          patch[key],\n          key,\n          targetParent[target],\n          `${prefix + target}.`,\n          ifMissing,\n        )\n      }\n    }\n  } else if (!(ifMissing && hasOwn(targetParent, target))) {\n    targetParent[target] = patch\n  }\n}\n\nconst toRegExp = (val: string | RegExp): RegExp =>\n  typeof val === 'string' ? RegExp(val.replace(/^\\/|\\/$/g, '')) : val\n\n/**\n * Filters the root store based on an include and exclude RegExp\n *\n * @returns The filtered object\n */\nexport const filtered = (\n  { include = /.*/, exclude = /(?!)/ }: SignalFilterOptions = {},\n  obj: JSONPatch = root,\n): Record<string, any> => {\n  const includeRe = toRegExp(include)\n  const excludeRe = toRegExp(exclude)\n  const paths: Paths = []\n\n  const walk = (node: JSONPatch, prefix = '') => {\n    for (const key in node) {\n      const path = prefix + key\n      if (isPojo(node[key])) {\n        walk(node[key], `${path}.`)\n      } else if (includeRe.test(path) && !excludeRe.test(path)) {\n        paths.push([path, getPath(path)])\n      }\n    }\n  }\n\n  walk(obj)\n\n  return pathToObj(paths)\n}\n\nexport const root: Record<string, any> = deep({})\n", "import type { HTMLOrSVG } from '@engine/types'\n\nexport const isHTMLOrSVG = (el: Node): el is HTMLOrSVG =>\n  el instanceof HTMLElement ||\n  el instanceof SVGElement ||\n  el instanceof MathMLElement\n", "import {\n  DATASTAR_FETCH_EVENT,\n  DATASTAR_READY_EVENT,\n  DOCUMENT,\n  MutationObserverClass,\n} from '@engine/consts'\nimport { compileExpression } from '@engine/csp'\nimport { createError } from '@engine/errors'\nimport { root } from '@engine/signals'\nimport type {\n  ActionContext,\n  ActionPlugin,\n  AttributeContext,\n  AttributePlugin,\n  DatastarFetchEvent,\n  HTMLOrSVG,\n  Modifiers,\n  Requirement,\n  WatcherPlugin,\n} from '@engine/types'\nimport { isHTMLOrSVG } from '@utils/dom'\nimport { aliasify, unaliasify } from '@utils/text'\n\nconst actionPlugins: Map<string, ActionPlugin> = new Map()\nconst attributePlugins: Map<string, AttributePlugin> = new Map()\nconst watcherPlugins: Map<string, WatcherPlugin> = new Map()\n\nexport const actions: Record<\n  string,\n  (ctx: ActionContext, ...args: any[]) => any\n> = new Proxy(\n  {},\n  {\n    get: (_, prop: string) => actionPlugins.get(prop)?.apply,\n    has: (_, prop: string) => actionPlugins.has(prop),\n    ownKeys: () => Reflect.ownKeys(actionPlugins),\n    set: () => false,\n    deleteProperty: () => false,\n  },\n)\n\n// Map of cleanups keyed by element, attribute name, and cleanup name\nconst removals = new Map<HTMLOrSVG, Map<string, Map<string, () => void>>>()\n\nconst queuedAttributes: AttributePlugin[] = []\nconst queuedAttributeNames = new Set<string>()\nconst observedRoots = new Set<HTMLOrSVG | ShadowRoot>()\nlet datastarReadyDispatched = false\n\nexport const attribute = <R extends Requirement, B extends boolean>(\n  plugin: AttributePlugin<R, B>,\n): void => {\n  queuedAttributes.push(plugin as unknown as AttributePlugin)\n\n  if (queuedAttributes.length === 1) {\n    setTimeout(() => {\n      for (const attribute of queuedAttributes) {\n        queuedAttributeNames.add(attribute.name)\n        attributePlugins.set(attribute.name, attribute)\n      }\n      queuedAttributes.length = 0\n      const roots = observedRoots.size\n        ? [...observedRoots]\n        : [DOCUMENT.documentElement]\n      for (const root of roots) {\n        applyQueued(root, !observedRoots.has(root))\n      }\n      queuedAttributeNames.clear()\n    })\n  }\n}\n\nexport const action = <T>(plugin: ActionPlugin<T>): void => {\n  actionPlugins.set(plugin.name, plugin)\n}\n\nDOCUMENT.addEventListener(DATASTAR_FETCH_EVENT, ((\n  evt: CustomEvent<DatastarFetchEvent>,\n) => {\n  const plugin = watcherPlugins.get(evt.detail.type)\n  if (plugin) {\n    plugin.apply(\n      {\n        error: createError.bind(0, {\n          plugin: { type: 'watcher', name: plugin.name },\n          element: {\n            id: (evt.target as Element).id,\n            tag: (evt.target as Element).tagName,\n          },\n        }),\n      },\n      evt.detail.argsRaw,\n    )\n  }\n}) as EventListener)\n\nexport const watcher = (plugin: WatcherPlugin): void => {\n  watcherPlugins.set(plugin.name, plugin)\n}\n\nconst cleanupEls = (els: Iterable<HTMLOrSVG>): void => {\n  for (const el of els) {\n    const elCleanups = removals.get(el)\n    if (elCleanups && removals.delete(el)) {\n      for (const attrCleanups of elCleanups.values()) {\n        for (const cleanup of attrCleanups.values()) {\n          cleanup()\n        }\n      }\n    }\n  }\n}\n\nconst aliasedIgnore = aliasify('ignore')\nconst aliasedIgnoreAttr = `[${aliasedIgnore}]`\nconst shouldIgnore = (el: HTMLOrSVG) =>\n  el.hasAttribute(`${aliasedIgnore}__self`) || !!el.closest(aliasedIgnoreAttr)\n\nconst applyEls = (els: Iterable<HTMLOrSVG>, onlyNew?: boolean): void => {\n  for (const el of els) {\n    if (!shouldIgnore(el)) {\n      const appliedKeys = new Set<string>()\n      for (const key in el.dataset) {\n        const attrKey = key.replace(/[A-Z]/g, '-$&').toLowerCase()\n        appliedKeys.add(attrKey)\n        applyAttributePlugin(el, attrKey, el.dataset[key]!, onlyNew)\n      }\n      for (const attr of Array.from(el.attributes)) {\n        if (!attr.name.startsWith('data-')) continue\n        const attrKey = attr.name.slice(5)\n        if (appliedKeys.has(attrKey)) continue\n        applyAttributePlugin(el, attrKey, attr.value, onlyNew)\n      }\n    }\n  }\n}\n\nconst observe = (mutations: MutationRecord[]) => {\n  for (const {\n    target,\n    type,\n    attributeName,\n    addedNodes,\n    removedNodes,\n  } of mutations) {\n    if (type === 'childList') {\n      for (const node of removedNodes) {\n        if (isHTMLOrSVG(node)) {\n          cleanupEls([node])\n          cleanupEls(node.querySelectorAll<HTMLOrSVG>('*'))\n        }\n      }\n\n      for (const node of addedNodes) {\n        if (isHTMLOrSVG(node)) {\n          applyEls([node])\n          applyEls(node.querySelectorAll<HTMLOrSVG>('*'))\n        }\n      }\n    } else if (\n      type === 'attributes' &&\n      attributeName!.startsWith('data-') &&\n      isHTMLOrSVG(target) &&\n      !shouldIgnore(target)\n    ) {\n      // skip over 'data-'\n      const rawAttrKey = attributeName!.slice(5)\n      const key = unaliasify(rawAttrKey)\n      if (!key) continue\n      const value = target.getAttribute(attributeName!)\n      if (value === null) {\n        const elCleanups = removals.get(target)\n        if (elCleanups) {\n          const attrCleanups = elCleanups.get(key)\n          if (attrCleanups) {\n            for (const cleanup of attrCleanups.values()) {\n              cleanup()\n            }\n            elCleanups.delete(key)\n          }\n        }\n      } else {\n        applyAttributePlugin(target, rawAttrKey, value)\n      }\n    }\n  }\n}\n\n// TODO: mutation observer per root so applying to web component doesnt overwrite main observer\nconst mutationObserver = new MutationObserverClass(observe)\n\nexport const parseAttributeKey = (\n  rawKey: string,\n): {\n  pluginName: string\n  key: string | undefined\n  mods: Modifiers\n} => {\n  const [namePart, ...rawModifiers] = rawKey.split('__')\n  const [pluginName, key] = namePart.split(/:(.+)/)\n  const mods: Modifiers = new Map()\n\n  for (const rawMod of rawModifiers) {\n    const [label, ...mod] = rawMod.split('.')\n    mods.set(label, new Set(mod))\n  }\n\n  return { pluginName, key, mods }\n}\n\nexport const isDocumentObserverActive = () =>\n  observedRoots.has(DOCUMENT.documentElement)\n\nconst dispatchDatastarReady = () => {\n  if (datastarReadyDispatched || !isDocumentObserverActive()) return\n  datastarReadyDispatched = true\n  DOCUMENT.dispatchEvent(new Event(DATASTAR_READY_EVENT))\n}\n\nconst applyQueued = (\n  root: HTMLOrSVG | ShadowRoot = DOCUMENT.documentElement,\n  observeRoot = true,\n): void => {\n  if (isHTMLOrSVG(root)) {\n    applyEls([root], true)\n  }\n  applyEls(root.querySelectorAll<HTMLOrSVG>('*'), true)\n\n  if (observeRoot) {\n    mutationObserver.observe(root, {\n      subtree: true,\n      childList: true,\n      attributes: true,\n    })\n    observedRoots.add(root)\n    dispatchDatastarReady()\n  }\n}\n\nexport const apply = (\n  root: HTMLOrSVG | ShadowRoot = DOCUMENT.documentElement,\n  observeRoot = true,\n): void => {\n  if (isHTMLOrSVG(root)) {\n    applyEls([root])\n  }\n  applyEls(root.querySelectorAll<HTMLOrSVG>('*'))\n\n  if (observeRoot) {\n    mutationObserver.observe(root, {\n      subtree: true,\n      childList: true,\n      attributes: true,\n    })\n    observedRoots.add(root)\n    dispatchDatastarReady()\n  }\n}\n\nexport const applyElement = (el: HTMLOrSVG, onlyNew = false): void => {\n  applyEls([el], onlyNew)\n}\n\nconst applyAttributePlugin = (\n  el: HTMLOrSVG,\n  attrKey: string,\n  value: string,\n  onlyNew?: boolean,\n): void => {\n  const rawKey = unaliasify(attrKey)\n  if (!rawKey) return\n  const { pluginName, key, mods } = parseAttributeKey(rawKey)\n  const plugin = attributePlugins.get(pluginName)\n  const shouldApply =\n    (!onlyNew || queuedAttributeNames.has(pluginName)) && !!plugin\n  if (shouldApply) {\n    const ctx = {\n      el,\n      rawKey,\n      mods,\n      error: createError.bind(0, {\n        plugin: { type: 'attribute', name: plugin.name },\n        element: { id: el.id, tag: el.tagName },\n        expression: { rawKey, key, value },\n      }),\n      key,\n      value,\n      loadedPluginNames: {\n        actions: new Set(actionPlugins.keys()),\n        attributes: new Set(attributePlugins.keys()),\n      },\n      rx: undefined,\n    } as AttributeContext\n\n    const keyReq =\n      (plugin.requirement &&\n        (typeof plugin.requirement === 'string'\n          ? plugin.requirement\n          : plugin.requirement.key)) ||\n      'allowed'\n    const valueReq =\n      (plugin.requirement &&\n        (typeof plugin.requirement === 'string'\n          ? plugin.requirement\n          : plugin.requirement.value)) ||\n      'allowed'\n\n    const keyProvided = key !== undefined && key !== null && key !== ''\n    const valueProvided = value !== undefined && value !== null && value !== ''\n\n    if (keyProvided) {\n      if (keyReq === 'denied') {\n        throw ctx.error('KeyNotAllowed')\n      }\n    } else if (keyReq === 'must') {\n      throw ctx.error('KeyRequired')\n    }\n\n    if (valueProvided) {\n      if (valueReq === 'denied') {\n        throw ctx.error('ValueNotAllowed')\n      }\n    } else if (valueReq === 'must') {\n      throw ctx.error('ValueRequired')\n    }\n\n    if (keyReq === 'exclusive' || valueReq === 'exclusive') {\n      if (keyProvided && valueProvided) {\n        throw ctx.error('KeyAndValueProvided')\n      }\n      if (!keyProvided && !valueProvided) {\n        throw ctx.error('KeyOrValueRequired')\n      }\n    }\n\n    const cleanups = new Map<string, () => void>()\n    if (valueProvided) {\n      let cachedRx: GenRxFn\n      ctx.rx = (...args: any[]) => {\n        if (!cachedRx) {\n          cachedRx = genRx(value, {\n            returnsValue_: plugin.returnsValue,\n            argNames_: plugin.argNames,\n            cleanups_: cleanups,\n          })\n        }\n        return cachedRx(el, ...args)\n      }\n    }\n\n    const cleanup = plugin.apply(ctx)\n    if (cleanup) {\n      cleanups.set('attribute', cleanup)\n    }\n\n    let elCleanups = removals.get(el)\n    if (elCleanups) {\n      const attrCleanups = elCleanups.get(rawKey)\n      if (attrCleanups) {\n        for (const oldCleanup of attrCleanups.values()) {\n          oldCleanup()\n        }\n      }\n    } else {\n      elCleanups = new Map()\n      removals.set(el, elCleanups)\n    }\n    elCleanups.set(rawKey, cleanups)\n  }\n}\n\ntype GenRxOptions = {\n  returnsValue_?: boolean\n  argNames_?: string[]\n  cleanups_?: Map<string, () => void>\n}\n\ntype GenRxFn = <T>(el: HTMLOrSVG, ...args: any[]) => T\n\nconst signalPath = (name: string): string =>\n  name\n    .split('.')\n    .reduce((path, part) => `${path}['${part}']`, '$')\n\nexport const genRx = (\n  value: string,\n  {\n    returnsValue_: returnsValue = false,\n    argNames_: argNames = [],\n    cleanups_: cleanups = new Map(),\n  }: GenRxOptions = {},\n): GenRxFn => {\n  let expr = ''\n  if (returnsValue) {\n    // This regex allows Datastar expressions to support nested\n    // regex and strings that contain ; without breaking.\n    //\n    // Each of these regex defines a block type we want to match\n    // (importantly we ignore the content within these blocks):\n    //\n    // regex              \\/(?:\\\\\\/|[^\\/])*\\/\n    // double quotes      \"(?:\\\\\"|[^\\\"])*\"\n    // single quotes      '(?:\\\\'|[^'])*'\n    // ticks              `(?:\\\\`|[^`])*`\n    // iife               \\(\\s*(?:(?:function)\\s*\\(\\s*\\)|(?:\\(\\s*\\))\\s*=>)\\s*(?:\\{[\\s\\S]*?\\}|[^;)\\{]*)\\s*\\)\\s*\\(\\s*\\)\n    //\n    // The iife support is (intentionally) limited. It only supports\n    // function and arrow syntax with no arguments, and no nested IIFEs.\n    //\n    // We also want to match the non delimiter part of statements\n    // note we only support ; statement delimiters:\n    // [^;]\n    //\n    // Optimized using non-capturing groups (?:...) to prevent unnecessary backtracking.\n    const statementRe =\n      /(?:\\/(?:\\\\\\/|[^/])*\\/|\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|`(?:\\\\`|[^`])*`|\\(\\s*(?:(?:function)\\s*\\(\\s*\\)|(?:\\(\\s*\\))\\s*=>)\\s*(?:\\{[\\s\\S]*?\\}|[^;){]*)\\s*\\)\\s*\\(\\s*\\)|[^;])+/gm\n    const statements = value.trim().match(statementRe)\n    if (statements) {\n      const lastIdx = statements.length - 1\n      const last = statements[lastIdx].trim()\n      if (!last.startsWith('return')) {\n        statements[lastIdx] = `return (${last});`\n      }\n      expr = statements.join(';\\n')\n    }\n  } else {\n    expr = value.trim()\n  }\n\n  // Replace signal references with bracket notation and action calls with the internal action dispatcher.\n  // Examples:\n  //   $count          -> $['count']\n  //   $count--        -> $['count']--\n  //   $foo.bar        -> $['foo']['bar']\n  //   $foo-bar        -> $['foo-bar']\n  //   $foo.bar-baz    -> $['foo']['bar-baz']\n  //   $foo-$bar       -> $['foo']-$['bar']\n  //   $arr[$index]    -> $['arr'][$['index']]\n  //   $['foo']        -> $['foo']\n  //   $foo[obj.bar]   -> $['foo'][obj.bar]\n  //   $foo['bar.baz'] -> $['foo']['bar.baz']\n  //   $123            -> $['123']\n  //   $foo.0.name     -> $['foo']['0']['name']\n  //   @get('/foo')    -> __action(\"get\",evt,'/foo')\n\n  // Skip replacements inside string/template literals.\n  // Template interpolation support rewrites `${...}` only when braces are non-nested.\n  expr = expr.replace(\n    /(?:\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'|`[^`\\\\$]*(?:(?:\\\\.|\\$(?!\\{))[^`\\\\$]*)*`)|\\$\\{([^{}]*)\\}|\\$(\\w+(?:[.-]\\w+)*)|@([A-Za-z_$][\\w$]*)\\(/g,\n    (match, interpolationExpr, signalName, actionName) => {\n      if (interpolationExpr !== undefined) {\n        return `\\${${interpolationExpr\n          .replace(\n            /\\$(\\w+(?:[.-]\\w+)*)/g,\n            (_: string, name: string) => signalPath(name),\n          )\n          .replace(/@([A-Za-z_$][\\w$]*)\\(/g, '__action(\"$1\",evt,')}}`\n      }\n      if (signalName) return signalPath(signalName)\n      if (actionName) return `__action(\"${actionName}\",evt,`\n      return match\n    },\n  )\n\n  try {\n    const fn = compileExpression(\n      ['el', '$', '__action', 'evt', ...argNames],\n      expr,\n    )\n    return (el: HTMLOrSVG, ...args: any[]) => {\n      const action = (name: string, evt: Event | undefined, ...args: any[]) => {\n        const err = createError.bind(0, {\n          plugin: { type: 'action', name },\n          element: { id: el.id, tag: el.tagName },\n          expression: {\n            fnContent: expr,\n            value,\n          },\n        })\n        const fn = actions[name]\n        if (fn) {\n          return fn(\n            {\n              el,\n              evt,\n              error: err,\n              cleanups,\n            },\n            ...args,\n          )\n        }\n        throw err('UndefinedAction')\n      }\n      try {\n        return fn(el, root, action, undefined, ...args)\n      } catch (e: any) {\n        console.error(e)\n        throw createError(\n          {\n            element: { id: el.id, tag: el.tagName },\n            expression: {\n              fnContent: expr,\n              value,\n            },\n            error: e.message,\n          },\n          'ExecuteExpression',\n        )\n      }\n    }\n  } catch (e: any) {\n    console.error(e)\n    throw createError(\n      {\n        expression: {\n          fnContent: expr,\n          value,\n        },\n        error: e.message,\n      },\n      'GenerateExpression',\n    )\n  }\n}\n", "// Icon: ion:eye\n// Slug: Access signals without subscribing to changes.\n// Description: Allows accessing signals without subscribing to their changes in expressions.\n\nimport { action } from '@engine'\nimport { startPeeking, stopPeeking } from '@engine/signals'\n\naction({\n  name: 'peek',\n  apply(_, fn: () => any) {\n    startPeeking()\n    try {\n      return fn()\n    } finally {\n      stopPeeking()\n    }\n  },\n})\n", "// Icon: ion:checkmark-round\n// Slug: Sets the value of all matching signals.\n// Description: Sets the value of all matching signals (or all signals if no filter is used) to the expression provided in the first argument.\n\nimport { action } from '@engine'\nimport {\n  filtered,\n  mergePatch,\n  startPeeking,\n  stopPeeking,\n} from '@engine/signals'\nimport type { SignalFilterOptions } from '@engine/types'\nimport { updateLeaves } from '@utils/paths'\n\naction({\n  name: 'setAll',\n  apply(_, value: any, filter: SignalFilterOptions) {\n    // peek because in an effect you would be subscribing to signals and then setting them which\n    // would cause an infinite loop and why would you want to infinite loop on purpose\n    startPeeking()\n    const masked = filtered(filter)\n    updateLeaves(masked, () => value)\n    mergePatch(masked)\n    stopPeeking()\n  },\n})\n", "// Icon: material-symbols:toggle-off\n// Slug: Toggles the value of all matching signals.\n// Description: Toggles the boolean value of all matching signals (or all signals if no filter is used).\n\nimport { action } from '@engine'\nimport {\n  filtered,\n  mergePatch,\n  startPeeking,\n  stopPeeking,\n} from '@engine/signals'\nimport type { SignalFilterOptions } from '@engine/types'\nimport { updateLeaves } from '@utils/paths'\n\naction({\n  name: 'toggleAll',\n  apply(_, filter: SignalFilterOptions) {\n    // peek because in an effect you would be subscribing to signals and then setting them which\n    // would cause an infinite loop and why would you want to infinite loop on purpose\n    startPeeking()\n    const masked = filtered(filter)\n    updateLeaves(masked, (oldValue: any) => !oldValue)\n    mergePatch(masked)\n    stopPeeking()\n  },\n})\n", "// Icon: mdi:arrow\n// Slug: Sends fetch requests to the backend.\n// Description: Sends fetch requests to the backend and handles responses.\n\nimport { action } from '@engine'\nimport {\n  DATASTAR_FETCH_EVENT,\n  DOCUMENT,\n  HTMLInput,\n} from '@engine/consts'\nimport { prepareScript } from '@engine/csp'\nimport { filtered, startPeeking, stopPeeking } from '@engine/signals'\nimport type {\n  DatastarFetchEvent,\n  HTMLOrSVG,\n  SignalFilterOptions,\n  WatcherArgs,\n} from '@engine/types'\nimport { kebab } from '@utils/text'\n\n// Map of abort controllers keyed by method and URL\nconst abortControllers = new Map<string, Map<string, AbortController>>()\nconst methodSupportsRequestBody = (method: string): boolean =>\n  !['GET', 'DELETE'].includes(method)\n\nconst createHttpMethod = (\n  name: string,\n  method: string,\n  openWhenHiddenDefault: boolean = true,\n): void =>\n  action({\n    name,\n    apply: async (\n      { el, evt, error, cleanups },\n      url: string,\n      {\n        selector,\n        headers: userHeaders,\n        contentType = 'json',\n        filterSignals: { include = /.*/, exclude = /(^|\\.)_/ } = {},\n        openWhenHidden = openWhenHiddenDefault,\n        payload,\n        requestCancellation = 'auto',\n        retry = 'auto',\n        retryInterval = 1_000,\n        retryScaler = 2,\n        retryMaxWait = 30_000,\n        retryMaxCount = 10,\n      }: FetchArgs = {},\n    ) => {\n      const controller =\n        requestCancellation instanceof AbortController\n          ? requestCancellation\n          : new AbortController()\n      const cleanupName = `@${name}`\n      const cancelOnDisconnect = requestCancellation === 'cleanup'\n      let requestCleanup: (() => void) | undefined\n      if (requestCancellation === 'auto' || cancelOnDisconnect) {\n        const controllers = abortControllers.get(method) ?? new Map()\n        controllers.get(url)?.abort()\n        controllers.set(url, controller)\n        abortControllers.set(method, controllers)\n      }\n      if (cancelOnDisconnect) {\n        cleanups.get(cleanupName)?.()\n        requestCleanup = async () => {\n          controller.abort()\n          // wait one tick for FINISHED to fire\n          await Promise.resolve()\n        }\n        cleanups.set(cleanupName, requestCleanup)\n      }\n\n      let cleanupFn = () => {}\n\n      try {\n        if (!url?.length) {\n          throw error('FetchNoUrlProvided', { action })\n        }\n\n        const headers: Record<string, any> = {\n          Accept: 'text/event-stream, text/html, application/json',\n          'Datastar-Request': true,\n        }\n        if (contentType === 'json' && methodSupportsRequestBody(method)) {\n          headers['Content-Type'] = 'application/json'\n        }\n        Object.assign(headers, userHeaders)\n\n        // We ignore the content-type header if using form data\n        // if missing the boundary will be set automatically\n\n        const req: FetchEventSourceInit = {\n          input_: '',\n          method,\n          headers,\n          openWhenHidden_: openWhenHidden,\n          retry_: retry,\n          retryInterval_: retryInterval,\n          retryScaler_: retryScaler,\n          retryMaxWait_: retryMaxWait,\n          retryMaxCount_: retryMaxCount,\n          signal: controller.signal,\n          onopen_: async (response: Response) => {\n            if (response.status >= 400) {\n              dispatchFetch(ERROR, el, { status: response.status.toString() })\n            }\n          },\n          onmessage_: (evt) => {\n            if (!evt.event_.startsWith('datastar')) return\n            const type = evt.event_\n            const argsRawLines: Record<string, string[]> = {}\n\n            for (const line of evt.data_.split('\\n')) {\n              const i = line.indexOf(' ')\n              const k = line.slice(0, i)\n              const v = line.slice(i + 1)\n              ;(argsRawLines[k] ||= []).push(v)\n            }\n\n            const argsRaw = Object.fromEntries(\n              Object.entries(argsRawLines).map(([k, v]) => [k, v.join('\\n')]),\n            )\n\n            if (!cancelOnDisconnect || el.isConnected) {\n              dispatchFetch(type, el, argsRaw)\n            }\n          },\n          onerror: (err) => {\n            if (isWrongContent(err)) {\n              // don't retry if the content-type is wrong\n              throw error('FetchExpectedTextEventStream', { url })\n            }\n          },\n        }\n\n        const buildFetchEventSourceInit = () => {\n          const urlInstance = new URL(url, DOCUMENT.baseURI)\n          const queryParams = new URLSearchParams(urlInstance.search)\n          if (contentType === 'json') {\n            startPeeking()\n            const requestPayload =\n              payload !== undefined ? payload : filtered({ include, exclude })\n            stopPeeking()\n            const body = JSON.stringify(requestPayload)\n            if (methodSupportsRequestBody(method)) {\n              req.body = body\n            } else {\n              queryParams.set('datastar', body)\n            }\n          } else if (contentType === 'form') {\n            const formEl = (\n              selector ? DOCUMENT.querySelector(selector) : el.closest('form')\n            ) as HTMLFormElement\n            if (!formEl) {\n              throw error('FetchFormNotFound', { action, selector })\n            }\n\n            // Validate the form\n            if (!formEl.noValidate && !formEl.checkValidity()) {\n              formEl.reportValidity()\n              return\n            }\n\n            // Collect the form data\n            const formData = new FormData(formEl)\n            let submitter = el as HTMLElement | null\n\n            if (el === formEl && evt instanceof SubmitEvent) {\n              // Get the submitter from the event\n              submitter = evt.submitter\n            } else {\n              // Prevent the form being submitted\n              const preventDefault = (evt: Event) => evt.preventDefault()\n              formEl.addEventListener('submit', preventDefault)\n              cleanupFn = () => {\n                formEl.removeEventListener('submit', preventDefault)\n              }\n            }\n\n            // Append the value of the form submitter if it is a valid submitter and has a name\n            if (\n              submitter instanceof HTMLButtonElement ||\n              (submitter instanceof HTMLInput &&\n                submitter.type === 'submit')\n            ) {\n              const name = submitter.getAttribute('name')\n              if (name) formData.append(name, submitter.value)\n            }\n\n            const multipart =\n              formEl.getAttribute('enctype') === 'multipart/form-data'\n            // Leave the `Content-Type` header empty for multipart encoding so the browser can set it automatically with the correct boundary\n            if (!multipart) {\n              headers['Content-Type'] = 'application/x-www-form-urlencoded'\n            }\n\n            const formParams = new URLSearchParams(formData as any)\n            if (methodSupportsRequestBody(method)) {\n              req.body = multipart ? formData : formParams\n            } else {\n              for (const [key, value] of formParams) {\n                queryParams.append(key, value)\n              }\n            }\n          } else {\n            throw error('FetchInvalidContentType', { action, contentType })\n          }\n          urlInstance.search = queryParams.toString()\n          req.input_ = urlInstance.toString()\n          return req\n        }\n\n        dispatchFetch(STARTED, el, {})\n\n        try {\n          await fetchEventSource(\n            el,\n            buildFetchEventSourceInit,\n            cancelOnDisconnect,\n          )\n        } catch (err: any) {\n          if (!isWrongContent(err)) {\n            throw error('FetchFailed', { method, url, error: err.message })\n          }\n          // exit gracefully and do nothing if the content-type is wrong\n          // this can happen if the client is sending a request\n          // where no response is expected, and they haven\u2019t\n          // set the content-type to text/event-stream\n        }\n      } finally {\n        dispatchFetch(FINISHED, el, {})\n        cleanupFn()\n        if (cleanups.get(cleanupName) === requestCleanup) {\n          cleanups.delete(cleanupName)\n        }\n      }\n    },\n  })\n\ncreateHttpMethod('get', 'GET', false)\ncreateHttpMethod('patch', 'PATCH')\ncreateHttpMethod('post', 'POST')\ncreateHttpMethod('put', 'PUT')\ncreateHttpMethod('query', 'QUERY')\ncreateHttpMethod('delete', 'DELETE')\n\nexport const STARTED = 'started'\nexport const FINISHED = 'finished'\nexport const ERROR = 'error'\nexport const RETRYING = 'retrying'\nexport const RETRIES_FAILED = 'retries-failed'\n\nconst dispatchFetch = (type: string, el: HTMLOrSVG, argsRaw: WatcherArgs) =>\n  DOCUMENT.dispatchEvent(\n    new CustomEvent<DatastarFetchEvent>(DATASTAR_FETCH_EVENT, {\n      detail: { type, el, argsRaw },\n    }),\n  )\n\nconst isWrongContent = (err: any) => `${err}`.includes('text/event-stream')\n\ntype ResponseOverrides =\n  | {\n      selector?: string\n      mode?: string\n      namespace?: string\n      useViewTransition?: boolean\n    }\n  | {\n      onlyIfMissing?: boolean\n    }\n\nexport type FetchArgs = {\n  selector?: string\n  headers?: Record<string, string>\n  contentType?: 'json' | 'form'\n  filterSignals?: SignalFilterOptions\n  openWhenHidden?: boolean\n  payload?: any\n  requestCancellation?: 'auto' | 'cleanup' | 'disabled' | AbortController\n  responseOverrides?: ResponseOverrides\n  retry?: 'auto' | 'error' | 'always' | 'never'\n  retryInterval?: number\n  retryScaler?: number\n  retryMaxWait?: number\n  retryMaxCount?: number\n}\n\n// Below originally from https://github.com/Azure/fetch-event-source/blob/main/LICENSE\n\n/**\n * Represents a message sent in an event stream\n * https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format\n */\n\ninterface EventSourceMessage {\n  id_: string\n  event_: string\n  data_: string\n  retry_?: number\n}\n\n/**\n * Converts a ReadableStream into a callback pattern.\n * @param stream The input ReadableStream.\n * @param onChunk A function that will be called on each new byte chunk in the stream.\n * @returns {Promise<void>} A promise that will be resolved when the stream closes.\n */\nconst getBytes = async (\n  stream: ReadableStream<Uint8Array>,\n  onChunk: (arr: Uint8Array) => void,\n): Promise<void> => {\n  const reader = stream.getReader()\n  let result = await reader.read()\n  while (!result.done) {\n    onChunk(result.value)\n    result = await reader.read()\n  }\n}\n\nconst getLines = (onLine: (line: Uint8Array, fieldLength: number) => void) => {\n  let buffer: Uint8Array | undefined\n  let position: number // current read position\n  let fieldLength: number // length of the `field` portion of the line\n  let discardTrailingNewline = false\n\n  // return a function that can process each incoming byte chunk:\n  return (arr: Uint8Array) => {\n    if (!buffer) {\n      buffer = arr\n      position = 0\n      fieldLength = -1\n    } else {\n      // we're still parsing the old line. Append the new bytes into buffer:\n      const next = new Uint8Array(buffer.length + arr.length)\n      next.set(buffer)\n      next.set(arr, buffer.length)\n      buffer = next\n    }\n\n    const bufLength = buffer.length\n    let lineStart = 0 // index where the current line starts\n    while (position < bufLength) {\n      if (discardTrailingNewline) {\n        if (buffer[position] === 10) lineStart = ++position // skip to next char\n        discardTrailingNewline = false\n      }\n\n      // start looking forward till the end of line:\n      let lineEnd = -1 // index of the \\r or \\n char\n      for (; position < bufLength && lineEnd === -1; ++position) {\n        switch (buffer[position]) {\n          case 58: // :\n            if (fieldLength === -1) {\n              // first colon in line\n              fieldLength = position - lineStart\n            }\n            break\n          // @ts-expect-error:7029 \\r case below should fallthrough to \\n:\n          // biome-ignore lint/suspicious/noFallthroughSwitchClause: intentional fallthrough for CR to LF\n          case 13: // \\r\n            discardTrailingNewline = true\n          case 10: // \\n\n            lineEnd = position\n            break\n        }\n      }\n\n      if (lineEnd === -1) break // Wait for the next arr and then continue parsing\n\n      // we've reached the line end, send it out:\n      onLine(buffer.subarray(lineStart, lineEnd), fieldLength)\n      lineStart = position // we're now on the next line\n      fieldLength = -1\n    }\n\n    if (lineStart === bufLength)\n      buffer = undefined // we've finished reading it\n    else if (lineStart) {\n      // Create a new view into buffer beginning at lineStart so we don't\n      // need to copy over the previous lines when we get the new arr:\n      buffer = buffer.subarray(lineStart)\n      position -= lineStart\n    }\n  }\n}\n\nconst getMessages = (\n  onId: (id: string) => void,\n  onRetry: (retry: number) => void,\n  onMessage?: (msg: EventSourceMessage) => void,\n): ((line: Uint8Array, fieldLength: number) => void) => {\n  let message = newMessage()\n  const decoder = new TextDecoder()\n\n  // return a function that can process each incoming line buffer:\n  return (line, fieldLength) => {\n    if (!line.length) {\n      // empty line denotes end of message. Trigger the callback and start a new message:\n      onMessage?.(message)\n      message = newMessage()\n    } else if (fieldLength > 0) {\n      // exclude comments and lines with no values\n      // line is of format \"<field>:<value>\" or \"<field>: <value>\"\n      // https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation\n      const field = decoder.decode(line.subarray(0, fieldLength))\n      const valueOffset = fieldLength + (line[fieldLength + 1] === 32 ? 2 : 1)\n      const value = decoder.decode(line.subarray(valueOffset))\n\n      switch (field) {\n        case 'data':\n          message.data_ = message.data_\n            ? `${message.data_}\\n${value}`\n            : value\n          break\n        case 'event':\n          message.event_ = value\n          break\n        case 'id':\n          onId((message.id_ = value))\n          break\n        case 'retry': {\n          const retry = +value\n          if (!Number.isNaN(retry)) {\n            // per spec, ignore non-integers\n            onRetry((message.retry_ = retry))\n          }\n          break\n        }\n      }\n    }\n  }\n}\n\nconst newMessage = (): EventSourceMessage => ({\n  // data, event, and id must be initialized to empty strings:\n  // https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation\n  // retry should be initialized to undefined so we return a consistent shape\n  // to the js engine all the time: https://mathiasbynens.be/notes/shapes-ics#takeaways\n  data_: '',\n  event_: '',\n  id_: '',\n  retry_: undefined,\n})\n\ntype FetchEventSourceInit =\n  | (RequestInit & {\n      input_: RequestInfo\n      headers?: Record<string, string>\n      onopen_: (response: Response) => Promise<void>\n      onmessage_: (ev: EventSourceMessage) => void\n      onerror?: (err: any) => void\n      openWhenHidden_: boolean\n      retry_: 'auto' | 'error' | 'always' | 'never'\n      retryInterval_: number\n      retryScaler_: number\n      retryMaxWait_: number\n      retryMaxCount_: number\n      responseOverrides_?: ResponseOverrides\n    })\n  | undefined\n\nconst fetchEventSource = (\n  el: HTMLOrSVG,\n  buildFetchEventSourceInit: () => FetchEventSourceInit,\n  cancelOnDisconnect: boolean,\n): Promise<void> => {\n  return new Promise<void>((resolve, reject) => {\n    const fetchInit = buildFetchEventSourceInit()\n    if (!fetchInit) {\n      return\n    }\n    let {\n      input_: input,\n      signal: inputSignal,\n      headers: inputHeaders,\n      onopen_: inputOnOpen,\n      onmessage_: onmessage,\n      openWhenHidden_: openWhenHidden,\n      retry_: retry,\n      retryInterval_: retryInterval,\n      retryScaler_: retryScaler,\n      retryMaxWait_: retryMaxWait,\n      retryMaxCount_: retryMaxCount,\n      responseOverrides_: responseOverrides,\n      ...rest\n    }: FetchEventSourceInit = fetchInit\n\n    // make a copy of the input headers since we may modify it below:\n    const headers: Record<string, string> = {\n      ...inputHeaders,\n    }\n\n    let curRequestController: AbortController\n\n    const rebuildAndRetry = () => {\n      const currentFetchInit = buildFetchEventSourceInit()\n      if (!currentFetchInit) return\n\n      input = currentFetchInit.input_\n      rest.body = currentFetchInit.body\n      create()\n    }\n\n    const onVisibilityChange = () => {\n      curRequestController.abort()\n      if (!DOCUMENT.hidden) {\n        rebuildAndRetry()\n      }\n    }\n\n    if (!openWhenHidden) {\n      DOCUMENT.addEventListener('visibilitychange', onVisibilityChange)\n    }\n\n    let retryTimer: ReturnType<typeof setTimeout> | undefined\n    const dispose = () => {\n      DOCUMENT.removeEventListener('visibilitychange', onVisibilityChange)\n      clearTimeout(retryTimer)\n      curRequestController.abort()\n    }\n\n    // if the incoming signal aborts, dispose resources and resolve:\n    inputSignal!.addEventListener('abort', () => {\n      dispose()\n      resolve() // don't waste time constructing/logging errors\n    })\n\n    const onopen = inputOnOpen\n\n    let retries = 0\n    let baseRetryInterval = retryInterval\n\n    const retryRequest = () => {\n      if (retries < retryMaxCount) {\n        dispatchFetch(RETRYING, el, {})\n        clearTimeout(retryTimer)\n        retryTimer = setTimeout(rebuildAndRetry, retryInterval)\n        retries++\n        // Prepare the interval for the next retry (exponential backoff)\n        retryInterval = Math.min(retryInterval * retryScaler, retryMaxWait)\n      } else {\n        dispatchFetch(RETRIES_FAILED, el, {})\n        dispose()\n        reject('Max retries reached.')\n      }\n    }\n\n    const create = async () => {\n      curRequestController = new AbortController()\n      const curRequestSignal = curRequestController.signal\n      try {\n        const response = await fetch(input, {\n          ...rest,\n          headers,\n          signal: curRequestSignal,\n        })\n\n        await onopen(response)\n\n        const dispatchNonSSE = async (\n          dispatchType: string,\n          response: Response,\n          name: string,\n          responseOverrides?: ResponseOverrides,\n          ...argNames: string[]\n        ) => {\n          const argsRaw: WatcherArgs = {\n            [name]: await response.text(),\n          }\n          for (const n of argNames) {\n            let v = response.headers.get(`datastar-${kebab(n)}`)\n            if (responseOverrides) {\n              const o = (responseOverrides as any)[n]\n              if (o) v = typeof o === 'string' ? o : JSON.stringify(o)\n            }\n            if (v) argsRaw[n] = v\n          }\n          if (!cancelOnDisconnect || el.isConnected) {\n            dispatchFetch(dispatchType, el, argsRaw)\n          }\n          dispose()\n          resolve()\n        }\n\n        const status = response.status\n        const isNoContentStatus = status === 204\n        const isRedirectStatus = status >= 300 && status < 400\n        const isErrorStatus = status >= 400 && status < 600\n\n        if (status !== 200) {\n          if (\n            retry !== 'never' &&\n            !isNoContentStatus &&\n            !isRedirectStatus &&\n            (retry === 'always' || (retry === 'error' && isErrorStatus))\n          ) {\n            retryRequest()\n            return\n          }\n          dispose()\n          resolve()\n          return\n        }\n\n        // on successful connection, reset the retry logic\n        retries = 0\n        retryInterval = baseRetryInterval\n\n        const ct = response.headers.get('Content-Type')\n        if (ct?.includes('text/html')) {\n          return await dispatchNonSSE(\n            'datastar-patch-elements',\n            response,\n            'elements',\n            responseOverrides,\n            'selector',\n            'mode',\n            'namespace',\n            'useViewTransition',\n          )\n        }\n\n        if (ct?.includes('application/json')) {\n          return await dispatchNonSSE(\n            'datastar-patch-signals',\n            response,\n            'signals',\n            responseOverrides,\n            'onlyIfMissing',\n          )\n        }\n\n        if (ct?.includes('text/javascript')) {\n          const script = DOCUMENT.createElement('script')\n          const scriptAttributesHeader = response.headers.get(\n            'datastar-script-attributes',\n          )\n\n          if (scriptAttributesHeader) {\n            for (const [name, value] of Object.entries(\n              JSON.parse(scriptAttributesHeader),\n            )) {\n              script.setAttribute(name, value as string)\n            }\n          }\n          const content = await response.text()\n          prepareScript(script, content)\n          DOCUMENT.head.appendChild(script)\n          dispose()\n          return\n        }\n\n        await getBytes(\n          response.body!,\n          getLines(\n            getMessages(\n              (id) => {\n                if (id) {\n                  // signals the id and send it back on the next retry:\n                  headers['last-event-id'] = id\n                } else {\n                  // don't send the last-event-id header anymore:\n                  delete headers['last-event-id']\n                }\n              },\n              (retry) => {\n                baseRetryInterval = retryInterval = retry\n              },\n              onmessage,\n            ),\n          ),\n        )\n\n        if (retry === 'always' && !isRedirectStatus) {\n          retryRequest()\n          return\n        }\n\n        dispose()\n        resolve()\n      } catch {\n        if (!curRequestSignal.aborted) {\n          try {\n            retryRequest()\n          } catch (innerErr) {\n            dispose()\n            reject(innerErr)\n          }\n        }\n      }\n    }\n\n    create()\n  })\n}\n", "// Icon: material-symbols:edit-attributes-outline\n// Slug: Syncs the value of an attribute with an expression.\n// Description: Sets the value of any HTML attribute to an expression, and keeps it in sync.\n\nimport { attribute } from '@engine'\nimport { MutationObserverClass } from '@engine/consts'\nimport { effect } from '@engine/signals'\n\nattribute({\n  name: 'attr',\n  requirement: { value: 'must' },\n  returnsValue: true,\n  apply({ el, key, rx }) {\n    const syncAttr = (key: string, val: any) => {\n      if (val === '' || val === true) {\n        el.setAttribute(key, '')\n      } else if (val === false || val == null) {\n        el.removeAttribute(key)\n      } else if (typeof val === 'string') {\n        el.setAttribute(key, val)\n      } else if (typeof val === 'function') {\n        el.setAttribute(key, val.toString())\n      } else {\n        el.setAttribute(\n          key,\n          JSON.stringify(val, (_k, v) =>\n            typeof v === 'function' ? v.toString() : v,\n          ),\n        )\n      }\n    }\n\n    const update = key\n      ? () => {\n          observer.disconnect()\n          const val = rx() as string\n          syncAttr(key, val)\n          observer.observe(el, {\n            attributeFilter: [key],\n          })\n        }\n      : () => {\n          observer.disconnect()\n          const obj = rx() as Record<string, any>\n          const attributeFilter = Object.keys(obj)\n          for (const key of attributeFilter) {\n            syncAttr(key, obj[key])\n          }\n          observer.observe(el, {\n            attributeFilter,\n          })\n        }\n\n    const observer = new MutationObserverClass(update)\n    const cleanup = effect(update)\n\n    return () => {\n      observer.disconnect()\n      cleanup()\n    }\n  },\n})\n", "// Icon: akar-icons:link-chain\n// Slug: Creates a signal with two-way data binding.\n// Description: Creates a signal (if one doesn\u2019t already exist) and sets up two-way data binding between it and an element\u2019s value.\n\nimport { attribute } from '@engine'\nimport {\n  DATASTAR_PROP_CHANGE_EVENT,\n  DOCUMENT,\n  HTMLInput,\n  MutationObserverClass,\n} from '@engine/consts'\nimport { effect, getPath, mergePaths } from '@engine/signals'\nimport type { Paths } from '@engine/types'\nimport { hasOwn } from '@utils/polyfills'\nimport { aliasify, camel, modifyCasing } from '@utils/text'\n\ntype SignalFile = {\n  name: string\n  contents: string\n  mime: string\n}\n\ntype BindAdapter = {\n  get_: (el: any, type: string) => any\n  set_: (el: any, value: any) => void\n  events_: string[]\n}\n\nconst propAdapter = (prop: string, ...events: string[]): BindAdapter => ({\n  get_: (el: any) => el[prop],\n  set_: (el: any, value: any) => {\n    el[prop] = value\n  },\n  events_: events,\n})\n\nconst attrAdapter = (attr: string, ...events: string[]): BindAdapter => ({\n  get_: (el: Element) => el.getAttribute(attr),\n  set_: (el: Element, value: any) => {\n    el.setAttribute(attr, `${value}`)\n  },\n  events_: events,\n})\n\nconst valueAdapter = (\n  treatUndefinedAsString = false,\n  ...events: string[]\n): BindAdapter => ({\n  get_: (el: HTMLInputElement | HTMLSelectElement, type: string) =>\n    type === 'string' || (treatUndefinedAsString && type === 'undefined')\n      ? el.value\n      : +el.value,\n  set_: (el: HTMLInputElement | HTMLSelectElement, value: string | number) => {\n    el.value = `${value}`\n  },\n  events_: events,\n})\n\nconst selectAdapter = (): BindAdapter => {\n  const numbers = new Set<string>()\n  return {\n    get_: (el: HTMLSelectElement, type: string) =>\n      el.multiple\n        ? [...el.selectedOptions].map((option) =>\n            numbers.has(option.value) ? +option.value : option.value,\n          )\n        : type === 'string' || type === 'undefined'\n          ? el.value\n          : +el.value,\n    set_: (el: HTMLSelectElement, value: any) => {\n      if (!el.multiple) {\n        el.value = `${value}`\n        return\n      }\n      for (const option of el.options) {\n        if (value.includes(option.value)) {\n          numbers.delete(option.value)\n          option.selected = true\n        } else if (value.includes(+option.value)) {\n          numbers.add(option.value)\n          option.selected = true\n        } else {\n          option.selected = false\n        }\n      }\n    },\n    events_: ['change'],\n  }\n}\n\nconst dataURIRegex = /^data:(?<mime>[^;]+);base64,(?<contents>.*)$/\nconst empty = Symbol('empty')\n\nconst boundPath = (\n  el: Element,\n  key: string | null | undefined,\n  rawKey: string,\n  signalName: string,\n  adapter: BindAdapter,\n  initialValue: any,\n) => {\n  const rawAttribute = aliasify(CSS.escape(rawKey))\n  const selector = key\n    ? `[${rawAttribute}]`\n    : `[${rawAttribute}=\"${CSS.escape(signalName)}\"]`\n  if (\n    initialValue === undefined &&\n    el instanceof HTMLInput &&\n    el.type === 'radio'\n  ) {\n    const checked = [...DOCUMENT.querySelectorAll(selector)].find(\n      (input): input is HTMLInputElement =>\n        input instanceof HTMLInput && input.checked,\n    )\n    // Missing radio binds adopt the checked option.\n    if (checked) {\n      mergePaths([[signalName, checked.value]], { ifMissing: true })\n    }\n  }\n\n  if (\n    !Array.isArray(initialValue) ||\n    (el instanceof HTMLSelectElement && el.multiple)\n  ) {\n    mergePaths([[signalName, adapter.get_(el, typeof initialValue)]], {\n      ifMissing: true,\n    })\n    return signalName\n  }\n\n  const inputs = DOCUMENT.querySelectorAll(selector) as NodeListOf<Element>\n\n  const paths: Paths = []\n  let i = 0\n  for (const input of inputs) {\n    // Missing proxy slots materialize as '', which breaks `ifMissing`.\n    paths.push([\n      `${signalName}.${i}`,\n      adapter.get_(\n        input,\n        typeof (hasOwn(initialValue, i) ? initialValue[i] : undefined),\n      ),\n    ])\n    if (el === input) {\n      break\n    }\n    i++\n  }\n  mergePaths(paths, { ifMissing: true })\n  return `${signalName}.${i}`\n}\n\nattribute({\n  name: 'bind',\n  requirement: 'exclusive',\n  apply({ el, key, rawKey, mods, value, error }) {\n    const signalName = key != null ? modifyCasing(key, mods) : value\n\n    const props = mods.get('prop')\n    const events = mods.get('event')\n    let adapter: BindAdapter | null = null\n\n    if (el instanceof HTMLInput) {\n      switch (el.type) {\n        case 'range':\n        case 'number':\n          adapter = valueAdapter(false, 'input')\n          break\n        case 'checkbox':\n          adapter = {\n            get_: (el: HTMLInputElement, type: string) => {\n              if (el.value !== 'on') {\n                return type === 'boolean'\n                  ? el.checked\n                  : el.checked\n                    ? el.value\n                    : ''\n              }\n              return type === 'string'\n                ? el.checked\n                  ? el.value\n                  : ''\n                : el.checked\n            },\n            set_: (el: HTMLInputElement, value: string | boolean) => {\n              el.checked =\n                typeof value === 'string' ? value === el.value : value\n            },\n            events_: ['input'],\n          }\n          break\n        case 'radio':\n          if (!el.getAttribute('name')?.length) {\n            el.setAttribute('name', signalName)\n          }\n          adapter = {\n            get_: (el: HTMLInputElement, type: string) =>\n              el.checked ? (type === 'number' ? +el.value : el.value) : empty,\n            set_: (el: HTMLInputElement, value: string | number) => {\n              el.checked =\n                value === (typeof value === 'number' ? +el.value : el.value)\n            },\n            events_: ['input'],\n          }\n          break\n        case 'file': {\n          const syncSignal = () => {\n            const files = [...(el.files || [])]\n            const signalFiles: SignalFile[] = []\n            Promise.all(\n              files.map(\n                (f) =>\n                  new Promise<void>((resolve) => {\n                    const reader = new FileReader()\n                    reader.onload = () => {\n                      if (typeof reader.result !== 'string') {\n                        throw error('InvalidFileResultType', {\n                          resultType: typeof reader.result,\n                        })\n                      }\n                      const match = reader.result.match(dataURIRegex)\n                      if (!match?.groups) {\n                        throw error('InvalidDataUri', {\n                          result: reader.result,\n                        })\n                      }\n                      signalFiles.push({\n                        name: f.name,\n                        contents: match.groups.contents,\n                        mime: match.groups.mime,\n                      })\n                    }\n                    reader.onloadend = () => resolve()\n                    reader.readAsDataURL(f)\n                  }),\n              ),\n            ).then(() => {\n              mergePaths([[signalName, signalFiles]])\n            })\n          }\n\n          el.addEventListener('change', syncSignal)\n          return () => {\n            el.removeEventListener('change', syncSignal)\n          }\n        }\n        default:\n          adapter = valueAdapter(true, 'input')\n      }\n    } else if (el instanceof HTMLSelectElement) {\n      adapter = selectAdapter()\n    } else if (el instanceof HTMLTextAreaElement) {\n      adapter = propAdapter('value', 'input')\n    } else if (el instanceof HTMLElement && el.tagName.includes('-')) {\n      adapter =\n        'value' in el\n          ? propAdapter('value', 'input', 'change')\n          : attrAdapter('value', 'input', 'change')\n    } else if (el instanceof HTMLElement && 'value' in el) {\n      adapter = propAdapter('value', 'change')\n    } else {\n      adapter = attrAdapter('value', 'change')\n    }\n    if (!adapter) {\n      throw error('InvalidBindAdapter')\n    }\n\n    const firstProp = props && [...props][0]\n    if (props && !firstProp) throw error('BindPropNameMissing')\n    if (firstProp) {\n      const prop = camel(firstProp)\n      adapter = propAdapter(prop, ...(events ? [...events] : adapter.events_))\n    } else if (events) {\n      adapter.events_ = [...events]\n    }\n\n    let path = boundPath(\n      el,\n      key,\n      rawKey,\n      signalName,\n      adapter,\n      getPath(signalName),\n    )\n    const syncSignal = () => {\n      const signalValue = getPath(path)\n      if (signalValue != null) {\n        const value = adapter.get_(el, typeof signalValue)\n        if (value !== empty) {\n          mergePaths([[path, value]])\n        }\n      }\n    }\n    const syncElement = () => {\n      adapter.set_(el, getPath(path))\n    }\n\n    for (const eventName of adapter.events_) {\n      el.addEventListener(eventName, syncSignal)\n    }\n    el.addEventListener(DATASTAR_PROP_CHANGE_EVENT, syncSignal)\n    let cleanup = effect(syncElement)\n    const multipleObserver =\n      el instanceof HTMLSelectElement\n        ? new MutationObserverClass(() => {\n            cleanup()\n            path = boundPath(\n              el,\n              key,\n              rawKey,\n              signalName,\n              adapter,\n              getPath(signalName),\n            )\n            cleanup = effect(syncElement)\n          })\n        : null\n    multipleObserver?.observe(el, { attributeFilter: ['multiple'] })\n\n    return () => {\n      multipleObserver?.disconnect()\n      cleanup()\n      for (const eventName of adapter.events_) {\n        el.removeEventListener(eventName, syncSignal)\n      }\n      el.removeEventListener(DATASTAR_PROP_CHANGE_EVENT, syncSignal)\n    }\n  },\n})\n", "// Icon: ic:baseline-format-paint\n// Slug: Adds or removes a class based on an expression.\n// Description: Adds or removes a class to or from an element based on an expression.\n\nimport { attribute } from '@engine'\nimport { MutationObserverClass } from '@engine/consts'\nimport { effect } from '@engine/signals'\nimport { modifyCasing } from '@utils/text'\n\nattribute({\n  name: 'class',\n  requirement: {\n    value: 'must',\n  },\n  returnsValue: true,\n  apply({ key, el, mods, rx }) {\n    key &&= modifyCasing(key, mods, 'kebab')\n\n    let classes: Record<string, boolean>\n    const callback = () => {\n      observer.disconnect()\n\n      classes = key\n        ? { [key]: rx() as boolean }\n        : (rx() as Record<string, boolean>)\n\n      for (const k in classes) {\n        const classNames = k.split(/\\s+/).filter((cn) => cn.length > 0)\n        if (classes[k]) {\n          for (const name of classNames) {\n            if (!el.classList.contains(name)) {\n              el.classList.add(name)\n            }\n          }\n        } else {\n          for (const name of classNames) {\n            if (el.classList.contains(name)) {\n              el.classList.remove(name)\n            }\n          }\n        }\n      }\n\n      observer.observe(el, { attributeFilter: ['class'] })\n    }\n\n    const observer = new MutationObserverClass(callback)\n    const cleanup = effect(callback)\n\n    return () => {\n      observer.disconnect()\n      cleanup()\n\n      for (const k in classes) {\n        const classNames = k.split(/\\s+/).filter((cn) => cn.length > 0)\n        for (const name of classNames) {\n          el.classList.remove(name)\n        }\n      }\n    }\n  },\n})\n", "// Icon: streamline-ultimate:wifi-signal-2\n// Slug: Creates a computed signal.\n// Description: Creates a signal that is computed based on an expression.\n\nimport { attribute } from '@engine'\nimport { computed, mergePaths, mergePatch } from '@engine/signals'\nimport { modifyCasing } from '@utils/text'\nimport { updateLeaves } from '@utils/paths'\n\nattribute({\n  name: 'computed',\n  requirement: {\n    value: 'must',\n  },\n  returnsValue: true,\n  apply({ key, mods, rx, error }) {\n    if (key) {\n      mergePaths([[modifyCasing(key, mods), computed(rx)]])\n    } else {\n      const patch = Object.assign({}, rx() as Record<string, () => any>)\n      updateLeaves(patch, (old) => {\n        if (typeof old === 'function') {\n          return computed(old)\n        } else {\n          throw error('ComputedExpectedFunction')\n        }\n      })\n      mergePatch(patch)\n    }\n  },\n})\n", "// Icon: oui:security-signal\n// Slug: Executes an expression when signals change.\n// Description: Executes an expression on page load and whenever any signals in the expression change.\n\nimport { attribute } from '@engine'\nimport { effect } from '@engine/signals'\n\nattribute({\n  name: 'effect',\n  requirement: {\n    key: 'denied',\n    value: 'must',\n  },\n  apply: ({ rx }) => effect(rx),\n})\n", "// Icon: streamline:signal-loading-remix\n// Slug: Creates an indicator for whether an SSE request is in flight.\n// Description: Creates a signal and sets its value to `true` while an SSE request request is in flight, otherwise `false`.\n\nimport { attribute } from '@engine'\nimport { DATASTAR_FETCH_EVENT, DOCUMENT } from '@engine/consts'\nimport { mergePaths } from '@engine/signals'\nimport type { DatastarFetchEvent } from '@engine/types'\nimport { FINISHED, STARTED } from '@plugins/actions/fetch'\nimport { modifyCasing } from '@utils/text'\n\nattribute({\n  name: 'indicator',\n  requirement: 'exclusive',\n  apply({ el, key, mods, value }) {\n    const signalName = key != null ? modifyCasing(key, mods) : value\n    let activeFetches = 0\n\n    mergePaths([[signalName, false]])\n\n    const watcher = ((event: CustomEvent<DatastarFetchEvent>) => {\n      const { type, el: elt } = event.detail\n      if (elt !== el) {\n        return\n      }\n      switch (type) {\n        case STARTED:\n          activeFetches++\n          mergePaths([[signalName, true]])\n          break\n        case FINISHED:\n          activeFetches = Math.max(0, activeFetches - 1)\n          mergePaths([[signalName, activeFetches > 0]])\n          break\n      }\n    }) as EventListener\n    DOCUMENT.addEventListener(DATASTAR_FETCH_EVENT, watcher)\n    return () => {\n      activeFetches = 0\n      mergePaths([[signalName, false]])\n      DOCUMENT.removeEventListener(DATASTAR_FETCH_EVENT, watcher)\n    }\n  },\n})\n", "export const tagToMs = (args: Set<string>) => {\n  for (const arg of args) {\n    if (arg.endsWith('ms')) {\n      return +arg.slice(0, -2)\n    }\n    if (arg.endsWith('s')) {\n      return +arg.slice(0, -1) * 1000\n    }\n    return Number.parseFloat(arg)\n  }\n  return 0\n}\n\nexport const tagHas = (tags: Set<string>, tag: string) =>\n  tags.has(tag.toLowerCase())\n\nexport const tagFirst = (tags?: Set<string>, defaultValue = ''): string => {\n  if (tags) {\n    for (const tag of tags) {\n      return tag\n    }\n  }\n  return defaultValue\n}\n", "import type { EventCallbackHandler, Modifiers } from '@engine/types'\nimport { tagHas, tagToMs } from '@utils/tags'\n\nexport const delay = (\n  callback: EventCallbackHandler,\n  wait: number,\n): EventCallbackHandler => {\n  return (...args: any[]) => {\n    setTimeout(callback, wait, ...args)\n  }\n}\n\nexport const throttle = (\n  callback: EventCallbackHandler,\n  wait: number,\n  leading = true,\n  trailing = false,\n  debounce = false,\n): EventCallbackHandler => {\n  let lastArgs: Parameters<EventCallbackHandler> | null = null\n  let timer: ReturnType<typeof setTimeout> | number = 0\n\n  return (...args: any[]) => {\n    if (leading && !timer) {\n      callback(...args)\n      lastArgs = null\n    } else {\n      lastArgs = args\n    }\n    if (!timer || debounce) {\n      if (timer) {\n        clearTimeout(timer)\n      }\n      timer = setTimeout(() => {\n        if (trailing && lastArgs !== null) {\n          callback(...lastArgs)\n        }\n        lastArgs = null\n        timer = 0\n      }, wait)\n    }\n  }\n}\n\nexport const modifyTiming = (\n  callback: EventCallbackHandler,\n  mods: Modifiers,\n): EventCallbackHandler => {\n  const delayArgs = mods.get('delay')\n  if (delayArgs) {\n    const wait = tagToMs(delayArgs)\n    callback = delay(callback, wait)\n  }\n\n  const debounceArgs = mods.get('debounce')\n  if (debounceArgs) {\n    const wait = tagToMs(debounceArgs)\n    const leading = tagHas(debounceArgs, 'leading')\n    const trailing = !tagHas(debounceArgs, 'notrailing')\n    callback = throttle(callback, wait, leading, trailing, true)\n  }\n\n  const throttleArgs = mods.get('throttle')\n  if (throttleArgs) {\n    const wait = tagToMs(throttleArgs)\n    const leading = !tagHas(throttleArgs, 'noleading')\n    const trailing = tagHas(throttleArgs, 'trailing')\n    callback = throttle(callback, wait, leading, trailing)\n  }\n\n  return callback\n}\n", "import { DOCUMENT } from '@engine/consts'\nimport type { EventCallbackHandler, Modifiers } from '@engine/types'\n\nexport const supportsViewTransitions = (target: Document | Element): boolean =>\n  'startViewTransition' in target\n\nexport const modifyViewTransition = (\n  callback: EventCallbackHandler,\n  mods: Modifiers,\n): EventCallbackHandler => {\n  if (mods.has('viewtransition') && supportsViewTransitions(DOCUMENT)) {\n    const cb = callback // I hate javascript\n    callback = (...args: any[]) =>\n      DOCUMENT.startViewTransition(() => cb(...args))\n  }\n\n  return callback\n}\n", "// Icon: material-symbols:timer-play-outline\n// Slug: Runs an expression when loaded into the DOM.\n// Description: Runs an expression when the element is loaded into the DOM.\n\nimport { attribute } from '@engine'\nimport { beginBatch, endBatch } from '@engine/signals'\nimport { tagToMs } from '@utils/tags'\nimport { delay } from '@utils/timing'\nimport { modifyViewTransition } from '@utils/view-transitions'\n\nattribute({\n  name: 'init',\n  requirement: {\n    key: 'denied',\n    value: 'must',\n  },\n  apply({ rx, mods }) {\n    let callback = () => {\n      beginBatch()\n      try {\n        rx()\n      } finally {\n        endBatch()\n      }\n    }\n    callback = modifyViewTransition(callback, mods)\n    let wait = 0\n    const delayArgs = mods.get('delay')\n    if (delayArgs) {\n      wait = tagToMs(delayArgs)\n      if (wait > 0) {\n        callback = delay(callback, wait)\n      }\n    }\n    callback()\n  },\n})\n", "// Icon: si:json-fill\n// Slug: Outputs a JSON stringified version of signals.\n// Description: Sets the text content of an element to a reactive JSON stringified version of signals.\n\nimport { attribute } from '@engine'\nimport { MutationObserverClass } from '@engine/consts'\nimport { effect, filtered } from '@engine/signals'\nimport type { SignalFilterOptions } from '@engine/types'\nimport { jsStrToObject } from '@utils/text'\n\nattribute({\n  name: 'json-signals',\n  requirement: {\n    key: 'denied',\n  },\n  apply({ el, value, mods }) {\n    const spaces = mods.has('terse') ? 0 : 2\n    let filters: SignalFilterOptions = {}\n    if (value) {\n      filters = jsStrToObject(value)\n    }\n\n    const callback = () => {\n      observer.disconnect()\n      el.textContent = JSON.stringify(filtered(filters), null, spaces)\n      observer.observe(el, {\n        childList: true,\n        characterData: true,\n        subtree: true,\n      })\n    }\n    const observer = new MutationObserverClass(callback)\n    const cleanup = effect(callback)\n\n    return () => {\n      observer.disconnect()\n      cleanup()\n    }\n  },\n})\n", "// Icon: material-symbols:mail\n// Slug: Attaches an event listener to an element.\n// Description: Attaches an event listener to an element, executing an expression whenever the event is triggered.\n\nimport { attribute } from '@engine'\nimport {\n  DATASTAR_FETCH_EVENT,\n  DATASTAR_SIGNAL_PATCH_EVENT,\n  DOCUMENT,\n} from '@engine/consts'\nimport { beginBatch, endBatch } from '@engine/signals'\nimport { modifyCasing } from '@utils/text'\nimport { modifyTiming } from '@utils/timing'\nimport { modifyViewTransition } from '@utils/view-transitions'\n\nattribute({\n  name: 'on',\n  requirement: 'must',\n  argNames: ['evt'],\n  apply({ el, key, mods, rx }) {\n    let target: Element | Window | Document = el\n    if (mods.has('window')) {\n      target = window\n    } else if (mods.has('document')) {\n      target = DOCUMENT\n    }\n    let callback = (evt?: Event) => {\n      beginBatch()\n      try {\n        rx(evt)\n      } finally {\n        endBatch()\n      }\n    }\n    callback = modifyViewTransition(callback, mods)\n    callback = modifyTiming(callback, mods)\n    const eventName = modifyCasing(key, mods, 'kebab')\n    const evtListOpts: AddEventListenerOptions = {\n      capture: mods.has('capture'),\n      passive: mods.has('passive'),\n      once: mods.has('once'),\n    }\n    if (mods.has('outside')) {\n      target = DOCUMENT\n      const cb = callback\n      callback = (evt?: Event) => {\n        if (!el.contains(evt?.target as HTMLElement)) {\n          cb(evt)\n        }\n      }\n    }\n    // Listen for Datastar events on the document\n    if (\n      eventName === DATASTAR_FETCH_EVENT ||\n      eventName === DATASTAR_SIGNAL_PATCH_EVENT\n    ) {\n      target = DOCUMENT\n    }\n    // Apply event-side effects before timing/view-transition wrappers run.\n    const listener = (evt?: Event) => {\n      if (evt) {\n        if (mods.has('prevent')) evt.preventDefault()\n        if (mods.has('stop')) evt.stopPropagation()\n        // Keep data-on:submit from falling through to native form submission.\n        if (el instanceof HTMLFormElement && eventName === 'submit') evt.preventDefault()\n      }\n      callback(evt)\n    }\n    target.addEventListener(eventName, listener, evtListOpts)\n    return () => {\n      target.removeEventListener(eventName, listener, evtListOpts)\n    }\n  },\n})\n", "export const clamp = (value: number, min: number, max: number): number => {\n  return Math.max(min, Math.min(max, value))\n}\n\nexport const lerp = (\n  min: number,\n  max: number,\n  t: number,\n  clamped = true,\n): number => {\n  return min + (max - min) * (clamped ? clamp(t, 0, 1) : t)\n}\n\nexport const inverseLerp = (\n  min: number,\n  max: number,\n  value: number,\n  clamped = true,\n): number => {\n  const v = (value - min) / (max - min)\n  return clamped ? clamp(v, 0, 1) : v\n}\n\nexport const fit = (\n  value: number,\n  inMin: number,\n  inMax: number,\n  outMin: number,\n  outMax: number,\n  clamped = true,\n  rounded = false,\n): number => {\n  const t = inverseLerp(inMin, inMax, value, clamped)\n  const fitted = lerp(outMin, outMax, t, clamped)\n  return rounded ? Math.round(fitted) : fitted\n}\n", "// Icon: mdi-light:vector-intersection\n// Slug: Runs an expression on intersection.\n// Description: Runs an expression when the element intersects with the viewport.\n\nimport { attribute } from '@engine'\nimport { beginBatch, endBatch } from '@engine/signals'\nimport type { HTMLOrSVG } from '@engine/types'\nimport { clamp } from '@utils/math'\nimport { tagFirst } from '@utils/tags'\nimport { modifyTiming } from '@utils/timing'\nimport { modifyViewTransition } from '@utils/view-transitions'\n\nconst once = new WeakSet<HTMLOrSVG>()\n\nattribute({\n  name: 'on-intersect',\n  requirement: {\n    key: 'denied',\n    value: 'must',\n  },\n  apply({ el, mods, rx }) {\n    let callback = () => {\n      beginBatch()\n      try {\n        rx()\n      } finally {\n        endBatch()\n      }\n    }\n    callback = modifyViewTransition(callback, mods)\n    callback = modifyTiming(callback, mods)\n    const options = { threshold: 0 }\n    if (mods.has('full')) {\n      options.threshold = 1\n    } else if (mods.has('half')) {\n      options.threshold = 0.5\n    } else {\n      const threshold = mods.get('threshold')\n      if (threshold) {\n        options.threshold = clamp(Number(tagFirst(threshold)), 0, 100) / 100\n      }\n    }\n    const exit = mods.has('exit')\n    let observer: IntersectionObserver | null = new IntersectionObserver(\n      (entries) => {\n        for (const entry of entries) {\n          if (entry.isIntersecting !== exit) {\n            callback()\n            if (observer && once.has(el)) {\n              observer.disconnect()\n            }\n          }\n        }\n      },\n      options,\n    )\n    observer.observe(el)\n    if (mods.has('once')) {\n      once.add(el)\n    }\n    return () => {\n      if (!mods.has('once')) {\n        once.delete(el)\n      }\n      if (observer) {\n        observer.disconnect()\n        observer = null\n      }\n    }\n  },\n})\n", "// Icon: material-symbols:timer-outline\n// Slug: Runs an expression at a regular interval.\n// Description: Runs an expression at a regular interval.\n\nimport { attribute } from '@engine'\nimport { beginBatch, endBatch } from '@engine/signals'\nimport { tagHas, tagToMs } from '@utils/tags'\nimport { modifyViewTransition } from '@utils/view-transitions'\n\nattribute({\n  name: 'on-interval',\n  requirement: {\n    key: 'denied',\n    value: 'must',\n  },\n  apply({ mods, rx }) {\n    let callback = () => {\n      beginBatch()\n      try { \n        rx()\n      } finally {\n        endBatch()\n      }\n    }\n    callback = modifyViewTransition(callback, mods)\n    let duration = 1000\n    const durationArgs = mods.get('duration')\n    if (durationArgs) {\n      duration = tagToMs(durationArgs)\n      const leading = tagHas(durationArgs, 'leading')\n      if (leading) {\n        callback()\n      }\n    }\n    const intervalId = setInterval(callback, duration)\n    return () => {\n      clearInterval(intervalId)\n    }\n  },\n})\n", "// Icon: material-symbols:change-circle-outline\n// Slug: Runs an expression when signals are patched.\n// Description: Runs an expression whenever one or more signals are patched.\n\nimport { attribute } from '@engine'\nimport { DATASTAR_SIGNAL_PATCH_EVENT, DOCUMENT } from '@engine/consts'\nimport {\n  beginBatch,\n  endBatch,\n  filtered,\n  startPeeking,\n  stopPeeking,\n} from '@engine/signals'\nimport type { JSONPatch, SignalFilterOptions } from '@engine/types'\nimport { isEmpty } from '@utils/paths'\nimport { aliasify, jsStrToObject } from '@utils/text'\nimport { modifyTiming } from '@utils/timing'\n\nattribute({\n  name: 'on-signal-patch',\n  requirement: {\n    value: 'must',\n  },\n  argNames: ['patch'],\n  returnsValue: true,\n  apply({ el, key, mods, rx, error }) {\n    if (!!key && key !== 'filter') {\n      throw error('KeyNotAllowed')\n    }\n\n    const filterAttr = aliasify(`${this.name}-filter`)\n    const filtersRaw = el.getAttribute(filterAttr)\n    let filters: SignalFilterOptions = {}\n    if (filtersRaw) {\n      filters = jsStrToObject(filtersRaw)\n    }\n\n    let running = false\n\n    const callback: EventListener = modifyTiming(\n      (evt: CustomEvent<JSONPatch>) => {\n        if (running) return\n        // Peek when getting the filtered signals because we don\u2019t want to subscribe to them, we just want to know which ones are being patched.\n        startPeeking()\n        const watched = filtered(filters, evt.detail)\n        stopPeeking()\n        if (!isEmpty(watched)) {\n          running = true\n          beginBatch()\n          try {\n            rx(watched)\n          } finally {\n            endBatch()\n            running = false\n          }\n        }\n      },\n      mods,\n    )\n\n    DOCUMENT.addEventListener(DATASTAR_SIGNAL_PATCH_EVENT, callback)\n    return () => {\n      DOCUMENT.removeEventListener(DATASTAR_SIGNAL_PATCH_EVENT, callback)\n    }\n  },\n})\n", "// Icon: mdi:cursor-pointer\n// Slug: Creates a reference to an element.\n// Description: Creates a new signal that is a reference to the element on which the data attribute is placed.\n\nimport { attribute } from '@engine'\nimport { mergePaths } from '@engine/signals'\nimport { modifyCasing } from '@utils/text'\n\nattribute({\n  name: 'ref',\n  requirement: 'exclusive',\n  apply({ el, key, mods, value }) {\n    const signalName = key != null ? modifyCasing(key, mods) : value\n    mergePaths([[signalName, el]])\n  },\n})\n", "// Icon: streamline:interface-edit-view-eye-eyeball-open-view\n// Slug: Shows or hides an element.\n// Description: Shows or hides an element based on whether an expression evaluates to `true` or `false`.\n\nimport { attribute } from '@engine'\nimport { MutationObserverClass } from '@engine/consts'\nimport { effect } from '@engine/signals'\n\nconst NONE = 'none'\nconst DISPLAY = 'display'\n\nattribute({\n  name: 'show',\n  requirement: {\n    key: 'denied',\n    value: 'must',\n  },\n  returnsValue: true,\n  apply({ el, rx }) {\n    const update = () => {\n      observer.disconnect()\n      const shouldShow = rx()\n      if (shouldShow) {\n        if (el.style.display === NONE) el.style.removeProperty(DISPLAY)\n      } else {\n        el.style.setProperty(DISPLAY, NONE)\n      }\n      observer.observe(el, { attributeFilter: ['style'] })\n    }\n    const observer = new MutationObserverClass(update)\n    const cleanup = effect(update)\n\n    return () => {\n      observer.disconnect()\n      cleanup()\n    }\n  },\n})\n", "// Icon: streamline:wifi-signal-full-remix\n// Slug: Patches signals into the existing signals.\n// Description: Patches (adds, updates or removes) one or more signals into the existing signals.\n\nimport { attribute } from '@engine'\nimport { mergePatch, mergePaths } from '@engine/signals'\nimport { modifyCasing } from '@utils/text'\n\nattribute({\n  name: 'signals',\n  returnsValue: true,\n  apply({ key, mods, rx }) {\n    const ifMissing = mods.has('ifmissing')\n\n    if (key) {\n      key = modifyCasing(key, mods)\n      const value = rx?.()\n      mergePaths([[key, value]], { ifMissing })\n    } else {\n      const patch = Object.assign({}, rx?.() as Record<string, any>)\n      mergePatch(patch, { ifMissing })\n    }\n  },\n})\n", "// Icon: material-symbols:format-paint-outline\n// Slug: Sets inline styles on an element based on an expression.\n// Description: Sets CSS styles on an element using either key-based or object syntax, and keeps them in sync with reactive signals.\n\nimport { attribute } from '@engine'\nimport { MutationObserverClass } from '@engine/consts'\nimport { effect } from '@engine/signals'\nimport { kebab } from '@utils/text'\n\nattribute({\n  name: 'style',\n  requirement: {\n    value: 'must',\n  },\n  returnsValue: true,\n  apply({ key, el, rx }) {\n    const { style } = el\n    const initialStyles = new Map<string, string>()\n\n    const apply = (prop: string, value: any) => {\n      const initial = initialStyles.get(prop)\n      if (!value && value !== 0) {\n        initial !== undefined &&\n          (initial\n            ? style.setProperty(prop, initial)\n            : style.removeProperty(prop))\n      } else {\n        initial === undefined &&\n          initialStyles.set(prop, style.getPropertyValue(prop))\n        style.setProperty(prop, String(value))\n      }\n    }\n\n    const update = () => {\n      observer.disconnect()\n\n      if (key) {\n        apply(key, rx())\n      } else {\n        const styles = rx() as Record<string, any>\n\n        for (const [prop, initial] of initialStyles) {\n          prop in styles ||\n            (initial\n              ? style.setProperty(prop, initial)\n              : style.removeProperty(prop))\n        }\n\n        for (const prop in styles) {\n          apply(kebab(prop), styles[prop])\n        }\n      }\n\n      observer.observe(el, { attributeFilter: ['style'] })\n    }\n\n    const observer = new MutationObserverClass(update)\n    const cleanup = effect(update)\n\n    return () => {\n      observer.disconnect()\n      cleanup()\n      for (const [prop, initial] of initialStyles) {\n        initial ? style.setProperty(prop, initial) : style.removeProperty(prop)\n      }\n    }\n  },\n})\n", "// Icon: icon-park-outline:text\n// Slug: Binds the text content of an element.\n// Description: Binds the text content of an element to an expression.\n\nimport { attribute } from '@engine'\nimport { MutationObserverClass } from '@engine/consts'\nimport { effect } from '@engine/signals'\n\nattribute({\n  name: 'text',\n  requirement: {\n    key: 'denied',\n    value: 'must',\n  },\n  returnsValue: true,\n  apply({ el, rx }) {\n    const update = () => {\n      observer.disconnect()\n      el.textContent = `${rx()}`\n      observer.observe(el, {\n        childList: true,\n        characterData: true,\n        subtree: true,\n      })\n    }\n\n    const observer = new MutationObserverClass(update)\n    const cleanup = effect(update)\n\n    return () => {\n      observer.disconnect()\n      cleanup()\n    }\n  },\n})\n", "// Icon: material-symbols:cloud-download\n// Slug: Patches elements into the DOM.\n// Description: Patches elements into the DOM.\n\nimport { watcher } from '@engine'\nimport {\n  DATASTAR_PROP_CHANGE_EVENT,\n  DATASTAR_SCOPE_CHILDREN_EVENT,\n  DOCUMENT,\n  HTMLInput,\n} from '@engine/consts'\nimport { createHTML, prepareScript } from '@engine/csp'\nimport type { WatcherArgsValue, WatcherContext } from '@engine/types'\nimport { isHTMLOrSVG } from '@utils/dom'\nimport { aliasify, isStringTrue } from '@utils/text'\nimport { supportsViewTransitions } from '@utils/view-transitions'\n\nconst PATCH_MODES = [\n  'remove',\n  'outer',\n  'inner',\n  'replace',\n  'prepend',\n  'append',\n  'before',\n  'after',\n] as const\ntype PatchElementsMode = (typeof PATCH_MODES)[number]\n\nconst NAMESPACES = ['html', 'svg', 'mathml'] as const\ntype Namespace = (typeof NAMESPACES)[number]\n\ntype PatchElementsArgs = {\n  selector_: string\n  mode_: PatchElementsMode\n  namespace_: Namespace\n  elements_: WatcherArgsValue\n}\n\nwatcher({\n  name: 'datastar-patch-elements',\n  apply(ctx, args) {\n    const selector = typeof args.selector === 'string' ? args.selector : ''\n    const mode = typeof args.mode === 'string' ? args.mode : 'outer'\n    const namespace =\n      typeof args.namespace === 'string' ? args.namespace : 'html'\n    const useViewTransition = isStringTrue(args.useViewTransition)\n    const viewTransitionSelector =\n      typeof args.viewTransitionSelector === 'string' ? args.viewTransitionSelector : ''\n    const elements = args.elements\n\n    if (!PATCH_MODES.includes(mode as PatchElementsMode)) {\n      throw ctx.error('PatchElementsInvalidMode', { mode })\n    }\n\n    if (!selector && mode !== 'outer' && mode !== 'replace') {\n      throw ctx.error('PatchElementsExpectedSelector')\n    }\n\n    if (!NAMESPACES.includes(namespace as Namespace)) {\n      throw ctx.error('PatchElementsInvalidNamespace', { namespace })\n    }\n\n    const patchElementsArgs: PatchElementsArgs = {\n      selector_: selector,\n      mode_: mode as PatchElementsMode,\n      namespace_: namespace as Namespace,\n      elements_: elements,\n    }\n\n    if (useViewTransition) {\n      let target: Document | Element = DOCUMENT\n      if (viewTransitionSelector) {\n        const el = DOCUMENT.querySelector(viewTransitionSelector)\n        if (el) {\n          target = el\n        }\n      }\n      if (supportsViewTransitions(target)) {\n        target.startViewTransition(() => onPatchElements(ctx, patchElementsArgs))\n      } else {\n        onPatchElements(ctx, patchElementsArgs)\n      }\n    } else {\n      onPatchElements(ctx, patchElementsArgs)\n    }\n  },\n})\n\nconst onPatchElements = (\n  { error }: WatcherContext,\n  {\n    selector_: selector,\n    mode_: mode,\n    namespace_: namespace,\n    elements_: elements,\n  }: PatchElementsArgs,\n) => {\n  let newContent = DOCUMENT.createDocumentFragment()\n  let consume = typeof elements !== 'string' && !!elements\n\n  if (typeof elements === 'string') {\n    const elementsWithSvgsRemoved = elements.replace(\n      /<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim,\n      '',\n    )\n    const hasHtml = /<\\/html>/.test(elementsWithSvgsRemoved)\n    const hasHead = /<\\/head>/.test(elementsWithSvgsRemoved)\n    const hasBody = /<\\/body>/.test(elementsWithSvgsRemoved)\n\n    const wrapperTag =\n      namespace === 'svg' ? 'svg' : namespace === 'mathml' ? 'math' : ''\n    const wrappedEls = wrapperTag\n      ? `<${wrapperTag}>${elements}</${wrapperTag}>`\n      : elements\n\n    const html =\n      hasHtml || hasHead || hasBody\n        ? elements\n        : `<body><template>${wrappedEls}</template></body>`\n    const newDocument = new DOMParser().parseFromString(\n      createHTML(html),\n      'text/html',\n    )\n\n    if (hasHtml) {\n      newContent.appendChild(newDocument.documentElement)\n    } else if (hasHead && hasBody) {\n      newContent.appendChild(newDocument.head)\n      newContent.appendChild(newDocument.body)\n    } else if (hasHead) {\n      newContent.appendChild(newDocument.head)\n    } else if (hasBody) {\n      newContent.appendChild(newDocument.body)\n    } else if (wrapperTag) {\n      const wrapperEl = newDocument\n        .querySelector('template')!\n        .content.querySelector(wrapperTag)!\n      for (const child of wrapperEl.childNodes) {\n        newContent.appendChild(child)\n      }\n    } else {\n      newContent = newDocument.querySelector('template')!.content\n    }\n  } else if (elements) {\n    if (elements instanceof DocumentFragment) {\n      newContent = elements\n    } else if (elements instanceof Element) {\n      newContent.appendChild(elements)\n    }\n  }\n\n  if (!selector && (mode === 'outer' || mode === 'replace')) {\n    const children = Array.from(newContent.children)\n    for (const child of children) {\n      let target: Element\n      if (child instanceof HTMLHtmlElement) {\n        target = DOCUMENT.documentElement\n      } else if (child instanceof HTMLBodyElement) {\n        target = DOCUMENT.body\n      } else if (child instanceof HTMLHeadElement) {\n        target = DOCUMENT.head\n      } else {\n        target = DOCUMENT.getElementById(child.id)!\n        if (!target) {\n          console.warn(error('PatchElementsNoTargetsFound'), {\n            element: { id: child.id },\n          })\n          continue\n        }\n      }\n\n      // Consume the new content so we don\u2019t deep clone.\n      applyToTargets(mode as PatchElementsMode, child, [target], true)\n    }\n  } else {\n    const targets = DOCUMENT.querySelectorAll(selector)\n    if (!targets.length) {\n      console.warn(error('PatchElementsNoTargetsFound'), { selector })\n      return\n    }\n\n    const targetList = consume && mode !== 'remove' ? [targets[0]!] : targets\n\n    // If only one target exists, we can safely consume the new content which prevents deep cloning (https://github.com/starfederation/datastar/issues/1155).\n    if (targetList.length === 1) {\n      consume = true\n    }\n\n    applyToTargets(mode as PatchElementsMode, newContent, targetList, consume)\n  }\n}\n\nconst scripts = new WeakSet<HTMLScriptElement>()\nfor (const script of DOCUMENT.querySelectorAll('script')) {\n  scripts.add(script)\n}\n\nconst execute = (target: Element): void => {\n  const elScripts =\n    target instanceof HTMLScriptElement\n      ? [target]\n      : target.querySelectorAll('script')\n  for (const old of elScripts) {\n    if (!scripts.has(old)) {\n      const script = DOCUMENT.createElement('script')\n      for (const { name, value } of old.attributes) {\n        script.setAttribute(name, value)\n      }\n      prepareScript(script, old.text)\n      old.replaceWith(script)\n      scripts.add(script)\n    }\n  }\n}\n\nconst applyPatchMode = (\n  targets: Iterable<Element>,\n  element: DocumentFragment | Element,\n  action: string,\n  consume: boolean,\n) => {\n  let used = false\n  for (const target of targets) {\n    if (consume && used) {\n      break\n    }\n    const nextNode = consume ? element : (element.cloneNode(true) as Element)\n    execute(nextNode as Element)\n    // @ts-expect-error - calling dynamic method path on DOM element\n    target[action](nextNode)\n    used = true\n  }\n}\n\nconst applyToTargets = (\n  mode: PatchElementsMode,\n  element: DocumentFragment | Element,\n  targets: Iterable<Element>,\n  consume: boolean,\n) => {\n  switch (mode) {\n    case 'remove':\n      for (const target of targets) {\n        target.remove()\n      }\n      break\n    case 'outer':\n    case 'inner':\n      {\n        let used = false\n        for (const target of targets) {\n          if (consume && used) {\n            break\n          }\n          const nextNode = consume ? element : (element.cloneNode(true) as Element)\n          morph(target, nextNode, mode)\n          execute(target)\n          const scopeHost = target.closest('[data-scope-children]')\n          if (scopeHost) {\n            scopeHost.dispatchEvent(\n              new CustomEvent(DATASTAR_SCOPE_CHILDREN_EVENT, {\n                bubbles: false,\n              }),\n            )\n          }\n          used = true\n        }\n      }\n      break\n    case 'replace':\n      applyPatchMode(targets, element, 'replaceWith', consume)\n      break\n    case 'prepend':\n    case 'append':\n    case 'before':\n    case 'after':\n      applyPatchMode(targets, element, mode, consume)\n  }\n}\n\nconst ctxIdMap = new Map<Node, Set<string>>()\nconst ctxPersistentIds = new Set<string>()\nconst oldIdTagNameMap = new Map<string, string>()\nconst duplicateIds = new Set<string>()\nconst ctxPantry = DOCUMENT.createElement('div')\nctxPantry.hidden = true\n\nconst aliasedIgnoreMorph = aliasify('ignore-morph')\nconst aliasedIgnoreMorphAttr = `[${aliasedIgnoreMorph}]`\nexport const morph = (\n  oldElt: Element | ShadowRoot,\n  newContent: DocumentFragment | Element,\n  mode: 'outer' | 'inner' = 'outer',\n): void => {\n  if (\n    (isHTMLOrSVG(oldElt) &&\n      isHTMLOrSVG(newContent) &&\n      oldElt.hasAttribute(aliasedIgnoreMorph) &&\n      newContent.hasAttribute(aliasedIgnoreMorph)) ||\n    oldElt.parentElement?.closest(aliasedIgnoreMorphAttr)\n  ) {\n    return\n  }\n\n  const normalizedElt = DOCUMENT.createElement('div')\n  normalizedElt.append(newContent)\n  DOCUMENT.body.insertAdjacentElement('afterend', ctxPantry)\n\n  // Computes the set of IDs that persist between the two contents excluding duplicates\n  const oldIdElements = oldElt.querySelectorAll('[id]')\n  for (const { id, tagName } of oldIdElements) {\n    if (oldIdTagNameMap.has(id)) {\n      duplicateIds.add(id)\n    } else {\n      oldIdTagNameMap.set(id, tagName)\n    }\n  }\n  if (oldElt instanceof Element && oldElt.id) {\n    if (oldIdTagNameMap.has(oldElt.id)) {\n      duplicateIds.add(oldElt.id)\n    } else {\n      oldIdTagNameMap.set(oldElt.id, oldElt.tagName)\n    }\n  }\n\n  ctxPersistentIds.clear()\n  const newIdElements = normalizedElt.querySelectorAll('[id]')\n  for (const { id, tagName } of newIdElements) {\n    if (ctxPersistentIds.has(id)) {\n      duplicateIds.add(id)\n    } else if (oldIdTagNameMap.get(id) === tagName) {\n      ctxPersistentIds.add(id)\n    }\n  }\n\n  for (const id of duplicateIds) {\n    ctxPersistentIds.delete(id)\n  }\n\n  oldIdTagNameMap.clear()\n  duplicateIds.clear()\n  ctxIdMap.clear()\n\n  const parent = mode === 'outer' ? oldElt.parentElement! : oldElt\n  populateIdMapWithTree(parent, oldIdElements)\n  populateIdMapWithTree(normalizedElt, newIdElements)\n\n  morphChildren(\n    parent,\n    normalizedElt,\n    mode === 'outer' ? oldElt : null,\n    oldElt.nextSibling,\n  )\n\n  ctxPantry.remove()\n}\n\n// This is the core algorithm for matching up children.\n// The idea is to use ID sets to try to match up nodes as faithfully as possible.\n// We greedily match, which allows us to keep the algorithm fast,\n// but by using ID sets, we are able to better match up with content deeper in the DOM.\nconst morphChildren = (\n  oldParent: Element | ShadowRoot, // the old content that we are merging the new content into\n  newParent: Element, // the parent element of the new content\n  insertionPoint: Node | null = null, // the point in the DOM we start morphing at (defaults to first child)\n  endPoint: Node | null = null, // the point in the DOM we stop morphing at (defaults to after last child)\n): void => {\n  // normalize\n  if (\n    oldParent instanceof HTMLTemplateElement &&\n    newParent instanceof HTMLTemplateElement\n  ) {\n    // we can pretend the DocumentElement is an Element\n    oldParent = oldParent.content as unknown as Element\n    newParent = newParent.content as unknown as Element\n  }\n  insertionPoint ??= oldParent.firstChild\n\n  // run through all the new content\n  for (const newChild of newParent.childNodes) {\n    // once we reach the end of the old parent content skip to the end and insert the rest\n    if (insertionPoint && insertionPoint !== endPoint) {\n      const bestMatch = findBestMatch(newChild, insertionPoint, endPoint)\n      if (bestMatch) {\n        // if the node to morph is not at the insertion point then remove/move up to it\n        if (bestMatch !== insertionPoint) {\n          let cursor: Node | null = insertionPoint\n          // Remove nodes between the start and end nodes\n          while (cursor && cursor !== bestMatch) {\n            const tempNode = cursor\n            cursor = cursor.nextSibling\n            removeNode(tempNode)\n          }\n        }\n        morphNode(bestMatch, newChild)\n        insertionPoint = bestMatch.nextSibling\n        continue\n      }\n    }\n\n    // if the matching node is elsewhere in the original content\n    if (newChild instanceof Element && ctxPersistentIds.has(newChild.id)) {\n      // move it and all its children here and morph, will always be found\n      // Search for an element by ID within the document and pantry, and move it using moveBefore.\n      const movedChild = DOCUMENT.getElementById(newChild.id) as Element\n\n      // Removes an element from its ancestors' ID maps.\n      // This is needed when an element is moved from the \"future\" via `moveBeforeId`.\n      // Otherwise, its erstwhile ancestors could be mistakenly moved to the pantry rather than being deleted,\n      // preventing their removal hooks from being called.\n      let current = movedChild\n      while ((current = current.parentNode as Element)) {\n        const idSet = ctxIdMap.get(current)\n        if (idSet) {\n          idSet.delete(newChild.id)\n          if (!idSet.size) {\n            ctxIdMap.delete(current)\n          }\n        }\n      }\n\n      moveBefore(oldParent, movedChild, insertionPoint)\n      morphNode(movedChild, newChild)\n      insertionPoint = movedChild.nextSibling\n      continue\n    }\n\n    // This performs the action of inserting a new node while handling situations where the node contains\n    // elements with persistent IDs and possible state info we can still preserve by moving in and then morphing\n    if (ctxIdMap.has(newChild)) {\n      // node has children with IDs with possible state so create a dummy elt of same type and apply full morph algorithm\n      const namespaceURI = (newChild as Element).namespaceURI\n      const tagName = (newChild as Element).tagName\n      const newEmptyChild =\n        namespaceURI && namespaceURI !== 'http://www.w3.org/1999/xhtml'\n          ? DOCUMENT.createElementNS(namespaceURI, tagName)\n          : DOCUMENT.createElement(tagName)\n      oldParent.insertBefore(newEmptyChild, insertionPoint)\n      morphNode(newEmptyChild, newChild)\n      insertionPoint = newEmptyChild.nextSibling\n    } else {\n      // optimization: no id state to preserve so we can just insert a clone of the newChild and its descendants\n      const newClonedChild = DOCUMENT.importNode(newChild, true) // importNode to not mutate newParent\n      oldParent.insertBefore(newClonedChild, insertionPoint)\n      insertionPoint = newClonedChild.nextSibling\n    }\n  }\n\n  // remove any remaining old nodes that didn't match up with new content\n  while (insertionPoint && insertionPoint !== endPoint) {\n    const tempNode = insertionPoint\n    insertionPoint = insertionPoint.nextSibling\n    removeNode(tempNode)\n  }\n}\n\n// Scans forward from the startPoint to the endPoint looking for a match for the node.\n// It looks for an id set match first, then a soft match.\n// We abort soft matching if we find two future soft matches, to reduce churn.\nconst findBestMatch = (\n  node: Node,\n  startPoint: Node | null,\n  endPoint: Node | null,\n): Node | null => {\n  let bestMatch: Node | null | undefined = null\n  let nextSibling = node.nextSibling\n  let siblingSoftMatchCount = 0\n  let displaceMatchCount = 0\n\n  // Max ID matches we are willing to displace in our search\n  const nodeMatchCount = ctxIdMap.get(node)?.size || 0\n\n  let cursor = startPoint\n  while (cursor && cursor !== endPoint) {\n    // soft matching is a prerequisite for id set matching\n    if (isSoftMatch(cursor, node)) {\n      let isIdSetMatch = false\n      const oldSet = ctxIdMap.get(cursor)\n      const newSet = ctxIdMap.get(node)\n\n      if (newSet && oldSet) {\n        for (const id of oldSet) {\n          // a potential match is an id in the new and old nodes that\n          // has not already been merged into the DOM\n          // But the newNode content we call this on has not been\n          // merged yet and we don't allow duplicate IDs so it is simple\n          if (newSet.has(id)) {\n            isIdSetMatch = true\n            break\n          }\n        }\n      }\n\n      if (isIdSetMatch) {\n        return cursor // found an id set match, we're done!\n      }\n\n      // we haven\u2019t yet saved a soft match fallback\n      // the current soft match will hard match something else in the future, leave it\n      if (!bestMatch && !ctxIdMap.has(cursor)) {\n        // optimization: if node can't id set match, we can just return the soft match immediately\n        if (!nodeMatchCount) {\n          return cursor\n        }\n        // save this as the fallback if we get through the loop without finding a hard match\n        bestMatch = cursor\n      }\n    }\n\n    // check for IDs we may be displaced when matching\n    displaceMatchCount += ctxIdMap.get(cursor)?.size || 0\n    if (displaceMatchCount > nodeMatchCount) {\n      // if we are going to displace more IDs than the node contains then\n      // we do not have a good candidate for an ID match, so return\n      break\n    }\n\n    if (bestMatch === null && nextSibling && isSoftMatch(cursor, nextSibling)) {\n      // The next new node has a soft match with this node, so\n      // increment the count of future soft matches\n      siblingSoftMatchCount++\n      nextSibling = nextSibling.nextSibling\n\n      // If there are two future soft matches, block soft matching for this node to allow\n      // future siblings to soft match. This is to reduce churn in the DOM when an element\n      // is prepended.\n      if (siblingSoftMatchCount >= 2) {\n        bestMatch = undefined\n      }\n    }\n\n    cursor = cursor.nextSibling\n  }\n\n  return bestMatch || null\n}\n\n// ok to cast: if one is not element, `id` and `tagName` will be null and we'll just compare that.\nconst isSoftMatch = (oldNode: Node, newNode: Node): boolean =>\n  oldNode.nodeType === newNode.nodeType &&\n  (oldNode as Element).tagName === (newNode as Element).tagName &&\n  // If oldElt has an `id` with possible state and it doesn\u2019t match newElt.id then avoid morphing.\n  // We'll still match an anonymous node with an IDed newElt, though, because if it got this far,\n  // its not persistent, and new nodes can't have any hidden state.\n  (!(oldNode as Element).id ||\n    (oldNode as Element).id === (newNode as Element).id)\n\n// Gets rid of an unwanted DOM node; strategy depends on nature of its reuse:\n// - Persistent nodes will be moved to the pantry for later reuse\n// - Other nodes will have their hooks called, and then are removed\nconst removeNode = (node: Node): void => {\n  // are we going to id set match this later?\n  ctxIdMap.has(node)\n    ? // skip callbacks and move to pantry\n      moveBefore(ctxPantry, node, null)\n    : // remove for realsies\n      node.parentNode?.removeChild(node)\n}\n\n// Moves an element before another element within the same parent.\n// Uses the proposed `moveBefore` API if available (and working), otherwise falls back to `insertBefore`.\n// This is essentially a forward-compat wrapper.\nconst moveBefore = (parentNode: Node, node: Node, after: Node | null): void => {\n  if ('moveBefore' in parentNode) {\n    const moveableParent = parentNode as Node & {\n      moveBefore: (node: Node, child: Node | null) => Node\n    }\n    moveableParent.moveBefore(node, after)\n    return\n  }\n  parentNode.insertBefore(node, after)\n}\n\nconst aliasedPreserveAttr = aliasify('preserve-attr')\n\n// syncs the oldNode to the newNode, copying over all attributes and\n// inner element state from the newNode to the oldNode\nconst morphNode = (\n  oldNode: Node, // root node to merge content into\n  newNode: Node, // new content to merge\n): Node => {\n  const type = newNode.nodeType\n\n  // if is an element type, sync the attributes from the\n  // new node into the new node\n  if (type === 1 /* element type */) {\n    const oldElt = oldNode as Element\n    const newElt = newNode as Element\n    const shouldScopeChildren = oldElt.hasAttribute('data-scope-children')\n    if (\n      oldElt.hasAttribute(aliasedIgnoreMorph) &&\n      newElt.hasAttribute(aliasedIgnoreMorph)\n    ) {\n      return oldNode\n    }\n\n    // The following logic for handling inputs, textareas, and options is finnicky.\n    // Only change with extreme caution and lots of testing!\n    // --\n    //  many bothans died to bring us this information:\n    //  https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n    //  https://github.com/choojs/nanomorph/blob/master/lib/morph.js#L113\n    // --\n\n    const preserveAttrs = (\n      (newNode as HTMLElement).getAttribute(aliasedPreserveAttr) ?? ''\n    ).split(' ')\n\n    const updateElementProp = (\n      oldElt: Element,\n      newElt: Element,\n      name: string,\n    ): boolean => {\n      const newEltHasAttr = newElt.hasAttribute(name)\n      if (\n        oldElt.hasAttribute(name) !== newEltHasAttr &&\n        !preserveAttrs.includes(name)\n      ) {\n        // @ts-expect-error - setting dynamic property for native DOM properties\n        oldElt[name] = newEltHasAttr\n        return true\n      }\n      return false\n    }\n\n    let shouldDispatchPropChangeEvent = false\n    if (\n      oldElt instanceof HTMLInput &&\n      newElt instanceof HTMLInput &&\n      newElt.type !== 'file'\n    ) {\n      // Modify the value only if the new element\u2019s value attribute is different from the old element\u2019s value attribute\n      const newValue = newElt.getAttribute('value')\n      if (\n        oldElt.getAttribute('value') !== newValue &&\n        !preserveAttrs.includes('value')\n      ) {\n        oldElt.value = newValue ?? ''\n        shouldDispatchPropChangeEvent = true\n      }\n      // Update checked and disabled properties\n      shouldDispatchPropChangeEvent =\n        updateElementProp(oldElt, newElt, 'checked') ||\n        shouldDispatchPropChangeEvent\n      updateElementProp(oldElt, newElt, 'disabled')\n    } else if (\n      oldElt instanceof HTMLTextAreaElement &&\n      newElt instanceof HTMLTextAreaElement\n    ) {\n      // Modify the value only if the new element\u2019s value is different from the old element\u2019s default value\n      const newValue = newElt.value\n      if (oldElt.defaultValue !== newValue) {\n        oldElt.value = newValue\n        shouldDispatchPropChangeEvent = true\n      }\n    } else if (\n      oldElt instanceof HTMLOptionElement &&\n      newElt instanceof HTMLOptionElement\n    ) {\n      shouldDispatchPropChangeEvent =\n        updateElementProp(oldElt, newElt, 'selected') ||\n        shouldDispatchPropChangeEvent\n    }\n\n    for (const { name, value } of newElt.attributes) {\n      if (\n        oldElt.getAttribute(name) !== value &&\n        !preserveAttrs.includes(name)\n      ) {\n        oldElt.setAttribute(name, value)\n      }\n    }\n\n    // Create a static copy, so we can iterate forward safely as we remove attributes\n    for (const { name } of Array.from(oldElt.attributes)) {\n      if (!newElt.hasAttribute(name) && !preserveAttrs.includes(name)) {\n        oldElt.removeAttribute(name)\n      }\n    }\n\n    if (shouldDispatchPropChangeEvent) {\n      const dispatchElt =\n        oldElt instanceof HTMLOptionElement ? oldElt.closest('select') : oldElt\n      dispatchElt?.dispatchEvent(\n        new Event(DATASTAR_PROP_CHANGE_EVENT, { bubbles: true }),\n      )\n    }\n\n    // Preserve the scope marker even if the incoming markup doesn't carry it.\n    if (shouldScopeChildren && !oldElt.hasAttribute('data-scope-children')) {\n      oldElt.setAttribute('data-scope-children', '')\n    }\n\n    if (\n      oldElt instanceof HTMLTemplateElement &&\n      newElt instanceof HTMLTemplateElement\n    ) {\n      oldElt.innerHTML = createHTML(newElt.innerHTML)\n    } else if (!oldElt.isEqualNode(newElt)) {\n      morphChildren(oldElt, newElt)\n    }\n\n    if (shouldScopeChildren) {\n      oldElt.dispatchEvent(\n        new CustomEvent(DATASTAR_SCOPE_CHILDREN_EVENT, { bubbles: false }),\n      )\n    }\n  }\n\n  if (type === 8 /* comment */ || type === 3 /* text */) {\n    if (oldNode.nodeValue !== newNode.nodeValue) {\n      oldNode.nodeValue = newNode.nodeValue\n    }\n  }\n\n  return oldNode\n}\n\n// A bottom-up algorithm that populates a map of Element -> IdSet.\n// The ID set for a given element is the set of all IDs contained within its subtree.\n// As an optimization, we filter these IDs through the given list of persistent IDs,\n// because we don't need to bother considering IDed elements that won't be in the new content.\nconst populateIdMapWithTree = (\n  root: Element | ShadowRoot | null,\n  elements: Iterable<Element>,\n): void => {\n  for (const elt of elements) {\n    if (ctxPersistentIds.has(elt.id)) {\n      let current: Element | null = elt\n      // walk up the parent hierarchy of that element, adding the ID of element to the parent's ID set\n      while (current && current !== root) {\n        let idSet = ctxIdMap.get(current)\n        // if the ID set doesn\u2019t exist, create it and insert it in the map\n        if (!idSet) {\n          idSet = new Set()\n          ctxIdMap.set(current, idSet)\n        }\n        idSet.add(elt.id)\n        current = current.parentElement\n      }\n    }\n  }\n}\n", "// Icon: material-symbols:settings-input-antenna\n// Slug: Patches signals.\n// Description: Patches signals.\n\nimport { watcher } from '@engine'\nimport { mergePatch } from '@engine/signals'\nimport { isStringTrue, jsStrToObject } from '@utils/text'\n\nwatcher({\n  name: 'datastar-patch-signals',\n  apply({ error }, { signals, onlyIfMissing }) {\n    if (typeof signals !== 'string') {\n      throw error('PatchSignalsExpectedSignals')\n    }\n\n    const ifMissing = isStringTrue(onlyIfMissing)\n    mergePatch(jsStrToObject(signals), { ifMissing })\n  },\n})\n", "import { jsStrToObject } from '@utils/text'\n\ntype DefaultValue<T> = T | (() => T)\n\nexport type Codec<T> = {\n  decode(value: unknown): T\n  encode(value: T): string\n}\n\nexport type CodecDocs = {\n  description?: string\n  label?: string\n  control?: 'auto' | 'text' | 'textarea' | 'number' | 'boolean' | 'select'\n  placeholder?: string\n}\n\nexport type CodecManifest = {\n  type:\n    | 'string'\n    | 'number'\n    | 'boolean'\n    | 'date'\n    | 'json'\n    | 'js'\n    | 'binary'\n    | 'array'\n    | 'tuple'\n    | 'object'\n    | 'oneOf'\n    | 'custom'\n  values?: readonly unknown[]\n  docs?: CodecDocs\n}\n\ntype RuntimeCodec<T> = Codec<T> & {\n  decode(value: unknown): T\n  encode(value: T): string\n  default(value: DefaultValue<T>): RuntimeCodec<T>\n  docs(meta: CodecDocs): RuntimeCodec<T>\n  readonly manifestMeta?: CodecManifest\n}\n\ntype DefaultableCodec<T> = RuntimeCodec<T> & {\n  readonly defaultFactory?: () => T\n  readonly manifestMeta?: CodecManifest\n}\n\nexport type InferCodec<T> = T extends RuntimeCodec<infer Value> ? Value : never\n\nexport type StringCodec = RuntimeCodec<string> & {\n  readonly trim: StringCodec\n  readonly upper: StringCodec\n  readonly lower: StringCodec\n  readonly kebab: StringCodec\n  readonly camel: StringCodec\n  readonly snake: StringCodec\n  readonly pascal: StringCodec\n  readonly title: StringCodec\n  prefix(value: string): StringCodec\n  suffix(value: string): StringCodec\n  maxLength(length: number): StringCodec\n  default(value: DefaultValue<string>): StringCodec\n}\n\nexport type NumberCodec = RuntimeCodec<number> & {\n  min(value: number): NumberCodec\n  max(value: number): NumberCodec\n  clamp(minValue: number, maxValue: number): NumberCodec\n  step(stepValue: number, base?: number): NumberCodec\n  readonly round: NumberCodec\n  ceil(decimals?: number): NumberCodec\n  floor(decimals?: number): NumberCodec\n  fit(\n    inMin: number,\n    inMax: number,\n    outMin: number,\n    outMax: number,\n    clamped?: boolean,\n    rounded?: boolean,\n  ): NumberCodec\n  default(value: DefaultValue<number>): NumberCodec\n}\n\nexport type BoolCodec = RuntimeCodec<boolean> & {\n  default(value: DefaultValue<boolean>): BoolCodec\n}\n\nexport type DateCodec = RuntimeCodec<Date> & {\n  default(value: DefaultValue<Date>): DateCodec\n}\n\nexport type JsonCodec<T = any> = RuntimeCodec<T> & {\n  default(value: DefaultValue<T>): JsonCodec<T>\n}\n\nexport type JsCodec<T = any> = RuntimeCodec<T> & {\n  default(value: DefaultValue<T>): JsCodec<T>\n}\n\nexport type BinCodec = RuntimeCodec<Uint8Array> & {\n  default(value: DefaultValue<Uint8Array>): BinCodec\n}\n\nexport type ArrayCodec<T> = RuntimeCodec<T[]> & {\n  default(value: DefaultValue<T[]>): ArrayCodec<T>\n}\n\nexport type TupleCodec<T extends readonly unknown[]> = RuntimeCodec<T> & {\n  default(value: DefaultValue<T>): TupleCodec<T>\n}\n\nexport type ObjectCodec<T extends Record<string, any>> = RuntimeCodec<T> & {\n  default(value: DefaultValue<T>): ObjectCodec<T>\n}\n\nexport type OneOfCodec<T> = RuntimeCodec<T> & {\n  default(value: DefaultValue<T>): OneOfCodec<T>\n}\n\nexport type CodecRegistry = {\n  string: StringCodec\n  number: NumberCodec\n  bool: BoolCodec\n  date: DateCodec\n  json: JsonCodec\n  js: JsCodec\n  bin: BinCodec\n  array<T>(codec: RuntimeCodec<T>): ArrayCodec<T>\n  array<T extends readonly RuntimeCodec<any>[]>(\n    ...codecs: T\n  ): TupleCodec<{ [K in keyof T]: InferCodec<T[K]> }>\n  object<T extends Record<string, RuntimeCodec<any>>>(\n    shape: T,\n  ): ObjectCodec<{ [K in keyof T]: InferCodec<T[K]> }>\n  oneOf<const T extends readonly unknown[]>(...values: T): OneOfCodec<T[number]>\n  oneOf<T extends readonly RuntimeCodec<any>[]>(\n    ...codecs: T\n  ): OneOfCodec<InferCodec<T[number]>>\n}\n\nexport type PropDefs = Record<string, RuntimeCodec<any>>\nexport type InferProps<T extends PropDefs> = {\n  [K in keyof T]: InferCodec<T[K]>\n}\n\n// Read a codec default without requiring callers to know whether it stores an explicit default factory.\nexport const getCodecDefault = <T>(codec: RuntimeCodec<T>) =>\n  'defaultFactory' in codec && typeof codec.defaultFactory === 'function'\n    ? codec.defaultFactory()\n    : codec.decode(undefined)\n\n// Fall back to the codec default when malformed prop input would otherwise break component setup/render.\nexport const decodeCodec = <T>(codec: RuntimeCodec<T>, value: unknown): T => {\n  try {\n    return codec.decode(value)\n  } catch (error) {\n    console.warn('Rocket codec decode failed', { value, error })\n    return getCodecDefault(codec)\n  }\n}\n\n// Clone object defaults so component instances do not share mutable state through one codec.\nconst cloneValue = <T>(value: T): T => {\n  if (value == null || typeof value !== 'object') return value\n  try {\n    return structuredClone(value)\n  } catch {\n    return value\n  }\n}\n\n// Normalize static and factory defaults into one cloning factory shape for the rest of the codec pipeline.\nconst toDefaultFactory = <T>(value: DefaultValue<T>): (() => T) => {\n  if (typeof value === 'function') {\n    return () => cloneValue((value as () => T)())\n  }\n  return () => cloneValue(value)\n}\n\n// Attach `.default(...)` to a codec factory so derived codecs preserve defaults while continuing to compose.\nconst withDefault = <T, C extends RuntimeCodec<T>>(\n  factory: (defaultFactory?: () => T, manifestMeta?: CodecManifest) => C,\n  defaultFactory?: () => T,\n  manifestMeta?: CodecManifest,\n) =>\n  ({\n    default(value: DefaultValue<T>) {\n      return factory(toDefaultFactory(value), manifestMeta)\n    },\n    docs(meta: CodecDocs) {\n      return factory(defaultFactory, {\n        ...(manifestMeta ?? { type: 'custom' }),\n        docs: meta,\n      })\n    },\n    defaultFactory,\n    manifestMeta,\n  }) as Pick<DefaultableCodec<T>, 'default' | 'defaultFactory'> &\n    Pick<DefaultableCodec<T>, 'docs' | 'manifestMeta'>\n\n// Lift plain decode/encode handlers into Rocket's runtime codec shape with default propagation.\nconst createCodecWithDefault = <T>(\n  { decode, encode }: Codec<T>,\n  defaultFactory?: () => T,\n  manifestMeta: CodecManifest = { type: 'custom' },\n): RuntimeCodec<T> =>\n  ({\n    decode,\n    encode,\n    ...withDefault<T, RuntimeCodec<T>>(\n      (nextDefaultFactory, nextManifestMeta) =>\n        createCodecWithDefault(\n          { decode, encode },\n          nextDefaultFactory,\n          nextManifestMeta ?? manifestMeta,\n        ),\n      defaultFactory,\n      manifestMeta,\n    ),\n  }) as RuntimeCodec<T>\n\nexport const createCodec = <T>(handlers: Codec<T>) =>\n  // Give custom codecs the same default and decode-fallback contract as built-ins.\n  createCodecWithDefault(handlers)\n\n// Let `number.fit(...)` declaratively normalize external numeric input from one range into another.\nconst fitNumber = (\n  value: number,\n  inMin: number,\n  inMax: number,\n  outMin: number,\n  outMax: number,\n  clamped = true,\n  rounded = false,\n) => {\n  if (inMax === inMin) return rounded ? Math.round(outMin) : outMin\n  const ratio = (value - inMin) / (inMax - inMin)\n  const normalized = clamped ? Math.max(0, Math.min(1, ratio)) : ratio\n  const result = outMin + (outMax - outMin) * normalized\n  return rounded ? Math.round(result) : result\n}\n\n// Parse JSON only for strings so codec combinators can reuse values that are already decoded.\nconst parseJSON = (value: unknown) => {\n  if (typeof value === 'string') {\n    try {\n      return JSON.parse(value)\n    } catch {\n      return undefined\n    }\n  }\n  return value\n}\n\n// Build composable string cleanup and case-shaping rules for Rocket props.\nconst createStringCodec = (\n  decode: (value: unknown) => string = (value) => String(value ?? ''),\n  encode: (value: string) => string = (value) => String(value ?? ''),\n  defaultFactory?: () => string,\n  manifestMeta: CodecManifest = { type: 'string' },\n): StringCodec => {\n  const mapString = (fn: (value: string) => string) =>\n    createStringCodec(\n      (value) => fn(decode(value)),\n      (value) => fn(encode(value)),\n      defaultFactory,\n      manifestMeta,\n    )\n\n  const codec = {\n    decode,\n    encode,\n    ...withDefault<string, StringCodec>(\n      createStringCodec.bind(null, decode, encode),\n      defaultFactory,\n      manifestMeta,\n    ),\n    prefix(value: string) {\n      return mapString((text) => (text.startsWith(value) ? text : value + text))\n    },\n    suffix(value: string) {\n      return mapString((text) => (text.endsWith(value) ? text : text + value))\n    },\n    maxLength(length: number) {\n      return mapString((value) => value.slice(0, length))\n    },\n  } as StringCodec\n\n  Object.defineProperties(codec, {\n    trim: { get: () => mapString((value) => value.trim()) },\n    upper: { get: () => mapString((value) => value.toUpperCase()) },\n    lower: { get: () => mapString((value) => value.toLowerCase()) },\n    kebab: {\n      get: () =>\n        mapString((value) =>\n          value\n            .trim()\n            .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n            .replace(/[\\s_]+/g, '-')\n            .toLowerCase(),\n        ),\n    },\n    camel: {\n      get: () =>\n        mapString((value) =>\n          value\n            .trim()\n            .replace(/[-_\\s]+(.)?/g, (_, char) =>\n              char ? char.toUpperCase() : '',\n            )\n            .replace(/^(.)/, (_, char) => char.toLowerCase()),\n        ),\n    },\n    snake: {\n      get: () =>\n        mapString((value) =>\n          value\n            .trim()\n            .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n            .replace(/[-\\s]+/g, '_')\n            .toLowerCase(),\n        ),\n    },\n    pascal: {\n      get: () =>\n        mapString((value) =>\n          value\n            .trim()\n            .replace(/(^|[-_\\s]+)(.)/g, (_, __, char) => char.toUpperCase()),\n        ),\n    },\n    title: {\n      get: () =>\n        mapString((value) =>\n          value.replace(/\\w\\S*/g, (part) => {\n            return part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()\n          }),\n        ),\n    },\n  })\n\n  return codec\n}\n\n// Build composable clamp, round, and range-mapping rules for numeric props.\nconst createNumberCodec = (\n  decode: (value: unknown) => number = (value) => {\n    const number = Number(value)\n    return Number.isFinite(number) ? number : 0\n  },\n  encode: (value: number) => string = (value) => `${value}`,\n  defaultFactory?: () => number,\n  manifestMeta: CodecManifest = { type: 'number' },\n): NumberCodec => {\n  const mapNumber = (fn: (value: number) => number) =>\n    createNumberCodec(\n      (value) => fn(decode(value)),\n      (value) => `${fn(Number(value))}`,\n      defaultFactory,\n      manifestMeta,\n    )\n\n  const codec = {\n    decode,\n    encode,\n    ...withDefault<number, NumberCodec>(\n      createNumberCodec.bind(null, decode, encode),\n      defaultFactory,\n      manifestMeta,\n    ),\n    min(value: number) {\n      return mapNumber((input) => Math.max(input, value))\n    },\n    max(value: number) {\n      return mapNumber((input) => Math.min(input, value))\n    },\n    clamp(minValue: number, maxValue: number) {\n      return mapNumber((input) => Math.max(minValue, Math.min(maxValue, input)))\n    },\n    step(stepValue: number, base = 0) {\n      return mapNumber(\n        (input) => base + Math.round((input - base) / stepValue) * stepValue,\n      )\n    },\n    ceil(decimals = 0) {\n      return mapNumber(\n        (input) => Math.ceil(input * 10 ** decimals) / 10 ** decimals,\n      )\n    },\n    floor(decimals = 0) {\n      return mapNumber(\n        (input) => Math.floor(input * 10 ** decimals) / 10 ** decimals,\n      )\n    },\n    fit(\n      inMin: number,\n      inMax: number,\n      outMin: number,\n      outMax: number,\n      clamped = true,\n      rounded = false,\n    ) {\n      return mapNumber((input) =>\n        fitNumber(input, inMin, inMax, outMin, outMax, clamped, rounded),\n      )\n    },\n  } as NumberCodec\n\n  Object.defineProperties(codec, {\n    round: {\n      get: () => mapNumber((value) => Math.round(value)),\n    },\n  })\n\n  return codec\n}\n\n// Decode HTML-style truthy values because attribute presence and string forms both represent boolean props.\nconst createBoolCodec = (\n  decode: (value: unknown) => boolean = (value) =>\n    value === true ||\n    value === '' ||\n    value === 'true' ||\n    value === 1 ||\n    value === '1',\n  encode: (value: boolean) => string = (value) => (value ? 'true' : 'false'),\n  defaultFactory?: () => boolean,\n  manifestMeta: CodecManifest = { type: 'boolean' },\n): BoolCodec => ({\n  decode,\n  encode,\n  ...withDefault<boolean, BoolCodec>(\n    createBoolCodec.bind(null, decode, encode),\n    defaultFactory,\n    manifestMeta,\n  ),\n})\n\n// Normalize date input and output through `Date` instances across attribute and imperative values.\nconst createDateCodec = (\n  decode: (value: unknown) => Date = (value) => {\n    if (value instanceof Date)\n      return Number.isNaN(value.getTime()) ? new Date() : value\n    const date = new Date(value as any)\n    return Number.isNaN(date.getTime()) ? new Date() : date\n  },\n  encode: (value: Date) => string = (value) => {\n    const date = value instanceof Date ? value : new Date(value)\n    return Number.isNaN(date.getTime())\n      ? new Date().toISOString()\n      : date.toISOString()\n  },\n  defaultFactory?: () => Date,\n  manifestMeta: CodecManifest = { type: 'date' },\n): DateCodec => ({\n  decode,\n  encode,\n  ...withDefault<Date, DateCodec>(\n    (nextDefaultFactory, nextManifestMeta) =>\n      createDateCodec(\n        decode,\n        encode,\n        nextDefaultFactory,\n        nextManifestMeta ?? manifestMeta,\n      ),\n    defaultFactory,\n    manifestMeta,\n  ),\n})\n\n// Clone decoded JSON values so component instances cannot mutate one another's structured props.\nconst createJsonCodec = <T = any>(\n  decode: (value: unknown) => T = (value) => {\n    const parsed = parseJSON(value)\n    if (parsed == null) return {} as T\n    return cloneValue(parsed as T)\n  },\n  encode: (value: T) => string = (value) => JSON.stringify(value),\n  defaultFactory?: () => T,\n  manifestMeta: CodecManifest = { type: 'json' },\n): JsonCodec<T> => ({\n  decode,\n  encode,\n  ...withDefault<T, JsonCodec<T>>(\n    (nextDefaultFactory, nextManifestMeta) =>\n      createJsonCodec(\n        decode,\n        encode,\n        nextDefaultFactory,\n        nextManifestMeta ?? manifestMeta,\n      ),\n    defaultFactory,\n    manifestMeta,\n  ),\n})\n\n// Revive functions in JS-like serialized objects for props that intentionally allow richer data than JSON.\nconst createJsCodec = <T = any>(\n  decode: (value: unknown) => T = (value) => {\n    if (typeof value === 'string') {\n      try {\n        return jsStrToObject(value, { reviveFunctionStrings: true }) as T\n      } catch {\n        return {} as T\n      }\n    }\n    if (value == null) return {} as T\n    return cloneValue(value as T)\n  },\n  encode: (value: T) => string = (value) => JSON.stringify(value),\n  defaultFactory?: () => T,\n  manifestMeta: CodecManifest = { type: 'js' },\n): JsCodec<T> => ({\n  decode,\n  encode,\n  ...withDefault<T, JsCodec<T>>(\n    (nextDefaultFactory, nextManifestMeta) =>\n      createJsCodec(\n        decode,\n        encode,\n        nextDefaultFactory,\n        nextManifestMeta ?? manifestMeta,\n      ),\n    defaultFactory,\n    manifestMeta,\n  ),\n})\n\n// Encode binary props as base64 so byte arrays cross attribute boundaries without losing fidelity.\nconst createBinCodec = (\n  decode: (value: unknown) => Uint8Array = (value) => {\n    if (value instanceof Uint8Array) return value\n    const text = atob(String(value ?? ''))\n    const bytes = new Uint8Array(text.length)\n    for (let i = 0; i < text.length; i += 1) bytes[i] = text.charCodeAt(i)\n    return bytes\n  },\n  encode: (value: Uint8Array) => string = (value) =>\n    btoa(Array.from(value, (byte) => String.fromCharCode(byte)).join('')),\n  defaultFactory?: () => Uint8Array,\n  manifestMeta: CodecManifest = { type: 'binary' },\n): BinCodec => ({\n  decode,\n  encode,\n  ...withDefault<Uint8Array, BinCodec>(\n    (nextDefaultFactory, nextManifestMeta) =>\n      createBinCodec(\n        decode,\n        encode,\n        nextDefaultFactory,\n        nextManifestMeta ?? manifestMeta,\n      ),\n    defaultFactory,\n    manifestMeta,\n  ),\n})\n\n// Reuse one item codec's decode/default semantics across every value in a list prop.\nconst createArrayCodec = <T>(\n  codec: RuntimeCodec<T>,\n  defaultFactory?: () => T[],\n  manifestMeta: CodecManifest = { type: 'array' },\n): ArrayCodec<T> => ({\n  decode(value: unknown) {\n    const parsed = parseJSON(value)\n    const array = Array.isArray(parsed) ? parsed : []\n    return array.map((item) => decodeCodec(codec, item))\n  },\n  encode(value: T[]) {\n    return JSON.stringify(\n      value.map((item) => parseJSON(codec.encode(item)) ?? codec.encode(item)),\n    )\n  },\n  ...withDefault<T[], ArrayCodec<T>>(\n    (nextDefaultFactory, nextManifestMeta) =>\n      createArrayCodec(\n        codec,\n        nextDefaultFactory,\n        nextManifestMeta ?? manifestMeta,\n      ),\n    defaultFactory,\n    manifestMeta,\n  ),\n})\n\n// Preserve per-position codecs and defaults in heterogeneous tuple props.\nconst createTupleCodec = <T extends readonly RuntimeCodec<any>[]>(\n  codecs: T,\n  defaultFactory?: () => { [K in keyof T]: InferCodec<T[K]> },\n  manifestMeta: CodecManifest = { type: 'tuple' },\n): TupleCodec<{ [K in keyof T]: InferCodec<T[K]> }> => ({\n  decode(value: unknown) {\n    const parsed = parseJSON(value)\n    const array = Array.isArray(parsed) ? parsed : []\n    return codecs.map((codec, index) => {\n      if (index < array.length) return decodeCodec(codec, array[index])\n      return getCodecDefault(codec)\n    }) as { [K in keyof T]: InferCodec<T[K]> }\n  },\n  encode(value: { [K in keyof T]: InferCodec<T[K]> }) {\n    return JSON.stringify(\n      value.map((item, index) => {\n        const encoded = codecs[index]!.encode(item)\n        return parseJSON(encoded) ?? encoded\n      }),\n    )\n  },\n  ...withDefault<\n    { [K in keyof T]: InferCodec<T[K]> },\n    TupleCodec<{ [K in keyof T]: InferCodec<T[K]> }>\n  >(\n    (nextDefaultFactory, nextManifestMeta) =>\n      createTupleCodec(\n        codecs,\n        nextDefaultFactory,\n        nextManifestMeta ?? manifestMeta,\n      ),\n    defaultFactory,\n    manifestMeta,\n  ),\n})\n\n// Decode object props field by field through a fixed shape of child codecs and defaults.\nconst createObjectCodec = <T extends Record<string, RuntimeCodec<any>>>(\n  shape: T,\n  defaultFactory?: () => { [K in keyof T]: InferCodec<T[K]> },\n  manifestMeta: CodecManifest = { type: 'object' },\n): ObjectCodec<{ [K in keyof T]: InferCodec<T[K]> }> => ({\n  decode(value: unknown) {\n    const parsed = parseJSON(value)\n    const source = (\n      parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n        ? parsed\n        : {}\n    ) as Record<string, unknown>\n    const next = {} as { [K in keyof T]: InferCodec<T[K]> }\n    for (const [key, codec] of Object.entries(shape)) {\n      next[key as keyof T] =\n        key in source ? decodeCodec(codec, source[key]) : getCodecDefault(codec)\n    }\n    return next\n  },\n  encode(value: { [K in keyof T]: InferCodec<T[K]> }) {\n    const next: Record<string, unknown> = {}\n    for (const [key, codec] of Object.entries(shape)) {\n      const encoded = codec.encode(value[key as keyof T])\n      next[key] = parseJSON(encoded) ?? encoded\n    }\n    return JSON.stringify(next)\n  },\n  ...withDefault<\n    { [K in keyof T]: InferCodec<T[K]> },\n    ObjectCodec<{ [K in keyof T]: InferCodec<T[K]> }>\n  >(\n    (nextDefaultFactory, nextManifestMeta) =>\n      createObjectCodec(\n        shape,\n        nextDefaultFactory,\n        nextManifestMeta ?? manifestMeta,\n      ),\n    defaultFactory,\n    manifestMeta,\n  ),\n})\n\n// Distinguish literal `oneOf(...)` entries from codec entries so one API can support both union styles.\nconst isCodec = (value: unknown): value is RuntimeCodec<any> =>\n  !!value && typeof value === 'object' && 'decode' in value && 'encode' in value\n\nconst oneOfDefaultFactory = <T>(\n  values: readonly unknown[],\n  defaultFactory?: () => T,\n) => {\n  if (defaultFactory) return defaultFactory\n  const entry = values[0]\n  if (isCodec(entry)) return () => getCodecDefault(entry) as T\n  return () => entry as T\n}\n\nconst codecValueKind = (value: unknown) =>\n  value instanceof Date\n    ? Date\n    : value instanceof Uint8Array\n      ? Uint8Array\n      : Array.isArray(value)\n        ? Array\n        : value === null\n          ? null\n          : typeof value\n\nconst codecMatchesValue = (\n  codec: RuntimeCodec<any>,\n  value: unknown,\n): boolean => {\n  // A successful round trip identifies the runtime union member without rejecting codecs that intentionally normalize values while encoding.\n  try {\n    return (\n      codecValueKind(value) ===\n      codecValueKind(codec.decode(codec.encode(value)))\n    )\n  } catch {\n    return false\n  }\n}\n\nconst codecMatchesInput = (codec: RuntimeCodec<any>, value: unknown) => {\n  const parsed = parseJSON(value)\n  switch (getCodecManifest(codec).type) {\n    case 'string':\n      return (\n        typeof parsed === 'string' ||\n        (typeof value === 'string' && parsed === undefined)\n      )\n    case 'number':\n      return typeof parsed === 'number' && Number.isFinite(parsed)\n    case 'boolean':\n      return (\n        typeof parsed === 'boolean' ||\n        value === '' ||\n        value === 1 ||\n        value === '1'\n      )\n    case 'date':\n      return (\n        value instanceof Date ||\n        (typeof value === 'string' &&\n          value !== '' &&\n          !Number.isNaN(Date.parse(value)))\n      )\n    case 'binary':\n      return value instanceof Uint8Array || typeof value === 'string'\n    case 'array':\n    case 'tuple':\n      return Array.isArray(parsed)\n    case 'object':\n      return (\n        parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)\n      )\n    case 'json':\n    case 'js':\n      return parsed !== undefined\n    default:\n      try {\n        codec.decode(value)\n        return true\n      } catch {\n        return false\n      }\n  }\n}\n\n// Build a union over literals and child codecs so props can declare a constrained set of values.\nconst createOneOfCodec = <T>(\n  values: readonly unknown[],\n  defaultFactory?: () => T,\n  manifestMeta: CodecManifest = {\n    type: 'oneOf',\n    values: values.map((entry) =>\n      isCodec(entry) ? getCodecManifest(entry) : entry,\n    ),\n  },\n): OneOfCodec<T> => ({\n  decode(value: unknown) {\n    let hadDecodeError = false\n    const parsedValue = parseJSON(value)\n    for (const entry of values) {\n      if (isCodec(entry) && codecMatchesInput(entry, value)) {\n        try {\n          return entry.decode(value) as T\n        } catch {\n          hadDecodeError = true\n        }\n      }\n      if (\n        entry === value ||\n        entry === parsedValue ||\n        `${entry}` === `${value}`\n      ) {\n        return entry as T\n      }\n    }\n    if (hadDecodeError) {\n      console.warn('Rocket codec decode failed', { value })\n    }\n    if (defaultFactory) return defaultFactory()\n    return oneOfDefaultFactory<T>(values)()\n  },\n  encode(value: T) {\n    for (const entry of values) {\n      if (isCodec(entry) && codecMatchesValue(entry, value)) {\n        return entry.encode(value)\n      }\n      if (Object.is(entry, value)) return `${value}`\n    }\n    return `${value}`\n  },\n  ...withDefault<T, OneOfCodec<T>>(\n    (nextDefaultFactory, nextManifestMeta) =>\n      createOneOfCodec(\n        values,\n        nextDefaultFactory,\n        nextManifestMeta ?? manifestMeta,\n      ),\n    oneOfDefaultFactory(values, defaultFactory),\n    manifestMeta,\n  ),\n})\n\nfunction oneOf<const T extends readonly unknown[]>(\n  ...values: T\n): OneOfCodec<T[number]>\nfunction oneOf<T extends readonly RuntimeCodec<any>[]>(\n  ...codecs: T\n): OneOfCodec<InferCodec<T[number]>>\nfunction oneOf(...values: readonly unknown[]) {\n  return createOneOfCodec(values)\n}\n\nexport const getCodecManifest = <T>(codec: RuntimeCodec<T>) =>\n  'manifestMeta' in codec && codec.manifestMeta\n    ? codec.manifestMeta\n    : ({ type: 'custom' } as CodecManifest)\n\nexport const codecRegistry: CodecRegistry = {\n  // Share one registry so every component composes the same prop codec semantics.\n  string: createStringCodec(),\n  number: createNumberCodec(),\n  bool: createBoolCodec(),\n  date: createDateCodec(),\n  json: createJsonCodec(),\n  js: createJsCodec(),\n  bin: createBinCodec(),\n  array: ((...codecs: readonly RuntimeCodec<any>[]) => {\n    if (codecs.length === 1) return createArrayCodec(codecs[0]!)\n    return createTupleCodec(codecs)\n  }) as CodecRegistry['array'],\n  object: createObjectCodec,\n  oneOf,\n}\n", "import { createError } from '@engine/errors'\nimport type { Modifiers } from '@engine/types'\nimport { modifyCasing } from '@utils/text'\n\n// Carries the signal base and any loop-local aliases that a rewritten Rocket subtree should resolve against.\n//\n// Rocket templates author against `$$foo`, `block`, `i`, etc., so every rewrite pass needs the component's private base path and any local alias remaps in scope.\nexport type TaggedLiteralScope = {\n  signalPathBase: string\n  localSignals?: Record<string, string>\n}\n\nexport type TaggedLiteral = (\n  strings: TemplateStringsArray,\n  ...values: unknown[]\n) => DocumentFragment\n\n// Minimal parse modes for placing inert interpolation markers into static HTML while keeping runtime values out of the markup passed to the parser.\ntype TemplateContext =\n  | 'data'\n  | 'tag'\n  | 'attrDouble'\n  | 'attrSingle'\n  | 'attrUnquoted'\n  | 'rawtext'\n  | 'comment'\n  | 'declaration'\n\n// Stateful scanner carried across template string chunks.\n//\n// Tagged templates split source around interpolations, so this tracks enough HTML context to identify where the next `${...}` occurs without parsing the DOM twice.\ntype TemplateScanState = {\n  context: TemplateContext\n  tagName: string\n  closingTag: boolean\n  captureTagName: boolean\n  expectAttributeValue: boolean\n  rawTextTag: string\n}\n\nconst rawTextTags = new Set(['script', 'style', 'textarea', 'title'])\n\n// Append Nodes and nested iterables into a fragment so `${child}` and `${items.map(...)}` compose DOM instead of being serialized as HTML text.\nexport const appendComposedTemplateValue = (\n  fragment: DocumentFragment,\n  value: unknown,\n) => {\n  if (value == null || typeof value === 'boolean') return\n  if (value instanceof Node) {\n    fragment.appendChild(value)\n    return\n  }\n  if (\n    value instanceof Date ||\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    typeof value === 'bigint'\n  ) {\n    fragment.appendChild(document.createTextNode(stringifyTemplateValue(value)))\n    return\n  }\n  if (\n    typeof value !== 'object' ||\n    value === null ||\n    !(Symbol.iterator in value)\n  ) {\n    throw createError({ valueType: typeof value }, 'RocketTemplateInvalidValue')\n  }\n  for (const item of value as Iterable<unknown>) {\n    appendComposedTemplateValue(fragment, item)\n  }\n}\n\n// Build one HTML or SVG fragment from a tagged template in two phases:\n//\n// 1. parse only the trusted static chunks plus inert interpolation markers\n// 2. resolve those markers through DOM APIs before `postprocess(...)`\n//\n// Rocket needs this split pipeline because its templates allow all of these at once:\n// - primitives in text or attribute positions\n// - boolean-style whole-attribute expressions like `disabled=${flag}`\n// - DOM nodes and nested iterables like `${children}`\n// - a final rewrite pass that scopes Datastar attributes after parsing\n//\n// Runtime values consequently cannot change the parsed structure, while the browser still performs the actual HTML/SVG parsing.\nexport function hypertext(\n  render: (string: string) => ParentNode,\n  postprocess: (root: ParentNode) => DocumentFragment,\n) {\n  return ({ raw: strings }: TemplateStringsArray, ...values: unknown[]) => {\n    const state: TemplateScanState = {\n      context: 'data',\n      tagName: '',\n      closingTag: false,\n      captureTagName: false,\n      expectAttributeValue: false,\n      rawTextTag: '',\n    }\n    let markerPrefix = 'rocketmarker'\n    // Keep the prefix distinct from static template content so ordinary text cannot be mistaken for an interpolation marker during resolution.\n    while (strings.some((string) => string.includes(markerPrefix))) {\n      markerPrefix += 'x'\n    }\n    const marker = (index: number) => `${markerPrefix}${index}x`\n    const markerContexts: TemplateContext[] = []\n    let string = ''\n\n    for (let j = 0; j < strings.length; ++j) {\n      const input = strings[j]\n      // Advance the scanner across this chunk so the next interpolation can use a parser-safe marker without placing its runtime value in the HTML source.\n      for (let i = 0; i < input.length; i += 1) {\n        const char = input[i]\n        switch (state.context) {\n          case 'data':\n            if (input.startsWith('<!--', i)) {\n              state.context = 'comment'\n              i += 3\n              continue\n            }\n            if (char === '<') {\n              if (input[i + 1] === '!' || input[i + 1] === '?') {\n                state.context = 'declaration'\n                continue\n              }\n              state.context = 'tag'\n              state.tagName = ''\n              state.closingTag = input[i + 1] === '/'\n              state.captureTagName = true\n              state.expectAttributeValue = false\n            }\n            break\n          case 'comment':\n            if (input.startsWith('-->', i)) {\n              state.context = 'data'\n              i += 2\n            }\n            break\n          case 'declaration':\n            if (char === '>') state.context = 'data'\n            break\n          case 'rawtext':\n            if (\n              char === '<' &&\n              input\n                .slice(i + 1, i + 2 + state.rawTextTag.length)\n                .toLowerCase() === `/${state.rawTextTag}` &&\n              (!input[i + 2 + state.rawTextTag.length] ||\n                /[\\s/>]/.test(input[i + 2 + state.rawTextTag.length] ?? ''))\n            ) {\n              state.context = 'tag'\n              state.tagName = ''\n              state.closingTag = true\n              state.captureTagName = true\n              state.expectAttributeValue = false\n            }\n            break\n          case 'tag':\n            if (!state.tagName) {\n              if (state.closingTag && char === '/') continue\n              if (/\\s/.test(char)) continue\n              if (char === '>') {\n                state.context = state.rawTextTag ? 'rawtext' : 'data'\n                state.closingTag = false\n                state.captureTagName = false\n                state.expectAttributeValue = false\n                continue\n              }\n              state.tagName = char.toLowerCase()\n              continue\n            }\n            if (state.captureTagName) {\n              if (!/[\\s/>]/.test(char)) {\n                state.tagName += char.toLowerCase()\n                continue\n              }\n              state.captureTagName = false\n            }\n            if (char === '>') {\n              if (state.closingTag) {\n                if (state.tagName === state.rawTextTag) state.rawTextTag = ''\n                state.context = 'data'\n              } else if (rawTextTags.has(state.tagName)) {\n                state.rawTextTag = state.tagName\n                state.context = 'rawtext'\n              } else {\n                state.context = 'data'\n              }\n              state.closingTag = false\n              state.captureTagName = false\n              state.expectAttributeValue = false\n              continue\n            }\n            if (state.closingTag) continue\n            if (state.expectAttributeValue) {\n              if (/\\s/.test(char)) continue\n              state.expectAttributeValue = false\n              if (char === '\"') state.context = 'attrDouble'\n              else if (char === \"'\") state.context = 'attrSingle'\n              else state.context = 'attrUnquoted'\n              continue\n            }\n            if (char === '=') state.expectAttributeValue = true\n            break\n          case 'attrDouble':\n            if (char === '\"') state.context = 'tag'\n            break\n          case 'attrSingle':\n            if (char === \"'\") state.context = 'tag'\n            break\n          case 'attrUnquoted':\n            if (/\\s/.test(char)) state.context = 'tag'\n            else if (char === '>') {\n              if (state.closingTag) {\n                if (state.tagName === state.rawTextTag) state.rawTextTag = ''\n                state.context = 'data'\n              } else if (rawTextTags.has(state.tagName)) {\n                state.rawTextTag = state.tagName\n                state.context = 'rawtext'\n              } else {\n                state.context = 'data'\n              }\n              state.closingTag = false\n              state.captureTagName = false\n              state.expectAttributeValue = false\n            }\n            break\n        }\n      }\n      string += input\n      if (j === values.length) continue\n\n      let context = state.context\n      if (context === 'tag' && state.expectAttributeValue) {\n        // An interpolation immediately after `=` has no value character to move the scanner into an attribute context, so treat it as unquoted data.\n        context = 'attrUnquoted'\n        state.context = context\n        state.expectAttributeValue = false\n      }\n      markerContexts[j] = context\n      const token = marker(j)\n      // Comments reserve positions that can expand into nodes, while attributes and raw-text contexts require plain tokens that remain inside their values.\n      if (context === 'data') string += `<!--${token}-->`\n      else if (\n        context === 'attrDouble' ||\n        context === 'attrSingle' ||\n        context === 'attrUnquoted' ||\n        context === 'rawtext'\n      ) {\n        string += token\n      } else {\n        throw createError(\n          { context, valueType: typeof values[j] },\n          'RocketTemplateInvalidComposition',\n        )\n      }\n    }\n    const root = render(string)\n\n    const resolved = values.map(() => false)\n    const markerPattern = new RegExp(`${markerPrefix}(\\\\d+)x`, 'g')\n    const replaceMarkers = (\n      source: string,\n      replace: (index: number) => string,\n    ) =>\n      source.replace(markerPattern, (_, rawIndex: string) => {\n        const index = +rawIndex\n        resolved[index] = true\n        return replace(index)\n      })\n    const stringifyMarkerValue = (index: number) => {\n      const value = values[index]\n      // Nodes and iterables compose meaningfully only at node positions, and stringifying them elsewhere would conceal an invalid composition.\n      if (\n        value instanceof Node ||\n        (typeof value === 'object' &&\n          value !== null &&\n          Symbol.iterator in value)\n      ) {\n        throw createError(\n          {\n            context: markerContexts[index],\n            valueType: value instanceof Node ? 'node' : 'iterable',\n          },\n          'RocketTemplateInvalidComposition',\n        )\n      }\n      return stringifyTemplateValue(value)\n    }\n\n    const resolveMarkers = (target: ParentNode) => {\n      const elements =\n        target instanceof Element\n          ? [target, ...target.querySelectorAll('*')]\n          : [...target.querySelectorAll('*')]\n      for (const element of elements) {\n        for (const attr of [...element.attributes]) {\n          if (!attr.value.includes(markerPrefix)) continue\n          const match = attr.value.match(new RegExp(`^${markerPrefix}(\\\\d+)x$`))\n          if (match) {\n            // A marker that occupies the entire value preserves optional and boolean attribute semantics; partial values retain their surrounding text.\n            const index = +match[1]\n            const value = values[index]\n            resolved[index] = true\n            if (value == null || value === false || value === '') {\n              element.removeAttribute(attr.name)\n            } else if (value === true) {\n              element.setAttribute(attr.name, '')\n            } else {\n              element.setAttribute(attr.name, stringifyMarkerValue(index))\n            }\n            continue\n          }\n          element.setAttribute(\n            attr.name,\n            replaceMarkers(attr.value, stringifyMarkerValue),\n          )\n        }\n      }\n\n      const comments = document.createTreeWalker(\n        target,\n        NodeFilter.SHOW_COMMENT,\n      )\n      const commentNodes: Comment[] = []\n      while (comments.nextNode())\n        commentNodes.push(comments.currentNode as Comment)\n      for (const node of commentNodes) {\n        const match = node.data.match(new RegExp(`^${markerPrefix}(\\\\d+)x$`))\n        if (!match) continue\n        const index = +match[1]\n        resolved[index] = true\n        const fragment = document.createDocumentFragment()\n        appendComposedTemplateValue(fragment, values[index])\n        node.replaceWith(fragment)\n      }\n\n      const text = document.createTreeWalker(target, NodeFilter.SHOW_TEXT)\n      const textNodes: Text[] = []\n      while (text.nextNode()) textNodes.push(text.currentNode as Text)\n      for (const node of textNodes) {\n        if (!node.data.includes(markerPrefix)) continue\n        node.data = replaceMarkers(node.data, (index) => {\n          const value = values[index]\n          if (value == null || typeof value === 'boolean') return ''\n          return stringifyMarkerValue(index)\n        })\n      }\n\n      // Template contents live in separate document fragments that normal descendant traversal does not enter.\n      for (const element of elements) {\n        if (element instanceof HTMLTemplateElement) {\n          resolveMarkers(element.content)\n        }\n      }\n    }\n    resolveMarkers(root)\n\n    const unresolved = resolved.findIndex((value) => !value)\n    if (unresolved !== -1) {\n      throw createError(\n        {\n          context: markerContexts[unresolved],\n          valueType: typeof values[unresolved],\n        },\n        'RocketTemplateInvalidComposition',\n      )\n    }\n    return postprocess(root as DocumentFragment)\n  }\n}\n\nexport const signalNameAttributes = new Set([\n  'bind',\n  'computed',\n  'indicator',\n  'ref',\n  'signals',\n])\n\nconst directSignalValuePlugins = new Set(['bind', 'indicator', 'ref'])\nconst rootModifierPattern = /__root\\b/g\n\nexport const rocketDispatchActionName = 'dispatchRocket'\nexport const rocketRefAttr = 'data-rocket-ref'\n\nconst parseTemplateModifiers = (raw: string): Modifiers => {\n  const mods: Modifiers = new Map()\n  for (const rawModifier of raw.split('__').slice(1)) {\n    const [name, ...values] = rawModifier.split('.')\n    mods.set(name, new Set(values))\n  }\n  return mods\n}\n\nconst toRocketRefName = (raw: string) => {\n  const name = raw.split('__', 1)[0]\n  return modifyCasing(name, parseTemplateModifiers(raw))\n}\n\n// Convert Rocket-authored expressions into plain Datastar expressions so the engine can evaluate local `$$...` state, loop aliases, and local actions.\nconst rewriteDatastarExpression = (\n  value: string,\n  scope: TaggedLiteralScope,\n): string => {\n  const { signalPathBase, localSignals = {} } = scope\n  const aliases = Object.keys(localSignals).sort(\n    (left, right) => right.length - left.length,\n  )\n  const aliasPattern = aliases\n    .map((name) => name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n    .join('|')\n  // Protect literal and comment regions first, then recursively rewrite template substitutions and executable expression tokens.\n  return value.replace(\n    new RegExp(\n      `(//[^\\\\n]*|/\\\\*[\\\\s\\\\S]*?\\\\*/|\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\"|'[^'\\\\\\\\]*(?:\\\\\\\\.[^'\\\\\\\\]*)*'|(?:^|[([{,:;=!?&|+*%^~<>-]\\\\s*|\\\\b(?:return|throw|case|delete|void|typeof|instanceof|in|of|yield|await)\\\\s+)/(?:\\\\\\\\.|\\\\[(?:\\\\\\\\.|[^\\\\]\\\\\\\\])*\\\\]|[^/\\\\\\\\[])+/[dgimsuvy]*)|(\\`(?:\\\\\\\\.|[^\\`\\\\\\\\])*\\`)|\\\\$\\\\$([a-zA-Z_\\\\d]\\\\w*(?:[.-]\\\\w+)*)|@([A-Za-z_$][\\\\w$]*)\\\\(|${aliasPattern ? `(?<![\\\\w$.])(${aliasPattern})(?![\\\\w$]|\\\\s*:)` : '(?!)'}`,\n      'gm',\n    ),\n    (\n      match,\n      protectedRegion: string | undefined,\n      template: string | undefined,\n      signal: string | undefined,\n      action: string | undefined,\n      alias: string | undefined,\n    ) => {\n      if (protectedRegion) return protectedRegion\n      if (template) {\n        return template.replace(\n          /\\$\\{((?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|`(?:\\\\.|[^`\\\\])*`|\\/(?:\\\\.|[^/\\\\])+\\/[dgimsuvy]*|\\{(?:[^{}]|\\{[^{}]*\\})*\\}|[^{}])*)\\}/g,\n          (_, expression: string) =>\n            `\\${${rewriteDatastarExpression(expression, scope)}}`,\n        )\n      }\n      if (signal) return `$.${signalPathBase}.${signal}`\n      if (action) {\n        return action === rocketDispatchActionName\n          ? match\n          : `@${rocketDispatchActionName}(${JSON.stringify(action)},`\n      }\n      return `$.${localSignals[alias!]}`\n    },\n  )\n}\n\n// Re-scope Rocket aliases like `$$count`, loop locals, and `@foo(...)` into the concrete signal/action paths Datastar executes for this subtree instance.\nexport const rewriteDataAttributes = (\n  root: ParentNode,\n  scope?: TaggedLiteralScope,\n) => {\n  if (!scope) return\n  const { signalPathBase, localSignals = {} } = scope\n  const nodes =\n    root instanceof Element\n      ? [root, ...root.querySelectorAll('*')]\n      : [...root.children, ...root.querySelectorAll('*')]\n  for (const node of nodes) {\n    for (const attr of [...node.attributes]) {\n      if (attr.name === 'data-signals') {\n        if (node.hasAttribute(`data-signals:${signalPathBase}`)) {\n          node.removeAttribute(attr.name)\n          continue\n        }\n        node.removeAttribute(attr.name)\n        node.setAttribute(`data-signals:${signalPathBase}`, attr.value)\n        continue\n      }\n      if (attr.name.startsWith('data-signals:')) {\n        const signalName = attr.name.slice('data-signals:'.length)\n        if (\n          signalName === signalPathBase ||\n          signalName.startsWith(`${signalPathBase}.`)\n        ) {\n          continue\n        }\n        node.removeAttribute(attr.name)\n        node.setAttribute(\n          `data-signals:${signalPathBase}.${signalName}`,\n          attr.value,\n        )\n        continue\n      }\n      if (!attr.name.startsWith('data-')) continue\n      const attrBody = attr.name.slice('data-'.length)\n      const colonIndexInBody = attrBody.indexOf(':')\n      const pluginSegment =\n        colonIndexInBody === -1 ? attrBody : attrBody.slice(0, colonIndexInBody)\n      const attrBodyWithoutMods = pluginSegment.split('__', 1)[0]\n      const pluginName = attrBodyWithoutMods.split(':', 1)[0]\n      if (pluginName === 'ref') {\n        const colonIndex = attr.name.indexOf(':')\n        const refName =\n          colonIndex !== -1\n            ? toRocketRefName(attr.name.slice(colonIndex + 1))\n            : toRocketRefName(attr.value)\n        node.removeAttribute(attr.name)\n        if (refName) {\n          node.setAttribute(rocketRefAttr, refName)\n        }\n        continue\n      }\n      if (signalNameAttributes.has(pluginName)) {\n        const colonIndex = attr.name.indexOf(':')\n        if (colonIndex !== -1) {\n          const keyWithMods = attr.name.slice(colonIndex + 1)\n          const key = keyWithMods.split('__', 1)[0]\n          const usesRoot = keyWithMods.includes('__root')\n          if (usesRoot) {\n            const nextValue = rewriteDatastarExpression(attr.value, scope)\n            const nextName = `${attr.name\n              .slice(0, colonIndex + 1)\n              .replace(\n                rootModifierPattern,\n                '',\n              )}${keyWithMods.replace(rootModifierPattern, '')}`\n            if (nextName !== attr.name) {\n              node.removeAttribute(attr.name)\n              node.setAttribute(nextName, nextValue)\n            } else if (nextValue !== attr.value) {\n              node.setAttribute(attr.name, nextValue)\n            }\n            continue\n          }\n          const localSignal = localSignals[key]\n          if (localSignal) {\n            const nextValue = rewriteDatastarExpression(attr.value, scope)\n            if (\n              attr.name !==\n              `${attr.name.slice(0, colonIndex + 1)}${localSignal}`\n            ) {\n              node.removeAttribute(attr.name)\n              node.setAttribute(\n                `${attr.name.slice(0, colonIndex + 1)}${localSignal}${keyWithMods.slice(key.length)}`,\n                nextValue,\n              )\n            } else if (nextValue !== attr.value) {\n              node.setAttribute(attr.name, nextValue)\n            }\n            continue\n          }\n          const scopedKeyWithMods = key.startsWith(`${signalPathBase}.`)\n            ? keyWithMods\n            : keyWithMods.replace(key, `${signalPathBase}.${key}`)\n          const nextValue = rewriteDatastarExpression(attr.value, scope)\n          if (scopedKeyWithMods !== keyWithMods) {\n            node.removeAttribute(attr.name)\n            node.setAttribute(\n              `${attr.name.slice(0, colonIndex + 1)}${scopedKeyWithMods}`,\n              nextValue,\n            )\n          } else if (nextValue !== attr.value) {\n            node.setAttribute(attr.name, nextValue)\n          }\n          continue\n        }\n        if (directSignalValuePlugins.has(pluginName)) {\n          const usesRoot = attrBody.includes('__root')\n          if (usesRoot) {\n            const nextName = attr.name.replace(rootModifierPattern, '')\n            if (nextName !== attr.name) {\n              node.removeAttribute(attr.name)\n              node.setAttribute(nextName, attr.value)\n            }\n            continue\n          }\n          if (pluginName === 'ref' && attr.value) {\n            if (\n              attr.value === signalPathBase ||\n              attr.value.startsWith(`${signalPathBase}.`)\n            ) {\n              continue\n            }\n            const localSignal = localSignals[attr.value]\n            if (localSignal) {\n              node.setAttribute(attr.name, localSignal)\n              continue\n            }\n            node.setAttribute(attr.name, `${signalPathBase}.${attr.value}`)\n            continue\n          }\n          const localSignal = localSignals[attr.value]\n          if (localSignal) {\n            node.setAttribute(attr.name, localSignal)\n            continue\n          }\n          if (attr.value.startsWith('$$')) {\n            node.setAttribute(\n              attr.name,\n              `${signalPathBase}.${attr.value.slice(2)}`,\n            )\n          }\n          continue\n        }\n      }\n      const nextValue = rewriteDatastarExpression(attr.value, scope)\n      if (nextValue === attr.value) continue\n      node.setAttribute(attr.name, nextValue)\n    }\n  }\n}\n\n// Convert a supported primitive template value into its DOM text form.\nfunction stringifyTemplateValue(value: unknown) {\n  if (value instanceof Date) return value.toISOString()\n  switch (typeof value) {\n    case 'string':\n      return value\n    case 'number':\n    case 'boolean':\n    case 'bigint':\n      return `${value}`\n    case 'object':\n      if (value === null) return 'null'\n  }\n  throw createError({ valueType: typeof value }, 'RocketTemplateInvalidValue')\n}\n", "import { genRx } from '@engine'\nimport { createError } from '@engine/errors'\nimport { effect } from '@engine/signals'\nimport type { HTMLOrSVG } from '@engine/types'\nimport { rewriteDataAttributes, type TaggedLiteralScope } from './template'\n\ntype ConditionalBranch = {\n  template: HTMLTemplateElement\n  kind: 'if' | 'else-if' | 'else'\n  rx?: <T>(el: HTMLOrSVG, ...args: any[]) => T\n}\n\nconst conditionalControllerCleanups = new WeakMap<\n  HTMLTemplateElement,\n  () => void\n>()\n\n// Classify a template branch so chain validation can enforce `if -> else-if -> else` ordering.\nconst conditionalKind = (template: HTMLTemplateElement) => {\n  if (template.hasAttribute('data-if')) return 'if' as const\n  if (template.hasAttribute('data-else-if')) return 'else-if' as const\n  if (template.hasAttribute('data-else')) return 'else' as const\n}\n\n// Include enough DOM context in conditional errors to locate the broken template quickly.\nconst conditionalError = (\n  reason: string,\n  template: HTMLTemplateElement,\n): never => {\n  throw createError(\n    { element: { id: template.id, tag: template.tagName } },\n    reason,\n  )\n}\n\n// Mount each adjacent conditional chain under one effect so only the active branch remains in the DOM.\nconst initConditionalChain = (\n  head: HTMLTemplateElement,\n  scope: ConditionalScope,\n  initNested: (\n    root: ParentNode,\n    scope: TaggedLiteralScope,\n  ) => Array<() => void>,\n) => {\n  // Use one branch controller for adjacent conditional templates so only the active fragment remains mounted and scoped.\n  const branches: ConditionalBranch[] = [\n    {\n      template: head,\n      kind: 'if',\n      rx: genRx(head.getAttribute('data-if') || '', { returnsValue_: true }),\n    },\n  ]\n  let tail = head\n  let seenElse = false\n  for (\n    let node = head.nextElementSibling;\n    node instanceof HTMLTemplateElement;\n    node = node.nextElementSibling\n  ) {\n    const kind = conditionalKind(node)\n    if (!kind || kind === 'if') break\n    if (kind === 'else') {\n      if (seenElse) conditionalError('RocketConditionalDuplicateElse', node)\n      branches.push({ template: node, kind })\n      tail = node\n      seenElse = true\n      continue\n    }\n    if (seenElse) conditionalError('RocketConditionalElseIfAfterElse', node)\n    branches.push({\n      template: node,\n      kind,\n      rx: genRx(node.getAttribute('data-else-if') || '', {\n        returnsValue_: true,\n      }),\n    })\n    tail = node\n  }\n  const start = document.createComment('rocket-if:start')\n  const end = document.createComment('rocket-if:end')\n  tail.parentNode!.insertBefore(start, tail.nextSibling)\n  start.parentNode!.insertBefore(end, start.nextSibling)\n  let activeIndex = -1\n  let nestedCleanups: Array<() => void> = []\n\n  const clearMountedBranch = () => {\n    for (const cleanup of nestedCleanups) cleanup()\n    nestedCleanups = []\n    for (let node = start.nextSibling; node && node !== end; ) {\n      const nextSibling = node.nextSibling\n      node.remove()\n      node = nextSibling\n    }\n  }\n\n  const stop = effect(() => {\n    const nextIndex = branches.findIndex((branch) =>\n      branch.kind === 'else' ? true : !!branch.rx?.(branch.template),\n    )\n    if (nextIndex === activeIndex) return\n    clearMountedBranch()\n    activeIndex = nextIndex\n    if (nextIndex === -1) return\n    const fragment = document.importNode(\n      branches[nextIndex]!.template.content,\n      true,\n    )\n    rewriteDataAttributes(fragment, scope)\n    const nodes = [...fragment.childNodes]\n    end.parentNode!.insertBefore(fragment, end)\n    for (const node of nodes) {\n      if (node instanceof Element) {\n        nestedCleanups.push(...initNested(node, scope))\n      }\n    }\n  })\n\n  return () => {\n    stop()\n    clearMountedBranch()\n    start.remove()\n    end.remove()\n    conditionalControllerCleanups.delete(head)\n  }\n}\n\ntype ConditionalScope = TaggedLiteralScope\n\n// Mount each conditional head once so rescans cannot stack duplicate controllers on the same template.\nexport const initRocketConditionals = (\n  root: ParentNode,\n  scope: ConditionalScope,\n  initNested: (\n    root: ParentNode,\n    scope: TaggedLiteralScope,\n  ) => Array<() => void>,\n) => {\n  const cleanups: Array<() => void> = []\n  const templates = [...root.querySelectorAll<HTMLTemplateElement>('template')]\n  if (root instanceof HTMLTemplateElement) templates.unshift(root)\n  for (const template of templates) {\n    if (!conditionalKind(template)) continue\n    if (\n      Number(template.hasAttribute('data-if')) +\n        Number(template.hasAttribute('data-else-if')) +\n        Number(template.hasAttribute('data-else')) !==\n      1\n    ) {\n      conditionalError(\n        'RocketConditionalTemplateHasMultipleConditions',\n        template,\n      )\n    }\n    if (conditionalKind(template) !== 'if') {\n      const prev = template.previousElementSibling\n      if (!(prev instanceof HTMLTemplateElement)) {\n        conditionalError('RocketConditionalMissingPreviousBranch', template)\n      }\n      const prevKind = conditionalKind(prev as HTMLTemplateElement)\n      if (!prevKind || prevKind === 'else') {\n        conditionalError('RocketConditionalInvalidPreviousBranch', template)\n      }\n    }\n    if (conditionalKind(template) !== 'if') continue\n    if (conditionalControllerCleanups.has(template)) continue\n    const cleanup = initConditionalChain(template, scope, initNested)\n    conditionalControllerCleanups.set(template, cleanup)\n    cleanups.push(cleanup)\n  }\n  return cleanups\n}\n", "import { genRx } from '@engine'\nimport { createError } from '@engine/errors'\nimport { effect, mergePaths, startPeeking, stopPeeking } from '@engine/signals'\nimport { rewriteDataAttributes, type TaggedLiteralScope } from './template'\n\ntype ForRow = {\n  start: Comment\n  end: Comment\n  pathBase: string\n  cleanups: Array<() => void>\n}\n\nconst forControllerCleanups = new WeakMap<HTMLTemplateElement, () => void>()\n\nlet nextForControllerId = 0\n\nconst forError = (\n  reason: string,\n  template: HTMLTemplateElement,\n  metadata: Record<string, any> = {},\n): never => {\n  throw createError(\n    { element: { id: template.id, tag: template.tagName } },\n    reason,\n    metadata,\n  )\n}\n\n// Give each `data-for` row a private signal scope so cloned content can be rewritten and independently removed as the iterable changes.\nexport const initRocketFors = (\n  root: ParentNode,\n  scope: TaggedLiteralScope,\n  initNested: (\n    root: ParentNode,\n    scope: TaggedLiteralScope,\n  ) => Array<() => void>,\n) => {\n  const cleanups: Array<() => void> = []\n  const templates = [\n    ...root.querySelectorAll<HTMLTemplateElement>('template[data-for]'),\n  ]\n  if (root instanceof HTMLTemplateElement && root.hasAttribute('data-for')) {\n    templates.unshift(root)\n  }\n  for (const template of templates) {\n    if (forControllerCleanups.has(template)) continue\n    const value = template.getAttribute('data-for')?.trim() || ''\n    if (!value) {\n      forError('RocketForMissingExpression', template)\n    }\n    const match =\n      value.match(\n        /^(?<item>[A-Za-z_$][\\w$]*)\\s*,\\s*(?<index>[A-Za-z_$][\\w$]*)\\s+in\\s+(?<source>[\\s\\S]+)$/,\n      ) ?? value.match(/^(?<item>[A-Za-z_$][\\w$]*)\\s+in\\s+(?<source>[\\s\\S]+)$/)\n    if (!match && /^[A-Za-z_$][\\w$]*(?:\\s*,|\\s+in\\b)/.test(value)) {\n      forError('RocketForInvalidExpression', template, { value })\n    }\n    const { item = 'item', source = value, index = 'i' } = match?.groups ?? {}\n    const controllerId = `c${nextForControllerId++}`\n    const rx = genRx(source.trim(), { returnsValue_: true })\n    const start = document.createComment('rocket-for:start')\n    const end = document.createComment('rocket-for:end')\n    template.parentNode!.insertBefore(start, template.nextSibling)\n    start.parentNode!.insertBefore(end, start.nextSibling)\n    const rows: ForRow[] = []\n    const stop = effect(() => {\n      const next = rx(template)\n      const items =\n        next == null\n          ? []\n          : Array.isArray(next)\n            ? next\n            : typeof next === 'string'\n              ? [...next]\n              : typeof next === 'object' && Symbol.iterator in next\n                ? [...(next as Iterable<unknown>)]\n                : (() => {\n                    return forError('RocketForExpectedIterable', template, {\n                      valueType: typeof next,\n                    })\n                  })()\n      for (let i = items.length; i < rows.length; i += 1) {\n        const row = rows[i]\n        if (!row) continue\n        for (const cleanup of row.cleanups) cleanup()\n        for (let node: ChildNode | null = row.start; node; ) {\n          const nextSibling: ChildNode | null = node.nextSibling\n          node.remove()\n          if (node === row.end) break\n          node = nextSibling\n        }\n\n        // Write cleanup state without tracking so `mergePaths` cannot subscribe the outer loop to its own bookkeeping and retrigger it.\n        startPeeking()\n        try {\n          mergePaths([[row.pathBase, null]])\n        } finally {\n          stopPeeking()\n        }\n      }\n      rows.length = items.length\n      let insertionPoint: Node = end\n      for (let i = items.length - 1; i >= 0; i -= 1) {\n        const pathBase = `${scope.signalPathBase}._for.${controllerId}.row${i}`\n\n        // Store reactive `rx()` values as untracked plain snapshots so parent loops do not subscribe to row bookkeeping.\n        startPeeking()\n        try {\n          mergePaths([\n            [\n              `${pathBase}.${item}`,\n              items[i] == null || typeof items[i] !== 'object'\n                ? items[i]\n                : (() => {\n                    try {\n                      return structuredClone(items[i])\n                    } catch {\n                      return JSON.parse(JSON.stringify(items[i]))\n                    }\n                  })(),\n            ],\n            [`${pathBase}.${index}`, i],\n          ])\n        } finally {\n          stopPeeking()\n        }\n        let row = rows[i]\n        if (!row) {\n          // Mount nested row controllers without tracking so child setup cannot make the parent loop remount existing rows.\n          startPeeking()\n          try {\n            const fragment = document.importNode(template.content, true)\n            const localSignals = {\n              ...(scope.localSignals ?? {}),\n              [item]: `${pathBase}.${item}`,\n              [index]: `${pathBase}.${index}`,\n            }\n            rewriteDataAttributes(fragment, {\n              ...scope,\n              localSignals,\n            })\n            const rowStart = document.createComment('rocket-for:row:start')\n            const rowEnd = document.createComment('rocket-for:row:end')\n            const nodes = [...fragment.childNodes]\n            end.parentNode!.insertBefore(rowStart, insertionPoint)\n            end.parentNode!.insertBefore(rowEnd, insertionPoint)\n            end.parentNode!.insertBefore(fragment, rowEnd)\n            row = {\n              start: rowStart,\n              end: rowEnd,\n              pathBase,\n              cleanups: [],\n            }\n            for (const node of nodes) {\n              if (node instanceof Element) {\n                row.cleanups.push(\n                  ...initNested(node, {\n                    ...scope,\n                    localSignals,\n                  }),\n                )\n              }\n            }\n          } finally {\n            stopPeeking()\n          }\n          rows[i] = row\n        }\n        insertionPoint = row.start\n      }\n    })\n\n    // Stop the outer effect before nested cleanup and untracked signal removal so teardown cannot resubscribe the loop to its own state.\n    const cleanup = () => {\n      stop()\n      for (const row of rows) {\n        if (!row) continue\n        for (const fn of row.cleanups) fn()\n        startPeeking()\n        try {\n          mergePaths([[row.pathBase, null]])\n        } finally {\n          stopPeeking()\n        }\n        for (let node: ChildNode | null = row.start; node; ) {\n          const nextSibling: ChildNode | null = node.nextSibling\n          node.remove()\n          if (node === row.end) break\n          node = nextSibling\n        }\n      }\n      rows.length = 0\n      start.remove()\n      end.remove()\n      forControllerCleanups.delete(template)\n    }\n    forControllerCleanups.set(template, cleanup)\n    cleanups.push(cleanup)\n  }\n  return cleanups\n}\n", "import {\n  actions,\n  apply,\n  applyElement,\n  isDocumentObserverActive,\n  action as registerAction,\n} from '@engine'\nimport {\n  DATASTAR_READY_EVENT,\n  DATASTAR_SCOPE_CHILDREN_EVENT,\n} from '@engine/consts'\nimport { createHTML } from '@engine/csp'\nimport { createError } from '@engine/errors'\nimport {\n  computed as datastarComputed,\n  effect,\n  getPath,\n  mergePaths,\n  root,\n} from '@engine/signals'\nimport type { HTMLOrSVG } from '@engine/types'\nimport { morph } from '@plugins/watchers/patchElements'\nimport { aliasify, kebab } from '@utils/text'\nimport {\n  type CodecRegistry,\n  codecRegistry,\n  decodeCodec,\n  getCodecDefault,\n  getCodecManifest,\n  type InferProps,\n  type PropDefs,\n} from './codecs'\nimport { initRocketConditionals } from './conditional'\nimport { initRocketFors } from './for'\nimport {\n  appendComposedTemplateValue,\n  hypertext,\n  rewriteDataAttributes,\n  rocketDispatchActionName,\n  rocketRefAttr,\n  type TaggedLiteral,\n  type TaggedLiteralScope,\n} from './template'\n\nexport const rocketHostAttr = 'data-rocket-host'\ntype AnyRecord = {\n  [key: string]: any\n}\ntype SetupSignal = (<T>(name: string, initialValue: T) => T) & AnyRecord\ntype RefRecord = Record<string, Element | undefined>\nexport type RefCtors = Record<string, abstract new (...args: any[]) => Element>\nexport type InstancesOf<C extends RefCtors> = {\n  [K in keyof C]?: InstanceType<C[K]>\n}\ntype StateRecord = AnyRecord\ntype AdoptedStyle = {\n  root: ShadowRoot | HTMLElement\n  text: string\n  element?: HTMLStyleElement\n  sheet?: CSSStyleSheet\n}\ntype PropOverrideGetter<\n  Props extends Record<string, any>,\n  Name extends keyof Props & string,\n> = (getDefault: () => Props[Name]) => any\ntype PropOverrideSetter<\n  Props extends Record<string, any>,\n  Name extends keyof Props & string,\n> = (value: any, setDefault: (value: Props[Name]) => void) => void\ntype HostPropDescriptor = Omit<PropertyDescriptor, 'configurable'>\nexport type RocketHost = HTMLElement & {\n  dispatchRocketAction(\n    name: string,\n    el: Element | null,\n    evt: Event | undefined,\n    cleanups: Map<string, () => void>,\n    ...args: any[]\n  ): any\n}\n\nexport type RocketHostWithProps<Props extends Record<string, any>> =\n  RocketHost & Props\n\ntype SetupEmit = {\n  (type: string): void\n  (...types: [string, ...string[]]): void\n  <Detail>(\n    type: string,\n    detail: Detail,\n    options?: Omit<CustomEventInit<Detail>, 'detail'>,\n  ): void\n}\n\ntype SetupEmitCancellable = {\n  (type: string): boolean\n  <Detail>(\n    type: string,\n    detail: Detail,\n    options?: Omit<CustomEventInit<Detail>, 'detail' | 'cancelable'>,\n  ): boolean\n}\n\ntype PropObserver<Props extends Record<string, any>> =\n  | (() => void)\n  | ((props: Props, changes: Partial<Props>) => void)\n\ntype SetupContext<Props extends Record<string, any>> = {\n  props: Props\n\n  // Global Datastar signal store exposed directly to setup code.\n  //\n  // This is the reactive root used by `$foo`; Rocket-local `$$.foo` state still lives under the component's private `_rocket...` path.\n  $: Record<string, any>\n\n  // Declares and accesses instance-local Rocket state through a callable proxy.\n  //\n  // The callable `$$` proxy supports imperative local signal access because JavaScript cannot return a live reference to a primitive value.\n  $$: SetupSignal\n  effect(fn: () => void): () => void\n  apply(root: HTMLOrSVG | ShadowRoot, merge?: boolean): void\n  adoptStyles(host: HTMLElement, ...styles: string[]): void\n  cleanup(fn: () => void): void\n  emit: SetupEmit\n  emitCancellable: SetupEmitCancellable\n\n  // Global Datastar actions exposed as imperative functions for setup code.\n  //\n  // Unlike `action(name, fn)`, `actions` calls the existing global registry rather than registering component-local actions.\n  actions: Record<string, (...args: any[]) => any>\n  action(name: string, fn: RocketAction<Props>): void\n  observeProps(\n    fn: PropObserver<Props>,\n    ...propNames: Array<keyof Props & string>\n  ): () => void\n  overrideProp<Name extends keyof Props & string>(\n    name: Name,\n    getter?: PropOverrideGetter<Props, Name>,\n    setter?: PropOverrideSetter<Props, Name>,\n  ): void\n  defineHostProp(name: string, descriptor: HostPropDescriptor): void\n  render: SetupRender<Props>\n  host: RocketHostWithProps<Props>\n}\n\ntype FirstUpdateContext<\n  Props extends Record<string, any>,\n  Refs extends RefCtors = RefCtors,\n> = SetupContext<Props> & {\n  refs: InstancesOf<Refs>\n}\n\ntype RenderContext<Props extends Record<string, any>> = {\n  html: TaggedLiteral\n  svg: TaggedLiteral\n  props: Props\n  host: RocketHostWithProps<Props>\n}\n\ntype RenderContextOverrides<Props extends Record<string, any>> = Partial<\n  RenderContext<Props>\n>\n\ntype RocketPrimitiveRenderValue =\n  | string\n  | number\n  | boolean\n  | bigint\n  | Date\n  | null\n  | undefined\n\ntype RocketComposedRenderValue =\n  | RocketPrimitiveRenderValue\n  | Node\n  | Iterable<RocketComposedRenderValue>\n\ntype RocketRenderValue =\n  | DocumentFragment\n  | RocketPrimitiveRenderValue\n  | Iterable<RocketComposedRenderValue>\n\ntype RocketRender<Props extends Record<string, any>> = (\n  context: RenderContext<Props>,\n  ...args: any[]\n) => RocketRenderValue\n\ntype SetupRender<Props extends Record<string, any>> = (\n  context: RenderContextOverrides<Props>,\n  ...args: any[]\n) => void\n\ntype RocketAction<Props extends Record<string, any>> = (\n  context: {\n    host: RocketHostWithProps<Props>\n    props: Props\n    state: StateRecord\n    el: Element | null\n    evt: Event | undefined\n  },\n  ...args: any[]\n) => any\n\ntype RocketDefinition<\n  Defs extends PropDefs = PropDefs,\n  Refs extends RefCtors = RefCtors,\n> = {\n  refs?: Refs\n  props?: (codecs: CodecRegistry) => Defs\n  manifest?: RocketManifestMeta\n  setup?: (context: SetupContext<InferProps<Defs>>) => void\n  onFirstRender?: (context: FirstUpdateContext<InferProps<Defs>, Refs>) => void\n  render?: RocketRender<InferProps<Defs>>\n  mode?: 'open' | 'closed' | 'light'\n  renderOnPropChange?:\n    | boolean\n    | ((context: {\n        host: RocketHostWithProps<InferProps<Defs>>\n        props: InferProps<Defs>\n        changes: Partial<InferProps<Defs>>\n      }) => boolean)\n}\n\ntype RocketManifestMeta = {\n  slots?: RocketManifestSlot[]\n  events?: RocketManifestEvent[]\n}\n\ntype RocketManifestSlot = {\n  name: string\n  description?: string\n}\n\ntype RocketManifestEvent = {\n  name: string\n  kind?: 'event' | 'custom-event'\n  bubbles?: boolean\n  composed?: boolean\n  description?: string\n}\n\ntype RocketManifestProp = {\n  name: string\n  attribute: string\n  type: string\n  default: unknown\n  required: boolean\n  values?: readonly unknown[]\n  docs?: {\n    description?: string\n    label?: string\n    control?: 'auto' | 'text' | 'textarea' | 'number' | 'boolean' | 'select'\n    placeholder?: string\n  }\n}\n\ntype RocketComponentManifest = {\n  tag: string\n  props: RocketManifestProp[]\n  slots: RocketManifestSlot[]\n  events: RocketManifestEvent[]\n}\n\ntype RocketManifestDocument = {\n  version: 1\n  generatedAt: string\n  components: RocketComponentManifest[]\n}\n\ntype RocketPublishOptions = {\n  endpoint: string\n  headers?: Record<string, string>\n}\n\ntype PropObserverRegistration<Props extends Record<string, any>> = {\n  fn: PropObserver<Props>\n  names: Set<keyof Props & string> | null\n}\n\n// Runtime surface used by Rocket's rewritten `@dispatchRocket(...)` calls.\n//\n// Datastar expressions know only the current DOM element, so this bridge lets dispatch recover the owning component and its local/global action resolution path.\ntype RocketActionBridge = RocketHost\n\nconst actionErrorContext = (el: HTMLOrSVG, name: string) => ({\n  plugin: { type: 'action', name },\n  element: { id: el.id, tag: el.tagName },\n})\n\n// Bridge context adapter from Rocket runtime calls into the engine's global action contract.\n//\n// Reusing the same context keeps global actions consistent across Datastar expressions, `@dispatchRocket(...)`, and imperative `setup({ actions })` calls.\nconst globalActionContext = (\n  el: HTMLOrSVG,\n  evt: Event | undefined,\n  name: string,\n  cleanups: Map<string, () => void>,\n) => ({\n  el,\n  evt,\n  error: createError.bind(0, actionErrorContext(el, name)),\n  cleanups,\n})\n\nconst rocketDeferredIgnoreAttr = 'data-rocket-deferred-ignore'\nconst rocketDataPrefix = aliasify('')\n// Use the engine's configured attribute name so aliased bundles honor Rocket's temporary guard.\nconst rocketIgnoreAttr = aliasify('ignore')\n// Mark speculative hosts separately until a concrete Rocket tag claims the guard.\nconst speculativeRocketTag = '*'\nconst rocketTags = new Map<string, RocketDefinition['mode']>()\n// Remember released hosts so attribute mutations do not immediately guard unrelated custom elements again.\nconst releasedSpeculativeHosts = new WeakSet<HTMLElement>()\n\nconst hasRocketScopedAttributes = (root: HTMLElement) => {\n  for (const node of [root, ...root.querySelectorAll('*')]) {\n    for (const { name, value } of node.attributes) {\n      if (name.startsWith(rocketDataPrefix) && value.includes('$$')) return true\n    }\n  }\n  return false\n}\n\n// Release speculative guards after initial modules have had a chance to register their Rocket tags.\nconst releaseSpeculativeRocketHosts = (root: ParentNode = document) => {\n  const hosts =\n    root instanceof HTMLElement &&\n    root.getAttribute(rocketDeferredIgnoreAttr) === speculativeRocketTag\n      ? [root]\n      : [\n          ...root.querySelectorAll<HTMLElement>(\n            `[${rocketDeferredIgnoreAttr}=\"${speculativeRocketTag}\"]`,\n          ),\n        ]\n  for (const host of hosts) {\n    if (rocketTags.has(host.tagName.toLowerCase())) continue\n    releasedSpeculativeHosts.add(host)\n    host.removeAttribute(rocketDeferredIgnoreAttr)\n    host.removeAttribute(rocketIgnoreAttr)\n    apply(host, false)\n  }\n}\n\n// Guard unresolved Rocket hosts before custom-element upgrade.\n//\n// Defer unresolved light hosts or shadow-host children so Datastar cannot evaluate Rocket-local directives before scoping.\nconst markPendingRocketHosts = (root: ParentNode) => {\n  const nodes =\n    root instanceof Element\n      ? [root, ...root.querySelectorAll('*')]\n      : [...root.querySelectorAll('*')]\n  for (const node of nodes) {\n    if (!(node instanceof HTMLElement)) continue\n    const tagName = node.tagName.toLowerCase()\n    const mode = rocketTags.get(tagName)\n    if (customElements.get(tagName)) continue\n    if (!mode) {\n      if (\n        !tagName.includes('-') ||\n        releasedSpeculativeHosts.has(node) ||\n        node.hasAttribute(rocketDeferredIgnoreAttr) ||\n        node.hasAttribute(rocketIgnoreAttr) ||\n        !hasRocketScopedAttributes(node)\n      ) {\n        continue\n      }\n      node.setAttribute(rocketIgnoreAttr, '')\n      node.setAttribute(rocketDeferredIgnoreAttr, speculativeRocketTag)\n      if (document.readyState !== 'loading') {\n        queueMicrotask(() => releaseSpeculativeRocketHosts(node))\n      }\n      continue\n    }\n    releasedSpeculativeHosts.delete(node)\n    if (node.getAttribute(rocketDeferredIgnoreAttr) === speculativeRocketTag) {\n      node.removeAttribute(rocketDeferredIgnoreAttr)\n      node.removeAttribute(rocketIgnoreAttr)\n    }\n    if (\n      mode === 'light' &&\n      (node.hasAttribute(rocketDeferredIgnoreAttr) ||\n        node.hasAttribute(rocketIgnoreAttr))\n    ) {\n      continue\n    }\n    const targets = mode === 'light' ? [node] : [...node.children]\n    for (const target of targets) {\n      if (\n        target.hasAttribute(rocketDeferredIgnoreAttr) ||\n        target.hasAttribute(rocketIgnoreAttr)\n      ) {\n        continue\n      }\n      target.setAttribute(rocketIgnoreAttr, '')\n      target.setAttribute(rocketDeferredIgnoreAttr, tagName)\n    }\n  }\n}\n\n// Keep the pre-upgrade guard in sync with live DOM insertion.\n//\n// Watch live DOM insertions and scoped attribute additions so newly unresolved Rocket content is deferred before Datastar can evaluate it.\nconst observePendingRocketHosts = () => {\n  markPendingRocketHosts(document)\n  new MutationObserver((records) => {\n    for (const record of records) {\n      if (record.type === 'attributes' && record.target instanceof Element) {\n        const name = record.attributeName\n        if (\n          name?.startsWith(rocketDataPrefix) &&\n          record.target.getAttribute(name)?.includes('$$')\n        ) {\n          markPendingRocketHosts(record.target)\n        }\n        continue\n      }\n      for (const node of record.addedNodes) {\n        if (node instanceof Element) markPendingRocketHosts(node)\n      }\n      if (record.target instanceof Element) {\n        markPendingRocketHosts(record.target)\n      }\n    }\n  }).observe(document.documentElement, {\n    subtree: true,\n    childList: true,\n    attributes: true,\n  })\n  if (document.readyState === 'loading') {\n    document.addEventListener(\n      'DOMContentLoaded',\n      () => releaseSpeculativeRocketHosts(),\n      { once: true },\n    )\n  } else {\n    queueMicrotask(() => releaseSpeculativeRocketHosts())\n  }\n}\n\nlet rocketBootstrapStarted = false\nlet rocketBootstrapWaiting = false\nlet pendingHostObservationStarted = false\n\n// Queue early `rocket(tag, options)` registrations because custom-element setup must wait for Datastar's document observer.\nconst pendingRocketDefinitions = new Map<string, RocketDefinition<any, any>>()\n\n// Start the global Rocket bootstrap once, then flush queued registrations after Datastar is ready to observe them.\nconst ensureRocketBootstrap = () => {\n  if (!pendingHostObservationStarted) {\n    pendingHostObservationStarted = true\n    observePendingRocketHosts()\n  }\n  if (rocketBootstrapStarted || rocketBootstrapWaiting) return\n  if (isDocumentObserverActive()) {\n    rocketBootstrapStarted = true\n    if (pendingRocketDefinitions.size === 0) return\n    for (const [tag, options] of pendingRocketDefinitions) {\n      pendingRocketDefinitions.delete(tag)\n      rocket(tag, options)\n    }\n    return\n  }\n  rocketBootstrapWaiting = true\n  document.addEventListener(\n    DATASTAR_READY_EVENT,\n    () => {\n      rocketBootstrapWaiting = false\n      if (rocketBootstrapStarted) return\n      rocketBootstrapStarted = true\n      if (pendingRocketDefinitions.size === 0) return\n      for (const [tag, options] of pendingRocketDefinitions) {\n        pendingRocketDefinitions.delete(tag)\n        rocket(tag, options)\n      }\n    },\n    { once: true },\n  )\n}\n\nensureRocketBootstrap()\n\nconst registeredTags = new Set<string>()\nconst rocketManifestRegistry = new Map<string, RocketComponentManifest>()\nconst namedInstanceCounts = new Map<string, number>()\nlet nextInstanceId = 0\n\n// Rocket paths are dot-delimited and embedded in expressions and data-* attributes, so replace unsafe separators without changing IDs such as `myComponent1`.\nconst signalPathSegment = (value: string): string =>\n  value\n    .trim()\n    .replace(/[^A-Za-z0-9_$]+/g, '_')\n    .replace(/_+/g, '_')\n    .replace(/^_+|_+$/g, '')\n\nconst cloneRocketManifestComponent = (\n  component: RocketComponentManifest,\n): RocketComponentManifest => ({\n  tag: component.tag,\n  props: component.props.map((prop) => ({\n    ...prop,\n    values: prop.values ? [...prop.values] : undefined,\n    docs: prop.docs ? { ...prop.docs } : undefined,\n  })),\n  slots: component.slots.map((slot) => ({ ...slot })),\n  events: component.events.map((event) => ({ ...event })),\n})\n\nconst rocketManifestDocument = (): RocketManifestDocument => ({\n  version: 1,\n  generatedAt: new Date().toISOString(),\n  components: [...rocketManifestRegistry.values()]\n    .map(cloneRocketManifestComponent)\n    .sort((left, right) => left.tag.localeCompare(right.tag)),\n})\n\nexport const publishRocketManifests = async ({\n  endpoint,\n  headers,\n}: RocketPublishOptions) =>\n  fetch(endpoint, {\n    method: 'POST',\n    headers: {\n      'content-type': 'application/json',\n      ...headers,\n    },\n    body: JSON.stringify(rocketManifestDocument()),\n  })\n\n// Map every possible Rocket action origin back to its owning component instance.\n//\n// This includes:\n// - the custom element host\n// - host light-DOM children with Rocket-scoped expressions\n// - rendered descendants inside the light/shadow mount root\n//\n// Without this bridge, `@dispatchRocket(...)` would know the current element but not which component should resolve the action.\nconst rocketHostsByElement = new WeakMap<Element, RocketActionBridge>()\n\nregisterAction({\n  name: rocketDispatchActionName,\n\n  // `@dispatchRocket(...)` is the bridge emitted by Rocket's expression rewrite.\n  // Resolve the active component from the evaluated element so the call reaches the correct instance.\n  // Reactive structures can add elements after the direct ownership map was indexed, so fall back to their nearest mapped composed ancestor.\n  apply({ el, evt, cleanups }, name: string, ...args: any[]) {\n    for (let node: Element | null = el; node; ) {\n      const host = rocketHostsByElement.get(node)\n      if (host) {\n        return host.dispatchRocketAction(name, el, evt, cleanups, ...args)\n      }\n      const root = node.getRootNode()\n      node =\n        node.parentElement ?? (root instanceof ShadowRoot ? root.host : null)\n    }\n  },\n})\n\n// Register a custom element tag and wire its props, setup, render, and Datastar bridge into the element class.\nexport function rocket<\n  Refs extends RefCtors = RefCtors,\n  Defs extends PropDefs = PropDefs,\n>(tag: string, options?: RocketDefinition<Defs, Refs>) {\n  if (!tag) return\n  if (!isDocumentObserverActive()) {\n    const existing = customElements.get(tag)\n    if (existing) return existing\n    rocketTags.set(tag, options?.mode ?? 'open')\n    markPendingRocketHosts(document)\n    pendingRocketDefinitions.set(\n      tag,\n      (options ?? {}) as RocketDefinition<any, any>,\n    )\n    ensureRocketBootstrap()\n    return\n  }\n  const {\n    manifest,\n    mode,\n    props,\n    render,\n    renderOnPropChange,\n    setup,\n    onFirstRender,\n  } = options ?? {}\n  if (registeredTags.has(tag) || customElements.get(tag)) {\n    registeredTags.add(tag)\n    return customElements.get(tag)\n  }\n  registeredTags.add(tag)\n  rocketTags.set(tag, mode ?? 'open')\n  markPendingRocketHosts(document)\n\n  const propDefs = (props?.(codecRegistry) ?? {}) as Defs\n  const propNames = Object.keys(propDefs) as Array<\n    keyof InferProps<Defs> & string\n  >\n  const attrToProp = new Map(propNames.map((name) => [kebab(name), name]))\n  const componentManifest: RocketComponentManifest = {\n    tag,\n    props: propNames.map((name) => {\n      const codec = propDefs[name]\n      const codecManifest = getCodecManifest(codec)\n      return {\n        name,\n        attribute: kebab(name),\n        type: codecManifest.type,\n        default: getCodecDefault(codec),\n        required: false,\n        values: codecManifest.values ? [...codecManifest.values] : undefined,\n        docs: codecManifest.docs ? { ...codecManifest.docs } : undefined,\n      }\n    }),\n    slots: (manifest?.slots ?? []).map((slot) => ({ ...slot })),\n    events: (manifest?.events ?? []).map((event) => ({\n      kind: 'event',\n      ...event,\n    })),\n  }\n  const tagScope = signalPathSegment(tag)\n  const getReactiveScopedPath = <T>(path: string): T | undefined => {\n    let value: any = root\n    for (const segment of path.split('.')) {\n      if (\n        value == null ||\n        (typeof value !== 'object' && typeof value !== 'function') ||\n        !(segment in value)\n      ) {\n        return\n      }\n      value = value[segment]\n    }\n    return value as T\n  }\n  const hasReactiveScopedPath = (path: string): boolean => {\n    let value: any = root\n    for (const segment of path.split('.')) {\n      if (\n        value == null ||\n        (typeof value !== 'object' && typeof value !== 'function') ||\n        !(segment in value)\n      ) {\n        return false\n      }\n      value = value[segment]\n    }\n    return true\n  }\n  const subtreeUsesScopedSignals = (\n    root: ParentNode,\n    signalPathBase: string,\n  ): boolean => {\n    const nodes =\n      root instanceof Element\n        ? [root, ...root.querySelectorAll('*')]\n        : [...root.children, ...root.querySelectorAll('*')]\n    for (const node of nodes) {\n      for (const attr of node.attributes) {\n        if (!attr.name.startsWith('data-')) continue\n        if (\n          attr.name === `data-signals:${signalPathBase}` ||\n          attr.name.startsWith(`data-signals:${signalPathBase}.`)\n        ) {\n          return true\n        }\n        const colonIndex = attr.name.indexOf(':')\n        if (colonIndex !== -1) {\n          const key = attr.name.slice(colonIndex + 1).split('__', 1)[0]\n          if (key === signalPathBase || key.startsWith(`${signalPathBase}.`)) {\n            return true\n          }\n        }\n        if (\n          attr.value === signalPathBase ||\n          attr.value.startsWith(`${signalPathBase}.`) ||\n          attr.value.includes(`$.${signalPathBase}`)\n        ) {\n          return true\n        }\n      }\n    }\n    return false\n  }\n  const initRocketStructures = (\n    root: ParentNode,\n    scope: TaggedLiteralScope,\n  ) => [\n    ...initRocketFors(root, scope, initRocketStructures),\n    ...initRocketConditionals(root, scope, initRocketStructures),\n  ]\n\n  class RocketElement extends HTMLElement {\n    #instanceId = ''\n    #signalPathBase = ''\n    #props = Object.fromEntries(\n      propNames.map((name) => [name, getCodecDefault(propDefs[name])]),\n    ) as InferProps<Defs>\n    #refs: RefRecord = {}\n    #state: StateRecord = {}\n    #propObservers: Array<PropObserverRegistration<InferProps<Defs>>> = []\n    #actions = new Map<string, RocketAction<InferProps<Defs>>>()\n    #cleanups: Array<() => void> = []\n    #conditionalCleanups: Array<() => void> = []\n    #hostConditionalCleanups: Array<() => void> = []\n    #globalActionCleanups = new Map<string, () => void>()\n    #datastarApplied = false\n    #mounted = false\n    #renderQueued = false\n    #reflecting = false\n    #mountRoot?: ShadowRoot | HTMLElement\n    #deferredApplyIgnore = false\n    #hostTreeScoped = false\n    #needsSignalPathBase = false\n    #pendingInitialAttrValues = new Map<string, string>()\n    #lightSlotNodes?: ChildNode[]\n    #adoptedStyles: AdoptedStyle[] = []\n    #rewriteScopedDataAttributes = (root: ParentNode) => {\n      rewriteDataAttributes(root, {\n        signalPathBase: this.#signalPathBase,\n      })\n      if (!this.#needsSignalPathBase) {\n        this.#needsSignalPathBase = subtreeUsesScopedSignals(\n          root,\n          this.#signalPathBase,\n        )\n      }\n    }\n    #syncRefs = () => {\n      const nextRefs: RefRecord = {}\n      const roots =\n        this.#mountRoot === this || !this.#mountRoot\n          ? [this as ParentNode]\n          : [this as ParentNode, this.#mountRoot]\n      for (const root of roots) {\n        const elements =\n          root instanceof Element\n            ? [\n                ...(root.hasAttribute(rocketRefAttr) ? [root] : []),\n                ...root.querySelectorAll(`[${rocketRefAttr}]`),\n              ]\n            : [...root.querySelectorAll(`[${rocketRefAttr}]`)]\n        for (const element of elements) {\n          const name = element.getAttribute(rocketRefAttr)\n          if (name) nextRefs[name] = element\n        }\n      }\n      for (const name of Object.keys(this.#refs)) {\n        delete this.#refs[name]\n      }\n      Object.assign(this.#refs, nextRefs)\n    }\n\n    // Re-scope host-owned children after backend/DOM patch operations.\n    //\n    // Use the post-morph `datastar:scope-children` hook to rewrite patched host children before the engine mutation observer applies them.\n    //\n    // The rescoping surface depends on mode:\n    // - `light` mode patches and renders directly on the host, so the host subtree must be rescoped and re-applied\n    // - `open`/`closed` mode can patch host-side children, but the host element's own Datastar attributes must remain in outer page scope\n    //\n    // Without this pass, patched nodes can reach Datastar with raw `$$...` expressions and fail before Rocket can rescope them.\n    #scopePatchedChildren = () => {\n      if (this.#mountRoot === this) {\n        this.#rewriteScopedDataAttributes(this)\n        if (this.#needsSignalPathBase) {\n          mergePaths([[this.#signalPathBase, {}]], { ifMissing: true })\n        }\n\n        // Host-side patches can replace mounted light-mode conditionals, so stale branch controllers must be removed before scanning the new content.\n        //\n        // Otherwise `initRocketConditionals()` can mistake the reused template head for an initialized branch and leave the patched branch inert.\n        for (const cleanup of this.#conditionalCleanups) cleanup()\n        this.#conditionalCleanups.length = 0\n        this.#conditionalCleanups.push(\n          ...initRocketStructures(this, {\n            signalPathBase: this.#signalPathBase,\n          }),\n        )\n        apply(this, false)\n        this.#syncRefs()\n      } else {\n        // In shadow mode, rescope only host children because Datastar attributes on the custom element itself belong to the outer page scope.\n        for (const child of this.children) {\n          this.#rewriteScopedDataAttributes(child)\n        }\n        if (this.#needsSignalPathBase) {\n          mergePaths([[this.#signalPathBase, {}]], { ifMissing: true })\n        }\n        for (const cleanup of this.#hostConditionalCleanups) cleanup()\n        this.#hostConditionalCleanups.length = 0\n        for (const child of this.children) {\n          this.#hostConditionalCleanups.push(\n            ...initRocketStructures(child, {\n              signalPathBase: this.#signalPathBase,\n            }),\n          )\n          if (!(child instanceof HTMLElement || child instanceof SVGElement)) {\n            continue\n          }\n          apply(child, false)\n        }\n        this.#syncRefs()\n      }\n    }\n    #html = hypertext(\n      (string) => {\n        const template = document.createElement('template')\n        template.innerHTML = createHTML(string)\n        return document.importNode(template.content, true)\n      },\n      (fragment) => {\n        this.#rewriteScopedDataAttributes(fragment)\n        return fragment as DocumentFragment\n      },\n    )\n    #svg = hypertext(\n      (string) => {\n        const g = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n        g.innerHTML = createHTML(string)\n        return g\n      },\n      (g) => {\n        const fragment = document.createDocumentFragment()\n        while (g.firstChild) fragment.appendChild(g.firstChild)\n        this.#rewriteScopedDataAttributes(fragment)\n        return fragment\n      },\n    )\n\n    static get observedAttributes() {\n      return [...attrToProp.keys()]\n    }\n\n    get rocketInstanceId() {\n      return this.#instanceId\n    }\n\n    get rocketSignalPath() {\n      return this.#signalPathBase\n    }\n\n    constructor() {\n      super()\n      const instanceSegment = signalPathSegment(this.id)\n      if (instanceSegment) {\n        const instanceBase = /^[A-Za-z_$]/.test(instanceSegment)\n          ? instanceSegment\n          : `id_${instanceSegment}`\n        const instanceKey = `${tagScope}.${instanceBase}`\n        const instanceCount = (namedInstanceCounts.get(instanceKey) ?? 0) + 1\n        namedInstanceCounts.set(instanceKey, instanceCount)\n        this.#instanceId =\n          instanceCount === 1\n            ? instanceBase\n            : `${instanceBase}_${instanceCount}`\n      } else {\n        this.#instanceId = `id${++nextInstanceId}`\n      }\n      this.#signalPathBase = `_rocket.${tagScope}.${this.#instanceId}`\n\n      // Defer Datastar on the host subtree until Rocket setup has finished.\n      //\n      // Without this guard, Datastar can evaluate raw `$$...` expressions in host-provided children before Rocket scopes or projects them.\n      //\n      // Rocket removes the temporary flag after setup/render and manually applies the correct roots once the component is ready.\n      //\n      // Pre-upgrade hosts adopt and remove the marker in `connectedCallback()` because custom-element constructors cannot mutate attributes on new elements.\n\n      // Opt every Rocket host into the patch-elements child-scoping hook.\n      //\n      // Mark the host so `patchElements.ts` dispatches its post-morph child-scoping hook here before Datastar applies patched children.\n      //\n      // Shadow roots do not isolate host-side children or slotted content from backend patches containing raw `$$...` expressions.\n      // Scope pre-existing host children during upgrade so Datastar cannot evaluate raw `$$...` expressions first; shadow-mode host attributes remain in outer page scope.\n      if (this.childNodes.length) {\n        if (mode === 'light') {\n          this.#rewriteScopedDataAttributes(this)\n        } else {\n          for (const child of this.children) {\n            this.#rewriteScopedDataAttributes(child)\n          }\n        }\n        this.#hostTreeScoped = true\n      }\n\n      // Decode pre-existing observed attributes now so `setup()` and the first render receive their final prop values.\n      //\n      // Cache them because the browser replays the same attributes through `attributeChangedCallback()` during upgrade, which would otherwise duplicate decoding side effects.\n      for (const [attrName, propName] of attrToProp) {\n        const rawValue = this.getAttribute(attrName)\n        if (rawValue !== null) {\n          this.#pendingInitialAttrValues.set(attrName, rawValue)\n          this.#props[propName] = decodeCodec(propDefs[propName], rawValue)\n        }\n      }\n\n      // Replay pre-upgrade own-properties through Rocket's setters because they otherwise shadow the prototype accessors.\n      for (const name of propNames) {\n        if (!Object.prototype.hasOwnProperty.call(this, name)) continue\n        const value = (this as any)[name]\n        delete (this as any)[name]\n        ;(this as any)[name] = value\n      }\n    }\n\n    dispatchRocketAction(\n      name: string,\n      el: Element | null,\n      evt: Event | undefined,\n      cleanups: Map<string, () => void>,\n      ...args: any[]\n    ) {\n      const action = this.#actions.get(name)\n      if (action) {\n        return action(\n          {\n            host: this as RocketHostWithProps<InferProps<Defs>>,\n            props: this.#props,\n            state: this.#state,\n            el,\n            evt,\n          },\n          ...args,\n        )\n      }\n\n      // Walk the composed parent chain so nested Rocket children can call actions owned by an ancestor component before falling back globally.\n      for (let node: Element | null = this; node; ) {\n        const host = rocketHostsByElement.get(node)\n        const root = node.getRootNode()\n        if (host && host !== this) {\n          return host.dispatchRocketAction(name, el, evt, cleanups, ...args)\n        }\n        node =\n          node.parentElement ?? (root instanceof ShadowRoot ? root.host : null)\n      }\n\n      // Fall back to Datastar's global registry when `@dispatchRocket(...)` finds no local action so helpers such as `@intl(...)` keep working in Rocket templates.\n      const globalAction = actions[name]\n      if (globalAction) {\n        const actionEl = (el ?? this) as HTMLOrSVG\n        return globalAction(\n          globalActionContext(actionEl, evt, name, cleanups),\n          ...args,\n        )\n      }\n      throw createError(\n        actionErrorContext((el ?? this) as HTMLOrSVG, name),\n        'UndefinedAction',\n      )\n    }\n\n    #queueRender() {\n      // Prop-driven rerenders are coalesced into one microtask per component.\n      //\n      // Coalesce multiple same-turn prop writes so Rocket renders once from the latest prop snapshot.\n      //\n      // This queue covers component rendering only; Datastar directives continue updating through their own effects.\n      if (!this.#mounted || this.#renderQueued) return\n      this.#renderQueued = true\n      queueMicrotask(() => {\n        this.#renderQueued = false\n        if (this.#mounted) this.#render({})\n      })\n    }\n\n    #indexActionHosts() {\n      // Rocket action dispatch can originate from two different DOM surfaces:\n      //\n      // 1. the component's rendered mount root (light DOM or shadow DOM)\n      // 2. host-provided light-DOM children outside an `open`/`closed` mount root that still contain Rocket-scoped expressions\n      //\n      // Index both surfaces so `@dispatchRocket(...)` can resolve the owner from the element being evaluated, but stop at nested Rocket hosts so a light-DOM parent cannot overwrite child ownership.\n      rocketHostsByElement.set(this, this)\n      for (const node of this.querySelectorAll('*')) {\n        if (node.closest(`[${rocketHostAttr}]`) === this) {\n          rocketHostsByElement.set(node, this)\n        }\n      }\n      if (this.#mountRoot instanceof ShadowRoot) {\n        for (const node of this.#mountRoot.querySelectorAll('*')) {\n          if (!node.closest(`[${rocketHostAttr}]`)) {\n            rocketHostsByElement.set(node, this)\n          }\n        }\n      }\n    }\n\n    #setProp(\n      name: keyof InferProps<Defs> & string,\n      nextValue: InferProps<Defs>[typeof name],\n    ) {\n      if (Object.is(this.#props[name], nextValue)) return\n      this.#props[name] = nextValue\n      const changes = { [name]: nextValue } as Partial<InferProps<Defs>>\n      for (const observer of this.#propObservers) {\n        if (observer.names === null || observer.names.has(name)) {\n          observer.fn(this.#props, changes)\n        }\n      }\n\n      // Notify prop observers synchronously, then optionally queue a render so a burst of writes still collapses into one render.\n      if (\n        typeof renderOnPropChange === 'function'\n          ? renderOnPropChange({\n              host: this as RocketHostWithProps<InferProps<Defs>>,\n              props: this.#props,\n              changes,\n            })\n          : renderOnPropChange !== false\n      ) {\n        this.#queueRender()\n      }\n    }\n\n    #getDefaultProp(name: keyof InferProps<Defs> & string) {\n      return this.#props[name]\n    }\n\n    #reflectPropAttribute(\n      name: keyof InferProps<Defs> & string,\n      value: InferProps<Defs>[typeof name],\n    ) {\n      if (mode !== 'light' && !this.isConnected) return\n      const attrName = kebab(name)\n      this.#reflecting = true\n      try {\n        const encoded = propDefs[name].encode(value)\n        if (encoded == null) {\n          this.removeAttribute(attrName)\n        } else {\n          this.setAttribute(attrName, encoded)\n        }\n      } finally {\n        this.#reflecting = false\n      }\n    }\n\n    #setDefaultProp(\n      name: keyof InferProps<Defs> & string,\n      value: InferProps<Defs>[typeof name],\n    ) {\n      this.#setProp(name, value)\n      this.#reflectPropAttribute(name, value)\n    }\n\n    #syncAdoptedStyles() {\n      for (const style of this.#adoptedStyles) {\n        if (\n          style.root instanceof ShadowRoot &&\n          'adoptedStyleSheets' in style.root &&\n          'replaceSync' in CSSStyleSheet.prototype\n        ) {\n          if (!style.sheet) {\n            style.sheet = new CSSStyleSheet()\n            style.sheet.replaceSync(style.text)\n          }\n          if (!style.root.adoptedStyleSheets.includes(style.sheet)) {\n            style.root.adoptedStyleSheets = [\n              ...style.root.adoptedStyleSheets,\n              style.sheet,\n            ]\n          }\n          continue\n        }\n        if (style.element?.parentNode === style.root) continue\n        style.element = document.createElement('style')\n        style.element.textContent = style.text\n        style.root.prepend(style.element)\n      }\n    }\n\n    #defineHostProp(name: string, descriptor: HostPropDescriptor) {\n      const ownDescriptor = Object.getOwnPropertyDescriptor(this, name)\n      const ownValue =\n        ownDescriptor && 'value' in ownDescriptor\n          ? ownDescriptor.value\n          : undefined\n      if (ownDescriptor) {\n        delete (this as any)[name]\n      }\n      Object.defineProperty(this, name, {\n        configurable: true,\n        ...descriptor,\n      })\n      if (\n        ownDescriptor &&\n        'value' in ownDescriptor &&\n        ownValue !== undefined &&\n        typeof descriptor.set === 'function'\n      ) {\n        ;(this as any)[name] = ownValue\n      }\n    }\n\n    #overrideProp<Name extends keyof InferProps<Defs> & string>(\n      name: Name,\n      getter?: PropOverrideGetter<InferProps<Defs>, Name>,\n      setter?: PropOverrideSetter<InferProps<Defs>, Name>,\n    ) {\n      this.#defineHostProp(name, {\n        get: getter\n          ? () => getter(() => this.#getDefaultProp(name))\n          : () => this.#getDefaultProp(name),\n        set: setter\n          ? (value: InferProps<Defs>[Name]) =>\n              setter(value, (nextValue) =>\n                this.#setDefaultProp(name, nextValue),\n              )\n          : (value: InferProps<Defs>[Name]) =>\n              this.#setDefaultProp(name, value),\n      })\n    }\n\n    #render(\n      overrides: RenderContextOverrides<InferProps<Defs>>,\n      ...args: any[]\n    ) {\n      if (!render) {\n        this.#indexActionHosts()\n        return\n      }\n      if (this.#datastarApplied) {\n        for (const cleanup of this.#conditionalCleanups) cleanup()\n        this.#conditionalCleanups.length = 0\n      }\n      const rendered = (\n        render as (\n          context: RenderContext<InferProps<Defs>>,\n          ...args: any[]\n        ) => RocketRenderValue\n      )(\n        {\n          html: this.#html,\n          svg: this.#svg,\n          props: this.#props,\n          host: this as RocketHostWithProps<InferProps<Defs>>,\n          ...overrides,\n        },\n        ...args,\n      )\n      // Normalize every render result through one recursive path so top-level and nested primitives, Nodes, templates, and iterables behave consistently.\n      const fragment = document.createDocumentFragment()\n      appendComposedTemplateValue(fragment, rendered)\n      if (this.#mountRoot === this) {\n        const slots = [...fragment.querySelectorAll('slot')]\n        if (slots.length) {\n          // Light mode has no native slot projection, so treat `<slot>` elements as markers for moving and scoping original host children.\n          //\n          // Snapshot initial host children once so rerenders can reproject the same nodes without reparsing or duplicating them.\n          //\n          // Slot matching follows the platform shape closely enough to make the\n          // authored markup unsurprising:\n          // - <slot name=\"title\"> receives host children with slot=\"title\"\n          // - <slot> receives host children with no slot attribute\n          // - when no children match, the slot's own fallback children render\n          //\n          // Resolve slot markers before morphing so light DOM receives the flattened result instead of literal `<slot>` elements.\n          if (!this.#lightSlotNodes) {\n            const content = document.createDocumentFragment()\n            content.append(...this.childNodes)\n            rewriteDataAttributes(content, {\n              signalPathBase: this.#signalPathBase,\n            })\n            this.#lightSlotNodes = [...content.childNodes]\n          }\n          const assigned = new Set<ChildNode>()\n          for (const slot of slots) {\n            const name = slot.getAttribute('name')\n            const children = this.#lightSlotNodes.filter((node) => {\n              if (assigned.has(node)) return false\n              if (!(node instanceof Element))\n                return name === null || name === ''\n              const slotName = node.getAttribute('slot')\n              return name === null || name === ''\n                ? slotName === null || slotName === ''\n                : slotName === name\n            })\n            if (children.length) {\n              for (const child of children) assigned.add(child)\n              slot.replaceWith(...children)\n              continue\n            }\n            slot.replaceWith(...slot.childNodes)\n          }\n        }\n      }\n      morph(this.#mountRoot!, fragment, 'inner')\n      this.#syncAdoptedStyles()\n      if (this.#datastarApplied) {\n        this.#conditionalCleanups.push(\n          ...initRocketStructures(this.#mountRoot!, {\n            signalPathBase: this.#signalPathBase,\n          }),\n        )\n      }\n      this.#syncRefs()\n      this.#indexActionHosts()\n    }\n\n    connectedCallback() {\n      if (this.#mounted) return\n      this.#mounted = true\n      this.addEventListener(\n        DATASTAR_SCOPE_CHILDREN_EVENT,\n        this.#scopePatchedChildren,\n      )\n\n      // Remove this host's child markers before scoping them while leaving independently pending nested Rocket hosts protected.\n      for (const node of this.querySelectorAll(\n        `[${rocketDeferredIgnoreAttr}]`,\n      )) {\n        if (node.getAttribute(rocketDeferredIgnoreAttr) !== tag) continue\n        node.removeAttribute(rocketDeferredIgnoreAttr)\n        node.removeAttribute(rocketIgnoreAttr)\n      }\n\n      // Apply host markers here because custom-element constructors cannot mutate attributes on freshly created elements.\n      if (this.hasAttribute(rocketDeferredIgnoreAttr)) {\n        this.removeAttribute(rocketDeferredIgnoreAttr)\n        this.#deferredApplyIgnore = true\n      } else if (!this.hasAttribute(rocketIgnoreAttr)) {\n        this.setAttribute(rocketIgnoreAttr, '')\n        this.#deferredApplyIgnore = true\n      }\n      this.setAttribute('data-scope-children', '')\n      this.setAttribute(rocketHostAttr, '')\n\n      if (!this.#mountRoot) {\n        this.#mountRoot =\n          mode === 'light'\n            ? this\n            : (this.shadowRoot ??\n              this.attachShadow({\n                mode: mode === 'closed' ? 'closed' : 'open',\n              }))\n      }\n      if (!this.#hostTreeScoped) {\n        // Scope existing host children once before rendering so later apply passes cannot evaluate raw `$$` expressions; shadow-mode host bindings remain in page scope.\n        if (this.#mountRoot === this) {\n          this.#rewriteScopedDataAttributes(this)\n        } else {\n          for (const child of this.children) {\n            this.#rewriteScopedDataAttributes(child)\n          }\n        }\n        this.#hostTreeScoped = true\n      }\n\n      const localSignals = new Proxy(\n        ((name, initialValue) => {\n          const path = `${this.#signalPathBase}.${name}`\n          mergePaths(\n            [\n              [\n                path,\n                typeof initialValue === 'function'\n                  ? datastarComputed(initialValue as () => unknown)\n                  : initialValue,\n              ],\n            ],\n            { ifMissing: true },\n          )\n          if (!Object.prototype.hasOwnProperty.call(this.#state, name)) {\n            Object.defineProperty(this.#state, name, {\n              configurable: true,\n              enumerable: true,\n              get: () => getPath(path),\n              set: (value) => {\n                mergePaths([[path, value]])\n              },\n            })\n          }\n          return getPath(path)\n        }) as SetupSignal,\n        {\n          get: (target, name, receiver) => {\n            if (typeof name !== 'string' || name in target) {\n              return Reflect.get(target, name, receiver)\n            }\n\n            // Setup often reads local signals before Datastar has written them.\n            //\n            // Use `in` checks to subscribe through the proxy's reactive `has` trap without materializing missing Rocket paths as empty-string signals.\n            return getReactiveScopedPath(`${this.#signalPathBase}.${name}`)\n          },\n          set: (_, name, value) => {\n            if (typeof name !== 'string') return false\n            const path = `${this.#signalPathBase}.${name}`\n            if (!Object.prototype.hasOwnProperty.call(this.#state, name)) {\n              Object.defineProperty(this.#state, name, {\n                configurable: true,\n                enumerable: true,\n                get: () => getPath(path),\n                set: (value) => {\n                  mergePaths([[path, value]])\n                },\n              })\n            }\n            mergePaths([\n              [\n                path,\n                typeof value === 'function'\n                  ? datastarComputed(value as () => unknown)\n                  : value,\n              ],\n            ])\n            return true\n          },\n          has: (target, name) => {\n            if (typeof name !== 'string') return name in target\n            return (\n              name in target ||\n              hasReactiveScopedPath(`${this.#signalPathBase}.${name}`)\n            )\n          },\n          ownKeys: (target) => [\n            ...new Set([\n              ...Reflect.ownKeys(target),\n              ...Object.keys(\n                getReactiveScopedPath<Record<string, any>>(\n                  this.#signalPathBase,\n                ) ?? {},\n              ),\n            ]),\n          ],\n          getOwnPropertyDescriptor: (target, name) => {\n            if (Reflect.has(target, name)) {\n              return Reflect.getOwnPropertyDescriptor(target, name)\n            }\n            if (\n              typeof name === 'string' &&\n              hasReactiveScopedPath(`${this.#signalPathBase}.${name}`)\n            ) {\n              return {\n                configurable: true,\n                enumerable: true,\n                writable: true,\n                value: getReactiveScopedPath(`${this.#signalPathBase}.${name}`),\n              }\n            }\n          },\n        },\n      )\n      const refs = new Proxy(\n        {},\n        {\n          get: (_, name, receiver) =>\n            typeof name === 'string'\n              ? this.#refs[name]\n              : Reflect.get({}, name, receiver),\n          has: (_, name) => {\n            if (typeof name !== 'string') return false\n            return name in this.#refs\n          },\n          ownKeys: () => Object.keys(this.#refs),\n          getOwnPropertyDescriptor: (_, name) => {\n            if (typeof name === 'string' && name in this.#refs) {\n              return {\n                configurable: true,\n                enumerable: true,\n                writable: false,\n                value: this.#refs[name],\n              }\n            }\n          },\n        },\n      ) as Refs\n\n      const context: SetupContext<InferProps<Defs>> = {\n        props: this.#props,\n\n        // `$` is the imperative setup alias for Datastar's global signal root.\n        //\n        // The name mirrors `$foo` expression syntax while remaining normal JavaScript property access as `$.foo`.\n        $: root,\n\n        // `$$` is the imperative setup alias for Rocket-local signals.\n        //\n        // The name mirrors `$$foo` template syntax while remaining a valid property/callable proxy inside `setup`.\n        $$: localSignals,\n        effect: (fn) => {\n          const cleanup = effect(fn)\n          this.#cleanups.push(cleanup)\n          return cleanup\n        },\n        apply: (root, merge = true) => {\n          apply(root, merge)\n        },\n        adoptStyles: (host, ...styles) => {\n          const root =\n            this.#mountRoot instanceof ShadowRoot ? this.#mountRoot : host\n          for (const text of styles) {\n            if (\n              text &&\n              !this.#adoptedStyles.some(\n                (style) => style.root === root && style.text === text,\n              )\n            ) {\n              this.#adoptedStyles.push({ root, text })\n            }\n          }\n          this.#syncAdoptedStyles()\n        },\n        cleanup: (fn) => {\n          this.#cleanups.push(fn)\n        },\n        emit: ((type: string, ...rest: any[]) => {\n          if (!rest.length || typeof rest[0] === 'string') {\n            for (const name of [type, ...rest]) {\n              this.dispatchEvent(\n                new Event(name, { bubbles: true, composed: true }),\n              )\n            }\n            return\n          }\n\n          this.dispatchEvent(\n            new CustomEvent(type, {\n              bubbles: true,\n              composed: true,\n              ...(rest[1] ?? {}),\n              detail: rest[0],\n            }),\n          )\n        }) as SetupEmit,\n        emitCancellable: ((type: string, ...rest: any[]) => {\n          if (!rest.length) {\n            return this.dispatchEvent(\n              new Event(type, {\n                bubbles: true,\n                composed: true,\n                cancelable: true,\n              }),\n            )\n          }\n\n          return this.dispatchEvent(\n            new CustomEvent(type, {\n              bubbles: true,\n              composed: true,\n              cancelable: true,\n              ...(rest[1] ?? {}),\n              detail: rest[0],\n            }),\n          )\n        }) as SetupEmitCancellable,\n\n        // Expose the global Datastar signal root inside `setup`.\n        //\n        // This references the shared reactive store directly rather than Rocket's private `_rocket` namespace.\n        // Expose global Datastar actions as imperative methods inside `setup`.\n        //\n        // Use a component-owned cleanup map so teardown from global actions remains tied to the component lifecycle.\n        actions: new Proxy(\n          {},\n          {\n            get: (_, name: string | symbol) => {\n              if (typeof name !== 'string') return\n              return (...args: any[]) => {\n                const action = actions[name]\n                if (!action) {\n                  throw createError(\n                    actionErrorContext(this, name),\n                    'UndefinedAction',\n                  )\n                }\n                return action(\n                  globalActionContext(\n                    this,\n                    undefined,\n                    name,\n                    this.#globalActionCleanups,\n                  ),\n                  ...args,\n                )\n              }\n            },\n          },\n        ) as Record<string, (...args: any[]) => any>,\n        action: (name, fn) => {\n          this.#actions.set(name, fn)\n        },\n        observeProps: (fn, ...propNames) => {\n          const registration = {\n            fn,\n            names: propNames.length === 0 ? null : new Set(propNames),\n          }\n          this.#propObservers.push(registration)\n          return () => {\n            const index = this.#propObservers.indexOf(registration)\n            if (index >= 0) this.#propObservers.splice(index, 1)\n          }\n        },\n        overrideProp: (name, getter, setter) => {\n          this.#overrideProp(name, getter, setter)\n        },\n        defineHostProp: (name, descriptor) => {\n          this.#defineHostProp(name, descriptor)\n        },\n        render: ((\n          overrides: RenderContextOverrides<InferProps<Defs>>,\n          ...args: any[]\n        ) => {\n          this.#render(overrides, ...args)\n        }) as SetupRender<InferProps<Defs>>,\n        host: this as RocketHostWithProps<InferProps<Defs>>,\n      }\n      const firstUpdateContext: FirstUpdateContext<InferProps<Defs>, Refs> = {\n        ...context,\n        refs: refs as unknown as InstancesOf<Refs>,\n      }\n\n      setup?.(context)\n      this.#render({})\n      if (this.#needsSignalPathBase) {\n        mergePaths([[this.#signalPathBase, {}]], { ifMissing: true })\n      }\n      if (this.#deferredApplyIgnore) {\n        this.removeAttribute(rocketIgnoreAttr)\n        this.#deferredApplyIgnore = false\n      }\n\n      // In shadow mode, apply only the host's Datastar attributes here because they belong to the outer page scope rather than Rocket's private scope.\n      if (this.#mountRoot !== this) {\n        applyElement(this)\n      }\n\n      // Apply only the component-owned render surface here.\n      //\n      // In `light` mode that surface is the host itself.\n      // In shadow modes, re-applying the host would incorrectly rewrite outer-page bindings into Rocket's private signal path.\n      apply(this.#mountRoot!, true)\n      this.#datastarApplied = true\n      this.#conditionalCleanups.push(\n        ...initRocketStructures(this.#mountRoot!, {\n          signalPathBase: this.#signalPathBase,\n        }),\n      )\n      this.#syncRefs()\n      const refsObserver = new MutationObserver(() => this.#syncRefs())\n      refsObserver.observe(this.#mountRoot!, {\n        childList: true,\n        subtree: true,\n      })\n      if (this.#mountRoot !== this) {\n        refsObserver.observe(this, {\n          childList: true,\n          subtree: true,\n        })\n      }\n      this.#cleanups.push(() => refsObserver.disconnect())\n      this.#indexActionHosts()\n      onFirstRender?.(firstUpdateContext)\n    }\n\n    attributeChangedCallback(\n      name: string,\n      oldValue: string | null,\n      newValue: string | null,\n    ) {\n      if (this.#reflecting) return\n      const propName = attrToProp.get(name)\n      if (!propName) return\n      if (\n        newValue !== null &&\n        oldValue === null &&\n        this.#pendingInitialAttrValues.get(name) === newValue\n      ) {\n        this.#pendingInitialAttrValues.delete(name)\n        return\n      }\n      this.#setProp(\n        propName,\n        newValue === null\n          ? getCodecDefault(propDefs[propName])\n          : decodeCodec(propDefs[propName], newValue),\n      )\n    }\n\n    disconnectedCallback() {\n      mergePaths([[this.#signalPathBase, null]])\n      this.removeEventListener(\n        DATASTAR_SCOPE_CHILDREN_EVENT,\n        this.#scopePatchedChildren,\n      )\n\n      // Run cleanups registered by `setup({ actions })` alongside Rocket's normal setup/effect cleanups when the component disconnects.\n      for (const cleanup of this.#globalActionCleanups.values()) cleanup()\n      this.#globalActionCleanups.clear()\n      for (const cleanup of this.#hostConditionalCleanups) cleanup()\n      this.#hostConditionalCleanups.length = 0\n      for (const cleanup of this.#conditionalCleanups) cleanup()\n      this.#conditionalCleanups.length = 0\n      for (const cleanup of this.#cleanups) cleanup()\n      this.#cleanups.length = 0\n      for (const name of Object.keys(this.#refs)) delete this.#refs[name]\n      this.#propObservers = []\n      this.#actions.clear()\n      this.#mounted = false\n    }\n    static {\n      for (const name of propNames) {\n        Object.defineProperty(RocketElement.prototype, name, {\n          get(this: RocketElement) {\n            return this.#getDefaultProp(name)\n          },\n          set(this: RocketElement, value: InferProps<Defs>[typeof name]) {\n            this.#setDefaultProp(name, value)\n          },\n        })\n      }\n    }\n  }\n\n  Object.defineProperty(RocketElement, 'manifest', {\n    configurable: false,\n    enumerable: false,\n    value: () =>\n      cloneRocketManifestComponent(\n        rocketManifestRegistry.get(tag) ?? componentManifest,\n      ),\n  })\n  customElements.define(tag, RocketElement)\n  rocketManifestRegistry.set(tag, componentManifest)\n  return RocketElement\n}\nexport type { RocketDefinition, RocketRenderValue }\n"],
  "mappings": "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",
  "names": ["DATASTAR_FETCH_EVENT", "DATASTAR_PROP_CHANGE_EVENT", "DATASTAR_READY_EVENT", "DATASTAR_SCOPE_CHILDREN_EVENT", "DATASTAR_SIGNAL_PATCH_EVENT", "DOCUMENT", "HTMLInput", "MutationObserverClass", "kebab", "str", "camel", "x", "snake", "isStringTrue", "value", "RE_FUNCTION_LITERAL", "evaluate", "source", "compileExpression", "jsStrToObject", "raw", "options", "reviveFunctionStrings", "_k", "trimmed", "revived", "caseFns", "str", "x", "modifyCasing", "mods", "defaultCase", "c", "aliasify", "name", "unaliasify", "url", "createError", "ctx", "reason", "metadata", "r", "snake", "q", "c", "nonceAttribute", "aliasify", "root", "DOCUMENT", "pageNonce", "cspEnabled", "policy", "createError", "html", "script", "prepareScript", "content", "createHTML", "compiledExpressions", "compileExpression", "argNames", "expression", "source", "cached", "compiled", "hasOwn", "isPojo", "obj", "isEmpty", "prop", "hasOwn", "updateLeaves", "fn", "key", "val", "pathToObj", "paths", "result", "path", "value", "keys", "lastKey", "acc", "currentPatch", "queuedEffects", "batchDepth", "notifyIndex", "queuedEffectsLength", "subStack", "activeSub", "version", "beginBatch", "endBatch", "flush", "dispatch", "startPeeking", "sub", "value_", "prev_", "stopPeeking", "signal", "initialValue", "signalOper", "previousValue_", "flags_", "computedSymbol", "computed", "getter", "c", "computedOper", "getter_", "effect", "fn", "e", "fn_", "link", "effectOper", "run", "update", "updateComputed", "updateSignal", "startTracking", "oldValue", "endTracking", "s", "value", "notify", "flags", "subs", "subs_", "sub_", "checkDirty", "deps_", "dep", "dep_", "depFlags", "nextDep_", "propagate", "currentValue", "shallowPropagate", "unlink", "prevDep", "depsTail_", "nextDep", "version_", "prevSub", "subsTail_", "newLink", "prevDep_", "prevSub_", "nextSub_", "toRemove", "next", "stack", "top", "isValidLink", "subSubs", "nextSub", "checkDepth", "dirty", "firstSub", "hasMultipleSubs", "checkLink", "getPath", "path", "result", "root", "split", "hasOwn", "deep", "prefix", "isArr", "isPojo", "deepObj", "key", "keys", "_", "prop", "newValue", "oldLength", "patch", "i", "pathStr", "nextVal", "detail", "pathToObj", "DOCUMENT", "DATASTAR_SIGNAL_PATCH_EVENT", "mergePatch", "ifMissing", "mergeInner", "mergePaths", "paths", "options", "target", "targetParent", "toRegExp", "val", "filtered", "include", "exclude", "obj", "includeRe", "excludeRe", "walk", "node", "isHTMLOrSVG", "el", "actionPlugins", "attributePlugins", "watcherPlugins", "actions", "_", "prop", "removals", "queuedAttributes", "queuedAttributeNames", "observedRoots", "datastarReadyDispatched", "attribute", "plugin", "roots", "DOCUMENT", "root", "applyQueued", "action", "DATASTAR_FETCH_EVENT", "evt", "createError", "watcher", "cleanupEls", "els", "el", "elCleanups", "attrCleanups", "cleanup", "aliasedIgnore", "aliasify", "aliasedIgnoreAttr", "shouldIgnore", "applyEls", "onlyNew", "appliedKeys", "key", "attrKey", "applyAttributePlugin", "attr", "observe", "mutations", "target", "type", "attributeName", "addedNodes", "removedNodes", "node", "isHTMLOrSVG", "rawAttrKey", "unaliasify", "value", "mutationObserver", "MutationObserverClass", "parseAttributeKey", "rawKey", "namePart", "rawModifiers", "pluginName", "mods", "rawMod", "label", "mod", "isDocumentObserverActive", "dispatchDatastarReady", "DATASTAR_READY_EVENT", "observeRoot", "apply", "applyElement", "ctx", "keyReq", "valueReq", "keyProvided", "valueProvided", "cleanups", "cachedRx", "args", "genRx", "returnsValue_", "argNames_", "cleanups_", "oldCleanup", "signalPath", "name", "path", "part", "returnsValue", "argNames", "expr", "statementRe", "statements", "lastIdx", "last", "match", "interpolationExpr", "signalName", "actionName", "fn", "compileExpression", "err", "e", "action", "_", "fn", "startPeeking", "stopPeeking", "action", "_", "value", "filter", "startPeeking", "masked", "filtered", "updateLeaves", "mergePatch", "stopPeeking", "action", "_", "filter", "startPeeking", "masked", "filtered", "updateLeaves", "oldValue", "mergePatch", "stopPeeking", "abortControllers", "methodSupportsRequestBody", "method", "createHttpMethod", "name", "openWhenHiddenDefault", "action", "el", "evt", "error", "cleanups", "url", "selector", "userHeaders", "contentType", "include", "exclude", "openWhenHidden", "payload", "requestCancellation", "retry", "retryInterval", "retryScaler", "retryMaxWait", "retryMaxCount", "controller", "cleanupName", "cancelOnDisconnect", "requestCleanup", "controllers", "cleanupFn", "headers", "req", "input_", "openWhenHidden_", "retry_", "retryInterval_", "retryScaler_", "retryMaxWait_", "retryMaxCount_", "onopen_", "response", "dispatchFetch", "ERROR", "onmessage_", "event_", "type", "argsRawLines", "line", "data_", "i", "k", "v", "argsRaw", "err", "isWrongContent", "buildFetchEventSourceInit", "urlInstance", "DOCUMENT", "queryParams", "startPeeking", "requestPayload", "filtered", "stopPeeking", "body", "formEl", "formData", "submitter", "preventDefault", "HTMLInput", "multipart", "formParams", "key", "value", "STARTED", "fetchEventSource", "FINISHED", "RETRYING", "RETRIES_FAILED", "DATASTAR_FETCH_EVENT", "getBytes", "stream", "onChunk", "reader", "result", "getLines", "onLine", "buffer", "position", "fieldLength", "discardTrailingNewline", "arr", "next", "bufLength", "lineStart", "lineEnd", "getMessages", "onId", "onRetry", "onMessage", "message", "newMessage", "decoder", "field", "valueOffset", "id_", "resolve", "reject", "fetchInit", "input", "inputSignal", "inputHeaders", "inputOnOpen", "onmessage", "responseOverrides_", "responseOverrides", "rest", "curRequestController", "rebuildAndRetry", "currentFetchInit", "create", "onVisibilityChange", "retryTimer", "dispose", "onopen", "retries", "baseRetryInterval", "retryRequest", "curRequestSignal", "dispatchNonSSE", "dispatchType", "argNames", "n", "kebab", "o", "status", "isNoContentStatus", "isRedirectStatus", "isErrorStatus", "ct", "script", "scriptAttributesHeader", "content", "prepareScript", "id", "innerErr", "attribute", "el", "key", "rx", "syncAttr", "val", "_k", "v", "update", "observer", "obj", "attributeFilter", "MutationObserverClass", "cleanup", "effect", "propAdapter", "prop", "events", "get_", "el", "set_", "value", "events_", "attrAdapter", "attr", "valueAdapter", "treatUndefinedAsString", "type", "selectAdapter", "numbers", "option", "dataURIRegex", "empty", "boundPath", "key", "rawKey", "signalName", "adapter", "initialValue", "rawAttribute", "aliasify", "selector", "HTMLInput", "checked", "DOCUMENT", "input", "mergePaths", "inputs", "paths", "i", "hasOwn", "attribute", "mods", "error", "modifyCasing", "props", "syncSignal", "files", "signalFiles", "f", "resolve", "reader", "match", "firstProp", "camel", "path", "getPath", "signalValue", "syncElement", "eventName", "DATASTAR_PROP_CHANGE_EVENT", "cleanup", "effect", "multipleObserver", "MutationObserverClass", "attribute", "key", "el", "mods", "rx", "modifyCasing", "classes", "callback", "observer", "k", "classNames", "cn", "name", "MutationObserverClass", "cleanup", "effect", "attribute", "key", "mods", "rx", "error", "mergePaths", "modifyCasing", "computed", "patch", "updateLeaves", "old", "mergePatch", "attribute", "rx", "effect", "attribute", "el", "key", "mods", "value", "signalName", "modifyCasing", "activeFetches", "mergePaths", "watcher", "event", "type", "elt", "STARTED", "FINISHED", "DOCUMENT", "DATASTAR_FETCH_EVENT", "tagToMs", "args", "arg", "tagHas", "tags", "tag", "tagFirst", "defaultValue", "delay", "callback", "wait", "args", "throttle", "leading", "trailing", "debounce", "lastArgs", "timer", "modifyTiming", "mods", "delayArgs", "tagToMs", "debounceArgs", "tagHas", "throttleArgs", "supportsViewTransitions", "target", "modifyViewTransition", "callback", "mods", "DOCUMENT", "cb", "args", "attribute", "rx", "mods", "callback", "beginBatch", "endBatch", "modifyViewTransition", "wait", "delayArgs", "tagToMs", "delay", "attribute", "el", "value", "mods", "spaces", "filters", "jsStrToObject", "callback", "observer", "filtered", "MutationObserverClass", "cleanup", "effect", "attribute", "el", "key", "mods", "rx", "target", "DOCUMENT", "callback", "evt", "beginBatch", "endBatch", "modifyViewTransition", "modifyTiming", "eventName", "modifyCasing", "evtListOpts", "cb", "DATASTAR_FETCH_EVENT", "DATASTAR_SIGNAL_PATCH_EVENT", "listener", "clamp", "value", "min", "max", "once", "attribute", "el", "mods", "rx", "callback", "beginBatch", "endBatch", "modifyViewTransition", "modifyTiming", "options", "threshold", "clamp", "tagFirst", "exit", "observer", "entries", "entry", "attribute", "mods", "rx", "callback", "beginBatch", "endBatch", "modifyViewTransition", "duration", "durationArgs", "tagToMs", "tagHas", "intervalId", "attribute", "el", "key", "mods", "rx", "error", "filterAttr", "aliasify", "filtersRaw", "filters", "jsStrToObject", "running", "callback", "modifyTiming", "evt", "startPeeking", "watched", "filtered", "stopPeeking", "isEmpty", "beginBatch", "endBatch", "DOCUMENT", "DATASTAR_SIGNAL_PATCH_EVENT", "attribute", "el", "key", "mods", "value", "signalName", "modifyCasing", "mergePaths", "NONE", "DISPLAY", "attribute", "el", "rx", "update", "observer", "MutationObserverClass", "cleanup", "effect", "attribute", "key", "mods", "rx", "ifMissing", "modifyCasing", "value", "mergePaths", "patch", "mergePatch", "attribute", "key", "el", "rx", "style", "initialStyles", "apply", "prop", "value", "initial", "update", "observer", "styles", "kebab", "MutationObserverClass", "cleanup", "effect", "attribute", "el", "rx", "update", "observer", "MutationObserverClass", "cleanup", "effect", "PATCH_MODES", "NAMESPACES", "watcher", "ctx", "args", "selector", "mode", "namespace", "useViewTransition", "isStringTrue", "viewTransitionSelector", "elements", "patchElementsArgs", "selector_", "mode_", "namespace_", "elements_", "target", "DOCUMENT", "el", "supportsViewTransitions", "onPatchElements", "error", "newContent", "consume", "elementsWithSvgsRemoved", "hasHtml", "hasHead", "hasBody", "wrapperTag", "wrappedEls", "html", "newDocument", "createHTML", "wrapperEl", "child", "children", "applyToTargets", "targets", "targetList", "scripts", "script", "execute", "elScripts", "old", "name", "value", "prepareScript", "applyPatchMode", "element", "action", "used", "nextNode", "morph", "scopeHost", "DATASTAR_SCOPE_CHILDREN_EVENT", "ctxIdMap", "ctxPersistentIds", "oldIdTagNameMap", "duplicateIds", "ctxPantry", "aliasedIgnoreMorph", "aliasify", "aliasedIgnoreMorphAttr", "oldElt", "isHTMLOrSVG", "normalizedElt", "oldIdElements", "id", "tagName", "newIdElements", "parent", "populateIdMapWithTree", "morphChildren", "oldParent", "newParent", "insertionPoint", "endPoint", "newChild", "bestMatch", "findBestMatch", "cursor", "tempNode", "removeNode", "morphNode", "movedChild", "current", "idSet", "moveBefore", "namespaceURI", "newEmptyChild", "newClonedChild", "node", "startPoint", "nextSibling", "siblingSoftMatchCount", "displaceMatchCount", "nodeMatchCount", "isSoftMatch", "isIdSetMatch", "oldSet", "newSet", "oldNode", "newNode", "parentNode", "after", "aliasedPreserveAttr", "type", "newElt", "shouldScopeChildren", "preserveAttrs", "updateElementProp", "newEltHasAttr", "shouldDispatchPropChangeEvent", "HTMLInput", "newValue", "DATASTAR_PROP_CHANGE_EVENT", "root", "elt", "watcher", "error", "signals", "onlyIfMissing", "ifMissing", "isStringTrue", "mergePatch", "jsStrToObject", "getCodecDefault", "codec", "decodeCodec", "value", "error", "cloneValue", "toDefaultFactory", "withDefault", "factory", "defaultFactory", "manifestMeta", "meta", "createCodecWithDefault", "decode", "encode", "nextDefaultFactory", "nextManifestMeta", "createCodec", "handlers", "fitNumber", "inMin", "inMax", "outMin", "outMax", "clamped", "rounded", "ratio", "normalized", "result", "parseJSON", "createStringCodec", "mapString", "fn", "text", "length", "_", "char", "__", "part", "createNumberCodec", "number", "mapNumber", "input", "minValue", "maxValue", "stepValue", "base", "decimals", "createBoolCodec", "createDateCodec", "date", "createJsonCodec", "parsed", "createJsCodec", "jsStrToObject", "createBinCodec", "bytes", "i", "byte", "createArrayCodec", "item", "createTupleCodec", "codecs", "array", "index", "encoded", "createObjectCodec", "shape", "source", "next", "key", "isCodec", "oneOfDefaultFactory", "values", "entry", "codecValueKind", "codecMatchesValue", "codecMatchesInput", "getCodecManifest", "createOneOfCodec", "hadDecodeError", "parsedValue", "oneOf", "codecRegistry", "rawTextTags", "appendComposedTemplateValue", "fragment", "value", "stringifyTemplateValue", "createError", "item", "hypertext", "render", "postprocess", "strings", "values", "state", "markerPrefix", "string", "marker", "index", "markerContexts", "j", "input", "i", "char", "context", "token", "root", "resolved", "markerPattern", "replaceMarkers", "source", "replace", "_", "rawIndex", "stringifyMarkerValue", "resolveMarkers", "target", "elements", "element", "attr", "match", "comments", "commentNodes", "node", "text", "textNodes", "unresolved", "signalNameAttributes", "directSignalValuePlugins", "rootModifierPattern", "rocketDispatchActionName", "rocketRefAttr", "parseTemplateModifiers", "raw", "mods", "rawModifier", "name", "toRocketRefName", "modifyCasing", "rewriteDatastarExpression", "scope", "signalPathBase", "localSignals", "aliasPattern", "left", "right", "protectedRegion", "template", "signal", "action", "alias", "expression", "rewriteDataAttributes", "nodes", "signalName", "attrBody", "colonIndexInBody", "pluginName", "colonIndex", "refName", "keyWithMods", "key", "nextValue", "nextName", "localSignal", "scopedKeyWithMods", "conditionalControllerCleanups", "conditionalKind", "template", "conditionalError", "reason", "createError", "initConditionalChain", "head", "scope", "initNested", "branches", "genRx", "returnsValue_", "tail", "seenElse", "node", "kind", "start", "end", "activeIndex", "nestedCleanups", "clearMountedBranch", "cleanup", "nextSibling", "stop", "effect", "nextIndex", "branch", "fragment", "rewriteDataAttributes", "nodes", "initRocketConditionals", "root", "cleanups", "templates", "prev", "prevKind", "forControllerCleanups", "nextForControllerId", "forError", "reason", "template", "metadata", "createError", "initRocketFors", "root", "scope", "initNested", "cleanups", "templates", "value", "match", "item", "source", "index", "controllerId", "rx", "genRx", "returnsValue_", "start", "end", "rows", "stop", "effect", "next", "items", "i", "row", "cleanup", "node", "nextSibling", "startPeeking", "mergePaths", "stopPeeking", "insertionPoint", "pathBase", "fragment", "localSignals", "rewriteDataAttributes", "rowStart", "rowEnd", "nodes", "fn", "rocketHostAttr", "actionErrorContext", "el", "name", "globalActionContext", "evt", "cleanups", "createError", "rocketDeferredIgnoreAttr", "rocketDataPrefix", "aliasify", "rocketIgnoreAttr", "speculativeRocketTag", "rocketTags", "releasedSpeculativeHosts", "hasRocketScopedAttributes", "root", "node", "value", "releaseSpeculativeRocketHosts", "hosts", "host", "apply", "markPendingRocketHosts", "nodes", "tagName", "mode", "targets", "target", "observePendingRocketHosts", "records", "record", "rocketBootstrapStarted", "rocketBootstrapWaiting", "pendingHostObservationStarted", "pendingRocketDefinitions", "ensureRocketBootstrap", "isDocumentObserverActive", "tag", "options", "rocket", "DATASTAR_READY_EVENT", "registeredTags", "rocketManifestRegistry", "namedInstanceCounts", "nextInstanceId", "signalPathSegment", "cloneRocketManifestComponent", "component", "prop", "slot", "event", "rocketManifestDocument", "left", "right", "publishRocketManifests", "endpoint", "headers", "rocketHostsByElement", "action", "rocketDispatchActionName", "args", "existing", "manifest", "props", "render", "renderOnPropChange", "setup", "onFirstRender", "propDefs", "codecRegistry", "propNames", "attrToProp", "kebab", "componentManifest", "codec", "codecManifest", "getCodecManifest", "getCodecDefault", "tagScope", "getReactiveScopedPath", "path", "segment", "hasReactiveScopedPath", "subtreeUsesScopedSignals", "signalPathBase", "attr", "colonIndex", "key", "initRocketStructures", "scope", "initRocketFors", "initRocketConditionals", "RocketElement", "#instanceId", "#signalPathBase", "#props", "#refs", "#state", "#propObservers", "#actions", "#cleanups", "#conditionalCleanups", "#hostConditionalCleanups", "#globalActionCleanups", "#datastarApplied", "#mounted", "#renderQueued", "#reflecting", "#mountRoot", "#deferredApplyIgnore", "#hostTreeScoped", "#needsSignalPathBase", "#pendingInitialAttrValues", "#lightSlotNodes", "#adoptedStyles", "#rewriteScopedDataAttributes", "rewriteDataAttributes", "#syncRefs", "nextRefs", "roots", "elements", "rocketRefAttr", "element", "#scopePatchedChildren", "mergePaths", "cleanup", "child", "#html", "hypertext", "string", "template", "createHTML", "fragment", "#svg", "g", "instanceSegment", "instanceBase", "instanceKey", "instanceCount", "attrName", "propName", "rawValue", "decodeCodec", "globalAction", "actions", "#queueRender", "#render", "#indexActionHosts", "#setProp", "nextValue", "changes", "observer", "#getDefaultProp", "#reflectPropAttribute", "encoded", "#setDefaultProp", "#syncAdoptedStyles", "style", "#defineHostProp", "descriptor", "ownDescriptor", "ownValue", "#overrideProp", "getter", "setter", "overrides", "rendered", "appendComposedTemplateValue", "slots", "content", "assigned", "children", "slotName", "morph", "DATASTAR_SCOPE_CHILDREN_EVENT", "localSignals", "initialValue", "computed", "getPath", "receiver", "_", "refs", "context", "fn", "effect", "merge", "styles", "text", "type", "rest", "registration", "index", "firstUpdateContext", "applyElement", "refsObserver", "oldValue", "newValue"]
}
