{"version":3,"file":"index.cjs","sources":["../src/components/presence.ts","../src/components/AnimatePresence.ts","../../core/src/core/errors.ts","../../core/src/interpolate/color.ts","../../core/src/interpolate/number.ts","../../core/src/interpolate/numbers.ts","../../core/src/interpolate/path.ts","../../core/src/interpolate/registry.ts","../../core/src/interpolate/units.ts","../../core/src/interpolate/transform.ts","../../core/src/interpolate/register-defaults.ts","../../core/src/core/easing.ts","../../core/src/core/omit-undefined.ts","../../core/src/core/reduced-motion.ts","../../core/src/render/properties.ts","../../core/src/api/tween.ts","../../core/src/devtools/tracker.ts","../../core/src/render/apply.ts","../../core/src/core/lazy-promise.ts","../../core/src/scheduler/frame.ts","../../core/src/scheduler/clock.ts","../../core/src/render/timing.ts","../../core/src/render/raf.ts","../../core/src/render/waapi.ts","../../core/src/render/strategy.ts","../../core/src/api/controls.ts","../../core/src/api/play.ts","../../core/src/api/layout-group.ts","../../core/src/scroll/source.ts","../../core/src/scroll/trigger.ts","../../core/src/scroll/sync.ts","../../core/src/scroll/triggered.ts","../../core/src/api/scroll.ts","../../core/src/gesture/pointer.ts","../../core/src/gesture/drag.ts","../../core/src/gesture/hover.ts","../../core/src/gesture/recognizers.ts","../../core/src/gesture/reorder.ts","../../core/src/api/gesture.ts","../../core/src/api/transition.ts","../../core/src/value/motion-value.ts","../../core/src/value/transform.ts","../../core/src/value/in-view.ts","../../core/src/value/time.ts","../../core/src/value/velocity.ts","../../core/src/value/combine.ts","../../core/src/value/event.ts","../src/components/motion-context.ts","../src/components/Motion.ts","../src/components/reorder-context.ts","../src/components/Reorder.ts","../src/composables/useAnimate.ts","../src/composables/useAnimation.ts","../src/composables/useGesture.ts","../src/composables/useKinemTransition.ts","../src/composables/useLayout.ts","../src/composables/useInView.ts","../src/composables/useMotionValue.ts","../src/composables/useMotionValueEvent.ts","../src/composables/useReducedMotion.ts","../src/composables/useScroll.ts","../src/composables/useSpring.ts","../src/composables/useTime.ts","../src/composables/useTransform.ts","../src/composables/useVelocity.ts","../src/composables/useCombine.ts"],"sourcesContent":["/**\n * Shared presence context for `<AnimatePresence>` and `<Motion>`. When a\n * child becomes \"exiting\", its nearest parent `<AnimatePresence>` flips\n * `isPresent` to false. The child is expected to play an exit animation\n * and then call `safeToRemove()` so the parent can drop the element\n * from the tree.\n *\n * Vue parity for the React `PresenceContext`. Implemented as a Vue\n * `inject` key so descendant `<Motion>` components can subscribe via\n * `inject(PresenceKey, null)`.\n */\n\nimport type { InjectionKey } from \"vue\"\n\nexport interface PresenceValue {\n  readonly isPresent: boolean\n  /** Child calls this once its exit animation has finished. */\n  safeToRemove(): void\n}\n\nexport const PresenceKey: InjectionKey<PresenceValue> = Symbol(\"kinem.presence\")\n","/**\n * `<AnimatePresence>` defers unmount of keyed default-slot children so\n * each can play an exit animation before leaving the tree. It inspects\n * the slot on every render, detects keys that vanished, and keeps those\n * VNodes mounted (wrapped in a presence provider with `isPresent: false`)\n * until the child signals `safeToRemove()`.\n *\n *   <AnimatePresence>\n *     <Motion v-if=\"show\" key=\"box\"\n *             :initial=\"{ opacity: 0 }\"\n *             :animate=\"{ opacity: 1 }\"\n *             :exit=\"{ opacity: 0 }\" />\n *   </AnimatePresence>\n *\n * Vue parity for the React `<AnimatePresence>`. Children must have an\n * explicit `key` to participate. Unkeyed nodes pass through unchanged.\n *\n * The child is responsible for calling `presence.safeToRemove()` once\n * its exit animation settles. The built-in `<Motion>` component does\n * this automatically when its `exit` prop is set.\n */\n\nimport { type VNode, cloneVNode, defineComponent, h, provide, shallowRef, watchEffect } from \"vue\"\nimport { PresenceKey, type PresenceValue } from \"./presence\"\n\ninterface TrackedChild {\n  readonly key: string\n  readonly vnode: VNode\n  readonly present: boolean\n}\n\nfunction keyedSlotVNodes(slotResult: VNode[] | undefined): Map<string, VNode> {\n  const map = new Map<string, VNode>()\n  if (!slotResult) return map\n  for (const vnode of slotResult) {\n    if (vnode == null || typeof vnode !== \"object\") continue\n    const key = vnode.key\n    if (key == null) continue\n    map.set(String(key), vnode)\n  }\n  return map\n}\n\nfunction reconcile(prev: readonly TrackedChild[], incoming: Map<string, VNode>): TrackedChild[] {\n  const prevKeys = new Set(prev.map((t) => t.key))\n  const next: TrackedChild[] = []\n  for (const t of prev) {\n    const current = incoming.get(t.key)\n    if (current) {\n      next.push({ key: t.key, vnode: current, present: true })\n    } else {\n      next.push({ key: t.key, vnode: t.vnode, present: false })\n    }\n  }\n  for (const [key, vnode] of incoming) {\n    if (!prevKeys.has(key)) {\n      next.push({ key, vnode, present: true })\n    }\n  }\n  return next\n}\n\nexport const AnimatePresence = defineComponent({\n  name: \"AnimatePresence\",\n  setup(_props, { slots }) {\n    const tracked = shallowRef<readonly TrackedChild[]>([])\n    // Per-key presence values are stable references so children that\n    // inject the presence don't re-trigger watchers when other keys\n    // mount or unmount.\n    const presenceByKey = new Map<string, PresenceValue & { _present: boolean }>()\n\n    const ensurePresence = (key: string): PresenceValue & { _present: boolean } => {\n      const existing = presenceByKey.get(key)\n      if (existing) return existing\n      const value = {\n        _present: true,\n        get isPresent(): boolean {\n          return value._present\n        },\n        safeToRemove(): void {\n          presenceByKey.delete(key)\n          tracked.value = tracked.value.filter((t) => t.key !== key)\n        },\n      }\n      presenceByKey.set(key, value)\n      return value\n    }\n\n    watchEffect(() => {\n      const slotResult = slots[\"default\"]?.()\n      const incoming = keyedSlotVNodes(slotResult)\n      const next = reconcile(tracked.value, incoming)\n      // Sync presence flags so the watcher inside <Motion> sees the change.\n      for (const t of next) {\n        const value = ensurePresence(t.key)\n        value._present = t.present\n      }\n      tracked.value = next\n    })\n\n    return () =>\n      tracked.value.map((t) => {\n        const value = ensurePresence(t.key)\n        return h(\n          // Use a small wrapper component so each tracked child gets\n          // its own provide scope without touching the host element.\n          defineComponent({\n            inheritAttrs: false,\n            setup(_p, ctx) {\n              provide(PresenceKey, value)\n              return () => ctx.slots[\"default\"]?.()\n            },\n          }),\n          { key: t.key },\n          { default: () => cloneVNode(t.vnode) },\n        )\n      })\n  },\n})\n","/**\n * Typed error class used by every user-facing throw in `@kinem/core`.\n * All messages are prefixed with `kinem:` so consumers can identify the\n * source at a glance, and an optional `hint` field carries actionable\n * guidance separately from the headline message.\n *\n *   try {\n *     play(def, \".missing\")\n *   } catch (err) {\n *     if (err instanceof KinemError) console.warn(err.hint)\n *   }\n */\nexport class KinemError extends Error {\n  /** A short, actionable suggestion. May be empty. */\n  readonly hint: string\n\n  constructor(message: string, hint = \"\") {\n    super(hint ? `kinem: ${message} - ${hint}` : `kinem: ${message}`)\n    this.name = \"KinemError\"\n    this.hint = hint\n  }\n}\n","/**\n * Color interpolation in OKLCH space.\n *\n * Parses sRGB colors (hex, rgb(), hsl()) and oklch() values, converts to\n * OKLCH for perceptually uniform interpolation, and renders back in the\n * target's original format. Hue interpolation follows the shortest arc.\n */\n\nimport { KinemError } from \"../core/errors\"\n\nexport type ColorFormat = \"hex\" | \"rgb\" | \"hsl\" | \"oklch\"\n\n/**\n * Hex color literal: `#rgb`, `#rgba`, `#rrggbb`, or `#rrggbbaa`. The\n * inner pattern is left as `${string}` (TypeScript template literals\n * cannot encode hex-digit constraints), so this catches `#anything` at\n * call sites where the literal type is preserved.\n */\nexport type HexColor = `#${string}`\nexport type RgbColor = `rgb(${string})` | `rgba(${string})`\nexport type HslColor = `hsl(${string})` | `hsla(${string})`\nexport type OklchColor = `oklch(${string})`\n\n/**\n * String values accepted by the color interpolator. Useful as a\n * parameter type for utilities that take CSS colors and want autocomplete\n * to suggest one of the supported function forms.\n */\nexport type ColorString = HexColor | RgbColor | HslColor | OklchColor\n\ninterface OklchColorValue {\n  L: number\n  C: number\n  H: number\n  alpha: number\n}\n\nexport function isColor(value: string): boolean {\n  const s = value.trim()\n  if (s.startsWith(\"#\")) return /^#[0-9a-fA-F]{3,8}$/.test(s)\n  return /^(rgb|rgba|hsl|hsla|oklch)\\s*\\(/.test(s)\n}\n\nconst srgbToLinear = (c: number): number =>\n  c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4\n\nconst linearToSrgb = (c: number): number =>\n  c <= 0.0031308 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - 0.055\n\nconst clamp01 = (x: number): number => (x < 0 ? 0 : x > 1 ? 1 : x)\n\nfunction linearSrgbToOklab(r: number, g: number, b: number): [number, number, number] {\n  const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b\n  const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b\n  const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b\n  const l_ = Math.cbrt(l)\n  const m_ = Math.cbrt(m)\n  const s_ = Math.cbrt(s)\n  return [\n    0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,\n    1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,\n    0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,\n  ]\n}\n\nfunction oklabToLinearSrgb(L: number, a: number, b: number): [number, number, number] {\n  const l_ = L + 0.3963377774 * a + 0.2158037573 * b\n  const m_ = L - 0.1055613458 * a - 0.0638541728 * b\n  const s_ = L - 0.0894841775 * a - 1.291485548 * b\n  const l = l_ ** 3\n  const m = m_ ** 3\n  const s = s_ ** 3\n  return [\n    4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n    -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n    -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n  ]\n}\n\nfunction srgbToOklch(r: number, g: number, b: number, alpha: number): OklchColorValue {\n  const [lr, lg, lb] = [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)]\n  const [L, aa, bb] = linearSrgbToOklab(lr, lg, lb)\n  const C = Math.sqrt(aa * aa + bb * bb)\n  let H = (Math.atan2(bb, aa) * 180) / Math.PI\n  if (H < 0) H += 360\n  return { L, C, H, alpha }\n}\n\nfunction oklchToSrgb(c: OklchColorValue): [number, number, number, number] {\n  const hr = (c.H * Math.PI) / 180\n  const a = c.C * Math.cos(hr)\n  const b = c.C * Math.sin(hr)\n  const [lr, lg, lb] = oklabToLinearSrgb(c.L, a, b)\n  return [clamp01(linearToSrgb(lr)), clamp01(linearToSrgb(lg)), clamp01(linearToSrgb(lb)), c.alpha]\n}\n\nfunction parseHex(input: string): [number, number, number, number] | null {\n  const m = /^#([0-9a-fA-F]{3,8})$/.exec(input.trim())\n  if (!m) return null\n  const h = m[1] ?? \"\"\n  let r: number\n  let g: number\n  let b: number\n  let a = 1\n  if (h.length === 3 || h.length === 4) {\n    r = Number.parseInt(h[0]! + h[0]!, 16)\n    g = Number.parseInt(h[1]! + h[1]!, 16)\n    b = Number.parseInt(h[2]! + h[2]!, 16)\n    if (h.length === 4) a = Number.parseInt(h[3]! + h[3]!, 16) / 255\n  } else if (h.length === 6 || h.length === 8) {\n    r = Number.parseInt(h.slice(0, 2), 16)\n    g = Number.parseInt(h.slice(2, 4), 16)\n    b = Number.parseInt(h.slice(4, 6), 16)\n    if (h.length === 8) a = Number.parseInt(h.slice(6, 8), 16) / 255\n  } else {\n    return null\n  }\n  return [r / 255, g / 255, b / 255, a]\n}\n\nfunction parseNumberOrPercent(s: string, basis = 1): number {\n  const str = s.trim()\n  if (str.endsWith(\"%\")) return (Number.parseFloat(str) / 100) * basis\n  return Number.parseFloat(str)\n}\n\nfunction splitArgs(inside: string): string[] {\n  const slash = inside.indexOf(\"/\")\n  const main = slash >= 0 ? inside.slice(0, slash) : inside\n  const alpha = slash >= 0 ? inside.slice(slash + 1) : \"\"\n  const parts = main\n    .split(/[\\s,]+/)\n    .map((s) => s.trim())\n    .filter(Boolean)\n  if (alpha.trim()) parts.push(alpha.trim())\n  return parts\n}\n\nfunction parseRgbFn(input: string): [number, number, number, number] | null {\n  const m = /^rgba?\\s*\\(([^)]*)\\)\\s*$/i.exec(input.trim())\n  if (!m) return null\n  const args = splitArgs(m[1] ?? \"\")\n  if (args.length < 3) return null\n  const r = parseNumberOrPercent(args[0] ?? \"\", 255) / 255\n  const g = parseNumberOrPercent(args[1] ?? \"\", 255) / 255\n  const b = parseNumberOrPercent(args[2] ?? \"\", 255) / 255\n  const a = args.length >= 4 ? parseNumberOrPercent(args[3] ?? \"1\", 1) : 1\n  return [r, g, b, a]\n}\n\nfunction hslToRgb(h: number, s: number, l: number): [number, number, number] {\n  const sat = s / 100\n  const light = l / 100\n  const c = (1 - Math.abs(2 * light - 1)) * sat\n  const hp = (((h % 360) + 360) % 360) / 60\n  const x = c * (1 - Math.abs((hp % 2) - 1))\n  let r = 0\n  let g = 0\n  let b = 0\n  if (hp < 1) [r, g, b] = [c, x, 0]\n  else if (hp < 2) [r, g, b] = [x, c, 0]\n  else if (hp < 3) [r, g, b] = [0, c, x]\n  else if (hp < 4) [r, g, b] = [0, x, c]\n  else if (hp < 5) [r, g, b] = [x, 0, c]\n  else [r, g, b] = [c, 0, x]\n  const m = light - c / 2\n  return [r + m, g + m, b + m]\n}\n\nfunction rgbToHsl(r: number, g: number, b: number): [number, number, number] {\n  const max = Math.max(r, g, b)\n  const min = Math.min(r, g, b)\n  const l = (max + min) / 2\n  const d = max - min\n  let h = 0\n  let s = 0\n  if (d !== 0) {\n    s = d / (1 - Math.abs(2 * l - 1))\n    if (max === r) h = ((g - b) / d) % 6\n    else if (max === g) h = (b - r) / d + 2\n    else h = (r - g) / d + 4\n    h *= 60\n    if (h < 0) h += 360\n  }\n  return [h, s * 100, l * 100]\n}\n\nfunction parseHslFn(input: string): [number, number, number, number] | null {\n  const m = /^hsla?\\s*\\(([^)]*)\\)\\s*$/i.exec(input.trim())\n  if (!m) return null\n  const args = splitArgs(m[1] ?? \"\")\n  if (args.length < 3) return null\n  const h = Number.parseFloat(args[0] ?? \"0\")\n  const s = parseNumberOrPercent(args[1] ?? \"0%\", 100)\n  const l = parseNumberOrPercent(args[2] ?? \"0%\", 100)\n  const [r, g, b] = hslToRgb(h, s, l)\n  const a = args.length >= 4 ? parseNumberOrPercent(args[3] ?? \"1\", 1) : 1\n  return [r, g, b, a]\n}\n\nfunction parseOklchFn(input: string): OklchColorValue | null {\n  const m = /^oklch\\s*\\(([^)]*)\\)\\s*$/i.exec(input.trim())\n  if (!m) return null\n  const args = splitArgs(m[1] ?? \"\")\n  if (args.length < 3) return null\n  const L = parseNumberOrPercent(args[0] ?? \"0\", 1)\n  const C = Number.parseFloat(args[1] ?? \"0\")\n  const H = Number.parseFloat(args[2] ?? \"0\")\n  const alpha = args.length >= 4 ? parseNumberOrPercent(args[3] ?? \"1\", 1) : 1\n  return { L, C, H, alpha }\n}\n\nfunction parseColor(input: string): { oklch: OklchColorValue; format: ColorFormat } {\n  const trimmed = input.trim()\n  if (trimmed.startsWith(\"#\")) {\n    const rgba = parseHex(trimmed)\n    if (!rgba)\n      throw new KinemError(\n        `interpolate: cannot parse color \"${input}\"`,\n        \"supported formats: #rrggbb / #rrggbbaa hex, rgb()/rgba(), hsl()/hsla(), oklch()\",\n      )\n    return { oklch: srgbToOklch(rgba[0], rgba[1], rgba[2], rgba[3]), format: \"hex\" }\n  }\n  const lower = trimmed.toLowerCase()\n  if (lower.startsWith(\"oklch\")) {\n    const c = parseOklchFn(trimmed)\n    if (!c)\n      throw new KinemError(\n        `interpolate: cannot parse color \"${input}\"`,\n        \"supported formats: #rrggbb / #rrggbbaa hex, rgb()/rgba(), hsl()/hsla(), oklch()\",\n      )\n    return { oklch: c, format: \"oklch\" }\n  }\n  if (lower.startsWith(\"hsl\")) {\n    const rgba = parseHslFn(trimmed)\n    if (!rgba)\n      throw new KinemError(\n        `interpolate: cannot parse color \"${input}\"`,\n        \"supported formats: #rrggbb / #rrggbbaa hex, rgb()/rgba(), hsl()/hsla(), oklch()\",\n      )\n    return { oklch: srgbToOklch(rgba[0], rgba[1], rgba[2], rgba[3]), format: \"hsl\" }\n  }\n  if (lower.startsWith(\"rgb\")) {\n    const rgba = parseRgbFn(trimmed)\n    if (!rgba)\n      throw new KinemError(\n        `interpolate: cannot parse color \"${input}\"`,\n        \"supported formats: #rrggbb / #rrggbbaa hex, rgb()/rgba(), hsl()/hsla(), oklch()\",\n      )\n    return { oklch: srgbToOklch(rgba[0], rgba[1], rgba[2], rgba[3]), format: \"rgb\" }\n  }\n  throw new KinemError(\n    `interpolate: cannot parse color \"${input}\"`,\n    \"supported formats: #rrggbb / #rrggbbaa hex, rgb()/rgba(), hsl()/hsla(), oklch()\",\n  )\n}\n\nconst toByte = (c: number): number => Math.round(clamp01(c) * 255)\nconst hex2 = (n: number): string => n.toString(16).padStart(2, \"0\")\n\nfunction formatColor(c: OklchColorValue, format: ColorFormat): string {\n  if (format === \"oklch\") {\n    const L = +c.L.toFixed(4)\n    const C = +c.C.toFixed(4)\n    const H = +(((c.H % 360) + 360) % 360).toFixed(2)\n    if (c.alpha >= 1) return `oklch(${L} ${C} ${H})`\n    return `oklch(${L} ${C} ${H} / ${+c.alpha.toFixed(3)})`\n  }\n  const [r, g, b, a] = oklchToSrgb(c)\n  if (format === \"hex\") {\n    const base = `#${hex2(toByte(r))}${hex2(toByte(g))}${hex2(toByte(b))}`\n    return a >= 1 ? base : `${base}${hex2(toByte(a))}`\n  }\n  if (format === \"hsl\") {\n    const [h, s, l] = rgbToHsl(clamp01(r), clamp01(g), clamp01(b))\n    const H = +h.toFixed(2)\n    const S = +s.toFixed(2)\n    const L = +l.toFixed(2)\n    return a >= 1 ? `hsl(${H} ${S}% ${L}%)` : `hsl(${H} ${S}% ${L}% / ${+a.toFixed(3)})`\n  }\n  const R = toByte(r)\n  const G = toByte(g)\n  const B = toByte(b)\n  return a >= 1 ? `rgb(${R} ${G} ${B})` : `rgb(${R} ${G} ${B} / ${+a.toFixed(3)})`\n}\n\nconst shortestHueDelta = (from: number, to: number): number => {\n  let d = to - from\n  while (d > 180) d -= 360\n  while (d < -180) d += 360\n  return d\n}\n\n/**\n * Interpolate between two color strings. Parses both sides, converts to\n * OKLCH, linearly interpolates L, C, and alpha, interpolates H via the\n * shortest arc, then renders in the format of `to`.\n */\nexport function interpolateColor(from: string, to: string): (progress: number) => string {\n  const a = parseColor(from).oklch\n  const { oklch: b, format } = parseColor(to)\n  const dL = b.L - a.L\n  const dC = b.C - a.C\n  const dH = shortestHueDelta(a.H, b.H)\n  const dA = b.alpha - a.alpha\n\n  return (p) => {\n    const mixed: OklchColorValue = {\n      L: a.L + dL * p,\n      C: a.C + dC * p,\n      H: a.H + dH * p,\n      alpha: a.alpha + dA * p,\n    }\n    return formatColor(mixed, format)\n  }\n}\n","/**\n * Linear numeric interpolation. Returns a function that, given progress\n * in [0, 1], linearly blends between `from` and `to`.\n *\n * Values outside [0, 1] extrapolate. Clamping, if desired, is applied by\n * callers (typically the animation combinators clamp before dispatching).\n */\nexport function interpolateNumber(from: number, to: number): (progress: number) => number {\n  const delta = to - from\n  return (p) => from + delta * p\n}\n","/**\n * Component-wise linear interpolation for fixed-length numeric arrays.\n * Used for GLSL-style vectors (vec2/vec3/vec4) and flat matrices (mat4).\n *\n * The source and target must have the same length. Output is a fresh\n * array per frame (the caller may copy it into a typed array if needed).\n */\n\nimport { KinemError } from \"../core/errors\"\n\nexport function interpolateNumbers(\n  from: readonly number[],\n  to: readonly number[],\n): (progress: number) => number[] {\n  if (from.length !== to.length) {\n    throw new KinemError(\n      `interpolateNumbers(): length mismatch (${from.length} vs ${to.length})`,\n      \"from and to must have the same length (e.g. both vec3 or both mat4)\",\n    )\n  }\n  const n = from.length\n  const deltas = new Array<number>(n)\n  for (let i = 0; i < n; i++) deltas[i] = (to[i] as number) - (from[i] as number)\n  return (p) => {\n    const out = new Array<number>(n)\n    for (let i = 0; i < n; i++) out[i] = (from[i] as number) + (deltas[i] as number) * p\n    return out\n  }\n}\n","/**\n * SVG path interpolation.\n *\n * Parses path `d` strings into a normalized list of commands (each with a\n * type letter and its numeric parameters), then interpolates the params\n * pairwise when the structure matches. Paths with differing command\n * sequences throw; Flubber-style point insertion for structural mismatches\n * will be added in a later pass.\n */\n\nimport { KinemError } from \"../core/errors\"\n\nexport interface PathCommand {\n  readonly type: string\n  readonly params: readonly number[]\n}\n\nconst PARAMS_PER: Record<string, number> = {\n  M: 2,\n  L: 2,\n  H: 1,\n  V: 1,\n  C: 6,\n  S: 4,\n  Q: 4,\n  T: 2,\n  A: 7,\n  Z: 0,\n}\n\nconst CMD_RE = /([MLHVCSQTAZ])([^MLHVCSQTAZ]*)/gi\n\nexport function parsePath(input: string): readonly PathCommand[] {\n  const out: PathCommand[] = []\n  const str = input.trim()\n  if (str === \"\") return out\n  let m: RegExpExecArray | null\n  CMD_RE.lastIndex = 0\n  // biome-ignore lint/suspicious/noAssignInExpressions: regex exec loop idiom\n  while ((m = CMD_RE.exec(str)) !== null) {\n    const type = (m[1] ?? \"\") as keyof typeof PARAMS_PER\n    const body = (m[2] ?? \"\").trim()\n    const paramsPer = PARAMS_PER[type.toUpperCase()] ?? 0\n\n    if (paramsPer === 0) {\n      out.push({ type, params: [] })\n      continue\n    }\n\n    const nums = body\n      .split(/[\\s,]+/)\n      .filter((s) => s.length > 0)\n      .map((s) => Number.parseFloat(s))\n\n    if (nums.some(Number.isNaN)) {\n      throw new KinemError(\n        `interpolate: invalid numeric parameter in path command \"${type}${body}\"`,\n      )\n    }\n\n    if (nums.length % paramsPer !== 0) {\n      throw new KinemError(\n        `interpolate: \"${type}\" expects multiples of ${paramsPer} parameters, got ${nums.length}`,\n      )\n    }\n\n    // Implicit repeats: an M followed by extra coord pairs is treated as M then L...\n    // We preserve the explicit command letter for the first group and repeat the\n    // same letter for subsequent groups (this matches parser output for comparison).\n    for (let i = 0; i < nums.length; i += paramsPer) {\n      out.push({ type, params: nums.slice(i, i + paramsPer) })\n    }\n  }\n  return out\n}\n\nexport function stringifyPath(cmds: readonly PathCommand[]): string {\n  const parts: string[] = []\n  for (const c of cmds) {\n    if (c.params.length === 0) parts.push(c.type)\n    else parts.push(`${c.type}${c.params.map((n) => +n.toFixed(4)).join(\" \")}`)\n  }\n  return parts.join(\" \")\n}\n\nexport function interpolatePath(from: string, to: string): (progress: number) => string {\n  const a = parsePath(from)\n  const b = parsePath(to)\n  if (a.length !== b.length) {\n    throw new KinemError(\n      `interpolate: path structure mismatch: ${a.length} command(s) vs ${b.length} command(s)`,\n      \"from and to must contain the same number of path commands\",\n    )\n  }\n\n  const template: PathCommand[] = new Array(a.length)\n  const deltas: number[][] = new Array(a.length)\n  for (let i = 0; i < a.length; i++) {\n    const ca = a[i] as PathCommand\n    const cb = b[i] as PathCommand\n    if (ca.type !== cb.type) {\n      throw new KinemError(\n        `interpolate: path command mismatch at index ${i}: \"${ca.type}\" vs \"${cb.type}\"`,\n        \"from and to must contain the same path commands in the same order\",\n      )\n    }\n    if (ca.params.length !== cb.params.length) {\n      throw new KinemError(\n        `interpolate: path command \"${ca.type}\" param count mismatch at index ${i}`,\n      )\n    }\n\n    const d = new Array<number>(ca.params.length)\n    for (let j = 0; j < ca.params.length; j++) {\n      d[j] = (cb.params[j] ?? 0) - (ca.params[j] ?? 0)\n    }\n    template[i] = ca\n    deltas[i] = d\n  }\n\n  return (p) => {\n    const out: PathCommand[] = new Array(template.length)\n    for (let i = 0; i < template.length; i++) {\n      const t = template[i] as PathCommand\n      const d = deltas[i] as number[]\n      const params = new Array<number>(t.params.length)\n      for (let j = 0; j < t.params.length; j++) {\n        params[j] = (t.params[j] ?? 0) + (d[j] ?? 0) * p\n      }\n      out[i] = { type: t.type, params }\n    }\n    return stringifyPath(out)\n  }\n}\n","/**\n * Interpolation registry.\n *\n * Given a pair of values, dispatches to the appropriate interpolator\n * based on the shape of the source value. The registry itself is empty\n * at module load. Built-in interpolators (number, numbers, color,\n * transform, path, CSS units) are registered by `register-defaults.ts`,\n * which the main `index.ts` imports for its side effect. Bundles that\n * do not import `register-defaults` (notably the `slim` entry) can\n * tree-shake the associated interpolator modules.\n *\n * User-registered entries take precedence over built-ins, so custom\n * rules override the defaults.\n */\n\nimport { KinemError } from \"../core/errors\"\n\nexport type ValueInterpolator<T> = (from: T, to: T) => (progress: number) => T\n\nexport interface InterpolatorEntry {\n  readonly name: string\n  readonly test: (value: unknown) => boolean\n  readonly interpolate: ValueInterpolator<unknown>\n}\n\nconst registry: InterpolatorEntry[] = []\n\n/**\n * Register a custom interpolator. Newly registered entries take\n * precedence over any already registered, including built-ins.\n *\n * The `priority` parameter is for internal use: `register-defaults.ts`\n * appends built-ins as low-priority entries so user registrations\n * continue to override them.\n */\nexport function registerInterpolator(\n  entry: InterpolatorEntry,\n  priority: \"high\" | \"low\" = \"high\",\n): void {\n  if (priority === \"low\") registry.push(entry)\n  else registry.unshift(entry)\n}\n\n/**\n * Find the interpolator whose predicate matches `value`. Returns `null`\n * if no entry applies.\n */\nexport function findInterpolator(value: unknown): InterpolatorEntry | null {\n  for (const entry of registry) {\n    if (entry.test(value)) return entry\n  }\n  return null\n}\n\n/**\n * Dispatch-aware interpolation between two values. The source value\n * determines which interpolator is used; the target value is expected to\n * be the same kind.\n *\n * Returns the registered interpolator's output directly, cast to the\n * caller's T. Wrapping it in `(p) => fn(p) as T` would be a pure trampoline\n * (the cast is compile-time only), adding one function call per property\n * interpolation per frame.\n *\n * Overloads narrow the return type by primitive shape so that\n * `interpolate(0, 100)` is typed `(p: number) => number`,\n * `interpolate(\"red\", \"blue\")` as `(p: number) => string`, etc. The\n * generic fallback covers user-registered interpolators of arbitrary\n * shape. `NoInfer<T>` on the `to` parameter prevents the second\n * argument from widening the inferred type of the first (so a literal\n * `0` from-value isn't widened to `number` just because `to` is wider).\n */\nexport function interpolate(from: number, to: NoInfer<number>): (progress: number) => number\nexport function interpolate(from: string, to: NoInfer<string>): (progress: number) => string\nexport function interpolate(\n  from: readonly number[],\n  to: NoInfer<readonly number[]>,\n): (progress: number) => number[]\nexport function interpolate<T>(from: T, to: NoInfer<T>): (progress: number) => T\nexport function interpolate<T>(from: T, to: NoInfer<T>): (progress: number) => T {\n  const entry = findInterpolator(from)\n  if (!entry) {\n    throw new KinemError(\n      `interpolate(): no interpolator registered for value of type ${typeof from}: ${String(from)}`,\n      \"register a custom interpolator with registerInterpolator() or use a supported value type\",\n    )\n  }\n  return entry.interpolate(from as unknown, to as unknown) as (p: number) => T\n}\n","import { KinemError } from \"../core/errors\"\n\nexport interface UnitValue {\n  readonly value: number\n  readonly unit: string\n}\n\nconst UNIT_RE = /^\\s*([+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?)\\s*([a-zA-Z%]*)\\s*$/\n\n/**\n * Parse a CSS length-like string (\"100px\", \"-1.5rem\", \"50%\", \"0\").\n * Returns `null` if the string does not match a single number+unit pattern.\n */\nexport function parseUnit(input: string): UnitValue | null {\n  const m = UNIT_RE.exec(input)\n  if (!m) return null\n  const n = Number.parseFloat(m[1] ?? \"\")\n  if (Number.isNaN(n)) return null\n  return { value: n, unit: m[2] ?? \"\" }\n}\n\nexport class UnitMismatchError extends Error {\n  readonly fromUnit: string\n  readonly toUnit: string\n  constructor(fromUnit: string, toUnit: string) {\n    super(`Cannot interpolate between units \"${fromUnit}\" and \"${toUnit}\" without DOM context`)\n    this.name = \"UnitMismatchError\"\n    this.fromUnit = fromUnit\n    this.toUnit = toUnit\n  }\n}\n\n/**\n * Unit-aware interpolation. Matching units interpolate numerically;\n * a zero-valued unitless side adopts the other's unit (e.g. `\"0\"` and\n * `\"100px\"` interpolate as `px`). Mismatched units throw\n * `UnitMismatchError`; the rendering layer is expected to catch these\n * and resolve via DOM measurement.\n */\nexport function interpolateUnit(from: string, to: string): (progress: number) => string {\n  const a = parseUnit(from)\n  const b = parseUnit(to)\n  if (!a || !b) {\n    throw new KinemError(\n      `interpolateUnit(): cannot parse unit value (from=\"${from}\" to=\"${to}\")`,\n      'expected a number with optional CSS unit, e.g. \"100px\", \"1.5rem\", \"50%\"',\n    )\n  }\n\n  let unit: string\n  if (a.unit === b.unit) {\n    unit = a.unit\n  } else if (a.unit === \"\" && a.value === 0) {\n    unit = b.unit\n  } else if (b.unit === \"\" && b.value === 0) {\n    unit = a.unit\n  } else {\n    throw new UnitMismatchError(a.unit, b.unit)\n  }\n\n  const delta = b.value - a.value\n  return (p) => `${a.value + delta * p}${unit}`\n}\n","/**\n * CSS transform interpolation.\n *\n * Parses a `transform` string into an ordered list of function calls, then\n * interpolates each function's arguments independently. Rotations use the\n * shortest-arc direction.\n *\n * The from/to strings must share the same function structure (same\n * functions in the same order). Mismatched structure throws; mixing\n * different transform expressions will be handled in a later pass by\n * normalizing into a 4x4 matrix.\n */\n\nimport { KinemError } from \"../core/errors\"\nimport { interpolateNumber } from \"./number\"\nimport { interpolateUnit, parseUnit } from \"./units\"\n\ninterface TransformFn {\n  readonly name: string\n  readonly args: readonly string[]\n}\n\nconst FN_RE = /([a-zA-Z0-9]+)\\s*\\(([^)]*)\\)/g\n\nexport function parseTransform(input: string): readonly TransformFn[] {\n  const out: TransformFn[] = []\n  const str = input.trim()\n  if (str === \"\" || str === \"none\") return out\n  let m: RegExpExecArray | null\n  FN_RE.lastIndex = 0\n  // biome-ignore lint/suspicious/noAssignInExpressions: regex exec loop idiom\n  while ((m = FN_RE.exec(str)) !== null) {\n    const name = (m[1] ?? \"\").toLowerCase()\n    const args = (m[2] ?? \"\")\n      .split(\",\")\n      .map((a) => a.trim())\n      .filter((a) => a.length > 0)\n    out.push({ name, args })\n  }\n  return out\n}\n\nconst ANGLE_UNITS = new Set([\"deg\", \"rad\", \"turn\", \"grad\"])\n\nconst toDeg = (value: number, unit: string): number => {\n  if (unit === \"\" || unit === \"deg\") return value\n  if (unit === \"rad\") return (value * 180) / Math.PI\n  if (unit === \"turn\") return value * 360\n  if (unit === \"grad\") return value * 0.9\n  return value\n}\n\nconst fromDeg = (deg: number, unit: string): number => {\n  if (unit === \"\" || unit === \"deg\") return deg\n  if (unit === \"rad\") return (deg * Math.PI) / 180\n  if (unit === \"turn\") return deg / 360\n  if (unit === \"grad\") return deg / 0.9\n  return deg\n}\n\nconst shortestAngleDelta = (fromDegVal: number, toDegVal: number): number => {\n  let d = toDegVal - fromDegVal\n  while (d > 180) d -= 360\n  while (d < -180) d += 360\n  return d\n}\n\nfunction interpolateAngleArg(from: string, to: string): (progress: number) => string {\n  const a = parseUnit(from)\n  const b = parseUnit(to)\n  if (!a || !b)\n    throw new KinemError(\n      `interpolate: cannot parse angle args \"${from}\", \"${to}\"`,\n      \"use a number with an angle unit (deg, rad, turn, grad)\",\n    )\n  const outUnit = b.unit || a.unit || \"deg\"\n  if (!ANGLE_UNITS.has(outUnit))\n    throw new KinemError(\n      `interpolate: unsupported angle unit \"${outUnit}\"`,\n      \"use deg, rad, turn, or grad\",\n    )\n  const fromDegVal = toDeg(a.value, a.unit)\n  const toDegVal = toDeg(b.value, b.unit)\n  const delta = shortestAngleDelta(fromDegVal, toDegVal)\n  return (p) => {\n    const deg = fromDegVal + delta * p\n    const v = fromDeg(deg, outUnit)\n    return `${v}${outUnit}`\n  }\n}\n\nfunction interpolateFnArg(fn: string, from: string, to: string): (progress: number) => string {\n  if (fn.startsWith(\"rotate\") || fn.startsWith(\"skew\")) {\n    return interpolateAngleArg(from, to)\n  }\n  if (fn.startsWith(\"scale\") || fn === \"perspective\") {\n    const a = Number.parseFloat(from)\n    const b = Number.parseFloat(to)\n    if (Number.isNaN(a) || Number.isNaN(b)) {\n      throw new KinemError(`interpolate: cannot parse ${fn} arg \"${from}\", \"${to}\"`)\n    }\n    const interp = interpolateNumber(a, b)\n    const unit = fn === \"perspective\" ? \"px\" : \"\"\n    return (p) => `${interp(p)}${unit}`\n  }\n  if (fn.startsWith(\"translate\")) {\n    return interpolateUnit(from, to)\n  }\n  // Fallback: unitless number\n  const a = Number.parseFloat(from)\n  const b = Number.parseFloat(to)\n  if (!Number.isNaN(a) && !Number.isNaN(b)) {\n    const interp = interpolateNumber(a, b)\n    return (p) => `${interp(p)}`\n  }\n  throw new KinemError(\n    `interpolate: unsupported transform function \"${fn}\" with args \"${from}\" / \"${to}\"`,\n  )\n}\n\nexport function interpolateTransform(from: string, to: string): (progress: number) => string {\n  const fromFns = parseTransform(from)\n  const toFns = parseTransform(to)\n  if (fromFns.length !== toFns.length) {\n    throw new KinemError(\n      `interpolate: transform structure mismatch: \"${from}\" (${fromFns.length} fns) vs \"${to}\" (${toFns.length} fns)`,\n      \"from and to must contain the same transform functions in the same order\",\n    )\n  }\n  const pairs: Array<{ name: string; argFns: Array<(p: number) => string> }> = []\n  for (let i = 0; i < fromFns.length; i++) {\n    const a = fromFns[i] as TransformFn\n    const b = toFns[i] as TransformFn\n    if (a.name !== b.name) {\n      throw new KinemError(\n        `interpolate: transform function mismatch at index ${i}: ${a.name} vs ${b.name}`,\n        \"from and to must contain the same transform functions in the same order\",\n      )\n    }\n    if (a.args.length !== b.args.length) {\n      throw new KinemError(\n        `interpolate: ${a.name}() arg count mismatch: ${a.args.length} vs ${b.args.length}`,\n      )\n    }\n    const argFns: Array<(p: number) => string> = []\n    for (let j = 0; j < a.args.length; j++) {\n      argFns.push(interpolateFnArg(a.name, a.args[j] ?? \"\", b.args[j] ?? \"\"))\n    }\n    pairs.push({ name: a.name, argFns })\n  }\n\n  return (p) => {\n    const parts: string[] = []\n    for (const { name, argFns } of pairs) {\n      const rendered = argFns.map((fn) => fn(p)).join(\", \")\n      parts.push(`${name}(${rendered})`)\n    }\n    return parts.join(\" \")\n  }\n}\n","/**\n * Registers the built-in interpolators (number, numbers, color,\n * transform, path, CSS units) with the dispatch registry at module\n * load. The main `index.ts` imports this file for its side effect,\n * preserving the default behavior where `tween()`/`keyframes()` handle\n * any common CSS value type out of the box.\n *\n * Kept separate from `registry.ts` so bundles that do not import this\n * module (notably `@kinem/core/slim`) can tree-shake the built-in\n * interpolator code.\n *\n * All built-ins are registered at low priority; user-registered entries\n * remain first-priority.\n */\n\nimport { interpolateColor, isColor } from \"./color\"\nimport { interpolateNumber } from \"./number\"\nimport { interpolateNumbers } from \"./numbers\"\nimport { interpolatePath } from \"./path\"\nimport { registerInterpolator } from \"./registry\"\nimport { interpolateTransform } from \"./transform\"\nimport { interpolateUnit, parseUnit } from \"./units\"\n\nconst isNumber = (value: unknown): value is number =>\n  typeof value === \"number\" && Number.isFinite(value)\n\nconst isNumberArray = (value: unknown): value is readonly number[] => {\n  if (!Array.isArray(value) || value.length === 0) return false\n  for (let i = 0; i < value.length; i++) {\n    const v = value[i]\n    if (typeof v !== \"number\" || !Number.isFinite(v)) return false\n  }\n  return true\n}\n\nconst isTransformString = (value: unknown): value is string => {\n  if (typeof value !== \"string\") return false\n  return /^(none|\\s*[a-zA-Z]+\\s*\\()/.test(value.trim())\n}\n\nconst PATH_RE = /^\\s*[MmLlHhVvCcSsQqTtAaZz][\\s\\d+\\-,.eE]/\n\nconst isPathString = (value: unknown): value is string => {\n  if (typeof value !== \"string\") return false\n  return PATH_RE.test(value)\n}\n\nconst isUnitString = (value: unknown): value is string =>\n  typeof value === \"string\" && parseUnit(value) !== null\n\nregisterInterpolator(\n  {\n    name: \"number\",\n    test: isNumber,\n    interpolate: (from, to) => {\n      const fn = interpolateNumber(from as number, to as number)\n      return (p) => fn(p)\n    },\n  },\n  \"low\",\n)\n\nregisterInterpolator(\n  {\n    name: \"numbers\",\n    test: isNumberArray,\n    interpolate: (from, to) => {\n      const fn = interpolateNumbers(from as readonly number[], to as readonly number[])\n      return (p) => fn(p)\n    },\n  },\n  \"low\",\n)\n\nregisterInterpolator(\n  {\n    name: \"color\",\n    test: (v) => typeof v === \"string\" && isColor(v),\n    interpolate: (from, to) => {\n      const fn = interpolateColor(from as string, to as string)\n      return (p) => fn(p)\n    },\n  },\n  \"low\",\n)\n\nregisterInterpolator(\n  {\n    name: \"transform\",\n    test: isTransformString,\n    interpolate: (from, to) => {\n      const fn = interpolateTransform(from as string, to as string)\n      return (p) => fn(p)\n    },\n  },\n  \"low\",\n)\n\nregisterInterpolator(\n  {\n    name: \"path\",\n    test: isPathString,\n    interpolate: (from, to) => {\n      const fn = interpolatePath(from as string, to as string)\n      return (p) => fn(p)\n    },\n  },\n  \"low\",\n)\n\nregisterInterpolator(\n  {\n    name: \"unit\",\n    test: isUnitString,\n    interpolate: (from, to) => {\n      const fn = interpolateUnit(from as string, to as string)\n      return (p) => fn(p)\n    },\n  },\n  \"low\",\n)\n","import type { EasingFn, NormalizedVelocity, SpringEasingFn } from \"./types\"\n\nexport type { SpringEasingFn } from \"./types\"\n\n/**\n * Per-easing CSS timing-function string. The WAAPI renderer consults this\n * via `getCssEasing()` to decide whether to emit a 2-keyframe animation\n * with native CSS timing, versus densely sampling the easing into many\n * keyframes. Built-in CSS-exact easings (`linear`, `cubicBezier(...)`)\n * are tagged here; user-defined easings are not, so they stay on the\n * sampled path.\n */\nconst cssEasingMap = new WeakMap<EasingFn, string>()\n\n/** @internal Tag a CSS-exact easing so the WAAPI backend can skip sampling. */\nexport function setCssEasing(fn: EasingFn, css: string): void {\n  cssEasingMap.set(fn, css)\n}\n\n/** @internal Returns the CSS timing-function string for a tagged easing, or undefined. */\nexport function getCssEasing(fn: EasingFn): string | undefined {\n  return cssEasingMap.get(fn)\n}\n\nexport const linear: EasingFn = (p) => p\nsetCssEasing(linear, \"linear\")\n\nexport const easeIn: EasingFn = (p) => p * p\nexport const easeOut: EasingFn = (p) => 1 - (1 - p) * (1 - p)\nexport const easeInOut: EasingFn = (p) => (p < 0.5 ? 2 * p * p : 1 - (-2 * p + 2) ** 2 / 2)\n\n/**\n * CSS cubic-bezier easing. Uses Newton-Raphson to invert x(t) = x, then\n * returns y(t). Matches the algorithm used by browsers for CSS transitions.\n */\nexport function cubicBezier(x1: number, y1: number, x2: number, y2: number): EasingFn {\n  const ax = 3 * x1 - 3 * x2 + 1\n  const bx = 3 * x2 - 6 * x1\n  const cx = 3 * x1\n\n  const ay = 3 * y1 - 3 * y2 + 1\n  const by = 3 * y2 - 6 * y1\n  const cy = 3 * y1\n\n  const sampleX = (t: number) => ((ax * t + bx) * t + cx) * t\n  const sampleY = (t: number) => ((ay * t + by) * t + cy) * t\n  const sampleDerivX = (t: number) => (3 * ax * t + 2 * bx) * t + cx\n\n  const SAMPLES = 11\n  const STEP = 1 / (SAMPLES - 1)\n  const table = new Float64Array(SAMPLES)\n  for (let i = 0; i < SAMPLES; i++) table[i] = sampleX(i * STEP)\n\n  const solve = (x: number): number => {\n    if (x <= 0) return 0\n    if (x >= 1) return 1\n\n    let i = 1\n    while (i < SAMPLES - 1 && (table[i] ?? 0) < x) i++\n    const prev = table[i - 1] ?? 0\n    const curr = table[i] ?? 1\n    const guessT = (i - 1 + (x - prev) / (curr - prev)) * STEP\n\n    let t = guessT\n    for (let j = 0; j < 8; j++) {\n      const d = sampleDerivX(t)\n      if (d === 0) break\n      const xt = sampleX(t) - x\n      t -= xt / d\n    }\n    return t\n  }\n\n  const fn: EasingFn = (p) => {\n    if (p <= 0) return 0\n    if (p >= 1) return 1\n    return sampleY(solve(p))\n  }\n  setCssEasing(fn, `cubic-bezier(${x1}, ${y1}, ${x2}, ${y2})`)\n  return fn\n}\n\nexport type StepPosition = \"start\" | \"end\" | \"jump-none\" | \"jump-both\"\n\n/**\n * CSS steps() easing. n must be >= 1. Position matches CSS semantics:\n *   - \"end\" (default): steps on the trailing edge\n *   - \"start\": steps on the leading edge\n *   - \"jump-none\": n - 1 jumps, start at 0 and end at 1\n *   - \"jump-both\": n + 1 jumps, start above 0 and end below 1\n */\nexport function steps(n: number, position: StepPosition = \"end\"): EasingFn {\n  if (n < 1) throw new RangeError(\"steps(n): n must be >= 1\")\n  return (p) => {\n    if (p <= 0) return position === \"start\" || position === \"jump-both\" ? 1 / n : 0\n    if (p >= 1) return position === \"end\" || position === \"jump-both\" ? 1 - 1 / n : 1\n\n    switch (position) {\n      case \"start\":\n        return Math.min(1, (Math.floor(p * n) + 1) / n)\n      case \"end\":\n        return Math.floor(p * n) / n\n      case \"jump-none\":\n        return n === 1 ? 0 : Math.floor(p * n) / (n - 1)\n      case \"jump-both\":\n        return (Math.floor(p * n) + 1) / (n + 1)\n    }\n  }\n}\n\nexport interface SpringOpts {\n  readonly stiffness?: number\n  readonly damping?: number\n  readonly mass?: number\n  /**\n   * Initial velocity in normalized [0, 1]/sec units of travel (NOT\n   * raw rad/s or px/s). Mint with `normalizedVelocity()` or\n   * `velocityFromSpan(real, span)`.\n   */\n  readonly velocity?: NormalizedVelocity\n  readonly restVelocity?: number\n  readonly restDisplacement?: number\n  readonly maxDuration?: number\n}\n\n/**\n * Brand a number as a normalized spring velocity. Use when you've\n * already done the real-world -> normalized conversion yourself; for\n * the conversion itself, see `velocityFromSpan()`.\n */\nexport const normalizedVelocity = (v: number): NormalizedVelocity => v as NormalizedVelocity\n\n/**\n * Convert a real-world velocity (rad/s, px/s, etc.) into the\n * normalized [0, 1]/sec velocity that `spring()` expects, given the\n * total span the spring travels (1 rad, 100 px, etc.). Equivalent to\n * `realVelocity / span`.\n */\nexport const velocityFromSpan = (realVelocity: number, span: number): NormalizedVelocity =>\n  (span === 0 ? 0 : realVelocity / span) as NormalizedVelocity\n\nconst SPRING_KIND_TAG = \"__kinem_spring__\"\n\n/**\n * True if `fn` was produced by `springEasing()`. Narrows to\n * `SpringEasingFn`, exposing the `.duration` field. Uses a brand tag\n * rather than property-sniffing so user easings that happen to expose\n * a `duration` are not mis-identified.\n */\nexport const isSpringEasing = (fn: EasingFn): fn is SpringEasingFn =>\n  (fn as { [SPRING_KIND_TAG]?: true })[SPRING_KIND_TAG] === true\n\nconst DEFAULT_SPRING: Required<SpringOpts> = {\n  stiffness: 170,\n  damping: 26,\n  mass: 1,\n  velocity: 0 as NormalizedVelocity,\n  restVelocity: 0.001,\n  restDisplacement: 0.001,\n  maxDuration: 10_000,\n}\n\n/**\n * Spring physics easing. Simulates m*x'' + c*x' + k*(x - 1) = 0 with RK4\n * integration, starting from x = 0 and running until velocity and\n * displacement stay within rest thresholds. The resulting trajectory is\n * stored as a lookup table; the returned easing function maps progress\n * [0, 1] to position along that trajectory.\n *\n * The computed settling time is attached as `.duration` (ms).\n */\nexport function springEasing(opts: SpringOpts = {}): SpringEasingFn {\n  const { stiffness, damping, mass, velocity, restVelocity, restDisplacement, maxDuration } = {\n    ...DEFAULT_SPRING,\n    ...opts,\n  }\n  const dt = 1 / 60\n  const dtMs = dt * 1000\n  const maxSteps = Math.ceil(maxDuration / dtMs)\n\n  const accel = (x: number, v: number) => (-stiffness * (x - 1) - damping * v) / mass\n\n  const samples: number[] = [0]\n  let x = 0\n  let v: number = velocity\n  let restCount = 0\n  const REST_FRAMES = 4\n\n  for (let step = 0; step < maxSteps; step++) {\n    const k1x = v\n    const k1v = accel(x, v)\n    const k2x = v + (dt / 2) * k1v\n    const k2v = accel(x + (dt / 2) * k1x, v + (dt / 2) * k1v)\n    const k3x = v + (dt / 2) * k2v\n    const k3v = accel(x + (dt / 2) * k2x, v + (dt / 2) * k2v)\n    const k4x = v + dt * k3v\n    const k4v = accel(x + dt * k3x, v + dt * k3v)\n\n    x += (dt / 6) * (k1x + 2 * k2x + 2 * k3x + k4x)\n    v += (dt / 6) * (k1v + 2 * k2v + 2 * k3v + k4v)\n\n    samples.push(x)\n\n    if (Math.abs(v) < restVelocity && Math.abs(x - 1) < restDisplacement) {\n      restCount++\n      if (restCount >= REST_FRAMES) break\n    } else {\n      restCount = 0\n    }\n  }\n\n  const lastIdx = samples.length - 1\n  samples[lastIdx] = 1\n  const duration = lastIdx * dtMs\n\n  const fn = ((p: number): number => {\n    if (p <= 0) return 0\n    if (p >= 1) return 1\n    const exact = p * lastIdx\n    const i = Math.floor(exact)\n    const frac = exact - i\n    const a = samples[i] ?? 0\n    const b = samples[i + 1] ?? 1\n    return a + (b - a) * frac\n  }) as SpringEasingFn\n  Object.defineProperty(fn, \"duration\", { value: duration, enumerable: true })\n  Object.defineProperty(fn, SPRING_KIND_TAG, { value: true })\n  return fn\n}\n","/**\n * Builds a new object containing only the entries whose values are not\n * `undefined`. Exists because `exactOptionalPropertyTypes: true` rejects\n * `{ key: undefined }` when the target type declares `key?: T`. Without\n * this helper, callers end up writing\n *\n *   { ...(opts.easing !== undefined ? { easing: opts.easing } : {}) }\n *\n * for every optional field they want to forward, which is noisy and\n * easy to get wrong (forgetting one field silently passes `undefined`\n * down the chain).\n *\n * Returns a partial of the input keyset; keys whose values were\n * `undefined` are absent from the result rather than present-and-undefined.\n *\n *   omitUndefined({ duration: 300, easing: undefined })\n *   // -> { duration: 300 }\n */\nexport function omitUndefined<T extends object>(\n  input: T,\n): { [K in keyof T]?: Exclude<T[K], undefined> } {\n  const out: Partial<T> = {}\n  for (const key in input) {\n    const value = input[key]\n    if (value !== undefined) {\n      out[key] = value\n    }\n  }\n  return out as { [K in keyof T]?: Exclude<T[K], undefined> }\n}\n","/**\n * Honour `prefers-reduced-motion`. When the user's OS-level pref says\n * \"reduce\", consumers can opt their animations into snap-to-end\n * behaviour: the final value is committed immediately, no rAF or WAAPI\n * setup happens, and `finished` resolves on the next microtask.\n *\n * The library default is `\"never\"` — `play()` does not consult the pref\n * unless the consumer asks. This matches motion / framer-motion: a\n * library can't know which animations are decorative vs functional, so\n * the consumer has to opt in, either per-call or by setting a global\n * default via `setReducedMotionDefault()`.\n *\n * Use `\"user\"` to delegate to the OS pref; this is the interesting\n * value, and the one that should be set globally in apps that care.\n */\n\nexport type ReducedMotion =\n  /** Always snap to end. Useful for testing the reduced path. */\n  | \"always\"\n  /** Never snap. Run animations as authored. The library default. */\n  | \"never\"\n  /** Snap iff `(prefers-reduced-motion: reduce)` matches. */\n  | \"user\"\n\nlet globalDefault: ReducedMotion = \"never\"\n\n/**\n * Set the process-wide default for `reducedMotion` on `play()` /\n * `timeline().play()`. Per-call options still win over the default.\n *\n * Typical app usage at startup:\n *\n * ```ts\n * setReducedMotionDefault(\"user\")\n * ```\n */\nexport function setReducedMotionDefault(mode: ReducedMotion): void {\n  globalDefault = mode\n}\n\nexport function getReducedMotionDefault(): ReducedMotion {\n  return globalDefault\n}\n\n/**\n * True when the OS-level `prefers-reduced-motion: reduce` pref is set.\n * Returns `false` outside a browser environment.\n */\nexport function prefersReducedMotion(): boolean {\n  if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n    return false\n  }\n  return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n}\n\n/**\n * Resolve a `ReducedMotion` setting to a boolean snap decision. `mode`\n * defaults to whatever was set via `setReducedMotionDefault`.\n */\nexport function shouldReduceMotion(mode?: ReducedMotion): boolean {\n  const m = mode ?? globalDefault\n  if (m === \"always\") return true\n  if (m === \"never\") return false\n  return prefersReducedMotion()\n}\n","/**\n * Classify an animatable property into a rendering tier.\n *\n *  - `compositor`: handled off the main thread via WAAPI when available.\n *     `transform`, `opacity`, `filter`, `clip-path`, `background-color`\n *     (the latter accelerated on recent Blink/WebKit).\n *  - `main`: requires main-thread work. Geometry, box model, SVG\n *     attributes, custom properties, and anything unknown.\n *  - `pseudo`: motion-style shorthand (x, y, scale, rotate) that resolves\n *     to `transform` before being applied. Compositor-safe.\n */\n\nexport type PropertyTier = \"compositor\" | \"main\" | \"pseudo\"\n\nexport interface PropertyInfo {\n  readonly tier: PropertyTier\n  /**\n   * Target attribute when writing to the DOM. For CSS, this is the\n   * kebab-case CSS property; for SVG, the attribute name. Pseudo props\n   * resolve to `transform`.\n   */\n  readonly target: string\n  /**\n   * How the value is applied by the rAF backend:\n   *   - `style`: `element.style[camelCase] = value`\n   *   - `attr`:  `element.setAttribute(target, value)` (SVG)\n   *   - `transform`: composed into the shared transform string\n   */\n  readonly apply: \"style\" | \"attr\" | \"transform\"\n}\n\nconst COMPOSITOR_STYLE = new Set<string>([\n  \"opacity\",\n  \"transform\",\n  \"filter\",\n  \"backdropFilter\",\n  \"clipPath\",\n  \"backgroundColor\",\n])\n\nconst PSEUDO_TO_TRANSFORM: Record<string, string> = {\n  x: \"translateX\",\n  y: \"translateY\",\n  z: \"translateZ\",\n  translateX: \"translateX\",\n  translateY: \"translateY\",\n  translateZ: \"translateZ\",\n  scale: \"scale\",\n  scaleX: \"scaleX\",\n  scaleY: \"scaleY\",\n  scaleZ: \"scaleZ\",\n  rotate: \"rotate\",\n  rotateX: \"rotateX\",\n  rotateY: \"rotateY\",\n  rotateZ: \"rotateZ\",\n  skew: \"skew\",\n  skewX: \"skewX\",\n  skewY: \"skewY\",\n}\n\nconst SVG_ATTRS = new Set<string>([\n  \"d\",\n  \"points\",\n  \"cx\",\n  \"cy\",\n  \"r\",\n  \"rx\",\n  \"ry\",\n  \"x1\",\n  \"y1\",\n  \"x2\",\n  \"y2\",\n  \"fill\",\n  \"stroke\",\n  \"strokeWidth\",\n  \"strokeDasharray\",\n  \"strokeDashoffset\",\n  \"viewBox\",\n  \"pathLength\",\n])\n\nfunction toKebab(name: string): string {\n  return name.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`)\n}\n\n// `classify()` is called many times per play() (once per property via\n// partitionByTier, and again per property per sample in toKeyframe()).\n// Every call previously minted a fresh PropertyInfo object; at n=1000\n// plays with 2-3 props each that's a measurable amount of GC pressure.\n// Property names come from a very small alphabet in practice, so a\n// module-level Map amortizes the classification cost across the process.\nconst classifyCache = new Map<string, PropertyInfo>()\n\nfunction classifyUncached(property: string): PropertyInfo {\n  if (property in PSEUDO_TO_TRANSFORM) {\n    return { tier: \"pseudo\", target: \"transform\", apply: \"transform\" }\n  }\n  if (property === \"transform\" || COMPOSITOR_STYLE.has(property)) {\n    return { tier: \"compositor\", target: toKebab(property), apply: \"style\" }\n  }\n  if (SVG_ATTRS.has(property)) {\n    // Normalize camelCase SVG attrs to kebab-case where applicable.\n    const target = property === \"viewBox\" ? \"viewBox\" : toKebab(property)\n    return { tier: \"main\", target, apply: \"attr\" }\n  }\n  return { tier: \"main\", target: toKebab(property), apply: \"style\" }\n}\n\nexport function classify(property: string): PropertyInfo {\n  const cached = classifyCache.get(property)\n  if (cached !== undefined) return cached\n  const info = classifyUncached(property)\n  classifyCache.set(property, info)\n  return info\n}\n\nexport function isCompositorSafe(property: string): boolean {\n  const info = classify(property)\n  return info.tier === \"compositor\" || info.tier === \"pseudo\"\n}\n\n/**\n * Resolve a pseudo transform prop to the transform-function name that\n * should be emitted. Returns `null` for non-pseudo props.\n */\nexport function pseudoToTransformFn(property: string): string | null {\n  return PSEUDO_TO_TRANSFORM[property] ?? null\n}\n\n// Shared empty reference reused whenever a partition has no props in\n// one of the two tiers. At n=1000 unique-def plays that would otherwise\n// be 1000 fresh `[]` allocations per side; the common tween workload\n// (opacity/transform/x/y/scale only) falls into the all-compositor case.\nconst EMPTY: readonly string[] = Object.freeze([])\n\n/**\n * Partition a list of property names by tier. Pseudo props are folded\n * into the compositor set (they resolve to transform). Only allocates\n * an array for a tier if at least one property belongs to it; the other\n * side is the shared `EMPTY` reference.\n *\n * Returns the input `props` reference alongside the partition so callers\n * (leaf defs) can stash the full triple as `tierSplit` without an extra\n * wrapper object per def.\n */\nexport function partitionByTier(props: readonly string[]): {\n  readonly props: readonly string[]\n  readonly compositor: readonly string[]\n  readonly main: readonly string[]\n} {\n  let compositor: string[] | null = null\n  let main: string[] | null = null\n  for (const p of props) {\n    if (classify(p).tier === \"main\") {\n      if (main === null) main = []\n      main.push(p)\n    } else {\n      if (compositor === null) compositor = []\n      compositor.push(p)\n    }\n  }\n  return { props, compositor: compositor ?? EMPTY, main: main ?? EMPTY }\n}\n","import { getCssEasing, isSpringEasing, linear } from \"../core/easing\"\nimport { KinemError } from \"../core/errors\"\nimport type { AnimationDef, CommitTarget, EasingFn } from \"../core/types\"\nimport { interpolate } from \"../interpolate/registry\"\nimport { classify, partitionByTier, pseudoToTransformFn } from \"../render/properties\"\n\nconst clamp01 = (p: number): number => (p <= 0 ? 0 : p >= 1 ? 1 : p)\n\n/**\n * Widen literal types to their base type so that `[0, 100]` produces a\n * `number` value (not `0 | 100`). This lets tween animations compose in\n * `sequence`/`parallel` even when their from/to literals differ.\n */\ntype Widen<T> = T extends number\n  ? number\n  : T extends string\n    ? string\n    : T extends boolean\n      ? boolean\n      : T extends bigint\n        ? bigint\n        : T\n\nexport type TweenProps = Record<string, readonly [unknown, unknown]>\n\n/**\n * The value type of a tween animation: for each property, the widened\n * element type of its `[from, to]` pair.\n */\nexport type TweenValue<P extends TweenProps> = {\n  [K in keyof P]: P[K] extends readonly [infer A, infer B] ? Widen<A | B> : never\n}\n\nexport interface TweenOpts {\n  /**\n   * Animation duration in ms. If omitted and `easing` carries its own\n   * duration (a spring easing), that duration is used. Otherwise defaults\n   * to 400ms.\n   */\n  readonly duration?: number\n  readonly easing?: EasingFn\n}\n\nconst DEFAULT_DURATION = 400\n\n// Default unit appended when a pseudo transform prop is given as a\n// plain number. Kept in sync with apply.ts::PSEUDO_DEFAULT_UNIT.\nconst PSEUDO_DEFAULT_UNIT: Record<string, string> = {\n  translateX: \"px\",\n  translateY: \"px\",\n  translateZ: \"px\",\n  scale: \"\",\n  scaleX: \"\",\n  scaleY: \"\",\n  scaleZ: \"\",\n  rotate: \"deg\",\n  rotateX: \"deg\",\n  rotateY: \"deg\",\n  rotateZ: \"deg\",\n  skew: \"deg\",\n  skewX: \"deg\",\n  skewY: \"deg\",\n}\n\n// Canonical order for composing transform functions. Must match\n// apply.ts::TRANSFORM_ORDER so that the direct-commit path produces\n// byte-identical output to the applyValues path.\nconst TRANSFORM_ORDER: readonly string[] = [\n  \"translateX\",\n  \"translateY\",\n  \"translateZ\",\n  \"rotate\",\n  \"rotateX\",\n  \"rotateY\",\n  \"rotateZ\",\n  \"scale\",\n  \"scaleX\",\n  \"scaleY\",\n  \"scaleZ\",\n  \"skew\",\n  \"skewX\",\n  \"skewY\",\n]\nconst TRANSFORM_RANK: Record<string, number> = (() => {\n  const m: Record<string, number> = {}\n  for (let i = 0; i < TRANSFORM_ORDER.length; i++) m[TRANSFORM_ORDER[i] as string] = i\n  return m\n})()\n\ntype Interp = (p: number) => unknown\n\ninterface StyleOp {\n  readonly target: string\n  readonly interp: Interp\n}\ninterface AttrOp {\n  readonly target: string\n  readonly interp: Interp\n}\ninterface TransformOp {\n  readonly fn: string\n  readonly unit: string\n  readonly interp: Interp\n}\n\ninterface CommitPlan {\n  readonly styleOps: readonly StyleOp[]\n  readonly attrOps: readonly AttrOp[]\n  readonly transformOps: readonly TransformOp[]\n  // An explicit `transform: [a, b]` pair (string-valued) takes over the\n  // whole transform slot when there are no pseudo ops.\n  readonly explicitTransform: Interp | null\n}\n\nfunction buildCommitPlan(keys: readonly string[], perPropFns: readonly Interp[]): CommitPlan {\n  const styleOps: StyleOp[] = []\n  const attrOps: AttrOp[] = []\n  const transformOps: TransformOp[] = []\n  let explicitTransform: Interp | null = null\n\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i] as string\n    const interp = perPropFns[i] as Interp\n    if (key === \"transform\") {\n      explicitTransform = interp\n      continue\n    }\n    const info = classify(key)\n    if (info.apply === \"transform\") {\n      const fn = pseudoToTransformFn(key)\n      if (fn) {\n        transformOps.push({ fn, unit: PSEUDO_DEFAULT_UNIT[fn] ?? \"\", interp })\n      }\n    } else if (info.apply === \"attr\") {\n      attrOps.push({ target: info.target, interp })\n    } else {\n      styleOps.push({ target: info.target, interp })\n    }\n  }\n\n  transformOps.sort((a, b) => (TRANSFORM_RANK[a.fn] ?? 0) - (TRANSFORM_RANK[b.fn] ?? 0))\n\n  return { styleOps, attrOps, transformOps, explicitTransform }\n}\n\nfunction renderValue(v: unknown): string {\n  return typeof v === \"number\" ? String(v) : (v as string)\n}\n\nfunction commitWithPlan(plan: CommitPlan, easing: EasingFn, p: number, el: CommitTarget): void {\n  const eased = easing(clamp01(p))\n  const { styleOps, attrOps, transformOps, explicitTransform } = plan\n\n  for (let i = 0; i < styleOps.length; i++) {\n    const op = styleOps[i] as StyleOp\n    el.style.setProperty(op.target, renderValue(op.interp(eased)))\n  }\n  for (let i = 0; i < attrOps.length; i++) {\n    const op = attrOps[i] as AttrOp\n    el.setAttribute(op.target, renderValue(op.interp(eased)))\n  }\n  if (transformOps.length > 0) {\n    let s = \"\"\n    for (let i = 0; i < transformOps.length; i++) {\n      const op = transformOps[i] as TransformOp\n      const v = op.interp(eased)\n      if (i > 0) s += \" \"\n      if (typeof v === \"string\") {\n        s += `${op.fn}(${v})`\n      } else {\n        s += `${op.fn}(${v}${op.unit})`\n      }\n    }\n    el.style.setProperty(\"transform\", s)\n  } else if (explicitTransform !== null) {\n    el.style.setProperty(\"transform\", renderValue(explicitTransform(eased)))\n  }\n}\n\n/**\n * Construct a multi-property tween. Each entry in `props` is a\n * `[from, to]` tuple; the interpolation registry selects the right\n * interpolator per property.\n *\n * ```ts\n * tween({ opacity: [0, 1], x: [0, 100] }, { duration: 500, easing: easeOut })\n * ```\n */\nexport function tween<const P extends TweenProps>(\n  props: P,\n  opts: TweenOpts = {},\n): AnimationDef<TweenValue<P>> {\n  const easing = opts.easing ?? linear\n  const duration = opts.duration ?? (isSpringEasing(easing) ? easing.duration : DEFAULT_DURATION)\n\n  const keys = Object.keys(props) as Array<keyof P & string>\n  const perPropFns: Array<(p: number) => unknown> = new Array(keys.length)\n  let allPlainNumbers = true\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i] as string\n    const pair = props[key] as readonly unknown[]\n    if (pair.length !== 2) {\n      throw new KinemError(\n        `tween(): property \"${key}\" must be a [from, to] pair (got length ${pair.length})`,\n        \"use keyframes() for more than two stops\",\n      )\n    }\n    perPropFns[i] = interpolate(pair[0], pair[1])\n    if (typeof pair[0] !== \"number\" || typeof pair[1] !== \"number\") {\n      allPlainNumbers = false\n    }\n  }\n\n  const properties = keys as readonly string[]\n  const tierSplit = partitionByTier(properties)\n  const linearizable = allPlainNumbers && getCssEasing(easing) !== undefined\n\n  // Pre-classified commit plan. The rAF backend uses this to write\n  // property values directly to the element, skipping the intermediate\n  // `Record<string, unknown>` allocation and the per-frame `classify()`\n  // loop in `applyValues`.\n  const plan = buildCommitPlan(keys, perPropFns)\n  const commit = (p: number, el: CommitTarget): void => {\n    commitWithPlan(plan, easing, p, el)\n  }\n\n  return {\n    kind: \"tween\",\n    duration,\n    easing,\n    interpolate: (p) => {\n      const eased = easing(clamp01(p))\n      const out: Record<string, unknown> = {}\n      for (let i = 0; i < keys.length; i++) {\n        const key = keys[i] as string\n        out[key] = (perPropFns[i] as (q: number) => unknown)(eased)\n      }\n      return out as TweenValue<P>\n    },\n    properties,\n    tierSplit,\n    linearizable,\n    commit,\n  }\n}\n","/**\n * Lightweight runtime tracker for every `play()` invocation.\n *\n * The tracker is a process-wide singleton that records each\n * `Controls` returned by `play()` along with its targets and start\n * time. Records are removed on `finished` / `cancel`. Subscribers are\n * notified on start / finish / cancel events.\n *\n * The hot path is free when nothing is subscribed: the tracker always\n * maintains the active map (so `listActive()` works without any prior\n * setup) but event emission short-circuits on empty listener sets.\n *\n * The tracker lives in core so every animation is visible regardless\n * of framework adapter. The `devtools` package consumes it; tests use\n * `__resetTracker()` to avoid cross-test leakage.\n */\n\nimport type { Controls } from \"../api/controls\"\nimport { getCssEasing } from \"../core/easing\"\nimport { omitUndefined } from \"../core/omit-undefined\"\nimport type { EasingFn } from \"../core/types\"\nimport type { StrategyBackend, StrategyState, StrategyTarget } from \"../render/strategy\"\n\n/**\n * Backends recognized by the tracker. The `play*` family uses the\n * strategy backends (auto / waapi / raf). Open-ended primitives\n * register under a label that names the primitive itself; their records\n * have `duration === 0` and a Controls façade whose only working method\n * is `cancel()`.\n */\nexport type TrackerBackend =\n  | StrategyBackend\n  | \"follow\"\n  | \"scroll\"\n  | \"scrub\"\n  | \"ambient\"\n  | \"view-transition\"\n  | \"timeline\"\n\nexport interface AnimationRecord {\n  readonly id: number\n  /**\n   * Total span in ms. `0` is a sentinel for ambient/open-ended records\n   * (follow, scroll-sync, scrub) that have no fixed duration.\n   */\n  readonly duration: number\n  readonly targets: readonly StrategyTarget[]\n  readonly startedAt: number\n  readonly state: StrategyState\n  /** Rendering backend or ambient-primitive label. */\n  readonly backend: TrackerBackend\n  /**\n   * Wall-clock elapsed ratio in [0, 1]. Not adjusted for pause or\n   * seek, so treat this as a rough indicator rather than ground truth.\n   * For exact timing, read from the strategy handle. For ambient\n   * records this reads from the underlying handle when available and\n   * otherwise stays at 0.\n   */\n  readonly progress: number\n  /**\n   * Live Controls handle. For ambient records this is a façade whose\n   * `cancel()` delegates to the underlying primitive; pause / resume /\n   * seek / reverse / restart are no-ops.\n   */\n  readonly controls: Controls\n  /**\n   * Optional human-readable name for the entry. Used by reactive demos\n   * and other ambient registrations to surface a friendly title in the\n   * devtools UI (`\"spring-choir leaderX\"`, `\"pulse-spectrum cursor\"`).\n   * For `play()`-driven animations this is usually undefined; the\n   * targets / properties tell the story instead.\n   */\n  readonly name?: string\n  /**\n   * Optional descriptive label for the animation's easing. Surfaced via\n   * the registration meta bag from `play()` / `playStagger()`. Built-in\n   * CSS-tagged easings report `\"linear\"` / `\"cubic-bezier(...)\"`; named\n   * easeIn / easeOut / easeInOut report their function name when not\n   * minified; otherwise reports `\"(custom)\"`.\n   */\n  readonly easing?: string\n  /**\n   * Optional list of property names the animation drives. Populated\n   * when the leaf def carries a `properties` cache. Useful for the\n   * devtools panel when summarizing what an animation is doing.\n   */\n  readonly properties?: readonly string[]\n  /**\n   * Named labels surfaced from the underlying handle (currently only\n   * timelines populate this). Devtools can render these inline on the\n   * progress bar; programmatic callers can use `controls.seekLabel(name)`\n   * to jump to them.\n   */\n  readonly labels?: ReadonlyMap<string, number>\n}\n\n/** Optional metadata attached at registration time. */\nexport interface TrackerMeta {\n  readonly name?: string\n  readonly easing?: string\n  readonly properties?: readonly string[]\n  readonly labels?: ReadonlyMap<string, number>\n}\n\n/**\n * Best-effort string label for an `EasingFn`. Tagged CSS easings (the\n * built-in `linear` and `cubicBezier(...)` results) are recognized\n * exactly. Named easings (`easeIn`, `easeOut`, `easeInOut`) report\n * their function name. Unrecognized easings report `\"(custom)\"`.\n *\n * The result is for human display only — do not use it to reconstruct\n * an easing function.\n */\nexport function easingLabel(fn: EasingFn | undefined): string | undefined {\n  if (!fn) return undefined\n  const css = getCssEasing(fn)\n  if (css) return css\n  const name = fn.name\n  if (name && name !== \"\" && name !== \"fn\") return name\n  return \"(custom)\"\n}\n\nexport type TrackerEvent =\n  | { readonly type: \"start\"; readonly id: number; readonly record: AnimationRecord }\n  | { readonly type: \"finish\"; readonly id: number }\n  | { readonly type: \"cancel\"; readonly id: number }\n\nexport type TrackerListener = (event: TrackerEvent) => void\n\nlet nextId = 1\nconst active = new Map<number, AnimationRecord>()\nconst listeners = new Set<TrackerListener>()\n/**\n * Opt-in flag. When false (the default), `trackAnimation()` is a no-op\n * and `play()` pays nothing for the devtools integration. The devtools\n * package flips this on at import time via `enableTracker()`, so any\n * app that imports devtools gets full tracking automatically.\n *\n * One-way switch by design: enabling mid-session is fine, but we don't\n * support flipping off because in-flight animations already have their\n * `finished` continuations wired up. Toggling back and forth would\n * leave the active map inconsistent with reality.\n */\nlet enabled = false\n\nfunction now(): number {\n  if (typeof performance !== \"undefined\" && typeof performance.now === \"function\") {\n    return performance.now()\n  }\n  return Date.now()\n}\n\nfunction emit(event: TrackerEvent): void {\n  if (listeners.size === 0) return\n  for (const fn of listeners) fn(event)\n}\n\n/**\n * Register a named ambient entry that lives until the returned\n * function is called. Convenience for reactive demos and other\n * graph-driven primitives that don't have a single `cancel()`-shaped\n * handle of their own but want to surface as one entry in devtools.\n *\n *   const off = trackNamed(\"spring-choir\")\n *   // ... later, on cleanup:\n *   off()\n *\n * No-op when tracking is disabled.\n */\nexport function trackNamed(name: string, backend: TrackerBackend = \"ambient\"): () => void {\n  if (!enabled) return () => {}\n  const handle: AmbientHandle = { cancel(): void {}, state: \"active\" }\n  const id = trackAmbient(handle, backend, [], { name })\n  return () => {\n    untrackAmbient(id)\n  }\n}\n\n/**\n * Surface the tracker on a well-known global so external tools (the\n * Chrome DevTools extension in particular) can connect without\n * bundling `@kinem/core`. Mirrors the `__REACT_DEVTOOLS_GLOBAL_HOOK__`\n * pattern: a single namespaced slot with a small, stable API. Installed\n * idempotently the first time tracking is enabled in a browser.\n */\nexport interface KinemDevtoolsHook {\n  readonly version: 1\n  listActive(): readonly AnimationRecord[]\n  subscribe(fn: TrackerListener): () => void\n}\n\nfunction installHook(): void {\n  const g =\n    typeof globalThis !== \"undefined\"\n      ? (globalThis as { __KINEM_DEVTOOLS_HOOK__?: KinemDevtoolsHook })\n      : undefined\n  if (!g || g.__KINEM_DEVTOOLS_HOOK__) return\n  g.__KINEM_DEVTOOLS_HOOK__ = {\n    version: 1,\n    listActive,\n    subscribe,\n  }\n}\n\n/**\n * Enable tracking for every subsequent `play()` call. Idempotent. The\n * devtools package calls this at import time; other callers should only\n * do so if they need `listActive()` or `subscribe()` to report live\n * animation state.\n */\nexport function enableTracker(): void {\n  enabled = true\n  installHook()\n}\n\n/** True when tracking is active. Primarily for tests. */\nexport function isTrackerEnabled(): boolean {\n  return enabled\n}\n\n/**\n * Register a `Controls` with the tracker. Returns the allocated id,\n * or `-1` if tracking is disabled (the common production case).\n * Called from `play()`; user code should not invoke this directly.\n */\nexport function trackAnimation(\n  controls: Controls,\n  targets: readonly StrategyTarget[],\n  backend: TrackerBackend = \"auto\",\n  meta: TrackerMeta = {},\n): number {\n  if (!enabled) return -1\n  const id = nextId++\n  const startedAt = now()\n  const record: AnimationRecord = {\n    id,\n    duration: controls.duration,\n    targets,\n    startedAt,\n    backend,\n    controls,\n    ...omitUndefined({\n      name: meta.name,\n      easing: meta.easing,\n      properties: meta.properties,\n      labels: meta.labels,\n    }),\n    get state() {\n      return controls.state\n    },\n    get progress() {\n      if (controls.duration <= 0) return 1\n      const elapsed = now() - startedAt\n      const p = elapsed / controls.duration\n      return p < 0 ? 0 : p > 1 ? 1 : p\n    },\n  }\n  active.set(id, record)\n  emit({ type: \"start\", id, record })\n  controls.finished.then(\n    () => {\n      if (active.delete(id)) emit({ type: \"finish\", id })\n    },\n    () => {\n      if (active.delete(id)) emit({ type: \"cancel\", id })\n    },\n  )\n  return id\n}\n\n/**\n * Minimal contract a primitive needs to be registered as ambient. The\n * tracker only needs to be able to cancel the handle and observe its\n * state; everything else (pause / resume / seek) is a no-op for these\n * open-ended records.\n */\nexport interface AmbientHandle {\n  cancel(): void\n  readonly state: string\n  /** Optional progress in [0, 1]. Defaults to 0 when not present. */\n  readonly progress?: number\n}\n\n/**\n * Build a Controls-shaped façade for an ambient handle. Only `cancel`\n * has real behavior; pause / resume / seek / reverse / restart are\n * no-ops because open-ended primitives don't model those operations.\n * `finished` resolves once the handle is cancelled; this is what the\n * tracker watches to remove the record.\n */\nfunction ambientControls(handle: AmbientHandle): Controls {\n  let resolveFinished: () => void = () => {}\n  let rejectFinished: (err: unknown) => void = () => {}\n  const finished = new Promise<void>((resolve, reject) => {\n    resolveFinished = resolve\n    rejectFinished = reject\n  })\n  // The tracker awaits this promise to remove the record on cancel.\n  // Mark it handled here; consumers reading `.finished` directly still\n  // see the rejection.\n  finished.catch(() => {})\n\n  const noop = (): Controls => controls\n  const controls: Controls = {\n    pause: noop as Controls[\"pause\"],\n    resume: noop as Controls[\"resume\"],\n    seek: noop as Controls[\"seek\"],\n    seekLabel: noop as Controls[\"seekLabel\"],\n    playLabel: noop as Controls[\"playLabel\"],\n    reverse: noop as Controls[\"reverse\"],\n    restart: noop as Controls[\"restart\"],\n    cancel(): Controls {\n      handle.cancel()\n      rejectFinished(new Error(\"kinem: ambient handle cancelled\"))\n      return controls\n    },\n    duration: 0,\n    get state(): StrategyState {\n      // Map the primitive's \"active\"/\"cancelled\" state into the strategy\n      // vocabulary so consumers don't need to special-case ambient.\n      return handle.state === \"cancelled\" ? \"cancelled\" : \"playing\"\n    },\n    get progress(): number {\n      const p = handle.progress\n      return typeof p === \"number\" ? p : 0\n    },\n    get direction(): 1 | -1 {\n      return 1\n    },\n    get finished(): Promise<void> {\n      return finished\n    },\n    get labels(): ReadonlyMap<string, number> {\n      return EMPTY_LABELS\n    },\n    get speed(): number {\n      return 1\n    },\n    set speed(_v: number) {\n      // ambient handles don't support speed control\n    },\n    // biome-ignore lint/suspicious/noThenProperty: Controls is intentionally thenable so callers can `await` it\n    then<T1 = undefined, T2 = never>(\n      onfulfilled?: ((v: undefined) => T1 | PromiseLike<T1>) | null,\n      onrejected?: ((err: unknown) => T2 | PromiseLike<T2>) | null,\n    ): Promise<T1 | T2> {\n      const adapt =\n        onfulfilled === null || onfulfilled === undefined\n          ? onfulfilled\n          : (): T1 | PromiseLike<T1> => onfulfilled(undefined)\n      return finished.then(adapt, onrejected)\n    },\n    catch<R>(onrejected: (err: unknown) => R | PromiseLike<R>): Promise<undefined | R> {\n      return finished.catch(onrejected) as Promise<undefined | R>\n    },\n    finally(onfinally?: (() => void) | null): Promise<undefined> {\n      return finished.finally(onfinally) as Promise<undefined>\n    },\n  }\n  // We never call `resolveFinished`: ambient records only end via\n  // cancel. Reference it to satisfy the no-unused warning.\n  void resolveFinished\n  return controls\n}\n\nconst EMPTY_LABELS: ReadonlyMap<string, number> = new Map()\n\n/**\n * Register an open-ended primitive (follow, scroll-sync, scrub, …) with\n * the tracker so devtools can see it. Returns the allocated id, or\n * `-1` if tracking is disabled.\n *\n * Records produced by `trackAmbient` carry `duration === 0` to signal\n * \"no fixed span\", and a Controls façade whose only meaningful method\n * is `cancel()`. Pause / resume / seek are no-ops because the source\n * primitives don't model them.\n *\n * Called from inside the primitives themselves; user code should not\n * invoke directly.\n */\nexport function trackAmbient(\n  handle: AmbientHandle,\n  backend: TrackerBackend,\n  targets: readonly StrategyTarget[] = [],\n  meta: TrackerMeta = {},\n): number {\n  if (!enabled) return -1\n  const controls = ambientControls(handle)\n  const id = nextId++\n  const startedAt = now()\n  const record: AnimationRecord = {\n    id,\n    duration: 0,\n    targets,\n    startedAt,\n    backend,\n    controls,\n    ...omitUndefined({\n      name: meta.name,\n      easing: meta.easing,\n      properties: meta.properties,\n      labels: meta.labels,\n    }),\n    get state(): StrategyState {\n      return controls.state\n    },\n    get progress(): number {\n      return controls.progress\n    },\n  }\n  active.set(id, record)\n  emit({ type: \"start\", id, record })\n  controls.finished.then(\n    () => {\n      if (active.delete(id)) emit({ type: \"finish\", id })\n    },\n    () => {\n      if (active.delete(id)) emit({ type: \"cancel\", id })\n    },\n  )\n  return id\n}\n\n/**\n * Remove an ambient record by id and emit a `cancel` event. Called from\n * the primitives' own `cancel()` paths so that records get cleaned up\n * even when callers cancel the underlying handle directly (rather than\n * routing through the tracker's controls façade). No-op if the id is\n * unknown (already removed, or tracking was disabled when the record\n * was registered).\n */\nexport function untrackAmbient(id: number): void {\n  if (id < 0) return\n  if (!active.delete(id)) return\n  emit({ type: \"cancel\", id })\n}\n\n/** Snapshot of currently-active animations. Order is insertion (oldest first). */\nexport function listActive(): readonly AnimationRecord[] {\n  return Array.from(active.values())\n}\n\n/**\n * Subscribe to tracker events. Returns an unsubscribe function.\n * Subscribing auto-enables the tracker: otherwise the subscriber would\n * silently receive no events.\n */\nexport function subscribe(fn: TrackerListener): () => void {\n  enabled = true\n  installHook()\n  listeners.add(fn)\n  return () => {\n    listeners.delete(fn)\n  }\n}\n\n/** Test-only: reset the tracker state so tests don't leak into each other. */\nexport function __resetTracker(): void {\n  active.clear()\n  listeners.clear()\n  nextId = 1\n  enabled = false\n  const g =\n    typeof globalThis !== \"undefined\"\n      ? (globalThis as { __KINEM_DEVTOOLS_HOOK__?: KinemDevtoolsHook })\n      : undefined\n  // biome-ignore lint/performance/noDelete: exactOptionalPropertyTypes requires removal, not undefined assignment\n  if (g) delete g.__KINEM_DEVTOOLS_HOOK__\n}\n","/**\n * Apply interpolated property values to a DOM-like target. Splits\n * values by `apply` kind (style | attr | transform), composes any\n * pseudo transform props into a single `transform` string, and writes.\n *\n * This module is DOM-agnostic at the type level. Real browsers pass\n * `Element`; tests can pass a minimal shim with `style` + `setAttribute`.\n */\n\nimport { classify, pseudoToTransformFn } from \"./properties\"\n\nexport interface StyleShim {\n  setProperty(name: string, value: string): void\n}\n\nexport interface ElementShim {\n  readonly style: StyleShim\n  setAttribute(name: string, value: string): void\n}\n\nexport type PropertyValue = string | number\n\n/** Default units applied to pseudo-transform values when a number is given. */\nconst PSEUDO_DEFAULT_UNIT: Record<string, string> = {\n  translateX: \"px\",\n  translateY: \"px\",\n  translateZ: \"px\",\n  scale: \"\",\n  scaleX: \"\",\n  scaleY: \"\",\n  scaleZ: \"\",\n  rotate: \"deg\",\n  rotateX: \"deg\",\n  rotateY: \"deg\",\n  rotateZ: \"deg\",\n  skew: \"deg\",\n  skewX: \"deg\",\n  skewY: \"deg\",\n}\n\n/**\n * Canonical order for composing transform functions. Mirrors GSAP /\n * Motion: translate, rotate, scale, skew. Predictable ordering means\n * two animations on the same element compose without surprise.\n */\nconst TRANSFORM_ORDER: readonly string[] = [\n  \"translateX\",\n  \"translateY\",\n  \"translateZ\",\n  \"rotate\",\n  \"rotateX\",\n  \"rotateY\",\n  \"rotateZ\",\n  \"scale\",\n  \"scaleX\",\n  \"scaleY\",\n  \"scaleZ\",\n  \"skew\",\n  \"skewX\",\n  \"skewY\",\n]\n\nfunction formatPseudo(fn: string, value: PropertyValue): string {\n  if (typeof value === \"string\") return `${fn}(${value})`\n  const unit = PSEUDO_DEFAULT_UNIT[fn] ?? \"\"\n  return `${fn}(${value}${unit})`\n}\n\nfunction composeTransform(parts: Record<string, PropertyValue>): string {\n  const out: string[] = []\n  for (const fn of TRANSFORM_ORDER) {\n    if (fn in parts) {\n      const value = parts[fn]\n      if (value !== undefined) out.push(formatPseudo(fn, value))\n    }\n  }\n  return out.join(\" \")\n}\n\nexport function applyValues(\n  el: ElementShim,\n  values: Readonly<Record<string, PropertyValue>>,\n): void {\n  // Defer allocating the transform-parts bag until we see the first\n  // pseudo key. Most per-frame applies have no pseudo props at all\n  // (opacity-only, width-only, etc.) and paid for an empty object.\n  let transformParts: Record<string, PropertyValue> | null = null\n  let explicitTransform: string | null = null\n\n  for (const key in values) {\n    const value = values[key]\n    if (value === undefined) continue\n    if (key === \"transform\" && typeof value === \"string\") {\n      explicitTransform = value\n      continue\n    }\n    const info = classify(key)\n    if (info.apply === \"transform\") {\n      const fn = pseudoToTransformFn(key)\n      if (fn) {\n        if (transformParts === null) transformParts = {}\n        transformParts[fn] = value\n      }\n      continue\n    }\n    const rendered = typeof value === \"number\" ? String(value) : value\n    if (info.apply === \"attr\") {\n      el.setAttribute(info.target, rendered)\n    } else {\n      el.style.setProperty(info.target, rendered)\n    }\n  }\n\n  if (transformParts !== null) {\n    el.style.setProperty(\"transform\", composeTransform(transformParts))\n  } else if (explicitTransform !== null) {\n    el.style.setProperty(\"transform\", explicitTransform)\n  }\n}\n","/**\n * Lazy-settleable `Promise<void>`. The underlying `Promise` is only\n * allocated on first access to `.promise`. If the owner calls resolve()\n * or reject() before anyone reads `.promise`, no Promise (and no\n * microtask) is ever scheduled.\n *\n * This is the hot path for fire-and-forget animations: create 1000\n * tweens, cancel them all before the first frame, never touch the\n * handle's `.finished`. GSAP pays zero promise cost here. With this\n * helper, kinem also pays zero when the owner never inspects the\n * outcome.\n *\n * When `.promise` is accessed after a rejection, the returned promise\n * is pre-rejected and has a silent catch attached so it doesn't surface\n * as an unhandled rejection if the caller discards it. Callers that\n * chain (.then / .catch / await) still observe the rejection normally\n * because they create their own subscription to the same promise.\n *\n * Implemented as a class so the five public operations live on the\n * prototype once rather than being reallocated as fresh closures per\n * `createLazyPromise()` call. Each animation constructs one of these,\n * so at n=1000 plays that's 5000 fewer closure allocs per cycle.\n */\n\nconst noop = (): void => {}\nconst CANCELLED_MSG = \"animation cancelled\"\n// Shared, frozen Error instance used for all `rejectCancelled()` paths.\n// The alternative (one `new Error` per cancel) allocates a fresh object\n// and captures a stack on every call. The stack is captured at\n// construction time, not at the cancel call site, so it points into\n// this module regardless: callers reading `.stack` get no useful\n// debugging signal either way. Frozen so a consumer that accidentally\n// mutates a caught cancel error can't leak state across rejections.\n// Significant on the hot path: at n=1000 plays that's 1000 fewer Error\n// allocs + stack captures per startup-commit cycle.\nconst CANCELLED_ERROR: Error = Object.freeze(new Error(CANCELLED_MSG)) as Error\n\ntype LazyState = \"pending\" | \"resolved\" | \"rejected\"\n\nexport interface LazyPromise {\n  resolve(): void\n  reject(err: unknown): void\n  /**\n   * Mark as rejected with a standard \"animation cancelled\" Error. A\n   * single module-level frozen Error is reused across every call; no\n   * allocation or stack capture happens per cancel. For fire-and-forget\n   * cancel patterns where the handle's `finished` is never awaited,\n   * this still pays zero (no Promise either).\n   */\n  rejectCancelled(): void\n  readonly promise: Promise<void>\n  readonly settled: boolean\n}\n\nclass LazyPromiseImpl implements LazyPromise {\n  #state: LazyState = \"pending\"\n  #reason: unknown = undefined\n  #wasCancelled = false\n  #promise: Promise<void> | null = null\n  #resolveFn: (() => void) | null = null\n  #rejectFn: ((err: unknown) => void) | null = null\n\n  resolve(): void {\n    if (this.#state !== \"pending\") return\n    this.#state = \"resolved\"\n    this.#resolveFn?.()\n  }\n\n  reject(err: unknown): void {\n    if (this.#state !== \"pending\") return\n    this.#state = \"rejected\"\n    this.#reason = err\n    this.#rejectFn?.(err)\n  }\n\n  rejectCancelled(): void {\n    if (this.#state !== \"pending\") return\n    this.#state = \"rejected\"\n    this.#wasCancelled = true\n    if (this.#rejectFn) this.#rejectFn(CANCELLED_ERROR)\n  }\n\n  get promise(): Promise<void> {\n    if (this.#promise !== null) return this.#promise\n    if (this.#state === \"resolved\") {\n      this.#promise = Promise.resolve()\n    } else if (this.#state === \"rejected\") {\n      const err = this.#wasCancelled ? CANCELLED_ERROR : this.#reason\n      this.#promise = Promise.reject(err)\n      this.#promise.catch(noop)\n    } else {\n      this.#promise = new Promise<void>((res, rej) => {\n        this.#resolveFn = res\n        this.#rejectFn = rej\n      })\n    }\n    return this.#promise\n  }\n\n  get settled(): boolean {\n    return this.#state !== \"pending\"\n  }\n}\n\nexport function createLazyPromise(): LazyPromise {\n  return new LazyPromiseImpl()\n}\n","/**\n * Frame scheduler with four ordered phases per tick:\n *\n *   read → compute → update → render\n *\n * Jobs enqueued into a phase run in insertion order. All DOM reads go\n * in `read`, all DOM writes go in `update` / `render`. Keeping them\n * strictly phase-ordered avoids layout thrashing: the browser never\n * observes a read after a write within one frame.\n *\n * Jobs added *during* a tick:\n *   - to the currently-running phase or an earlier one → defer to the\n *     next tick (prevents unbounded re-entry within a single frame).\n *   - to a later phase in the same tick → run in that phase this tick.\n *     This is the useful pattern: a `read` can enqueue a follow-up\n *     `update` that consumes the measurement without a frame delay.\n *\n * The scheduler is lazy. It only runs a RAF loop while at least one\n * phase has pending jobs or a pending \"keepalive\" registration. When\n * everything drains, it cancels RAF and sleeps.\n *\n * Keepalive has two call shapes:\n *   - fn-based: `schedule(phase, fn, { keepalive: true })` +\n *     `cancel(phase, fn)`. The scheduler internally allocates a\n *     wrapper node per registration and keeps a `Map<fn, node>` for\n *     lookup on cancel. Convenient for ad-hoc callers.\n *   - node-based: `scheduleNode(phase, node)` + `cancelNode(node)`,\n *     where `node` implements `KeepaliveNode`. No wrapper alloc, no\n *     Map lookup. The caller's object IS the linked-list node. Used\n *     by hot-path classes (the animation-timing loop) where one node\n *     is allocated per play and we don't want any extras.\n */\n\nexport type FrameJob = (state: FrameState) => void\n\nexport interface FrameState {\n  /** Clock time at the start of this tick, in ms. */\n  readonly time: number\n  /** Delta from the previous tick, in ms. `0` on the first tick. */\n  readonly delta: number\n  /** Monotonic tick index, starting at 0. */\n  readonly tick: number\n}\n\nexport type Phase = \"read\" | \"compute\" | \"update\" | \"render\"\n\nconst PHASES: readonly Phase[] = [\"read\", \"compute\", \"update\", \"render\"]\n\nexport interface RafLike {\n  request(cb: (time: number) => void): number\n  cancel(id: number): void\n}\n\nconst defaultRaf: RafLike = (() => {\n  if (typeof requestAnimationFrame === \"function\" && typeof cancelAnimationFrame === \"function\") {\n    return {\n      request: (cb) => requestAnimationFrame(cb),\n      cancel: (id) => cancelAnimationFrame(id),\n    }\n  }\n  // Fallback: simulate ~60fps via setTimeout. Used in non-DOM envs.\n  return {\n    request: (cb) => setTimeout(() => cb(Date.now()), 16) as unknown as number,\n    cancel: (id) => clearTimeout(id as unknown as ReturnType<typeof setTimeout>),\n  }\n})()\n\nexport interface FrameSchedulerOpts {\n  readonly raf?: RafLike\n  readonly now?: () => number\n}\n\n/**\n * A node in the keepalive list. Consumers can implement this directly\n * on their hot-path class to avoid the wrapper-node + Map-lookup\n * allocation that `schedule(phase, fn, { keepalive: true })` pays per\n * registration. The `_ka*` fields are scheduler-owned. Consumers must\n * initialize them to the values shown below and never write to them\n * afterwards.\n *\n * State machine:\n *   (phase=null, dead=false)   not linked (initial)\n *   (phase=X,    dead=false)   linked and alive\n *   (phase=X,    dead=true)    linked but cancelled (awaiting unlink)\n * The walker unlinks dead nodes when it reaches them, at which point\n * the node returns to the \"not linked\" state and can be re-registered.\n */\nexport interface KeepaliveNode {\n  _kaPrev: KeepaliveNode | null\n  _kaNext: KeepaliveNode | null\n  _kaPhase: Phase | null\n  _kaDead: boolean\n  _kaTick(state: FrameState): void\n}\n\n/**\n * Internal adapter for the fn-based keepalive API. One instance\n * allocated per `schedule(phase, fn, { keepalive: true })` call.\n * External callers that want zero wrapper overhead should implement\n * `KeepaliveNode` directly and use `scheduleNode`/`cancelNode`.\n */\nclass FnNode implements KeepaliveNode {\n  _kaPrev: KeepaliveNode | null = null\n  _kaNext: KeepaliveNode | null = null\n  _kaPhase: Phase | null = null\n  _kaDead = false\n  constructor(public fn: FrameJob) {}\n  _kaTick(state: FrameState): void {\n    this.fn(state)\n  }\n}\n\ninterface PhaseQueue {\n  /** Jobs to run on the next tick only. */\n  jobs: FrameJob[]\n  /** Head/tail of the keepalive linked list (insertion-ordered). */\n  head: KeepaliveNode | null\n  tail: KeepaliveNode | null\n  /** fn -> FnNode lookup for the fn-based API (O(1) dedupe + cancel). */\n  fnLookup: Map<FrameJob, FnNode>\n  /** Count of alive (non-dead) nodes. Kept in sync so empty-phase skip stays O(1). */\n  size: number\n}\n\nexport interface FrameScheduler {\n  /** Enqueue `fn` to run in `phase` on the next frame. */\n  schedule(phase: Phase, fn: FrameJob, opts?: { keepalive?: boolean }): void\n  /** Remove a keepalive fn. No-op if the fn is not registered. */\n  cancel(phase: Phase, fn: FrameJob): void\n  /**\n   * Link a KeepaliveNode into `phase`'s keepalive list. No-op if the\n   * node is already linked in the same phase (dedupe). Reviving a\n   * dead-but-still-linked node un-dies it in place (preserves list\n   * position).\n   */\n  scheduleNode(phase: Phase, node: KeepaliveNode): void\n  /** Unlink a KeepaliveNode. No-op if the node is not registered. */\n  cancelNode(node: KeepaliveNode): void\n  /** Force a tick synchronously. Test-only; returns the consumed state. */\n  flushSync(time?: number): FrameState\n  /** Current tick index (advances after each tick). */\n  readonly tick: number\n  /** True while the RAF loop is scheduled. */\n  readonly isRunning: boolean\n}\n\nexport function createFrameScheduler(opts: FrameSchedulerOpts = {}): FrameScheduler {\n  const raf = opts.raf ?? defaultRaf\n  const nowFn =\n    opts.now ??\n    ((): number => (typeof performance !== \"undefined\" ? performance.now() : Date.now()))\n\n  const makeQueue = (): PhaseQueue => ({\n    jobs: [],\n    head: null,\n    tail: null,\n    fnLookup: new Map(),\n    size: 0,\n  })\n\n  const queues: Record<Phase, PhaseQueue> = {\n    read: makeQueue(),\n    compute: makeQueue(),\n    update: makeQueue(),\n    render: makeQueue(),\n  }\n\n  let rafId: number | null = null\n  let tickIndex = 0\n  let lastTime = -1\n  // O(1) work counter: incremented on schedule/add, decremented on\n  // drain/cancel. Replaces the per-tick 4-phase scan hasWork() used to\n  // do. `jobsCount` tracks one-shot jobs in flight; `keepCount` tracks\n  // alive keepalive registrations. `hasWork()` is\n  // `(jobsCount + keepCount) > 0`.\n  let jobsCount = 0\n  let keepCount = 0\n\n  const hasWork = (): boolean => jobsCount + keepCount > 0\n\n  const linkAtTail = (q: PhaseQueue, node: KeepaliveNode, phase: Phase): void => {\n    node._kaPhase = phase\n    node._kaDead = false\n    node._kaPrev = q.tail\n    node._kaNext = null\n    if (q.tail) q.tail._kaNext = node\n    else q.head = node\n    q.tail = node\n    q.size++\n    keepCount++\n  }\n\n  const runTick = (time: number): FrameState => {\n    const delta = lastTime < 0 ? 0 : time - lastTime\n    lastTime = time\n    const state: FrameState = { time, delta, tick: tickIndex }\n\n    for (const phase of PHASES) {\n      const q = queues[phase]\n      const jobsLen = q.jobs.length\n      const keepSize = q.size\n      // Skip the whole phase when there's nothing to run.\n      if (jobsLen === 0 && keepSize === 0) continue\n\n      if (jobsLen > 0) {\n        // Snapshot the one-shot list so jobs enqueued during this phase\n        // (for any phase) don't run until the next frame.\n        const pending = q.jobs\n        q.jobs = []\n        jobsCount -= jobsLen\n        for (let i = 0; i < jobsLen; i++) {\n          const job = pending[i]\n          if (job) job(state)\n        }\n      }\n\n      if (keepSize > 0) {\n        // Walk the linked list. Nodes cancelled during this walk get\n        // marked `dead`; the walker unlinks dead nodes it encounters,\n        // so the `next` pointer for the current cursor stays valid.\n        let node = q.head\n        while (node !== null) {\n          const next = node._kaNext\n          if (node._kaDead) {\n            // Unlink, then reset so the node can be re-registered.\n            if (node._kaPrev) node._kaPrev._kaNext = next\n            else q.head = next\n            if (next) next._kaPrev = node._kaPrev\n            else q.tail = node._kaPrev\n            node._kaPrev = null\n            node._kaNext = null\n            node._kaPhase = null\n            node._kaDead = false\n          } else {\n            node._kaTick(state)\n          }\n          node = next\n        }\n      }\n    }\n\n    tickIndex++\n    return state\n  }\n\n  const loop = (time: number): void => {\n    rafId = null\n    runTick(time)\n    if (hasWork()) {\n      rafId = raf.request(loop)\n    } else {\n      lastTime = -1\n    }\n  }\n\n  const wake = (): void => {\n    if (rafId !== null) return\n    rafId = raf.request(loop)\n  }\n\n  const cancelRafIfIdle = (): void => {\n    if (!hasWork() && rafId !== null) {\n      raf.cancel(rafId)\n      rafId = null\n      lastTime = -1\n    }\n  }\n\n  const scheduleNode = (phase: Phase, node: KeepaliveNode): void => {\n    if (node._kaPhase !== null) {\n      // Already linked. Enforce same-phase (migrating across phases\n      // is out of scope). If dead-but-linked, revive in place.\n      if (node._kaPhase !== phase) return\n      if (node._kaDead) {\n        node._kaDead = false\n        queues[phase].size++\n        keepCount++\n      }\n      wake()\n      return\n    }\n    linkAtTail(queues[phase], node, phase)\n    wake()\n  }\n\n  const cancelNode = (node: KeepaliveNode): void => {\n    if (node._kaPhase === null || node._kaDead) return\n    node._kaDead = true\n    queues[node._kaPhase].size--\n    keepCount--\n    cancelRafIfIdle()\n  }\n\n  return {\n    schedule(phase, fn, o) {\n      const q = queues[phase]\n      if (o?.keepalive) {\n        const existing = q.fnLookup.get(fn)\n        if (existing !== undefined) {\n          // Same fn: dedupe. Revive if dead, else no-op.\n          if (existing._kaDead) {\n            existing._kaDead = false\n            q.size++\n            keepCount++\n          }\n          wake()\n          return\n        }\n        const node = new FnNode(fn)\n        q.fnLookup.set(fn, node)\n        linkAtTail(q, node, phase)\n        wake()\n      } else {\n        q.jobs.push(fn)\n        jobsCount++\n        wake()\n      }\n    },\n    cancel(phase, fn) {\n      const q = queues[phase]\n      const node = q.fnLookup.get(fn)\n      if (node !== undefined && !node._kaDead) {\n        node._kaDead = true\n        q.fnLookup.delete(fn)\n        q.size--\n        keepCount--\n        cancelRafIfIdle()\n      }\n    },\n    scheduleNode,\n    cancelNode,\n    flushSync(time = nowFn()) {\n      if (rafId !== null) {\n        raf.cancel(rafId)\n        rafId = null\n      }\n      const state = runTick(time)\n      if (hasWork()) rafId = raf.request(loop)\n      else lastTime = -1\n      return state\n    },\n    get tick() {\n      return tickIndex\n    },\n    get isRunning() {\n      return rafId !== null\n    },\n  }\n}\n\n/**\n * Shared process-wide scheduler. Production code should use this so\n * all animations share one RAF loop. Tests should construct their own\n * via `createFrameScheduler` with a mock `raf` / `now`.\n */\nexport const frame: FrameScheduler = createFrameScheduler()\n","/**\n * Monotonic time source for the scheduler. Produces virtual time that\n * advances with real time while active, pauses on demand, and can be\n * scaled via `setSpeed` for slow-motion / fast-forward debugging.\n *\n * The clock is a *value*, not a global: callers can construct their own\n * (e.g. a mock clock in tests) and pass it wherever a `Clock` is expected.\n * A shared process-wide default is exposed as `defaultClock`.\n *\n * Implemented as a class so the public methods live on the prototype\n * once rather than being reallocated as closures per clock. Every\n * `createTiming` constructs a fresh clock when the caller doesn't supply\n * one, so at n=1000 plays that's 6000 fewer closure allocs per cycle.\n */\n\nexport type NowFn = () => number\n\nexport interface Clock {\n  /** Current virtual time in milliseconds. Monotonically non-decreasing. */\n  now(): number\n  /**\n   * Same semantics as `now()`, but uses the caller-supplied real-time\n   * timestamp instead of calling the internal `nowFn` again. Lets the\n   * rAF-driven Timing reuse the scheduler's frame time and avoid a\n   * redundant `performance.now()` per tick per animation.\n   */\n  nowAt(realTime: number): number\n  pause(): void\n  resume(): void\n  readonly paused: boolean\n  /**\n   * Set the speed multiplier. `1` is real-time, `0.5` is half speed,\n   * `2` is double speed. Values <= 0 are rejected; pass 0 via `pause()`.\n   */\n  setSpeed(multiplier: number): void\n  readonly speed: number\n  /** Reset virtual time back to zero without pausing. */\n  reset(): void\n}\n\nexport interface ClockOpts {\n  /** Real-time source. Defaults to `performance.now` (or `Date.now`). */\n  readonly now?: NowFn\n  /** Initial speed multiplier. Defaults to 1. */\n  readonly speed?: number\n}\n\nconst realNow: NowFn = (() => {\n  if (typeof performance !== \"undefined\" && typeof performance.now === \"function\") {\n    return () => performance.now()\n  }\n  return () => Date.now()\n})()\n\nclass ClockImpl implements Clock {\n  readonly #nowFn: NowFn\n  #speed: number\n  // Virtual time accrues from an anchor expressed in real time.\n  // Invariant while running: virtual = (real - anchorReal) * speed + anchorVirtual.\n  #anchorReal: number\n  #anchorVirtual = 0\n  #paused = false\n\n  constructor(opts: ClockOpts) {\n    const speed = opts.speed ?? 1\n    if (!(speed > 0)) {\n      throw new Error(`createClock(): speed must be > 0 (got ${speed}); use pause() to halt`)\n    }\n    this.#nowFn = opts.now ?? realNow\n    this.#speed = speed\n    this.#anchorReal = this.#nowFn()\n  }\n\n  #flush(): void {\n    const real = this.#nowFn()\n    this.#anchorVirtual += (real - this.#anchorReal) * this.#speed\n    this.#anchorReal = real\n  }\n\n  now(): number {\n    if (this.#paused) return this.#anchorVirtual\n    return this.#anchorVirtual + (this.#nowFn() - this.#anchorReal) * this.#speed\n  }\n\n  nowAt(realTime: number): number {\n    if (this.#paused) return this.#anchorVirtual\n    return this.#anchorVirtual + (realTime - this.#anchorReal) * this.#speed\n  }\n\n  pause(): void {\n    if (this.#paused) return\n    this.#flush()\n    this.#paused = true\n  }\n\n  resume(): void {\n    if (!this.#paused) return\n    this.#anchorReal = this.#nowFn()\n    this.#paused = false\n  }\n\n  get paused(): boolean {\n    return this.#paused\n  }\n\n  setSpeed(multiplier: number): void {\n    if (!(multiplier > 0)) {\n      throw new Error(`setSpeed(): multiplier must be > 0 (got ${multiplier})`)\n    }\n    if (!this.#paused) this.#flush()\n    this.#speed = multiplier\n  }\n\n  get speed(): number {\n    return this.#speed\n  }\n\n  reset(): void {\n    this.#anchorReal = this.#nowFn()\n    this.#anchorVirtual = 0\n  }\n}\n\nexport function createClock(opts: ClockOpts = {}): Clock {\n  return new ClockImpl(opts)\n}\n\n/** Shared default clock for production use. Tests should create their own. */\nexport const defaultClock: Clock = createClock()\n","/**\n * Shared animation state machine used by both the DOM rAF backend and\n * non-DOM drivers (canvas, WebGL). Owns progress tracking, pause/\n * resume/seek/reverse/speed, and the finished promise. The caller\n * plugs in a `commit(values)` callback that does whatever rendering\n * the surface needs: applying DOM properties, drawing to a canvas, or\n * uploading a uniform.\n *\n * Implemented as a class so the public methods live on the prototype\n * rather than being reallocated as closures per play. The class also\n * directly implements `KeepaliveNode`, which lets it register into\n * the scheduler's keepalive list without allocating a wrapper node\n * or storing a `Map<fn, node>` entry. Per play, we allocate: the\n * Timing instance itself, a lazy promise, and a clock if one wasn't\n * supplied. No per-instance tick closure.\n *\n * A single tick runs in the scheduler's `update` phase and does both\n * progress computation and the `commit()` render. The 4-phase\n * scheduler separates `compute` from `update` to support systems that\n * need strict read-before-write ordering (e.g. DOM-reading then\n * DOM-writing animations that would otherwise layout-thrash). Our\n * compute side just samples clock time and runs the def's pure\n * interpolator; it never touches the DOM, so splitting it from update\n * would pay two scheduler ops per tick in exchange for a batching\n * opportunity we can't use. Halving the scheduler ops per play and\n * per steady-state frame is the real win.\n */\n\nimport { type LazyPromise, createLazyPromise } from \"../core/lazy-promise\"\nimport type { AnimationDef } from \"../core/types\"\nimport { type Clock, createClock } from \"../scheduler/clock\"\nimport {\n  type FrameScheduler,\n  type FrameState,\n  type KeepaliveNode,\n  type Phase,\n  frame as defaultFrame,\n} from \"../scheduler/frame\"\n\nexport type TimingState = \"idle\" | \"playing\" | \"paused\" | \"finished\" | \"cancelled\"\n\nexport interface TimingHandle {\n  pause(): void\n  resume(): void\n  /** Seek to `progress` in [0, 1]. Does not change play/pause state. */\n  seek(progress: number): void\n  /** Flip the playback direction. May resume a finished animation. */\n  reverse(): void\n  /** Set clock speed multiplier; must be > 0. */\n  setSpeed(multiplier: number): void\n  cancel(): void\n  readonly state: TimingState\n  readonly progress: number\n  readonly direction: 1 | -1\n  readonly finished: Promise<void>\n}\n\nexport interface TimingOpts {\n  readonly scheduler?: FrameScheduler\n  readonly clock?: Clock\n  readonly repeat?: boolean\n  readonly onFinish?: () => void\n}\n\nconst clamp01 = (p: number): number => (p <= 0 ? 0 : p >= 1 ? 1 : p)\n\nclass Timing<V> implements TimingHandle, KeepaliveNode {\n  readonly #scheduler: FrameScheduler\n  // Lazy. `null` until first access if the caller didn't supply one.\n  // `createClock()` costs an object alloc + a `performance.now()` call;\n  // cancel-before-first never needs a clock, so we skip both there.\n  #clock: Clock | null\n  readonly #def: AnimationDef<V>\n  readonly #commit: ((values: V) => void) | null\n  // Direct-render path: called with the current progress instead of\n  // with an interpolated values bag. When non-null, `#commit` is\n  // bypassed and the def's `commit(p, el)` path owns rendering end-to-\n  // end for every target. Set by `createTimingDirect`.\n  readonly #directRender: ((progress: number) => void) | null\n  readonly #opts: TimingOpts\n  readonly #duration: number\n  readonly #lp: LazyPromise\n  #state: TimingState = \"playing\"\n  #direction: 1 | -1 = 1\n  #anchorProgress = 0\n  #anchorTime = 0\n  #progress = 0\n  #needsRender = true\n\n  // KeepaliveNode fields. Scheduler-owned; do not touch outside the\n  // scheduler. Initialized so the scheduler sees a fresh node on\n  // first registration.\n  _kaPrev: KeepaliveNode | null = null\n  _kaNext: KeepaliveNode | null = null\n  _kaPhase: Phase | null = null\n  _kaDead = false\n\n  constructor(\n    def: AnimationDef<V>,\n    commit: ((values: V) => void) | null,\n    directRender: ((progress: number) => void) | null,\n    opts: TimingOpts = {},\n  ) {\n    const duration = def.duration\n    if (!(duration > 0) || !Number.isFinite(duration)) {\n      throw new Error(`createTiming(): animation duration must be finite and > 0 (got ${duration})`)\n    }\n    this.#scheduler = opts.scheduler ?? defaultFrame\n    // Accept a caller-supplied clock eagerly (tests use this). Otherwise\n    // defer `createClock()` until first tick. No `.reset()` — a freshly\n    // constructed clock is already anchored to the current moment.\n    this.#clock = opts.clock ?? null\n    this.#def = def\n    this.#commit = commit\n    this.#directRender = directRender\n    this.#opts = opts\n    this.#duration = duration\n    this.#lp = createLazyPromise()\n    this.#armKeepalive()\n  }\n\n  #ensureClock(): Clock {\n    let c = this.#clock\n    if (c === null) {\n      c = createClock()\n      this.#clock = c\n    }\n    return c\n  }\n\n  // Prototype method (shared across all Timing instances) — no per-\n  // instance closure allocation. The scheduler walks the keepalive\n  // list and calls `_kaTick(state)` on each node.\n  _kaTick(state: FrameState): void {\n    if (this.#state === \"playing\") {\n      this.#progress = this.#computeProgress(state.time)\n      this.#needsRender = true\n      if (this.#isFinished(this.#progress)) {\n        this.#progress = this.#direction === 1 ? 1 : 0\n        this.#render()\n        this.#needsRender = false\n        this.#state = \"finished\"\n        this.#disarm()\n        this.#opts.onFinish?.()\n        this.#lp.resolve()\n        return\n      }\n    }\n    if (this.#needsRender) {\n      this.#render()\n      this.#needsRender = false\n      if (this.#state === \"paused\") this.#disarm()\n    }\n  }\n\n  // `realTime`, when provided, is the scheduler's frame timestamp\n  // (same source as the clock's internal `nowFn`). Reusing it lets the\n  // steady-state tick skip one `performance.now()` call per animation\n  // per frame.\n  #computeProgress(realTime?: number): number {\n    const clock = this.#ensureClock()\n    const now = realTime !== undefined ? clock.nowAt(realTime) : clock.now()\n    const elapsed = (now - this.#anchorTime) / this.#duration\n    const raw = this.#anchorProgress + this.#direction * elapsed\n    if (this.#opts.repeat) {\n      return ((raw % 1) + 1) % 1\n    }\n    return clamp01(raw)\n  }\n\n  #render(): void {\n    if (this.#directRender !== null) {\n      this.#directRender(this.#progress)\n    } else {\n      // `#commit` is always set when `#directRender` is null — the\n      // factory functions enforce that invariant.\n      ;(this.#commit as (v: V) => void)(this.#def.interpolate(this.#progress))\n    }\n  }\n\n  #armKeepalive(): void {\n    this.#scheduler.scheduleNode(\"update\", this)\n  }\n\n  #disarm(): void {\n    this.#scheduler.cancelNode(this)\n  }\n\n  // One-shot re-render scheduled after seek/reverse from a paused\n  // state. Allocates an arrow closure (the fn-based one-shot API\n  // takes a FrameJob); cold path, runs once per user-initiated\n  // seek/reverse, so the alloc is fine.\n  #scheduleOneShotTick(): void {\n    this.#scheduler.schedule(\"update\", (state) => this._kaTick(state))\n  }\n\n  #isFinished(p: number): boolean {\n    if (this.#opts.repeat) return false\n    return (this.#direction === 1 && p >= 1) || (this.#direction === -1 && p <= 0)\n  }\n\n  #rebase(): void {\n    this.#anchorProgress = this.#progress\n    this.#anchorTime = this.#ensureClock().now()\n  }\n\n  pause(): void {\n    if (this.#state !== \"playing\") return\n    this.#progress = this.#computeProgress()\n    this.#ensureClock().pause()\n    this.#rebase()\n    this.#state = \"paused\"\n    this.#needsRender = true\n  }\n\n  resume(): void {\n    if (this.#state !== \"paused\") return\n    this.#ensureClock().resume()\n    this.#rebase()\n    this.#state = \"playing\"\n    this.#armKeepalive()\n  }\n\n  seek(p: number): void {\n    if (this.#state === \"cancelled\") return\n    const clamped = clamp01(p)\n    this.#progress = clamped\n    this.#rebase()\n    this.#needsRender = true\n    if (this.#state === \"finished\" && !this.#isFinished(clamped)) {\n      this.#state = \"playing\"\n      this.#armKeepalive()\n    } else if (this.#state === \"paused\") {\n      this.#scheduleOneShotTick()\n    }\n  }\n\n  reverse(): void {\n    if (this.#state === \"cancelled\") return\n    this.#progress = this.#computeProgress()\n    this.#rebase()\n    this.#direction = (this.#direction === 1 ? -1 : 1) as 1 | -1\n    this.#needsRender = true\n    if (this.#state === \"finished\" && !this.#isFinished(this.#progress)) {\n      this.#state = \"playing\"\n      this.#armKeepalive()\n    } else if (this.#state === \"paused\") {\n      this.#scheduleOneShotTick()\n    }\n  }\n\n  setSpeed(multiplier: number): void {\n    if (this.#state === \"cancelled\") return\n    // Validate before rebasing. `clock.setSpeed` rejects <= 0 multipliers\n    // by throwing; if we rebase first, the anchor mutates and the next\n    // progress read would be inconsistent with the unchanged clock speed.\n    if (!(multiplier > 0)) {\n      throw new Error(`setSpeed(): multiplier must be > 0 (got ${multiplier})`)\n    }\n    if (this.#state === \"playing\") this.#progress = this.#computeProgress()\n    this.#rebase()\n    this.#ensureClock().setSpeed(multiplier)\n  }\n\n  cancel(): void {\n    if (this.#state === \"finished\" || this.#state === \"cancelled\") return\n    this.#state = \"cancelled\"\n    this.#disarm()\n    this.#lp.rejectCancelled()\n  }\n\n  get state(): TimingState {\n    return this.#state\n  }\n\n  get progress(): number {\n    return this.#progress\n  }\n\n  get direction(): 1 | -1 {\n    return this.#direction\n  }\n\n  get finished(): Promise<void> {\n    return this.#lp.promise\n  }\n}\n\n/**\n * Build a `TimingHandle` that drives `def.interpolate(progress)` and\n * calls `commit(values)` whenever a new frame should be rendered.\n */\nexport function createTiming<V>(\n  def: AnimationDef<V>,\n  commit: (values: V) => void,\n  opts: TimingOpts = {},\n): TimingHandle {\n  return new Timing(def, commit, null, opts)\n}\n\n/**\n * Build a `TimingHandle` that invokes `render(progress)` directly on\n * every frame, skipping `def.interpolate()`. Used by backends that can\n * commit values straight to their target surface via `def.commit(p, el)`\n * (e.g. the rAF DOM path) without materializing a values bag.\n *\n * @internal\n */\nexport function createTimingDirect<V>(\n  def: AnimationDef<V>,\n  render: (progress: number) => void,\n  opts: TimingOpts = {},\n): TimingHandle {\n  return new Timing(def, null, render, opts)\n}\n","/**\n * rAF rendering backend. Drives an `AnimationDef<Record<string, ...>>`\n * against one or more DOM-like targets by committing the interpolated\n * values as CSS properties or SVG attributes each frame.\n *\n * All timing logic (progress, pause, resume, seek, reverse, speed,\n * cancel) lives in `timing.ts` so non-DOM drivers can share it. This\n * module is the DOM adapter: every tick, walk the targets and commit.\n *\n * When the def carries a pre-classified `commit(p, el)` path (set by\n * `tween()`), we skip `def.interpolate()` and the per-frame\n * `applyValues()` classify-and-branch loop, writing values directly\n * to each target with one pass.\n */\n\nimport type { AnimationDef } from \"../core/types\"\nimport { type ElementShim, type PropertyValue, applyValues } from \"./apply\"\nimport { type TimingHandle, type TimingOpts, createTiming, createTimingDirect } from \"./timing\"\n\nexport type RafState = TimingHandle[\"state\"]\nexport type RafHandle = TimingHandle\nexport type RafOpts = TimingOpts\n\nexport type PropertyMap = Readonly<Record<string, PropertyValue>>\n\nexport function playRaf(\n  def: AnimationDef<PropertyMap>,\n  targets: readonly ElementShim[],\n  opts: RafOpts = {},\n): RafHandle {\n  const directCommit = def.commit\n  if (directCommit) {\n    return createTimingDirect(\n      def,\n      (progress) => {\n        for (let i = 0; i < targets.length; i++) {\n          const el = targets[i]\n          if (el) directCommit(progress, el)\n        }\n      },\n      opts,\n    )\n  }\n  return createTiming(\n    def,\n    (values) => {\n      for (let i = 0; i < targets.length; i++) {\n        const el = targets[i]\n        if (el) applyValues(el, values)\n      }\n    },\n    opts,\n  )\n}\n","/**\n * WAAPI rendering backend. Converts an `AnimationDef` into native\n * `Element.animate()` calls by sampling the animation at a fixed rate\n * and emitting a keyframes array.\n *\n * Because values already include the animation's easing at each\n * sample, WAAPI's own timing function is always `\"linear\"` — this\n * keeps the browser honest and supports arbitrary easings (springs,\n * custom functions) uniformly. Fewer samples work fine for linear /\n * cubic-bezier easings; a router may pre-detect those to emit a\n * two-keyframe animation with a CSS easing string, but that's an\n * optimization layered on top.\n *\n * Transform pseudo props (x, y, scale, rotate, …) compose into a\n * single `transform` keyframe per sample in a canonical order.\n */\n\nimport { getCssEasing, linear } from \"../core/easing\"\nimport { type LazyPromise, createLazyPromise } from \"../core/lazy-promise\"\nimport type { AnimationDef } from \"../core/types\"\nimport type { FrameScheduler } from \"../scheduler/frame\"\nimport { pseudoToTransformFn } from \"./properties\"\n\nexport interface WaapiAnimation {\n  pause(): void\n  play(): void\n  cancel(): void\n  finish(): void\n  reverse(): void\n  // Native `Animation.currentTime` is `CSSNumberish | null`. We only assign\n  // numbers to this field; the broader type keeps real DOM elements\n  // assignable to the minimal `Animatable` surface.\n  // Native `Animation.currentTime` is `CSSNumberish | null`, and\n  // `onfinish` / `oncancel` carry a typed `AnimationPlaybackEvent`.\n  // We deliberately relax these fields so `HTMLElement.animate()` return\n  // values satisfy this minimal interface. Core only ever writes numbers\n  // to `currentTime` and zero-arg callbacks to the event handlers.\n  currentTime: unknown\n  playbackRate: number\n  readonly finished: Promise<unknown>\n  onfinish: unknown\n  oncancel: unknown\n}\n\nexport interface Animatable {\n  animate(\n    keyframes: Keyframe[],\n    options: { duration: number; easing: string; fill?: \"forwards\" | \"none\" | \"both\" },\n  ): WaapiAnimation\n}\n\nexport interface Keyframe {\n  offset?: number\n  transform?: string\n  [key: string]: string | number | undefined\n}\n\nexport type WaapiState = \"idle\" | \"playing\" | \"paused\" | \"finished\" | \"cancelled\"\n\nexport interface WaapiHandle {\n  pause(): void\n  resume(): void\n  seek(progress: number): void\n  reverse(): void\n  setSpeed(multiplier: number): void\n  cancel(): void\n  readonly state: WaapiState\n  readonly progress: number\n  readonly direction: 1 | -1\n  readonly finished: Promise<void>\n}\n\nexport interface WaapiOpts {\n  /**\n   * Sample density in samples per millisecond. Default 1/16 (~60hz).\n   * Higher values produce smoother keyframes at the cost of memory.\n   */\n  readonly sampleRateHz?: number\n  /** Minimum total samples regardless of duration. Default 5. */\n  readonly minSamples?: number\n  /** Maximum total samples regardless of duration. Default 300. */\n  readonly maxSamples?: number\n  /** Fill mode for the WAAPI animation. Default `\"forwards\"`. */\n  readonly fill?: \"forwards\" | \"none\" | \"both\"\n}\n\n/** Default unit tags applied to numeric pseudo transform values. */\nconst PSEUDO_UNIT: Record<string, string> = {\n  translateX: \"px\",\n  translateY: \"px\",\n  translateZ: \"px\",\n  rotate: \"deg\",\n  rotateX: \"deg\",\n  rotateY: \"deg\",\n  rotateZ: \"deg\",\n  skew: \"deg\",\n  skewX: \"deg\",\n  skewY: \"deg\",\n  scale: \"\",\n  scaleX: \"\",\n  scaleY: \"\",\n  scaleZ: \"\",\n}\n\nconst TRANSFORM_ORDER: readonly string[] = [\n  \"translateX\",\n  \"translateY\",\n  \"translateZ\",\n  \"rotate\",\n  \"rotateX\",\n  \"rotateY\",\n  \"rotateZ\",\n  \"scale\",\n  \"scaleX\",\n  \"scaleY\",\n  \"scaleZ\",\n  \"skew\",\n  \"skewX\",\n  \"skewY\",\n]\n\nfunction formatPseudo(fn: string, value: unknown): string {\n  if (typeof value === \"string\") return `${fn}(${value})`\n  const unit = PSEUDO_UNIT[fn] ?? \"\"\n  return `${fn}(${String(value)}${unit})`\n}\n\nfunction sampleCount(duration: number, opts: WaapiOpts): number {\n  const rate = opts.sampleRateHz ?? 1 / 16\n  const min = opts.minSamples ?? 5\n  const max = opts.maxSamples ?? 300\n  const n = Math.ceil(duration * rate) + 1\n  return Math.max(min, Math.min(max, n))\n}\n\n/**\n * Build the WAAPI keyframes array from an AnimationDef. Separated from\n * the `animate` call so tests can verify the conversion without a DOM.\n */\nexport function buildKeyframes(\n  def: AnimationDef<Readonly<Record<string, unknown>>>,\n  opts: WaapiOpts = {},\n): Keyframe[] {\n  const n = sampleCount(def.duration, opts)\n  const frames: Keyframe[] = new Array(n)\n  for (let i = 0; i < n; i++) {\n    const offset = n === 1 ? 0 : i / (n - 1)\n    const values = def.interpolate(offset)\n    frames[i] = toKeyframe(values, offset)\n  }\n  return frames\n}\n\ninterface WaapiPlan {\n  readonly frames: Keyframe[]\n  readonly easing: string\n}\n\n// Common real-world pattern: one AnimationDef shared across many targets\n// (`const def = tween(...); els.forEach(el => play(def, el))`). Each play\n// goes through planWaapi and used to re-sample the same def to the same\n// keyframes from scratch. Cache per def so only the first play does the\n// work; the rest share the keyframes array (which WAAPI's `animate()`\n// treats as read-only input).\n//\n// Only cache when opts use the defaults that affect sampleCount. Callers\n// that override sampleRateHz / minSamples / maxSamples would need a\n// second-level key; they're rare enough that bypassing the cache is the\n// right trade.\nconst planCache = new WeakMap<AnimationDef<Readonly<Record<string, unknown>>>, WaapiPlan>()\n\nfunction hasDefaultSamplingOpts(opts: WaapiOpts): boolean {\n  return (\n    opts.sampleRateHz === undefined &&\n    opts.minSamples === undefined &&\n    opts.maxSamples === undefined\n  )\n}\n\nfunction planWaapiUncached(\n  def: AnimationDef<Readonly<Record<string, unknown>>>,\n  opts: WaapiOpts,\n): WaapiPlan {\n  const cssEasing = def.linearizable ? getCssEasing(def.easing ?? linear) : undefined\n  if (cssEasing !== undefined) {\n    return {\n      frames: [toKeyframe(def.interpolate(0), 0), toKeyframe(def.interpolate(1), 1)],\n      easing: cssEasing,\n    }\n  }\n  return { frames: buildKeyframes(def, opts), easing: \"linear\" }\n}\n\nfunction planWaapi(\n  def: AnimationDef<Readonly<Record<string, unknown>>>,\n  opts: WaapiOpts,\n): WaapiPlan {\n  if (!hasDefaultSamplingOpts(opts)) return planWaapiUncached(def, opts)\n  const cached = planCache.get(def)\n  if (cached !== undefined) return cached\n  const plan = planWaapiUncached(def, opts)\n  planCache.set(def, plan)\n  return plan\n}\n\nfunction toKeyframe(values: Readonly<Record<string, unknown>>, offset: number): Keyframe {\n  const out: Keyframe = { offset }\n  // Common case (opacity, transform, filter, etc.) never hits the pseudo\n  // branch, so defer allocating the parts bag until we see the first\n  // pseudo key. This saves two objects per keyframe per sample.\n  let pseudo: Record<string, unknown> | null = null\n  let explicitTransform: string | null = null\n\n  for (const key in values) {\n    const value = values[key]\n    if (value === undefined) continue\n    if (key === \"transform\" && typeof value === \"string\") {\n      explicitTransform = value\n      continue\n    }\n    const fn = pseudoToTransformFn(key)\n    if (fn !== null) {\n      if (pseudo === null) pseudo = {}\n      pseudo[fn] = value\n      continue\n    }\n    // Only compositor-safe and pseudo props reach this function (main-\n    // tier props route to rAF). Compositor keys are already in the\n    // camelCase shape WAAPI wants, so skip the classify/kebab round-trip.\n    out[key] = value as string | number\n  }\n\n  if (pseudo !== null) {\n    const parts: string[] = []\n    for (const fn of TRANSFORM_ORDER) {\n      if (fn in pseudo) {\n        const value = pseudo[fn]\n        if (value !== undefined) parts.push(formatPseudo(fn, value))\n      }\n    }\n    out.transform = parts.join(\" \")\n  } else if (explicitTransform !== null) {\n    out.transform = explicitTransform\n  }\n\n  return out\n}\n\n// Class-based handle. The nine public methods + three getters live on\n// the prototype once instead of being allocated as fresh closures per\n// play, and the two per-animation event handlers share a single bound\n// pair across all targets. At n=1000 plays that's ~12,000 fewer closure\n// allocations per bench cycle.\n//\n// Supports both eager and lazy setup. The lazy path defers the\n// `Element.animate()` calls to the next scheduler tick so a cancel()\n// before the tick fires skips WAAPI setup entirely. Control-plane\n// calls made before setup update state directly or enqueue a replay\n// op that fires once the animations exist. This used to live in a\n// separate `LazyHandleImpl` wrapper class in strategy.ts, but the\n// wrapper only ever wrapped `playWaapi`, so it collapsed into here:\n// one handle per play instead of two, one LazyPromise instead of two.\nclass WaapiImpl implements WaapiHandle {\n  readonly #duration: number\n  readonly #lp: LazyPromise\n  // Null until setup runs. Lazy path sets this in `#runSetup`; eager\n  // path sets it in the constructor.\n  #animations: readonly WaapiAnimation[] | null = null\n  #state: WaapiState = \"playing\"\n  #direction: 1 | -1 = 1\n  #speed = 1\n  #remaining = 0\n  // Lazy-path: ops that came in before setup fired. Lazy-alloc; most\n  // plays get no control-plane calls before the first tick.\n  #pending: Array<(impl: WaapiImpl) => void> | null = null\n\n  constructor(\n    duration: number,\n    animations: readonly WaapiAnimation[] | null,\n    setup: (() => readonly WaapiAnimation[]) | null,\n    scheduler: FrameScheduler | null,\n  ) {\n    this.#duration = duration\n    this.#lp = createLazyPromise()\n    if (animations !== null) {\n      this.#installAnimations(animations)\n      return\n    }\n    // Lazy path. One-shot schedule: cheaper than keepalive (plain array\n    // push vs linked-list + Map insert). `cancel()` before the tick\n    // fires can't extract the entry from the queue; instead it sets\n    // `#state = \"cancelled\"` and `#runSetup` short-circuits on drain.\n    // Tried routing this through a keepalive registration (so\n    // `cancel()` could call `scheduler.cancel()` for immediate removal)\n    // and measured a ~3x regression on cancel-before-first at n=1000\n    // in exchange for preventing queue bloat in backgrounded tabs\n    // (a non-goal for foreground perf). Stay on the one-shot path.\n    ;(scheduler as FrameScheduler).schedule(\n      \"update\",\n      this.#runSetup.bind(this, setup as () => readonly WaapiAnimation[]),\n    )\n  }\n\n  #runSetup(setup: () => readonly WaapiAnimation[]): void {\n    if (this.#state === \"cancelled\") return\n    this.#installAnimations(setup())\n    const pending = this.#pending\n    if (pending !== null) {\n      for (const op of pending) op(this)\n      this.#pending = null\n    }\n  }\n\n  #installAnimations(animations: readonly WaapiAnimation[]): void {\n    this.#animations = animations\n    this.#remaining = animations.length\n    if (this.#remaining === 0) {\n      if (this.#state === \"playing\") {\n        this.#state = \"finished\"\n        this.#lp.resolve()\n      }\n      return\n    }\n    // Bind once, assign N times. `.bind()` allocates a function object\n    // per call, so two binds total per play regardless of target count.\n    const onFinish = this.#onAnimationFinish.bind(this)\n    const onCancel = this.#onAnimationCancel.bind(this)\n    for (let i = 0; i < animations.length; i++) {\n      const a = animations[i] as WaapiAnimation\n      a.onfinish = onFinish\n      a.oncancel = onCancel\n    }\n    // Reflect any pre-setup state changes. `reverse` / `setSpeed` before\n    // the first tick mutate `#direction` / `#speed`; apply the combined\n    // rate here so animations start on the right direction/speed.\n    const rate = this.#direction * this.#speed\n    if (rate !== 1) {\n      for (const a of animations) a.playbackRate = rate\n    }\n    if (this.#state === \"paused\") {\n      for (const a of animations) a.pause()\n    }\n  }\n\n  #queue(op: (impl: WaapiImpl) => void): void {\n    if (this.#pending === null) this.#pending = [op]\n    else this.#pending.push(op)\n  }\n\n  #onAnimationFinish(): void {\n    this.#remaining--\n    if (this.#remaining === 0 && this.#state === \"playing\") {\n      this.#state = \"finished\"\n      this.#lp.resolve()\n    }\n  }\n\n  #onAnimationCancel(): void {\n    if (this.#state === \"playing\" || this.#state === \"paused\") {\n      this.#state = \"cancelled\"\n      this.#lp.rejectCancelled()\n    }\n  }\n\n  #syncPlaybackRate(): void {\n    const animations = this.#animations\n    if (animations === null) return\n    const rate = this.#direction * this.#speed\n    for (const a of animations) a.playbackRate = rate\n  }\n\n  pause(): void {\n    if (this.#state !== \"playing\") return\n    this.#state = \"paused\"\n    const animations = this.#animations\n    if (animations !== null) {\n      for (const a of animations) a.pause()\n    }\n    // If pre-setup, `#installAnimations` will apply the paused state.\n  }\n\n  resume(): void {\n    if (this.#state !== \"paused\") return\n    this.#state = \"playing\"\n    const animations = this.#animations\n    if (animations !== null) {\n      for (const a of animations) a.play()\n    }\n  }\n\n  seek(p: number): void {\n    if (this.#state === \"cancelled\") return\n    const animations = this.#animations\n    if (animations === null) {\n      this.#queue(queuedSeek(p))\n      return\n    }\n    const clamped = p < 0 ? 0 : p > 1 ? 1 : p\n    const t = clamped * this.#duration\n    for (const a of animations) a.currentTime = t\n    if (this.#state === \"finished\") {\n      this.#state = \"playing\"\n      this.#remaining = animations.length\n      for (const a of animations) a.play()\n    }\n  }\n\n  reverse(): void {\n    if (this.#state === \"cancelled\") return\n    this.#direction = (this.#direction === 1 ? -1 : 1) as 1 | -1\n    const animations = this.#animations\n    if (animations === null) return\n    this.#syncPlaybackRate()\n    if (this.#state === \"finished\") {\n      // WAAPI resumes automatically when we flip playbackRate from\n      // a finished state at currentTime=duration, playing back to 0.\n      this.#state = \"playing\"\n      this.#remaining = animations.length\n      for (const a of animations) a.play()\n    }\n  }\n\n  setSpeed(multiplier: number): void {\n    if (this.#state === \"cancelled\") return\n    if (!(multiplier > 0)) {\n      throw new Error(`setSpeed(): multiplier must be > 0 (got ${multiplier})`)\n    }\n    this.#speed = multiplier\n    this.#syncPlaybackRate()\n  }\n\n  cancel(): void {\n    if (this.#state === \"finished\" || this.#state === \"cancelled\") return\n    this.#state = \"cancelled\"\n    const animations = this.#animations\n    if (animations !== null) {\n      for (const a of animations) a.cancel()\n    }\n    // Pre-setup path: `#runSetup` sees `#state === \"cancelled\"` and\n    // skips the entire `Element.animate()` loop. No animations were\n    // created, so there's nothing to cancel on the DOM side.\n    this.#lp.rejectCancelled()\n  }\n\n  get state(): WaapiState {\n    return this.#state\n  }\n\n  get progress(): number {\n    // Pre-setup: no animations yet, so nothing is on-screen. Report 0.\n    // WAAPI's currentTime is compositor-driven, so we read the first\n    // animation's currentTime rather than tracking a mirrored value.\n    // All sibling animations share the same clock by construction\n    // (same start, same playbackRate), so reading the first is fine.\n    const animations = this.#animations\n    if (animations === null || animations.length === 0) return 0\n    const t = (animations[0] as WaapiAnimation).currentTime\n    if (typeof t !== \"number\") return 0\n    const p = t / this.#duration\n    return p <= 0 ? 0 : p >= 1 ? 1 : p\n  }\n\n  get direction(): 1 | -1 {\n    return this.#direction\n  }\n\n  get finished(): Promise<void> {\n    return this.#lp.promise\n  }\n}\n\n// Seek ops carry a number, so we can't share a module-level arrow the\n// way pure-dispatch ops (pause/resume/reverse) could. Wrapping keeps\n// the closure local and small: a fresh one per pre-setup `seek()` call\n// in the rare case the caller seeks before the first tick.\nconst queuedSeek =\n  (p: number) =>\n  (impl: WaapiImpl): void =>\n    impl.seek(p)\n\n/**\n * Play a pre-computed WAAPI animation against the given targets.\n *\n * When `scheduler` is supplied, the `Element.animate()` calls are\n * deferred to the next scheduler tick, and `cancel()` before that tick\n * short-circuits the WAAPI setup entirely (no keyframes built, no DOM\n * writes, no native compositor negotiation). Omit `scheduler` to do\n * setup synchronously.\n */\nexport function playWaapi(\n  def: AnimationDef<Readonly<Record<string, unknown>>>,\n  targets: readonly Animatable[],\n  opts: WaapiOpts = {},\n  scheduler: FrameScheduler | null = null,\n): WaapiHandle {\n  if (!(def.duration > 0) || !Number.isFinite(def.duration)) {\n    throw new Error(`playWaapi(): animation duration must be finite and > 0 (got ${def.duration})`)\n  }\n  if (scheduler === null) {\n    return new WaapiImpl(def.duration, buildAnimations(def, targets, opts), null, null)\n  }\n  // Lazy path: the WaapiImpl schedules `setup()` for the next update\n  // tick. Capturing def/targets/opts in the closure is unavoidable,\n  // but there's only one such closure per play instead of the previous\n  // two-layer wrapper.\n  const setup = (): readonly WaapiAnimation[] => buildAnimations(def, targets, opts)\n  return new WaapiImpl(def.duration, null, setup, scheduler)\n}\n\nfunction buildAnimations(\n  def: AnimationDef<Readonly<Record<string, unknown>>>,\n  targets: readonly Animatable[],\n  opts: WaapiOpts,\n): readonly WaapiAnimation[] {\n  const { frames, easing: waapiEasing } = planWaapi(def, opts)\n  const fill = opts.fill ?? \"forwards\"\n  // Build the animations array inline (no `.map()` callback allocation)\n  // so we don't pay for an extra closure on the hot path.\n  const animations: WaapiAnimation[] = new Array(targets.length)\n  const animateOpts = { duration: def.duration, easing: waapiEasing, fill }\n  for (let i = 0; i < targets.length; i++) {\n    animations[i] = (targets[i] as Animatable).animate(frames, animateOpts)\n  }\n  return animations\n}\n","/**\n * Render strategy router. Inspects the properties an `AnimationDef`\n * produces, partitions them into compositor-safe vs main-thread sets,\n * and dispatches each half to the best available backend.\n *\n *   - compositor-safe → WAAPI when supported, else rAF\n *   - main-thread     → rAF\n *\n * Both halves share a view of the same source animation via `map()`,\n * so they stay in lock-step without an external coordinator.\n *\n * Consumers that want to force a specific backend can pass\n * `{ backend: \"raf\" | \"waapi\" }`; `\"auto\"` (the default) picks per\n * property group based on capability detection.\n */\n\nimport { createLazyPromise } from \"../core/lazy-promise\"\nimport { omitUndefined } from \"../core/omit-undefined\"\nimport { type ReducedMotion, shouldReduceMotion } from \"../core/reduced-motion\"\nimport type { AnimationDef } from \"../core/types\"\nimport { type FrameScheduler, frame as defaultFrame } from \"../scheduler/frame\"\nimport { type ElementShim, type PropertyValue, applyValues } from \"./apply\"\nimport { partitionByTier } from \"./properties\"\nimport { type RafOpts, playRaf } from \"./raf\"\nimport { createTiming } from \"./timing\"\nimport { type Animatable, type WaapiOpts, playWaapi } from \"./waapi\"\n\nexport type StrategyBackend = \"auto\" | \"waapi\" | \"raf\"\n\nexport type StrategyState = \"idle\" | \"playing\" | \"paused\" | \"finished\" | \"cancelled\"\n\nexport interface StrategyTarget extends ElementShim, Animatable {}\n\nexport interface StrategyHandle {\n  pause(): void\n  resume(): void\n  seek(progress: number): void\n  reverse(): void\n  setSpeed(multiplier: number): void\n  cancel(): void\n  readonly state: StrategyState\n  /** Current animation progress in [0, 1]. */\n  readonly progress: number\n  /** Current playback direction. `1` is forward, `-1` is reversed. */\n  readonly direction: 1 | -1\n  readonly finished: Promise<void>\n}\n\nexport interface StrategyOpts extends WaapiOpts, RafOpts {\n  readonly backend?: StrategyBackend\n  /**\n   * Override capability detection. Use for testing, or to force WAAPI\n   * on platforms where the probe would fail but you know it works.\n   */\n  readonly waapiSupported?: boolean\n  /**\n   * Defer the `Element.animate()` call for WAAPI-bound animations to\n   * the next scheduler tick. Cancelling the returned handle before the\n   * tick fires skips the WAAPI setup entirely. Default `true`.\n   *\n   * Useful for hover-flicker and rapid-toggle patterns where an\n   * animation may be cancelled before it ever reaches the compositor.\n   * Tests that assert synchronous WAAPI behavior should set `false`.\n   */\n  readonly lazy?: boolean\n  /**\n   * Honour `prefers-reduced-motion`. When the resolved decision is \"snap\",\n   * the final value is committed to every target immediately and no\n   * rAF/WAAPI setup happens; `finished` resolves on the next microtask.\n   *\n   * Defaults to whatever was set via `setReducedMotionDefault()`,\n   * which is `\"never\"` out of the box. Pass `\"user\"` per-call to\n   * delegate to the OS pref, or set the global default at app startup.\n   */\n  readonly reducedMotion?: ReducedMotion\n}\n\nexport type AnimationProps = Readonly<Record<string, PropertyValue>>\n\nlet waapiCache: boolean | null = null\n\n/**\n * Probe for WAAPI support by testing the prototype. The result is\n * cached at module scope; capability doesn't change over a page's\n * lifetime, and every `play()` that didn't pass `waapiSupported`\n * would otherwise re-run the prototype lookup.\n */\nexport function detectWaapi(): boolean {\n  if (waapiCache !== null) return waapiCache\n  if (typeof Element === \"undefined\") {\n    waapiCache = false\n    return false\n  }\n  const proto = (Element as unknown as { prototype?: { animate?: unknown } }).prototype\n  waapiCache = typeof proto?.animate === \"function\"\n  return waapiCache\n}\n\n/**\n * Discover which property names the animation produces. Leaf\n * constructors (`tween`, `keyframes`) populate a `properties` cache we\n * use directly; otherwise we fall back to sampling at t=0 and t=1, which\n * assumes the property set is constant over time.\n */\nexport function discoverProperties(def: AnimationDef<AnimationProps>): readonly string[] {\n  if (def.properties !== undefined) return def.properties\n  const set = new Set<string>()\n  const a = def.interpolate(0)\n  const b = def.interpolate(1)\n  for (const k in a) set.add(k)\n  for (const k in b) set.add(k)\n  return [...set]\n}\n\nfunction project(\n  def: AnimationDef<AnimationProps>,\n  keys: readonly string[],\n): AnimationDef<AnimationProps> {\n  const keySet = new Set(keys)\n  // Built inline rather than via `map()` so we can propagate the\n  // `linearizable` marker and `properties` cache. A tier-filtered view\n  // of a linearizable tween remains linearizable: we only drop keys,\n  // never change how the remaining ones interpolate.\n  const projected: AnimationDef<AnimationProps> = {\n    duration: def.duration,\n    ...omitUndefined({ easing: def.easing }),\n    interpolate: (p) => {\n      const v = def.interpolate(p)\n      const out: Record<string, PropertyValue> = {}\n      for (const k of keySet) {\n        const value = v[k]\n        if (value !== undefined) out[k] = value\n      }\n      return out\n    },\n    properties: keys,\n  }\n  return def.linearizable ? { ...projected, linearizable: true } : projected\n}\n\n/**\n * Combine two handles into one. State transitions collapse as follows:\n *   - `cancelled` if any child is cancelled (sticky once set)\n *   - otherwise derived on-demand from children: `playing` if any child is\n *     playing, `paused` if any child is paused, `finished` if all finished\n *\n * Deriving state from children (rather than tracking it independently) is\n * what makes re-arm cycles honest. After every child finishes naturally,\n * the combined state reports `finished`; if the user then calls `seek(0)`\n * or `reverse()` and children transition back to `playing`, the combined\n * state reports `playing` again. Without this, the combined wrapper would\n * return a stale `finished` while children visibly animate again.\n *\n * The combined `finished` promise is still single-shot: it resolves on\n * the first natural completion and cannot be re-armed. Users who replay\n * via `seek`/`reverse` should observe subsequent cycles via `state`, not\n * by awaiting `finished` a second time.\n *\n * Exported for internal use by the timeline module; public consumers\n * should not combine handles directly.\n */\nexport function combineHandles(handles: readonly StrategyHandle[]): StrategyHandle {\n  // Fast path: a single handle is the common case when all properties\n  // fall into one tier, or when the caller forced a specific backend.\n  // Skip the settled/pending state machine and return the handle\n  // directly.\n  if (handles.length === 1) return handles[0] as StrategyHandle\n\n  let userState: StrategyState = \"playing\"\n  let settled = false\n  const lp = createLazyPromise()\n\n  const settleFinish = (): void => {\n    if (settled) return\n    settled = true\n    userState = \"finished\"\n    lp.resolve()\n  }\n\n  const settleCancel = (err: unknown): void => {\n    if (settled) return\n    settled = true\n    userState = \"cancelled\"\n    lp.reject(err)\n  }\n\n  let pending = handles.length\n  for (const h of handles) {\n    h.finished.then(\n      () => {\n        pending--\n        if (pending === 0 && userState !== \"cancelled\") settleFinish()\n      },\n      (err) => {\n        settleCancel(err)\n      },\n    )\n  }\n\n  if (handles.length === 0) settleFinish()\n\n  return {\n    pause() {\n      if (userState !== \"playing\") return\n      userState = \"paused\"\n      for (const h of handles) h.pause()\n    },\n    resume() {\n      if (userState !== \"paused\") return\n      userState = \"playing\"\n      for (const h of handles) h.resume()\n    },\n    seek(p: number) {\n      if (userState === \"cancelled\") return\n      for (const h of handles) h.seek(p)\n    },\n    reverse() {\n      if (userState === \"cancelled\") return\n      for (const h of handles) h.reverse()\n    },\n    setSpeed(multiplier: number) {\n      if (userState === \"cancelled\") return\n      for (const h of handles) h.setSpeed(multiplier)\n    },\n    cancel() {\n      if (userState === \"finished\" || userState === \"cancelled\") return\n      userState = \"cancelled\"\n      for (const h of handles) h.cancel()\n      // Child rejections flow into settleCancel(), which rejects the\n      // lazy promise once. If every child happens to be already settled\n      // (no handle rejects), we still need to reject here.\n      if (!settled) {\n        settled = true\n        lp.rejectCancelled()\n      }\n    },\n    get state() {\n      // `cancelled` is sticky: once any child rejects, the combined handle\n      // is cancelled regardless of what the others report.\n      if (userState === \"cancelled\") return \"cancelled\"\n      // Derive from children so re-arm cycles (scroll-triggered `reverse` /\n      // `seek(0)` from a finished state) report accurately. Without this\n      // the getter stays \"finished\" while children are playing again,\n      // producing a visible zombie: animation runs, state says finished.\n      //\n      // The combined `finished` promise remains single-shot (see the JSDoc\n      // on `Controls`): it resolves on first completion and cannot be\n      // re-armed because we only subscribe to each child's finished once.\n      let anyPlaying = false\n      let anyPaused = false\n      let allFinished = true\n      for (const h of handles) {\n        const s = h.state\n        if (s !== \"finished\") allFinished = false\n        if (s === \"playing\") anyPlaying = true\n        else if (s === \"paused\") anyPaused = true\n      }\n      if (anyPlaying) return \"playing\"\n      if (anyPaused) return \"paused\"\n      if (allFinished) return \"finished\"\n      return userState\n    },\n    // All children run the same underlying timeline (split-tier plays\n    // project the same def onto two backends; timeline entries are\n    // slotted to the same total duration). Progress and direction stay\n    // in lock-step, so reading from the first child is accurate and\n    // cheaper than iterating.\n    get progress() {\n      return handles[0]?.progress ?? 0\n    },\n    get direction() {\n      return handles[0]?.direction ?? 1\n    },\n    get finished() {\n      return lp.promise\n    },\n  }\n}\n\n/**\n * Play an animation against pre-resolved targets, auto-picking the best\n * backend(s). Compositor-safe properties route to WAAPI (when supported),\n * and the rest route to the rAF backend. Both are synchronized by virtue\n * of sampling the same `AnimationDef`.\n *\n * Users should prefer the public `play()` in `api/play`, which also\n * handles target resolution and returns a richer `Controls` object.\n */\n// Tier partition for a def. Leaf constructors (`tween`, `keyframes`)\n// populate `def.tierSplit` at construction time so first-play unique-\n// def workloads skip this work. For non-leaf defs (combinators,\n// user-built animations), fall back to a WeakMap cache so shared-def\n// replay (one def, N targets) also avoids re-running\n// `discoverProperties + partitionByTier`. Parallels the planWaapi cache.\ninterface TierSplit {\n  readonly props: readonly string[]\n  readonly compositor: readonly string[]\n  readonly main: readonly string[]\n}\nconst tierCache = new WeakMap<AnimationDef<AnimationProps>, TierSplit>()\n\nfunction splitDef(def: AnimationDef<AnimationProps>): TierSplit {\n  // Leaf fast path: `tierSplit` was built at construction with `props`\n  // included, so we can return it directly. No per-play object alloc,\n  // no WeakMap round-trip, no classification work.\n  if (def.tierSplit !== undefined) return def.tierSplit\n  const cached = tierCache.get(def)\n  if (cached !== undefined) return cached\n  const props = discoverProperties(def)\n  const split = partitionByTier(props)\n  tierCache.set(def, split)\n  return split\n}\n\nexport function playStrategy(\n  def: AnimationDef<AnimationProps> | AnimationDef<readonly AnimationProps[]>,\n  targets: readonly StrategyTarget[],\n  opts: StrategyOpts = {},\n  // Optional explicit backend. Lets callers (notably `play()`, which has\n  // `mode` → backend mapping) bypass `resolveStrategyOpts`'s spread of\n  // `opts` to inject a backend. When undefined we fall back to\n  // `opts.backend ?? \"auto\"`.\n  backendOverride?: StrategyBackend,\n): StrategyHandle {\n  // Fan-out defs (produced by `stagger()`) carry a tuple of per-target\n  // values. They cannot be tier-split — each target sees a different\n  // value at any given progress — so they always run on a single rAF\n  // loop that samples the def once and dispatches `value[i]` to\n  // `target[i]`.\n  if (def.fanOut !== undefined) {\n    return playFanOut(def as AnimationDef<readonly AnimationProps[]>, targets, opts)\n  }\n\n  const propDef = def as AnimationDef<AnimationProps>\n\n  // Reduced-motion short-circuit: commit the final value once, skip all\n  // backend setup, hand back a pre-finished handle. Done before the\n  // backend dispatch so neither WAAPI nor rAF ever wake up.\n  if (shouldReduceMotion(opts.reducedMotion)) {\n    return reducedMotionHandle(propDef, targets)\n  }\n\n  const backend: StrategyBackend = backendOverride ?? opts.backend ?? \"auto\"\n\n  // Backend-independent fast path for the rAF-only case: skip the\n  // compositor-tier machinery entirely (splitDef, WAAPI closures, the\n  // handles array, combineHandles). This is what the default\n  // `mode: \"main\"` path hits for every play, so every alloc we save\n  // here shows up in cancel-before-first and startup-commit.\n  if (backend === \"raf\") {\n    return playRaf(propDef, targets, opts)\n  }\n\n  const waapiCap = opts.waapiSupported ?? detectWaapi()\n  // `backend === \"waapi\"` forces WAAPI regardless of capability; `auto`\n  // needs the capability probe. `backend === \"raf\"` was handled above.\n  const useWaapi = backend === \"waapi\" || waapiCap\n\n  // If `auto` is asked but WAAPI isn't available, the whole animation\n  // must run on rAF. Fast path out like the explicit \"raf\" case.\n  if (!useWaapi) return playRaf(propDef, targets, opts)\n\n  const { compositor, main } = splitDef(propDef)\n  // `mainProps` is the set of properties we route to rAF. For `auto` we\n  // take whatever `splitDef` classified as main-tier; for `backend ===\n  // \"waapi\"` we force everything onto WAAPI, so mainProps is empty.\n  const mainProps = backend === \"auto\" ? main : EMPTY_PROPS\n  const needsMain = mainProps.length > 0\n  const hasCompProps = compositor.length > 0\n\n  // `auto` where every property is main-tier: no compositor handle to\n  // build, no will-change to manage. Straight to rAF. (`backend ===\n  // \"waapi\"` can't land here because mainProps is empty.)\n  if (!hasCompProps && backend === \"auto\") return playRaf(propDef, targets, opts)\n\n  // Past this point there is a compositor-bound handle to build.\n  //\n  // We used to set `will-change` on the targets here and clear it on\n  // settle. For WAAPI-bound animations on compositor-safe properties\n  // (opacity, transform, filter) this is redundant: Chrome, Firefox,\n  // and modern Safari all auto-promote elements with active WAAPI\n  // transform/opacity animations, independent of will-change. And our\n  // own timing made it useless even as a hint: the write fired in the\n  // same rAF tick as `Element.animate()`, so the compositor saw both\n  // in the same paint cycle and had no chance to prepare a layer in\n  // advance. Removing it saves 2×N `setProperty` calls per play.\n  //\n  // Lazy WAAPI setup (deferring `Element.animate()` calls to the next\n  // scheduler tick) now lives inside `WaapiImpl` itself. Passing the\n  // scheduler opts it in; passing `null` runs synchronously. This\n  // replaced a `LazyHandleImpl` wrapper class that only ever wrapped\n  // `playWaapi`, so collapsing the two handles into one saves a\n  // LazyPromise + factory closure + inner-settle subscription per\n  // play. Cancel-before-first still short-circuits the same way: the\n  // deferred `Element.animate()` calls never run.\n  const waapiScheduler: FrameScheduler | null =\n    (opts.lazy ?? true) ? (opts.scheduler ?? defaultFrame) : null\n\n  // Note on why there's no rAF-lazy equivalent: rAF setup is cheap\n  // (one `createTiming` + two scheduler registrations). Deferring it\n  // to save cancel-before-first work regressed the common path by\n  // ~4 ms at n=1000 in earlier experiments. WAAPI lazy setup pays off\n  // because `Element.animate()` is genuinely expensive; rAF isn't.\n\n  // Pure WAAPI fast path: only a compositor-tier handle, no projection,\n  // no combineHandles wrapper. Covers `backend === \"waapi\"` and the\n  // common `auto` case where every animated property is compositor-safe\n  // (e.g. opacity/transform-only tweens).\n  if (!needsMain) {\n    return playWaapi(propDef, targets, opts, waapiScheduler)\n  }\n\n  // Mixed auto path: both tiers have props. `project()` allocates an\n  // AnimationDef + closure per call and the backends re-invoke that\n  // closure every tick, so only run it when the filter isn't the\n  // identity (here it always is, since both tiers are non-empty).\n  const handles: StrategyHandle[] = [\n    playWaapi(project(propDef, compositor), targets, opts, waapiScheduler),\n    playRaf(project(propDef, mainProps), targets, opts),\n  ]\n\n  return combineHandles(handles)\n}\n\nconst EMPTY_PROPS: readonly string[] = Object.freeze([])\n\n/**\n * Build a no-op handle that has already committed `def.interpolate(1)`\n * to every target. Used when `prefers-reduced-motion` is honoured and\n * resolves to \"snap\". The handle's `finished` is a pre-resolved promise\n * so `await play(...)` continues on the next microtask.\n */\nfunction reducedMotionHandle(\n  def: AnimationDef<AnimationProps>,\n  targets: readonly StrategyTarget[],\n): StrategyHandle {\n  const final = def.interpolate(1)\n  for (let i = 0; i < targets.length; i++) {\n    applyValues(targets[i] as ElementShim, final)\n  }\n  let cancelled = false\n  return {\n    pause() {},\n    resume() {},\n    seek() {},\n    reverse() {},\n    setSpeed() {},\n    cancel() {\n      cancelled = true\n    },\n    get state() {\n      return cancelled ? \"cancelled\" : \"finished\"\n    },\n    progress: 1,\n    direction: 1,\n    finished: Promise.resolve(),\n  }\n}\n\n/**\n * Play a fan-out def (one whose `interpolate(p)` returns a tuple of\n * per-target value bags) against an array of targets. Sample once per\n * frame, dispatch `value[i]` to `target[i]`. This is what makes\n * `play(stagger(...), targets)` actually animate per-element values\n * rather than silently iterating array indices as CSS keys.\n */\nfunction playFanOut(\n  def: AnimationDef<readonly AnimationProps[]>,\n  targets: readonly StrategyTarget[],\n  opts: StrategyOpts,\n): StrategyHandle {\n  // Reduced-motion: commit the final per-target values once, hand back\n  // a pre-finished handle. Same shape as `reducedMotionHandle`, but the\n  // dispatch is per-target rather than the same value to every target.\n  if (shouldReduceMotion(opts.reducedMotion)) {\n    const final = def.interpolate(1)\n    const n = Math.min(final.length, targets.length)\n    for (let i = 0; i < n; i++) {\n      const v = final[i]\n      const el = targets[i]\n      if (v !== undefined && el !== undefined) applyValues(el as ElementShim, v)\n    }\n    let cancelled = false\n    return {\n      pause() {},\n      resume() {},\n      seek() {},\n      reverse() {},\n      setSpeed() {},\n      cancel() {\n        cancelled = true\n      },\n      get state() {\n        return cancelled ? \"cancelled\" : \"finished\"\n      },\n      progress: 1,\n      direction: 1,\n      finished: Promise.resolve(),\n    }\n  }\n\n  return createTiming(\n    def,\n    (values) => {\n      const n = Math.min(values.length, targets.length)\n      for (let i = 0; i < n; i++) {\n        const v = values[i]\n        const el = targets[i]\n        if (v !== undefined && el !== undefined) applyValues(el as ElementShim, v)\n      }\n    },\n    opts,\n  )\n}\n","/**\n * Controls — the PromiseLike handle returned by `play()` and `timeline().play()`.\n *\n * Thin adapter over `StrategyHandle` that:\n *   - adds `then` / `catch` / `finally` so `await play(...)` works\n *   - exposes a `speed` getter/setter (maps to `setSpeed`)\n *   - supports named labels via `seekLabel()`\n *   - returns `this` from every mutating method for fluent chaining\n *\n * The `finished` promise is single-shot: it settles exactly once, on the\n * first natural completion or on `cancel()`. `seek()` and `reverse()`\n * from a finished state DO re-arm the animation (it plays again — scroll-\n * triggered toggle actions rely on this), but the original `finished`\n * promise remains resolved and will not re-fire. Callers who need to\n * observe subsequent cycles should watch `state` or call `play()` again\n * instead of awaiting `finished`.\n *\n * Implemented as a class so the ~15 methods live on the prototype\n * once rather than being reallocated as fresh closures per `play()`.\n * At n=1000 plays that's 15000 fewer closures pinned in memory.\n *\n * Consumers never construct `Controls` directly; use `play()` or\n * `timeline().play()`. The factory is exported for internal use by\n * those modules.\n */\n\nimport { KinemError } from \"../core/errors\"\nimport type { StrategyHandle, StrategyState } from \"../render/strategy\"\n\nexport interface Controls extends PromiseLike<void> {\n  pause(): Controls\n  resume(): Controls\n  /** Seek to `progress` in [0, 1]. */\n  seek(progress: number): Controls\n  /** Seek to a named label previously registered (e.g. on a timeline). */\n  seekLabel(label: string): Controls\n  /**\n   * Seek to a named label and start playing forward from there. Sugar\n   * for `seekLabel(label)` followed by the equivalent of `restart()`'s\n   * unpause / reverse-flip handling: paused animations resume, reversed\n   * playback flips forward, and finished playback re-arms.\n   */\n  playLabel(label: string): Controls\n  reverse(): Controls\n  /**\n   * Play from the beginning, forward. No-op if the animation was\n   * cancelled. Unpauses if paused, flips back to forward if reversed,\n   * and re-arms if already finished.\n   */\n  restart(): Controls\n  cancel(): Controls\n  readonly state: StrategyState\n  /** Total duration in ms (known ahead of time for every built-in animation). */\n  readonly duration: number\n  /** Current animation progress in [0, 1]. */\n  readonly progress: number\n  /** Current playback direction. `1` is forward, `-1` is reversed. */\n  readonly direction: 1 | -1\n  /** Shortest-path promise of completion. Rejects on cancel. */\n  readonly finished: Promise<void>\n  /** Labels registered on the underlying animation. Offsets are in [0, 1]. */\n  readonly labels: ReadonlyMap<string, number>\n  /** Playback speed multiplier. Default 1. Must be > 0. */\n  speed: number\n  // biome-ignore lint/suspicious/noConfusingVoidType: Promise<void | R> mirrors Promise#catch\n  catch<R>(onrejected: (err: unknown) => R | PromiseLike<R>): Promise<void | R>\n  finally(onfinally?: (() => void) | null): Promise<void>\n}\n\nconst EMPTY_LABELS: ReadonlyMap<string, number> = new Map()\n\nclass ControlsImpl implements Controls {\n  readonly #handle: StrategyHandle\n  readonly #duration: number\n  readonly #labels: ReadonlyMap<string, number>\n  #speed = 1\n\n  constructor(handle: StrategyHandle, duration: number, labels: ReadonlyMap<string, number>) {\n    this.#handle = handle\n    this.#duration = duration\n    this.#labels = labels\n  }\n\n  pause(): Controls {\n    this.#handle.pause()\n    return this\n  }\n  resume(): Controls {\n    this.#handle.resume()\n    return this\n  }\n  seek(progress: number): Controls {\n    this.#handle.seek(progress)\n    return this\n  }\n  seekLabel(label: string): Controls {\n    const offset = this.#labels.get(label)\n    if (offset === undefined) {\n      throw new KinemError(\n        `seekLabel(): unknown label \"${label}\"`,\n        \"add a label first via timeline.label(name) before seeking to it\",\n      )\n    }\n    this.#handle.seek(offset)\n    return this\n  }\n  playLabel(label: string): Controls {\n    const offset = this.#labels.get(label)\n    if (offset === undefined) {\n      throw new KinemError(\n        `playLabel(): unknown label \"${label}\"`,\n        \"add a label first via timeline.label(name) before playing from it\",\n      )\n    }\n    const h = this.#handle\n    // Cancel is terminal and sticky; replaying from a label after cancel\n    // would silently no-op, so surface the misuse.\n    if (h.state === \"cancelled\") return this\n    // Mirror restart()'s reverse-flip / re-arm dance so playLabel on a\n    // reversed or finished animation resumes forward from the label.\n    if (h.direction === -1) h.reverse()\n    h.seek(offset)\n    if (h.state === \"paused\") h.resume()\n    return this\n  }\n  reverse(): Controls {\n    this.#handle.reverse()\n    return this\n  }\n  restart(): Controls {\n    const h = this.#handle\n    // Cancel is terminal and sticky; a cancelled animation can't be\n    // restarted. Callers that want to replay from zero after cancel\n    // should call `play()` again to build a fresh handle.\n    if (h.state === \"cancelled\") return this\n    // Flip to forward first, before seek(0). If we seeked first with\n    // direction still at -1, `seek(0)` from a finished state wouldn't\n    // re-arm (isFinished(0) returns true with direction=-1); flipping\n    // direction after would leave us stuck. Reversing first unblocks\n    // the re-arm path.\n    if (h.direction === -1) h.reverse()\n    h.seek(0)\n    // seek() doesn't change play/pause state. Unpause so playback\n    // actually continues.\n    if (h.state === \"paused\") h.resume()\n    return this\n  }\n  cancel(): Controls {\n    this.#handle.cancel()\n    return this\n  }\n  get state(): StrategyState {\n    return this.#handle.state\n  }\n  get duration(): number {\n    return this.#duration\n  }\n  get progress(): number {\n    return this.#handle.progress\n  }\n  get direction(): 1 | -1 {\n    return this.#handle.direction\n  }\n  get finished(): Promise<void> {\n    return this.#handle.finished\n  }\n  get labels(): ReadonlyMap<string, number> {\n    return this.#labels\n  }\n  get speed(): number {\n    return this.#speed\n  }\n  set speed(v: number) {\n    this.#handle.setSpeed(v)\n    this.#speed = v\n  }\n  // biome-ignore lint/suspicious/noThenProperty: Controls is PromiseLike by design\n  // biome-ignore lint/suspicious/noConfusingVoidType: T1 defaults void for Promise<void>\n  then<T1 = void, T2 = never>(\n    // biome-ignore lint/suspicious/noConfusingVoidType: PromiseLike<void> callback\n    onfulfilled?: ((v: void) => T1 | PromiseLike<T1>) | null,\n    onrejected?: ((err: unknown) => T2 | PromiseLike<T2>) | null,\n  ): Promise<T1 | T2> {\n    return this.#handle.finished.then(onfulfilled, onrejected)\n  }\n  catch<R>(\n    onrejected: (err: unknown) => R | PromiseLike<R>,\n    // biome-ignore lint/suspicious/noConfusingVoidType: matches Promise.catch's signature\n  ): Promise<void | R> {\n    return this.#handle.finished.catch(onrejected)\n  }\n  finally(onfinally?: (() => void) | null): Promise<void> {\n    return this.#handle.finished.finally(onfinally)\n  }\n}\n\nexport function createControls(\n  handle: StrategyHandle,\n  duration: number,\n  labels: ReadonlyMap<string, number> = EMPTY_LABELS,\n): Controls {\n  return new ControlsImpl(handle, duration, labels)\n}\n","/**\n * `play()` — the public entry point that connects a pure `AnimationDef`\n * to one or more DOM targets. Resolves the target argument (selector,\n * element, NodeList, array), dispatches through the strategy router,\n * and returns a PromiseLike `Controls` object.\n */\n\nimport { KinemError } from \"../core/errors\"\nimport { omitUndefined } from \"../core/omit-undefined\"\nimport type { AnimationDef } from \"../core/types\"\nimport { easingLabel, trackAnimation } from \"../devtools/tracker\"\nimport {\n  type AnimationProps,\n  type StrategyBackend,\n  type StrategyOpts,\n  type StrategyTarget,\n  playStrategy,\n} from \"../render/strategy\"\nimport { type Controls, createControls } from \"./controls\"\n\n/**\n * A target specification. Accepts:\n *  - a CSS selector string (`\".card\"`), resolved via `document.querySelectorAll`\n *  - a single element\n *  - a `NodeList` / `HTMLCollection`\n *  - an array of elements\n */\nexport type Target = string | StrategyTarget | readonly StrategyTarget[] | ArrayLike<StrategyTarget>\n\n/**\n * Where an animation's *timing* runs.\n *\n *  - `\"compositor\"` (the default when supported): hands the animation\n *    off to the browser's compositor via `Element.animate()`. Paint\n *    and composite happen on the GPU, and crucially the *timing* keeps\n *    advancing even when the main thread is blocked (heavy React\n *    render, long task, etc). Costs a bit more to set up because we\n *    sample the easing and hand a keyframes array to the browser.\n *\n *  - `\"main\"`: ticks per frame from JS on the main thread and writes\n *    the current value to `element.style`. Setup is essentially free\n *    (no keyframe sampling, no compositor negotiation), which makes\n *    this the right pick for hover microinteractions, rapid toggles,\n *    or anywhere startup latency dominates. If the main thread blocks,\n *    timing pauses along with it.\n *\n *  - `\"auto\"` (default): compositor-safe properties route to\n *    `\"compositor\"`, the rest to `\"main\"`. This is the right pick\n *    for almost every animation; reach for the others only when you\n *    know you want one specific behavior.\n *\n * Corresponds 1:1 with the low-level `backend` option: `\"compositor\"`\n * maps to `\"waapi\"`, `\"main\"` maps to `\"raf\"`. If both are passed,\n * `backend` wins.\n */\nexport type PlayMode = \"auto\" | \"compositor\" | \"main\"\n\nconst MODE_TO_BACKEND: Record<PlayMode, StrategyBackend> = {\n  auto: \"auto\",\n  compositor: \"waapi\",\n  main: \"raf\",\n}\n\n/**\n * Translate the user-facing `mode` option to the low-level `backend`.\n * Exported so timeline and other internal entry points can honour\n * `mode` without re-implementing the mapping.\n *\n * If the caller passed `backend` directly, respect it. `mode` only\n * applies when `backend` is absent.\n */\nexport function resolveStrategyOpts(opts: PlayOpts): StrategyOpts {\n  if (opts.mode === undefined || opts.backend !== undefined) return opts\n  return { ...opts, backend: MODE_TO_BACKEND[opts.mode] }\n}\n\nexport interface PlayOpts extends StrategyOpts {\n  /**\n   * Where timing runs. See {@link PlayMode}. Default `\"auto\"`.\n   */\n  readonly mode?: PlayMode\n  /**\n   * Override selector resolution. If provided, selector strings are\n   * resolved by this function instead of `document.querySelectorAll`.\n   * Useful in non-DOM environments and tests.\n   */\n  readonly resolve?: (selector: string) => readonly StrategyTarget[]\n}\n\n/**\n * Resolve a `Target` argument into a flat, typed array of elements.\n * Exported for internal reuse by the timeline module.\n */\nexport function resolveTargets(target: Target, opts: PlayOpts): readonly StrategyTarget[] {\n  if (typeof target === \"string\") {\n    if (opts.resolve) return opts.resolve(target)\n    if (typeof document === \"undefined\") {\n      throw new KinemError(\n        \"play(): cannot resolve selector string outside a DOM environment\",\n        \"pass elements directly or provide opts.resolve\",\n      )\n    }\n    const nodes = document.querySelectorAll(target)\n    return Array.from(nodes) as unknown as readonly StrategyTarget[]\n  }\n  if (Array.isArray(target)) return target as readonly StrategyTarget[]\n  // ArrayLike (NodeList, HTMLCollection)\n  if (typeof (target as ArrayLike<StrategyTarget>).length === \"number\") {\n    return Array.from(target as ArrayLike<StrategyTarget>)\n  }\n  // Single element\n  return [target as StrategyTarget]\n}\n\nexport function play(\n  def: AnimationDef<AnimationProps> | AnimationDef<readonly AnimationProps[]>,\n  target: Target,\n  opts: PlayOpts = {},\n): Controls {\n  const targets = resolveTargets(target, opts)\n  // Resolve the backend inline rather than going through\n  // `resolveStrategyOpts`, which would spread `opts` into a new object\n  // when `mode` is set. `playStrategy` accepts a backend override, so\n  // we can leave `opts` unchanged and pay zero allocs here.\n  const backend: StrategyBackend =\n    opts.backend ?? (opts.mode !== undefined ? MODE_TO_BACKEND[opts.mode] : \"auto\")\n  const handle = playStrategy(def, targets, opts, backend)\n  // No eager `handle.finished.catch(noop)`: with lazy-allocated\n  // promises, fire-and-forget cancel never creates a Promise, so there\n  // is nothing to surface as unhandled. Callers that do access\n  // `.finished` on a rejected handle get a pre-settled promise that\n  // silences its own unhandled-rejection warning (see `lazy-promise`).\n  const controls = createControls(handle, def.duration)\n  const easing = easingLabel(def.easing)\n  trackAnimation(controls, targets, backend, omitUndefined({ easing, properties: def.properties }))\n  return controls\n}\n","/**\n * Shared-element layout transitions on top of FLIP.\n *\n * A `LayoutGroup` is a tiny rect registry keyed by string `layoutId`.\n * When a FLIP-driven element unmounts (or detects it is being replaced)\n * it `capture`s its bounding rect under the id. When a new element\n * mounts with the same id, it `consume`s the captured rect and uses it\n * as the FLIP \"previous\" rect so the element animates from where the\n * old one was. This is the same pattern Framer Motion exposes as\n * `layoutId`.\n *\n * The registry is intentionally framework-agnostic. Adapters\n * (`@kinem/react`'s `useLayout`, `@kinem/vue`'s `useLayout`, etc.) call\n * into it; consumers only see a `layoutId` option on those hooks.\n *\n * A captured rect has a TTL (default 1 frame at 60Hz). Stale entries\n * are dropped on read so a long-delayed mount does not animate from a\n * position that is no longer meaningful. Set TTL to `Infinity` for a\n * registry that should keep entries indefinitely (test usage).\n */\n\nexport interface LayoutGroupRect {\n  readonly left: number\n  readonly top: number\n  readonly width: number\n  readonly height: number\n}\n\nexport interface LayoutGroupSnapshot {\n  readonly id: string\n  readonly rect: LayoutGroupRect\n  readonly capturedAt: number\n}\n\nexport interface LayoutGroup {\n  /**\n   * Store `rect` for `id`, replacing any prior capture.\n   */\n  capture(id: string, rect: LayoutGroupRect): void\n  /**\n   * Read and remove the snapshot for `id`. Returns `undefined` if no\n   * snapshot is stored or if the stored snapshot is older than the TTL.\n   */\n  consume(id: string): LayoutGroupSnapshot | undefined\n  /**\n   * Read the snapshot for `id` without removing it. Returns `undefined`\n   * if no snapshot is stored or if it is older than the TTL.\n   */\n  peek(id: string): LayoutGroupSnapshot | undefined\n  /**\n   * Explicitly drop the snapshot for `id`.\n   */\n  release(id: string): void\n  /**\n   * Drop every stored snapshot.\n   */\n  clear(): void\n}\n\nexport interface CreateLayoutGroupOpts {\n  /**\n   * Maximum age (ms) of a stored snapshot before `consume` / `peek`\n   * treat it as missing. Default 250ms (a long animation frame batch).\n   * Use `Number.POSITIVE_INFINITY` to disable TTL.\n   */\n  readonly ttl?: number\n  /**\n   * Time source. Defaults to `Date.now`. Tests can supply a deterministic\n   * clock here.\n   */\n  readonly now?: () => number\n}\n\nconst DEFAULT_TTL = 250\n\nexport function createLayoutGroup(opts: CreateLayoutGroupOpts = {}): LayoutGroup {\n  const ttl = opts.ttl ?? DEFAULT_TTL\n  const now = opts.now ?? Date.now\n  const snapshots = new Map<string, LayoutGroupSnapshot>()\n\n  const isFresh = (snap: LayoutGroupSnapshot): boolean => {\n    if (ttl === Number.POSITIVE_INFINITY) return true\n    return now() - snap.capturedAt <= ttl\n  }\n\n  return {\n    capture(id, rect) {\n      snapshots.set(id, { id, rect, capturedAt: now() })\n    },\n    consume(id) {\n      const snap = snapshots.get(id)\n      if (!snap) return undefined\n      snapshots.delete(id)\n      return isFresh(snap) ? snap : undefined\n    },\n    peek(id) {\n      const snap = snapshots.get(id)\n      if (!snap) return undefined\n      if (!isFresh(snap)) {\n        snapshots.delete(id)\n        return undefined\n      }\n      return snap\n    },\n    release(id) {\n      snapshots.delete(id)\n    },\n    clear() {\n      snapshots.clear()\n    },\n  }\n}\n\n/**\n * Process-wide default registry. Adapter hooks read from this when a\n * caller-supplied `layoutGroup` is not provided. SSR-safe (the registry\n * holds plain JS values, no DOM references).\n */\nexport const defaultLayoutGroup: LayoutGroup = createLayoutGroup()\n","/**\n * `ScrollSource` is the abstraction the scroll drivers read from. It\n * exposes the current scroll offset, viewport size, and element\n * geometry, plus hooks for scroll and resize events.\n *\n * The DOM implementation reads from a `Window`-like object and uses\n * `getBoundingClientRect()` on targets. Tests supply their own source\n * to drive scroll position deterministically without jsdom.\n */\n\nimport { KinemError } from \"../core/errors\"\nimport type { StrategyTarget } from \"../render/strategy\"\n\nexport interface ScrollRect {\n  /** Document-relative top (viewport top + scrollY). */\n  readonly top: number\n  readonly height: number\n}\n\nexport type ScrollUnsubscribe = () => void\n\nexport interface ScrollSource {\n  getScrollY(): number\n  getViewportHeight(): number\n  getRect(el: StrategyTarget): ScrollRect\n  onScroll(cb: () => void): ScrollUnsubscribe\n  onResize(cb: () => void): ScrollUnsubscribe\n}\n\ninterface MinimalWindow {\n  readonly scrollY: number\n  readonly innerHeight: number\n  addEventListener(type: string, cb: () => void, opts?: AddEventListenerOptions | boolean): void\n  removeEventListener(type: string, cb: () => void): void\n}\n\ninterface RectCapable {\n  getBoundingClientRect?: () => { top: number; height: number }\n}\n\n/**\n * Build a `ScrollSource` backed by the given `Window` (or `window` by\n * default). `getRect` converts the viewport-relative top returned by\n * `getBoundingClientRect` into document-relative coordinates.\n */\nexport function createDomScrollSource(win?: MinimalWindow): ScrollSource {\n  const w = win ?? (globalThis as unknown as { window?: MinimalWindow }).window\n  if (!w) {\n    throw new KinemError(\n      \"createDomScrollSource(): no window available\",\n      \"pass a window-like object explicitly when running outside the browser\",\n    )\n  }\n\n  return {\n    getScrollY: () => w.scrollY,\n    getViewportHeight: () => w.innerHeight,\n    getRect(el) {\n      const rect = (el as unknown as RectCapable).getBoundingClientRect?.()\n      if (!rect) return { top: 0, height: 0 }\n      return { top: rect.top + w.scrollY, height: rect.height }\n    },\n    onScroll(cb) {\n      w.addEventListener(\"scroll\", cb, { passive: true })\n      return () => w.removeEventListener(\"scroll\", cb)\n    },\n    onResize(cb) {\n      w.addEventListener(\"resize\", cb)\n      return () => w.removeEventListener(\"resize\", cb)\n    },\n  }\n}\n","/**\n * Scroll trigger geometry. Parses GSAP-style position strings such as\n * `\"top 80%\"` into a pair of fractions:\n *\n *   - `element`: 0 = top of trigger element, 1 = bottom\n *   - `viewport`: 0 = top of viewport, 1 = bottom\n *\n * A trigger fires when the element-relative point and the viewport-\n * relative point vertically align. Given `scrollY` plus element\n * geometry, `computeBounds` returns the scrollY values at which the\n * `start` and `end` positions activate, and `progressAt` normalizes a\n * scrollY into [0, 1] between them.\n *\n * The module is pure and DOM-free; the DOM read happens in\n * `ScrollSource.getRect()`.\n */\n\nimport { KinemError } from \"../core/errors\"\n\nexport interface TriggerPos {\n  readonly element: number\n  readonly viewport: number\n}\n\nfunction parseRef(raw: string): number {\n  const t = raw.trim().toLowerCase()\n  if (t === \"top\") return 0\n  if (t === \"center\") return 0.5\n  if (t === \"bottom\") return 1\n  const pct = /^(-?\\d+(?:\\.\\d+)?)%$/.exec(t)\n  if (pct) return Number(pct[1]) / 100\n  const n = Number(t)\n  if (Number.isFinite(n)) return n\n  throw new KinemError(\n    `scroll: invalid trigger reference \"${raw}\"`,\n    'use \"top\"/\"center\"/\"bottom\", a percentage like \"80%\", or a number',\n  )\n}\n\n/** Parse a GSAP-style `\"<element> <viewport>\"` position string. */\nexport function parseTriggerPos(input: string | TriggerPos): TriggerPos {\n  if (typeof input !== \"string\") return input\n  const parts = input.trim().split(/\\s+/)\n  if (parts.length !== 2) {\n    throw new KinemError(\n      `scroll: trigger position must be \"<element> <viewport>\" (got \"${input}\")`,\n      'example: \"top 80%\" means element top hits 80% down the viewport',\n    )\n  }\n  const [eRef, vRef] = parts as [string, string]\n  return { element: parseRef(eRef), viewport: parseRef(vRef) }\n}\n\nexport interface TriggerGeom {\n  /** Element's top in document coordinates (viewport top + scrollY). */\n  readonly elementTop: number\n  readonly elementHeight: number\n  readonly viewportHeight: number\n}\n\nexport interface ScrollBounds {\n  readonly scrollStart: number\n  readonly scrollEnd: number\n}\n\n/** Compute the scrollY thresholds at which `start` and `end` activate. */\nexport function computeBounds(start: TriggerPos, end: TriggerPos, geom: TriggerGeom): ScrollBounds {\n  return {\n    scrollStart:\n      geom.elementTop + start.element * geom.elementHeight - start.viewport * geom.viewportHeight,\n    scrollEnd:\n      geom.elementTop + end.element * geom.elementHeight - end.viewport * geom.viewportHeight,\n  }\n}\n\n/** Progress in [0, 1] given the current scroll position and bounds. */\nexport function progressAt(scrollY: number, bounds: ScrollBounds): number {\n  const span = bounds.scrollEnd - bounds.scrollStart\n  if (span === 0) return scrollY >= bounds.scrollStart ? 1 : 0\n  const p = (scrollY - bounds.scrollStart) / span\n  return p < 0 ? 0 : p > 1 ? 1 : p\n}\n\nexport type ScrollZone = \"before\" | \"active\" | \"after\"\n\n/** Classify a scroll position relative to the trigger zone. */\nexport function zoneAt(scrollY: number, bounds: ScrollBounds): ScrollZone {\n  const lo = Math.min(bounds.scrollStart, bounds.scrollEnd)\n  const hi = Math.max(bounds.scrollStart, bounds.scrollEnd)\n  if (scrollY < lo) return \"before\"\n  if (scrollY > hi) return \"after\"\n  return \"active\"\n}\n","/**\n * Scroll-linked animation driver.\n *\n * Unlike the time-based backends, this driver does not own a clock;\n * its progress is sampled from the scroll position of a `ScrollSource`\n * on every scroll/resize event. Values are applied with `applyValues`\n * directly (not through WAAPI) because the browser-side compositor\n * path for scroll-driven timelines is CSS `animation-timeline`, which\n * is handled by a separate optimization layer.\n *\n * Scroll and resize events are coalesced through the shared frame\n * scheduler: each event flips a `dirty` flag and schedules a single\n * job in the `update` phase, so multiple scroll events between frames\n * collapse into one render.\n */\n\nimport type { AnimationDef } from \"../core/types\"\nimport { isTrackerEnabled, trackAmbient, untrackAmbient } from \"../devtools/tracker\"\nimport { applyValues } from \"../render/apply\"\nimport type { AnimationProps, StrategyTarget } from \"../render/strategy\"\nimport type { FrameScheduler } from \"../scheduler/frame\"\nimport { frame as defaultFrame } from \"../scheduler/frame\"\nimport type { ScrollSource } from \"./source\"\nimport { type ScrollBounds, type TriggerPos, computeBounds, progressAt } from \"./trigger\"\n\nexport type ScrollSyncState = \"active\" | \"cancelled\"\n\nexport interface ScrollSyncHandle {\n  cancel(): void\n  readonly state: ScrollSyncState\n  /** Current normalized progress in [0, 1]. */\n  readonly progress: number\n}\n\nexport interface ScrollSyncOpts {\n  readonly source: ScrollSource\n  readonly start: TriggerPos\n  readonly end: TriggerPos\n  readonly scheduler?: FrameScheduler\n  /** Called whenever progress changes. Useful for per-frame side effects. */\n  readonly onProgress?: (progress: number) => void\n}\n\nexport function playScrollSync(\n  def: AnimationDef<AnimationProps>,\n  targets: readonly StrategyTarget[],\n  opts: ScrollSyncOpts,\n): ScrollSyncHandle {\n  const scheduler = opts.scheduler ?? defaultFrame\n\n  let state: ScrollSyncState = \"active\"\n  let bounds: ScrollBounds | null = null\n  let progress = 0\n  let dirty = true\n\n  const measure = (): void => {\n    const anchor = targets[0]\n    if (!anchor) {\n      bounds = null\n      return\n    }\n    const rect = opts.source.getRect(anchor)\n    bounds = computeBounds(opts.start, opts.end, {\n      elementTop: rect.top,\n      elementHeight: rect.height,\n      viewportHeight: opts.source.getViewportHeight(),\n    })\n  }\n\n  const render = (): void => {\n    if (state === \"cancelled\" || !dirty) return\n    if (!bounds) measure()\n    if (!bounds) return\n    progress = progressAt(opts.source.getScrollY(), bounds)\n    const values = def.interpolate(progress)\n    for (const t of targets) applyValues(t, values)\n    opts.onProgress?.(progress)\n    dirty = false\n  }\n\n  const markDirty = (): void => {\n    if (state === \"cancelled\") return\n    dirty = true\n    scheduler.schedule(\"update\", render)\n  }\n\n  const invalidate = (): void => {\n    bounds = null\n    markDirty()\n  }\n\n  markDirty()\n\n  const unsubScroll = opts.source.onScroll(markDirty)\n  const unsubResize = opts.source.onResize(invalidate)\n\n  let trackerId = -1\n  const handle: ScrollSyncHandle = {\n    cancel() {\n      if (state === \"cancelled\") return\n      state = \"cancelled\"\n      unsubScroll()\n      unsubResize()\n      scheduler.cancel(\"update\", render)\n      untrackAmbient(trackerId)\n    },\n    get state() {\n      return state\n    },\n    get progress() {\n      return progress\n    },\n  }\n\n  if (isTrackerEnabled()) {\n    trackerId = trackAmbient(handle, \"scroll\", targets)\n  }\n\n  return handle\n}\n","/**\n * Scroll-triggered animation driver.\n *\n * A regular time-based animation is created up front via `playStrategy`\n * but paused immediately; subsequent scroll position changes dispatch\n * one of four actions (`onEnter`, `onLeave`, `onEnterBack`, `onLeaveBack`)\n * to the `Controls` handle, mirroring GSAP's ScrollTrigger `toggleActions`\n * convention.\n *\n * Zone transitions:\n *   - before → active : onEnter\n *   - active → after  : onLeave\n *   - after  → active : onEnterBack\n *   - active → before : onLeaveBack\n * Jumps that skip the active zone fire both boundary events in order.\n */\n\nimport { type Controls, createControls } from \"../api/controls\"\nimport { KinemError } from \"../core/errors\"\nimport type { AnimationDef } from \"../core/types\"\nimport { isTrackerEnabled, trackAnimation } from \"../devtools/tracker\"\nimport {\n  type AnimationProps,\n  type StrategyOpts,\n  type StrategyTarget,\n  playStrategy,\n} from \"../render/strategy\"\nimport type { FrameScheduler } from \"../scheduler/frame\"\nimport { frame as defaultFrame } from \"../scheduler/frame\"\nimport type { ScrollSource } from \"./source\"\nimport {\n  type ScrollBounds,\n  type ScrollZone,\n  type TriggerPos,\n  computeBounds,\n  zoneAt,\n} from \"./trigger\"\n\nexport type ToggleAction =\n  | \"play\"\n  | \"pause\"\n  | \"resume\"\n  | \"reverse\"\n  | \"reset\"\n  | \"restart\"\n  | \"complete\"\n  | \"none\"\n\nexport type ToggleActions = readonly [ToggleAction, ToggleAction, ToggleAction, ToggleAction]\n\nconst DEFAULT_TOGGLE_ACTIONS: ToggleActions = [\"play\", \"none\", \"none\", \"reverse\"]\n\nconst ALL_ACTIONS: readonly ToggleAction[] = [\n  \"play\",\n  \"pause\",\n  \"resume\",\n  \"reverse\",\n  \"reset\",\n  \"restart\",\n  \"complete\",\n  \"none\",\n]\n\nfunction isToggleAction(s: string): s is ToggleAction {\n  return (ALL_ACTIONS as readonly string[]).includes(s)\n}\n\nexport function parseToggleActions(input: string | ToggleActions): ToggleActions {\n  if (typeof input !== \"string\") return input\n  const parts = input.trim().split(/\\s+/)\n  if (parts.length !== 4) {\n    throw new KinemError(\n      `scroll: toggleActions must have 4 entries (got \"${input}\")`,\n      'format is \"onEnter onLeave onEnterBack onLeaveBack\", e.g. \"play pause resume reset\"',\n    )\n  }\n  for (const p of parts) {\n    if (!isToggleAction(p)) {\n      throw new KinemError(\n        `scroll: invalid toggle action \"${p}\"`,\n        'allowed: \"play\", \"pause\", \"resume\", \"reverse\", \"restart\", \"reset\", \"complete\", \"none\"',\n      )\n    }\n  }\n  return parts as unknown as ToggleActions\n}\n\ntype ZoneEvent = \"enter\" | \"leave\" | \"enterBack\" | \"leaveBack\"\n\nfunction eventsFor(from: ScrollZone, to: ScrollZone): readonly ZoneEvent[] {\n  if (from === to) return []\n  if (from === \"before\" && to === \"active\") return [\"enter\"]\n  if (from === \"active\" && to === \"after\") return [\"leave\"]\n  if (from === \"before\" && to === \"after\") return [\"enter\", \"leave\"]\n  if (from === \"after\" && to === \"active\") return [\"enterBack\"]\n  if (from === \"active\" && to === \"before\") return [\"leaveBack\"]\n  if (from === \"after\" && to === \"before\") return [\"enterBack\", \"leaveBack\"]\n  return []\n}\n\nfunction actionFor(event: ZoneEvent, actions: ToggleActions): ToggleAction {\n  switch (event) {\n    case \"enter\":\n      return actions[0]\n    case \"leave\":\n      return actions[1]\n    case \"enterBack\":\n      return actions[2]\n    case \"leaveBack\":\n      return actions[3]\n  }\n}\n\nfunction applyAction(action: ToggleAction, controls: Controls): void {\n  switch (action) {\n    case \"play\":\n    case \"resume\":\n      controls.resume()\n      return\n    case \"pause\":\n      controls.pause()\n      return\n    case \"reverse\":\n      controls.reverse()\n      controls.resume()\n      return\n    case \"reset\":\n      controls.pause()\n      controls.seek(0)\n      return\n    case \"restart\":\n      controls.seek(0)\n      controls.resume()\n      return\n    case \"complete\":\n      controls.pause()\n      controls.seek(1)\n      return\n    case \"none\":\n      return\n  }\n}\n\nexport type ScrollTriggeredState = \"idle\" | \"active\" | \"cancelled\"\n\nexport interface ScrollTriggeredHandle {\n  cancel(): void\n  readonly controls: Controls\n  readonly state: ScrollTriggeredState\n}\n\nexport interface ScrollTriggeredOpts extends StrategyOpts {\n  readonly source: ScrollSource\n  readonly start: TriggerPos\n  readonly end: TriggerPos\n  readonly toggleActions?: string | ToggleActions\n  readonly scheduler?: FrameScheduler\n}\n\nexport function playScrollTriggered(\n  def: AnimationDef<AnimationProps>,\n  targets: readonly StrategyTarget[],\n  opts: ScrollTriggeredOpts,\n): ScrollTriggeredHandle {\n  const actions = parseToggleActions(opts.toggleActions ?? DEFAULT_TOGGLE_ACTIONS)\n\n  const handle = playStrategy(def, targets, opts)\n  const controls = createControls(handle, def.duration)\n  controls.pause()\n  controls.seek(0)\n\n  // Scroll-triggered animations don't go through `play()`, so we\n  // register them with the tracker here. Backend label is \"scroll\" so\n  // devtools can distinguish them from clock-driven animations even\n  // though the underlying handle is a normal time-based one.\n  if (isTrackerEnabled()) {\n    trackAnimation(controls, targets, \"scroll\")\n  }\n\n  let state: ScrollTriggeredState = \"idle\"\n  let bounds: ScrollBounds | null = null\n  let currentZone: ScrollZone = \"before\"\n\n  const measure = (): void => {\n    const anchor = targets[0]\n    if (!anchor) return\n    const rect = opts.source.getRect(anchor)\n    bounds = computeBounds(opts.start, opts.end, {\n      elementTop: rect.top,\n      elementHeight: rect.height,\n      viewportHeight: opts.source.getViewportHeight(),\n    })\n  }\n\n  const sync = (): void => {\n    if (state === \"cancelled\") return\n    if (!bounds) measure()\n    if (!bounds) return\n    const next = zoneAt(opts.source.getScrollY(), bounds)\n    if (next === currentZone) return\n    const events = eventsFor(currentZone, next)\n    currentZone = next\n    if (state === \"idle\") state = \"active\"\n    for (const ev of events) applyAction(actionFor(ev, actions), controls)\n  }\n\n  measure()\n  sync()\n\n  const unsubScroll = opts.source.onScroll(sync)\n  const unsubResize = opts.source.onResize(() => {\n    bounds = null\n    sync()\n  })\n\n  return {\n    cancel() {\n      if (state === \"cancelled\") return\n      state = \"cancelled\"\n      unsubScroll()\n      unsubResize()\n      controls.cancel()\n    },\n    get controls() {\n      return controls\n    },\n    get state() {\n      return state\n    },\n  }\n}\n","/**\n * Public `scroll()` entry point. Resolves targets the same way `play()`\n * does (selector / element / array / NodeList), then dispatches to one\n * of two drivers:\n *\n *   - `sync: true`  → `playScrollSync` (progress tracks scroll position)\n *   - otherwise     → `playScrollTriggered` (Controls driven by zone\n *                      transitions according to `toggleActions`)\n */\n\nimport { omitUndefined } from \"../core/omit-undefined\"\nimport type { AnimationDef } from \"../core/types\"\nimport type { AnimationProps, StrategyTarget } from \"../render/strategy\"\nimport { createDomScrollSource } from \"../scroll/source\"\nimport type { ScrollSource } from \"../scroll/source\"\nimport { type ScrollSyncHandle, type ScrollSyncOpts, playScrollSync } from \"../scroll/sync\"\nimport { type TriggerPos, parseTriggerPos } from \"../scroll/trigger\"\nimport {\n  type ScrollTriggeredHandle,\n  type ScrollTriggeredOpts,\n  type ToggleActions,\n  playScrollTriggered,\n} from \"../scroll/triggered\"\nimport { type PlayOpts, type Target, resolveTargets } from \"./play\"\n\nexport interface ScrollTriggerConfig {\n  readonly start?: string | TriggerPos\n  readonly end?: string | TriggerPos\n}\n\nexport interface ScrollOpts\n  extends Omit<ScrollTriggeredOpts, \"source\" | \"start\" | \"end\" | \"toggleActions\">,\n    Omit<ScrollSyncOpts, \"source\" | \"start\" | \"end\"> {\n  /**\n   * If true, progress tracks scroll position directly (scroll-linked).\n   * If false or omitted, the animation is scroll-triggered: a regular\n   * clock-based animation whose playback is controlled by scroll zone\n   * transitions via `toggleActions`.\n   */\n  readonly sync?: boolean\n  readonly trigger?: ScrollTriggerConfig\n  readonly toggleActions?: string | ToggleActions\n  /** Override the scroll environment (defaults to the global window). */\n  readonly source?: ScrollSource\n  /** Selector resolver override (see `play()`). */\n  readonly resolve?: PlayOpts[\"resolve\"]\n}\n\nconst DEFAULT_START = \"top 80%\"\nconst DEFAULT_END = \"bottom 20%\"\n\nexport type ScrollHandle = ScrollSyncHandle | ScrollTriggeredHandle\n\nexport function scroll(\n  def: AnimationDef<AnimationProps>,\n  target: Target,\n  opts: ScrollOpts = {},\n): ScrollHandle {\n  const playOpts: PlayOpts = opts.resolve ? { resolve: opts.resolve } : {}\n  const targets: readonly StrategyTarget[] = resolveTargets(target, playOpts)\n  const source = opts.source ?? createDomScrollSource()\n  const start = parseTriggerPos(opts.trigger?.start ?? DEFAULT_START)\n  const end = parseTriggerPos(opts.trigger?.end ?? DEFAULT_END)\n\n  if (opts.sync) {\n    return playScrollSync(def, targets, {\n      source,\n      start,\n      end,\n      ...(opts.scheduler ? { scheduler: opts.scheduler } : {}),\n      ...(opts.onProgress ? { onProgress: opts.onProgress } : {}),\n    })\n  }\n\n  return playScrollTriggered(def, targets, {\n    ...opts,\n    source,\n    start,\n    end,\n    ...omitUndefined({ toggleActions: opts.toggleActions }),\n  })\n}\n","/**\n * Pointer abstraction used by the gesture drivers.\n *\n * `PointerSource.bind()` subscribes to the pointer lifecycle on a given\n * element (down → move → up/cancel) and returns an unsubscribe\n * function. The DOM implementation also calls `setPointerCapture` on\n * pointerdown so move/up events continue to fire on the target even if\n * the pointer leaves it. Tests supply a synthetic source that emits\n * events directly; this keeps the gesture logic DOM-free.\n *\n * `createVelocityTracker` keeps a ring buffer of recent pointer samples\n * and returns a px/ms velocity over a configurable time window. Used\n * on pointer release to drive momentum / spring-back animations.\n */\n\nexport interface Point {\n  readonly x: number\n  readonly y: number\n}\n\nexport interface PointerSample {\n  readonly x: number\n  readonly y: number\n  readonly time: number\n}\n\nexport interface PointerEventShim {\n  readonly pointerId: number\n  readonly pointerType: string\n  readonly clientX: number\n  readonly clientY: number\n  readonly timeStamp: number\n  preventDefault?(): void\n}\n\nexport interface PointerHandlers {\n  onStart?(ev: PointerEventShim): void\n  onMove?(ev: PointerEventShim): void\n  onEnd?(ev: PointerEventShim): void\n  onCancel?(ev: PointerEventShim): void\n}\n\nexport type PointerUnsubscribe = () => void\n\n/**\n * Element shape this module needs: pointer capture plus add/remove\n * event listeners. Real `Element` satisfies this naturally; tests may\n * pass any compatible shim.\n */\nexport interface PointerBindTarget {\n  setPointerCapture?(pointerId: number): void\n  releasePointerCapture?(pointerId: number): void\n  hasPointerCapture?(pointerId: number): boolean\n  addEventListener(\n    type: string,\n    cb: (ev: PointerEventShim) => void,\n    opts?: AddEventListenerOptions | boolean,\n  ): void\n  removeEventListener(type: string, cb: (ev: PointerEventShim) => void): void\n}\n\nexport interface PointerSource {\n  bind(el: PointerBindTarget, handlers: PointerHandlers): PointerUnsubscribe\n}\n\nexport function createDomPointerSource(): PointerSource {\n  return {\n    bind(el, handlers) {\n      const onStart = (ev: PointerEventShim): void => {\n        el.setPointerCapture?.(ev.pointerId)\n        handlers.onStart?.(ev)\n      }\n      const onMove = (ev: PointerEventShim): void => {\n        handlers.onMove?.(ev)\n      }\n      const onEnd = (ev: PointerEventShim): void => {\n        if (el.hasPointerCapture?.(ev.pointerId)) {\n          el.releasePointerCapture?.(ev.pointerId)\n        }\n        handlers.onEnd?.(ev)\n      }\n      const onCancel = (ev: PointerEventShim): void => {\n        if (el.hasPointerCapture?.(ev.pointerId)) {\n          el.releasePointerCapture?.(ev.pointerId)\n        }\n        handlers.onCancel?.(ev)\n      }\n\n      el.addEventListener(\"pointerdown\", onStart)\n      el.addEventListener(\"pointermove\", onMove)\n      el.addEventListener(\"pointerup\", onEnd)\n      el.addEventListener(\"pointercancel\", onCancel)\n\n      return () => {\n        el.removeEventListener(\"pointerdown\", onStart)\n        el.removeEventListener(\"pointermove\", onMove)\n        el.removeEventListener(\"pointerup\", onEnd)\n        el.removeEventListener(\"pointercancel\", onCancel)\n      }\n    },\n  }\n}\n\nexport interface VelocityOpts {\n  /** Time window in ms over which to compute velocity. Default 100. */\n  readonly windowMs?: number\n  /** Max samples retained in the ring buffer. Default 8. */\n  readonly maxSamples?: number\n}\n\nexport interface VelocityTracker {\n  record(sample: PointerSample): void\n  /**\n   * Current velocity in px/ms. Computed as (latest - oldest in window)\n   * divided by their time delta. Returns `{ x: 0, y: 0 }` if fewer than\n   * two samples fall inside the window.\n   */\n  velocity(): Point\n  reset(): void\n}\n\nexport function createVelocityTracker(opts: VelocityOpts = {}): VelocityTracker {\n  const windowMs = opts.windowMs ?? 100\n  const max = opts.maxSamples ?? 8\n  const samples: PointerSample[] = []\n\n  return {\n    record(sample) {\n      samples.push(sample)\n      if (samples.length > max) samples.shift()\n    },\n    velocity() {\n      if (samples.length < 2) return { x: 0, y: 0 }\n      const latest = samples[samples.length - 1]\n      if (!latest) return { x: 0, y: 0 }\n      const cutoff = latest.time - windowMs\n      let oldest = latest\n      for (let i = samples.length - 1; i >= 0; i--) {\n        const s = samples[i]\n        if (!s) continue\n        if (s.time < cutoff) break\n        oldest = s\n      }\n      const dt = latest.time - oldest.time\n      if (dt <= 0) return { x: 0, y: 0 }\n      return {\n        x: (latest.x - oldest.x) / dt,\n        y: (latest.y - oldest.y) / dt,\n      }\n    },\n    reset() {\n      samples.length = 0\n    },\n  }\n}\n","/**\n * Drag gesture driver.\n *\n * Pointer down on a target enters the `dragging` phase: pointer movement\n * updates a 2D offset and writes it to the targets' `x`/`y` pseudo-\n * transform properties. Pointer up enters `releasing`, during which the\n * offset tweens toward either the nearest snap point or the origin\n * (depending on configuration). Re-grabbing during a release cancels it\n * and continues the drag from the current offset.\n *\n * Velocity is tracked via `createVelocityTracker` across the drag so\n * callers can read it in `onEnd`. The release animation is driven by\n * the shared frame scheduler (keepalive on `update`) rather than through\n * the animation `play()` pipeline, because the offset is local state\n * that must remain live-editable across phases.\n */\n\nimport { shouldReduceMotion } from \"../core/reduced-motion\"\nimport { applyValues } from \"../render/apply\"\nimport type { StrategyTarget } from \"../render/strategy\"\nimport type { Clock } from \"../scheduler/clock\"\nimport { defaultClock } from \"../scheduler/clock\"\nimport type { FrameScheduler } from \"../scheduler/frame\"\nimport { frame as defaultFrame } from \"../scheduler/frame\"\nimport type {\n  Point,\n  PointerBindTarget,\n  PointerEventShim,\n  PointerSource,\n  PointerUnsubscribe,\n} from \"./pointer\"\nimport { createDomPointerSource, createVelocityTracker } from \"./pointer\"\n\nexport type DragAxis = \"x\" | \"y\" | \"both\"\n\nexport type DragPhase = \"idle\" | \"dragging\" | \"releasing\" | \"cancelled\"\n\nexport interface DragBounds {\n  readonly left?: number\n  readonly right?: number\n  readonly top?: number\n  readonly bottom?: number\n}\n\nexport interface DragSnap {\n  readonly points: readonly Point[]\n  /**\n   * Max distance (in px) between the release point and a snap point at\n   * which the release will snap to that point. If no point is within\n   * `threshold`, the drag releases to origin (if `release` is set) or\n   * stays in place.\n   */\n  readonly threshold?: number\n}\n\nexport interface DragReleaseOpts {\n  /**\n   * Duration of the return-to-origin or snap animation, in ms. Default 400.\n   */\n  readonly duration?: number\n}\n\nexport interface DragEvent {\n  readonly offset: Point\n  readonly velocity: Point\n  readonly pointerEvent: PointerEventShim\n}\n\nexport interface DragOpts {\n  readonly target: PointerBindTarget\n  readonly axis?: DragAxis\n  readonly bounds?: DragBounds\n  readonly snap?: DragSnap\n  /**\n   * Enable release-to-origin spring when no snap matches. Pass any\n   * object to enable with defaults; pass `false` (the default) to leave\n   * the element at the drop position.\n   */\n  readonly release?: DragReleaseOpts | false\n  readonly source?: PointerSource\n  readonly scheduler?: FrameScheduler\n  readonly clock?: Clock\n  /** Apply `touch-action` CSS to the target. Default `true`. */\n  readonly applyTouchAction?: boolean\n  readonly onStart?: (ev: DragEvent) => void\n  readonly onMove?: (ev: DragEvent) => void\n  readonly onEnd?: (ev: DragEvent) => void\n}\n\nexport interface DragHandle {\n  cancel(): void\n  readonly phase: DragPhase\n  readonly offset: Point\n  readonly velocity: Point\n}\n\ninterface StyleCapable {\n  readonly style?: { setProperty(name: string, value: string): void }\n}\n\nfunction touchActionFor(axis: DragAxis): string {\n  if (axis === \"x\") return \"pan-y\"\n  if (axis === \"y\") return \"pan-x\"\n  return \"none\"\n}\n\nfunction clamp(value: number, lo: number | undefined, hi: number | undefined): number {\n  if (lo !== undefined && value < lo) return lo\n  if (hi !== undefined && value > hi) return hi\n  return value\n}\n\nfunction applyBounds(offset: Point, bounds: DragBounds | undefined, axis: DragAxis): Point {\n  if (!bounds) return offset\n  return {\n    x: axis === \"y\" ? 0 : clamp(offset.x, bounds.left, bounds.right),\n    y: axis === \"x\" ? 0 : clamp(offset.y, bounds.top, bounds.bottom),\n  }\n}\n\nfunction nearestSnap(offset: Point, snap: DragSnap): Point | null {\n  const threshold = snap.threshold ?? Number.POSITIVE_INFINITY\n  let best: Point | null = null\n  let bestDist = threshold\n  for (const p of snap.points) {\n    const dist = Math.hypot(p.x - offset.x, p.y - offset.y)\n    if (dist <= bestDist) {\n      bestDist = dist\n      best = p\n    }\n  }\n  return best\n}\n\nfunction renderOffset(targets: readonly StrategyTarget[], offset: Point): void {\n  for (const t of targets) applyValues(t, { x: offset.x, y: offset.y })\n}\n\nexport function playDrag(targets: readonly StrategyTarget[], opts: DragOpts): DragHandle {\n  const axis: DragAxis = opts.axis ?? \"both\"\n  const scheduler = opts.scheduler ?? defaultFrame\n  const clock = opts.clock ?? defaultClock\n  const source = opts.source ?? createDomPointerSource()\n  const applyTouchAction = opts.applyTouchAction !== false\n\n  if (applyTouchAction) {\n    const styled = opts.target as StyleCapable\n    styled.style?.setProperty(\"touch-action\", touchActionFor(axis))\n  }\n\n  const velocity = createVelocityTracker()\n\n  let phase: DragPhase = \"idle\"\n  let offset: Point = { x: 0, y: 0 }\n  let dragStart: Point = { x: 0, y: 0 }\n  let dragStartOffset: Point = { x: 0, y: 0 }\n  let activePointerId: number | null = null\n\n  let releaseFrom: Point = { x: 0, y: 0 }\n  let releaseTo: Point = { x: 0, y: 0 }\n  let releaseStartTime = 0\n  let releaseDuration = 0\n  let releaseActive = false\n\n  const releaseStep = (): void => {\n    if (!releaseActive || phase === \"cancelled\") return\n    const t = clock.now()\n    const elapsed = t - releaseStartTime\n    const raw = releaseDuration <= 0 ? 1 : elapsed / releaseDuration\n    const p = raw <= 0 ? 0 : raw >= 1 ? 1 : raw\n    // ease-out cubic\n    const eased = 1 - (1 - p) ** 3\n    const next: Point = {\n      x: releaseFrom.x + (releaseTo.x - releaseFrom.x) * eased,\n      y: releaseFrom.y + (releaseTo.y - releaseFrom.y) * eased,\n    }\n    offset = next\n    renderOffset(targets, next)\n    if (p >= 1) {\n      releaseActive = false\n      scheduler.cancel(\"update\", releaseStep)\n      phase = \"idle\"\n    }\n  }\n\n  const startRelease = (ev: PointerEventShim): void => {\n    const snapTarget = opts.snap ? nearestSnap(offset, opts.snap) : null\n    const releaseCfg = opts.release\n    const hasRelease = releaseCfg !== false && releaseCfg !== undefined\n    const target: Point | null = snapTarget ?? (hasRelease ? { x: 0, y: 0 } : null)\n\n    opts.onEnd?.({\n      offset,\n      velocity: velocity.velocity(),\n      pointerEvent: ev,\n    })\n\n    if (!target) {\n      phase = \"idle\"\n      return\n    }\n\n    const finalTarget = applyBounds(target, opts.bounds, axis)\n    // Reduced-motion: jump straight to the snap/origin target without\n    // running the rAF release loop.\n    if (shouldReduceMotion()) {\n      offset = finalTarget\n      renderOffset(targets, finalTarget)\n      phase = \"idle\"\n      return\n    }\n    const duration = hasRelease ? (releaseCfg.duration ?? 400) : 400\n    releaseFrom = offset\n    releaseTo = finalTarget\n    releaseStartTime = clock.now()\n    releaseDuration = duration\n    releaseActive = true\n    phase = \"releasing\"\n    scheduler.schedule(\"update\", releaseStep, { keepalive: true })\n  }\n\n  const onStart = (ev: PointerEventShim): void => {\n    if (phase === \"cancelled\") return\n    if (releaseActive) {\n      releaseActive = false\n      scheduler.cancel(\"update\", releaseStep)\n    }\n    activePointerId = ev.pointerId\n    dragStart = { x: ev.clientX, y: ev.clientY }\n    dragStartOffset = offset\n    velocity.reset()\n    velocity.record({ x: ev.clientX, y: ev.clientY, time: ev.timeStamp })\n    phase = \"dragging\"\n    opts.onStart?.({\n      offset,\n      velocity: velocity.velocity(),\n      pointerEvent: ev,\n    })\n  }\n\n  const onMove = (ev: PointerEventShim): void => {\n    if (phase !== \"dragging\" || ev.pointerId !== activePointerId) return\n    const raw: Point = {\n      x: axis === \"y\" ? 0 : dragStartOffset.x + (ev.clientX - dragStart.x),\n      y: axis === \"x\" ? 0 : dragStartOffset.y + (ev.clientY - dragStart.y),\n    }\n    const next = applyBounds(raw, opts.bounds, axis)\n    offset = next\n    velocity.record({ x: ev.clientX, y: ev.clientY, time: ev.timeStamp })\n    renderOffset(targets, next)\n    opts.onMove?.({\n      offset,\n      velocity: velocity.velocity(),\n      pointerEvent: ev,\n    })\n  }\n\n  const onEnd = (ev: PointerEventShim): void => {\n    if (phase !== \"dragging\" || ev.pointerId !== activePointerId) return\n    activePointerId = null\n    startRelease(ev)\n  }\n\n  const onCancel = (ev: PointerEventShim): void => {\n    if (phase !== \"dragging\" || ev.pointerId !== activePointerId) return\n    activePointerId = null\n    opts.onEnd?.({\n      offset,\n      velocity: velocity.velocity(),\n      pointerEvent: ev,\n    })\n    phase = \"idle\"\n  }\n\n  const unsub: PointerUnsubscribe = source.bind(opts.target, {\n    onStart,\n    onMove,\n    onEnd,\n    onCancel,\n  })\n\n  return {\n    cancel() {\n      if (phase === \"cancelled\") return\n      phase = \"cancelled\"\n      if (releaseActive) {\n        releaseActive = false\n        scheduler.cancel(\"update\", releaseStep)\n      }\n      unsub()\n    },\n    get phase() {\n      return phase\n    },\n    get offset() {\n      return offset\n    },\n    get velocity() {\n      return velocity.velocity()\n    },\n  }\n}\n","/**\n * Hover gesture driver.\n *\n * Binds `pointerenter` and `pointerleave` on a single element; each\n * transition plays an `AnimationDef` on the given targets. The two\n * directions own independent `Controls`, so re-entering while the leave\n * animation is still running cancels the leave and starts a fresh enter\n * (and vice versa).\n *\n * When `leave` is omitted, `enter` is played forward on pointerenter and\n * reversed on pointerleave, so a single definition can drive both\n * directions.\n */\n\nimport type { Controls } from \"../api/controls\"\nimport { play } from \"../api/play\"\nimport type { AnimationDef } from \"../core/types\"\nimport type { AnimationProps, StrategyOpts, StrategyTarget } from \"../render/strategy\"\nimport type { PointerBindTarget } from \"./pointer\"\n\nexport type HoverState = \"idle\" | \"active\" | \"cancelled\"\n\nexport interface HoverHandle {\n  cancel(): void\n  readonly state: HoverState\n  /** `true` while the pointer is over the target. */\n  readonly isHovering: boolean\n}\n\nexport interface HoverOpts extends StrategyOpts {\n  readonly target: PointerBindTarget\n  /** Animation played on pointerenter. */\n  readonly enter: AnimationDef<AnimationProps>\n  /**\n   * Animation played on pointerleave. If omitted, the `enter` animation\n   * is reversed instead.\n   */\n  readonly leave?: AnimationDef<AnimationProps>\n}\n\nexport function playHover(targets: readonly StrategyTarget[], opts: HoverOpts): HoverHandle {\n  let state: HoverState = \"idle\"\n  let isHovering = false\n  let current: Controls | null = null\n\n  const { target, enter, leave, ...strategyOpts } = opts\n\n  const playOpts = strategyOpts as StrategyOpts\n\n  const startEnter = (): void => {\n    current?.cancel()\n    current = play(enter, targets, playOpts)\n    state = \"active\"\n  }\n\n  const startLeave = (): void => {\n    current?.cancel()\n    if (leave) {\n      current = play(leave, targets, playOpts)\n    } else {\n      const c = play(enter, targets, playOpts)\n      c.reverse()\n      current = c\n    }\n    state = \"active\"\n  }\n\n  const onEnter = (_ev: unknown): void => {\n    if (state === \"cancelled\") return\n    isHovering = true\n    startEnter()\n  }\n\n  const onLeave = (_ev: unknown): void => {\n    if (state === \"cancelled\") return\n    isHovering = false\n    startLeave()\n  }\n\n  type Listener = Parameters<PointerBindTarget[\"addEventListener\"]>[1]\n  target.addEventListener(\"pointerenter\", onEnter as unknown as Listener)\n  target.addEventListener(\"pointerleave\", onLeave as unknown as Listener)\n\n  return {\n    cancel() {\n      if (state === \"cancelled\") return\n      state = \"cancelled\"\n      current?.cancel()\n      current = null\n      target.removeEventListener(\"pointerenter\", onEnter as unknown as Listener)\n      target.removeEventListener(\"pointerleave\", onLeave as unknown as Listener)\n    },\n    get state() {\n      return state\n    },\n    get isHovering() {\n      return isHovering\n    },\n  }\n}\n","/**\n * Gesture recognizers: tap, press, pan, pinch.\n *\n * These are pure input observers. Unlike `drag` and `hover` they do not\n * drive the render pipeline — they bind to a `PointerBindTarget` and\n * report semantic gesture events to user callbacks. Higher-level helpers\n * can route those events into animations via `play()` when desired.\n *\n * Tap and press are single-pointer recognizers distinguished by duration:\n * a tap is a quick down/up within `maxDuration` and `maxMovement`; a\n * press is the pointer held past `minDuration` without leaving the\n * movement threshold. Pan is a continuous single-pointer gesture that\n * emits `onMove` once cumulative movement exceeds `threshold`. Pinch\n * tracks two simultaneous pointers and reports scale and rotation\n * deltas relative to the moment the second pointer arrived.\n */\n\nimport type { Clock } from \"../scheduler/clock\"\nimport { defaultClock } from \"../scheduler/clock\"\nimport type {\n  Point,\n  PointerBindTarget,\n  PointerEventShim,\n  PointerSource,\n  PointerUnsubscribe,\n} from \"./pointer\"\nimport { createDomPointerSource, createVelocityTracker } from \"./pointer\"\n\nexport type RecognizerState = \"idle\" | \"tracking\" | \"active\" | \"cancelled\"\n\nfunction distance(a: Point, b: Point): number {\n  return Math.hypot(a.x - b.x, a.y - b.y)\n}\n\nexport interface Timer {\n  set(cb: () => void, ms: number): unknown\n  clear(handle: unknown): void\n}\n\nconst DEFAULT_TIMER: Timer = {\n  set: (cb, ms) => {\n    const g = globalThis as { setTimeout?: (cb: () => void, ms: number) => unknown }\n    if (!g.setTimeout) throw new Error(\"recognizer: no setTimeout available\")\n    return g.setTimeout(cb, ms)\n  },\n  clear: (h) => {\n    const g = globalThis as { clearTimeout?: (h: unknown) => void }\n    g.clearTimeout?.(h)\n  },\n}\n\n// -----------------------------------------------------------------------\n// Tap\n// -----------------------------------------------------------------------\n\nexport interface TapEvent {\n  readonly point: Point\n  readonly duration: number\n  readonly pointerEvent: PointerEventShim\n}\n\nexport interface TapOpts {\n  readonly target: PointerBindTarget\n  readonly source?: PointerSource\n  readonly clock?: Clock\n  /** Max duration in ms for a tap. Default 250. */\n  readonly maxDuration?: number\n  /** Max movement in px from pointerdown; exceeding cancels the tap. Default 10. */\n  readonly maxMovement?: number\n  readonly onTap?: (ev: TapEvent) => void\n}\n\nexport interface TapHandle {\n  cancel(): void\n  readonly state: Exclude<RecognizerState, \"active\">\n}\n\nexport function playTap(opts: TapOpts): TapHandle {\n  const source = opts.source ?? createDomPointerSource()\n  const clock = opts.clock ?? defaultClock\n  const maxDuration = opts.maxDuration ?? 250\n  const maxMovement = opts.maxMovement ?? 10\n\n  let state: Exclude<RecognizerState, \"active\"> = \"idle\"\n  let startPoint: Point = { x: 0, y: 0 }\n  let startTime = 0\n  let activePointerId: number | null = null\n\n  const reset = (): void => {\n    activePointerId = null\n  }\n\n  const unsub: PointerUnsubscribe = source.bind(opts.target, {\n    onStart(ev) {\n      if (state === \"cancelled\") return\n      if (activePointerId !== null) return\n      activePointerId = ev.pointerId\n      startPoint = { x: ev.clientX, y: ev.clientY }\n      startTime = clock.now()\n      state = \"tracking\"\n    },\n    onMove(ev) {\n      if (state !== \"tracking\" || ev.pointerId !== activePointerId) return\n      if (distance({ x: ev.clientX, y: ev.clientY }, startPoint) > maxMovement) {\n        state = \"idle\"\n        reset()\n      }\n    },\n    onEnd(ev) {\n      if (state !== \"tracking\" || ev.pointerId !== activePointerId) return\n      const duration = clock.now() - startTime\n      const end: Point = { x: ev.clientX, y: ev.clientY }\n      const ok = duration <= maxDuration && distance(end, startPoint) <= maxMovement\n      state = \"idle\"\n      reset()\n      if (ok) {\n        opts.onTap?.({ point: end, duration, pointerEvent: ev })\n      }\n    },\n    onCancel(ev) {\n      if (ev.pointerId !== activePointerId) return\n      state = \"idle\"\n      reset()\n    },\n  })\n\n  return {\n    cancel() {\n      if (state === \"cancelled\") return\n      state = \"cancelled\"\n      reset()\n      unsub()\n    },\n    get state() {\n      return state\n    },\n  }\n}\n\n// -----------------------------------------------------------------------\n// Press (long-press)\n// -----------------------------------------------------------------------\n\nexport interface PressEvent {\n  readonly point: Point\n  readonly duration: number\n  readonly pointerEvent: PointerEventShim\n}\n\nexport interface PressOpts {\n  readonly target: PointerBindTarget\n  readonly source?: PointerSource\n  readonly timer?: Timer\n  /** Duration in ms the pointer must be held. Default 500. */\n  readonly minDuration?: number\n  /** Max movement in px during the press; exceeding cancels it. Default 10. */\n  readonly maxMovement?: number\n  readonly onPress?: (ev: PressEvent) => void\n  readonly onCancel?: () => void\n}\n\nexport interface PressHandle {\n  cancel(): void\n  readonly state: RecognizerState\n}\n\nexport function playPress(opts: PressOpts): PressHandle {\n  const source = opts.source ?? createDomPointerSource()\n  const timer = opts.timer ?? DEFAULT_TIMER\n  const minDuration = opts.minDuration ?? 500\n  const maxMovement = opts.maxMovement ?? 10\n\n  let state: RecognizerState = \"idle\"\n  let startPoint: Point = { x: 0, y: 0 }\n  let activePointerId: number | null = null\n  let timerHandle: unknown = null\n  let lastEvent: PointerEventShim | null = null\n\n  const clearTimer = (): void => {\n    if (timerHandle !== null) {\n      timer.clear(timerHandle)\n      timerHandle = null\n    }\n  }\n\n  const abort = (): void => {\n    clearTimer()\n    if (state === \"tracking\") opts.onCancel?.()\n    state = \"idle\"\n    activePointerId = null\n  }\n\n  const unsub: PointerUnsubscribe = source.bind(opts.target, {\n    onStart(ev) {\n      if (state === \"cancelled\" || activePointerId !== null) return\n      activePointerId = ev.pointerId\n      startPoint = { x: ev.clientX, y: ev.clientY }\n      lastEvent = ev\n      state = \"tracking\"\n      timerHandle = timer.set(() => {\n        timerHandle = null\n        if (state !== \"tracking\" || lastEvent === null) return\n        state = \"active\"\n        opts.onPress?.({\n          point: { x: lastEvent.clientX, y: lastEvent.clientY },\n          duration: minDuration,\n          pointerEvent: lastEvent,\n        })\n      }, minDuration)\n    },\n    onMove(ev) {\n      if (state !== \"tracking\" || ev.pointerId !== activePointerId) return\n      lastEvent = ev\n      if (distance({ x: ev.clientX, y: ev.clientY }, startPoint) > maxMovement) {\n        abort()\n      }\n    },\n    onEnd(ev) {\n      if (ev.pointerId !== activePointerId) return\n      abort()\n    },\n    onCancel(ev) {\n      if (ev.pointerId !== activePointerId) return\n      abort()\n    },\n  })\n\n  return {\n    cancel() {\n      if (state === \"cancelled\") return\n      clearTimer()\n      state = \"cancelled\"\n      activePointerId = null\n      unsub()\n    },\n    get state() {\n      return state\n    },\n  }\n}\n\n// -----------------------------------------------------------------------\n// Pan\n// -----------------------------------------------------------------------\n\nexport type PanAxis = \"x\" | \"y\" | \"both\"\n\nexport interface PanEvent {\n  readonly offset: Point\n  readonly velocity: Point\n  readonly pointerEvent: PointerEventShim\n}\n\nexport interface PanOpts {\n  readonly target: PointerBindTarget\n  readonly source?: PointerSource\n  readonly axis?: PanAxis\n  /** Min total movement in px before onStart fires. Default 0. */\n  readonly threshold?: number\n  readonly onStart?: (ev: PanEvent) => void\n  readonly onMove?: (ev: PanEvent) => void\n  readonly onEnd?: (ev: PanEvent) => void\n}\n\nexport interface PanHandle {\n  cancel(): void\n  readonly state: RecognizerState\n  readonly offset: Point\n  readonly velocity: Point\n}\n\nexport function playPan(opts: PanOpts): PanHandle {\n  const source = opts.source ?? createDomPointerSource()\n  const axis: PanAxis = opts.axis ?? \"both\"\n  const threshold = opts.threshold ?? 0\n\n  const velocity = createVelocityTracker()\n  let state: RecognizerState = \"idle\"\n  let startPoint: Point = { x: 0, y: 0 }\n  let offset: Point = { x: 0, y: 0 }\n  let activePointerId: number | null = null\n  let started = false\n\n  const computeOffset = (ev: PointerEventShim): Point => {\n    const dx = ev.clientX - startPoint.x\n    const dy = ev.clientY - startPoint.y\n    return {\n      x: axis === \"y\" ? 0 : dx,\n      y: axis === \"x\" ? 0 : dy,\n    }\n  }\n\n  const unsub: PointerUnsubscribe = source.bind(opts.target, {\n    onStart(ev) {\n      if (state === \"cancelled\" || activePointerId !== null) return\n      activePointerId = ev.pointerId\n      startPoint = { x: ev.clientX, y: ev.clientY }\n      offset = { x: 0, y: 0 }\n      started = false\n      velocity.reset()\n      velocity.record({ x: ev.clientX, y: ev.clientY, time: ev.timeStamp })\n      state = \"tracking\"\n    },\n    onMove(ev) {\n      if (state === \"cancelled\" || ev.pointerId !== activePointerId) return\n      if (state !== \"tracking\" && state !== \"active\") return\n      const next = computeOffset(ev)\n      offset = next\n      velocity.record({ x: ev.clientX, y: ev.clientY, time: ev.timeStamp })\n      if (!started) {\n        if (Math.hypot(next.x, next.y) < threshold) return\n        started = true\n        state = \"active\"\n        opts.onStart?.({ offset: next, velocity: velocity.velocity(), pointerEvent: ev })\n      } else {\n        opts.onMove?.({ offset: next, velocity: velocity.velocity(), pointerEvent: ev })\n      }\n    },\n    onEnd(ev) {\n      if (ev.pointerId !== activePointerId) return\n      const v = velocity.velocity()\n      if (started) {\n        opts.onEnd?.({ offset, velocity: v, pointerEvent: ev })\n      }\n      state = \"idle\"\n      started = false\n      activePointerId = null\n    },\n    onCancel(ev) {\n      if (ev.pointerId !== activePointerId) return\n      state = \"idle\"\n      started = false\n      activePointerId = null\n    },\n  })\n\n  return {\n    cancel() {\n      if (state === \"cancelled\") return\n      state = \"cancelled\"\n      activePointerId = null\n      unsub()\n    },\n    get state() {\n      return state\n    },\n    get offset() {\n      return offset\n    },\n    get velocity() {\n      return velocity.velocity()\n    },\n  }\n}\n\n// -----------------------------------------------------------------------\n// Pinch (two-pointer)\n// -----------------------------------------------------------------------\n\nexport interface PinchEvent {\n  readonly scale: number\n  readonly rotation: number\n  readonly center: Point\n  readonly pointerEvent: PointerEventShim\n}\n\nexport interface PinchOpts {\n  readonly target: PointerBindTarget\n  readonly source?: PointerSource\n  readonly onStart?: (ev: PinchEvent) => void\n  readonly onChange?: (ev: PinchEvent) => void\n  readonly onEnd?: (ev: PinchEvent) => void\n}\n\nexport interface PinchHandle {\n  cancel(): void\n  readonly state: RecognizerState\n  readonly scale: number\n  readonly rotation: number\n}\n\ninterface PointerSlot {\n  id: number\n  x: number\n  y: number\n}\n\nfunction pinchGeometry(\n  a: PointerSlot,\n  b: PointerSlot,\n): { dist: number; angle: number; center: Point } {\n  const dx = b.x - a.x\n  const dy = b.y - a.y\n  return {\n    dist: Math.hypot(dx, dy),\n    angle: Math.atan2(dy, dx),\n    center: { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 },\n  }\n}\n\nexport function playPinch(opts: PinchOpts): PinchHandle {\n  const source = opts.source ?? createDomPointerSource()\n\n  let state: RecognizerState = \"idle\"\n  const pointers = new Map<number, PointerSlot>()\n  let initialDist = 0\n  let initialAngle = 0\n  let currentScale = 1\n  let currentRotation = 0\n\n  const activePair = (): [PointerSlot, PointerSlot] | null => {\n    if (pointers.size < 2) return null\n    const it = pointers.values()\n    const a = it.next().value as PointerSlot\n    const b = it.next().value as PointerSlot\n    return [a, b]\n  }\n\n  const emitChange = (ev: PointerEventShim): void => {\n    const pair = activePair()\n    if (!pair) return\n    const g = pinchGeometry(pair[0], pair[1])\n    if (initialDist <= 0) return\n    currentScale = g.dist / initialDist\n    currentRotation = g.angle - initialAngle\n    opts.onChange?.({\n      scale: currentScale,\n      rotation: currentRotation,\n      center: g.center,\n      pointerEvent: ev,\n    })\n  }\n\n  const endPinch = (ev: PointerEventShim): void => {\n    if (state !== \"active\") return\n    state = \"tracking\"\n    opts.onEnd?.({\n      scale: currentScale,\n      rotation: currentRotation,\n      center: { x: ev.clientX, y: ev.clientY },\n      pointerEvent: ev,\n    })\n  }\n\n  const unsub: PointerUnsubscribe = source.bind(opts.target, {\n    onStart(ev) {\n      if (state === \"cancelled\") return\n      pointers.set(ev.pointerId, { id: ev.pointerId, x: ev.clientX, y: ev.clientY })\n      if (state === \"idle\") state = \"tracking\"\n      if (state === \"tracking\" && pointers.size >= 2) {\n        const pair = activePair()\n        if (!pair) return\n        const g = pinchGeometry(pair[0], pair[1])\n        initialDist = g.dist\n        initialAngle = g.angle\n        currentScale = 1\n        currentRotation = 0\n        state = \"active\"\n        opts.onStart?.({\n          scale: 1,\n          rotation: 0,\n          center: g.center,\n          pointerEvent: ev,\n        })\n      }\n    },\n    onMove(ev) {\n      if (state === \"cancelled\") return\n      const slot = pointers.get(ev.pointerId)\n      if (!slot) return\n      slot.x = ev.clientX\n      slot.y = ev.clientY\n      if (state === \"active\") emitChange(ev)\n    },\n    onEnd(ev) {\n      const had = pointers.delete(ev.pointerId)\n      if (!had) return\n      if (state === \"active\" && pointers.size < 2) endPinch(ev)\n      if (pointers.size === 0) state = \"idle\"\n    },\n    onCancel(ev) {\n      const had = pointers.delete(ev.pointerId)\n      if (!had) return\n      if (state === \"active\" && pointers.size < 2) endPinch(ev)\n      if (pointers.size === 0) state = \"idle\"\n    },\n  })\n\n  return {\n    cancel() {\n      if (state === \"cancelled\") return\n      state = \"cancelled\"\n      pointers.clear()\n      unsub()\n    },\n    get state() {\n      return state\n    },\n    get scale() {\n      return currentScale\n    },\n    get rotation() {\n      return currentRotation\n    },\n  }\n}\n","/**\n * `createReorderController()` is the framework-agnostic engine behind\n * the `Reorder` UI in each adapter. The controller holds a map of\n * `value -> HTMLElement` registrations, a current ordered list of\n * values (mirrored from the parent on every render), and starts a\n * drag session on demand.\n *\n * A drag session snapshots the rects of every registered item, then\n * for each pointer move:\n *  - translates the dragged element to follow the pointer along `axis`,\n *  - re-derives a new order by checking which neighbour's center the\n *    dragged item's projected center crossed,\n *  - translates non-dragged siblings by ±draggedSize to make room.\n *\n * On end, the dragged transform clears, sibling transforms clear, and\n * if the order differs from the original `values` snapshot the new\n * order is committed via `commit(next)`. Adapters wire DOM pointer\n * events and the `commit` callback; they never touch the rect / sort\n * math themselves.\n */\n\nexport type ReorderAxis = \"x\" | \"y\"\n\nexport interface ReorderDragSession {\n  move(clientCoord: number): void\n  end(): void\n  cancel(): void\n}\n\nexport interface ReorderControllerOpts<T> {\n  readonly axis: ReorderAxis\n  /** Snapshot of the current ordered values (reads only, on each drag start). */\n  readonly getValues: () => readonly T[]\n  /** Called once when the drag-final order differs from the snapshot at start. */\n  readonly commit: (next: T[]) => void\n}\n\nexport interface ReorderController<T> {\n  readonly axis: ReorderAxis\n  registerItem(value: T, el: HTMLElement | null): void\n  startDrag(value: T, _pointerId: number, clientCoord: number): ReorderDragSession | null\n  /** Tear down: clear registrations. Existing sessions are not cancelled. */\n  destroy(): void\n}\n\nconst getRectExtent = (rect: DOMRect, axis: ReorderAxis): { start: number; size: number } => {\n  if (axis === \"y\") return { start: rect.top, size: rect.height }\n  return { start: rect.left, size: rect.width }\n}\n\nconst applyTranslate = (el: HTMLElement, axis: ReorderAxis, delta: number): void => {\n  el.style.transform =\n    axis === \"y\" ? `translate3d(0, ${delta}px, 0)` : `translate3d(${delta}px, 0, 0)`\n}\n\nconst clearTranslate = (el: HTMLElement): void => {\n  el.style.transform = \"\"\n}\n\nconst arraysEqual = <T>(a: readonly T[], b: readonly T[]): boolean => {\n  if (a.length !== b.length) return false\n  for (let i = 0; i < a.length; i++) {\n    if (a[i] !== b[i]) return false\n  }\n  return true\n}\n\nexport function createReorderController<T>(opts: ReorderControllerOpts<T>): ReorderController<T> {\n  const { axis, getValues, commit } = opts\n  const items = new Map<T, HTMLElement>()\n\n  return {\n    axis,\n    registerItem(value: T, el: HTMLElement | null): void {\n      if (el) items.set(value, el)\n      else items.delete(value)\n    },\n    startDrag(value: T, _pointerId: number, clientCoord: number): ReorderDragSession | null {\n      const draggedEl = items.get(value)\n      if (!draggedEl) return null\n      const rects = new Map<T, { start: number; size: number }>()\n      for (const [v, el] of items) {\n        rects.set(v, getRectExtent(el.getBoundingClientRect(), axis))\n      }\n      const draggedRect = rects.get(value)\n      if (!draggedRect) return null\n      const draggedCenterStart = draggedRect.start + draggedRect.size / 2\n      const pointerStart = clientCoord\n      const initialValues = getValues()\n      let order: T[] = [...initialValues]\n      const movedSiblings = new Set<HTMLElement>()\n      draggedEl.style.zIndex = \"1\"\n      draggedEl.style.willChange = \"transform\"\n\n      const indexInInitial = new Map<T, number>()\n      initialValues.forEach((v, i) => indexInInitial.set(v, i))\n      const othersInInitialOrder = initialValues.filter((v) => v !== value)\n\n      const computeNewOrder = (pointerCoord: number): T[] => {\n        const draggedCenter = draggedCenterStart + (pointerCoord - pointerStart)\n        let inserted = false\n        const next: T[] = []\n        for (const o of othersInInitialOrder) {\n          const r = rects.get(o)\n          if (!r) continue\n          const center = r.start + r.size / 2\n          if (!inserted && draggedCenter < center) {\n            next.push(value)\n            inserted = true\n          }\n          next.push(o)\n        }\n        if (!inserted) next.push(value)\n        return next\n      }\n\n      const applySiblingShifts = (next: T[]): void => {\n        const indexInNext = new Map<T, number>()\n        next.forEach((v, i) => indexInNext.set(v, i))\n        const draggedSize = rects.get(value)?.size ?? 0\n        for (const [v, el] of items) {\n          if (v === value) continue\n          const initIdx = indexInInitial.get(v)\n          const newIdx = indexInNext.get(v)\n          if (initIdx === undefined || newIdx === undefined) continue\n          const delta = newIdx - initIdx\n          if (delta === 0) {\n            if (movedSiblings.has(el)) {\n              clearTranslate(el)\n              movedSiblings.delete(el)\n            }\n            continue\n          }\n          const shift = delta * draggedSize\n          applyTranslate(el, axis, shift)\n          movedSiblings.add(el)\n        }\n      }\n\n      const reset = (): void => {\n        for (const el of movedSiblings) clearTranslate(el)\n        movedSiblings.clear()\n        clearTranslate(draggedEl)\n        draggedEl.style.zIndex = \"\"\n        draggedEl.style.willChange = \"\"\n      }\n\n      return {\n        move(coord: number): void {\n          const offset = coord - pointerStart\n          applyTranslate(draggedEl, axis, offset)\n          const next = computeNewOrder(coord)\n          if (!arraysEqual(next, order)) {\n            order = next\n            applySiblingShifts(next)\n          }\n        },\n        end(): void {\n          reset()\n          if (!arraysEqual(order, initialValues)) commit(order)\n        },\n        cancel(): void {\n          reset()\n        },\n      }\n    },\n    destroy(): void {\n      items.clear()\n    },\n  }\n}\n","/**\n * Public gesture API. Exposes `gesture.drag` and `gesture.hover` as\n * thin wrappers around the gesture drivers that accept the same `Target`\n * argument as `play()` (selector / element / array), plus a separate\n * `target` option for the element that owns the pointer events (which\n * may or may not be the element being animated).\n *\n * Both helpers return a driver-specific handle. Cancel semantics mirror\n * `play()`: the handle's `cancel()` detaches listeners and stops any\n * in-flight animation.\n */\n\nimport { KinemError } from \"../core/errors\"\nimport type { DragHandle, DragOpts } from \"../gesture/drag\"\nimport { playDrag } from \"../gesture/drag\"\nimport type { HoverHandle, HoverOpts } from \"../gesture/hover\"\nimport { playHover } from \"../gesture/hover\"\nimport type { PointerBindTarget } from \"../gesture/pointer\"\nimport type {\n  PanHandle,\n  PanOpts,\n  PinchHandle,\n  PinchOpts,\n  PressHandle,\n  PressOpts,\n  TapHandle,\n  TapOpts,\n} from \"../gesture/recognizers\"\nimport { playPan, playPinch, playPress, playTap } from \"../gesture/recognizers\"\nimport { type PlayOpts, type Target, resolveTargets } from \"./play\"\n\nexport type GestureTarget = Target\n\nexport type DragPublicOpts = Omit<DragOpts, \"target\"> & {\n  /**\n   * The element that owns the pointer events. Defaults to the first\n   * resolved target. Pass explicitly when the pointer-listening element\n   * differs from the elements being animated (e.g., a handle inside a\n   * larger panel).\n   */\n  readonly target?: PointerBindTarget\n  readonly resolve?: PlayOpts[\"resolve\"]\n}\n\nexport type HoverPublicOpts = Omit<HoverOpts, \"target\"> & {\n  readonly target?: PointerBindTarget\n  readonly resolve?: PlayOpts[\"resolve\"]\n}\n\nexport type TapPublicOpts = Omit<TapOpts, \"target\"> & {\n  readonly target?: PointerBindTarget\n  readonly resolve?: PlayOpts[\"resolve\"]\n}\n\nexport type PressPublicOpts = Omit<PressOpts, \"target\"> & {\n  readonly target?: PointerBindTarget\n  readonly resolve?: PlayOpts[\"resolve\"]\n}\n\nexport type PanPublicOpts = Omit<PanOpts, \"target\"> & {\n  readonly target?: PointerBindTarget\n  readonly resolve?: PlayOpts[\"resolve\"]\n}\n\nexport type PinchPublicOpts = Omit<PinchOpts, \"target\"> & {\n  readonly target?: PointerBindTarget\n  readonly resolve?: PlayOpts[\"resolve\"]\n}\n\nfunction pickPointerTarget(\n  explicit: PointerBindTarget | undefined,\n  resolved: readonly unknown[],\n): PointerBindTarget {\n  if (explicit) return explicit\n  const first = resolved[0]\n  if (!first) {\n    throw new KinemError(\n      \"gesture: no target element resolved\",\n      \"pass an element/selector or provide opts.target explicitly\",\n    )\n  }\n  return first as PointerBindTarget\n}\n\nfunction drag(animated: GestureTarget, opts: DragPublicOpts = {}): DragHandle {\n  const { target, resolve, ...rest } = opts\n  const playOpts: PlayOpts = resolve ? { resolve } : {}\n  const targets = resolveTargets(animated, playOpts)\n  const pointerTarget = pickPointerTarget(target, targets)\n  return playDrag(targets, { ...rest, target: pointerTarget })\n}\n\nfunction hover(animated: GestureTarget, opts: HoverPublicOpts): HoverHandle {\n  const { target, resolve, ...rest } = opts\n  const playOpts: PlayOpts = resolve ? { resolve } : {}\n  const targets = resolveTargets(animated, playOpts)\n  const pointerTarget = pickPointerTarget(target, targets)\n  return playHover(targets, { ...rest, target: pointerTarget })\n}\n\nfunction tap(animated: GestureTarget, opts: TapPublicOpts = {}): TapHandle {\n  const { target, resolve, ...rest } = opts\n  const playOpts: PlayOpts = resolve ? { resolve } : {}\n  const targets = resolveTargets(animated, playOpts)\n  const pointerTarget = pickPointerTarget(target, targets)\n  return playTap({ ...rest, target: pointerTarget })\n}\n\nfunction press(animated: GestureTarget, opts: PressPublicOpts = {}): PressHandle {\n  const { target, resolve, ...rest } = opts\n  const playOpts: PlayOpts = resolve ? { resolve } : {}\n  const targets = resolveTargets(animated, playOpts)\n  const pointerTarget = pickPointerTarget(target, targets)\n  return playPress({ ...rest, target: pointerTarget })\n}\n\nfunction pan(animated: GestureTarget, opts: PanPublicOpts = {}): PanHandle {\n  const { target, resolve, ...rest } = opts\n  const playOpts: PlayOpts = resolve ? { resolve } : {}\n  const targets = resolveTargets(animated, playOpts)\n  const pointerTarget = pickPointerTarget(target, targets)\n  return playPan({ ...rest, target: pointerTarget })\n}\n\nfunction pinch(animated: GestureTarget, opts: PinchPublicOpts = {}): PinchHandle {\n  const { target, resolve, ...rest } = opts\n  const playOpts: PlayOpts = resolve ? { resolve } : {}\n  const targets = resolveTargets(animated, playOpts)\n  const pointerTarget = pickPointerTarget(target, targets)\n  return playPinch({ ...rest, target: pointerTarget })\n}\n\nexport const gesture = { drag, hover, tap, press, pan, pinch }\n\nexport type { DragHandle, HoverHandle, PanHandle, PinchHandle, PressHandle, TapHandle }\n","/**\n * Motion-component-shaped `MotionTransition` is a Framer-style shorthand\n * for a tween or spring. This helper resolves it into the concrete\n * `{ duration, easing }` pair that `tween()` consumes.\n *\n *  type \"tween\" (default): { duration: ms, easing: EasingFn }\n *  type \"spring\": springEasing({ stiffness, damping, mass, velocity })\n *                 with `.duration` taken from the spring's settling\n *                 time unless the caller overrode it explicitly.\n *\n * Lives in core so all four adapters resolve identically. No DOM here:\n * adapters provide the values bag and the play backend separately.\n */\n\nimport { type SpringOpts, springEasing } from \"../core/easing\"\nimport type { EasingFn } from \"../core/types\"\n\nexport type TransitionType = \"tween\" | \"spring\"\n\nexport interface MotionTransitionShape extends SpringOpts {\n  readonly type?: TransitionType\n  readonly duration?: number\n  readonly easing?: EasingFn\n}\n\nexport interface ResolvedTransition {\n  readonly duration: number\n  readonly easing?: EasingFn\n}\n\nconst DEFAULT_TWEEN_DURATION_MS = 400\n\nexport function resolveTransition(t: MotionTransitionShape | undefined): ResolvedTransition {\n  if (!t || t.type === \"tween\" || (!t.type && t.duration !== undefined && !hasSpringFields(t))) {\n    return resolveTween(t)\n  }\n  if (t.type === \"spring\" || hasSpringFields(t)) {\n    return resolveSpring(t)\n  }\n  return resolveTween(t)\n}\n\nconst hasSpringFields = (t: MotionTransitionShape): boolean =>\n  t.stiffness !== undefined ||\n  t.damping !== undefined ||\n  t.mass !== undefined ||\n  t.velocity !== undefined ||\n  t.restVelocity !== undefined ||\n  t.restDisplacement !== undefined\n\nconst resolveTween = (t: MotionTransitionShape | undefined): ResolvedTransition => {\n  const out: { duration: number; easing?: EasingFn } = {\n    duration: t?.duration ?? DEFAULT_TWEEN_DURATION_MS,\n  }\n  if (t?.easing) out.easing = t.easing\n  return out\n}\n\nconst resolveSpring = (t: MotionTransitionShape): ResolvedTransition => {\n  const springOpts: { -readonly [K in keyof SpringOpts]: SpringOpts[K] } = {}\n  if (t.stiffness !== undefined) springOpts.stiffness = t.stiffness\n  if (t.damping !== undefined) springOpts.damping = t.damping\n  if (t.mass !== undefined) springOpts.mass = t.mass\n  if (t.velocity !== undefined) springOpts.velocity = t.velocity\n  if (t.restVelocity !== undefined) springOpts.restVelocity = t.restVelocity\n  if (t.restDisplacement !== undefined) springOpts.restDisplacement = t.restDisplacement\n  const easing = springEasing(springOpts)\n  return {\n    duration: t.duration ?? easing.duration,\n    easing,\n  }\n}\n","/**\n * MotionValue is a tiny reactive cell. Subscribers are notified when\n * `set(v)` is called with a value that is not strictly equal to the\n * current one. It deliberately has no batching, no scheduling, and no\n * change detection beyond `Object.is`: the call site decides when to\n * update, and downstream consumers (renderers, transforms, components)\n * decide what to do with the notification.\n *\n * The cell also tracks the most recent `set` time per `performance.now`\n * so callers can compute velocity over a sliding window. Velocity is\n * lazy: it is only computed on demand via `getVelocity()`, never on\n * every set, so updating a value at 120 Hz costs one comparison and one\n * subscriber loop.\n *\n * Generic over `T` so the same primitive backs numbers, strings,\n * tuples, and arbitrary objects. For numeric values the velocity helper\n * is well-defined; for non-numeric values it always returns 0.\n */\n\nexport type MotionValueListener<T> = (value: T, prev: T) => void\nexport type Unsubscribe = () => void\n\nexport interface MotionValue<T> {\n  /** Read the current value without subscribing. */\n  get(): T\n  /** Replace the value. Listeners fire iff the value actually changes. */\n  set(value: T): void\n  /**\n   * Subscribe to value changes. The listener is NOT invoked\n   * synchronously; the caller already knows the current value via\n   * `get()`. Returns an unsubscribe function that is safe to call from\n   * inside a listener.\n   */\n  on(listener: MotionValueListener<T>): Unsubscribe\n  /**\n   * Velocity (units per second) for numeric values, computed from the\n   * two most recent samples. Returns 0 for non-numeric values, for the\n   * first sample, or when more than `velocityWindowMs` has elapsed\n   * since the last update (stale).\n   */\n  getVelocity(): number\n  /**\n   * Tear down the cell: clears all listeners. Subsequent `set` calls\n   * are no-ops on the listener set, but still update the value.\n   */\n  destroy(): void\n}\n\ninterface MotionValueState<T> {\n  value: T\n  prevValue: T | undefined\n  prevTime: number | undefined\n  lastTime: number | undefined\n  listeners: Set<MotionValueListener<T>>\n}\n\nconst VELOCITY_WINDOW_MS = 30\n\nconst now = (): number =>\n  typeof performance !== \"undefined\" && typeof performance.now === \"function\"\n    ? performance.now()\n    : Date.now()\n\nexport function motionValue<T>(initial: T): MotionValue<T> {\n  const state: MotionValueState<T> = {\n    value: initial,\n    prevValue: undefined,\n    prevTime: undefined,\n    lastTime: undefined,\n    listeners: new Set(),\n  }\n\n  return {\n    get(): T {\n      return state.value\n    },\n    set(next: T): void {\n      const prev = state.value\n      if (Object.is(prev, next)) return\n      state.prevValue = prev\n      state.prevTime = state.lastTime\n      state.lastTime = now()\n      state.value = next\n      if (state.listeners.size === 0) return\n      // Snapshot to tolerate add/remove during dispatch.\n      const snapshot = Array.from(state.listeners)\n      for (let i = 0; i < snapshot.length; i++) {\n        snapshot[i]!(next, prev)\n      }\n    },\n    on(listener: MotionValueListener<T>): Unsubscribe {\n      state.listeners.add(listener)\n      return () => {\n        state.listeners.delete(listener)\n      }\n    },\n    getVelocity(): number {\n      if (typeof state.value !== \"number\") return 0\n      if (state.prevValue === undefined || state.prevTime === undefined) return 0\n      if (state.lastTime === undefined) return 0\n      const elapsed = state.lastTime - state.prevTime\n      if (elapsed <= 0) return 0\n      const sinceLast = now() - state.lastTime\n      if (sinceLast > VELOCITY_WINDOW_MS) return 0\n      const v = state.value as unknown as number\n      const p = state.prevValue as unknown as number\n      return ((v - p) / elapsed) * 1000\n    },\n    destroy(): void {\n      state.listeners.clear()\n    },\n  }\n}\n\n/** Convenience: bridge a MotionValue to a CSS variable on an element. */\nexport function bindMotionValueToCss<T>(\n  mv: MotionValue<T>,\n  el: { style: { setProperty(name: string, value: string): void } },\n  cssVarName: string,\n  format: (value: T) => string = (v) => String(v),\n): Unsubscribe {\n  el.style.setProperty(cssVarName, format(mv.get()))\n  return mv.on((value) => {\n    el.style.setProperty(cssVarName, format(value))\n  })\n}\n","/**\n * `transform()` maps a numeric input across a sorted input range to an\n * output produced by interpolating between corresponding output stops.\n *\n *   const opacity = transform([0, 100, 200], [0, 1, 0])\n *   opacity(150) // 0.5\n *\n * Two output kinds are supported out of the box:\n *  - numbers: linear interpolation\n *  - strings: dispatched to a registered Interpolator (color, unit,\n *    transform, etc.) via the renderer's `interpolateValue` helper\n *\n * Extrapolation is configurable via `clamp` (default true). When clamp\n * is false, inputs below the first stop or above the last extrapolate\n * linearly off the nearest segment.\n *\n * The returned function is pure and allocation-free per call (the\n * per-segment interpolators are precomputed at construction time), so\n * it is safe to call from a `requestAnimationFrame` loop.\n */\n\nimport { interpolate } from \"../interpolate/registry\"\n\nexport type TransformInputRange = readonly [number, number, ...number[]]\nexport type TransformOutputRange<T> = readonly [T, T, ...T[]]\n\nexport interface TransformOpts {\n  /** Clamp inputs to the input range (default true). */\n  readonly clamp?: boolean\n}\n\nconst buildSegment = <T>(from: T, to: T): ((p: number) => T) => {\n  if (typeof from === \"number\" && typeof to === \"number\") {\n    const a = from\n    const b = to\n    return (p) => (a + (b - a) * p) as unknown as T\n  }\n  // Delegate to the registry, which routes through registered\n  // interpolators (color, unit, transform, path, etc.).\n  return interpolate(from, to)\n}\n\nexport function transform<T>(\n  inputRange: TransformInputRange,\n  outputRange: TransformOutputRange<T>,\n  opts: TransformOpts = {},\n): (input: number) => T {\n  if (inputRange.length !== outputRange.length) {\n    throw new Error(\n      `transform(): inputRange (${inputRange.length}) and outputRange (${outputRange.length}) must have the same length`,\n    )\n  }\n  if (inputRange.length < 2) {\n    throw new Error(\"transform(): ranges must have at least 2 stops\")\n  }\n  for (let i = 1; i < inputRange.length; i++) {\n    if (inputRange[i]! <= inputRange[i - 1]!) {\n      throw new Error(\"transform(): inputRange must be strictly increasing\")\n    }\n  }\n\n  const clamp = opts.clamp !== false\n  const stops = inputRange\n  const segments: Array<(p: number) => T> = []\n  for (let i = 0; i < outputRange.length - 1; i++) {\n    segments.push(buildSegment(outputRange[i]!, outputRange[i + 1]!))\n  }\n  const first = outputRange[0]!\n  const last = outputRange[outputRange.length - 1]!\n\n  return (input: number): T => {\n    if (clamp) {\n      if (input <= stops[0]!) return first\n      if (input >= stops[stops.length - 1]!) return last\n    }\n    // Find the segment containing `input`.\n    let i = 0\n    for (; i < stops.length - 2; i++) {\n      if (input < stops[i + 1]!) break\n    }\n    const a = stops[i]!\n    const b = stops[i + 1]!\n    const span = b - a\n    const p = span === 0 ? 0 : (input - a) / span\n    return segments[i]!(p)\n  }\n}\n","/**\n * `inView()` is a tiny IntersectionObserver wrapper. It calls\n * `enter(entry)` the first time the element crosses the visibility\n * threshold and (unless `once: true`) `leave(entry)` the next time it\n * leaves. The returned function unobserves and disconnects.\n *\n *   const stop = inView(el, (entry) => {\n *     play(fadeIn, [entry.target])\n *     return () => play(fadeOut, [entry.target])\n *   })\n *\n * The callback may return a `leave` cleanup function that fires on the\n * next exit; this matches the React `useEffect` style without forcing\n * adapters to allocate a second listener.\n *\n * If `IntersectionObserver` is not available (SSR, very old browsers),\n * the helper logs nothing, calls `enter` synchronously with `null`\n * (treating \"we can't tell\" as \"in view\"), and returns a no-op stop.\n * This makes server-side renders match the optimistic visible state and\n * prevents content from being permanently hidden.\n */\n\nexport interface InViewEntry {\n  readonly target: Element\n  readonly isIntersecting: boolean\n  readonly intersectionRatio: number\n  readonly boundingClientRect: DOMRectReadOnly\n  readonly rootBounds: DOMRectReadOnly | null\n  readonly time: number\n}\n\nexport interface InViewOpts {\n  /** Trigger only the first entry; never observe again. Default false. */\n  readonly once?: boolean\n  /** IntersectionObserver `root`. */\n  readonly root?: Element | Document | null\n  /** IntersectionObserver `rootMargin` (e.g. \"0px 0px -10% 0px\"). */\n  readonly rootMargin?: string\n  /**\n   * Visibility ratio at which `enter` fires.\n   *  - \"some\" (default): any pixel visible (threshold 0)\n   *  - \"all\": fully visible (threshold 1)\n   *  - number in [0, 1]: explicit threshold\n   */\n  readonly amount?: \"some\" | \"all\" | number\n}\n\nexport type InViewLeave = (entry: InViewEntry | null) => void\nexport type InViewEnter = (entry: InViewEntry) => InViewLeave | undefined\nexport type InViewStop = () => void\n\nconst NULL_ENTRY = (target: Element): InViewEntry => ({\n  target,\n  isIntersecting: true,\n  intersectionRatio: 1,\n  boundingClientRect: {\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    width: 0,\n    height: 0,\n    x: 0,\n    y: 0,\n    toJSON: () => ({}),\n  },\n  rootBounds: null,\n  time: 0,\n})\n\nconst resolveThreshold = (amount: InViewOpts[\"amount\"]): number => {\n  if (amount === \"all\") return 1\n  if (typeof amount === \"number\") {\n    if (amount < 0) return 0\n    if (amount > 1) return 1\n    return amount\n  }\n  return 0\n}\n\nexport function inView(target: Element, enter: InViewEnter, opts: InViewOpts = {}): InViewStop {\n  if (typeof IntersectionObserver === \"undefined\") {\n    // Optimistic fallback: treat as visible. The user's `enter` may\n    // start an animation; we don't wire `leave` because there's no\n    // way to detect exit without an observer.\n    enter(NULL_ENTRY(target))\n    return () => {}\n  }\n\n  const threshold = resolveThreshold(opts.amount)\n  let leave: InViewLeave | undefined\n  let entered = false\n\n  const init: IntersectionObserverInit = { threshold }\n  if (opts.root !== undefined) init.root = opts.root\n  if (opts.rootMargin !== undefined) init.rootMargin = opts.rootMargin\n\n  const observer = new IntersectionObserver((entries) => {\n    for (let i = 0; i < entries.length; i++) {\n      const e = entries[i]!\n      if (e.isIntersecting && !entered) {\n        entered = true\n        const result = enter({\n          target: e.target,\n          isIntersecting: e.isIntersecting,\n          intersectionRatio: e.intersectionRatio,\n          boundingClientRect: e.boundingClientRect,\n          rootBounds: e.rootBounds,\n          time: e.time,\n        })\n        if (typeof result === \"function\") leave = result\n        if (opts.once) {\n          observer.disconnect()\n          return\n        }\n      } else if (!e.isIntersecting && entered) {\n        entered = false\n        if (leave) {\n          leave({\n            target: e.target,\n            isIntersecting: e.isIntersecting,\n            intersectionRatio: e.intersectionRatio,\n            boundingClientRect: e.boundingClientRect,\n            rootBounds: e.rootBounds,\n            time: e.time,\n          })\n          leave = undefined\n        }\n      }\n    }\n  }, init)\n\n  observer.observe(target)\n\n  return () => {\n    observer.disconnect()\n    if (leave) {\n      leave(null)\n      leave = undefined\n    }\n  }\n}\n","/**\n * `time()` returns a `MotionValue<number>` that ticks on every animation\n * frame, holding milliseconds since the cell was created. It is meant\n * as a driver for `transform()` chains or other MotionValues that want\n * to follow wall-clock time without each consumer running its own rAF\n * loop.\n *\n *   const t = time()\n *   const wave = transform([0, 1000], [0, 1])\n *   t.on((ms) => el.style.opacity = String(wave(ms % 1000)))\n *\n * The tick stops automatically when the cell has no listeners, and\n * resumes when a listener is added. Call `.destroy()` to drop it\n * permanently. In SSR (no `requestAnimationFrame`), `set()` is never\n * called and the value stays at its initial 0.\n */\n\nimport { type MotionValue, type Unsubscribe, motionValue } from \"./motion-value\"\n\nconst raf = (cb: (t: number) => void): number => {\n  if (typeof requestAnimationFrame === \"function\") return requestAnimationFrame(cb)\n  return 0\n}\n\nconst cancelRaf = (id: number): void => {\n  if (id !== 0 && typeof cancelAnimationFrame === \"function\") cancelAnimationFrame(id)\n}\n\nconst now = (): number =>\n  typeof performance !== \"undefined\" && typeof performance.now === \"function\"\n    ? performance.now()\n    : Date.now()\n\nexport interface TimeMotionValue extends MotionValue<number> {\n  /** Stop the rAF loop and clear listeners. */\n  destroy(): void\n}\n\nexport function time(): TimeMotionValue {\n  const start = now()\n  const mv = motionValue(0)\n  let frameId = 0\n  let running = false\n\n  const tick = (): void => {\n    mv.set(now() - start)\n    frameId = raf(tick)\n  }\n\n  const start_ = (): void => {\n    if (running) return\n    running = true\n    frameId = raf(tick)\n  }\n\n  const stop = (): void => {\n    if (!running) return\n    running = false\n    cancelRaf(frameId)\n    frameId = 0\n  }\n\n  const baseOn = mv.on\n  const baseDestroy = mv.destroy\n  let listenerCount = 0\n\n  const on = (listener: (value: number, prev: number) => void): Unsubscribe => {\n    listenerCount++\n    if (listenerCount === 1) start_()\n    const off = baseOn(listener)\n    return () => {\n      off()\n      listenerCount = Math.max(0, listenerCount - 1)\n      if (listenerCount === 0) stop()\n    }\n  }\n\n  return {\n    get: mv.get,\n    set: mv.set,\n    on,\n    getVelocity: mv.getVelocity,\n    destroy(): void {\n      stop()\n      listenerCount = 0\n      baseDestroy()\n    },\n  }\n}\n","/**\n * `velocity(source)` returns a `MotionValue<number>` that mirrors the\n * per-second derivative of a numeric source `MotionValue`. It updates\n * whenever the source updates, by reading `source.getVelocity()`.\n *\n *   const x = motionValue(0)\n *   const vx = velocity(x)\n *   x.set(100); x.set(200)\n *   vx.get() // velocity in units/sec\n *\n * The returned cell registers a single listener on the source and\n * mirrors that subscription. `.destroy()` unsubscribes from the source\n * and clears local listeners. Useful for spring-on-release, throw\n * gestures, or `transform()`-driven UI that responds to pace rather\n * than position.\n */\n\nimport { type MotionValue, type Unsubscribe, motionValue } from \"./motion-value\"\n\nexport interface VelocityMotionValue extends MotionValue<number> {\n  /** Stop tracking and clear listeners. */\n  destroy(): void\n}\n\nexport function velocity(source: MotionValue<number>): VelocityMotionValue {\n  const mv = motionValue(source.getVelocity())\n  const off = source.on(() => {\n    mv.set(source.getVelocity())\n  })\n  const baseDestroy = mv.destroy\n  return {\n    get: mv.get,\n    set: mv.set,\n    on: mv.on,\n    getVelocity: mv.getVelocity,\n    destroy(): void {\n      off()\n      baseDestroy()\n    },\n  }\n}\n","/**\n * `combine(sources, fn)` returns a derived `MotionValue<T>` whose value\n * is recomputed from `fn(...sourceValues)` whenever any source emits.\n *\n *   const x = motionValue(0)\n *   const y = motionValue(0)\n *   const dist = combine([x, y], (a, b) => Math.hypot(a, b))\n *   x.set(3); y.set(4)\n *   dist.get() // 5\n *\n * The returned cell registers one listener per source. Calling\n * `.destroy()` unsubscribes from every source and clears local\n * listeners, so a single teardown call is enough to release the graph.\n *\n * `fn` is invoked synchronously on each upstream change, so keep it\n * cheap. For numeric reductions that should be smoothed, layer a\n * `transform()` over the result or feed it through a renderer.\n */\n\nimport { type MotionValue, motionValue } from \"./motion-value\"\n\nexport interface CombinedMotionValue<T> extends MotionValue<T> {\n  /** Stop tracking all sources and clear listeners. */\n  destroy(): void\n}\n\ntype SourceValues<S extends readonly MotionValue<unknown>[]> = {\n  [K in keyof S]: S[K] extends MotionValue<infer V> ? V : never\n}\n\nexport function combine<S extends readonly MotionValue<unknown>[], T>(\n  sources: S,\n  fn: (...values: SourceValues<S>) => T,\n): CombinedMotionValue<T> {\n  const read = (): T => {\n    const values = sources.map((s) => s.get()) as unknown as SourceValues<S>\n    return fn(...values)\n  }\n\n  const mv = motionValue(read())\n  const offs = sources.map((s) =>\n    s.on(() => {\n      mv.set(read())\n    }),\n  )\n  const baseDestroy = mv.destroy\n  return {\n    get: mv.get,\n    set: mv.set,\n    on: mv.on,\n    getVelocity: mv.getVelocity,\n    destroy(): void {\n      for (const off of offs) off()\n      baseDestroy()\n    },\n  }\n}\n","/**\n * `motionValueEvent(mv, \"change\", listener)` is an ergonomic wrapper\n * around `mv.on(listener)`. It exists mostly to mirror Framer Motion's\n * `useMotionValueEvent` shape so framework hooks have a uniform name to\n * delegate to, and to leave room for additional event names in the\n * future (e.g. `\"animationStart\"`) without breaking the call sites.\n *\n *   const stop = motionValueEvent(x, \"change\", (v) => console.log(v))\n *   stop()\n */\n\nimport type { MotionValue, MotionValueListener, Unsubscribe } from \"./motion-value\"\n\nexport type MotionValueEventName = \"change\"\n\nexport function motionValueEvent<T>(\n  mv: MotionValue<T>,\n  event: MotionValueEventName,\n  listener: MotionValueListener<T>,\n): Unsubscribe {\n  if (event !== \"change\") {\n    throw new Error(`motionValueEvent: unsupported event \"${event}\"`)\n  }\n  return mv.on(listener)\n}\n","/**\n * Vue inject key that lets a parent `<Motion>` propagate its current\n * variant key (or array of keys) to descendant `<Motion>` components\n * that have their own `variants` map but no explicit `animate`. The\n * descendant resolves the inherited key against its own variants, so a\n * single parent flip can drive children with the same vocabulary.\n *\n * Stagger. When the parent declares `transition.staggerChildren > 0`,\n * the context also carries a stagger plan: `staggerMs` and a shared\n * mount-order counter. Each inheriting descendant claims an index from\n * the counter on its first setup and uses `index * staggerMs` as the\n * delay before its tween starts.\n */\n\nimport type { InjectionKey, Ref } from \"vue\"\n\nexport type MotionAnimateKey = string | readonly string[] | null\n\nexport interface MotionStaggerInfo {\n  readonly staggerMs: number\n  readonly counter: { current: number }\n}\n\nexport interface MotionAnimateContextValue {\n  readonly key: MotionAnimateKey\n  readonly stagger: MotionStaggerInfo | null\n}\n\n/** Reactive ref so descendants pick up parent animate-key changes. */\nexport const MotionAnimateKey: InjectionKey<Ref<MotionAnimateContextValue | null>> =\n  Symbol(\"kinem.motion.animate\")\n","/**\n * `<Motion>` is a declarative wrapper around `play()`. It renders a\n * host element (configurable via the `as` prop) and drives animation\n * via a template ref.\n *\n *   <Motion as=\"div\" :initial=\"{ opacity: 0 }\" :animate=\"{ opacity: 1 }\"\n *           :transition=\"{ duration: 400 }\" />\n *\n * Variants. Pass a `variants` map of named `MotionValues` and use a\n * string key for `initial`, `animate`, `exit`, `whileHover`, or\n * `whileTap` to drive a declarative state machine:\n *\n *   const v = { closed: { opacity: 0 }, open: { opacity: 1 } }\n *   <Motion :variants=\"v\" initial=\"closed\" :animate=\"isOpen ? 'open' : 'closed'\" />\n *\n * Parent-child propagation. A `<Motion>` whose `animate` is a key\n * provides that key (via `inject`) to descendants that have their own\n * `variants` but no explicit `animate`. The descendants resolve the\n * inherited key against their own map.\n *\n * whileHover / whileTap. Resolved values from these props temporarily\n * override `animate` while the pointer is over (hover) or pressed\n * (tap). Tap takes precedence over hover.\n *\n * The resolved `initial` object is applied as inline styles on first\n * render so the element paints at the starting state before any animation\n * frame runs.\n */\n\nimport type {\n  Controls,\n  EasingFn,\n  NormalizedVelocity,\n  PlayOpts,\n  StrategyTarget,\n} from \"@kinem/core\"\nimport { omitUndefined, play, resolveTransition, tween } from \"@kinem/core\"\nimport {\n  type CSSProperties,\n  type PropType,\n  type Ref,\n  computed,\n  defineComponent,\n  h,\n  inject,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  ref,\n  shallowRef,\n  watch,\n} from \"vue\"\nimport {\n  type MotionAnimateContextValue,\n  MotionAnimateKey,\n  type MotionAnimateKey as MotionAnimateKeyType,\n} from \"./motion-context\"\nimport { PresenceKey } from \"./presence\"\n\nexport type MotionValues = Readonly<Record<string, string | number>>\n\nexport type Variants = Readonly<Record<string, MotionValues>>\n\n/**\n * What `initial`, `animate`, `exit`, `whileHover`, and `whileTap` accept:\n * inline values, a single variant key, or an array of keys merged in\n * order (later wins). String / array forms require a `variants` map;\n * otherwise they resolve to `undefined` and the prop is ignored.\n */\nexport type VariantTarget = MotionValues | string | readonly string[]\n\nexport interface MotionTransition {\n  /**\n   * \"tween\" (default) plays a fixed-duration easing; \"spring\" plays a\n   * physical spring. When omitted, the presence of any spring field\n   * implies \"spring\".\n   */\n  readonly type?: \"tween\" | \"spring\"\n  readonly duration?: number\n  readonly easing?: EasingFn\n  readonly stiffness?: number\n  readonly damping?: number\n  readonly mass?: number\n  /**\n   * Spring: initial velocity, in normalized [0, 1]/sec units of travel.\n   * Mint with `normalizedVelocity()` or `velocityFromSpan()` from\n   * `@kinem/core`.\n   */\n  readonly velocity?: NormalizedVelocity\n  readonly backend?: PlayOpts[\"backend\"]\n  /**\n   * Per-element delay in ms before the tween starts. Composes with any\n   * stagger delay inherited from a parent.\n   */\n  readonly delay?: number\n  /**\n   * When set on a parent `<Motion>`, descendants that inherit the\n   * parent's animate key are staggered by `staggerChildren` ms in\n   * mount order: the first child has zero delay, the second\n   * `staggerChildren` ms, the third `2 * staggerChildren`, and so on.\n   * Applies only to animate-key-driven changes; whileHover and\n   * whileTap never stagger.\n   */\n  readonly staggerChildren?: number\n}\n\nfunction isVariantKey(t: VariantTarget): t is string | readonly string[] {\n  return typeof t === \"string\" || Array.isArray(t)\n}\n\nfunction resolveTarget(\n  target: VariantTarget | undefined,\n  variants: Variants | undefined,\n): MotionValues | undefined {\n  if (target === undefined) return undefined\n  if (typeof target === \"string\") return variants?.[target]\n  if (Array.isArray(target)) {\n    if (!variants) return undefined\n    const merged: Record<string, string | number> = {}\n    for (const k of target) {\n      const v = variants[k]\n      if (v) Object.assign(merged, v)\n    }\n    return merged\n  }\n  return target as MotionValues\n}\n\nfunction shallowEqualValues(a: MotionValues | undefined, b: MotionValues | undefined): boolean {\n  if (a === b) return true\n  if (!a || !b) return false\n  const aKeys = Object.keys(a)\n  const bKeys = Object.keys(b)\n  if (aKeys.length !== bKeys.length) return false\n  for (const key of aKeys) {\n    if (a[key] !== b[key]) return false\n  }\n  return true\n}\n\nfunction buildTweenProps(\n  from: MotionValues,\n  to: MotionValues,\n): Record<string, readonly [string | number, string | number]> {\n  const props: Record<string, readonly [string | number, string | number]> = {}\n  for (const key of Object.keys(to)) {\n    const fromVal = from[key] ?? to[key]\n    const toVal = to[key]\n    if (fromVal === undefined || toVal === undefined) continue\n    props[key] = [fromVal, toVal]\n  }\n  return props\n}\n\nexport const Motion = defineComponent({\n  name: \"Motion\",\n  // We bind attrs explicitly in render. Disabling auto-inheritance is\n  // load-bearing: when we extract pointer handlers out of attrs (so we\n  // can wrap them), the default auto-merge would re-attach the original\n  // user handler on top of ours, double-firing whileHover / whileTap.\n  inheritAttrs: false,\n  props: {\n    as: { type: String, default: \"div\" },\n    variants: { type: Object as PropType<Variants>, default: undefined },\n    initial: { type: [Object, String, Array] as PropType<VariantTarget>, default: undefined },\n    animate: { type: [Object, String, Array] as PropType<VariantTarget>, default: undefined },\n    exit: { type: [Object, String, Array] as PropType<VariantTarget>, default: undefined },\n    whileHover: {\n      type: [Object, String, Array] as PropType<VariantTarget>,\n      default: undefined,\n    },\n    whileTap: { type: [Object, String, Array] as PropType<VariantTarget>, default: undefined },\n    transition: { type: Object as PropType<MotionTransition>, default: undefined },\n  },\n  setup(props, { slots, attrs }) {\n    const elRef = shallowRef<Element | null>(null)\n    let controls: Controls | null = null\n    let startTimer: ReturnType<typeof setTimeout> | null = null\n    const presence = inject(PresenceKey, null)\n    const parentCtx = inject(MotionAnimateKey, null)\n\n    const parentAnimateKey = computed<MotionAnimateKeyType>(() => parentCtx?.value?.key ?? null)\n    const inheritingFromParent = computed<boolean>(\n      () =>\n        props.animate === undefined &&\n        props.variants !== undefined &&\n        parentAnimateKey.value != null,\n    )\n\n    const effectiveAnimate = computed<VariantTarget | undefined>(() => {\n      if (props.animate !== undefined) return props.animate\n      if (inheritingFromParent.value) return parentAnimateKey.value as VariantTarget\n      return undefined\n    })\n\n    // Allocate a stagger index lazily on first setup if we are\n    // inheriting the parent's key and the parent has set a stagger\n    // schedule. The index is captured once and stable for the lifetime\n    // of this component.\n    const staggerIndex: number | null =\n      inheritingFromParent.value && parentCtx?.value?.stagger\n        ? parentCtx.value.stagger.counter.current++\n        : null\n\n    const hovering = ref(false)\n    const tapping = ref(false)\n\n    const resolvedInitial = computed(() => resolveTarget(props.initial, props.variants))\n    const resolvedAnimate = computed(() => resolveTarget(effectiveAnimate.value, props.variants))\n    const resolvedExit = computed(() => resolveTarget(props.exit, props.variants))\n    const resolvedHover = computed(() => resolveTarget(props.whileHover, props.variants))\n    const resolvedTap = computed(() => resolveTarget(props.whileTap, props.variants))\n\n    // Tap > hover > animate. Track the source so we can decide whether\n    // to apply parent stagger (stagger only fires for animate-key-driven\n    // changes, never for pointer-driven hover/tap).\n    type TargetSource = \"tap\" | \"hover\" | \"animate\"\n    const targetSource = computed<TargetSource>(() => {\n      if (tapping.value && resolvedTap.value) return \"tap\"\n      if (hovering.value && resolvedHover.value) return \"hover\"\n      return \"animate\"\n    })\n    const targetValues = computed<MotionValues | undefined>(() => {\n      const src = targetSource.value\n      if (src === \"tap\") return resolvedTap.value\n      if (src === \"hover\") return resolvedHover.value\n      return resolvedAnimate.value\n    })\n\n    let currentValues: MotionValues | undefined = resolvedInitial.value ?? resolvedAnimate.value\n\n    // Stagger counter is held outside the computed so it survives re-runs\n    // when only effectiveAnimate changes; existing children keep their\n    // mount-order indices when the key flips.\n    const staggerCounter = { current: 0 }\n\n    const provideValue = computed<MotionAnimateContextValue | null>(() => {\n      const key =\n        effectiveAnimate.value !== undefined && isVariantKey(effectiveAnimate.value)\n          ? effectiveAnimate.value\n          : null\n      if (key === null) return null\n      const staggerMs = props.transition?.staggerChildren\n      return {\n        key,\n        stagger: staggerMs && staggerMs > 0 ? { staggerMs, counter: staggerCounter } : null,\n      }\n    })\n\n    // Provide as a ref so descendants reactively re-resolve when our\n    // animate key changes.\n    provide(MotionAnimateKey, provideValue as unknown as Ref<MotionAnimateContextValue | null>)\n\n    const cancelStartTimer = (): void => {\n      if (startTimer !== null) {\n        clearTimeout(startTimer)\n        startTimer = null\n      }\n    }\n\n    const runTween = (\n      from: MotionValues,\n      to: MotionValues,\n      source: TargetSource,\n    ): Controls | null => {\n      const el = elRef.value\n      if (!el) return null\n      const tweenProps = buildTweenProps(from, to)\n      if (Object.keys(tweenProps).length === 0) return null\n      const transition = props.transition\n      if (controls && controls.state !== \"cancelled\" && controls.state !== \"finished\") {\n        controls.cancel()\n      }\n      cancelStartTimer()\n\n      const inheritedStagger =\n        source === \"animate\" &&\n        inheritingFromParent.value &&\n        parentCtx?.value?.stagger &&\n        staggerIndex !== null\n          ? staggerIndex * parentCtx.value.stagger.staggerMs\n          : 0\n      const totalDelay = inheritedStagger + (transition?.delay ?? 0)\n\n      const start = (): Controls => {\n        const resolved = resolveTransition(transition)\n        const def = tween(tweenProps, {\n          duration: resolved.duration,\n          ...omitUndefined({ easing: resolved.easing }),\n        })\n        const playOpts: PlayOpts = omitUndefined({ backend: transition?.backend })\n        controls = play(def, [el as unknown as StrategyTarget], playOpts)\n        return controls\n      }\n      if (totalDelay > 0) {\n        startTimer = setTimeout(() => {\n          startTimer = null\n          start()\n        }, totalDelay)\n        return null\n      }\n      return start()\n    }\n\n    onMounted(() => {\n      const target = targetValues.value\n      if (!target) return\n      const from = currentValues ?? resolvedInitial.value ?? target\n      runTween(from, target, targetSource.value)\n      currentValues = target\n    })\n\n    watch(targetValues, (next, prev) => {\n      if (!next) return\n      if (shallowEqualValues(next, prev)) return\n      const from = currentValues ?? resolvedInitial.value ?? next\n      if (shallowEqualValues(from, next)) return\n      runTween(from, next, targetSource.value)\n      currentValues = next\n    })\n\n    if (presence) {\n      let exitStarted = false\n      watch(\n        () => presence.isPresent,\n        (isPresent) => {\n          if (isPresent || exitStarted) return\n          exitStarted = true\n          const el = elRef.value\n          const from = currentValues ?? resolvedAnimate.value ?? resolvedInitial.value\n          const exitVals = resolvedExit.value\n          if (!el || !exitVals || !from) {\n            presence.safeToRemove()\n            return\n          }\n          const c = runTween(from, exitVals, \"animate\")\n          if (!c) {\n            presence.safeToRemove()\n            return\n          }\n          let removed = false\n          const done = (): void => {\n            if (removed) return\n            removed = true\n            presence.safeToRemove()\n          }\n          c.finished.then(done, done)\n        },\n        { immediate: true },\n      )\n    }\n\n    onBeforeUnmount(() => {\n      cancelStartTimer()\n      if (controls && controls.state !== \"cancelled\" && controls.state !== \"finished\") {\n        controls.cancel()\n      }\n      controls = null\n    })\n\n    return () => {\n      const userStyle = (attrs.style as CSSProperties | undefined) ?? {}\n      const mergedStyle: CSSProperties = {\n        ...((resolvedInitial.value ?? {}) as CSSProperties),\n        ...userStyle,\n      }\n\n      // Strip pointer attrs out of the spread so we don't end up with\n      // both Vue's auto-merged listener-array and our own handler firing\n      // the user's callback. We chain into the user's handler manually\n      // when our while* prop is set, otherwise we forward it as-is.\n      const {\n        style: _style,\n        onPointerenter: userOnPointerEnter,\n        onPointerleave: userOnPointerLeave,\n        onPointerdown: userOnPointerDown,\n        onPointerup: userOnPointerUp,\n        onPointercancel: userOnPointerCancel,\n        ...restAttrs\n      } = attrs as Record<string, unknown>\n\n      const handlers: Record<string, (e: PointerEvent) => void> = {}\n      const userEnter = userOnPointerEnter as ((e: PointerEvent) => void) | undefined\n      const userLeave = userOnPointerLeave as ((e: PointerEvent) => void) | undefined\n      const userDown = userOnPointerDown as ((e: PointerEvent) => void) | undefined\n      const userUp = userOnPointerUp as ((e: PointerEvent) => void) | undefined\n      const userCancel = userOnPointerCancel as ((e: PointerEvent) => void) | undefined\n\n      if (props.whileHover !== undefined) {\n        handlers[\"onPointerenter\"] = (e) => {\n          hovering.value = true\n          userEnter?.(e)\n        }\n        handlers[\"onPointerleave\"] = (e) => {\n          hovering.value = false\n          tapping.value = false\n          userLeave?.(e)\n        }\n      } else {\n        if (userEnter) handlers[\"onPointerenter\"] = userEnter\n        if (userLeave) handlers[\"onPointerleave\"] = userLeave\n      }\n      if (props.whileTap !== undefined) {\n        handlers[\"onPointerdown\"] = (e) => {\n          tapping.value = true\n          userDown?.(e)\n        }\n        handlers[\"onPointerup\"] = (e) => {\n          tapping.value = false\n          userUp?.(e)\n        }\n        handlers[\"onPointercancel\"] = (e) => {\n          tapping.value = false\n          userCancel?.(e)\n        }\n      } else {\n        if (userDown) handlers[\"onPointerdown\"] = userDown\n        if (userUp) handlers[\"onPointerup\"] = userUp\n        if (userCancel) handlers[\"onPointercancel\"] = userCancel\n      }\n\n      return h(\n        props.as,\n        {\n          ...restAttrs,\n          ...handlers,\n          ref: (el: unknown) => {\n            elRef.value = (el as Element | null) ?? null\n          },\n          style: mergedStyle,\n        },\n        slots[\"default\"]?.(),\n      )\n    }\n  },\n})\n","import type { ReorderController } from \"@kinem/core\"\nimport type { InjectionKey } from \"vue\"\n\nexport const ReorderKey: InjectionKey<ReorderController<unknown>> = Symbol(\"kinem.reorder.group\")\n","/**\n * `<ReorderGroup>` and `<ReorderItem>` provide a drag-to-sort list. The\n * group owns the `values` array and an `onReorder` callback; each item\n * registers itself with the group, becomes draggable along the group's\n * `axis`, and asks the group to commit a new order whenever the\n * dragged item's center crosses a neighbour's. Sibling translates are\n * applied mid-drag; pointer release commits and clears them.\n *\n *   <ReorderGroup axis=\"y\" :values=\"items\" @reorder=\"setItems\">\n *     <ReorderItem v-for=\"item in items\" :key=\"item.id\" :value=\"item\">\n *       {{ item.label }}\n *     </ReorderItem>\n *   </ReorderGroup>\n */\n\nimport {\n  type ReorderAxis,\n  type ReorderController,\n  type ReorderDragSession,\n  createReorderController,\n} from \"@kinem/core\"\nimport {\n  type CSSProperties,\n  type Component,\n  type PropType,\n  defineComponent,\n  h,\n  inject,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  shallowRef,\n} from \"vue\"\nimport { ReorderKey } from \"./reorder-context\"\n\nexport type { ReorderAxis }\n\nexport const ReorderGroup = defineComponent({\n  name: \"ReorderGroup\",\n  inheritAttrs: false,\n  props: {\n    values: { type: Array as PropType<readonly unknown[]>, required: true },\n    onReorder: { type: Function as PropType<(next: unknown[]) => void>, required: true },\n    axis: { type: String as PropType<ReorderAxis>, default: \"y\" },\n    as: { type: String, default: \"ul\" },\n  },\n  setup(props, { slots, attrs }) {\n    const ctrl = createReorderController<unknown>({\n      axis: props.axis,\n      getValues: () => props.values,\n      commit: (next) => props.onReorder(next),\n    })\n    provide(ReorderKey, ctrl)\n    onBeforeUnmount(() => {\n      ctrl.destroy()\n    })\n    return () => h(props.as, { ...attrs }, slots[\"default\"]?.())\n  },\n})\n\nexport const ReorderItem: Component = defineComponent({\n  name: \"ReorderItem\",\n  inheritAttrs: false,\n  props: {\n    value: { type: null as unknown as PropType<unknown>, required: true },\n    as: { type: String, default: \"li\" },\n    idleCursor: { type: String as PropType<CSSProperties[\"cursor\"]>, default: \"grab\" },\n  },\n  setup(props, { slots, attrs }) {\n    const ctx = inject(ReorderKey, null) as ReorderController<unknown> | null\n    if (!ctx) {\n      throw new Error(\"ReorderItem must be rendered inside a ReorderGroup\")\n    }\n    const elRef = shallowRef<HTMLElement | null>(null)\n    let session: ReorderDragSession | null = null\n\n    onMounted(() => {\n      if (elRef.value) ctx.registerItem(props.value, elRef.value)\n    })\n    onBeforeUnmount(() => {\n      ctx.registerItem(props.value, null)\n      if (session) {\n        session.cancel()\n        session = null\n      }\n    })\n\n    const onPointerdown = (e: PointerEvent): void => {\n      if (e.button !== undefined && e.button !== 0) return\n      const target = e.currentTarget as HTMLElement | null\n      if (!target) return\n      const coord = ctx.axis === \"y\" ? e.clientY : e.clientX\n      const next = ctx.startDrag(props.value, e.pointerId, coord)\n      if (!next) return\n      session = next\n      try {\n        target.setPointerCapture(e.pointerId)\n      } catch {\n        // ignore\n      }\n      e.preventDefault()\n    }\n    const onPointermove = (e: PointerEvent): void => {\n      if (!session) return\n      const coord = ctx.axis === \"y\" ? e.clientY : e.clientX\n      session.move(coord)\n    }\n    const finish = (e: PointerEvent): void => {\n      if (!session) return\n      const s = session\n      session = null\n      s.end()\n      try {\n        ;(e.currentTarget as HTMLElement | null)?.releasePointerCapture(e.pointerId)\n      } catch {\n        // ignore\n      }\n    }\n\n    return () => {\n      const mergedStyle: CSSProperties = {\n        cursor: props.idleCursor,\n        touchAction: ctx.axis === \"y\" ? \"pan-x\" : \"pan-y\",\n        ...((attrs.style as CSSProperties | undefined) ?? {}),\n      }\n      const { style: _omit, ...restAttrs } = attrs as Record<string, unknown>\n      return h(\n        props.as,\n        {\n          ref: (el: unknown) => {\n            elRef.value = el as HTMLElement | null\n          },\n          style: mergedStyle,\n          onPointerdown,\n          onPointermove,\n          onPointerup: finish,\n          onPointercancel: finish,\n          ...restAttrs,\n        },\n        slots[\"default\"]?.(),\n      )\n    }\n  },\n})\n","/**\n * `useAnimate()` returns `{ scope, animate }` for imperative animation\n * against elements inside a scoped subtree. `scope` is a Vue template\n * ref to bind via `:ref=\"scope\"`; `animate(target, props, opts)`\n * resolves `target` (a CSS selector queried within scope, an Element,\n * or an Element[]) and runs a `tween()` of `props` against each match.\n *\n *   const { scope, animate } = useAnimate()\n *   const handleClick = () => animate(\"li\", { opacity: [0, 1] }, { duration: 300 })\n *   <ul :ref=\"scope\">...</ul>\n */\n\nimport {\n  type Controls,\n  type PlayOpts,\n  type TweenOpts,\n  type TweenProps,\n  play,\n  tween,\n} from \"@kinem/core\"\nimport { type Ref, ref } from \"vue\"\n\nexport type AnimateTarget = string | HTMLElement | readonly HTMLElement[]\n\nexport type UseAnimateAnimate = <P extends TweenProps>(\n  target: AnimateTarget,\n  props: P,\n  opts?: TweenOpts & PlayOpts,\n) => Controls\n\nexport interface UseAnimateResult<T extends HTMLElement = HTMLElement> {\n  readonly scope: Ref<T | null>\n  readonly animate: UseAnimateAnimate\n}\n\nconst resolveTargets = (scope: HTMLElement | null, target: AnimateTarget): HTMLElement[] => {\n  if (typeof target === \"string\") {\n    if (!scope) return []\n    return Array.from(scope.querySelectorAll<HTMLElement>(target))\n  }\n  if (Array.isArray(target)) return target as HTMLElement[]\n  return [target as HTMLElement]\n}\n\nexport function useAnimate<T extends HTMLElement = HTMLElement>(): UseAnimateResult<T> {\n  const scope = ref<T | null>(null) as Ref<T | null>\n  const animate: UseAnimateAnimate = <P extends TweenProps>(\n    target: AnimateTarget,\n    props: P,\n    opts: TweenOpts & PlayOpts = {},\n  ): Controls => {\n    const targets = resolveTargets(scope.value, target)\n    return play(tween(props, opts) as Parameters<typeof play>[0], targets, opts)\n  }\n  return { scope, animate }\n}\n","/**\n * `useAnimation` binds a vanilla `play()` controller to a Vue template\n * ref. The composable itself performs no side effects on setup; callers\n * must call `play(def)` (typically from an event handler or\n * `onMounted`) to start.\n *\n *   const { ref, play } = useAnimation<HTMLElement>()\n *   play(tween({ opacity: [0, 1] }, { duration: 400 }))\n *\n * On `onBeforeUnmount`, the latest Controls handle is cancelled.\n * Calling `play()` with a second animation cancels the first\n * automatically so overlapping animations do not leak handles.\n */\n\nimport type {\n  AnimationDef,\n  AnimationProps,\n  Controls,\n  PlayOpts,\n  StrategyState,\n  StrategyTarget,\n} from \"@kinem/core\"\nimport { play as playCore } from \"@kinem/core\"\nimport { type ShallowRef, onBeforeUnmount, shallowRef } from \"vue\"\n\nexport interface UseAnimationResult<T extends Element = Element> {\n  /** Attach to the element being animated via `ref`. */\n  readonly ref: ShallowRef<T | null>\n  /** Play an `AnimationDef`. Cancels any in-flight animation first. */\n  play(def: AnimationDef<AnimationProps>, opts?: PlayOpts): Controls\n  pause(): void\n  resume(): void\n  seek(progress: number): void\n  reverse(): void\n  cancel(): void\n  setSpeed(multiplier: number): void\n  /** Live state of the most recent playback. `\"idle\"` if none has started. */\n  readonly state: StrategyState\n}\n\nexport function useAnimation<T extends Element = Element>(): UseAnimationResult<T> {\n  const elRef: ShallowRef<T | null> = shallowRef(null)\n  let current: Controls | null = null\n\n  const cancelCurrent = (): void => {\n    if (current && current.state !== \"cancelled\" && current.state !== \"finished\") {\n      current.cancel()\n    }\n  }\n\n  onBeforeUnmount(() => {\n    cancelCurrent()\n    current = null\n  })\n\n  return {\n    ref: elRef,\n    play(def, opts) {\n      const el = elRef.value\n      if (!el) {\n        throw new Error(\"useAnimation.play(): element ref is not attached yet\")\n      }\n      cancelCurrent()\n      current = playCore(def, [el as unknown as StrategyTarget], opts ?? {})\n      return current\n    },\n    pause() {\n      current?.pause()\n    },\n    resume() {\n      current?.resume()\n    },\n    seek(progress) {\n      current?.seek(progress)\n    },\n    reverse() {\n      current?.reverse()\n    },\n    cancel() {\n      cancelCurrent()\n    },\n    setSpeed(multiplier) {\n      if (current) current.speed = multiplier\n    },\n    get state() {\n      return current?.state ?? \"idle\"\n    },\n  }\n}\n","/**\n * `useGesture` binds vanilla `gesture` drivers (drag, hover) to a Vue\n * template ref.\n *\n *   const { ref, drag, hover } = useGesture<HTMLDivElement>({\n *     drag: { axis: \"x\", bounds: { left: -100, right: 100 } },\n *     hover: { enter: tween({ scale: [1, 1.1] }, { duration: 150 }) },\n *   })\n *\n * Options are latched at bind time. The composable watches the ref:\n * when it becomes non-null the drivers attach; when the ref is replaced\n * or on `onBeforeUnmount`, every active gesture is cancelled. Vue's\n * reactivity is not used to drive per-frame state; gesture updates\n * flow through the vanilla handles.\n */\n\nimport type {\n  DragHandle,\n  DragPublicOpts,\n  HoverHandle,\n  HoverPublicOpts,\n  StrategyTarget,\n} from \"@kinem/core\"\nimport { gesture } from \"@kinem/core\"\nimport { type ShallowRef, onBeforeUnmount, onMounted, shallowRef, watch } from \"vue\"\n\nexport interface UseGestureOpts {\n  readonly drag?: DragPublicOpts\n  readonly hover?: HoverPublicOpts\n}\n\nexport interface UseGestureResult<T extends Element = Element> {\n  readonly ref: ShallowRef<T | null>\n  /** Active drag handle, or `null` if no drag is configured or bound. */\n  readonly drag: ShallowRef<DragHandle | null>\n  /** Active hover handle, or `null` if no hover is configured or bound. */\n  readonly hover: ShallowRef<HoverHandle | null>\n  /** Cancel all bound gestures. Safe to call multiple times. */\n  cancel(): void\n}\n\nexport function useGesture<T extends Element = Element>(opts: UseGestureOpts): UseGestureResult<T> {\n  const elRef: ShallowRef<T | null> = shallowRef(null)\n  const dragRef: ShallowRef<DragHandle | null> = shallowRef(null)\n  const hoverRef: ShallowRef<HoverHandle | null> = shallowRef(null)\n\n  const unbind = (): void => {\n    dragRef.value?.cancel()\n    hoverRef.value?.cancel()\n    dragRef.value = null\n    hoverRef.value = null\n  }\n\n  const bind = (el: T): void => {\n    unbind()\n    const strategyEl = el as unknown as StrategyTarget\n    if (opts.drag) dragRef.value = gesture.drag([strategyEl], opts.drag)\n    if (opts.hover) hoverRef.value = gesture.hover([strategyEl], opts.hover)\n  }\n\n  onMounted(() => {\n    const el = elRef.value\n    if (el) bind(el)\n  })\n\n  watch(elRef, (el) => {\n    unbind()\n    if (el) bind(el)\n  })\n\n  onBeforeUnmount(() => {\n    unbind()\n  })\n\n  return {\n    ref: elRef,\n    drag: dragRef,\n    hover: hoverRef,\n    cancel: unbind,\n  }\n}\n","/**\n * `useKinemTransition` bridges kinem's `play()` engine to Vue's built-in\n * `<Transition>` / `<TransitionGroup>` JavaScript hooks. It does not\n * reinvent presence tracking; Vue decides when an element enters or\n * leaves, and kinem drives the actual animation.\n *\n *   const t = useKinemTransition({\n *     enter: { from: { opacity: 0 }, to: { opacity: 1 }, duration: 300 },\n *     leave: { from: { opacity: 1 }, to: { opacity: 0 }, duration: 200 },\n *   })\n *\n *   <Transition :css=\"false\" v-bind=\"t\">\n *     <div v-if=\"show\">...</div>\n *   </Transition>\n *\n * Returns an object of listener props (`onBeforeEnter`, `onEnter`,\n * `onLeave`, `onEnterCancelled`, `onLeaveCancelled`). Pair with\n * `:css=\"false\"` to disable Vue's CSS-class transition path; kinem\n * owns the frames.\n */\n\nimport type { Controls, EasingFn, PlayOpts, StrategyTarget } from \"@kinem/core\"\nimport { omitUndefined, play, tween } from \"@kinem/core\"\n\nexport type TransitionValues = Readonly<Record<string, string | number>>\n\nexport interface KinemTransitionPhase {\n  readonly from: TransitionValues\n  readonly to: TransitionValues\n  readonly duration?: number\n  readonly easing?: EasingFn\n  readonly backend?: PlayOpts[\"backend\"]\n}\n\nexport interface UseKinemTransitionOpts {\n  readonly enter?: KinemTransitionPhase\n  readonly leave?: KinemTransitionPhase\n}\n\nexport interface KinemTransitionHooks {\n  onBeforeEnter(el: Element): void\n  onEnter(el: Element, done: () => void): void\n  onLeave(el: Element, done: () => void): void\n  onEnterCancelled(el: Element): void\n  onLeaveCancelled(el: Element): void\n}\n\nfunction applyInline(el: Element, values: TransitionValues): void {\n  const style = (el as HTMLElement).style\n  if (!style) return\n  for (const key of Object.keys(values)) {\n    const v = values[key]\n    if (v === undefined) continue\n    style.setProperty(key, typeof v === \"number\" ? String(v) : v)\n  }\n}\n\nfunction buildTweenProps(\n  from: TransitionValues,\n  to: TransitionValues,\n): Record<string, readonly [string | number, string | number]> {\n  const props: Record<string, readonly [string | number, string | number]> = {}\n  for (const key of Object.keys(to)) {\n    const fromVal = from[key] ?? to[key]\n    const toVal = to[key]\n    if (fromVal === undefined || toVal === undefined) continue\n    props[key] = [fromVal, toVal]\n  }\n  return props\n}\n\nfunction runPhase(el: Element, phase: KinemTransitionPhase, done: () => void): Controls | null {\n  const tweenProps = buildTweenProps(phase.from, phase.to)\n  if (Object.keys(tweenProps).length === 0) {\n    done()\n    return null\n  }\n  const def = tween(tweenProps, {\n    duration: phase.duration ?? 400,\n    ...omitUndefined({ easing: phase.easing }),\n  })\n  const playOpts: PlayOpts = omitUndefined({ backend: phase.backend })\n  const controls = play(def, [el as unknown as StrategyTarget], playOpts)\n  controls.finished.then(done, done)\n  return controls\n}\n\nexport function useKinemTransition(opts: UseKinemTransitionOpts): KinemTransitionHooks {\n  const active = new WeakMap<Element, Controls>()\n\n  const cancelFor = (el: Element): void => {\n    const c = active.get(el)\n    if (!c) return\n    if (c.state !== \"cancelled\" && c.state !== \"finished\") c.cancel()\n    active.delete(el)\n  }\n\n  return {\n    onBeforeEnter(el) {\n      if (opts.enter) applyInline(el, opts.enter.from)\n    },\n    onEnter(el, done) {\n      cancelFor(el)\n      if (!opts.enter) {\n        done()\n        return\n      }\n      const c = runPhase(el, opts.enter, () => {\n        active.delete(el)\n        done()\n      })\n      if (c) active.set(el, c)\n    },\n    onLeave(el, done) {\n      cancelFor(el)\n      if (!opts.leave) {\n        done()\n        return\n      }\n      const c = runPhase(el, opts.leave, () => {\n        active.delete(el)\n        done()\n      })\n      if (c) active.set(el, c)\n    },\n    onEnterCancelled(el) {\n      cancelFor(el)\n    },\n    onLeaveCancelled(el) {\n      cancelFor(el)\n    },\n  }\n}\n","/**\n * `useLayout` animates an element between layout positions using FLIP\n * (First, Last, Invert, Play). Vue parity for the React `useLayout` hook.\n *\n *   const { ref } = useLayout({ duration: 300 })\n *   <div :ref=\"ref\">{{ items }}</div>\n *\n * The composable captures the bound element's bounding rect on every\n * mount / update tick. When the position or size changes, it inverts the\n * delta with a transform (so the element paints at its old location)\n * and animates the transform back to identity.\n *\n * Per-frame state is driven by the vanilla `play()` from `@kinem/core`,\n * not Vue reactivity.\n */\n\nimport {\n  type Controls,\n  type EasingFn,\n  type LayoutGroup,\n  type PlayOpts,\n  type SpringOpts,\n  type StrategyTarget,\n  defaultLayoutGroup,\n  omitUndefined,\n  play,\n  springEasing,\n  tween,\n} from \"@kinem/core\"\nimport { type ShallowRef, onBeforeUnmount, onMounted, onUpdated, shallowRef } from \"vue\"\n\nexport interface UseLayoutOpts {\n  /** Tween duration in ms. Default 300. Ignored when `spring` is set. */\n  readonly duration?: number\n  readonly easing?: EasingFn\n  /**\n   * Use spring physics instead of a fixed-duration tween. The spring's\n   * settling time becomes the animation duration, and `duration` /\n   * `easing` are ignored.\n   */\n  readonly spring?: SpringOpts\n  readonly backend?: PlayOpts[\"backend\"]\n  /**\n   * Whether to animate scale as well as position. Default true. Set to\n   * false if only positional FLIP is desired (useful for elements whose\n   * size shouldn't visually stretch during re-layout).\n   */\n  readonly animateScale?: boolean\n  /**\n   * Shared-element layout id. When set, the composable consumes any\n   * rect captured under this id from `layoutGroup` on mount and uses it\n   * as the FLIP \"previous\" rect. On unmount the composable captures its\n   * current rect under the same id.\n   */\n  readonly layoutId?: string\n  /**\n   * Registry to use for shared-element captures. Defaults to the\n   * process-wide `defaultLayoutGroup`.\n   */\n  readonly layoutGroup?: LayoutGroup\n}\n\nexport interface UseLayoutResult<T extends HTMLElement = HTMLElement> {\n  readonly ref: ShallowRef<T | null>\n}\n\ninterface Rect {\n  readonly left: number\n  readonly top: number\n  readonly width: number\n  readonly height: number\n}\n\nfunction readRect(el: HTMLElement): Rect {\n  const r = el.getBoundingClientRect()\n  return { left: r.left, top: r.top, width: r.width, height: r.height }\n}\n\nfunction rectsDiffer(a: Rect, b: Rect): boolean {\n  return a.left !== b.left || a.top !== b.top || a.width !== b.width || a.height !== b.height\n}\n\nexport function useLayout<T extends HTMLElement = HTMLElement>(\n  opts: UseLayoutOpts = {},\n): UseLayoutResult<T> {\n  const elRef: ShallowRef<T | null> = shallowRef(null)\n  let prevRect: Rect | null = null\n  let controls: Controls | null = null\n\n  const measureAndPlay = (): void => {\n    const el = elRef.value\n    if (!el) return\n    const next = readRect(el)\n    let prev = prevRect\n    if (!prev && opts.layoutId) {\n      const group = opts.layoutGroup ?? defaultLayoutGroup\n      const snap = group.consume(opts.layoutId)\n      if (snap) prev = snap.rect\n    }\n    prevRect = next\n    if (!prev) return\n    if (!rectsDiffer(prev, next)) return\n    if (next.width === 0 || next.height === 0) return\n\n    const dx = prev.left - next.left\n    const dy = prev.top - next.top\n    const sx = prev.width / next.width\n    const sy = prev.height / next.height\n    const animateScale = opts.animateScale !== false\n\n    const tweenProps: Record<string, readonly [number, number]> = {\n      x: [dx, 0],\n      y: [dy, 0],\n    }\n    if (animateScale) {\n      tweenProps[\"scaleX\"] = [sx, 1]\n      tweenProps[\"scaleY\"] = [sy, 1]\n    }\n\n    if (controls && controls.state !== \"cancelled\" && controls.state !== \"finished\") {\n      controls.cancel()\n    }\n\n    const spring = opts.spring ? springEasing(opts.spring) : null\n    const def = tween(tweenProps, {\n      duration: spring ? spring.duration : (opts.duration ?? 300),\n      ...omitUndefined({ easing: spring ?? opts.easing }),\n    })\n    const playOpts: PlayOpts = omitUndefined({ backend: opts.backend })\n    controls = play(def, [el as unknown as StrategyTarget], playOpts)\n  }\n\n  onMounted(measureAndPlay)\n  onUpdated(measureAndPlay)\n  onBeforeUnmount(() => {\n    if (controls && controls.state !== \"cancelled\" && controls.state !== \"finished\") {\n      controls.cancel()\n    }\n    controls = null\n    if (opts.layoutId && prevRect && prevRect.width > 0 && prevRect.height > 0) {\n      const group = opts.layoutGroup ?? defaultLayoutGroup\n      group.capture(opts.layoutId, prevRect)\n    }\n  })\n\n  return { ref: elRef }\n}\n","/**\n * `useInView(opts)` returns `{ ref, inView }`. The `ref` is a Vue\n * `Ref<Element | null>` to bind via `v-bind:ref` (template ref syntax).\n * The `inView` ref flips on intersection enter/leave.\n */\n\nimport { type InViewEntry, type InViewOpts, type InViewStop, inView } from \"@kinem/core\"\nimport { type Ref, onBeforeUnmount, ref, watch } from \"vue\"\n\nexport interface UseInViewOpts extends InViewOpts {\n  readonly onEnter?: (entry: InViewEntry) => undefined | (() => void)\n}\n\nexport interface UseInViewResult<T extends Element = Element> {\n  readonly elRef: Ref<T | null>\n  readonly inView: Ref<boolean>\n}\n\nexport function useInView<T extends Element = Element>(\n  opts: UseInViewOpts = {},\n): UseInViewResult<T> {\n  const elRef = ref<T | null>(null) as Ref<T | null>\n  const visible = ref(false)\n  let stop: InViewStop | null = null\n\n  const detach = (): void => {\n    if (stop) {\n      stop()\n      stop = null\n    }\n  }\n\n  watch(elRef, (el, _prev, onCleanup) => {\n    detach()\n    if (!el) return\n    stop = inView(\n      el,\n      (entry) => {\n        visible.value = true\n        const userLeave = opts.onEnter?.(entry)\n        return () => {\n          visible.value = false\n          if (typeof userLeave === \"function\") userLeave()\n        }\n      },\n      opts,\n    )\n    onCleanup(detach)\n  })\n\n  onBeforeUnmount(detach)\n\n  return { elRef, inView: visible }\n}\n","/**\n * `useMotionValue(initial)` returns a stable `MotionValue<T>` cell tied\n * to the calling component's lifetime. Updates do not trigger re-renders;\n * subscribers (CSS bindings, `useTransform`, gesture handlers) read\n * directly via `get()` / `on()`.\n *\n *   const x = useMotionValue(0)\n *   onMounted(() => bindMotionValueToCss(x, el.value!, \"--x\", (n) => `${n}px`))\n */\n\nimport { type MotionValue, motionValue } from \"@kinem/core\"\nimport { onBeforeUnmount } from \"vue\"\n\nexport function useMotionValue<T>(initial: T): MotionValue<T> {\n  const mv = motionValue(initial)\n  onBeforeUnmount(() => {\n    mv.destroy()\n  })\n  return mv\n}\n","/**\n * `useMotionValueEvent(mv, \"change\", listener)` subscribes the listener\n * to change notifications on a MotionValue for the lifetime of the\n * calling component. Vue setups run once, so the listener identity is\n * captured at call time; close over reactive state inside it if you\n * need that.\n *\n *   useMotionValueEvent(x, \"change\", (v) => console.log(v))\n */\n\nimport {\n  type MotionValue,\n  type MotionValueEventName,\n  type MotionValueListener,\n  motionValueEvent,\n} from \"@kinem/core\"\nimport { onBeforeUnmount } from \"vue\"\n\nexport function useMotionValueEvent<T>(\n  mv: MotionValue<T>,\n  event: MotionValueEventName,\n  listener: MotionValueListener<T>,\n): void {\n  let off: (() => void) | null = motionValueEvent(mv, event, listener)\n  onBeforeUnmount(() => {\n    if (off) {\n      off()\n      off = null\n    }\n  })\n}\n","/**\n * `useReducedMotion` returns a `Ref<boolean>` that is `true` when the\n * user has the OS-level `prefers-reduced-motion: reduce` pref enabled.\n * The ref updates reactively when the OS toggle flips.\n *\n *   const reduce = useReducedMotion()\n *   useAnimation(\n *     ref,\n *     tween({ opacity: [0, 1] }, { duration: 400 }),\n *     { reducedMotion: reduce.value ? \"always\" : \"never\" },\n *   )\n *\n * Outside a browser the ref stays `false`. The media-query subscription\n * is set up `onMounted` and torn down `onBeforeUnmount`.\n */\n\nimport { prefersReducedMotion } from \"@kinem/core\"\nimport { type Ref, onBeforeUnmount, onMounted, ref } from \"vue\"\n\nconst QUERY = \"(prefers-reduced-motion: reduce)\"\n\nexport function useReducedMotion(): Ref<boolean> {\n  const reduce = ref(false)\n  let mql: MediaQueryList | null = null\n  let onChange: ((e: MediaQueryListEvent) => void) | null = null\n\n  onMounted(() => {\n    if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n      return\n    }\n    mql = window.matchMedia(QUERY)\n    reduce.value = mql.matches\n    onChange = (e) => {\n      reduce.value = e.matches\n    }\n    mql.addEventListener(\"change\", onChange)\n  })\n\n  onBeforeUnmount(() => {\n    if (mql && onChange) {\n      mql.removeEventListener(\"change\", onChange)\n    }\n    mql = null\n    onChange = null\n  })\n\n  return reduce\n}\n\nexport { prefersReducedMotion }\n","/**\n * `useScroll` binds a vanilla `scroll()` driver to a Vue template ref.\n *\n *   const { ref, handle } = useScroll<HTMLElement>(\n *     tween({ opacity: [0, 1] }, { duration: 400 }),\n *     { sync: true, trigger: { start: \"top 80%\", end: \"top 20%\" } },\n *   )\n *\n * The composable watches the ref: when it becomes non-null the driver is\n * attached; when the ref is replaced or on `onBeforeUnmount`, the driver\n * is cancelled. Options are latched at bind time.\n */\n\nimport type {\n  AnimationDef,\n  AnimationProps,\n  ScrollHandle,\n  ScrollOpts,\n  StrategyTarget,\n} from \"@kinem/core\"\nimport { scroll } from \"@kinem/core\"\nimport { type ShallowRef, onBeforeUnmount, onMounted, shallowRef, watch } from \"vue\"\n\nexport interface UseScrollResult<T extends Element = Element> {\n  readonly ref: ShallowRef<T | null>\n  /** Active scroll handle, or `null` if no element is bound yet. */\n  readonly handle: ShallowRef<ScrollHandle | null>\n  /** Cancel the bound scroll driver. Safe to call multiple times. */\n  cancel(): void\n}\n\nexport function useScroll<T extends Element = Element>(\n  def: AnimationDef<AnimationProps>,\n  opts: ScrollOpts = {},\n): UseScrollResult<T> {\n  const elRef: ShallowRef<T | null> = shallowRef(null)\n  const handleRef: ShallowRef<ScrollHandle | null> = shallowRef(null)\n\n  const unbind = (): void => {\n    handleRef.value?.cancel()\n    handleRef.value = null\n  }\n\n  const bind = (el: T): void => {\n    unbind()\n    handleRef.value = scroll(def, [el as unknown as StrategyTarget], opts)\n  }\n\n  onMounted(() => {\n    const el = elRef.value\n    if (el) bind(el)\n  })\n\n  watch(elRef, (el) => {\n    unbind()\n    if (el) bind(el)\n  })\n\n  onBeforeUnmount(() => {\n    unbind()\n  })\n\n  return {\n    ref: elRef,\n    handle: handleRef,\n    cancel() {\n      unbind()\n    },\n  }\n}\n","/**\n * `useSpring` returns a scalar value animated by a spring. It is\n * imperative by design: reading `.get()` or subscribing does not cause\n * reactive updates. Drive DOM directly by attaching a subscriber, or\n * combine with `watchEffect` to consume the current value in a\n * non-reactive way.\n *\n *   const x = useSpring(0, { stiffness: 170 })\n *   x.set(100)                 // animate toward 100\n *   x.subscribe(v => ...)      // raf-frequency updates\n *\n * The spring restarts from the current value on each `set()`. The\n * underlying sampler is `springEasing` from the core package, so the\n * trajectory and settling behaviour match `spring()` used elsewhere.\n */\n\nimport { type SpringOpts, frame, shouldReduceMotion, springEasing } from \"@kinem/core\"\nimport { onBeforeUnmount } from \"vue\"\n\nexport interface SpringValue {\n  /** Current value. Reading is synchronous; no reactive update fires. */\n  get(): number\n  /** Start a spring from the current value to `target`. */\n  set(target: number): void\n  /** Instantly jump to `value` and cancel any in-flight animation. */\n  jump(value: number): void\n  /** Subscribe to value updates. Called on every rAF tick of the spring. */\n  subscribe(fn: (value: number) => void): () => void\n  /** Cancel any in-flight spring. The value stays at its current sample. */\n  stop(): void\n  /** True while a spring is in progress. */\n  readonly isAnimating: boolean\n}\n\nexport function useSpring(initial: number, opts: SpringOpts = {}): SpringValue {\n  let value = initial\n  let animating = false\n  let activeTick: ((state: { time: number }) => void) | null = null\n  const subscribers = new Set<(v: number) => void>()\n  const currentOpts = opts\n\n  const notify = (v: number): void => {\n    for (const s of subscribers) s(v)\n  }\n\n  const cancelCurrent = (): void => {\n    if (activeTick) {\n      frame.cancel(\"update\", activeTick)\n      activeTick = null\n    }\n    animating = false\n  }\n\n  const api: SpringValue = {\n    get() {\n      return value\n    },\n    jump(v) {\n      cancelCurrent()\n      value = v\n      notify(v)\n    },\n    set(target) {\n      if (value === target) {\n        cancelCurrent()\n        return\n      }\n      cancelCurrent()\n      if (shouldReduceMotion()) {\n        value = target\n        notify(target)\n        return\n      }\n      const start = value\n      const easing = springEasing(currentOpts)\n      const duration = easing.duration\n      let startTime = -1\n\n      const tick: (state: { time: number }) => void = (state) => {\n        if (startTime < 0) startTime = state.time\n        const elapsed = state.time - startTime\n        const progress = duration > 0 ? Math.min(elapsed / duration, 1) : 1\n        const v = start + (target - start) * easing(progress)\n        value = v\n        notify(v)\n        if (progress >= 1) {\n          value = target\n          notify(target)\n          if (activeTick === tick) {\n            frame.cancel(\"update\", tick)\n            activeTick = null\n            animating = false\n          }\n        }\n      }\n      activeTick = tick\n      animating = true\n      frame.schedule(\"update\", tick, { keepalive: true })\n    },\n    subscribe(fn) {\n      subscribers.add(fn)\n      return () => {\n        subscribers.delete(fn)\n      }\n    },\n    stop() {\n      cancelCurrent()\n    },\n    get isAnimating() {\n      return animating\n    },\n  }\n\n  onBeforeUnmount(() => {\n    cancelCurrent()\n    subscribers.clear()\n  })\n\n  return api\n}\n","/**\n * `useTime()` returns a `TimeMotionValue` that ticks on every animation\n * frame, holding milliseconds since the composable ran. The cell is\n * destroyed when the calling component unmounts.\n *\n *   const t = useTime()\n *   const opacity = useTransform(t, [0, 2000], [0, 1])\n */\n\nimport { type TimeMotionValue, time } from \"@kinem/core\"\nimport { onBeforeUnmount } from \"vue\"\n\nexport function useTime(): TimeMotionValue {\n  const mv = time()\n  onBeforeUnmount(() => {\n    mv.destroy()\n  })\n  return mv\n}\n","/**\n * `useTransform(source, inputRange, outputRange, opts?)` returns a\n * derived `MotionValue<T>` that recomputes whenever `source` updates.\n * The derived cell is destroyed when the calling component unmounts.\n */\n\nimport {\n  type MotionValue,\n  type TransformInputRange,\n  type TransformOpts,\n  type TransformOutputRange,\n  motionValue,\n  transform,\n} from \"@kinem/core\"\nimport { onBeforeUnmount } from \"vue\"\n\nexport function useTransform<T>(\n  source: MotionValue<number>,\n  inputRange: TransformInputRange,\n  outputRange: TransformOutputRange<T>,\n  opts: TransformOpts = {},\n): MotionValue<T> {\n  const map = transform(inputRange, outputRange, opts)\n  const derived = motionValue<T>(map(source.get()))\n\n  const off = source.on((value) => {\n    derived.set(map(value))\n  })\n\n  onBeforeUnmount(() => {\n    off()\n    derived.destroy()\n  })\n\n  return derived\n}\n","/**\n * `useVelocity(source)` returns a `MotionValue<number>` that mirrors\n * the per-second derivative of a numeric source `MotionValue`. The cell\n * is destroyed when the calling component unmounts.\n *\n *   const x = useMotionValue(0)\n *   const vx = useVelocity(x)\n */\n\nimport { type MotionValue, type VelocityMotionValue, velocity } from \"@kinem/core\"\nimport { onBeforeUnmount } from \"vue\"\n\nexport function useVelocity(source: MotionValue<number>): VelocityMotionValue {\n  const mv = velocity(source)\n  onBeforeUnmount(() => {\n    mv.destroy()\n  })\n  return mv\n}\n","/**\n * `useCombine(sources, fn)` returns a derived `MotionValue<T>` whose\n * value is recomputed from `fn(...sourceValues)` whenever any source\n * updates. The derived cell is destroyed when the calling component\n * unmounts.\n *\n *   const x = useMotionValue(0)\n *   const y = useMotionValue(0)\n *   const dist = useCombine([x, y], (a, b) => Math.hypot(a, b))\n */\n\nimport { type CombinedMotionValue, type MotionValue, combine } from \"@kinem/core\"\nimport { onBeforeUnmount } from \"vue\"\n\ntype SourceValues<S extends readonly MotionValue<unknown>[]> = {\n  [K in keyof S]: S[K] extends MotionValue<infer V> ? V : never\n}\n\nexport function useCombine<S extends readonly MotionValue<unknown>[], T>(\n  sources: S,\n  fn: (...values: SourceValues<S>) => T,\n): CombinedMotionValue<T> {\n  const mv = combine(sources, fn)\n  onBeforeUnmount(() => {\n    mv.destroy()\n  })\n  return mv\n}\n"],"names":["PresenceKey","Symbol","keyedSlotVNodes","slotResult","map","Map","vnode","key","set","String","reconcile","prev","incoming","prevKeys","Set","t","next","current","get","push","present","has","AnimatePresence","defineComponent","name","setup","_props","slots","tracked","shallowRef","presenceByKey","ensurePresence","existing","value","_present","isPresent","safeToRemove","delete","filter","watchEffect","h","inheritAttrs","_p","ctx","provide","default","cloneVNode","KinemError","Error","message","hint","isColor","s","trim","startsWith","test","srgbToLinear","c","linearToSrgb","clamp01","x","linearSrgbToOklab","r","g","b","l","m","l_","Math","cbrt","m_","s_","oklabToLinearSrgb","L","a","srgbToOklch","alpha","lr","lg","lb","aa","bb","C","sqrt","H","atan2","PI","oklchToSrgb","hr","cos","sin","parseHex","input","exec","length","Number","parseInt","slice","parseNumberOrPercent","basis","str","endsWith","parseFloat","splitArgs","inside","slash","indexOf","main","parts","split","Boolean","parseRgbFn","args","hslToRgb","sat","light","abs","hp","rgbToHsl","max","min","d","parseHslFn","parseOklchFn","parseColor","trimmed","rgba","oklch","format","lower","toLowerCase","toByte","round","hex2","n","toString","padStart","formatColor","toFixed","base","S","R","G","B","shortestHueDelta","from","to","interpolateColor","dL","dC","dH","dA","p","mixed","interpolateNumber","delta","interpolateNumbers","deltas","Array","i","out","PARAMS_PER","M","V","Q","T","A","Z","CMD_RE","parsePath","lastIndex","type","body","paramsPer","toUpperCase","params","nums","some","isNaN","stringifyPath","cmds","join","interpolatePath","template","ca","cb","j","registry","registerInterpolator","entry","priority","unshift","findInterpolator","interpolate","UNIT_RE","parseUnit","unit","UnitMismatchError","fromUnit","toUnit","interpolateUnit","FN_RE","parseTransform","ANGLE_UNITS","toDeg","fromDeg","deg","shortestAngleDelta","fromDegVal","toDegVal","interpolateAngleArg","outUnit","v","interpolateFnArg","fn","interp","interpolateTransform","fromFns","toFns","pairs","argFns","rendered","isNumber","isFinite","isNumberArray","isArray","isTransformString","PATH_RE","isPathString","isUnitString","cssEasingMap","WeakMap","setCssEasing","css","getCssEasing","linear","SPRING_KIND_TAG","isSpringEasing","DEFAULT_SPRING","stiffness","damping","mass","velocity","restVelocity","restDisplacement","maxDuration","springEasing","opts","dt","dtMs","maxSteps","ceil","accel","samples","restCount","REST_FRAMES","step","k1x","k1v","k2x","k2v","k3x","k3v","k4x","k4v","lastIdx","duration","exact","floor","frac","Object","defineProperty","enumerable","omitUndefined","undefined","globalDefault","prefersReducedMotion","window","matchMedia","matches","shouldReduceMotion","mode","COMPOSITOR_STYLE","PSEUDO_TO_TRANSFORM","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","scaleZ","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY","SVG_ATTRS","toKebab","replace","classifyCache","classifyUncached","property","tier","target","apply","classify","cached","info","pseudoToTransformFn","EMPTY","freeze","partitionByTier","props","compositor","DEFAULT_DURATION","PSEUDO_DEFAULT_UNIT","TRANSFORM_ORDER","TRANSFORM_RANK","buildCommitPlan","keys","perPropFns","styleOps","attrOps","transformOps","explicitTransform","sort","renderValue","commitWithPlan","plan","easing","el","eased","op","style","setProperty","setAttribute","tween","allPlainNumbers","pair","properties","tierSplit","linearizable","commit","kind","easingLabel","trackAnimation","controls","targets","backend","meta","formatPseudo","composeTransform","applyValues","values","transformParts","noop","CANCELLED_MSG","CANCELLED_ERROR","LazyPromiseImpl","resolve","reject","err","rejectCancelled","promise","Promise","catch","res","rej","settled","createLazyPromise","PHASES","defaultRaf","requestAnimationFrame","cancelAnimationFrame","request","cancel","id","setTimeout","Date","now","clearTimeout","FnNode","_kaPrev","_kaNext","_kaPhase","_kaDead","_kaTick","state","createFrameScheduler","raf","nowFn","performance","makeQueue","jobs","head","tail","fnLookup","size","queues","read","compute","update","render","rafId","tickIndex","lastTime","jobsCount","keepCount","hasWork","linkAtTail","q","node","phase","runTick","time","tick","jobsLen","keepSize","pending","job","loop","wake","cancelRafIfIdle","scheduleNode","cancelNode","schedule","o","keepalive","flushSync","isRunning","frame","realNow","ClockImpl","speed","real","nowAt","realTime","pause","resume","paused","setSpeed","multiplier","reset","createClock","defaultClock","Timing","def","directRender","scheduler","defaultFrame","clock","onFinish","elapsed","raw","repeat","seek","clamped","reverse","progress","direction","finished","createTiming","createTimingDirect","playRaf","directCommit","PSEUDO_UNIT","sampleCount","rate","sampleRateHz","minSamples","maxSamples","buildKeyframes","frames","offset","toKeyframe","planCache","hasDefaultSamplingOpts","planWaapiUncached","cssEasing","planWaapi","pseudo","transform","WaapiImpl","animations","bind","onCancel","onfinish","oncancel","playbackRate","play","queuedSeek","currentTime","impl","playWaapi","buildAnimations","waapiEasing","fill","animateOpts","animate","waapiCache","detectWaapi","Element","proto","prototype","discoverProperties","k","add","project","keySet","projected","combineHandles","handles","userState","lp","settleFinish","settleCancel","then","anyPlaying","anyPaused","allFinished","tierCache","splitDef","playStrategy","backendOverride","fanOut","playFanOut","propDef","reducedMotion","reducedMotionHandle","waapiCap","waapiSupported","useWaapi","mainProps","EMPTY_PROPS","needsMain","hasCompProps","waapiScheduler","lazy","final","cancelled","EMPTY_LABELS","ControlsImpl","handle","labels","seekLabel","label","playLabel","restart","onfulfilled","onrejected","finally","onfinally","createControls","MODE_TO_BACKEND","auto","resolveTargets","document","nodes","querySelectorAll","DEFAULT_TTL","createLayoutGroup","ttl","snapshots","isFresh","snap","POSITIVE_INFINITY","capturedAt","capture","rect","consume","peek","release","clear","defaultLayoutGroup","createDomScrollSource","win","w","globalThis","getScrollY","scrollY","getViewportHeight","innerHeight","getRect","getBoundingClientRect","top","height","onScroll","addEventListener","passive","removeEventListener","onResize","parseRef","pct","parseTriggerPos","eRef","vRef","element","viewport","computeBounds","start","end","geom","scrollStart","elementTop","elementHeight","viewportHeight","scrollEnd","progressAt","bounds","span","zoneAt","lo","hi","playScrollSync","dirty","measure","anchor","source","onProgress","markDirty","invalidate","unsubScroll","unsubResize","DEFAULT_TOGGLE_ACTIONS","ALL_ACTIONS","isToggleAction","includes","parseToggleActions","eventsFor","actionFor","event","actions","applyAction","action","playScrollTriggered","toggleActions","currentZone","sync","events","ev","DEFAULT_START","DEFAULT_END","scroll","playOpts","trigger","createDomPointerSource","handlers","onStart","setPointerCapture","pointerId","onMove","onEnd","hasPointerCapture","releasePointerCapture","createVelocityTracker","windowMs","record","sample","shift","latest","cutoff","oldest","touchActionFor","axis","clamp","applyBounds","left","right","bottom","nearestSnap","threshold","best","bestDist","points","dist","hypot","renderOffset","playDrag","applyTouchAction","styled","dragStart","dragStartOffset","activePointerId","releaseFrom","releaseTo","releaseStartTime","releaseDuration","releaseActive","releaseStep","startRelease","snapTarget","releaseCfg","hasRelease","pointerEvent","finalTarget","clientX","clientY","timeStamp","unsub","playHover","isHovering","enter","leave","strategyOpts","startEnter","startLeave","onEnter","_ev","onLeave","distance","DEFAULT_TIMER","ms","playTap","maxMovement","startPoint","startTime","ok","onTap","point","playPress","timer","minDuration","timerHandle","lastEvent","clearTimer","abort","onPress","playPan","started","computeOffset","dx","dy","pinchGeometry","angle","center","playPinch","pointers","initialDist","initialAngle","currentScale","currentRotation","activePair","it","emitChange","onChange","rotation","endPinch","slot","had","getRectExtent","width","applyTranslate","clearTranslate","arraysEqual","createReorderController","getValues","items","registerItem","startDrag","_pointerId","clientCoord","draggedEl","rects","draggedRect","draggedCenterStart","pointerStart","initialValues","order","movedSiblings","zIndex","willChange","indexInInitial","forEach","othersInInitialOrder","computeNewOrder","pointerCoord","draggedCenter","inserted","applySiblingShifts","indexInNext","draggedSize","initIdx","newIdx","move","coord","destroy","pickPointerTarget","explicit","resolved","first","drag","animated","rest","pointerTarget","hover","tap","press","pan","pinch","gesture","DEFAULT_TWEEN_DURATION_MS","resolveTransition","hasSpringFields","resolveTween","resolveSpring","springOpts","VELOCITY_WINDOW_MS","motionValue","initial","prevValue","prevTime","listeners","is","snapshot","on","listener","getVelocity","sinceLast","buildSegment","inputRange","outputRange","stops","segments","last","NULL_ENTRY","isIntersecting","intersectionRatio","boundingClientRect","toJSON","rootBounds","resolveThreshold","amount","inView","IntersectionObserver","entered","init","root","rootMargin","observer","entries","e","result","once","disconnect","observe","cancelRaf","mv","frameId","running","start_","stop","baseOn","baseDestroy","listenerCount","off","combine","sources","offs","motionValueEvent","MotionAnimateKey","isVariantKey","resolveTarget","variants","merged","assign","shallowEqualValues","aKeys","bKeys","buildTweenProps","fromVal","toVal","Motion","as","exit","whileHover","whileTap","transition","attrs","elRef","startTimer","presence","inject","parentCtx","parentAnimateKey","computed","inheritingFromParent","effectiveAnimate","staggerIndex","stagger","counter","hovering","ref","tapping","resolvedInitial","resolvedAnimate","resolvedExit","resolvedHover","resolvedTap","targetSource","targetValues","src","currentValues","staggerCounter","provideValue","staggerMs","staggerChildren","cancelStartTimer","runTween","tweenProps","inheritedStagger","totalDelay","delay","onMounted","watch","exitStarted","exitVals","removed","done","immediate","onBeforeUnmount","userStyle","mergedStyle","_style","onPointerenter","userOnPointerEnter","onPointerleave","userOnPointerLeave","onPointerdown","userOnPointerDown","onPointerup","userOnPointerUp","onPointercancel","userOnPointerCancel","restAttrs","userEnter","userLeave","userDown","userUp","userCancel","ReorderKey","ReorderGroup","required","onReorder","Function","ctrl","ReorderItem","idleCursor","session","button","currentTarget","preventDefault","onPointermove","finish","cursor","touchAction","_omit","scope","useAnimate","useAnimation","cancelCurrent","playCore","useGesture","dragRef","hoverRef","unbind","strategyEl","applyInline","runPhase","useKinemTransition","active","cancelFor","onBeforeEnter","onEnterCancelled","onLeaveCancelled","readRect","rectsDiffer","useLayout","prevRect","measureAndPlay","layoutId","group","layoutGroup","sx","sy","animateScale","spring","onUpdated","useInView","visible","detach","_prev","onCleanup","useMotionValue","useMotionValueEvent","QUERY","useReducedMotion","reduce","mql","useScroll","handleRef","useSpring","animating","activeTick","subscribers","currentOpts","notify","api","jump","subscribe","isAnimating","useTime","useTransform","derived","useVelocity","useCombine"],"mappings":"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"}