{
  "name": "better-hooks",
  "version": "1.3.0",
  "description": "Type-safe, SSR-aware React 19 Hooks with stable callbacks and direct ESM entry points.",
  "keywords": [
    "debounce",
    "esm",
    "hooks",
    "react",
    "react-19",
    "react-hooks",
    "react-server-components",
    "ssr",
    "state",
    "storage",
    "throttle",
    "typescript"
  ],
  "homepage": "https://chenyu1ov3.github.io/better-hooks/",
  "bugs": {
    "url": "https://github.com/chenyu1ov3/better-hooks/issues"
  },
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/chenyu1ov3/better-hooks.git",
    "directory": "packages/hooks"
  },
  "files": [
    "dist",
    "README.md",
    "README.zh-CN.md",
    "assets",
    "LICENSE",
    "CHANGELOG.md"
  ],
  "type": "module",
  "sideEffects": false,
  "main": "./dist/index.js",
  "module": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "exports": {
    ".": {
      "types": "./dist/index.d.ts",
      "import": "./dist/index.js",
      "default": "./dist/index.js"
    },
    "./use-toggle": {
      "types": "./dist/use-toggle/index.d.ts",
      "import": "./dist/use-toggle/index.js",
      "default": "./dist/use-toggle/index.js"
    },
    "./use-boolean": {
      "types": "./dist/use-boolean/index.d.ts",
      "import": "./dist/use-boolean/index.js",
      "default": "./dist/use-boolean/index.js"
    },
    "./use-counter": {
      "types": "./dist/use-counter/index.d.ts",
      "import": "./dist/use-counter/index.js",
      "default": "./dist/use-counter/index.js"
    },
    "./use-map": {
      "types": "./dist/use-map/index.d.ts",
      "import": "./dist/use-map/index.js",
      "default": "./dist/use-map/index.js"
    },
    "./use-set": {
      "types": "./dist/use-set/index.d.ts",
      "import": "./dist/use-set/index.js",
      "default": "./dist/use-set/index.js"
    },
    "./use-copy-to-clipboard": {
      "types": "./dist/use-copy-to-clipboard/index.d.ts",
      "import": "./dist/use-copy-to-clipboard/index.js",
      "default": "./dist/use-copy-to-clipboard/index.js"
    },
    "./use-previous": {
      "types": "./dist/use-previous/index.d.ts",
      "import": "./dist/use-previous/index.js",
      "default": "./dist/use-previous/index.js"
    },
    "./use-reset-state": {
      "types": "./dist/use-reset-state/index.d.ts",
      "import": "./dist/use-reset-state/index.js",
      "default": "./dist/use-reset-state/index.js"
    },
    "./use-safe-state": {
      "types": "./dist/use-safe-state/index.d.ts",
      "import": "./dist/use-safe-state/index.js",
      "default": "./dist/use-safe-state/index.js"
    },
    "./use-latest": {
      "types": "./dist/use-latest/index.d.ts",
      "import": "./dist/use-latest/index.js",
      "default": "./dist/use-latest/index.js"
    },
    "./use-controllable-state": {
      "types": "./dist/use-controllable-state/index.d.ts",
      "import": "./dist/use-controllable-state/index.js",
      "default": "./dist/use-controllable-state/index.js"
    },
    "./use-is-mounted": {
      "types": "./dist/use-is-mounted/index.d.ts",
      "import": "./dist/use-is-mounted/index.js",
      "default": "./dist/use-is-mounted/index.js"
    },
    "./use-unmounted-ref": {
      "types": "./dist/use-unmounted-ref/index.d.ts",
      "import": "./dist/use-unmounted-ref/index.js",
      "default": "./dist/use-unmounted-ref/index.js"
    },
    "./use-isomorphic-layout-effect": {
      "types": "./dist/use-isomorphic-layout-effect/index.d.ts",
      "import": "./dist/use-isomorphic-layout-effect/index.js",
      "default": "./dist/use-isomorphic-layout-effect/index.js"
    },
    "./use-debounce": {
      "types": "./dist/use-debounce/index.d.ts",
      "import": "./dist/use-debounce/index.js",
      "default": "./dist/use-debounce/index.js"
    },
    "./use-throttle": {
      "types": "./dist/use-throttle/index.d.ts",
      "import": "./dist/use-throttle/index.js",
      "default": "./dist/use-throttle/index.js"
    },
    "./use-debounce-fn": {
      "types": "./dist/use-debounce-fn/index.d.ts",
      "import": "./dist/use-debounce-fn/index.js",
      "default": "./dist/use-debounce-fn/index.js"
    },
    "./use-document-visibility": {
      "types": "./dist/use-document-visibility/index.d.ts",
      "import": "./dist/use-document-visibility/index.js",
      "default": "./dist/use-document-visibility/index.js"
    },
    "./use-throttle-fn": {
      "types": "./dist/use-throttle-fn/index.d.ts",
      "import": "./dist/use-throttle-fn/index.js",
      "default": "./dist/use-throttle-fn/index.js"
    },
    "./use-timeout": {
      "types": "./dist/use-timeout/index.d.ts",
      "import": "./dist/use-timeout/index.js",
      "default": "./dist/use-timeout/index.js"
    },
    "./use-interval": {
      "types": "./dist/use-interval/index.d.ts",
      "import": "./dist/use-interval/index.js",
      "default": "./dist/use-interval/index.js"
    },
    "./use-async": {
      "types": "./dist/use-async/index.d.ts",
      "import": "./dist/use-async/index.js",
      "default": "./dist/use-async/index.js"
    },
    "./use-websocket": {
      "types": "./dist/use-websocket/index.d.ts",
      "import": "./dist/use-websocket/index.js",
      "default": "./dist/use-websocket/index.js"
    },
    "./use-event-listener": {
      "types": "./dist/use-event-listener/index.d.ts",
      "import": "./dist/use-event-listener/index.js",
      "default": "./dist/use-event-listener/index.js"
    },
    "./use-hover": {
      "types": "./dist/use-hover/index.d.ts",
      "import": "./dist/use-hover/index.js",
      "default": "./dist/use-hover/index.js"
    },
    "./use-key-press": {
      "types": "./dist/use-key-press/index.d.ts",
      "import": "./dist/use-key-press/index.js",
      "default": "./dist/use-key-press/index.js"
    },
    "./use-click-outside": {
      "types": "./dist/use-click-outside/index.d.ts",
      "import": "./dist/use-click-outside/index.js",
      "default": "./dist/use-click-outside/index.js"
    },
    "./use-media-query": {
      "types": "./dist/use-media-query/index.d.ts",
      "import": "./dist/use-media-query/index.js",
      "default": "./dist/use-media-query/index.js"
    },
    "./use-window-size": {
      "types": "./dist/use-window-size/index.d.ts",
      "import": "./dist/use-window-size/index.js",
      "default": "./dist/use-window-size/index.js"
    },
    "./use-intersection-observer": {
      "types": "./dist/use-intersection-observer/index.d.ts",
      "import": "./dist/use-intersection-observer/index.js",
      "default": "./dist/use-intersection-observer/index.js"
    },
    "./use-resize-observer": {
      "types": "./dist/use-resize-observer/index.d.ts",
      "import": "./dist/use-resize-observer/index.js",
      "default": "./dist/use-resize-observer/index.js"
    },
    "./use-online": {
      "types": "./dist/use-online/index.d.ts",
      "import": "./dist/use-online/index.js",
      "default": "./dist/use-online/index.js"
    },
    "./use-input": {
      "types": "./dist/use-input/index.d.ts",
      "import": "./dist/use-input/index.js",
      "default": "./dist/use-input/index.js"
    },
    "./use-local-storage": {
      "types": "./dist/use-local-storage/index.d.ts",
      "import": "./dist/use-local-storage/index.js",
      "default": "./dist/use-local-storage/index.js"
    },
    "./use-lock-fn": {
      "types": "./dist/use-lock-fn/index.d.ts",
      "import": "./dist/use-lock-fn/index.js",
      "default": "./dist/use-lock-fn/index.js"
    },
    "./use-memoized-fn": {
      "types": "./dist/use-memoized-fn/index.d.ts",
      "import": "./dist/use-memoized-fn/index.js",
      "default": "./dist/use-memoized-fn/index.js"
    },
    "./use-session-storage": {
      "types": "./dist/use-session-storage/index.d.ts",
      "import": "./dist/use-session-storage/index.js",
      "default": "./dist/use-session-storage/index.js"
    },
    "./package.json": "./package.json"
  },
  "publishConfig": {
    "access": "public",
    "registry": "https://registry.npmjs.org/"
  },
  "scripts": {
    "build": "tsdown && tsc --project tsconfig.build.json",
    "clean": "node -e \"import('node:fs').then(({rmSync}) => rmSync('dist', { recursive: true, force: true }))\"",
    "dev": "tsdown --watch --no-clean",
    "typecheck": "tsc --noEmit && tsc --project tsconfig.test.json --noEmit"
  },
  "peerDependencies": {
    "react": ">=19.0.0 <20.0.0"
  },
  "engines": {
    "node": ">=22.18.0"
  }
}
