{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "use-debounced-callback",
  "title": "useDebounceCallback",
  "description": "A hook to debounce a callback",
  "files": [
    {
      "path": "registry/hooks/use-debounced-callback.ts",
      "content": "'use client'\n\nimport * as React from 'react'\n\nexport function useDebouncedCallback<T extends (...args: any[]) => any>(\n  fn: T,\n  deps: React.DependencyList,\n  delay: number,\n): (...args: Parameters<T>) => void {\n  const timerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n  const debouncedFn = React.useCallback(\n    (...args: Parameters<T>) => {\n      if (timerRef.current) {\n        clearTimeout(timerRef.current)\n      }\n\n      timerRef.current = setTimeout(() => {\n        fn(...args)\n      }, delay)\n    },\n    [\n      fn,\n      delay,\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      ...deps,\n    ],\n  )\n\n  React.useEffect(() => () => {\n    if (timerRef.current) {\n      clearTimeout(timerRef.current)\n    }\n  }, [])\n\n  return debouncedFn\n}\n",
      "type": "registry:hook",
      "target": "hookas/use-debounced-callback.ts"
    }
  ],
  "type": "registry:hook"
}