{"$schema":"https://ui.shadcn.com/schema/registry-item.json","name":"verify-code","type":"registry:block","title":"Verify code","description":"A one-time code step with a carrier pigeon: Coo naps through the resend wait with the seconds in a thought bubble, and flies every new code to your mailbox.","author":"Hairline UI","dependencies":[],"registryDependencies":["https://hairlineui.com/r/code-input.json?as=dependency","https://hairlineui.com/r/number-roll.json?as=dependency","https://hairlineui.com/r/status-button.json?as=dependency","https://hairlineui.com/r/text-morph.json?as=dependency"],"files":[{"path":"registry/verify-code.tsx","type":"registry:component","content":"// Hairline UI · verify-code · MIT License\n// Copyright (c) 2026 Hairline UI · https://hairlineui.com/license#components\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { CodeInput } from \"./code-input\";\nimport { Coo, type CooHandle } from \"./coo-pigeon\";\nimport { NumberRoll } from \"./number-roll\";\nimport { StatusButton, type ActionStatus } from \"./status-button\";\nimport { TextMorph } from \"./text-morph\";\nimport { EASE_OUT, useInteractionReducedMotion } from \"./ui-interaction-motion\";\n\n/* ─────────────────────────────────────────────────────────\n * VERIFY CODE: the pigeon who carried it\n *\n *   waiting  Coo stands on his post across the stage from the\n *            mailbox; its flag is up, your code is in there\n *   reading  every digit you type, he nods along\n *   wrong    he shakes his head; the boxes shake and clear\n *   right    the boxes close into one pill, he puffs his chest\n *            and gives two proud flaps\n *   wait     while the resend clock runs he naps on his post,\n *            z's drifting up and a thought bubble counting the\n *            seconds down; typing wakes him to read along, and\n *            at zero the bubble pops and he hops up, ready\n *   resend   he takes off with a new envelope, flies the route,\n *            pops the mailbox flag and flies home; if the send\n *            fails he comes back with the envelope in his beak\n *\n * onVerify gets the code, onResend sends another; both are\n * yours, whatever sends your codes.\n * ───────────────────────────────────────────────────────── */\n\nexport interface VerifyCodeProps {\n  /** Where the code went: an email address or a phone number. */\n  destination: string;\n  channel?: \"email\" | \"sms\";\n  length?: number;\n  /** Check the code. Resolve (or return true) to accept; return false or throw to say it's wrong. */\n  onVerify: (code: string) => Promise<boolean | void>;\n  /** Send a new code. Return { retryAfter } (seconds) to set the next wait; throw to say it didn't go. */\n  onResend: () => Promise<{ retryAfter?: number } | void | unknown>;\n  /** Seconds before the first resend. */\n  resendAfter?: number;\n  /** Shows Change beside the address. */\n  onChangeDestination?: () => void;\n  title?: string;\n  /** What the pigeon is called in his lines. */\n  name?: string;\n  autoFocus?: boolean;\n  className?: string;\n}\n\nconst mix = (color: string, amount: number, into = \"transparent\") => `color-mix(in oklab, ${color} ${amount}%, ${into})`;\nconst PF = \"var(--primary-foreground)\";\nconst CARD: React.CSSProperties = {\n  backgroundImage: `linear-gradient(180deg, var(--card), ${mix(\"var(--card)\", 95, \"var(--foreground)\")})`,\n  boxShadow: `0 0 0 1px var(--border), inset 0 1px 0 ${mix(\"var(--background)\", 85)}`,\n};\n/* The one lit surface, ruled with faint airmail stripes along its foot: the sky he flies through. */\nconst STAGE: React.CSSProperties = {\n  backgroundColor: \"var(--primary)\",\n  backgroundImage: [\n    `radial-gradient(90% 70% at 50% 0%, ${mix(PF, 20)} 0%, transparent 62%)`,\n    `linear-gradient(175deg, transparent 45%, ${mix(\"black\", 20)} 100%)`,\n    `repeating-linear-gradient(-45deg, ${mix(PF, 10)} 0 7px, transparent 7px 14px, ${mix(PF, 5)} 14px 21px, transparent 21px 28px)`,\n  ].join(\", \"),\n  backgroundSize: \"auto, auto, 100% 7px\",\n  backgroundRepeat: \"no-repeat, no-repeat, repeat-x\",\n  backgroundPosition: \"0 0, 0 0, 0 100%\",\n  boxShadow: `inset 0 1px 0 ${mix(PF, 36)}, inset 0 0 0 1px ${mix(PF, 12)}`,\n};\nconst COO = {\n  \"--coo-route\": PF,\n  \"--coo-z\": PF,\n  \"--coo-bubble\": PF,\n  \"--coo-bubble-ink\": \"var(--primary)\",\n} as React.CSSProperties;\n\ntype Flight = \"home\" | \"away\" | \"failed\";\n\nexport function VerifyCode({\n  destination,\n  channel = \"email\",\n  length = 6,\n  onVerify,\n  onResend,\n  resendAfter = 30,\n  onChangeDestination,\n  title,\n  name = \"Coo\",\n  autoFocus,\n  className = \"\",\n}: VerifyCodeProps) {\n  const reduced = useInteractionReducedMotion();\n  const baseId = React.useId();\n  const coo = React.useRef<CooHandle>(null);\n  const [phase, setPhase] = React.useState<\"idle\" | \"checking\" | \"wrong\" | \"right\">(\"idle\");\n  const [left, setLeft] = React.useState(resendAfter);\n  const [send, setSend] = React.useState<ActionStatus>(\"idle\");\n  const [flight, setFlight] = React.useState<Flight>(\"home\");\n  const typed = React.useRef(0);\n  // typing wakes him for a while; then he nods off again if the clock is still running\n  const [awake, setAwake] = React.useState(false);\n  const awakeTimer = React.useRef(0);\n  React.useEffect(() => () => window.clearTimeout(awakeTimer.current), []);\n\n  // whole seconds down to zero; the route drains with them\n  React.useEffect(() => {\n    if (left <= 0 || flight === \"away\") return;\n    const timer = window.setTimeout(() => setLeft((s) => Math.max(0, s - 1)), 1000);\n    return () => window.clearTimeout(timer);\n  }, [left, flight]);\n\n  const resend = async () => {\n    if (send === \"pending\" || left > 0 || flight === \"away\") return;\n    setSend(\"pending\");\n    setFlight(\"away\");\n    coo.current?.send();\n    let next = resendAfter;\n    let ok = true;\n    try {\n      const res = await onResend();\n      const after = (res as { retryAfter?: number } | undefined)?.retryAfter;\n      if (typeof after === \"number\" && after >= 0) next = after;\n    } catch {\n      ok = false;\n    }\n    const home = () => {\n      setFlight(ok ? \"home\" : \"failed\");\n      setSend(ok ? \"success\" : \"error\");\n      if (ok) {\n        setLeft(next);\n      }\n      window.setTimeout(() => setSend((s) => (s === \"success\" ? \"idle\" : s)), 1400);\n    };\n    if (coo.current) coo.current.delivered(ok, home);\n    else home();\n  };\n\n  const verify = async (code: string) => {\n    setPhase(\"checking\");\n    let ok = false;\n    try {\n      ok = (await onVerify(code)) !== false;\n    } catch {\n      ok = false;\n    }\n    setPhase(ok ? \"right\" : \"wrong\");\n    if (ok) coo.current?.puff();\n    else coo.current?.ruffle();\n    return ok;\n  };\n\n  const where = channel === \"sms\" ? \"number\" : \"inbox\";\n  const mood =\n    phase === \"right\"\n      ? \"Signed for. You’re in.\"\n      : phase === \"wrong\"\n        ? `Not the code ${name} carried`\n        : phase === \"checking\"\n          ? `${name} is checking`\n          : flight === \"away\"\n            ? `${name} is on his way`\n            : flight === \"failed\"\n              ? `${name} couldn’t get through`\n              : send === \"success\"\n                ? \"A fresh code, delivered\"\n                : left > 0\n                  ? awake\n                    ? `${name} is reading along`\n                    : `${name} is catching his breath`\n                  : `${name} is ready to fly again`;\n  const ready = left <= 0 && flight !== \"away\";\n\n  return (\n    <section aria-labelledby={`${baseId}-title`} className={`relative w-full max-w-[380px] rounded-[28px] p-2 text-card-foreground ${className}`} style={{ ...CARD, ...COO }}>\n      {/* Its natural width where the parent sizes to its content, without forcing it on narrow screens. */}\n      <div aria-hidden=\"true\" data-natural-width className=\"grid h-0\" style={{ gridTemplateColumns: \"minmax(0, 380px)\" }} />\n      <div className=\"@container w-full\">\n        <div className=\"relative overflow-clip rounded-[22px] text-primary-foreground\" style={STAGE}>\n          <Coo ref={coo} wait={flight === \"away\" || phase === \"right\" ? 0 : left} dozing={!awake && flight === \"home\" && (phase === \"idle\" || phase === \"wrong\")} reduced={reduced} />\n          <p className=\"absolute inset-x-0 bottom-3 z-10 text-center text-[12.5px] font-medium text-primary-foreground/85 @max-[340px]:bottom-2 @max-[340px]:text-[11.5px]\">\n            <TextMorph>{mood}</TextMorph>\n          </p>\n        </div>\n\n        <div className=\"px-3 pb-2 pt-3\">\n          <h2 id={`${baseId}-title`} className=\"text-[15px] font-medium tracking-[-0.01em]\">\n            {title ?? `Check your ${where}`}\n          </h2>\n          <p className=\"mt-0.5 text-[12.5px] text-muted-foreground\">\n            {name} brought a {length}-digit code to <span className=\"font-medium text-foreground\">{destination}</span>\n            {onChangeDestination ? (\n              <>\n                {\" · \"}\n                <button type=\"button\" onClick={onChangeDestination} className=\"cursor-pointer underline decoration-border underline-offset-2 hover:text-foreground\">\n                  Change\n                </button>\n              </>\n            ) : (\n              \".\"\n            )}\n          </p>\n\n          <CodeInput\n            className=\"mt-3\"\n            length={length}\n            label=\"Enter the code\"\n            autoFocus={autoFocus}\n            onValueChange={(v) => {\n              setAwake(true);\n              window.clearTimeout(awakeTimer.current);\n              awakeTimer.current = window.setTimeout(() => setAwake(false), 4000);\n              if (v.length > typed.current) coo.current?.peck();\n              typed.current = v.length;\n              if (phase === \"wrong\") setPhase(\"idle\");\n            }}\n            onComplete={verify}\n          />\n\n          {/* the resend line folds away once the code is right */}\n          <div className=\"grid\" style={{ gridTemplateRows: phase === \"right\" ? \"0fr\" : \"1fr\", opacity: phase === \"right\" ? 0 : 1, transition: reduced ? \"none\" : `grid-template-rows 420ms ${EASE_OUT}, opacity 240ms` }}>\n            <div className=\"min-w-0 overflow-hidden\" inert={phase === \"right\"}>\n              <div className=\"mt-2.5 flex h-7 items-center gap-1.5 text-[12px] text-muted-foreground\">\n                <span>{flight === \"failed\" ? \"Couldn’t send that.\" : \"Didn’t get it?\"}</span>\n                <span className=\"grid items-center\">\n                  <span className=\"sr-only\">{ready ? \"\" : flight === \"away\" ? \"Sending a new code.\" : \"You can resend the code shortly.\"}</span>\n                  <span\n                    aria-hidden=\"true\"\n                    className=\"col-start-1 row-start-1 flex items-baseline whitespace-nowrap tabular-nums\"\n                    style={{ opacity: ready ? 0 : 1, filter: ready ? \"blur(3px)\" : \"none\", transition: reduced ? \"none\" : `opacity 260ms ${EASE_OUT}, filter 260ms ${EASE_OUT}` }}\n                  >\n                    {flight === \"away\" ? (\n                      <TextMorph>Sending</TextMorph>\n                    ) : (\n                      <>\n                        Resend in {Math.floor(left / 60)}:\n                        <NumberRoll value={left % 60} format={{ minimumIntegerDigits: 2 }} direction=\"down\" duration={700} />\n                      </>\n                    )}\n                  </span>\n                  <span className=\"col-start-1 row-start-1\" inert={!ready} style={{ opacity: ready ? 1 : 0, filter: ready ? \"none\" : \"blur(3px)\", transition: reduced ? \"none\" : `opacity 260ms ${EASE_OUT}, filter 260ms ${EASE_OUT}` }}>\n                    <StatusButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      status={send === \"pending\" ? \"idle\" : send}\n                      labels={{ idle: \"Resend code\", success: \"Sent\", error: \"Try again\" }}\n                      onClick={resend}\n                      className=\"-ml-2\"\n                    />\n                  </span>\n                </span>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n  );\n}\n\nexport default VerifyCode;\n"},{"path":"registry/coo-pigeon.tsx","type":"registry:component","content":"// Hairline UI · verify-code · MIT License\n// Copyright (c) 2026 Hairline UI · https://hairlineui.com/license#components\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { COO_ART as ART, COO_GEO as G } from \"./coo-art\";\nimport { NumberRoll } from \"./number-roll\";\n\n/* ─────────────────────────────────────────────────────────\n * COO: the carrier pigeon who brings the code\n *\n * An illustrated pigeon on a post, a mailbox across the stage\n * and the route between them, rigged in code:\n *\n *   peck     a nod from his feet for every digit typed\n *   ruffle   a shake of the head when the code is wrong\n *   puff     chest out and two proud flaps when it's right\n *   send     he takes off with an envelope, flies the route to\n *            the mailbox, waits there until the send is done,\n *            pops the flag and flies home empty; if the send\n *            fails he turns back with the envelope still in\n *            his beak\n *   doze     while the resend clock runs he naps on his post:\n *            eye shut, z's drifting up, and a thought bubble over\n *            his head counting the seconds down (`wait`); typing\n *            wakes him, and at zero the bubble pops and he hops\n *\n * The scene is drawn at 364 × 176 and scaled to the stage.\n * One frame loop outside React moves him and sleeps when\n * he's still; flaps swap between two drawn wing poses.\n * ───────────────────────────────────────────────────────── */\n\nexport interface CooHandle {\n  peck: () => void;\n  ruffle: () => void;\n  puff: () => void;\n  /** Take off with a new code; call `delivered` when the send settles. */\n  send: () => void;\n  /** The send settled: he pops the flag (ok) or brings the envelope back, then lands and calls onHome. */\n  delivered: (ok: boolean, onHome: () => void) => void;\n}\n\nconst W = 364;\nconst H = 176;\nconst KB = 0.42; // the pigeon's drawing scale\nconst KF = KB * 1.05; // his flying frames\nconst KP = 0.62; // the props'\nconst POST = { x: 72, foot: 180 };\nconst BOX = { x: 300, foot: 180 };\nconst FEET = { x: POST.x, y: POST.foot - G.post.h * KP + 1.5 };\n/** Where his cap is when he stands on the post, and while he waits over the mailbox. */\nconst HOME = { x: FEET.x + (G.stand.cap.x - G.stand.feet.x) * KB, y: FEET.y + (G.stand.cap.y - G.stand.feet.y) * KB };\nconst OVER = { x: BOX.x + 4, y: 40 };\nconst CTRL = { x: 192, y: 40 };\n/** The route drawn between them: from his beak to the mailbox door. */\nconst BEAK = { x: FEET.x + (184 - G.stand.feet.x) * KB, y: FEET.y + (50 - G.stand.feet.y) * KB };\nexport const COO_ROUTE = `M${BEAK.x.toFixed(1)} ${BEAK.y.toFixed(1)} Q${(W / 2 + 14).toFixed(1)} 2 ${BOX.x - 6} 82`;\nconst FLY = 1050; // ms each way\nconst FLAP = 95; // ms a wing pose is held\n\nconst clamp = (v: number, a = 0, b = 1) => Math.min(b, Math.max(a, v));\nconst inOut = (k: number) => (k < 0.5 ? 2 * k * k : 1 - Math.pow(-2 * k + 2, 2) / 2);\n\ntype Spring = { x: number; v: number };\nfunction step(s: Spring, target: number, dt: number, k = 260, c = 18) {\n  s.v += ((target - s.x) * k - s.v * c) * dt;\n  s.x += s.v * dt;\n  if (Math.abs(target - s.x) < 1e-3 && Math.abs(s.v) < 1e-3) {\n    s.x = target;\n    s.v = 0;\n    return true;\n  }\n  return false;\n}\n\ntype Flight = { leg: \"out\" | \"wait\" | \"back\"; t0: number; carrying: boolean; ok?: boolean; onHome?: () => void; popAt?: number };\n\nexport class CooEngine {\n  parts: Record<string, Element | null> = {};\n  reduced = false;\n  rot: Spring = { x: 0, v: 0 };\n  puffS: Spring = { x: 0, v: 0 };\n  hop: Spring = { x: 0, v: 0 };\n  wobble: Spring = { x: 0, v: 0 };\n  lid: Spring = { x: 0, v: 0 };\n  dozing = false;\n  zTimer = 0;\n  flagUp = true;\n  puffT = 0;\n  flapUntil = 0;\n  blinkAt = 0;\n  flight: Flight | null = null;\n  raf = 0;\n  last = 0;\n  seq = 0;\n  blinkTimer = 0;\n  observer: ResizeObserver | null = null;\n  frame = (now: number) => this.tick(now);\n\n  part = (name: string) => (el: Element | null) => {\n    this.parts[name] = el;\n  };\n\n  mount(reduced: boolean) {\n    this.reduced = reduced;\n    const host = this.parts.host as HTMLElement | null;\n    const scene = this.parts.scene as HTMLElement | null;\n    if (host && scene) {\n      const fit = () => scene.style.setProperty(\"transform\", `scale(${host.clientWidth / W})`);\n      fit();\n      this.observer = new ResizeObserver(fit);\n      this.observer.observe(host);\n    }\n    if (!reduced) {\n      (this.parts.stand as HTMLElement | null)?.animate([{ transform: \"none\" }, { transform: \"scale(1.012, 1.022)\" }], {\n        duration: 1600,\n        iterations: Infinity,\n        direction: \"alternate\",\n        easing: \"ease-in-out\",\n      });\n    }\n    this.draw(performance.now());\n    this.scheduleBlink();\n  }\n\n  destroy() {\n    cancelAnimationFrame(this.raf);\n    window.clearTimeout(this.blinkTimer);\n    window.clearTimeout(this.zTimer);\n    this.raf = 0;\n    this.observer?.disconnect();\n    this.observer = null;\n    (this.parts.stand as HTMLElement | null)?.getAnimations().forEach((a) => a.cancel());\n  }\n\n  scheduleBlink() {\n    window.clearTimeout(this.blinkTimer);\n    this.blinkTimer = window.setTimeout(() => {\n      this.blinkAt = performance.now();\n      this.seq++;\n      this.wake();\n      this.scheduleBlink();\n    }, 2400 + ((this.seq * 1531 + 377) % 3600));\n  }\n\n  wake() {\n    if (this.raf || !this.parts.bird) return;\n    this.last = performance.now();\n    this.raf = requestAnimationFrame(this.frame);\n  }\n\n  /** Nap (eye shut, z's) or wake; waking because the wait is over gives a little hop. */\n  doze(on: boolean, hop = false) {\n    if (on === this.dozing) return;\n    this.dozing = on;\n    window.clearTimeout(this.zTimer);\n    if (on) this.zTimer = window.setTimeout(() => this.snore(), 500);\n    else if (hop && !this.reduced) {\n      this.hop.v -= 120;\n      this.rot.v -= 140;\n    }\n    if (this.reduced) {\n      this.lid.x = on ? 1 : 0;\n      this.draw(performance.now());\n      return;\n    }\n    this.wake();\n  }\n\n  /** A \"z\" drifts up from his head and fades; another follows while he sleeps. */\n  snore() {\n    const layer = this.parts.zs as HTMLElement | null;\n    if (!this.dozing || this.reduced || !layer) return;\n    if (!this.flight) {\n      const z = document.createElement(\"span\");\n      const big = this.seq++ % 2 === 0;\n      z.textContent = \"z\";\n      z.style.cssText = `position:absolute;left:${HOME.x + 8}px;top:${HOME.y - 6}px;font-size:${big ? 15 : 11}px;font-weight:600;line-height:1;color:var(--coo-z);opacity:0`;\n      layer.appendChild(z);\n      z.animate(\n        [\n          { opacity: 0, transform: \"translate(0, 0) scale(0.6) rotate(-10deg)\" },\n          { opacity: 1, offset: 0.25 },\n          { opacity: 0, transform: `translate(${big ? -20 : -12}px, -24px) scale(1.1) rotate(-14deg)` },\n        ],\n        { duration: 2200, easing: \"cubic-bezier(0.22, 1, 0.36, 1)\" },\n      ).onfinish = () => z.remove();\n    }\n    this.zTimer = window.setTimeout(() => this.snore(), 1100);\n  }\n\n  peck() {\n    if (this.reduced || this.flight) return;\n    this.rot.v += 240;\n    this.wake();\n  }\n\n  ruffle() {\n    if (this.reduced || this.flight) return;\n    this.rot.v -= 420;\n    this.wobble.v += 9;\n    this.wake();\n  }\n\n  puff() {\n    this.puffT = 1;\n    if (this.reduced) {\n      this.puffS.x = 1;\n      this.draw(performance.now());\n      return;\n    }\n    this.flapUntil = performance.now() + 4 * FLAP;\n    this.hop.v -= 150;\n    this.wake();\n  }\n\n  send() {\n    this.puffT = 0;\n    if (this.reduced) {\n      this.flight = { leg: \"wait\", t0: performance.now(), carrying: true };\n      this.draw(performance.now());\n      return;\n    }\n    this.flight = { leg: \"out\", t0: performance.now(), carrying: true };\n    this.wake();\n  }\n\n  delivered(ok: boolean, onHome: () => void) {\n    const f = this.flight;\n    if (!f) {\n      onHome();\n      return;\n    }\n    f.ok = ok;\n    f.onHome = onHome;\n    if (this.reduced) {\n      this.flight = null;\n      if (ok) this.flagUp = true;\n      this.draw(performance.now());\n      onHome();\n      return;\n    }\n    this.wake();\n  }\n\n  tick(now: number) {\n    const dt = Math.min(0.05, (now - this.last) / 1000);\n    this.last = now;\n    let busy = false;\n    const f = this.flight;\n    if (f) {\n      busy = true;\n      const t = now - f.t0;\n      if (f.leg === \"out\" && t >= FLY) {\n        f.leg = \"wait\";\n        f.t0 = now;\n      } else if (f.leg === \"wait\" && f.ok !== undefined) {\n        if (f.ok && f.popAt === undefined) {\n          // a new letter: the flag drops, then springs back up\n          f.popAt = now;\n          this.flagUp = false;\n          this.wobble.v -= 6;\n        }\n        if (f.popAt !== undefined && this.flagUp === false && now - f.popAt > 260) {\n          this.flagUp = true;\n          this.wobble.v += 10;\n        }\n        if (!f.ok || now - (f.popAt ?? now) > 620) {\n          f.leg = \"back\";\n          f.t0 = now;\n          f.carrying = !f.ok;\n        }\n      } else if (f.leg === \"back\" && t >= FLY) {\n        this.flight = null;\n        this.hop.v += 90;\n        this.rot.v -= 60;\n        f.onHome?.();\n      }\n    }\n    const settled = [\n      step(this.rot, 0, dt, 300, 16),\n      step(this.puffS, this.puffT, dt, 200, 16),\n      step(this.hop, 0, dt, 320, 15),\n      step(this.wobble, 0, dt, 260, 9),\n      step(this.lid, this.dozing && !this.flight ? 1 : 0, dt, 120, 18),\n    ].every(Boolean);\n    if (!settled || now < this.flapUntil) busy = true;\n    if (this.blinkAt && now - this.blinkAt < 170) busy = true;\n    else this.blinkAt = 0;\n    this.draw(now);\n    this.raf = busy ? requestAnimationFrame(this.frame) : 0;\n  }\n\n  show(name: string) {\n    for (const n of [\"stand\", \"flyUp\", \"flyDown\", \"flyUpEmpty\", \"flyDownEmpty\"]) (this.parts[n] as HTMLElement | null)?.style.setProperty(\"opacity\", n === name ? \"1\" : \"0\");\n  }\n\n  draw(now: number) {\n    const bird = this.parts.bird as HTMLElement | null;\n    if (!bird) return;\n    const f = this.flight;\n    let x = HOME.x;\n    let y = HOME.y;\n    let angle = 0;\n    let flip = 1;\n    let frame = \"stand\";\n    if (f) {\n      const t = now - f.t0;\n      const k = f.leg === \"out\" ? inOut(clamp(t / FLY)) : f.leg === \"back\" ? 1 - inOut(clamp(t / FLY)) : 1;\n      // along the arc from home to over the mailbox (and back the same way)\n      x = (1 - k) * (1 - k) * HOME.x + 2 * (1 - k) * k * CTRL.x + k * k * OVER.x;\n      y = (1 - k) * (1 - k) * HOME.y + 2 * (1 - k) * k * CTRL.y + k * k * OVER.y;\n      const beat = Math.floor(t / FLAP) % 2;\n      y += Math.sin((t / FLAP) * Math.PI) * 1.6;\n      flip = f.leg === \"back\" ? -1 : 1;\n      angle = f.leg === \"wait\" ? 0 : (f.leg === \"out\" ? 1 : -1) * 6 * Math.sin(Math.PI * clamp(t / FLY));\n      const empty = !f.carrying;\n      frame = beat ? (empty ? \"flyDownEmpty\" : \"flyDown\") : empty ? \"flyUpEmpty\" : \"flyUp\";\n    } else if (now < this.flapUntil) {\n      frame = Math.floor((this.flapUntil - now) / FLAP) % 2 ? \"flyUpEmpty\" : \"flyDownEmpty\";\n    }\n    this.show(frame);\n    const puff = 1 + 0.07 * clamp(this.puffS.x, 0, 1.4);\n    const fx = (G.stand.feet.x - G.stand.cap.x) * KB;\n    const fy = (G.stand.feet.y - G.stand.cap.y) * KB;\n    // standing, he turns and swells about his feet; flying, about his middle\n    bird.style.transform =\n      `translate(${x.toFixed(2)}px, ${(y + this.hop.x * 0.06).toFixed(2)}px) scale(${flip}, 1) ` +\n      (f\n        ? `rotate(${angle.toFixed(2)}deg)`\n        : `translate(${fx.toFixed(2)}px, ${fy.toFixed(2)}px) rotate(${(this.rot.x * 0.05).toFixed(2)}deg) scale(${puff.toFixed(4)}) translate(${(-fx).toFixed(2)}px, ${(-fy).toFixed(2)}px)`);\n\n    // the mailbox: which flag, and a little rock when it changes\n    (this.parts.box as HTMLElement | null)?.style.setProperty(\"opacity\", this.flagUp ? \"0\" : \"1\");\n    (this.parts.boxFlag as HTMLElement | null)?.style.setProperty(\"opacity\", this.flagUp ? \"1\" : \"0\");\n    (this.parts.mailbox as HTMLElement | null)?.style.setProperty(\"transform\", `rotate(${(this.wobble.x * 0.25).toFixed(2)}deg)`);\n\n    const blink = this.blinkAt && frame === \"stand\" ? Math.sin(clamp((now - this.blinkAt) / 160) * Math.PI) : 0;\n    const shut = frame === \"stand\" ? Math.max(blink, clamp(this.lid.x)) : 0;\n    (this.parts.lid as SVGElement | null)?.setAttribute(\"transform\", `translate(${G.stand.eye.x} ${G.stand.eye.y - G.stand.eye.r}) scale(1 ${shut.toFixed(3)})`);\n  }\n}\n\nexport function Coo({\n  wait,\n  dozing = false,\n  reduced,\n  ref,\n  className = \"\",\n}: {\n  /** Seconds left before he can fly again; 0 when he can. */\n  wait: number;\n  /** Napping through the wait (the block wakes him while you type). */\n  dozing?: boolean;\n  reduced: boolean;\n  ref?: React.Ref<CooHandle>;\n  className?: string;\n}) {\n  const [engine] = React.useState(() => new CooEngine());\n  const [waited, setWaited] = React.useState(wait);\n  // the clock reaching zero (not a first render at zero) wakes him with a hop\n  const [woke, setWoke] = React.useState(false);\n  if (waited !== wait) {\n    setWaited(wait);\n    setWoke(waited > 0 && wait <= 0);\n  }\n\n  React.useLayoutEffect(() => {\n    engine.mount(reduced);\n    return () => engine.destroy();\n  }, [engine, reduced]);\n\n  React.useEffect(() => {\n    engine.doze(dozing && wait > 0, woke);\n  }, [engine, dozing, wait, woke]);\n\n  React.useImperativeHandle(\n    ref,\n    () => ({\n      peck: () => engine.peck(),\n      ruffle: () => engine.ruffle(),\n      puff: () => engine.puff(),\n      send: () => engine.send(),\n      delivered: (ok, onHome) => engine.delivered(ok, onHome),\n    }),\n    [engine],\n  );\n\n  const img = \"pointer-events-none absolute max-w-none select-none\";\n  const frame = (name: \"stand\" | \"flyUp\" | \"flyDown\", src: string, k: number, part: string, shown: boolean) => {\n    const g = G[name];\n    return (\n      // eslint-disable-next-line @next/next/no-img-element\n      <img\n        ref={engine.part(part)}\n        src={src}\n        alt=\"\"\n        draggable={false}\n        className={img}\n        style={{ left: -g.cap.x * k, top: -g.cap.y * k, width: g.w * k, height: g.h * k, opacity: shown ? 1 : 0, transformOrigin: name === \"stand\" ? `${G.stand.feet.x * k}px ${G.stand.feet.y * k}px` : undefined }}\n      />\n    );\n  };\n  return (\n    <div ref={engine.part(\"host\")} aria-hidden=\"true\" className={`relative w-full ${className}`} style={{ aspectRatio: `${W} / ${H}` }}>\n      <div ref={engine.part(\"scene\")} className=\"absolute left-0 top-0 origin-top-left\" style={{ width: W, height: H }}>\n        {/* the route he flies */}\n        <svg viewBox={`0 0 ${W} ${H}`} className=\"absolute inset-0 size-full overflow-visible\" fill=\"none\">\n          <path d={COO_ROUTE} stroke=\"var(--coo-route)\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeDasharray=\"2 5\" opacity=\"0.4\" />\n        </svg>\n\n        {/* eslint-disable-next-line @next/next/no-img-element */}\n        <img src={ART.post} alt=\"\" draggable={false} className={img} style={{ left: POST.x - (G.post.w * KP) / 2, top: POST.foot - G.post.h * KP, width: G.post.w * KP, height: G.post.h * KP }} />\n        <div ref={engine.part(\"mailbox\")} className=\"absolute left-0 top-0 size-full\" style={{ transformOrigin: `${BOX.x}px ${BOX.foot - 6}px` }}>\n          {/* eslint-disable-next-line @next/next/no-img-element */}\n          <img\n            ref={engine.part(\"box\")}\n            src={ART.box}\n            alt=\"\"\n            draggable={false}\n            className={img}\n            style={{ left: BOX.x - G.box.foot.x * KP, top: BOX.foot - G.box.foot.y * KP, width: G.box.w * KP, height: G.box.h * KP, opacity: 0 }}\n          />\n          {/* eslint-disable-next-line @next/next/no-img-element */}\n          <img\n            ref={engine.part(\"boxFlag\")}\n            src={ART.boxFlag}\n            alt=\"\"\n            draggable={false}\n            className={img}\n            style={{ left: BOX.x - G.boxFlag.foot.x * KP, top: BOX.foot - G.boxFlag.foot.y * KP, width: G.boxFlag.w * KP, height: G.boxFlag.h * KP }}\n          />\n        </div>\n\n        <div ref={engine.part(\"bird\")} className=\"absolute left-0 top-0 will-change-transform\">\n          {frame(\"stand\", ART.stand, KB, \"stand\", true)}\n          {frame(\"flyUp\", ART.flyUp, KF, \"flyUp\", false)}\n          {frame(\"flyDown\", ART.flyDown, KF, \"flyDown\", false)}\n          {frame(\"flyUp\", ART.flyUpEmpty, KF, \"flyUpEmpty\", false)}\n          {frame(\"flyDown\", ART.flyDownEmpty, KF, \"flyDownEmpty\", false)}\n          {/* his eyelid, closing over the drawn eye when he blinks */}\n          <svg\n            viewBox={`0 0 ${G.stand.w} ${G.stand.h}`}\n            className=\"pointer-events-none absolute overflow-visible\"\n            style={{ left: -G.stand.cap.x * KB, top: -G.stand.cap.y * KB, width: G.stand.w * KB, height: G.stand.h * KB }}\n          >\n            <g ref={engine.part(\"lid\")} transform=\"scale(1 0)\">\n              <ellipse cx=\"0\" cy={G.stand.eye.r} rx={G.stand.eye.r + 1.2} ry={G.stand.eye.r + 1} fill={G.lid} />\n              {/* the closed eye: a dark crease along the lid's foot */}\n              <path d={`M${-G.stand.eye.r} ${G.stand.eye.r * 1.1} Q0 ${G.stand.eye.r * 1.9} ${G.stand.eye.r} ${G.stand.eye.r * 1.1}`} fill=\"none\" stroke=\"rgb(40 40 52)\" strokeWidth=\"1.6\" strokeLinecap=\"round\" />\n            </g>\n          </svg>\n        </div>\n\n        <div ref={engine.part(\"zs\")} className=\"pointer-events-none absolute inset-0\" />\n\n        {/* his thought while he waits: how long until he can fly again */}\n        <div\n          className=\"pointer-events-none absolute\"\n          style={{\n            left: HOME.x + 28,\n            top: HOME.y - 23,\n            transformOrigin: \"0% 100%\",\n            opacity: wait > 0 ? 1 : 0,\n            transform: wait > 0 ? \"none\" : \"scale(0.4) translate(-6px, 10px)\",\n            filter: wait > 0 ? \"none\" : \"blur(3px)\",\n            transition: reduced ? \"none\" : \"opacity 260ms ease-out, transform 420ms cubic-bezier(0.34,1.36,0.64,1), filter 260ms ease-out\",\n          }}\n        >\n          <span className=\"absolute -bottom-[8px] left-[2px] size-[7px] rounded-full\" style={{ background: \"var(--coo-bubble)\" }} />\n          <span className=\"absolute -bottom-[15px] -left-[4px] size-[4px] rounded-full\" style={{ background: \"var(--coo-bubble)\" }} />\n          <span\n            className=\"flex h-[26px] items-center whitespace-nowrap rounded-full px-2.5 text-[14px] font-semibold tabular-nums tracking-[-0.01em]\"\n            style={{ background: \"var(--coo-bubble)\", color: \"var(--coo-bubble-ink)\" }}\n          >\n            {Math.floor(Math.max(0, wait) / 60)}:\n            <NumberRoll value={Math.max(0, wait) % 60} format={{ minimumIntegerDigits: 2 }} direction=\"down\" duration={700} />\n          </span>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport default Coo;\n"},{"path":"registry/coo-art.ts","type":"registry:component","content":"// Hairline UI · verify-code · MIT License\n// Copyright (c) 2026 Hairline UI · https://hairlineui.com/license#components\n\n/* Coo's art: an illustrated carrier pigeon, his mailbox and his post, as WebP data URIs so\n * one install brings everything. Sizes and points are in each image's own pixels. */\n\nexport const COO_ART = {\n  stand: \"data:image/webp;base64,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\",\n  flyUp: \"data:image/webp;base64,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\",\n  flyDown: \"data:image/webp;base64,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\",\n  flyUpEmpty: \"data:image/webp;base64,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\",\n  flyDownEmpty: \"data:image/webp;base64,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\",\n  box: \"data:image/webp;base64,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\",\n  boxFlag: \"data:image/webp;base64,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\",\n  post: \"data:image/webp;base64,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\",\n};\n\nexport const COO_GEO = {\n  /** Every pigeon frame is placed by the middle of his red cap, so swapping frames never jumps. */\n  stand: { ...{ w: 186, h: 185 }, cap: { x: 145.7, y: 17.4 }, feet: { x: 115.8, y: 183 }, eye: { x: 152.8, y: 38.8, r: 6.6 } },\n  flyUp: { ...{ w: 196, h: 191 }, cap: { x: 140.8, y: 72.7 } },\n  flyDown: { ...{ w: 197, h: 159 }, cap: { x: 144.5, y: 12.4 } },\n  /** The flying frames were drawn a little smaller than the standing one. */\n  flyScale: 1.2,\n  box: { ...{ w: 110, h: 151 }, foot: { x: 52.8, y: 151 } },\n  boxFlag: { ...{ w: 108, h: 166 }, foot: { x: 51.1, y: 166 } },\n  post: { w: 41, h: 131 },\n  /** His feathers by the eye, for the lid when he blinks. */\n  lid: \"rgb(124 131 154)\",\n} as const;\n"},{"path":"registry/ui-interaction-motion.ts","type":"registry:component","content":"// Hairline UI · verify-code · MIT License\n// Copyright (c) 2026 Hairline UI · https://hairlineui.com/license#components\n\n'use client';\n\nimport * as React from 'react';\n\nexport const EASE_OUT = 'cubic-bezier(0.16, 1, 0.3, 1)';\nexport const EASE_SETTLE = 'cubic-bezier(0.22, 1.18, 0.36, 1)';\n/** Thrown things (indicators, thumbs): a slight overshoot on transform only. */\nexport const EASE_THROW = 'cubic-bezier(0.34, 1.36, 0.64, 1)';\n/**\n * The press every button primitive shares: a 3% give that eases in and settles back.\n * Tailwind v4's scale-* writes the `scale` property, so `scale` has to be in the list\n * or the press snaps.\n */\nexport const INTERACTION_PRESS =\n  'transition-[background-color,color,box-shadow,opacity,scale] duration-200 ease-[cubic-bezier(0.16,1,0.3,1)] active:scale-[0.97] motion-reduce:transition-none motion-reduce:active:scale-100';\nexport const INTERACTION_FOCUS ='focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:ring-offset-2 focus-visible:ring-offset-background';\n\nconst query = '(prefers-reduced-motion: reduce)';\nconst subscribe = (notify: () => void) => {\n  const media = window.matchMedia(query);\n  media.addEventListener('change', notify);\n  return () => media.removeEventListener('change', notify);\n};\nexport const useInteractionReducedMotion = () => React.useSyncExternalStore(subscribe, () => window.matchMedia(query).matches, () => false);\n\nexport function useInteractionActivity<T extends Element>() {\n  const ref = React.useRef<T>(null);\n  const [visible, setVisible] = React.useState(false);\n  const [hidden, setHidden] = React.useState(false);\n  React.useEffect(() => {\n    const el = ref.current;\n    if (!el) return;\n    const observer = new IntersectionObserver(([entry]) => setVisible(entry.isIntersecting));\n    observer.observe(el);\n    const visibility = () => setHidden(document.hidden);\n    visibility(); document.addEventListener('visibilitychange', visibility);\n    return () => { observer.disconnect(); document.removeEventListener('visibilitychange', visibility); };\n  }, []);\n  return { ref, active: visible && !hidden };\n}\n\nexport function interactionIcon(on: boolean, reduced: boolean): React.CSSProperties {\n  return { opacity: on ? 1 : 0, transform: on ? 'none' : 'scale(0.6)', filter: on ? 'blur(0px)' : 'blur(3px)', transition: reduced ? 'none' : `opacity 220ms ${EASE_OUT}, transform 380ms ${EASE_OUT}, filter 220ms ${EASE_OUT}` };\n}\n\n/** Sample recent movement rather than averaging a long drag and losing its release velocity. */\nexport type PointerSample = { x: number; time: number };\nexport function samplePointer(samples: PointerSample[], x: number, time: number) {\n  samples.push({ x, time });\n  while (samples.length > 2 && time - samples[0].time > 100) samples.shift();\n}\nexport function releaseVelocity(samples: PointerSample[], now: number) {\n  if (samples.length < 2 || now - samples[samples.length - 1].time > 100) return 0;\n  const first = samples[0], last = samples[samples.length - 1];\n  return (last.x - first.x) / Math.max(1, last.time - first.time);\n}\n\n/** Smooth Apple/rational rubber-band curve: continuous exponential-like resistance without linear kinks. */\nexport function rubberBand(overshoot: number, dimension = 320, constant = 0.55): number {\n  const d = dimension || 320;\n  const abs = Math.abs(overshoot);\n  return Math.sign(overshoot) * (1 - 1 / ((abs * constant) / d + 1)) * d;\n}\n\n/** Projects resting travel from release velocity (velocity in px/ms; time in seconds). */\nexport function projectInertia(distance: number, velocity: number, time = 0.12): number {\n  return distance + velocity * 1000 * time;\n}\n\n/** Smooths incoming release velocity toward a boundary so springs don't slam or clip into walls. */\nexport function softenVelocity(velocity: number, distanceToTarget: number, factor = 10): number {\n  const maxAllowed = Math.abs(distanceToTarget) * factor;\n  return Math.sign(velocity) * Math.min(Math.abs(velocity), maxAllowed);\n}\n\n/** A damped spring sampled by WAAPI: tuned for organic lightness with a hint of life (3% breath). */\nexport function springFrames(\n  from: number,\n  to: number,\n  velocity = 0,\n  duration = 480,\n  config: { omega?: number; damping?: number; steps?: number } = {},\n) {\n  const { omega = 16, damping = 0.74, steps = 36 } = config;\n  const damped = omega * Math.sqrt(Math.max(0.001, 1 - damping * damping));\n  const displacement = from - to;\n  const coefficient = (velocity * 1000 + damping * omega * displacement) / damped;\n  return Array.from({ length: steps + 1 }, (_, i) => {\n    const t = (i / steps) * (duration / 1000);\n    const value = to + Math.exp(-damping * omega * t) * (displacement * Math.cos(damped * t) + coefficient * Math.sin(damped * t));\n    return { value: i === steps ? to : value, offset: i / steps };\n  });\n}\n\n"}],"css":{},"docs":"Docs and live preview: https://hairlineui.com/ui/verify-code. MIT licensed: https://hairlineui.com/license#components","meta":{"license":"MIT"}}