{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "shadcn-hooks",
  "homepage": "https://shadcn-hooks.com",
  "items": [
    {
      "name": "is-browser",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A library that checks if the code is running in a browser.",
      "files": [
        {
          "path": "registry/lib/is-browser.ts",
          "type": "registry:lib"
        }
      ],
      "type": "registry:lib"
    },
    {
      "name": "create-effect-with-target",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to create an effect with a target.",
      "dependencies": [
        "es-toolkit"
      ],
      "registryDependencies": [
        "@shadcnhooks/use-unmount"
      ],
      "files": [
        {
          "path": "registry/lib/create-effect-with-target.ts",
          "type": "registry:lib"
        }
      ],
      "type": "registry:lib"
    },
    {
      "name": "create-context",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "Create a context object.",
      "files": [
        {
          "path": "registry/lib/create-context.tsx",
          "type": "registry:lib"
        }
      ],
      "type": "registry:lib"
    },
    {
      "name": "use-why-did-you-update",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to log the props that changed in a component",
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hooks/use-why-did-you-update.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-update-effect",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to run an effect only when the component updates",
      "registryDependencies": [
        "@shadcnhooks/use-unmount"
      ],
      "files": [
        {
          "path": "registry/hooks/use-update-effect.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-update",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to force a component to re-render",
      "files": [
        {
          "path": "registry/hooks/use-update.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-unmount",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to run a function when the component unmounts",
      "registryDependencies": [
        "@shadcnhooks/use-latest"
      ],
      "files": [
        {
          "path": "registry/hooks/use-unmount.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-toggle",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to toggle a value",
      "files": [
        {
          "path": "registry/hooks/use-toggle.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-title",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to reactively manage document.title",
      "registryDependencies": [
        "@shadcnhooks/use-isomorphic-layout-effect"
      ],
      "files": [
        {
          "path": "registry/hooks/use-title.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-timeout",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook that creates a timeout.",
      "registryDependencies": [
        "@shadcnhooks/use-memoized-fn"
      ],
      "files": [
        {
          "path": "registry/hooks/use-timeout.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-throttle-fn",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to throttle a function",
      "dependencies": [
        "es-toolkit"
      ],
      "registryDependencies": [
        "@shadcnhooks/use-latest",
        "@shadcnhooks/use-unmount"
      ],
      "files": [
        {
          "path": "registry/hooks/use-throttle-fn.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-throttle-effect",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to throttle an effect",
      "registryDependencies": [
        "@shadcnhooks/use-throttle-fn",
        "@shadcnhooks/use-update-effect"
      ],
      "files": [
        {
          "path": "registry/hooks/use-throttle-effect.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-throttle",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to throttle a value",
      "registryDependencies": [
        "@shadcnhooks/use-throttle-fn"
      ],
      "files": [
        {
          "path": "registry/hooks/use-throttle.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-text-selection",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to get the text selection and its bounding rect from an element",
      "registryDependencies": [
        "@shadcnhooks/create-effect-with-target",
        "@shadcnhooks/use-effect-with-target"
      ],
      "files": [
        {
          "path": "registry/hooks/use-text-selection.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-swr",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to get the latest value of a variable",
      "dependencies": [
        "swr"
      ],
      "files": [],
      "type": "registry:hook"
    },
    {
      "name": "use-stick-to-bottom",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A lightweight React Hook intended mainly for AI chat applications, for smoothly sticking to bottom of messages",
      "dependencies": [
        "use-stick-to-bottom"
      ],
      "files": [],
      "type": "registry:hook"
    },
    {
      "name": "use-scroll-lock",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to lock the scroll of the body",
      "registryDependencies": [
        "@shadcnhooks/use-isomorphic-layout-effect",
        "@shadcnhooks/is-browser"
      ],
      "files": [
        {
          "path": "registry/hooks/use-scroll-lock.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-reset-state",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to reset a state",
      "dependencies": [
        "es-toolkit"
      ],
      "registryDependencies": [
        "@shadcnhooks/use-creation",
        "@shadcnhooks/use-memoized-fn"
      ],
      "files": [
        {
          "path": "registry/hooks/use-reset-state.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-query",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "useQuery is a hook that allows you to fetch data from an API and cache the results.",
      "dependencies": [
        "@tanstack/react-query"
      ],
      "files": [],
      "type": "registry:hook"
    },
    {
      "name": "use-previous",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to get the previous value of a variable",
      "files": [
        {
          "path": "registry/hooks/use-previous.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-os",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to detect the current operating system",
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hooks/use-os.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-network",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to get the network state",
      "registryDependencies": [
        "@shadcnhooks/use-network"
      ],
      "files": [
        {
          "path": "registry/hooks/use-network.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-mouse",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to track mouse position with optional touch support",
      "registryDependencies": [
        "@shadcnhooks/use-event-listener"
      ],
      "files": [
        {
          "path": "registry/hooks/use-mouse.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-mount",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to run a function when the component mounts",
      "files": [
        {
          "path": "registry/hooks/use-mount.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-memoized-fn",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to declare a memoized function",
      "files": [
        {
          "path": "registry/hooks/use-memoized-fn.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-mcp",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to get the latest value of a variable",
      "dependencies": [
        "use-mcp"
      ],
      "files": [],
      "type": "registry:hook"
    },
    {
      "name": "use-lock-fn",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to lock a function until the previous promise is resolved",
      "files": [
        {
          "path": "registry/hooks/use-lock-fn.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-latest",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to get the latest value of a variable",
      "registryDependencies": [
        "@shadcnhooks/use-isomorphic-layout-effect"
      ],
      "files": [
        {
          "path": "registry/hooks/use-latest.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-isomorphic-layout-effect",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to use layout effect on the client side",
      "registryDependencies": [
        "@shadcnhooks/is-browser"
      ],
      "files": [
        {
          "path": "registry/hooks/use-isomorphic-layout-effect.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-is-online",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to check if the user is online",
      "files": [
        {
          "path": "registry/hooks/use-is-online.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-is-match-media",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to check if the media query matches",
      "registryDependencies": [
        "@shadcnhooks/use-isomorphic-layout-effect"
      ],
      "files": [
        {
          "path": "registry/hooks/use-is-match-media.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-is-hydrated",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to check if the component is hydrated",
      "files": [
        {
          "path": "registry/hooks/use-is-hydrated.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-interval",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook that creates an interval.",
      "registryDependencies": [
        "@shadcnhooks/use-memoized-fn"
      ],
      "files": [
        {
          "path": "registry/hooks/use-interval.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-in-viewport",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to check if an element is in the viewport",
      "registryDependencies": [
        "@shadcnhooks/use-effect-with-target",
        "@shadcnhooks/create-effect-with-target",
        "@shadcnhooks/use-in-viewport"
      ],
      "files": [
        {
          "path": "registry/hooks/use-in-viewport.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-hover",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to check if the mouse is hovering over an element",
      "registryDependencies": [
        "@shadcnhooks/create-effect-with-target",
        "@shadcnhooks/use-event-listener",
        "@shadcnhooks/use-boolean"
      ],
      "files": [
        {
          "path": "registry/hooks/use-hover.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-hash",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to get current hash",
      "files": [
        {
          "path": "registry/hooks/use-hash.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-fullscreen",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to manage fullscreen state",
      "dependencies": [
        "es-toolkit"
      ],
      "registryDependencies": [
        "@shadcnhooks/use-isomorphic-layout-effect",
        "@shadcnhooks/use-event-listener",
        "@shadcnhooks/use-unmount",
        "@shadcnhooks/use-latest",
        "@shadcnhooks/use-memoized-fn",
        "@shadcnhooks/create-effect-with-target",
        "@shadcnhooks/is-browser"
      ],
      "files": [
        {
          "path": "registry/hooks/use-fullscreen.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-fps",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to calculate the FPS",
      "registryDependencies": [
        "@shadcnhooks/use-fps"
      ],
      "files": [
        {
          "path": "registry/hooks/use-fps.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-event-listener",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to attach event listeners to DOM elements, the window, or media query lists.",
      "registryDependencies": [
        "@shadcnhooks/use-latest",
        "@shadcnhooks/use-effect-with-target",
        "@shadcnhooks/create-effect-with-target"
      ],
      "files": [
        {
          "path": "registry/hooks/use-event-listener.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-element-size",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to track an element's width and height",
      "registryDependencies": [
        "@shadcnhooks/use-effect-with-target",
        "@shadcnhooks/create-effect-with-target"
      ],
      "files": [
        {
          "path": "registry/hooks/use-element-size.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-effect-with-target",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to create an effect with a target element that re-runs when the target or dependencies change",
      "registryDependencies": [
        "@shadcnhooks/create-effect-with-target"
      ],
      "files": [
        {
          "path": "registry/hooks/use-effect-with-target.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-effect-event",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to declare an effect event",
      "files": [
        {
          "path": "registry/hooks/use-effect-event.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-document-visibility",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to track the document visibility state",
      "files": [
        {
          "path": "registry/hooks/use-document-visibility.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-deep-compare-layout-effect",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to use a deep compare layout effect",
      "dependencies": [
        "dequal"
      ],
      "files": [
        {
          "path": "registry/hooks/use-deep-compare-layout-effect.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-deep-compare-effect",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to use a deep compare effect",
      "dependencies": [
        "dequal"
      ],
      "registryDependencies": [
        "@shadcnhooks/use-isomorphic-layout-effect"
      ],
      "files": [
        {
          "path": "registry/hooks/use-deep-compare-effect.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-debounce-fn",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to debounce a function",
      "dependencies": [
        "es-toolkit"
      ],
      "registryDependencies": [
        "@shadcnhooks/use-latest",
        "@shadcnhooks/use-unmount"
      ],
      "files": [
        {
          "path": "registry/hooks/use-debounce-fn.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-debounce-effect",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to debounce an effect",
      "registryDependencies": [
        "@shadcnhooks/use-debounce-fn",
        "@shadcnhooks/use-update-effect"
      ],
      "files": [
        {
          "path": "registry/hooks/use-debounce-effect.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-debounce",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to debounce a value",
      "registryDependencies": [
        "@shadcnhooks/use-debounce-fn"
      ],
      "files": [
        {
          "path": "registry/hooks/use-debounce.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-custom-compare-effect",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook like useEffect but with a custom compare function",
      "files": [
        {
          "path": "registry/hooks/use-custom-compare-effect.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-creation",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to create a value only once",
      "dependencies": [
        "es-toolkit"
      ],
      "files": [
        {
          "path": "registry/hooks/use-creation.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-counter",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook that creates a counter.",
      "files": [
        {
          "path": "registry/hooks/use-counter.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-controllable-value",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to manage a controllable value",
      "dependencies": [
        "es-toolkit"
      ],
      "registryDependencies": [
        "@shadcnhooks/use-memoized-fn",
        "@shadcnhooks/use-update"
      ],
      "files": [
        {
          "path": "registry/hooks/use-controllable-value.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-clipboard",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to copy text to clipboard",
      "registryDependencies": [
        "@shadcnhooks/use-unmount",
        "@shadcnhooks/use-event-listener",
        "@shadcnhooks/use-memoized-fn",
        "@shadcnhooks/is-browser"
      ],
      "files": [
        {
          "path": "registry/hooks/use-clipboard.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-click-away",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to click away from an element",
      "registryDependencies": [
        "@shadcnhooks/use-latest",
        "@shadcnhooks/use-effect-with-target",
        "@shadcnhooks/create-effect-with-target"
      ],
      "files": [
        {
          "path": "registry/hooks/use-click-away.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-click-any-where",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to click anywhere",
      "registryDependencies": [
        "@shadcnhooks/use-event-listener"
      ],
      "files": [
        {
          "path": "registry/hooks/use-click-any-where.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-boolean",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to toggle a boolean value",
      "registryDependencies": [
        "@shadcnhooks/use-toggle"
      ],
      "files": [
        {
          "path": "registry/hooks/use-boolean.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-battery",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to monitor battery information",
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hooks/use-battery.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    },
    {
      "name": "use-active-element",
      "author": "Brendan Dash (https://shadcn-hooks.com)",
      "description": "A hook to track the currently focused element in the document",
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hooks/use-active-element.ts",
          "type": "registry:hook"
        }
      ],
      "type": "registry:hook"
    }
  ]
}
