{
  "packages": {
    "shared": {
      "name": "shared",
      "display": "Shared utilities",
      "dir": "packages/shared"
    },
    "core": {
      "name": "core",
      "display": "VueUse",
      "description": "Collection of essential Vue Composition Utilities",
      "dir": "packages/core"
    },
    "components": {
      "name": "components",
      "display": "Components",
      "description": "Renderless components for VueUse",
      "author": "Jacob Clevenger<https://github.com/wheatjs>",
      "external": [
        "@vueuse/core",
        "@vueuse/shared"
      ],
      "dir": "packages/components"
    },
    "nuxt": {
      "name": "nuxt",
      "display": "Nuxt",
      "description": "VueUse Nuxt Module",
      "manualImport": true,
      "addon": true,
      "iife": false,
      "cjs": false,
      "dts": false,
      "target": "node14",
      "external": [
        "@vueuse/core",
        "@vueuse/shared",
        "local-pkg",
        "fs",
        "path",
        "url"
      ],
      "dir": "packages/nuxt",
      "docs": "https://vueuse.org/nuxt/README.html"
    },
    "router": {
      "name": "router",
      "display": "Router",
      "description": "Utilities for vue-router",
      "addon": true,
      "external": [
        "vue-router"
      ],
      "globals": {
        "vue-router": "VueRouter"
      },
      "dir": "packages/router",
      "docs": "https://vueuse.org/router/README.html"
    },
    "integrations": {
      "name": "integrations",
      "display": "Integrations",
      "description": "Integration wrappers for utility libraries",
      "addon": true,
      "submodules": true,
      "external": [
        "axios",
        "universal-cookie",
        "qrcode",
        "http",
        "nprogress",
        "jwt-decode",
        "focus-trap",
        "drauu",
        "@vueuse/core",
        "@vueuse/shared",
        "fuse.js"
      ],
      "globals": {
        "axios": "axios",
        "universal-cookie": "UniversalCookie",
        "qrcode": "QRCode",
        "nprogress": "nprogress",
        "jwt-decode": "jwt_decode",
        "focus-trap": "focusTrap",
        "drauu": "Drauu",
        "fuse.js": "Fuse"
      },
      "dir": "packages/integrations",
      "docs": "https://vueuse.org/integrations/README.html"
    },
    "rxjs": {
      "name": "rxjs",
      "display": "RxJS",
      "description": "Enables RxJS reactive functions in Vue",
      "addon": true,
      "external": [
        "rxjs",
        "rxjs/operators"
      ],
      "globals": {
        "rxjs": "rxjs",
        "rxjs/operators": "rxjs.operator"
      },
      "dir": "packages/rxjs",
      "docs": "https://vueuse.org/rxjs/README.html"
    },
    "firebase": {
      "name": "firebase",
      "display": "Firebase",
      "description": "Enables realtime bindings for Firebase",
      "addon": true,
      "submodules": true,
      "external": [
        "firebase",
        "firebase/app"
      ],
      "globals": {
        "firebase": "firebase",
        "firebase/app": "firebase"
      },
      "dir": "packages/firebase",
      "docs": "https://vueuse.org/firebase/README.html"
    },
    "electron": {
      "name": "electron",
      "display": "Electron",
      "description": "Electron renderer process modules for VueUse",
      "author": "Archer Gu<https://github.com/ArcherGu>",
      "addon": true,
      "external": [
        "electron"
      ],
      "iife": false,
      "dir": "packages/electron",
      "docs": "https://vueuse.org/electron/README.html"
    }
  },
  "categories": [
    "@Electron",
    "@Firebase",
    "@Integrations",
    "@Router",
    "@RxJS",
    "Animation",
    "Browser",
    "Component",
    "Formatters",
    "Misc",
    "Sensors",
    "State",
    "Utilities",
    "Watch"
  ],
  "functions": [
    {
      "name": "and",
      "package": "shared",
      "docs": "https://vueuse.org/shared/and/",
      "category": "Utilities",
      "description": "`AND` condition for refs"
    },
    {
      "name": "biSyncRef",
      "package": "shared",
      "docs": "https://vueuse.org/shared/biSyncRef/",
      "category": "Utilities",
      "description": "two-way refs synchronization"
    },
    {
      "name": "controlledComputed",
      "package": "shared",
      "docs": "https://vueuse.org/shared/controlledComputed/",
      "category": "Utilities",
      "description": "explicitly define the deps of computed"
    },
    {
      "name": "controlledRef",
      "package": "shared",
      "docs": "https://vueuse.org/shared/controlledRef/",
      "category": "Utilities",
      "description": "fine-grained controls over ref and its reactivity"
    },
    {
      "name": "createEventHook",
      "package": "shared",
      "docs": "https://vueuse.org/shared/createEventHook/",
      "category": "Utilities",
      "description": "utility for creating event hooks"
    },
    {
      "name": "createGlobalState",
      "package": "shared",
      "docs": "https://vueuse.org/shared/createGlobalState/",
      "category": "State",
      "description": "keep states in the global scope to be reusable across Vue instances"
    },
    {
      "name": "createReactiveFn",
      "package": "shared",
      "docs": "https://vueuse.org/shared/createReactiveFn/",
      "category": "Utilities",
      "description": "converts plain functions into reactive functions"
    },
    {
      "name": "createSharedComposable",
      "package": "shared",
      "docs": "https://vueuse.org/shared/createSharedComposable/",
      "category": "State",
      "description": "make a composable function usable with multiple Vue instances"
    },
    {
      "name": "debouncedRef",
      "package": "shared",
      "docs": "https://vueuse.org/shared/debouncedRef/",
      "category": "Utilities",
      "description": "debounce updates of a ref"
    },
    {
      "name": "debouncedWatch",
      "package": "shared",
      "docs": "https://vueuse.org/shared/debouncedWatch/",
      "category": "Watch",
      "description": "debounced watch"
    },
    {
      "name": "eagerComputed",
      "package": "shared",
      "docs": "https://vueuse.org/shared/eagerComputed/",
      "category": "Utilities",
      "description": "eager computed without lazy evaluation"
    },
    {
      "name": "extendRef",
      "package": "shared",
      "docs": "https://vueuse.org/shared/extendRef/",
      "category": "Utilities",
      "description": "add extra attributes to Ref"
    },
    {
      "name": "get",
      "package": "shared",
      "docs": "https://vueuse.org/shared/get/",
      "category": "Utilities",
      "description": "shorthand for accessing `ref.value`"
    },
    {
      "name": "ignorableWatch",
      "package": "shared",
      "docs": "https://vueuse.org/shared/ignorableWatch/",
      "category": "Watch",
      "description": "ignorable watch"
    },
    {
      "name": "isDefined",
      "package": "shared",
      "docs": "https://vueuse.org/shared/isDefined/",
      "category": "Utilities",
      "description": "non-nullish checking type guard for Ref"
    },
    {
      "name": "makeDestructurable",
      "package": "shared",
      "docs": "https://vueuse.org/shared/makeDestructurable/",
      "category": "Utilities",
      "description": "make isomorphic destructurable for object and array at the same time"
    },
    {
      "name": "not",
      "package": "shared",
      "docs": "https://vueuse.org/shared/not/",
      "category": "Utilities",
      "description": "`NOT` condition for ref"
    },
    {
      "name": "or",
      "package": "shared",
      "docs": "https://vueuse.org/shared/or/",
      "category": "Utilities",
      "description": "`OR` conditions for refs"
    },
    {
      "name": "pausableWatch",
      "package": "shared",
      "docs": "https://vueuse.org/shared/pausableWatch/",
      "category": "Watch",
      "description": "pausable watch"
    },
    {
      "name": "reactify",
      "package": "shared",
      "docs": "https://vueuse.org/shared/reactify/",
      "category": "Utilities",
      "description": "converts plain functions into reactive functions"
    },
    {
      "name": "reactifyObject",
      "package": "shared",
      "docs": "https://vueuse.org/shared/reactifyObject/",
      "category": "Utilities",
      "description": "apply `reactify` to an object"
    },
    {
      "name": "reactivePick",
      "package": "shared",
      "docs": "https://vueuse.org/shared/reactivePick/",
      "category": "Utilities",
      "description": "reactively pick fields from a reactive object"
    },
    {
      "name": "refDefault",
      "package": "shared",
      "docs": "https://vueuse.org/shared/refDefault/",
      "category": "Utilities",
      "description": "apply default value to a ref"
    },
    {
      "name": "set",
      "package": "shared",
      "docs": "https://vueuse.org/shared/set/",
      "category": "Utilities",
      "description": "shorthand for `ref.value = x`"
    },
    {
      "name": "syncRef",
      "package": "shared",
      "docs": "https://vueuse.org/shared/syncRef/",
      "category": "Utilities",
      "description": "keep target refs in sync with a source ref"
    },
    {
      "name": "throttledRef",
      "package": "shared",
      "docs": "https://vueuse.org/shared/throttledRef/",
      "category": "Utilities",
      "description": "throttle updates of a ref"
    },
    {
      "name": "throttledWatch",
      "package": "shared",
      "docs": "https://vueuse.org/shared/throttledWatch/",
      "category": "Watch",
      "description": "throttled watch"
    },
    {
      "name": "toReactive",
      "package": "shared",
      "docs": "https://vueuse.org/shared/toReactive/",
      "category": "Utilities",
      "description": "converts ref to reactive"
    },
    {
      "name": "toRefs",
      "package": "shared",
      "docs": "https://vueuse.org/shared/toRefs/",
      "category": "Utilities",
      "description": "extended [`toRefs`](https://v3.vuejs.org/api/refs-api.html#torefs) that also accepts refs of an object"
    },
    {
      "name": "tryOnBeforeUnmount",
      "package": "shared",
      "docs": "https://vueuse.org/shared/tryOnBeforeUnmount/",
      "category": "Component",
      "description": "safe `onBeforeUnmount`"
    },
    {
      "name": "tryOnMounted",
      "package": "shared",
      "docs": "https://vueuse.org/shared/tryOnMounted/",
      "category": "Component",
      "description": "safe `onMounted`"
    },
    {
      "name": "tryOnScopeDispose",
      "package": "shared",
      "docs": "https://vueuse.org/shared/tryOnScopeDispose/",
      "category": "Component",
      "description": "safe `onScopeDispose`"
    },
    {
      "name": "tryOnUnmounted",
      "package": "shared",
      "docs": "https://vueuse.org/shared/tryOnUnmounted/",
      "category": "Component",
      "description": "safe `onUnmounted`"
    },
    {
      "name": "until",
      "package": "shared",
      "docs": "https://vueuse.org/shared/until/",
      "category": "Watch",
      "description": "promised one-time watch for changes"
    },
    {
      "name": "useCounter",
      "package": "shared",
      "docs": "https://vueuse.org/shared/useCounter/",
      "category": "Utilities",
      "description": "basic counter with utility functions"
    },
    {
      "name": "useDebounce",
      "package": "shared",
      "docs": "https://vueuse.org/shared/useDebounce/",
      "category": "Utilities",
      "description": "debounce execution of a ref value"
    },
    {
      "name": "useDebounceFn",
      "package": "shared",
      "docs": "https://vueuse.org/shared/useDebounceFn/",
      "category": "Utilities",
      "description": "debounce execution of a function"
    },
    {
      "name": "useInterval",
      "package": "shared",
      "docs": "https://vueuse.org/shared/useInterval/",
      "category": "Animation",
      "description": "reactive counter increases on every interval"
    },
    {
      "name": "useIntervalFn",
      "package": "shared",
      "docs": "https://vueuse.org/shared/useIntervalFn/",
      "category": "Animation",
      "description": "wrapper for `setInterval` with controls"
    },
    {
      "name": "useLastChanged",
      "package": "shared",
      "docs": "https://vueuse.org/shared/useLastChanged/",
      "category": "Utilities",
      "description": "records the timestamp of the last change"
    },
    {
      "name": "useThrottle",
      "package": "shared",
      "docs": "https://vueuse.org/shared/useThrottle/",
      "category": "Utilities",
      "description": "throttle changing of a ref value"
    },
    {
      "name": "useThrottleFn",
      "package": "shared",
      "docs": "https://vueuse.org/shared/useThrottleFn/",
      "category": "Utilities",
      "description": "throttle execution of a function"
    },
    {
      "name": "useTimeout",
      "package": "shared",
      "docs": "https://vueuse.org/shared/useTimeout/",
      "category": "Animation",
      "description": "update value after a given time with controls"
    },
    {
      "name": "useTimeoutFn",
      "package": "shared",
      "docs": "https://vueuse.org/shared/useTimeoutFn/",
      "category": "Animation",
      "description": "wrapper for `setTimeout` with controls"
    },
    {
      "name": "useToggle",
      "package": "shared",
      "docs": "https://vueuse.org/shared/useToggle/",
      "category": "Utilities",
      "description": "a boolean switcher with utility functions"
    },
    {
      "name": "utils",
      "package": "shared",
      "internal": true
    },
    {
      "name": "watchAtMost",
      "package": "shared",
      "docs": "https://vueuse.org/shared/watchAtMost/",
      "category": "Watch",
      "description": "`watch` with the number of times triggered"
    },
    {
      "name": "watchOnce",
      "package": "shared",
      "docs": "https://vueuse.org/shared/watchOnce/",
      "category": "Watch",
      "description": "`watch` that only triggers once"
    },
    {
      "name": "watchWithFilter",
      "package": "shared",
      "docs": "https://vueuse.org/shared/watchWithFilter/",
      "category": "Watch",
      "description": "`watch` with additional EventFilter control"
    },
    {
      "name": "whenever",
      "package": "shared",
      "docs": "https://vueuse.org/shared/whenever/",
      "category": "Watch",
      "description": "shorthand for watching value to be truthy"
    },
    {
      "name": "asyncComputed",
      "package": "core",
      "docs": "https://vueuse.org/core/asyncComputed/",
      "category": "Utilities",
      "description": "computed for async functions"
    },
    {
      "name": "autoResetRef",
      "package": "core",
      "docs": "https://vueuse.org/core/autoResetRef/",
      "category": "Utilities",
      "description": "a ref which will be reset to the default value after some time"
    },
    {
      "name": "computedInject",
      "package": "core",
      "docs": "https://vueuse.org/core/computedInject/",
      "category": "Component",
      "description": "combine computed and inject"
    },
    {
      "name": "createUnrefFn",
      "package": "core",
      "docs": "https://vueuse.org/core/createUnrefFn/",
      "category": "Utilities",
      "description": "make a plain function accepting ref and raw values as arguments"
    },
    {
      "name": "onClickOutside",
      "package": "core",
      "component": true,
      "directive": true,
      "docs": "https://vueuse.org/core/onClickOutside/",
      "category": "Sensors",
      "description": "listen for clicks outside of an element"
    },
    {
      "name": "onKeyStroke",
      "package": "core",
      "docs": "https://vueuse.org/core/onKeyStroke/",
      "category": "Sensors",
      "description": "listen for keyboard key being stroked"
    },
    {
      "name": "onStartTyping",
      "package": "core",
      "docs": "https://vueuse.org/core/onStartTyping/",
      "category": "Sensors",
      "description": "fires when users start typing on non-editable elements"
    },
    {
      "name": "templateRef",
      "package": "core",
      "docs": "https://vueuse.org/core/templateRef/",
      "category": "Component",
      "description": "shorthand for binding ref to template element"
    },
    {
      "name": "unrefElement",
      "package": "core",
      "docs": "https://vueuse.org/core/unrefElement/",
      "category": "Component",
      "description": "unref for dom element"
    },
    {
      "name": "useActiveElement",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useActiveElement/",
      "category": "Browser",
      "description": "reactive `document.activeElement`"
    },
    {
      "name": "useAsyncQueue",
      "package": "core",
      "docs": "https://vueuse.org/core/useAsyncQueue/",
      "category": "Utilities",
      "description": "executes each asynchronous task sequentially and passed the current task result to the next task"
    },
    {
      "name": "useAsyncState",
      "package": "core",
      "docs": "https://vueuse.org/core/useAsyncState/",
      "category": "Utilities",
      "description": "reactive async state"
    },
    {
      "name": "useBase64",
      "package": "core",
      "docs": "https://vueuse.org/core/useBase64/",
      "category": "Utilities",
      "description": "reactive base64 transforming"
    },
    {
      "name": "useBattery",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useBattery/",
      "category": "Sensors",
      "description": "reactive [Battery Status API](https://developer.mozilla.org/en-US/docs/Web/API/Battery_Status_API)"
    },
    {
      "name": "useBreakpoints",
      "package": "core",
      "docs": "https://vueuse.org/core/useBreakpoints/",
      "category": "Browser",
      "description": "reactive viewport breakpoints"
    },
    {
      "name": "useBrowserLocation",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useBrowserLocation/",
      "category": "Browser",
      "description": "reactive browser location"
    },
    {
      "name": "useClamp",
      "package": "core",
      "docs": "https://vueuse.org/core/useClamp/",
      "category": "Utilities",
      "description": "reactively clamp a value between two other values"
    },
    {
      "name": "useClipboard",
      "package": "core",
      "docs": "https://vueuse.org/core/useClipboard/",
      "category": "Browser",
      "description": "reactive [Clipboard API](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API)"
    },
    {
      "name": "useColorMode",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useColorMode/",
      "category": "Browser",
      "description": "reactive color mode (dark / light / customs) with auto data persistence"
    },
    {
      "name": "useConfirmDialog",
      "package": "core",
      "docs": "https://vueuse.org/core/useConfirmDialog/",
      "category": "Utilities",
      "description": "creates event hooks to support modals and confirmation dialog chains"
    },
    {
      "name": "useCssVar",
      "package": "core",
      "docs": "https://vueuse.org/core/useCssVar/",
      "category": "Browser",
      "description": "manipulate CSS variables"
    },
    {
      "name": "useCycleList",
      "package": "core",
      "docs": "https://vueuse.org/core/useCycleList/",
      "category": "Utilities",
      "description": "cycle through a list of items"
    },
    {
      "name": "useDark",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useDark/",
      "category": "Browser",
      "description": "reactive dark mode with auto data persistence"
    },
    {
      "name": "useDebouncedRefHistory",
      "package": "core",
      "docs": "https://vueuse.org/core/useDebouncedRefHistory/",
      "category": "Utilities",
      "description": "shorthand for `useRefHistory` with debounced filter"
    },
    {
      "name": "useDeviceMotion",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useDeviceMotion/",
      "category": "Sensors",
      "description": "reactive [DeviceMotionEvent](https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent)"
    },
    {
      "name": "useDeviceOrientation",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useDeviceOrientation/",
      "category": "Sensors",
      "description": "reactive [DeviceOrientationEvent](https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent)"
    },
    {
      "name": "useDevicePixelRatio",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useDevicePixelRatio/",
      "category": "Sensors",
      "description": "reactively track [`window.devicePixelRatio`](https://developer.mozilla.org/ru/docs/Web/API/Window/devicePixelRatio)"
    },
    {
      "name": "useDevicesList",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useDevicesList/",
      "category": "Sensors",
      "description": "reactive [enumerateDevices](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/enumerateDevices) listing avaliable input/output devices"
    },
    {
      "name": "useDisplayMedia",
      "package": "core",
      "docs": "https://vueuse.org/core/useDisplayMedia/",
      "category": "Sensors",
      "description": "reactive [`mediaDevices.getDisplayMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia) streaming"
    },
    {
      "name": "useDocumentVisibility",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useDocumentVisibility/",
      "category": "Sensors",
      "description": "reactively track [`document.visibilityState`](https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState)"
    },
    {
      "name": "useDraggable",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useDraggable/",
      "category": "Sensors",
      "description": "make elements draggable"
    },
    {
      "name": "useElementBounding",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useElementBounding/",
      "category": "Sensors",
      "description": "reactive [bounding box](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect) of an HTML element"
    },
    {
      "name": "useElementByPoint",
      "package": "core",
      "docs": "https://vueuse.org/core/useElementByPoint/",
      "category": "Sensors",
      "description": "reactive element by point"
    },
    {
      "name": "useElementHover",
      "package": "core",
      "docs": "https://vueuse.org/core/useElementHover/",
      "category": "Sensors",
      "description": "reactive element's hover state"
    },
    {
      "name": "useElementSize",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useElementSize/",
      "category": "Sensors",
      "description": "reactive size of an HTML element"
    },
    {
      "name": "useElementVisibility",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useElementVisibility/",
      "category": "Sensors",
      "description": "tracks the visibility of an element within the viewport"
    },
    {
      "name": "useEventBus",
      "package": "core",
      "docs": "https://vueuse.org/core/useEventBus/",
      "category": "Utilities",
      "description": "a basic event bus"
    },
    {
      "name": "useEventListener",
      "package": "core",
      "docs": "https://vueuse.org/core/useEventListener/",
      "category": "Browser",
      "description": "use EventListener with ease"
    },
    {
      "name": "useEventSource",
      "package": "core",
      "docs": "https://vueuse.org/core/useEventSource/",
      "category": "Misc",
      "description": "an [EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) or [Server-Sent-Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) instance opens a persistent connection to an HTTP server"
    },
    {
      "name": "useEyeDropper",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useEyeDropper/",
      "category": "Browser",
      "description": "reactive [EyeDropper API](https://developer.mozilla.org/en-US/docs/Web/API/EyeDropper_API)"
    },
    {
      "name": "useFavicon",
      "package": "core",
      "docs": "https://vueuse.org/core/useFavicon/",
      "category": "Browser",
      "description": "reactive favicon"
    },
    {
      "name": "useFetch",
      "package": "core",
      "docs": "https://vueuse.org/core/useFetch/",
      "category": "Browser",
      "description": "reactive [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) provides the ability to abort requests"
    },
    {
      "name": "useFocus",
      "package": "core",
      "docs": "https://vueuse.org/core/useFocus/",
      "category": "Sensors",
      "description": "reactive utility to track or set the focus state of a DOM element"
    },
    {
      "name": "useFocusWithin",
      "package": "core",
      "docs": "https://vueuse.org/core/useFocusWithin/",
      "category": "Sensors",
      "description": "reactive utility to track if an element or one of its decendants has focus"
    },
    {
      "name": "useFps",
      "package": "core",
      "docs": "https://vueuse.org/core/useFps/",
      "category": "Sensors",
      "description": "reactive FPS (frames per second)"
    },
    {
      "name": "useFullscreen",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useFullscreen/",
      "category": "Browser",
      "description": "reactive [Fullscreen API](https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API)"
    },
    {
      "name": "useGeolocation",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useGeolocation/",
      "category": "Sensors",
      "description": "reactive [Geolocation API](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API)"
    },
    {
      "name": "useIdle",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useIdle/",
      "category": "Sensors",
      "description": "tracks whether the user is being inactive"
    },
    {
      "name": "useIntersectionObserver",
      "package": "core",
      "docs": "https://vueuse.org/core/useIntersectionObserver/",
      "category": "Sensors",
      "description": "detects that a target element's visibility"
    },
    {
      "name": "useKeyModifier",
      "package": "core",
      "docs": "https://vueuse.org/core/useKeyModifier/",
      "category": "Sensors",
      "description": "reactive [Modifier State](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/getModifierState)"
    },
    {
      "name": "useLocalStorage",
      "package": "core",
      "docs": "https://vueuse.org/core/useLocalStorage/",
      "category": "State",
      "description": "reactive [LocalStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)"
    },
    {
      "name": "useMagicKeys",
      "package": "core",
      "docs": "https://vueuse.org/core/useMagicKeys/",
      "category": "Sensors",
      "description": "reactive keys pressed state"
    },
    {
      "name": "useManualRefHistory",
      "package": "core",
      "docs": "https://vueuse.org/core/useManualRefHistory/",
      "category": "Utilities",
      "description": "manually track the change history of a ref when the using calls `commit()`"
    },
    {
      "name": "useMediaControls",
      "package": "core",
      "docs": "https://vueuse.org/core/useMediaControls/",
      "category": "Browser",
      "description": "reactive media controls for both `audio` and `video` elements"
    },
    {
      "name": "useMediaQuery",
      "package": "core",
      "docs": "https://vueuse.org/core/useMediaQuery/",
      "category": "Browser",
      "description": "reactive [Media Query](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Testing_media_queries)"
    },
    {
      "name": "useMemory",
      "package": "core",
      "docs": "https://vueuse.org/core/useMemory/",
      "category": "Browser",
      "description": "reactive Memory Info"
    },
    {
      "name": "useMounted",
      "package": "core",
      "docs": "https://vueuse.org/core/useMounted/",
      "category": "Component",
      "description": "mounted state in ref"
    },
    {
      "name": "useMouse",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useMouse/",
      "category": "Sensors",
      "description": "reactive mouse position"
    },
    {
      "name": "useMouseInElement",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useMouseInElement/",
      "category": "Sensors",
      "description": "reactive mouse position related to an element"
    },
    {
      "name": "useMousePressed",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useMousePressed/",
      "category": "Sensors",
      "description": "reactive mouse pressing state"
    },
    {
      "name": "useMutationObserver",
      "package": "core",
      "docs": "https://vueuse.org/core/useMutationObserver/",
      "category": "Sensors",
      "description": "watch for changes being made to the DOM tree"
    },
    {
      "name": "useNavigatorLanguage",
      "package": "core",
      "docs": "https://vueuse.org/core/useNavigatorLanguage/",
      "category": "Sensors",
      "description": "watch for changes being made to the navigator language preference by the user"
    },
    {
      "name": "useNetwork",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useNetwork/",
      "category": "Sensors",
      "description": "reactive [Network status](https://developer.mozilla.org/en-US/docs/Web/API/Network_Information_API)"
    },
    {
      "name": "useNow",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useNow/",
      "category": "Animation",
      "description": "reactive current Date instance"
    },
    {
      "name": "useOnline",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useOnline/",
      "category": "Sensors",
      "description": "reactive online state"
    },
    {
      "name": "usePageLeave",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/usePageLeave/",
      "category": "Sensors",
      "description": "reactive state to show whether the mouse leaves the page"
    },
    {
      "name": "useParallax",
      "package": "core",
      "docs": "https://vueuse.org/core/useParallax/",
      "category": "Sensors",
      "description": "create parallax effect easily"
    },
    {
      "name": "usePermission",
      "package": "core",
      "docs": "https://vueuse.org/core/usePermission/",
      "category": "Browser",
      "description": "reactive [Permissions API](https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API)"
    },
    {
      "name": "usePointer",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/usePointer/",
      "category": "Sensors",
      "description": "reactive [pointer state](https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events)"
    },
    {
      "name": "usePointerSwipe",
      "package": "core",
      "docs": "https://vueuse.org/core/usePointerSwipe/",
      "category": "Sensors",
      "description": "reactive swipe detection based on [PointerEvents](https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent)"
    },
    {
      "name": "usePreferredColorScheme",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/usePreferredColorScheme/",
      "category": "Browser",
      "description": "reactive [prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme) media query"
    },
    {
      "name": "usePreferredDark",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/usePreferredDark/",
      "category": "Browser",
      "description": "reactive dark theme preference"
    },
    {
      "name": "usePreferredLanguages",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/usePreferredLanguages/",
      "category": "Browser",
      "description": "reactive [Navigator Languages](https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/languages)"
    },
    {
      "name": "useRafFn",
      "package": "core",
      "docs": "https://vueuse.org/core/useRafFn/",
      "category": "Animation",
      "description": "call function on every `requestAnimationFrame`"
    },
    {
      "name": "useRefHistory",
      "package": "core",
      "docs": "https://vueuse.org/core/useRefHistory/",
      "category": "Utilities",
      "description": "track the change history of a ref"
    },
    {
      "name": "useResizeObserver",
      "package": "core",
      "docs": "https://vueuse.org/core/useResizeObserver/",
      "category": "Sensors",
      "description": "reports changes to the dimensions of an Element's content or the border-box"
    },
    {
      "name": "useScreenSafeArea",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useScreenSafeArea/",
      "category": "Browser",
      "description": "reactive `env(safe-area-inset-*)`"
    },
    {
      "name": "useScriptTag",
      "package": "core",
      "docs": "https://vueuse.org/core/useScriptTag/",
      "category": "Browser",
      "description": "script tag injecting"
    },
    {
      "name": "useScroll",
      "package": "core",
      "docs": "https://vueuse.org/core/useScroll/",
      "category": "Sensors",
      "description": "reactive scroll position and state"
    },
    {
      "name": "useScrollLock",
      "package": "core",
      "docs": "https://vueuse.org/core/useScrollLock/",
      "category": "Sensors",
      "description": "lock scrolling of the element"
    },
    {
      "name": "useSessionStorage",
      "package": "core",
      "docs": "https://vueuse.org/core/useSessionStorage/",
      "category": "State",
      "description": "reactive [SessionStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage)"
    },
    {
      "name": "useShare",
      "package": "core",
      "docs": "https://vueuse.org/core/useShare/",
      "category": "Browser",
      "description": "reactive [Web Share API](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/share)"
    },
    {
      "name": "useSpeechRecognition",
      "package": "core",
      "docs": "https://vueuse.org/core/useSpeechRecognition/",
      "category": "Sensors",
      "description": "reactive [SpeechRecognition](https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition)"
    },
    {
      "name": "useSpeechSynthesis",
      "package": "core",
      "docs": "https://vueuse.org/core/useSpeechSynthesis/",
      "category": "Sensors",
      "description": "reactive [SpeechSynthesis](https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis)"
    },
    {
      "name": "useStorage",
      "package": "core",
      "docs": "https://vueuse.org/core/useStorage/",
      "category": "State",
      "description": "reactive [LocalStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)/[SessionStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage)"
    },
    {
      "name": "useStorageAsync",
      "package": "core",
      "docs": "https://vueuse.org/core/useStorageAsync/",
      "category": "State",
      "description": "reactive Storage in with async support"
    },
    {
      "name": "useSwipe",
      "package": "core",
      "docs": "https://vueuse.org/core/useSwipe/",
      "category": "Sensors",
      "description": "reactive swipe detection based on [`TouchEvents`](https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent)"
    },
    {
      "name": "useTemplateRefsList",
      "package": "core",
      "docs": "https://vueuse.org/core/useTemplateRefsList/",
      "category": "Component",
      "description": "shorthand for binding refs to template elements and components inside `v-for`"
    },
    {
      "name": "useTextSelection",
      "package": "core",
      "docs": "https://vueuse.org/core/useTextSelection/",
      "category": "Sensors",
      "description": "reactively track user text selection based on [`Window.getSelection`](https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection)"
    },
    {
      "name": "useThrottledRefHistory",
      "package": "core",
      "docs": "https://vueuse.org/core/useThrottledRefHistory/",
      "category": "Utilities",
      "description": "shorthand for `useRefHistory` with throttled filter"
    },
    {
      "name": "useTimeAgo",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useTimeAgo/",
      "category": "Formatters",
      "description": "reactive time ago"
    },
    {
      "name": "useTimestamp",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useTimestamp/",
      "category": "Animation",
      "description": "reactive current timestamp"
    },
    {
      "name": "useTitle",
      "package": "core",
      "docs": "https://vueuse.org/core/useTitle/",
      "category": "Browser",
      "description": "reactive document title"
    },
    {
      "name": "useTransition",
      "package": "core",
      "docs": "https://vueuse.org/core/useTransition/",
      "category": "Animation",
      "description": "transition between values"
    },
    {
      "name": "useUrlSearchParams",
      "package": "core",
      "docs": "https://vueuse.org/core/useUrlSearchParams/",
      "category": "Browser",
      "description": "reactive [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams)"
    },
    {
      "name": "useUserMedia",
      "package": "core",
      "docs": "https://vueuse.org/core/useUserMedia/",
      "category": "Sensors",
      "description": "reactive [`mediaDevices.getUserMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia) streaming"
    },
    {
      "name": "useVModel",
      "package": "core",
      "docs": "https://vueuse.org/core/useVModel/",
      "category": "Component",
      "description": "shorthand for v-model binding"
    },
    {
      "name": "useVModels",
      "package": "core",
      "docs": "https://vueuse.org/core/useVModels/",
      "category": "Component",
      "description": "shorthand for props v-model binding"
    },
    {
      "name": "useVirtualList",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useVirtualList/",
      "category": "Component",
      "description": "create virtual lists with ease"
    },
    {
      "name": "useWakeLock",
      "package": "core",
      "docs": "https://vueuse.org/core/useWakeLock/",
      "category": "Browser",
      "description": "reactive [Screen Wake Lock API](https://developer.mozilla.org/en-US/docs/Web/API/Screen_Wake_Lock_API) provides a way to prevent devices from dimming or locking the screen when an application needs to keep running"
    },
    {
      "name": "useWebSocket",
      "package": "core",
      "docs": "https://vueuse.org/core/useWebSocket/",
      "category": "Misc",
      "description": "reactive [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/WebSocket) client"
    },
    {
      "name": "useWebWorker",
      "package": "core",
      "docs": "https://vueuse.org/core/useWebWorker/",
      "category": "Misc",
      "description": "simple [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers) registration and communication"
    },
    {
      "name": "useWebWorkerFn",
      "package": "core",
      "docs": "https://vueuse.org/core/useWebWorkerFn/",
      "category": "Misc",
      "description": "run expensive function without blocking the UI"
    },
    {
      "name": "useWindowFocus",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useWindowFocus/",
      "category": "Sensors",
      "description": "reactively track window focus with `window.onfocus` and `window.onblur` events"
    },
    {
      "name": "useWindowScroll",
      "package": "core",
      "docs": "https://vueuse.org/core/useWindowScroll/",
      "category": "Sensors",
      "description": "reactive window scroll"
    },
    {
      "name": "useWindowSize",
      "package": "core",
      "component": true,
      "docs": "https://vueuse.org/core/useWindowSize/",
      "category": "Sensors",
      "description": "reactive window size"
    },
    {
      "name": "useRouteHash",
      "package": "router",
      "docs": "https://vueuse.org/router/useRouteHash/",
      "category": "@Router",
      "description": "shorthand for reactive route.hash"
    },
    {
      "name": "useRouteQuery",
      "package": "router",
      "docs": "https://vueuse.org/router/useRouteQuery/",
      "category": "@Router",
      "description": "shorthand for reactive route.query"
    },
    {
      "name": "useAxios",
      "package": "integrations",
      "docs": "https://vueuse.org/integrations/useAxios/",
      "category": "@Integrations",
      "description": "wrapper for [`axios`](https://github.com/axios/axios)"
    },
    {
      "name": "useCookies",
      "package": "integrations",
      "docs": "https://vueuse.org/integrations/useCookies/",
      "category": "@Integrations",
      "description": "wrapper for [`universal-cookie`](https://www.npmjs.com/package/universal-cookie)"
    },
    {
      "name": "useDrauu",
      "package": "integrations",
      "docs": "https://vueuse.org/integrations/useDrauu/",
      "category": "@Integrations",
      "description": "reactive instance for [drauu](https://github.com/antfu/drauu)"
    },
    {
      "name": "useFocusTrap",
      "package": "integrations",
      "component": true,
      "docs": "https://vueuse.org/integrations/useFocusTrap/",
      "category": "@Integrations",
      "description": "reactive wrapper for [`focus-trap`](https://github.com/focus-trap/focus-trap)"
    },
    {
      "name": "useFuse",
      "package": "integrations",
      "docs": "https://vueuse.org/integrations/useFuse/",
      "category": "@Integrations",
      "description": "easily implement fuzzy search using a composable on top of the zero-dependency library [Fuse.js](https://github.com/krisk/fuse)"
    },
    {
      "name": "useJwt",
      "package": "integrations",
      "docs": "https://vueuse.org/integrations/useJwt/",
      "category": "@Integrations",
      "description": "wrapper for [`jwt-decode`](https://github.com/auth0/jwt-decode)"
    },
    {
      "name": "useNProgress",
      "package": "integrations",
      "docs": "https://vueuse.org/integrations/useNProgress/",
      "category": "@Integrations",
      "description": "reactive wrapper for [`nprogress`](https://github.com/rstacruz/nprogress)"
    },
    {
      "name": "useQRCode",
      "package": "integrations",
      "docs": "https://vueuse.org/integrations/useQRCode/",
      "category": "@Integrations",
      "description": "wrapper for [`qrcode`](https://github.com/soldair/node-qrcode)"
    },
    {
      "name": "from",
      "package": "rxjs",
      "docs": "https://vueuse.org/rxjs/from/",
      "category": "@RxJS",
      "description": "/ fromEvent"
    },
    {
      "name": "toObserver",
      "package": "rxjs",
      "docs": "https://vueuse.org/rxjs/toObserver/",
      "category": "@RxJS",
      "description": "sugar function to convert a ref in an observer"
    },
    {
      "name": "useObservable",
      "package": "rxjs",
      "docs": "https://vueuse.org/rxjs/useObservable/",
      "category": "@RxJS",
      "description": "use an Observable"
    },
    {
      "name": "useSubject",
      "package": "rxjs",
      "docs": "https://vueuse.org/rxjs/useSubject/",
      "category": "@RxJS",
      "description": "bind Subject to ref and propagate value changes both ways"
    },
    {
      "name": "useSubscription",
      "package": "rxjs",
      "docs": "https://vueuse.org/rxjs/useSubscription/",
      "category": "@RxJS",
      "description": "uses subscriptions without worry about unsubscribing to it or memory leaks"
    },
    {
      "name": "useAuth",
      "package": "firebase",
      "docs": "https://vueuse.org/firebase/useAuth/",
      "category": "@Firebase",
      "description": "reactive [Firebase Auth](https://firebase.google.com/docs/auth) binding"
    },
    {
      "name": "useFirestore",
      "package": "firebase",
      "docs": "https://vueuse.org/firebase/useFirestore/",
      "category": "@Firebase",
      "description": "reactive [Firestore](https://firebase.google.com/docs/firestore) binding"
    },
    {
      "name": "useRTDB",
      "package": "firebase",
      "docs": "https://vueuse.org/firebase/useRTDB/",
      "category": "@Firebase",
      "description": "reactive [Firebase Realtime Database](https://firebase.google.com/docs/database) binding"
    },
    {
      "name": "useIpcRenderer",
      "package": "electron",
      "docs": "https://vueuse.org/electron/useIpcRenderer/",
      "category": "@Electron",
      "description": "provides [ipcRenderer](https://www.electronjs.org/docs/api/ipc-renderer) and it's all APIs"
    },
    {
      "name": "useIpcRendererInvoke",
      "package": "electron",
      "docs": "https://vueuse.org/electron/useIpcRendererInvoke/",
      "category": "@Electron",
      "description": "reactive [ipcRenderer.invoke API](https://www.electronjs.org/docs/api/ipc-renderer#ipcrendererinvokechannel-args) result"
    },
    {
      "name": "useIpcRendererOn",
      "package": "electron",
      "docs": "https://vueuse.org/electron/useIpcRendererOn/",
      "category": "@Electron",
      "description": "use [ipcRenderer.on](https://www.electronjs.org/docs/api/ipc-renderer#ipcrendereronchannel-listener) with ease and [ipcRenderer.removeListener](https://www.electronjs.org/docs/api/ipc-renderer#ipcrendererremovelistenerchannel-listener) automatically on unmounted"
    },
    {
      "name": "useZoomFactor",
      "package": "electron",
      "docs": "https://vueuse.org/electron/useZoomFactor/",
      "category": "@Electron",
      "description": "reactive [WebFrame](https://www.electronjs.org/docs/api/web-frame#webframe) zoom factor"
    },
    {
      "name": "useZoomLevel",
      "package": "electron",
      "docs": "https://vueuse.org/electron/useZoomLevel/",
      "category": "@Electron",
      "description": "reactive [WebFrame](https://www.electronjs.org/docs/api/web-frame#webframe) zoom level"
    }
  ]
}
