Pulled ALL skills from 15 source repositories: - anthropics/skills: 16 (docs, design, MCP, testing) - obra/superpowers: 14 (TDD, debugging, agents, planning) - coreyhaines31/marketingskills: 25 (marketing, CRO, SEO, growth) - better-auth/skills: 5 (auth patterns) - vercel-labs/agent-skills: 5 (React, design, Vercel) - antfu/skills: 16 (Vue, Vite, Vitest, pnpm, Turborepo) - Plus 13 individual skills from various repos Mosaic Stack is not limited to coding — the Orchestrator and subagents serve coding, business, design, marketing, writing, logistics, analysis, and more. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
115 lines
2.5 KiB
Markdown
115 lines
2.5 KiB
Markdown
---
|
|
category: Sensors
|
|
---
|
|
|
|
# useMouse
|
|
|
|
Reactive mouse position
|
|
|
|
## Basic Usage
|
|
|
|
```ts twoslash
|
|
import { useMouse } from '@vueuse/core'
|
|
|
|
const { x, y, sourceType } = useMouse()
|
|
```
|
|
|
|
Touch is enabled by default. To only detect mouse changes, set `touch` to `false`.
|
|
The `dragover` event is used to track mouse position while dragging.
|
|
|
|
```ts twoslash
|
|
import { useMouse } from '@vueuse/core'
|
|
// ---cut---
|
|
const { x, y } = useMouse({ touch: false })
|
|
```
|
|
|
|
## Custom Extractor
|
|
|
|
It's also possible to provide a custom extractor function to get the position from the event.
|
|
|
|
```ts twoslash
|
|
import type { UseMouseEventExtractor } from '@vueuse/core'
|
|
import { useMouse, useParentElement } from '@vueuse/core'
|
|
|
|
const parentEl = useParentElement()
|
|
|
|
const extractor: UseMouseEventExtractor = event => (
|
|
event instanceof MouseEvent
|
|
? [event.offsetX, event.offsetY]
|
|
: null
|
|
)
|
|
|
|
const { x, y, sourceType } = useMouse({ target: parentEl, type: extractor })
|
|
```
|
|
|
|
## Component Usage
|
|
|
|
```vue
|
|
<template>
|
|
<UseMouse v-slot="{ x, y }">
|
|
x: {{ x }}
|
|
y: {{ y }}
|
|
</UseMouse>
|
|
</template>
|
|
```
|
|
|
|
## Type Declarations
|
|
|
|
```ts
|
|
export type UseMouseCoordType = "page" | "client" | "screen" | "movement"
|
|
export type UseMouseSourceType = "mouse" | "touch" | null
|
|
export type UseMouseEventExtractor = (
|
|
event: MouseEvent | Touch,
|
|
) => [x: number, y: number] | null | undefined
|
|
export interface UseMouseOptions
|
|
extends ConfigurableWindow,
|
|
ConfigurableEventFilter {
|
|
/**
|
|
* Mouse position based by page, client, screen, or relative to previous position
|
|
*
|
|
* @default 'page'
|
|
*/
|
|
type?: UseMouseCoordType | UseMouseEventExtractor
|
|
/**
|
|
* Listen events on `target` element
|
|
*
|
|
* @default 'Window'
|
|
*/
|
|
target?: MaybeRefOrGetter<Window | EventTarget | null | undefined>
|
|
/**
|
|
* Listen to `touchmove` events
|
|
*
|
|
* @default true
|
|
*/
|
|
touch?: boolean
|
|
/**
|
|
* Listen to `scroll` events on window, only effective on type `page`
|
|
*
|
|
* @default true
|
|
*/
|
|
scroll?: boolean
|
|
/**
|
|
* Reset to initial value when `touchend` event fired
|
|
*
|
|
* @default false
|
|
*/
|
|
resetOnTouchEnds?: boolean
|
|
/**
|
|
* Initial values
|
|
*/
|
|
initialValue?: Position
|
|
}
|
|
/**
|
|
* Reactive mouse position.
|
|
*
|
|
* @see https://vueuse.org/useMouse
|
|
* @param options
|
|
*/
|
|
export declare function useMouse(options?: UseMouseOptions): {
|
|
x: ShallowRef<number, number>
|
|
y: ShallowRef<number, number>
|
|
sourceType: ShallowRef<UseMouseSourceType, UseMouseSourceType>
|
|
}
|
|
export type UseMouseReturn = ReturnType<typeof useMouse>
|
|
```
|