code:
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

case `uname` in
    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac

if [ -x "$basedir/node" ]; then
  exec "$basedir/node"  "$basedir/../vue-demi/bin/vue-demi-fix.js" "$@"
else
  exec node  "$basedir/../vue-demi/bin/vue-demi-fix.js" "$@"
fi


code:
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0

IF EXIST "%dp0%\node.exe" (
  SET "_prog=%dp0%\node.exe"
) ELSE (
  SET "_prog=node"
  SET PATHEXT=%PATHEXT:;.JS;=;%
)

endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\vue-demi\bin\vue-demi-fix.js" %*

license: mit


code:
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent

$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
  # Fix case when both the Windows and Linux builds of Node
  # are installed in the same directory
  $exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
  # Support pipeline input
  if ($MyInvocation.ExpectingInput) {
    $input | & "$basedir/node$exe"  "$basedir/../vue-demi/bin/vue-demi-fix.js" $args
  } else {
    & "$basedir/node$exe"  "$basedir/../vue-demi/bin/vue-demi-fix.js" $args
  }
  $ret=$LASTEXITCODE
} else {
  # Support pipeline input
  if ($MyInvocation.ExpectingInput) {
    $input | & "node$exe"  "$basedir/../vue-demi/bin/vue-demi-fix.js" $args
  } else {
    & "node$exe"  "$basedir/../vue-demi/bin/vue-demi-fix.js" $args
  }
  $ret=$LASTEXITCODE
}
exit $ret


code:
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

case `uname` in
    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac

if [ -x "$basedir/node" ]; then
  exec "$basedir/node"  "$basedir/../vue-demi/bin/vue-demi-switch.js" "$@"
else
  exec node  "$basedir/../vue-demi/bin/vue-demi-switch.js" "$@"
fi


code:
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0

IF EXIST "%dp0%\node.exe" (
  SET "_prog=%dp0%\node.exe"
) ELSE (
  SET "_prog=node"
  SET PATHEXT=%PATHEXT:;.JS;=;%
)

endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\vue-demi\bin\vue-demi-switch.js" %*


code:
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent

$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
  # Fix case when both the Windows and Linux builds of Node
  # are installed in the same directory
  $exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
  # Support pipeline input
  if ($MyInvocation.ExpectingInput) {
    $input | & "$basedir/node$exe"  "$basedir/../vue-demi/bin/vue-demi-switch.js" $args
  } else {
    & "$basedir/node$exe"  "$basedir/../vue-demi/bin/vue-demi-switch.js" $args
  }
  $ret=$LASTEXITCODE
} else {
  # Support pipeline input
  if ($MyInvocation.ExpectingInput) {
    $input | & "node$exe"  "$basedir/../vue-demi/bin/vue-demi-switch.js" $args
  } else {
    & "node$exe"  "$basedir/../vue-demi/bin/vue-demi-switch.js" $args
  }
  $ret=$LASTEXITCODE
}
exit $ret


code:
Vue Demi (half in French) is a developing utility
 allows you to write Universal Vue Libraries for Vue 2 & 3

See more details in this blog post

## Strategies

- `<=2.6`: exports from `vue` + `@vue/composition-api` with plugin auto installing.
- `2.7`: exports from `vue` (Composition API is built-in in Vue 2.7).
- `>=3.0`: exports from `vue`, with polyfill of Vue 2's `set` and `del` API.

## Usage

Install this as your plugin's dependency:

```bash
npm i vue-demi
# or
yarn add vue-demi
# or
pnpm i vue-demi
```

Add `vue` and `@vue/composition-api` to your plugin's peer dependencies to specify what versions you support.

```jsonc
{
  "dependencies": {
    "vue-demi": "latest"
  },
  "peerDependencies": {
    "@vue/composition-api": "^1.0.0-rc.1",
    "vue": "^2.0.0 || >=3.0.0"
  },
  "peerDependenciesMeta": {
    "@vue/composition-api": {
      "optional": true
    }
  },
  "devDependencies": {
    "vue": "^3.0.0" // or "^2.6.0" base on your preferred working environment
  },
}
```

Import everything related to Vue from it, it will redirect to `vue@2` + `@vue/composition-api` or `vue@3` based on users' environments.

```ts
import { ref, reactive, defineComponent } from 'vue-demi'
```

Publish your plugin and all is done!

> When using with [Vite](https://vitejs.dev), you will need to opt-out the pre-bundling to get `vue-demi` work properly by
> ```js
> // vite.config.js
> export default defineConfig({
>   optimizeDeps: {
>     exclude: ['vue-demi']
>  }
> })
> ```

### Extra APIs

`Vue Demi` provides extra APIs to help distinguish users' environments and to do some version-specific logic.

### `isVue2` `isVue3`

```ts
import { isVue2, isVue3 } from 'vue-demi'

if (isVue2) {
  // Vue 2 only
} else {
  // Vue 3 only
}
```

### `Vue2`

To avoid bringing in all the tree-shakable modules, we provide a `Vue2` export to support access to Vue 2's global API. (See [#41](https://github.com/vueuse/vue-demi/issues/41).)

```ts
import { Vue2 } from 'vue-demi'

if (Vue2) {
  Vue2.config.ignoredElements.push('x-foo')
}
```

### `install()`

Composition API in Vue 2 is provided as a plugin and needs to be installed on the Vue instance before using. Normally, `vue-demi` will try to install it automatically. For some usages where you might need to ensure the plugin gets installed correctly, the `install()` API is exposed to as a safe version of `Vue.use(CompositionAPI)`. `install()` in the Vue 3 environment will be an empty function (no-op).

```ts
import { install } from 'vue-demi'

install()
```

## CLI

### Manually Switch Versions

To explicitly switch the redirecting version, you can use these commands in your project's root.

```bash
npx vue-demi-switch 2
# or
npx vue-demi-switch 3
```

### Package Aliasing

If you would like to import `vue` under an alias, you can use the following command

```bash
npx vue-demi-switch 2 vue2
# or
npx vue-demi-switch 3 vue3
```

Then `vue-demi` will redirect APIs from the alias name you specified, for example:

```ts
import * as Vue from 'vue3'

var isVue2 = false
var isVue3 = true
var Vue2 = undefined

export * from 'vue3'
export {
  Vue,
  Vue2,
  isVue2,
  isVue3,
}
```

### Auto Fix

If the `postinstall` hook doesn't get triggered or you have updated the Vue version, try to run the following command to resolve the redirecting.

```bash
npx vue-demi-fix
```

### Isomorphic Testings

You can support testing for both versions by adding npm alias in your dev dependencies. For example:

```json
{
  "scripts": {
    "test:2": "vue-demi-switch 2 vue2 && jest",
    "test:3": "vue-demi-switch 3 && jest",
  },
  "devDependencies": {
    "vue": "^3.0.0",
    "vue2": "npm:vue@2"
  },
}
```

or

```json
{
  "scripts": {
    "test:2": "vue-demi-switch 2 && jest",
    "test:3": "vue-demi-switch 3 vue3 && jest",
  },
  "devDependencies": {
    "vue": "^2.6.0",
    "vue3": "npm:vue@3"
  },
}
```

## Examples

See [examples](./examples).

## Who is using this?

- [VueUse](https://github.com/vueuse/vueuse) - Collection of Composition API utils
- [@vue/apollo-composable](https://github.com/vuejs/vue-apollo/tree/v4/packages/vue-apollo-composable) - Apollo GraphQL functions for Vue Composition API
- [vuelidate](https://github.com/vuelidate/vuelidate) - Simple, lightweight model-based validation
- [vue-composition-test-utils](https://github.com/ariesjia/vue-composition-test-utils) - Simple vue composition api unit test utilities
- [vue-use-stripe](https://github.com/frandiox/vue-use-stripe) - Stripe Elements wrapper for Vue.js
- [@opd/g2plot-vue](https://github.com/open-data-plan/g2plot-vue) - G2plot for vue
- [vue-echarts](https://github.com/ecomfe/vue-echarts) - Vue.js component for Apache ECharts.
- [fluent-vue](https://github.com/Demivan/fluent-vue) - Vue.js integration for [Fluent.js](https://github.com/projectfluent/fluent.js) - JavaScript implementation of [Project Fluent](https://projectfluent.org)
- [vue-datatable-url-sync](https://github.com/socotecio/vue-datatable-url-sync) - Synchronize datatable options and filters with the url to keep user preference even after refresh or navigation
- [vue-insta-stories](https://github.com/UnevenSoftware/vue-insta-stories) - Instagram stories in your vue projects.
- [vue-tiny-validate](https://github.com/FrontLabsOfficial/vue-tiny-validate) - Tiny Vue Validate Composition
- [v-perfect-signature](https://github.com/wobsoriano/v-perfect-signature) - Pressure-sensitive signature drawing for Vue 2 and 3
- [vue-winbox](https://github.com/wobsoriano/vue-winbox) - A wrapper component for WinBox.js that adds the ability to mount Vue components.
- [vue-word-highlighter](https://github.com/kawamataryo/vue-word-highlighter) - The word highlighter library for Vue 2 and Vue 3
- [vue-chart-3](https://github.com/victorgarciaesgi/vue-chart-3) - Vue.js component for Chart.js
- [json-editor-vue](https://github.com/cloydlau/json-editor-vue) - JSON editor & viewer for Vue 2 and 3.
- [kidar-echarts](https://github.com/kidarjs/kidar-echarts) - A simpler echarts component for Vue 2 and 3.
- [vue3-sketch-ruler](https://github.com/kakajun/vue3-sketch-ruler) - The zoom operation used for page presentation for Vue 2 and 3( Replace render function with template )
- [vue-rough-notation](https://github.com/Leecason/vue-rough-notation) - RoughNotation wrapper component for Vue 2 and 3.
- [vue-request](https://github.com/AttoJS/vue-request) - Vue composition API for data fetching, supports SWR, polling, error retry, cache request, pagination, etc.
- [vue3-lazyload](https://github.com/murongg/vue3-lazyload) - A vue3.x image lazyload plugin.
- [vue-codemirror6](https://github.com/logue/vue-codemirror6) - CodeMirror6 component for Vue2 and 3.
- [@tanstack/vue-query](https://github.com/TanStack/query) - TanStack Query for Vue.
> open a PR to add your library ;)

## Underhood

See [the blog post](https://antfu.me/posts/make-libraries-working-with-vue-2-and-3/#-introducing-vue-demi).

## License

MIT License © 2020 [Anthony Fu](https://github.com/antfu)


code:
#!/usr/bin/env node
'use strict'
require('../scripts/postinstall')


code:
#!/usr/bin/env node
'use strict'
require('../scripts/switch-cli')


code:
var Vue = require('vue')

Object.keys(Vue).forEach(function(key) {
  exports[key] = Vue[key]
})

exports.set = function(target, key, val) {
  if (Array.isArray(target)) {
    target.length = Math.max(target.length, key)
    target.splice(key, 1, val)
    return val
  }
  target[key] = val
  return val
}

exports.del = function(target, key) {
  if (Array.isArray(target)) {
    target.splice(key, 1)
    return
  }
  delete target[key]
}

exports.Vue = Vue
exports.Vue2 = undefined
exports.isVue2 = false
exports.isVue3 = true
exports.install = function(){}


code:
import * as Vue from 'vue'
declare const isVue2: boolean
declare const isVue3: boolean
declare const Vue2: any
declare const install: (vue?: any) => void
/**
 * @deprecated To avoid bringing in all the tree-shakable modules, this API has been deprecated. Use `Vue2` or named exports instead.
 * Refer to https://github.com/vueuse/vue-demi/issues/41
 */
declare const V: typeof Vue

export function set<T>(target: any, key: any, val: T): T
export function del(target: any, key: any): void

export * from 'vue'
export {
  V as Vue,
  Vue2,
  isVue2,
  isVue3,
  install,
}


code:
var VueDemi = (function (VueDemi, Vue, VueCompositionAPI) {
  if (VueDemi.install) {
    return VueDemi
  }
  if (!Vue) {
    console.error('[vue-demi] no Vue instance found, please be sure to import `vue` before `vue-demi`.')
    return VueDemi
  }

  // Vue 2.7
  if (Vue.version.slice(0, 4) === '2.7.') {
    for (var key in Vue) {
      VueDemi[key] = Vue[key]
    }
    VueDemi.isVue2 = true
    VueDemi.isVue3 = false
    VueDemi.install = function () {}
    VueDemi.Vue = Vue
    VueDemi.Vue2 = Vue
    VueDemi.version = Vue.version
    VueDemi.warn = Vue.util.warn
    VueDemi.hasInjectionContext = function() {
      return !!VueDemi.getCurrentInstance()
    }
    function createApp(rootComponent, rootProps) {
      var vm
      var provide = {}
      var app = {
        config: Vue.config,
        use: Vue.use.bind(Vue),
        mixin: Vue.mixin.bind(Vue),
        component: Vue.component.bind(Vue),
        provide: function (key, value) {
          provide[key] = value
          return this
        },
        directive: function (name, dir) {
          if (dir) {
            Vue.directive(name, dir)
            return app
          } else {
            return Vue.directive(name)
          }
        },
        mount: function (el, hydrating) {
          if (!vm) {
            vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))
            vm.$mount(el, hydrating)
            return vm
          } else {
            return vm
          }
        },
        unmount: function () {
          if (vm) {
            vm.$destroy()
            vm = undefined
          }
        },
      }
      return app
    }
    VueDemi.createApp = createApp
  }
  // Vue 2.6.x
  else if (Vue.version.slice(0, 2) === '2.') {
    if (VueCompositionAPI) {
      for (var key in VueCompositionAPI) {
        VueDemi[key] = VueCompositionAPI[key]
      }
      VueDemi.isVue2 = true
      VueDemi.isVue3 = false
      VueDemi.install = function () {}
      VueDemi.Vue = Vue
      VueDemi.Vue2 = Vue
      VueDemi.version = Vue.version
      VueDemi.hasInjectionContext = function() {
        return !!VueDemi.getCurrentInstance()
      }
    } else {
      console.error('[vue-demi] no VueCompositionAPI instance found, please be sure to import `@vue/composition-api` before `vue-demi`.')
    }
  }
  // Vue 3
  else if (Vue.version.slice(0, 2) === '3.') {
    for (var key in Vue) {
      VueDemi[key] = Vue[key]
    }
    VueDemi.isVue2 = false
    VueDemi.isVue3 = true
    VueDemi.install = function () {}
    VueDemi.Vue = Vue
    VueDemi.Vue2 = undefined
    VueDemi.version = Vue.version
    VueDemi.set = function (target, key, val) {
      if (Array.isArray(target)) {
        target.length = Math.max(target.length, key)
        target.splice(key, 1, val)
        return val
      }
      target[key] = val
      return val
    }
    VueDemi.del = function (target, key) {
      if (Array.isArray(target)) {
        target.splice(key, 1)
        return
      }
      delete target[key]
    }
  } else {
    console.error('[vue-demi] Vue version ' + Vue.version + ' is unsupported.')
  }
  return VueDemi
})(
  ((globalThis || self).VueDemi = (globalThis || self).VueDemi || (typeof VueDemi !== 'undefined' ? VueDemi : {})),
  (globalThis || self).Vue || (typeof Vue !== 'undefined' ? Vue : undefined),
  (globalThis || self).VueCompositionAPI || (typeof VueCompositionAPI !== 'undefined' ? VueCompositionAPI : undefined)
);


code:
import * as Vue from 'vue'

var isVue2 = false
var isVue3 = true
var Vue2 = undefined

function install() {}

export function set(target, key, val) {
  if (Array.isArray(target)) {
    target.length = Math.max(target.length, key)
    target.splice(key, 1, val)
    return val
  }
  target[key] = val
  return val
}

export function del(target, key) {
  if (Array.isArray(target)) {
    target.splice(key, 1)
    return
  }
  delete target[key]
}

export * from 'vue'
export {
  Vue,
  Vue2,
  isVue2,
  isVue3,
  install,
}


code:
var VueModule = require('vue')

// get the real Vue https://github.com/vueuse/vue-demi/issues/192
var Vue = VueModule.default || VueModule

exports.Vue = Vue
exports.Vue2 = Vue
exports.isVue2 = true
exports.isVue3 = false
exports.install = function () {}
exports.warn = Vue.util.warn

// createApp polyfill
exports.createApp = function (rootComponent, rootProps) {
  var vm
  var provide = {}
  var app = {
    config: Vue.config,
    use: Vue.use.bind(Vue),
    mixin: Vue.mixin.bind(Vue),
    component: Vue.component.bind(Vue),
    provide: function (key, value) {
      provide[key] = value
      return this
    },
    directive: function (name, dir) {
      if (dir) {
        Vue.directive(name, dir)
        return app
      } else {
        return Vue.directive(name)
      }
    },
    mount: function (el, hydrating) {
      if (!vm) {
        vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))
        vm.$mount(el, hydrating)
        return vm
      } else {
        return vm
      }
    },
    unmount: function () {
      if (vm) {
        vm.$destroy()
        vm = undefined
      }
    },
  }
  return app
}

Object.keys(VueModule).forEach(function (key) {
  exports[key] = VueModule[key]
})

// Not implemented https://github.com/vuejs/core/pull/8111, falls back to getCurrentInstance()
exports.hasInjectionContext = function() {
  return !!VueModule.getCurrentInstance()
}


code:
import Vue from 'vue'
import type { PluginFunction, PluginObject, VueConstructor, Directive, InjectionKey, Component } from 'vue'

declare const isVue2: boolean
declare const isVue3: boolean
declare const Vue2: typeof Vue | undefined
declare const version: string
declare const install: (vue?: typeof Vue) => void
export declare function warn(msg: string, vm?: Component | null): void
/**
 * @deprecated To avoid bringing in all the tree-shakable modules, this API has been deprecated. Use `Vue2` or named exports instead.
 * Refer to https://github.com/vueuse/vue-demi/issues/41
 */
declare const V: typeof Vue

// accept no generic because Vue 3 doesn't accept any
// https://github.com/vuejs/vue-next/pull/2758/
export declare type Plugin = PluginObject<any> | PluginFunction<any>
export type { VNode } from 'vue'
export * from 'vue'
export { V as Vue, Vue2, isVue2, isVue3, version, install }

// #region createApp polyfill
export interface App<T = any> {
  config: VueConstructor['config']
  use: VueConstructor['use']
  mixin: VueConstructor['mixin']
  component: VueConstructor['component']
  directive(name: string): Directive | undefined
  directive(name: string, directive: Directive): this
  provide<T>(key: InjectionKey<T> | string, value: T): this
  mount: Vue['$mount']
  unmount: Vue['$destroy']
}
export declare function createApp(rootComponent: any, rootProps?: any): App
// #endregion

export declare function hasInjectionContext(): boolean


code:
import Vue from 'vue'
import { getCurrentInstance } from 'vue'

var isVue2 = true
var isVue3 = false
var Vue2 = Vue
var warn = Vue.util.warn

function install() {}

// createApp polyfill
export function createApp(rootComponent, rootProps) {
  var vm
  var provide = {}
  var app = {
    config: Vue.config,
    use: Vue.use.bind(Vue),
    mixin: Vue.mixin.bind(Vue),
    component: Vue.component.bind(Vue),
    provide: function (key, value) {
      provide[key] = value
      return this
    },
    directive: function (name, dir) {
      if (dir) {
        Vue.directive(name, dir)
        return app
      } else {
        return Vue.directive(name)
      }
    },
    mount: function (el, hydrating) {
      if (!vm) {
        vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))
        vm.$mount(el, hydrating)
        return vm
      } else {
        return vm
      }
    },
    unmount: function () {
      if (vm) {
        vm.$destroy()
        vm = undefined
      }
    },
  }
  return app
}

export {
  Vue,
  Vue2,
  isVue2,
  isVue3,
  install,
  warn
}

// Vue 3 components mock
function createMockComponent(name) {
  return {
    setup() {
      throw new Error('[vue-demi] ' + name + ' is not supported in Vue 2. It\'s provided to avoid compiler errors.')
    }
  }
}
export var Fragment = /*#__PURE__*/ createMockComponent('Fragment')
export var Transition = /*#__PURE__*/ createMockComponent('Transition')
export var TransitionGroup = /*#__PURE__*/ createMockComponent('TransitionGroup')
export var Teleport = /*#__PURE__*/ createMockComponent('Teleport')
export var Suspense = /*#__PURE__*/ createMockComponent('Suspense')
export var KeepAlive = /*#__PURE__*/ createMockComponent('KeepAlive')

export * from 'vue'

// Not implemented https://github.com/vuejs/core/pull/8111, falls back to getCurrentInstance()
export function hasInjectionContext() {
  return !!getCurrentInstance()
}


code:
var Vue = require('vue')
var VueCompositionAPI = require('@vue/composition-api')

function install(_vue) {
  var vueLib = _vue || Vue
  if (vueLib && 'default' in vueLib) {
    vueLib = vueLib.default
  }

  if (vueLib && !vueLib['__composition_api_installed__']) {
    if (VueCompositionAPI && 'default' in VueCompositionAPI)
      vueLib.use(VueCompositionAPI.default)
    else if (VueCompositionAPI)
      vueLib.use(VueCompositionAPI)
  }
}

install(Vue)

Object.keys(VueCompositionAPI).forEach(function(key) {
  exports[key] = VueCompositionAPI[key]
})

exports.Vue = Vue
exports.Vue2 = Vue
exports.isVue2 = true
exports.isVue3 = false
exports.install = install
exports.version = Vue.version

// Not implemented https://github.com/vuejs/core/pull/8111, falls back to getCurrentInstance()
exports.hasInjectionContext = function () {
  return !!VueCompositionAPI.getCurrentInstance()
}


code:
import Vue from 'vue'
import type { PluginFunction, PluginObject } from 'vue'
declare const isVue2: boolean
declare const isVue3: boolean
declare const Vue2: typeof Vue | undefined
declare const version: string
declare const install: (vue?: typeof Vue) => void
/**
 * @deprecated To avoid bringing in all the tree-shakable modules, this API has been deprecated. Use `Vue2` or named exports instead.
 * Refer to https://github.com/vueuse/vue-demi/issues/41
 */
declare const V: typeof Vue

/**
 * DebuggerEvent is a Vue 3 development only feature. This type cannot exist in Vue 2.
 */
export declare type DebuggerEvent = never

// accept no generic because Vue 3 doesn't accept any
// https://github.com/vuejs/vue-next/pull/2758/
export declare type Plugin = PluginObject<any> | PluginFunction<any>
export type { VNode } from 'vue'
export * from '@vue/composition-api'
export {
  V as Vue,
  Vue2,
  isVue2,
  isVue3,
  version,
  install,
}

export declare function hasInjectionContext(): boolean


code:
import Vue from 'vue'
import VueCompositionAPI, { getCurrentInstance } from '@vue/composition-api/dist/vue-composition-api.mjs'

function install(_vue) {
  _vue = _vue || Vue
  if (_vue && !_vue['__composition_api_installed__'])
    _vue.use(VueCompositionAPI)
}

install(Vue)

var isVue2 = true
var isVue3 = false
var Vue2 = Vue
var version = Vue.version

/**VCA-EXPORTS**/
export * from '@vue/composition-api/dist/vue-composition-api.mjs'
/**VCA-EXPORTS**/

export {
  Vue,
  Vue2,
  isVue2,
  isVue3,
  version,
  install,
}

// Vue 3 components mock
function createMockComponent(name) {
  return {
    setup() {
      throw new Error('[vue-demi] ' + name + ' is not supported in Vue 2. It\'s provided to avoid compiler errors.')
    }
  }
}
export var Fragment = /*#__PURE__*/ createMockComponent('Fragment')
export var Transition = /*#__PURE__*/ createMockComponent('Transition')
export var TransitionGroup = /*#__PURE__*/ createMockComponent('TransitionGroup')
export var Teleport = /*#__PURE__*/ createMockComponent('Teleport')
export var Suspense = /*#__PURE__*/ createMockComponent('Suspense')
export var KeepAlive = /*#__PURE__*/ createMockComponent('KeepAlive')

// Not implemented https://github.com/vuejs/core/pull/8111, falls back to getCurrentInstance()
export function hasInjectionContext() {
  return !!getCurrentInstance()
}


vue-demi

license: MIT

author: Anthony Fu <anthonyfu117@hotmail.com>

files: lib bin scripts

release: npx bumpp --tag --commit --push && npm publish


code:
const { switchVersion, loadModule } = require('./utils')

const Vue = loadModule('vue')

if (!Vue || typeof Vue.version !== 'string') {
  console.warn('[vue-demi] Vue is not found. Please run "npm install vue" to install.')
}
else if (Vue.version.startsWith('2.7.')) {
  switchVersion(2.7)
}
else if (Vue.version.startsWith('2.')) {
  switchVersion(2)
}
else if (Vue.version.startsWith('3.')) {
  switchVersion(3)
}
else {
  console.warn(`[vue-demi] Vue version v${Vue.version} is not supported.`)
}


code:
const { switchVersion } = require('./utils')

const version = process.argv[2]
const vueEntry = process.argv[3] || 'vue'

if (version === '2.7') {
  switchVersion(2.7, vueEntry)
  console.log(`[vue-demi] Switched for Vue 2.7 (entry: "${vueEntry}")`)
} else if (version === '2') {
  switchVersion(2, vueEntry)
  console.log(`[vue-demi] Switched for Vue 2 (entry: "${vueEntry}")`)
} else if (version === '3') {
  switchVersion(3, vueEntry)
  console.log(`[vue-demi] Switched for Vue 3 (entry: "${vueEntry}")`)
} else {
  console.warn(`[vue-demi] expecting version "2" or "2.7" or "3" but got "${version}"`)
  process.exit(1)
}


code:
const fs = require('fs')
const path = require('path')

const dir = path.resolve(__dirname, '..', 'lib')

function loadModule(name) {
  try {
    return require(name)
  } catch (e) {
    return undefined
  }
}

function copy(name, version, vue) {
  vue = vue || 'vue'
  const src = path.join(dir, `v${version}`, name)
  const dest = path.join(dir, name)
  let content = fs.readFileSync(src, 'utf-8')
  content = content.replace(/'vue'/g, `'${vue}'`)
  // unlink for pnpm, #92
  try {
    fs.unlinkSync(dest)
  } catch (error) { }
  fs.writeFileSync(dest, content, 'utf-8')
}

function updateVue2API() {
  const ignoreList = ['version', 'default']
  const VCA = loadModule('@vue/composition-api')
  if (!VCA) {
    console.warn('[vue-demi] Composition API plugin is not found. Please run "npm install @vue/composition-api" to install.')
    return
  }

  const exports = Object.keys(VCA).filter(i => !ignoreList.includes(i))

  const esmPath = path.join(dir, 'index.mjs')
  let content = fs.readFileSync(esmPath, 'utf-8')

  content = content.replace(
    /\/\*\*VCA-EXPORTS\*\*\/[\s\S]+\/\*\*VCA-EXPORTS\*\*\//m,
`/**VCA-EXPORTS**/
export { ${exports.join(', ')} } from '@vue/composition-api/dist/vue-composition-api.mjs'
/**VCA-EXPORTS**/`
    )

  fs.writeFileSync(esmPath, content, 'utf-8')

}

function switchVersion(version, vue) {
  copy('index.cjs', version, vue)
  copy('index.mjs', version, vue)
  copy('index.d.ts', version, vue)

  if (version === 2)
    updateVue2API()
}

module.exports.loadModule = loadModule
module.exports.switchVersion = switchVersion


@vueuse/core

description: Collection of essential Vue Composition Utilities

author: Anthony Fu <https://github.com/antfu>

type: git

directory: packages/core

keywords: vue vue-use utils


code:
'use strict';

var packages$1 = {
	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"
	},
	math: {
		name: "math",
		display: "Math",
		description: "Math functions for VueUse",
		external: [
			"@vueuse/shared"
		],
		dir: "packages/math"
	},
	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",
			"change-case",
			"drauu",
			"@vueuse/core",
			"@vueuse/shared",
			"fuse.js",
			"async-validator",
			"idb-keyval"
		],
		globals: {
			axios: "axios",
			"universal-cookie": "UniversalCookie",
			qrcode: "QRCode",
			nprogress: "nprogress",
			"jwt-decode": "jwt_decode",
			"focus-trap": "focusTrap",
			drauu: "Drauu",
			"fuse.js": "Fuse",
			"change-case": "changeCase",
			"async-validator": "AsyncValidator",
			"idb-keyval": "idbKeyval"
		},
		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",
			"firebase/database",
			"firebase/firestore"
		],
		globals: {
			firebase: "firebase",
			"firebase/app": "firebase",
			"firebase/database": "firebase",
			"firebase/firestore": "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"
	}
};
var categories$1 = [
	"Animation",
	"Array",
	"Browser",
	"Component",
	"Elements",
	"Network",
	"Reactivity",
	"Sensors",
	"State",
	"Time",
	"Utilities",
	"Watch",
	"@Electron",
	"@Firebase",
	"@Head",
	"@Integrations",
	"@Math",
	"@Motion",
	"@Router",
	"@RxJS",
	"@SchemaOrg",
	"@Sound"
];
var functions$1 = [
	{
		name: "computedAsync",
		"package": "core",
		lastUpdated: 1672940168000,
		docs: "https://vueuse.org/core/computedAsync/",
		category: "Reactivity",
		description: "computed for async functions",
		alias: [
			"asyncComputed"
		]
	},
	{
		name: "computedEager",
		"package": "shared",
		lastUpdated: 1645956777000,
		docs: "https://vueuse.org/shared/computedEager/",
		category: "Reactivity",
		description: "eager computed without lazy evaluation",
		alias: [
			"eagerComputed"
		]
	},
	{
		name: "computedInject",
		"package": "core",
		lastUpdated: 1662388825000,
		docs: "https://vueuse.org/core/computedInject/",
		category: "Component",
		description: "combine computed and inject"
	},
	{
		name: "computedWithControl",
		"package": "shared",
		lastUpdated: 1657102664000,
		docs: "https://vueuse.org/shared/computedWithControl/",
		category: "Reactivity",
		description: "explicitly define the dependencies of computed",
		alias: [
			"controlledComputed"
		],
		related: [
			"refWithControl"
		]
	},
	{
		name: "createEventHook",
		"package": "shared",
		lastUpdated: 1671205540000,
		docs: "https://vueuse.org/shared/createEventHook/",
		category: "Utilities",
		description: "utility for creating event hooks"
	},
	{
		name: "createGenericProjection",
		"package": "math",
		lastUpdated: 1667952962000,
		docs: "https://vueuse.org/math/createGenericProjection/",
		category: "@Math",
		description: "generic version of `createProjection`",
		related: [
			"createProjection",
			"useProjection"
		]
	},
	{
		name: "createGlobalState",
		"package": "shared",
		lastUpdated: 1625749207000,
		docs: "https://vueuse.org/shared/createGlobalState/",
		category: "State",
		description: "keep states in the global scope to be reusable across Vue instances",
		related: [
			"createSharedComposable"
		]
	},
	{
		name: "createHead",
		"package": "head",
		description: "create the head manager instance.",
		category: "@Head",
		external: "https://github.com/vueuse/head#api"
	},
	{
		name: "createInjectionState",
		"package": "shared",
		lastUpdated: 1673947341000,
		docs: "https://vueuse.org/shared/createInjectionState/",
		category: "State",
		description: "create global state that can be injected into components"
	},
	{
		name: "createProjection",
		"package": "math",
		lastUpdated: 1657437998000,
		docs: "https://vueuse.org/math/createProjection/",
		category: "@Math",
		description: "reactive numeric projection from one domain to another",
		related: [
			"createGenericProjection",
			"useProjection"
		]
	},
	{
		name: "createSchemaOrg",
		"package": "schema-org",
		description: "create the schema.org manager instance.",
		category: "@SchemaOrg",
		external: "https://vue-schema-org.netlify.app/api/core/create-schema-org.html"
	},
	{
		name: "createSharedComposable",
		"package": "shared",
		lastUpdated: 1639442454000,
		docs: "https://vueuse.org/shared/createSharedComposable/",
		category: "State",
		description: "make a composable function usable with multiple Vue instances",
		related: [
			"createGlobalState"
		]
	},
	{
		name: "createUnrefFn",
		"package": "core",
		lastUpdated: 1651597361000,
		docs: "https://vueuse.org/core/createUnrefFn/",
		category: "Utilities",
		description: "make a plain function accepting ref and raw values as arguments",
		related: [
			"reactify"
		]
	},
	{
		name: "extendRef",
		"package": "shared",
		lastUpdated: 1671470212000,
		docs: "https://vueuse.org/shared/extendRef/",
		category: "Reactivity",
		description: "add extra attributes to Ref"
	},
	{
		name: "from",
		"package": "rxjs",
		lastUpdated: 1665003343000,
		docs: "https://vueuse.org/rxjs/from/",
		category: "@RxJS",
		description: "/ fromEvent"
	},
	{
		name: "get",
		"package": "shared",
		lastUpdated: 1639442454000,
		docs: "https://vueuse.org/shared/get/",
		category: "Utilities",
		description: "shorthand for accessing `ref.value`"
	},
	{
		name: "isDefined",
		"package": "shared",
		lastUpdated: 1639442454000,
		docs: "https://vueuse.org/shared/isDefined/",
		category: "Utilities",
		description: "non-nullish checking type guard for Ref"
	},
	{
		name: "logicAnd",
		"package": "math",
		lastUpdated: 1657261466000,
		docs: "https://vueuse.org/math/logicAnd/",
		category: "@Math",
		description: "`AND` condition for refs",
		alias: [
			"and"
		],
		related: [
			"logicNot",
			"logicOr"
		]
	},
	{
		name: "logicNot",
		"package": "math",
		lastUpdated: 1657261466000,
		docs: "https://vueuse.org/math/logicNot/",
		category: "@Math",
		description: "`NOT` condition for ref",
		alias: [
			"not"
		],
		related: [
			"logicAnd",
			"logicOr"
		]
	},
	{
		name: "logicOr",
		"package": "math",
		lastUpdated: 1657261466000,
		docs: "https://vueuse.org/math/logicOr/",
		category: "@Math",
		description: "`OR` conditions for refs",
		alias: [
			"or"
		],
		related: [
			"logicAnd",
			"logicNot"
		]
	},
	{
		name: "makeDestructurable",
		"package": "shared",
		lastUpdated: 1662388825000,
		docs: "https://vueuse.org/shared/makeDestructurable/",
		category: "Utilities",
		description: "make isomorphic destructurable for object and array at the same time"
	},
	{
		name: "onClickOutside",
		"package": "core",
		lastUpdated: 1675466376000,
		component: true,
		directive: true,
		docs: "https://vueuse.org/core/onClickOutside/",
		category: "Sensors",
		description: "listen for clicks outside of an element"
	},
	{
		name: "onKeyStroke",
		"package": "core",
		lastUpdated: 1672754414000,
		directive: true,
		docs: "https://vueuse.org/core/onKeyStroke/",
		category: "Sensors",
		description: "listen for keyboard key being stroked"
	},
	{
		name: "onLongPress",
		"package": "core",
		lastUpdated: 1661746302000,
		component: true,
		directive: true,
		docs: "https://vueuse.org/core/onLongPress/",
		category: "Sensors",
		description: "listen for a long press on an element"
	},
	{
		name: "onStartTyping",
		"package": "core",
		lastUpdated: 1639442454000,
		docs: "https://vueuse.org/core/onStartTyping/",
		category: "Sensors",
		description: "fires when users start typing on non-editable elements"
	},
	{
		name: "reactify",
		"package": "shared",
		lastUpdated: 1657634926000,
		docs: "https://vueuse.org/shared/reactify/",
		category: "Reactivity",
		description: "converts plain functions into reactive functions",
		alias: [
			"createReactiveFn"
		],
		related: [
			"createUnrefFn"
		]
	},
	{
		name: "reactifyObject",
		"package": "shared",
		lastUpdated: 1667952962000,
		docs: "https://vueuse.org/shared/reactifyObject/",
		category: "Reactivity",
		description: "apply `reactify` to an object"
	},
	{
		name: "reactiveComputed",
		"package": "shared",
		lastUpdated: 1645876129000,
		docs: "https://vueuse.org/shared/reactiveComputed/",
		category: "Reactivity",
		description: "computed reactive object"
	},
	{
		name: "reactiveOmit",
		"package": "shared",
		lastUpdated: 1658645224000,
		docs: "https://vueuse.org/shared/reactiveOmit/",
		category: "Reactivity",
		description: "reactively omit fields from a reactive object"
	},
	{
		name: "reactivePick",
		"package": "shared",
		lastUpdated: 1658645224000,
		docs: "https://vueuse.org/shared/reactivePick/",
		category: "Reactivity",
		description: "reactively pick fields from a reactive object"
	},
	{
		name: "refAutoReset",
		"package": "shared",
		lastUpdated: 1660291797000,
		docs: "https://vueuse.org/shared/refAutoReset/",
		category: "Reactivity",
		description: "a ref which will be reset to the default value after some time",
		alias: [
			"autoResetRef"
		]
	},
	{
		name: "refDebounced",
		"package": "shared",
		lastUpdated: 1666676013000,
		docs: "https://vueuse.org/shared/refDebounced/",
		category: "Reactivity",
		description: "debounce execution of a ref value",
		alias: [
			"useDebounce",
			"debouncedRef"
		],
		related: [
			"useThrottleFn"
		]
	},
	{
		name: "refDefault",
		"package": "shared",
		lastUpdated: 1639442454000,
		docs: "https://vueuse.org/shared/refDefault/",
		category: "Reactivity",
		description: "apply default value to a ref"
	},
	{
		name: "refThrottled",
		"package": "shared",
		lastUpdated: 1645956777000,
		docs: "https://vueuse.org/shared/refThrottled/",
		category: "Reactivity",
		description: "throttle changing of a ref value",
		alias: [
			"useThrottle",
			"throttledRef"
		],
		related: [
			"useThrottleFn"
		]
	},
	{
		name: "refWithControl",
		"package": "shared",
		lastUpdated: 1662892188000,
		docs: "https://vueuse.org/shared/refWithControl/",
		category: "Reactivity",
		description: "fine-grained controls over ref and its reactivity",
		alias: [
			"controlledRef"
		],
		related: [
			"computedWithControl"
		]
	},
	{
		name: "resolveRef",
		"package": "shared",
		lastUpdated: 1672752994000,
		docs: "https://vueuse.org/shared/resolveRef/",
		category: "Reactivity",
		description: "normalize value/ref/getter to `ref` or `computed`",
		related: [
			"resolveUnref"
		]
	},
	{
		name: "resolveUnref",
		"package": "shared",
		lastUpdated: 1667054063000,
		docs: "https://vueuse.org/shared/resolveUnref/",
		category: "Reactivity",
		description: "get the value of value/ref/getter",
		related: [
			"resolveRef"
		]
	},
	{
		name: "set",
		"package": "shared",
		lastUpdated: 1642756441000,
		docs: "https://vueuse.org/shared/set/",
		category: "Utilities",
		description: "shorthand for `ref.value = x`"
	},
	{
		name: "syncRef",
		"package": "shared",
		lastUpdated: 1658655180000,
		docs: "https://vueuse.org/shared/syncRef/",
		category: "Reactivity",
		description: "two-way refs synchronization",
		related: [
			"syncRefs"
		]
	},
	{
		name: "syncRefs",
		"package": "shared",
		lastUpdated: 1645952177000,
		docs: "https://vueuse.org/shared/syncRefs/",
		category: "Reactivity",
		description: "keep target refs in sync with a source ref",
		related: [
			"syncRef"
		]
	},
	{
		name: "templateRef",
		"package": "core",
		lastUpdated: 1663295825000,
		docs: "https://vueuse.org/core/templateRef/",
		category: "Component",
		description: "shorthand for binding ref to template element"
	},
	{
		name: "toObserver",
		"package": "rxjs",
		lastUpdated: 1631130736000,
		docs: "https://vueuse.org/rxjs/toObserver/",
		category: "@RxJS",
		description: "sugar function to convert a `ref` into an RxJS [Observer](https://rxjs.dev/guide/observer)"
	},
	{
		name: "toReactive",
		"package": "shared",
		lastUpdated: 1645878866000,
		docs: "https://vueuse.org/shared/toReactive/",
		category: "Reactivity",
		description: "converts ref to reactive"
	},
	{
		name: "toRefs",
		"package": "shared",
		lastUpdated: 1655284952000,
		docs: "https://vueuse.org/shared/toRefs/",
		category: "Reactivity",
		description: "extended [`toRefs`](https://v3.vuejs.org/api/refs-api.html#torefs) that also accepts refs of an object"
	},
	{
		name: "tryOnBeforeMount",
		"package": "shared",
		lastUpdated: 1655284952000,
		docs: "https://vueuse.org/shared/tryOnBeforeMount/",
		category: "Component",
		description: "safe `onBeforeMount`"
	},
	{
		name: "tryOnBeforeUnmount",
		"package": "shared",
		lastUpdated: 1639442454000,
		docs: "https://vueuse.org/shared/tryOnBeforeUnmount/",
		category: "Component",
		description: "safe `onBeforeUnmount`"
	},
	{
		name: "tryOnMounted",
		"package": "shared",
		lastUpdated: 1640933217000,
		docs: "https://vueuse.org/shared/tryOnMounted/",
		category: "Component",
		description: "safe `onMounted`"
	},
	{
		name: "tryOnScopeDispose",
		"package": "shared",
		lastUpdated: 1675070075000,
		docs: "https://vueuse.org/shared/tryOnScopeDispose/",
		category: "Component",
		description: "safe `onScopeDispose`"
	},
	{
		name: "tryOnUnmounted",
		"package": "shared",
		lastUpdated: 1640933217000,
		docs: "https://vueuse.org/shared/tryOnUnmounted/",
		category: "Component",
		description: "safe `onUnmounted`"
	},
	{
		name: "unrefElement",
		"package": "core",
		lastUpdated: 1657259100000,
		docs: "https://vueuse.org/core/unrefElement/",
		category: "Component",
		description: "unref for dom element"
	},
	{
		name: "until",
		"package": "shared",
		lastUpdated: 1664157004000,
		docs: "https://vueuse.org/shared/until/",
		category: "Watch",
		description: "promised one-time watch for changes"
	},
	{
		name: "useAbs",
		"package": "math",
		lastUpdated: 1658041562000,
		docs: "https://vueuse.org/math/useAbs/",
		category: "@Math",
		description: "reactive `Math.abs`"
	},
	{
		name: "useActiveElement",
		"package": "core",
		lastUpdated: 1672753027000,
		component: true,
		docs: "https://vueuse.org/core/useActiveElement/",
		category: "Elements",
		description: "reactive `document.activeElement`"
	},
	{
		name: "useArrayEvery",
		"package": "shared",
		lastUpdated: 1660291797000,
		docs: "https://vueuse.org/shared/useArrayEvery/",
		category: "Array",
		description: "reactive `Array.every`"
	},
	{
		name: "useArrayFilter",
		"package": "shared",
		lastUpdated: 1660291797000,
		docs: "https://vueuse.org/shared/useArrayFilter/",
		category: "Array",
		description: "reactive `Array.filter`"
	},
	{
		name: "useArrayFind",
		"package": "shared",
		lastUpdated: 1660291797000,
		docs: "https://vueuse.org/shared/useArrayFind/",
		category: "Array",
		description: "reactive `Array.find`"
	},
	{
		name: "useArrayFindIndex",
		"package": "shared",
		lastUpdated: 1660291797000,
		docs: "https://vueuse.org/shared/useArrayFindIndex/",
		category: "Array",
		description: "reactive `Array.findIndex`"
	},
	{
		name: "useArrayFindLast",
		"package": "shared",
		lastUpdated: 1676713178000,
		docs: "https://vueuse.org/shared/useArrayFindLast/",
		category: "Array",
		description: "reactive `Array.findLast`"
	},
	{
		name: "useArrayJoin",
		"package": "shared",
		lastUpdated: 1660291797000,
		docs: "https://vueuse.org/shared/useArrayJoin/",
		category: "Array",
		description: "reactive `Array.join`"
	},
	{
		name: "useArrayMap",
		"package": "shared",
		lastUpdated: 1662376596000,
		docs: "https://vueuse.org/shared/useArrayMap/",
		category: "Array",
		description: "reactive `Array.map`"
	},
	{
		name: "useArrayReduce",
		"package": "shared",
		lastUpdated: 1660291797000,
		docs: "https://vueuse.org/shared/useArrayReduce/",
		category: "Array",
		description: "reactive `Array.reduce`"
	},
	{
		name: "useArraySome",
		"package": "shared",
		lastUpdated: 1660291797000,
		docs: "https://vueuse.org/shared/useArraySome/",
		category: "Array",
		description: "reactive `Array.some`"
	},
	{
		name: "useArrayUnique",
		"package": "shared",
		lastUpdated: 1672753114000,
		docs: "https://vueuse.org/shared/useArrayUnique/",
		category: "Array",
		description: "reactive unique array"
	},
	{
		name: "useAsyncQueue",
		"package": "core",
		lastUpdated: 1639818708000,
		docs: "https://vueuse.org/core/useAsyncQueue/",
		category: "Utilities",
		description: "executes each asynchronous task sequentially and passes the current task result to the next task"
	},
	{
		name: "useAsyncState",
		"package": "core",
		lastUpdated: 1676388144000,
		docs: "https://vueuse.org/core/useAsyncState/",
		category: "State",
		description: "reactive async state"
	},
	{
		name: "useAsyncValidator",
		"package": "integrations",
		lastUpdated: 1676570052000,
		component: true,
		docs: "https://vueuse.org/integrations/useAsyncValidator/",
		category: "@Integrations",
		description: "wrapper for [`async-validator`](https://github.com/yiminghe/async-validator)",
		importPath: "integrations/useAsyncValidator"
	},
	{
		name: "useAuth",
		"package": "firebase",
		lastUpdated: 1658645224000,
		docs: "https://vueuse.org/firebase/useAuth/",
		category: "@Firebase",
		description: "reactive [Firebase Auth](https://firebase.google.com/docs/auth) binding",
		importPath: "firebase/useAuth"
	},
	{
		name: "useAverage",
		"package": "math",
		lastUpdated: 1658041190000,
		docs: "https://vueuse.org/math/useAverage/",
		category: "@Math",
		description: "get the average of an array reactively"
	},
	{
		name: "useAxios",
		"package": "integrations",
		lastUpdated: 1676590260000,
		docs: "https://vueuse.org/integrations/useAxios/",
		category: "@Integrations",
		description: "wrapper for [`axios`](https://github.com/axios/axios)",
		importPath: "integrations/useAxios"
	},
	{
		name: "useBase64",
		"package": "core",
		lastUpdated: 1657259100000,
		docs: "https://vueuse.org/core/useBase64/",
		category: "Utilities",
		description: "reactive base64 transforming"
	},
	{
		name: "useBattery",
		"package": "core",
		lastUpdated: 1657430593000,
		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: "useBluetooth",
		"package": "core",
		lastUpdated: 1665965343000,
		docs: "https://vueuse.org/core/useBluetooth/",
		category: "Browser",
		description: "reactive [Web Bluetooth API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API)"
	},
	{
		name: "useBreakpoints",
		"package": "core",
		lastUpdated: 1662285732000,
		docs: "https://vueuse.org/core/useBreakpoints/",
		category: "Browser",
		description: "reactive viewport breakpoints"
	},
	{
		name: "useBroadcastChannel",
		"package": "core",
		lastUpdated: 1658083596000,
		docs: "https://vueuse.org/core/useBroadcastChannel/",
		category: "Browser",
		description: "reactive [BroadcastChannel API](https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel)"
	},
	{
		name: "useBrowserLocation",
		"package": "core",
		lastUpdated: 1639442454000,
		component: true,
		docs: "https://vueuse.org/core/useBrowserLocation/",
		category: "Browser",
		description: "reactive browser location"
	},
	{
		name: "useCached",
		"package": "core",
		lastUpdated: 1644284136000,
		docs: "https://vueuse.org/core/useCached/",
		category: "Utilities",
		description: "cache a ref with a custom comparator"
	},
	{
		name: "useCeil",
		"package": "math",
		lastUpdated: 1657638060000,
		docs: "https://vueuse.org/math/useCeil/",
		category: "@Math",
		description: "reactive `Math.ceil`"
	},
	{
		name: "useChangeCase",
		"package": "integrations",
		lastUpdated: 1657259100000,
		docs: "https://vueuse.org/integrations/useChangeCase/",
		category: "@Integrations",
		description: "reactive wrapper for [`change-case`](https://github.com/blakeembrey/change-case)",
		importPath: "integrations/useChangeCase"
	},
	{
		name: "useClamp",
		"package": "math",
		lastUpdated: 1676714120000,
		docs: "https://vueuse.org/math/useClamp/",
		category: "@Math",
		description: "reactively clamp a value between two other values"
	},
	{
		name: "useClipboard",
		"package": "core",
		lastUpdated: 1666676330000,
		docs: "https://vueuse.org/core/useClipboard/",
		category: "Browser",
		description: "reactive [Clipboard API](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API)"
	},
	{
		name: "useCloned",
		"package": "core",
		lastUpdated: 1662386652000,
		docs: "https://vueuse.org/core/useCloned/",
		category: "Utilities",
		description: "reactive clone of a ref"
	},
	{
		name: "useColorMode",
		"package": "core",
		lastUpdated: 1674955241000,
		component: true,
		docs: "https://vueuse.org/core/useColorMode/",
		category: "Browser",
		description: "reactive color mode (dark / light / customs) with auto data persistence",
		related: [
			"useDark",
			"usePreferredDark",
			"useStorage"
		]
	},
	{
		name: "useConfirmDialog",
		"package": "core",
		lastUpdated: 1642756441000,
		docs: "https://vueuse.org/core/useConfirmDialog/",
		category: "Utilities",
		description: "creates event hooks to support modals and confirmation dialog chains"
	},
	{
		name: "useCookies",
		"package": "integrations",
		lastUpdated: 1642756753000,
		docs: "https://vueuse.org/integrations/useCookies/",
		category: "@Integrations",
		description: "wrapper for [`universal-cookie`](https://www.npmjs.com/package/universal-cookie)",
		importPath: "integrations/useCookies"
	},
	{
		name: "useCounter",
		"package": "shared",
		lastUpdated: 1666677599000,
		docs: "https://vueuse.org/shared/useCounter/",
		category: "Utilities",
		description: "basic counter with utility functions"
	},
	{
		name: "useCssVar",
		"package": "core",
		lastUpdated: 1657259100000,
		docs: "https://vueuse.org/core/useCssVar/",
		category: "Browser",
		description: "manipulate CSS variables"
	},
	{
		name: "useCurrentElement",
		"package": "core",
		lastUpdated: 1661239180000,
		docs: "https://vueuse.org/core/useCurrentElement/",
		category: "Component",
		description: "get the DOM element of current component as a ref"
	},
	{
		name: "useCycleList",
		"package": "core",
		lastUpdated: 1659556886000,
		docs: "https://vueuse.org/core/useCycleList/",
		category: "Utilities",
		description: "cycle through a list of items"
	},
	{
		name: "useDark",
		"package": "core",
		lastUpdated: 1662892188000,
		component: true,
		docs: "https://vueuse.org/core/useDark/",
		category: "Browser",
		description: "reactive dark mode with auto data persistence",
		related: [
			"useColorMode",
			"usePreferredDark",
			"useStorage"
		]
	},
	{
		name: "useDateFormat",
		"package": "shared",
		lastUpdated: 1664216752000,
		docs: "https://vueuse.org/shared/useDateFormat/",
		category: "Time",
		description: "get the formatted date according to the string of tokens passed in"
	},
	{
		name: "useDebouncedRefHistory",
		"package": "core",
		lastUpdated: 1657259100000,
		docs: "https://vueuse.org/core/useDebouncedRefHistory/",
		category: "State",
		description: "shorthand for `useRefHistory` with debounced filter",
		related: [
			"useRefHistory",
			"useThrottledRefHistory"
		]
	},
	{
		name: "useDebounceFn",
		"package": "shared",
		lastUpdated: 1672753228000,
		docs: "https://vueuse.org/shared/useDebounceFn/",
		category: "Utilities",
		description: "debounce execution of a function",
		related: [
			"useThrottleFn"
		]
	},
	{
		name: "useDeviceMotion",
		"package": "core",
		lastUpdated: 1639442454000,
		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",
		lastUpdated: 1657430593000,
		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",
		lastUpdated: 1676712461000,
		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",
		lastUpdated: 1662892188000,
		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 available input/output devices",
		related: [
			"useUserMedia"
		]
	},
	{
		name: "useDisplayMedia",
		"package": "core",
		lastUpdated: 1672752994000,
		docs: "https://vueuse.org/core/useDisplayMedia/",
		category: "Sensors",
		description: "reactive [`mediaDevices.getDisplayMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia) streaming",
		related: [
			"useUserMedia"
		]
	},
	{
		name: "useDocumentVisibility",
		"package": "core",
		lastUpdated: 1658083596000,
		component: true,
		docs: "https://vueuse.org/core/useDocumentVisibility/",
		category: "Elements",
		description: "reactively track [`document.visibilityState`](https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState)"
	},
	{
		name: "useDraggable",
		"package": "core",
		lastUpdated: 1671204368000,
		component: true,
		docs: "https://vueuse.org/core/useDraggable/",
		category: "Elements",
		description: "make elements draggable"
	},
	{
		name: "useDrauu",
		"package": "integrations",
		lastUpdated: 1657259100000,
		docs: "https://vueuse.org/integrations/useDrauu/",
		category: "@Integrations",
		description: "reactive instance for [drauu](https://github.com/antfu/drauu)",
		importPath: "integrations/useDrauu"
	},
	{
		name: "useDropZone",
		"package": "core",
		lastUpdated: 1658043158000,
		docs: "https://vueuse.org/core/useDropZone/",
		category: "Elements",
		description: "create a zone where files can be dropped"
	},
	{
		name: "useElementBounding",
		"package": "core",
		lastUpdated: 1672422913000,
		component: true,
		docs: "https://vueuse.org/core/useElementBounding/",
		category: "Elements",
		description: "reactive [bounding box](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect) of an HTML element"
	},
	{
		name: "useElementByPoint",
		"package": "core",
		lastUpdated: 1672852514000,
		docs: "https://vueuse.org/core/useElementByPoint/",
		category: "Sensors",
		description: "reactive element by point"
	},
	{
		name: "useElementHover",
		"package": "core",
		lastUpdated: 1676712131000,
		directive: true,
		docs: "https://vueuse.org/core/useElementHover/",
		category: "Sensors",
		description: "reactive element's hover state"
	},
	{
		name: "useElementSize",
		"package": "core",
		lastUpdated: 1674954789000,
		component: true,
		directive: true,
		docs: "https://vueuse.org/core/useElementSize/",
		category: "Elements",
		description: "reactive size of an HTML element"
	},
	{
		"package": "motion",
		category: "@Motion",
		name: "useElementStyle",
		description: "sync a reactive object to a target element CSS styling",
		external: "https://motion.vueuse.org/api/use-element-style.html"
	},
	{
		"package": "motion",
		category: "@Motion",
		name: "useElementTransform",
		description: "sync a reactive object to a target element CSS transform.",
		external: "https://motion.vueuse.org/api/use-element-transform.html"
	},
	{
		name: "useElementVisibility",
		"package": "core",
		lastUpdated: 1662384256000,
		component: true,
		directive: true,
		docs: "https://vueuse.org/core/useElementVisibility/",
		category: "Elements",
		description: "tracks the visibility of an element within the viewport"
	},
	{
		name: "useEventBus",
		"package": "core",
		lastUpdated: 1676389922000,
		docs: "https://vueuse.org/core/useEventBus/",
		category: "Utilities",
		description: "a basic event bus"
	},
	{
		name: "useEventListener",
		"package": "core",
		lastUpdated: 1676715818000,
		docs: "https://vueuse.org/core/useEventListener/",
		category: "Browser",
		description: "use EventListener with ease"
	},
	{
		name: "useEventSource",
		"package": "core",
		lastUpdated: 1657634387000,
		docs: "https://vueuse.org/core/useEventSource/",
		category: "Network",
		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",
		lastUpdated: 1658083596000,
		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",
		lastUpdated: 1661409315000,
		docs: "https://vueuse.org/core/useFavicon/",
		category: "Browser",
		description: "reactive favicon"
	},
	{
		name: "useFetch",
		"package": "core",
		lastUpdated: 1676093591000,
		docs: "https://vueuse.org/core/useFetch/",
		category: "Network",
		description: "reactive [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) provides the ability to abort requests"
	},
	{
		name: "useFileDialog",
		"package": "core",
		lastUpdated: 1662385329000,
		docs: "https://vueuse.org/core/useFileDialog/",
		category: "Browser",
		description: "open file dialog with ease"
	},
	{
		name: "useFileSystemAccess",
		"package": "core",
		lastUpdated: 1657430593000,
		docs: "https://vueuse.org/core/useFileSystemAccess/",
		category: "Browser",
		description: "create and read and write local files with [FileSystemAccessAPI](https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API)"
	},
	{
		name: "useFirestore",
		"package": "firebase",
		lastUpdated: 1668298845000,
		docs: "https://vueuse.org/firebase/useFirestore/",
		category: "@Firebase",
		description: "reactive [Firestore](https://firebase.google.com/docs/firestore) binding",
		importPath: "firebase/useFirestore"
	},
	{
		name: "useFloor",
		"package": "math",
		lastUpdated: 1657638060000,
		docs: "https://vueuse.org/math/useFloor/",
		category: "@Math",
		description: "reactive `Math.floor`"
	},
	{
		name: "useFocus",
		"package": "core",
		lastUpdated: 1674992405000,
		docs: "https://vueuse.org/core/useFocus/",
		category: "Sensors",
		description: "reactive utility to track or set the focus state of a DOM element"
	},
	{
		name: "useFocusTrap",
		"package": "integrations",
		lastUpdated: 1639818708000,
		component: true,
		docs: "https://vueuse.org/integrations/useFocusTrap/",
		category: "@Integrations",
		description: "reactive wrapper for [`focus-trap`](https://github.com/focus-trap/focus-trap)",
		importPath: "integrations/useFocusTrap"
	},
	{
		name: "useFocusWithin",
		"package": "core",
		lastUpdated: 1674955241000,
		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",
		lastUpdated: 1644734082000,
		docs: "https://vueuse.org/core/useFps/",
		category: "Sensors",
		description: "reactive FPS (frames per second)"
	},
	{
		name: "useFullscreen",
		"package": "core",
		lastUpdated: 1657430593000,
		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: "useFuse",
		"package": "integrations",
		lastUpdated: 1657259100000,
		docs: "https://vueuse.org/integrations/useFuse/",
		category: "@Integrations",
		description: "easily implement fuzzy search using a composable with [Fuse.js](https://github.com/krisk/fuse)",
		importPath: "integrations/useFuse"
	},
	{
		name: "useGamepad",
		"package": "core",
		lastUpdated: 1658083596000,
		docs: "https://vueuse.org/core/useGamepad/",
		category: "Browser",
		description: "provides reactive bindings for the [Gamepad API](https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API)"
	},
	{
		name: "useGeolocation",
		"package": "core",
		lastUpdated: 1671204138000,
		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: "useHead",
		"package": "head",
		description: "update head meta tags reactively.",
		category: "@Head",
		external: "https://github.com/vueuse/head#api"
	},
	{
		name: "useIDBKeyval",
		"package": "integrations",
		lastUpdated: 1668302379000,
		docs: "https://vueuse.org/integrations/useIDBKeyval/",
		category: "@Integrations",
		description: "wrapper for [`idb-keyval`](https://www.npmjs.com/package/idb-keyval)",
		importPath: "integrations/useIDBKeyval"
	},
	{
		name: "useIdle",
		"package": "core",
		lastUpdated: 1657638023000,
		component: true,
		docs: "https://vueuse.org/core/useIdle/",
		category: "Sensors",
		description: "tracks whether the user is being inactive"
	},
	{
		name: "useImage",
		"package": "core",
		lastUpdated: 1658083596000,
		component: true,
		docs: "https://vueuse.org/core/useImage/",
		category: "Browser",
		description: "reactive load an image in the browser"
	},
	{
		name: "useInfiniteScroll",
		"package": "core",
		lastUpdated: 1658043158000,
		directive: true,
		docs: "https://vueuse.org/core/useInfiniteScroll/",
		category: "Sensors",
		description: "infinite scrolling of the element"
	},
	{
		name: "useIntersectionObserver",
		"package": "core",
		lastUpdated: 1657637968000,
		directive: true,
		docs: "https://vueuse.org/core/useIntersectionObserver/",
		category: "Elements",
		description: "detects that a target element's visibility"
	},
	{
		name: "useInterval",
		"package": "shared",
		lastUpdated: 1676713336000,
		docs: "https://vueuse.org/shared/useInterval/",
		category: "Animation",
		description: "reactive counter increases on every interval"
	},
	{
		name: "useIntervalFn",
		"package": "shared",
		lastUpdated: 1674954620000,
		docs: "https://vueuse.org/shared/useIntervalFn/",
		category: "Animation",
		description: "wrapper for `setInterval` with controls"
	},
	{
		name: "useIpcRenderer",
		"package": "electron",
		lastUpdated: 1658645224000,
		docs: "https://vueuse.org/electron/useIpcRenderer/",
		category: "@Electron",
		description: "provides [ipcRenderer](https://www.electronjs.org/docs/api/ipc-renderer) and all of its APIs"
	},
	{
		name: "useIpcRendererInvoke",
		"package": "electron",
		lastUpdated: 1658645224000,
		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",
		lastUpdated: 1658645224000,
		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: "useJwt",
		"package": "integrations",
		lastUpdated: 1657730911000,
		docs: "https://vueuse.org/integrations/useJwt/",
		category: "@Integrations",
		description: "wrapper for [`jwt-decode`](https://github.com/auth0/jwt-decode)",
		importPath: "integrations/useJwt"
	},
	{
		name: "useKeyModifier",
		"package": "core",
		lastUpdated: 1657638042000,
		docs: "https://vueuse.org/core/useKeyModifier/",
		category: "Sensors",
		description: "reactive [Modifier State](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/getModifierState)"
	},
	{
		name: "useLastChanged",
		"package": "shared",
		lastUpdated: 1642756441000,
		docs: "https://vueuse.org/shared/useLastChanged/",
		category: "State",
		description: "records the timestamp of the last change"
	},
	{
		name: "useLocalStorage",
		"package": "core",
		lastUpdated: 1657634978000,
		docs: "https://vueuse.org/core/useLocalStorage/",
		category: "State",
		description: "reactive [LocalStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)",
		related: [
			"useStorage"
		]
	},
	{
		name: "useMagicKeys",
		"package": "core",
		lastUpdated: 1672752994000,
		docs: "https://vueuse.org/core/useMagicKeys/",
		category: "Sensors",
		description: "reactive keys pressed state"
	},
	{
		name: "useManualRefHistory",
		"package": "core",
		lastUpdated: 1662386652000,
		docs: "https://vueuse.org/core/useManualRefHistory/",
		category: "State",
		description: "manually track the change history of a ref when the using calls `commit()`",
		related: [
			"useRefHistory"
		]
	},
	{
		name: "useMath",
		"package": "math",
		lastUpdated: 1658042869000,
		docs: "https://vueuse.org/math/useMath/",
		category: "@Math",
		description: "reactive `Math` methods"
	},
	{
		name: "useMax",
		"package": "math",
		lastUpdated: 1658041190000,
		docs: "https://vueuse.org/math/useMax/",
		category: "@Math",
		description: "reactive `Math.max`"
	},
	{
		name: "useMediaControls",
		"package": "core",
		lastUpdated: 1674853020000,
		docs: "https://vueuse.org/core/useMediaControls/",
		category: "Browser",
		description: "reactive media controls for both `audio` and `video` elements"
	},
	{
		name: "useMediaQuery",
		"package": "core",
		lastUpdated: 1662574748000,
		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: "useMemoize",
		"package": "core",
		lastUpdated: 1667952962000,
		docs: "https://vueuse.org/core/useMemoize/",
		category: "Utilities",
		description: "cache results of functions depending on arguments and keep it reactive"
	},
	{
		name: "useMemory",
		"package": "core",
		lastUpdated: 1658083607000,
		docs: "https://vueuse.org/core/useMemory/",
		category: "Browser",
		description: "reactive Memory Info"
	},
	{
		name: "useMin",
		"package": "math",
		lastUpdated: 1658041610000,
		docs: "https://vueuse.org/math/useMin/",
		category: "@Math",
		description: "reactive `Math.min`"
	},
	{
		"package": "motion",
		category: "@Motion",
		name: "useMotion",
		description: "putting your components in motion.",
		external: "https://motion.vueuse.org/api/use-motion.html"
	},
	{
		"package": "motion",
		category: "@Motion",
		name: "useMotionProperties",
		description: "access Motion Properties for a target element.",
		external: "https://motion.vueuse.org/api/use-motion-properties.html"
	},
	{
		"package": "motion",
		category: "@Motion",
		name: "useMotionVariants",
		description: "handle the Variants state and selection.",
		external: "https://motion.vueuse.org/api/use-motion-variants.html"
	},
	{
		name: "useMounted",
		"package": "core",
		lastUpdated: 1640933217000,
		docs: "https://vueuse.org/core/useMounted/",
		category: "Component",
		description: "mounted state in ref"
	},
	{
		name: "useMouse",
		"package": "core",
		lastUpdated: 1672753737000,
		component: true,
		docs: "https://vueuse.org/core/useMouse/",
		category: "Sensors",
		description: "reactive mouse position"
	},
	{
		name: "useMouseInElement",
		"package": "core",
		lastUpdated: 1674954670000,
		component: true,
		docs: "https://vueuse.org/core/useMouseInElement/",
		category: "Elements",
		description: "reactive mouse position related to an element"
	},
	{
		name: "useMousePressed",
		"package": "core",
		lastUpdated: 1639818708000,
		component: true,
		docs: "https://vueuse.org/core/useMousePressed/",
		category: "Sensors",
		description: "reactive mouse pressing state"
	},
	{
		name: "useMutationObserver",
		"package": "core",
		lastUpdated: 1657718877000,
		docs: "https://vueuse.org/core/useMutationObserver/",
		category: "Elements",
		description: "watch for changes being made to the DOM tree"
	},
	{
		name: "useNavigatorLanguage",
		"package": "core",
		lastUpdated: 1662892188000,
		docs: "https://vueuse.org/core/useNavigatorLanguage/",
		category: "Sensors",
		description: "reactive [navigator.language](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/language)"
	},
	{
		name: "useNetwork",
		"package": "core",
		lastUpdated: 1658083596000,
		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",
		lastUpdated: 1639442454000,
		component: true,
		docs: "https://vueuse.org/core/useNow/",
		category: "Animation",
		description: "reactive current Date instance"
	},
	{
		name: "useNProgress",
		"package": "integrations",
		lastUpdated: 1658758826000,
		docs: "https://vueuse.org/integrations/useNProgress/",
		category: "@Integrations",
		description: "reactive wrapper for [`nprogress`](https://github.com/rstacruz/nprogress)",
		importPath: "integrations/useNProgress"
	},
	{
		name: "useObjectUrl",
		"package": "core",
		lastUpdated: 1657132677000,
		component: true,
		docs: "https://vueuse.org/core/useObjectUrl/",
		category: "Browser",
		description: "reactive URL representing an object"
	},
	{
		name: "useObservable",
		"package": "rxjs",
		lastUpdated: 1651595539000,
		docs: "https://vueuse.org/rxjs/useObservable/",
		category: "@RxJS",
		description: "use an RxJS [`Observable`](https://rxjs.dev/guide/observable)"
	},
	{
		name: "useOffsetPagination",
		"package": "core",
		lastUpdated: 1659592690000,
		component: true,
		docs: "https://vueuse.org/core/useOffsetPagination/",
		category: "Utilities",
		description: "reactive offset pagination"
	},
	{
		name: "useOnline",
		"package": "core",
		lastUpdated: 1639442454000,
		component: true,
		docs: "https://vueuse.org/core/useOnline/",
		category: "Sensors",
		description: "reactive online state"
	},
	{
		name: "usePageLeave",
		"package": "core",
		lastUpdated: 1642756441000,
		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",
		lastUpdated: 1657718913000,
		docs: "https://vueuse.org/core/useParallax/",
		category: "Sensors",
		description: "create parallax effect easily"
	},
	{
		name: "usePermission",
		"package": "core",
		lastUpdated: 1657430593000,
		docs: "https://vueuse.org/core/usePermission/",
		category: "Browser",
		description: "reactive [Permissions API](https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API)",
		related: [
			"useUserMedia"
		]
	},
	{
		name: "usePointer",
		"package": "core",
		lastUpdated: 1658083596000,
		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: "usePointerLock",
		"package": "core",
		lastUpdated: 1673941699000,
		component: true,
		docs: "https://vueuse.org/core/usePointerLock/",
		category: "Sensors",
		description: "reactive [pointer lock](https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API)"
	},
	{
		name: "usePointerSwipe",
		"package": "core",
		lastUpdated: 1667953110000,
		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: "usePrecision",
		"package": "math",
		lastUpdated: 1674662786000,
		docs: "https://vueuse.org/math/usePrecision/",
		category: "@Math",
		description: "reactively set the precision of a number"
	},
	{
		name: "usePreferredColorScheme",
		"package": "core",
		lastUpdated: 1639442454000,
		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: "usePreferredContrast",
		"package": "core",
		lastUpdated: 1661240113000,
		component: true,
		docs: "https://vueuse.org/core/usePreferredContrast/",
		category: "Browser",
		description: "reactive [prefers-contrast](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-contrast) media query"
	},
	{
		name: "usePreferredDark",
		"package": "core",
		lastUpdated: 1639442454000,
		component: true,
		docs: "https://vueuse.org/core/usePreferredDark/",
		category: "Browser",
		description: "reactive dark theme preference",
		related: [
			"useColorMode",
			"useDark"
		]
	},
	{
		name: "usePreferredLanguages",
		"package": "core",
		lastUpdated: 1639442454000,
		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: "usePreferredReducedMotion",
		"package": "core",
		lastUpdated: 1659593252000,
		component: true,
		docs: "https://vueuse.org/core/usePreferredReducedMotion/",
		category: "Browser",
		description: "reactive [prefers-reduced-motion](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion) media query"
	},
	{
		name: "usePrevious",
		"package": "core",
		lastUpdated: 1674951743000,
		docs: "https://vueuse.org/core/usePrevious/",
		category: "Utilities",
		description: "holds the previous value of a ref"
	},
	{
		name: "useProjection",
		"package": "math",
		lastUpdated: 1657638060000,
		docs: "https://vueuse.org/math/useProjection/",
		category: "@Math",
		description: "reactive numeric projection from one domain to another",
		related: [
			"createGenericProjection",
			"createProjection"
		]
	},
	{
		name: "useQRCode",
		"package": "integrations",
		lastUpdated: 1657259100000,
		docs: "https://vueuse.org/integrations/useQRCode/",
		category: "@Integrations",
		description: "wrapper for [`qrcode`](https://github.com/soldair/node-qrcode)",
		importPath: "integrations/useQRCode"
	},
	{
		name: "useRafFn",
		"package": "core",
		lastUpdated: 1674954620000,
		docs: "https://vueuse.org/core/useRafFn/",
		category: "Animation",
		description: "call function on every `requestAnimationFrame`"
	},
	{
		name: "useRefHistory",
		"package": "core",
		lastUpdated: 1662386652000,
		docs: "https://vueuse.org/core/useRefHistory/",
		category: "State",
		description: "track the change history of a ref",
		related: [
			"useDebouncedRefHistory",
			"useManualRefHistory",
			"useThrottledRefHistory"
		]
	},
	{
		name: "useResizeObserver",
		"package": "core",
		lastUpdated: 1662384935000,
		docs: "https://vueuse.org/core/useResizeObserver/",
		category: "Elements",
		description: "reports changes to the dimensions of an Element's content or the border-box"
	},
	{
		name: "useRound",
		"package": "math",
		lastUpdated: 1657638060000,
		docs: "https://vueuse.org/math/useRound/",
		category: "@Math",
		description: "reactive `Math.round`"
	},
	{
		name: "useRouteHash",
		"package": "router",
		lastUpdated: 1666676087000,
		docs: "https://vueuse.org/router/useRouteHash/",
		category: "@Router",
		description: "shorthand for a reactive `route.hash`"
	},
	{
		name: "useRouteParams",
		"package": "router",
		lastUpdated: 1666676087000,
		docs: "https://vueuse.org/router/useRouteParams/",
		category: "@Router",
		description: "shorthand for a reactive `route.params`"
	},
	{
		name: "useRouteQuery",
		"package": "router",
		lastUpdated: 1674955241000,
		docs: "https://vueuse.org/router/useRouteQuery/",
		category: "@Router",
		description: "shorthand for a reactive `route.query`"
	},
	{
		name: "useRTDB",
		"package": "firebase",
		lastUpdated: 1658645224000,
		docs: "https://vueuse.org/firebase/useRTDB/",
		category: "@Firebase",
		description: "reactive [Firebase Realtime Database](https://firebase.google.com/docs/database) binding",
		importPath: "firebase/useRTDB"
	},
	{
		name: "useSchemaOrg",
		"package": "schema-org",
		description: "update schema.org reactively.",
		category: "@SchemaOrg",
		external: "https://vue-schema-org.netlify.app/api/core/use-schema-org.html"
	},
	{
		name: "useScreenOrientation",
		"package": "core",
		lastUpdated: 1657430593000,
		docs: "https://vueuse.org/core/useScreenOrientation/",
		category: "Browser",
		description: "reactive [Screen Orientation API](https://developer.mozilla.org/en-US/docs/Web/API/Screen_Orientation_API)"
	},
	{
		name: "useScreenSafeArea",
		"package": "core",
		lastUpdated: 1640682127000,
		component: true,
		docs: "https://vueuse.org/core/useScreenSafeArea/",
		category: "Browser",
		description: "reactive `env(safe-area-inset-*)`"
	},
	{
		name: "useScriptTag",
		"package": "core",
		lastUpdated: 1659556839000,
		docs: "https://vueuse.org/core/useScriptTag/",
		category: "Browser",
		description: "script tag injecting"
	},
	{
		name: "useScroll",
		"package": "core",
		lastUpdated: 1676711938000,
		directive: true,
		docs: "https://vueuse.org/core/useScroll/",
		category: "Sensors",
		description: "reactive scroll position and state"
	},
	{
		name: "useScrollLock",
		"package": "core",
		lastUpdated: 1676713396000,
		directive: true,
		docs: "https://vueuse.org/core/useScrollLock/",
		category: "Sensors",
		description: "lock scrolling of the element"
	},
	{
		name: "useSessionStorage",
		"package": "core",
		lastUpdated: 1657634978000,
		docs: "https://vueuse.org/core/useSessionStorage/",
		category: "State",
		description: "reactive [SessionStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage)",
		related: [
			"useStorage"
		]
	},
	{
		name: "useShare",
		"package": "core",
		lastUpdated: 1657718983000,
		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: "useSorted",
		"package": "core",
		lastUpdated: 1665961123000,
		docs: "https://vueuse.org/core/useSorted/",
		category: "Array",
		description: "reactive sort array"
	},
	{
		name: "useSound",
		"package": "sound",
		description: "play sound effects reactively.",
		category: "@Sound",
		external: "https://github.com/vueuse/sound#examples"
	},
	{
		name: "useSpeechRecognition",
		"package": "core",
		lastUpdated: 1662892188000,
		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",
		lastUpdated: 1676650547000,
		docs: "https://vueuse.org/core/useSpeechSynthesis/",
		category: "Sensors",
		description: "reactive [SpeechSynthesis](https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis)"
	},
	{
		"package": "motion",
		category: "@Motion",
		name: "useSpring",
		description: "spring animations.",
		external: "https://motion.vueuse.org/api/use-spring.html"
	},
	{
		name: "useStepper",
		"package": "core",
		lastUpdated: 1657132687000,
		docs: "https://vueuse.org/core/useStepper/",
		category: "Utilities",
		description: "provides helpers for building a multi-step wizard interface"
	},
	{
		name: "useStorage",
		"package": "core",
		lastUpdated: 1676387907000,
		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)",
		related: [
			"useColorMode",
			"useDark",
			"useLocalStorage",
			"useSessionStorage",
			"useStorageAsync"
		]
	},
	{
		name: "useStorageAsync",
		"package": "core",
		lastUpdated: 1676546331000,
		docs: "https://vueuse.org/core/useStorageAsync/",
		category: "State",
		description: "reactive Storage in with async support",
		related: [
			"useStorage"
		]
	},
	{
		name: "useStyleTag",
		"package": "core",
		lastUpdated: 1669416726000,
		docs: "https://vueuse.org/core/useStyleTag/",
		category: "Browser",
		description: "inject reactive `style` element in head"
	},
	{
		name: "useSubject",
		"package": "rxjs",
		lastUpdated: 1672752994000,
		docs: "https://vueuse.org/rxjs/useSubject/",
		category: "@RxJS",
		description: "bind an RxJS [`Subject`](https://rxjs.dev/guide/subject) to a `ref` and propagate value changes both ways"
	},
	{
		name: "useSubscription",
		"package": "rxjs",
		lastUpdated: 1628521945000,
		docs: "https://vueuse.org/rxjs/useSubscription/",
		category: "@RxJS",
		description: "use an RxJS [`Subscription`](https://rxjs.dev/guide/subscription) without worrying about unsubscribing from it or creating memory leaks"
	},
	{
		name: "useSum",
		"package": "math",
		lastUpdated: 1658041190000,
		docs: "https://vueuse.org/math/useSum/",
		category: "@Math",
		description: "get the sum of an array reactively"
	},
	{
		name: "useSupported",
		"package": "core",
		lastUpdated: 1657430593000,
		docs: "https://vueuse.org/core/useSupported/",
		category: "Utilities",
		description: "sSR compatibility `isSupported`"
	},
	{
		name: "useSwipe",
		"package": "core",
		lastUpdated: 1657721393000,
		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",
		lastUpdated: 1639442454000,
		docs: "https://vueuse.org/core/useTemplateRefsList/",
		category: "Component",
		description: "shorthand for binding refs to template elements and components inside `v-for`"
	},
	{
		name: "useTextareaAutosize",
		"package": "core",
		lastUpdated: 1671205095000,
		docs: "https://vueuse.org/core/useTextareaAutosize/",
		category: "Browser",
		description: "automatically update the height of a textarea depending on the content"
	},
	{
		name: "useTextDirection",
		"package": "core",
		lastUpdated: 1658657118000,
		docs: "https://vueuse.org/core/useTextDirection/",
		category: "Browser",
		description: "reactive [dir](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir) of the element's text"
	},
	{
		name: "useTextSelection",
		"package": "core",
		lastUpdated: 1646469737000,
		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",
		lastUpdated: 1658083596000,
		docs: "https://vueuse.org/core/useThrottledRefHistory/",
		category: "State",
		description: "shorthand for `useRefHistory` with throttled filter",
		related: [
			"useDebouncedRefHistory",
			"useRefHistory"
		]
	},
	{
		name: "useThrottleFn",
		"package": "shared",
		lastUpdated: 1672753228000,
		docs: "https://vueuse.org/shared/useThrottleFn/",
		category: "Utilities",
		description: "throttle execution of a function",
		related: [
			"refDebounced",
			"refThrottled",
			"useDebounceFn"
		]
	},
	{
		name: "useTimeAgo",
		"package": "core",
		lastUpdated: 1671824301000,
		component: true,
		docs: "https://vueuse.org/core/useTimeAgo/",
		category: "Time",
		description: "reactive time ago"
	},
	{
		name: "useTimeout",
		"package": "shared",
		lastUpdated: 1664157082000,
		docs: "https://vueuse.org/shared/useTimeout/",
		category: "Animation",
		description: "update value after a given time with controls"
	},
	{
		name: "useTimeoutFn",
		"package": "shared",
		lastUpdated: 1674954620000,
		docs: "https://vueuse.org/shared/useTimeoutFn/",
		category: "Animation",
		description: "wrapper for `setTimeout` with controls"
	},
	{
		name: "useTimeoutPoll",
		"package": "core",
		lastUpdated: 1658083632000,
		docs: "https://vueuse.org/core/useTimeoutPoll/",
		category: "Utilities",
		description: "use timeout to poll something"
	},
	{
		name: "useTimestamp",
		"package": "core",
		lastUpdated: 1664157082000,
		component: true,
		docs: "https://vueuse.org/core/useTimestamp/",
		category: "Animation",
		description: "reactive current timestamp"
	},
	{
		name: "useTitle",
		"package": "core",
		lastUpdated: 1665963788000,
		docs: "https://vueuse.org/core/useTitle/",
		category: "Browser",
		description: "reactive document title"
	},
	{
		name: "useToFixed",
		"package": "math",
		lastUpdated: 1659586610000,
		docs: "https://vueuse.org/math/useToFixed/",
		category: "@Math",
		description: "reactive `toFixed`",
		deprecated: true
	},
	{
		name: "useToggle",
		"package": "shared",
		lastUpdated: 1657259100000,
		docs: "https://vueuse.org/shared/useToggle/",
		category: "Utilities",
		description: "a boolean switcher with utility functions"
	},
	{
		name: "useToNumber",
		"package": "shared",
		lastUpdated: 1659592336000,
		docs: "https://vueuse.org/shared/useToNumber/",
		category: "Utilities",
		description: "reactively convert a string ref to number"
	},
	{
		name: "useToString",
		"package": "shared",
		lastUpdated: 1659592531000,
		docs: "https://vueuse.org/shared/useToString/",
		category: "Utilities",
		description: "reactively convert a ref to string"
	},
	{
		name: "useTransition",
		"package": "core",
		lastUpdated: 1674955241000,
		docs: "https://vueuse.org/core/useTransition/",
		category: "Animation",
		description: "transition between values"
	},
	{
		name: "useTrunc",
		"package": "math",
		lastUpdated: 1658043525000,
		docs: "https://vueuse.org/math/useTrunc/",
		category: "@Math",
		description: "reactive `Math.trunc`"
	},
	{
		name: "useUrlSearchParams",
		"package": "core",
		lastUpdated: 1662286506000,
		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",
		lastUpdated: 1657430593000,
		docs: "https://vueuse.org/core/useUserMedia/",
		category: "Sensors",
		description: "reactive [`mediaDevices.getUserMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia) streaming",
		related: [
			"useDevicesList",
			"useDisplayMedia",
			"usePermission"
		]
	},
	{
		name: "useVibrate",
		"package": "core",
		lastUpdated: 1657430593000,
		docs: "https://vueuse.org/core/useVibrate/",
		category: "Browser",
		description: "reactive [Vibration API](https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API)"
	},
	{
		name: "useVirtualList",
		"package": "core",
		lastUpdated: 1676174012000,
		component: true,
		docs: "https://vueuse.org/core/useVirtualList/",
		category: "Component",
		description: "create virtual lists with ease"
	},
	{
		name: "useVModel",
		"package": "core",
		lastUpdated: 1662386652000,
		docs: "https://vueuse.org/core/useVModel/",
		category: "Component",
		description: "shorthand for v-model binding",
		related: [
			"useVModels"
		]
	},
	{
		name: "useVModels",
		"package": "core",
		lastUpdated: 1657730657000,
		docs: "https://vueuse.org/core/useVModels/",
		category: "Component",
		description: "shorthand for props v-model binding",
		related: [
			"useVModel"
		]
	},
	{
		name: "useWakeLock",
		"package": "core",
		lastUpdated: 1658083596000,
		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)"
	},
	{
		name: "useWebNotification",
		"package": "core",
		lastUpdated: 1658083596000,
		docs: "https://vueuse.org/core/useWebNotification/",
		category: "Browser",
		description: "reactive [Notification](https://developer.mozilla.org/en-US/docs/Web/API/notification)"
	},
	{
		name: "useWebSocket",
		"package": "core",
		lastUpdated: 1674954839000,
		docs: "https://vueuse.org/core/useWebSocket/",
		category: "Network",
		description: "reactive [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/WebSocket) client"
	},
	{
		name: "useWebWorker",
		"package": "core",
		lastUpdated: 1666677873000,
		docs: "https://vueuse.org/core/useWebWorker/",
		category: "Browser",
		description: "simple [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers) registration and communication",
		related: [
			"useWebWorkerFn"
		]
	},
	{
		name: "useWebWorkerFn",
		"package": "core",
		lastUpdated: 1657730737000,
		docs: "https://vueuse.org/core/useWebWorkerFn/",
		category: "Browser",
		description: "run expensive functions without blocking the UI",
		related: [
			"useWebWorker"
		]
	},
	{
		name: "useWindowFocus",
		"package": "core",
		lastUpdated: 1639442454000,
		component: true,
		docs: "https://vueuse.org/core/useWindowFocus/",
		category: "Elements",
		description: "reactively track window focus with `window.onfocus` and `window.onblur` events"
	},
	{
		name: "useWindowScroll",
		"package": "core",
		lastUpdated: 1676590806000,
		docs: "https://vueuse.org/core/useWindowScroll/",
		category: "Elements",
		description: "reactive window scroll"
	},
	{
		name: "useWindowSize",
		"package": "core",
		lastUpdated: 1662285565000,
		component: true,
		docs: "https://vueuse.org/core/useWindowSize/",
		category: "Elements",
		description: "reactive window size"
	},
	{
		name: "useZoomFactor",
		"package": "electron",
		lastUpdated: 1658645224000,
		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",
		lastUpdated: 1658645224000,
		docs: "https://vueuse.org/electron/useZoomLevel/",
		category: "@Electron",
		description: "reactive [WebFrame](https://www.electronjs.org/docs/api/web-frame#webframe) zoom level"
	},
	{
		name: "utils",
		"package": "shared",
		lastUpdated: 1672752994000,
		internal: true
	},
	{
		name: "watchArray",
		"package": "shared",
		lastUpdated: 1657133473000,
		docs: "https://vueuse.org/shared/watchArray/",
		category: "Watch",
		description: "watch for an array with additions and removals"
	},
	{
		name: "watchAtMost",
		"package": "shared",
		lastUpdated: 1662892188000,
		docs: "https://vueuse.org/shared/watchAtMost/",
		category: "Watch",
		description: "`watch` with the number of times triggered"
	},
	{
		name: "watchDebounced",
		"package": "shared",
		lastUpdated: 1662892188000,
		docs: "https://vueuse.org/shared/watchDebounced/",
		category: "Watch",
		description: "debounced watch",
		alias: [
			"debouncedWatch"
		]
	},
	{
		name: "watchIgnorable",
		"package": "shared",
		lastUpdated: 1655390134000,
		docs: "https://vueuse.org/shared/watchIgnorable/",
		category: "Watch",
		description: "ignorable watch",
		alias: [
			"ignorableWatch"
		]
	},
	{
		name: "watchOnce",
		"package": "shared",
		lastUpdated: 1662892188000,
		docs: "https://vueuse.org/shared/watchOnce/",
		category: "Watch",
		description: "`watch` that only triggers once"
	},
	{
		name: "watchPausable",
		"package": "shared",
		lastUpdated: 1662892188000,
		docs: "https://vueuse.org/shared/watchPausable/",
		category: "Watch",
		description: "pausable watch",
		alias: [
			"pausableWatch"
		]
	},
	{
		name: "watchThrottled",
		"package": "shared",
		lastUpdated: 1657259100000,
		docs: "https://vueuse.org/shared/watchThrottled/",
		category: "Watch",
		description: "throttled watch",
		alias: [
			"throttledWatch"
		]
	},
	{
		name: "watchTriggerable",
		"package": "shared",
		lastUpdated: 1657077213000,
		docs: "https://vueuse.org/shared/watchTriggerable/",
		category: "Watch",
		description: "watch that can be triggered manually"
	},
	{
		name: "watchWithFilter",
		"package": "shared",
		lastUpdated: 1662892188000,
		docs: "https://vueuse.org/shared/watchWithFilter/",
		category: "Watch",
		description: "`watch` with additional EventFilter control"
	},
	{
		name: "whenever",
		"package": "shared",
		lastUpdated: 1658645224000,
		docs: "https://vueuse.org/shared/whenever/",
		category: "Watch",
		description: "shorthand for watching value to be truthy"
	}
];
var _metadata = {
	packages: packages$1,
	categories: categories$1,
	functions: functions$1
};

const categoriesOrder = [
  "State",
  "Elements",
  "Browser",
  "Sensors",
  "Network",
  "Animation",
  "Component",
  "Watch",
  "Reactivity",
  "Array",
  "Time",
  "Utilities"
];
const metadata = _metadata;
const functions = functions$1;
const packages = packages$1;
const categories = categories$1;
const functionNames = functions.map((f) => f.name);
const categoryNames = Array.from(categories).sort((a, b) => categoriesOrder.indexOf(a) - categoriesOrder.indexOf(b)).sort((a, b) => a.startsWith("@") ? 1 : b.startsWith("@") ? -1 : 0);
const coreCategoryNames = categoryNames.filter((f) => !f.startsWith("@"));
const addonCategoryNames = categoryNames.filter((f) => f.startsWith("@"));
const getFunction = (name) => metadata.functions.find((f) => f.name === name);

function getCategories(functions) {
  return uniq(functions.filter((i) => !i.internal).map((i) => i.category).filter(Boolean)).sort((a, b) => a.startsWith("@") && !b.startsWith("@") ? 1 : b.startsWith("@") && !a.startsWith("@") ? -1 : a.localeCompare(b));
}
function uniq(a) {
  return Array.from(new Set(a));
}

exports.addonCategoryNames = addonCategoryNames;
exports.categories = categories;
exports.categoryNames = categoryNames;
exports.coreCategoryNames = coreCategoryNames;
exports.functionNames = functionNames;
exports.functions = functions;
exports.getCategories = getCategories;
exports.getFunction = getFunction;
exports.metadata = metadata;
exports.packages = packages;
exports.uniq = uniq;


code:
interface PackageManifest {
    name: string;
    display: string;
    addon?: boolean;
    author?: string;
    description?: string;
    external?: string[];
    globals?: Record<string, string>;
    manualImport?: boolean;
    deprecated?: boolean;
    submodules?: boolean;
    build?: boolean;
    iife?: boolean;
    cjs?: boolean;
    mjs?: boolean;
    dts?: boolean;
    target?: string;
    utils?: boolean;
    copy?: string[];
}
interface VueUseFunction {
    name: string;
    package: string;
    importPath?: string;
    lastUpdated?: number;
    category?: string;
    description?: string;
    docs?: string;
    deprecated?: boolean;
    internal?: boolean;
    component?: boolean;
    directive?: boolean;
    external?: string;
    alias?: string[];
    related?: string[];
}
interface VueUsePackage extends PackageManifest {
    dir: string;
    docs?: string;
}
interface PackageIndexes {
    packages: Record<string, VueUsePackage>;
    categories: string[];
    functions: VueUseFunction[];
}
interface CommitInfo {
    functions: string[];
    version?: string;
    hash: string;
    date: string;
    message: string;
    refs?: string;
    body?: string;
    author_name: string;
    author_email: string;
}
interface ContributorInfo {
    name: string;
    count: number;
    hash: string;
}

declare const metadata: PackageIndexes;
declare const functions: VueUseFunction[];
declare const packages: Record<string, VueUsePackage>;
declare const categories: string[];
declare const functionNames: string[];
declare const categoryNames: string[];
declare const coreCategoryNames: string[];
declare const addonCategoryNames: string[];
declare const getFunction: (name: string) => VueUseFunction | undefined;

declare function getCategories(functions: VueUseFunction[]): string[];
declare function uniq<T extends any[]>(a: T): any[];

export { CommitInfo, ContributorInfo, PackageIndexes, PackageManifest, VueUseFunction, VueUsePackage, addonCategoryNames, categories, categoryNames, coreCategoryNames, functionNames, functions, getCategories, getFunction, metadata, packages, uniq };