{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "use-mount-effect",
  "title": "Use Mount Effect",
  "description": "A mount-only effect hook for explicit lifecycle escape hatches.",
  "files": [
    {
      "path": "hooks/use-mount-effect.ts",
      "content": "\"use client\";\n\nimport { useEffect } from \"react\";\n\n/**\n * Run an effect exactly once on mount. The returned cleanup (if any) runs on unmount.\n *\n * Use this instead of `useEffect(fn, [])` so intent is explicit and the escape\n * hatch is greppable. See `no-use-effect.md` for the five replacement patterns\n * and when this hook is actually the right answer (DOM integration, third-party\n * widget lifecycles, browser API subscriptions, stable singleton dependencies).\n */\nexport function useMountEffect(effect: () => void | (() => void)) {\n  // eslint-disable-next-line no-restricted-syntax\n  useEffect(effect, []);\n}\n",
      "type": "registry:hook",
      "target": "@hooks/use-mount-effect.ts"
    }
  ],
  "type": "registry:hook"
}