{
  "version": 3,
  "sources": ["../library/src/engine/consts.ts", "../library/src/utils/polyfills.ts", "../library/src/utils/paths.ts", "../library/src/engine/signals.ts", "../library/src/utils/dom.ts", "../library/src/utils/text.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"],
  "sourcesContent": ["const lol = /\uD83D\uDD95JS_DS\uD83D\uDE80/.source\nexport const DSP = lol.slice(0, 5)\nexport const DSS = lol.slice(4)\nexport 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'\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 } 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 prevSub: ReactiveNode | 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  prevSub = activeSub\n  activeSub = sub\n}\n\nexport const stopPeeking = (): void => {\n  activeSub = prevSub\n  prevSub = undefined\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,\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 diff = (deepObj[prop] as unknown as number) - newValue\n          deepObj[prop] = newValue\n          // manually make a diff patch for now, shouldnt have to do this when object diffing is\n          // implemented. see https://github.com/starfederation/datastar-dev/issues/274\n          if (diff > 0) {\n            const patch: Record<string, any> = {}\n            for (let i = newValue; i < deepObj[prop]; 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            // 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  const stack: [any, string][] = [[obj, '']]\n\n  while (stack.length) {\n    const [node, prefix] = stack.pop()!\n\n    for (const key in node) {\n      const path = prefix + key\n      if (isPojo(node[key])) {\n        stack.push([node[key], `${path}.`])\n      } else if (includeRe.test(path) && !excludeRe.test(path)) {\n        paths.push([path, getPath(path)])\n      }\n    }\n  }\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 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\nconst RE_FUNCTION_LITERAL =\n  /^(?:(?:async\\s+)?function\\b|(?:async\\s*)?(?:\\([^)]*\\)|[A-Za-z_$][\\w$]*)\\s*=>)/\n\ntype JsStrToObjectOptions = {\n  reviveFunctionStrings?: boolean\n}\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 = Function(`return (${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 Function(`return (${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 {\n  DATASTAR_FETCH_EVENT,\n  DATASTAR_READY_EVENT,\n  DSP,\n  DSS,\n} from '@engine/consts'\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, snake, unaliasify } from '@utils/text'\n\nconst url = 'https://data-star.dev/errors'\n\nconst error = (\n  ctx: Record<string, any>,\n  reason: string,\n  metadata: Record<string, any> = {},\n) => {\n  Object.assign(metadata, ctx)\n  const e = new Error()\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  e.message = `${reason}\\nMore info: ${url}/${r}?${q}\\nContext: ${c}`\n  return e\n}\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: error.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 MutationObserver(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: error.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,\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\nexport const genRx = (\n  value: string,\n  {\n    returnsValue = false,\n    argNames = [],\n    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    //\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  // Ignore any escaped values\n  const escaped = new Map<string, string>()\n  const escapeRe = RegExp(`(?:${DSP})(.*?)(?:${DSS})`, 'gm')\n  let counter = 0\n  for (const match of expr.matchAll(escapeRe)) {\n    const k = match[1]\n    const v = `__escaped${counter++}`\n    escaped.set(v, k)\n    expr = expr.replace(DSP + k + DSS, v)\n  }\n\n  // Replace signal references with bracket notation\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\n  // Skip replacements inside string/template literals.\n  // Template interpolation support rewrites `${...}` only when braces are non-nested.\n  expr = expr.replace(\n    /(\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|`(?:\\\\.|[^`\\\\$]|\\$(?!\\{))*`)|\\$\\{([^{}]*)\\}|\\$([a-zA-Z_\\d]\\w*(?:[.-]\\w+)*)/g,\n    (match, quoted, interpolationExpr, signalName) => {\n      if (quoted) return match\n      if (interpolationExpr !== undefined) {\n        return `\\${${interpolationExpr.replace(\n          /\\$([a-zA-Z_\\d]\\w*(?:[.-]\\w+)*)/g,\n          (_: string, innerSignalName: string) =>\n            innerSignalName\n              .split('.')\n              .reduce((acc: string, part: string) => `${acc}['${part}']`, '$'),\n        )}}`\n      }\n      return signalName\n        .split('.')\n        .reduce((acc: string, part: string) => `${acc}['${part}']`, '$')\n    },\n  )\n\n  expr = expr.replaceAll(/@([A-Za-z_$][\\w$]*)\\(/g, '__action(\"$1\",evt,')\n\n  // Replace any escaped values\n  for (const [k, v] of escaped) {\n    expr = expr.replace(k, v)\n  }\n\n  try {\n    const fn = Function('el', '$', '__action', 'evt', ...argNames, expr)\n    return (el: HTMLOrSVG, ...args: any[]) => {\n      const action = (name: string, evt: Event | undefined, ...args: any[]) => {\n        const err = error.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 error(\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 error(\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: 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 { DATASTAR_FETCH_EVENT } from '@engine/consts'\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      if (requestCancellation === 'auto' || requestCancellation === 'cleanup') {\n        abortControllers.get(method)?.get(url)?.abort()\n        if (!abortControllers.has(method)) {\n          abortControllers.set(method, new Map())\n        }\n        abortControllers.get(method)!.set(url, controller)\n      }\n      if (requestCancellation === 'cleanup') {\n        cleanups.get(`@${name}`)?.()\n        cleanups.set(`@${name}`, async () => {\n          controller.abort()\n          // wait one tick for FINISHED to fire\n          await Promise.resolve()\n        })\n      }\n\n      let cleanupFn = () => {}\n\n      try {\n        if (!url?.length) {\n          throw error('FetchNoUrlProvided', { action })\n        }\n\n        const initialHeaders: Record<string, any> = {\n          Accept: 'text/event-stream, text/html, application/json',\n          'Datastar-Request': true,\n        }\n        if (contentType === 'json' && methodSupportsRequestBody(method)) {\n          initialHeaders['Content-Type'] = 'application/json'\n        }\n        const headers = Object.assign({}, initialHeaders, 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,\n          retry,\n          retryInterval,\n          retryScaler,\n          retryMaxWait,\n          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            dispatchFetch(type, el, argsRaw)\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 HTMLInputElement &&\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              if (multipart) {\n                req.body = formData\n              } else {\n                req.body = formParams\n              }\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(el, buildFetchEventSourceInit)\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        cleanups.delete(`@${name}`)\n      }\n    },\n  })\n\ncreateHttpMethod('get', 'GET', false)\ncreateHttpMethod('patch', 'PATCH')\ncreateHttpMethod('post', 'POST')\ncreateHttpMethod('put', 'PUT')\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      buffer = concat(buffer, arr)\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 ? `${message.data}\\n${value}` : 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 concat = (a: Uint8Array, b: Uint8Array) => {\n  const res = new Uint8Array(a.length + b.length)\n  res.set(a)\n  res.set(b, a.length)\n  return res\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      onclose?: () => void\n      onerror?: (err: any) => void\n      openWhenHidden?: boolean\n      fetch?: typeof fetch\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): Promise<void> => {\n  return new Promise<void>((resolve, reject) => {\n    const fetchInit = buildFetchEventSourceInit()\n    if (!fetchInit) {\n      return\n    }\n    let {\n      input,\n      signal: inputSignal,\n      headers: inputHeaders,\n      onopen: inputOnOpen,\n      onmessage,\n      onclose,\n      openWhenHidden,\n      fetch: inputFetch,\n      retry = 'auto',\n      retryInterval = 1_000,\n      retryScaler = 2,\n      retryMaxWait = 30_000,\n      retryMaxCount = 10,\n      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    const onVisibilityChange = () => {\n      curRequestController.abort() // close existing request on every visibility change\n      if (!document.hidden) {\n        const currentFetchInit = buildFetchEventSourceInit()\n        if (!currentFetchInit) return\n\n        input = currentFetchInit.input\n        rest.body = currentFetchInit.body\n        create()\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 fetch = inputFetch || window.fetch\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(create, 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\n          dispatchFetch(dispatchType, el, argsRaw)\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          onclose?.()\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          script.textContent = await response.text()\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        onclose?.()\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 { 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 MutationObserver(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 { DATASTAR_PROP_CHANGE_EVENT } 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,\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,\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,\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 HTMLInputElement &&\n    el.type === 'radio'\n  ) {\n    const checked = [...document.querySelectorAll(selector)].find(\n      (input): input is HTMLInputElement =>\n        input instanceof HTMLInputElement && 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 HTMLInputElement) {\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 && el.multiple) {\n      const typeMap = new Map<string, string>()\n      adapter = {\n        get: (el: HTMLSelectElement) =>\n          [...el.selectedOptions].map((option) => {\n            const type = typeMap.get(option.value)\n            return type === 'string' || type == null\n              ? option.value\n              : +option.value\n          }),\n        set: (el: HTMLSelectElement, value: (string | number)[]) => {\n          for (const option of el.options) {\n            if (value.includes(option.value)) {\n              typeMap.set(option.value, 'string')\n              option.selected = true\n            } else if (value.includes(+option.value)) {\n              typeMap.set(option.value, 'number')\n              option.selected = true\n            } else {\n              option.selected = false\n            }\n          }\n        },\n        events: ['change'],\n      }\n    } else if (el instanceof HTMLSelectElement) {\n      adapter = valueAdapter(true, 'change')\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    const initialValue = getPath(signalName)\n    const path = boundPath(\n      el,\n      key,\n      rawKey,\n      signalName,\n      adapter,\n      initialValue,\n    )\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\n    for (const eventName of adapter.events) {\n      el.addEventListener(eventName, syncSignal)\n    }\n    el.addEventListener(DATASTAR_PROP_CHANGE_EVENT, syncSignal)\n    const cleanup = effect(() => {\n      adapter.set(el, getPath(path))\n    })\n\n    return () => {\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 { 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 MutationObserver(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 } 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  if (!args || args.size <= 0) return 0\n  for (const arg of args) {\n    if (arg.endsWith('ms')) {\n      return +arg.replace('ms', '')\n    }\n    if (arg.endsWith('s')) {\n      return +arg.replace('s', '') * 1000\n    }\n    try {\n      return Number.parseFloat(arg)\n    } catch (_) {}\n  }\n  return 0\n}\n\nexport const tagHas = (\n  tags: Set<string>,\n  tag: string,\n  defaultValue = false,\n) => {\n  if (!tags) return defaultValue\n  return tags.has(tag.toLowerCase())\n}\n\nexport const tagFirst = (tags?: Set<string>, defaultValue = ''): string => {\n  if (tags && tags.size > 0) {\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(() => {\n      callback(...args)\n    }, wait)\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', false)\n    const trailing = !tagHas(debounceArgs, 'notrailing', false)\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', false)\n    const trailing = tagHas(throttleArgs, 'trailing', false)\n    callback = throttle(callback, wait, leading, trailing)\n  }\n\n  return callback\n}\n", "import type { EventCallbackHandler, Modifiers } from '@engine/types'\n\nexport const supportsViewTransitions = (\n  element: Element = document.documentElement,\n): boolean => 'startViewTransition' in element\n\nexport const modifyViewTransition = (\n  callback: EventCallbackHandler,\n  mods: Modifiers,\n): EventCallbackHandler => {\n  if (mods.has('viewtransition') && supportsViewTransitions()) {\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      rx()\n      endBatch()\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 { 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 MutationObserver(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} 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      rx(evt)\n      endBatch()\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  const v = min + (max - min) * t\n  return clamped ? clamp(v, min, max) : v\n}\n\nexport const inverseLerp = (\n  min: number,\n  max: number,\n  value: number,\n  clamped = true,\n): number => {\n  if (value < min) return 0\n  if (value > max) return 1\n  const v = (value - min) / (max - min)\n  return clamped ? clamp(v, min, max) : 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      rx()\n      endBatch()\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      rx()\n      endBatch()\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', false)\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 } from '@engine/consts'\nimport { beginBatch, endBatch, filtered } 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        const watched = filtered(filters, evt.detail)\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 { 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 MutationObserver(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 { 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 MutationObserver(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 { 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 MutationObserver(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} from '@engine/consts'\nimport type { WatcherArgsValue, WatcherContext } from '@engine/types'\nimport { isHTMLOrSVG } from '@utils/dom'\nimport { aliasify } from '@utils/text'\nimport { supportsViewTransitions } from '@utils/view-transitions'\n\nconst isValidType = <T extends readonly string[]>(\n  arr: T,\n  value: string,\n): value is T[number] => (arr as readonly string[]).includes(value)\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 =\n      typeof args.useViewTransition === 'string' && args.useViewTransition.trim() === 'true'\n    const viewTransitionSelector =\n      typeof args.viewTransitionSelector === 'string' ? args.viewTransitionSelector : ''\n    const elements = args.elements\n\n    if (!isValidType(PATCH_MODES, mode)) {\n      throw ctx.error('PatchElementsInvalidMode', { mode })\n    }\n\n    if (!selector && mode !== 'outer' && mode !== 'replace') {\n      throw ctx.error('PatchElementsExpectedSelector')\n    }\n\n    if (!isValidType(NAMESPACES, namespace)) {\n      throw ctx.error('PatchElementsInvalidNamespace', { namespace })\n    }\n\n    const patchElementsArgs: PatchElementsArgs = {\n      selector,\n      mode,\n      namespace,\n      elements,\n    }\n\n    if (useViewTransition && supportsViewTransitions()) {\n      let element: any = document.documentElement\n      if (viewTransitionSelector) {\n        const el = document.querySelector(viewTransitionSelector)\n        if (el && supportsViewTransitions(el)) {\n          element = el\n        }\n      }\n      element.startViewTransition(() => onPatchElements(ctx, patchElementsArgs))\n    } else {\n      onPatchElements(ctx, patchElementsArgs)\n    }\n  },\n})\n\nconst onPatchElements = (\n  { error }: WatcherContext,\n  { selector, mode, namespace, elements }: 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 newDocument = new DOMParser().parseFromString(\n      hasHtml || hasHead || hasBody\n        ? elements\n        : `<body><template>${wrappedEls}</template></body>`,\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      script.text = 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 HTMLInputElement &&\n      newElt instanceof HTMLInputElement &&\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 = 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 { 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 =\n      typeof onlyIfMissing === 'string' && onlyIfMissing.trim() === 'true'\n    mergePatch(jsStrToObject(signals), { ifMissing })\n  },\n})\n"],
  "mappings": "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",
  "names": ["lol", "DSP", "DSS", "DATASTAR_FETCH_EVENT", "DATASTAR_PROP_CHANGE_EVENT", "DATASTAR_READY_EVENT", "DATASTAR_SCOPE_CHILDREN_EVENT", "DATASTAR_SIGNAL_PATCH_EVENT", "hasOwn", "isPojo", "obj", "isEmpty", "prop", "hasOwn", "updateLeaves", "fn", "key", "val", "pathToObj", "paths", "result", "path", "value", "keys", "lastKey", "acc", "currentPatch", "queuedEffects", "batchDepth", "notifyIndex", "queuedEffectsLength", "prevSub", "activeSub", "version", "beginBatch", "endBatch", "flush", "dispatch", "startPeeking", "sub", "stopPeeking", "signal", "initialValue", "signalOper", "value_", "flags_", "computedSymbol", "computed", "getter", "c", "computedOper", "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_", "subsTail_", "newLink", "prevDep_", "prevSub_", "nextSub_", "toRemove", "next", "stack", "top", "isValidLink", "subSubs", "nextSub", "prev_", "checkDepth", "dirty", "firstSub", "hasMultipleSubs", "checkLink", "getPath", "path", "result", "root", "split", "hasOwn", "deep", "prefix", "isArr", "isPojo", "deepObj", "key", "keys", "_", "prop", "newValue", "diff", "patch", "i", "pathStr", "nextVal", "detail", "pathToObj", "DATASTAR_SIGNAL_PATCH_EVENT", "mergePatch", "ifMissing", "mergeInner", "mergePaths", "paths", "options", "target", "targetParent", "toRegExp", "val", "filtered", "include", "exclude", "obj", "includeRe", "excludeRe", "node", "isHTMLOrSVG", "el", "kebab", "str", "camel", "x", "snake", "RE_FUNCTION_LITERAL", "jsStrToObject", "raw", "options", "reviveFunctionStrings", "_k", "value", "trimmed", "revived", "caseFns", "str", "x", "modifyCasing", "mods", "defaultCase", "c", "aliasify", "name", "unaliasify", "url", "error", "ctx", "reason", "metadata", "e", "r", "snake", "q", "c", "actionPlugins", "attributePlugins", "watcherPlugins", "actions", "_", "prop", "removals", "queuedAttributes", "queuedAttributeNames", "observedRoots", "datastarReadyDispatched", "attribute", "plugin", "roots", "root", "applyQueued", "action", "DATASTAR_FETCH_EVENT", "evt", "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", "parseAttributeKey", "rawKey", "namePart", "rawModifiers", "pluginName", "mods", "rawMod", "label", "mod", "isDocumentObserverActive", "dispatchDatastarReady", "DATASTAR_READY_EVENT", "observeRoot", "applyAttributePlugin", "el", "attrKey", "value", "onlyNew", "rawKey", "unaliasify", "pluginName", "key", "mods", "parseAttributeKey", "plugin", "attributePlugins", "queuedAttributeNames", "ctx", "error", "actionPlugins", "keyReq", "valueReq", "keyProvided", "valueProvided", "cleanups", "cachedRx", "args", "genRx", "cleanup", "elCleanups", "removals", "attrCleanups", "oldCleanup", "returnsValue", "argNames", "expr", "statementRe", "statements", "lastIdx", "last", "escaped", "escapeRe", "DSP", "DSS", "counter", "match", "k", "v", "quoted", "interpolationExpr", "signalName", "_", "innerSignalName", "acc", "part", "fn", "action", "name", "evt", "err", "actions", "root", "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", "cleanupFn", "initialHeaders", "headers", "req", "response", "dispatchFetch", "ERROR", "type", "argsRawLines", "line", "i", "k", "v", "argsRaw", "err", "isWrongContent", "buildFetchEventSourceInit", "urlInstance", "queryParams", "startPeeking", "requestPayload", "filtered", "stopPeeking", "body", "formEl", "formData", "submitter", "preventDefault", "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", "concat", "bufLength", "lineStart", "lineEnd", "getMessages", "onId", "onRetry", "onMessage", "message", "newMessage", "decoder", "field", "valueOffset", "a", "b", "res", "resolve", "reject", "fetchInit", "input", "inputSignal", "inputHeaders", "inputOnOpen", "onmessage", "onclose", "inputFetch", "responseOverrides", "rest", "curRequestController", "onVisibilityChange", "currentFetchInit", "create", "retryTimer", "dispose", "fetch", "onopen", "retries", "baseRetryInterval", "retryRequest", "curRequestSignal", "dispatchNonSSE", "dispatchType", "argNames", "n", "kebab", "o", "status", "isNoContentStatus", "isRedirectStatus", "isErrorStatus", "ct", "script", "scriptAttributesHeader", "id", "innerErr", "attribute", "el", "key", "rx", "syncAttr", "val", "_k", "v", "update", "observer", "obj", "attributeFilter", "cleanup", "effect", "propAdapter", "prop", "events", "el", "value", "attrAdapter", "attr", "valueAdapter", "treatUndefinedAsString", "type", "dataURIRegex", "empty", "boundPath", "key", "rawKey", "signalName", "adapter", "initialValue", "rawAttribute", "aliasify", "selector", "checked", "input", "mergePaths", "inputs", "paths", "i", "hasOwn", "attribute", "mods", "error", "modifyCasing", "props", "syncSignal", "files", "signalFiles", "f", "resolve", "reader", "match", "typeMap", "option", "firstProp", "camel", "getPath", "path", "signalValue", "eventName", "DATASTAR_PROP_CHANGE_EVENT", "cleanup", "effect", "attribute", "key", "el", "mods", "rx", "modifyCasing", "classes", "callback", "observer", "k", "classNames", "cn", "name", "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", "DATASTAR_FETCH_EVENT", "tagToMs", "args", "arg", "tagHas", "tags", "tag", "defaultValue", "tagFirst", "delay", "callback", "wait", "args", "throttle", "leading", "trailing", "debounce", "lastArgs", "timer", "modifyTiming", "mods", "delayArgs", "tagToMs", "debounceArgs", "tagHas", "throttleArgs", "supportsViewTransitions", "element", "modifyViewTransition", "callback", "mods", "cb", "args", "attribute", "rx", "mods", "callback", "beginBatch", "endBatch", "modifyViewTransition", "wait", "delayArgs", "tagToMs", "delay", "attribute", "el", "value", "mods", "spaces", "filters", "jsStrToObject", "callback", "observer", "filtered", "cleanup", "effect", "attribute", "el", "key", "mods", "rx", "target", "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", "watched", "filtered", "isEmpty", "beginBatch", "endBatch", "DATASTAR_SIGNAL_PATCH_EVENT", "attribute", "el", "key", "mods", "value", "signalName", "modifyCasing", "mergePaths", "NONE", "DISPLAY", "attribute", "el", "rx", "update", "observer", "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", "cleanup", "effect", "attribute", "el", "rx", "update", "observer", "cleanup", "effect", "isValidType", "arr", "value", "PATCH_MODES", "NAMESPACES", "watcher", "ctx", "args", "selector", "mode", "namespace", "useViewTransition", "viewTransitionSelector", "elements", "patchElementsArgs", "supportsViewTransitions", "element", "el", "onPatchElements", "error", "newContent", "consume", "elementsWithSvgsRemoved", "hasHtml", "hasHead", "hasBody", "wrapperTag", "wrappedEls", "newDocument", "wrapperEl", "child", "children", "target", "applyToTargets", "targets", "targetList", "scripts", "script", "execute", "elScripts", "old", "name", "applyPatchMode", "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", "newValue", "DATASTAR_PROP_CHANGE_EVENT", "root", "elt", "watcher", "error", "signals", "onlyIfMissing", "ifMissing", "mergePatch", "jsStrToObject"]
}
