Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ce9e5d7

Browse files
OrbisKantfu
andauthored
fix(useMouse): check for MouseEvent instead of Touch to work with FF (#4457)
Co-authored-by: Anthony Fu <[email protected]> Co-authored-by: Anthony Fu <[email protected]>
1 parent d5dd8fd commit ce9e5d7

File tree

8 files changed

+51
-20
lines changed

8 files changed

+51
-20
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"scripts": {
1111
"build": "nr update && pnpm -r run build",
1212
"build:redirects": "tsx scripts/redirects.ts",
13-
"build:types": "tsc --emitDeclarationOnly",
13+
"build:types": "vue-tsc --emitDeclarationOnly",
1414
"clean": "tsx scripts/clean.ts",
1515
"dev": "nr update && nr docs",
1616
"docs": "vitepress dev packages --open",
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { page } from '@vitest/browser/context'
2+
import { describe, expect, it } from 'vitest'
3+
import Demo from './demo.vue'
4+
5+
describe('useMouse Demo', () => {
6+
it('should render', async () => {
7+
const screen = page.render(Demo)
8+
await expect.element(screen.baseElement).toBeInTheDocument()
9+
})
10+
})

packages/core/useMouse/demo.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ const parentEl = useParentElement()
99
const mouseDefault = reactive(useMouse())
1010
const textDefault = stringify(mouseDefault)
1111
12-
const extractor: UseMouseEventExtractor = (e) => {
13-
if (typeof Touch !== 'undefined' && e instanceof Touch)
12+
const extractor: UseMouseEventExtractor = (event) => {
13+
if (event instanceof MouseEvent)
14+
return [event.offsetX, event.offsetY]
15+
else
1416
return null
15-
const event = e as MouseEvent
16-
return [event.offsetX, event.offsetY]
1717
}
1818
1919
const mouseWithExtractor = reactive(useMouse({ target: parentEl, type: extractor }))

packages/core/useMouse/index.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ import { useMouse, useParentElement } from '@vueuse/core'
3434
const parentEl = useParentElement()
3535

3636
const extractor: UseMouseEventExtractor = event => (
37-
event instanceof Touch
38-
? null
39-
: [event.offsetX, event.offsetY]
37+
event instanceof MouseEvent
38+
? [event.offsetX, event.offsetY]
39+
: null
4040
)
4141

4242
const { x, y, sourceType } = useMouse({ target: parentEl, type: extractor })

packages/core/useMouse/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ const UseMouseBuiltinExtractors: Record<UseMouseCoordType, UseMouseEventExtracto
5555
page: event => [event.pageX, event.pageY],
5656
client: event => [event.clientX, event.clientY],
5757
screen: event => [event.screenX, event.screenY],
58-
movement: event => (event instanceof Touch
59-
? null
60-
: [event.movementX, event.movementY]
58+
movement: event => (event instanceof MouseEvent
59+
? [event.movementX, event.movementY]
60+
: null
6161
),
6262
} as const
6363

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { page, userEvent } from '@vitest/browser/context'
2+
import { describe, expect, it, vi } from 'vitest'
3+
import Demo from './demo.vue'
4+
5+
describe('usePointerLock Demo', () => {
6+
it('should render', async () => {
7+
const screen = page.render(Demo)
8+
await expect.element(screen.baseElement).toBeInTheDocument()
9+
})
10+
11+
it('should not throw error when click or hover', async () => {
12+
const consoleErrorSpy = vi.spyOn(console, 'error')
13+
const screen = page.render(Demo)
14+
await userEvent.hover(screen.baseElement)
15+
expect(consoleErrorSpy).not.toHaveBeenCalled()
16+
await userEvent.click(screen.baseElement)
17+
expect(consoleErrorSpy).not.toHaveBeenCalled()
18+
})
19+
})

packages/core/usePointerLock/index.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ConfigurableDocument } from '../_configurable'
2-
import type { MaybeElementRef } from '../unrefElement'
2+
import type { MaybeElement, MaybeElementRef } from '../unrefElement'
33
import { until } from '@vueuse/shared'
44
import { ref } from 'vue'
55
import { defaultDocument } from '../_configurable'
@@ -13,8 +13,6 @@ import { useSupported } from '../useSupported'
1313
// }
1414
// }
1515

16-
type MaybeHTMLElement = HTMLElement | undefined | null
17-
1816
export interface UsePointerLockOptions extends ConfigurableDocument {
1917
// pointerLockOptions?: PointerLockOptions
2018
}
@@ -26,24 +24,24 @@ export interface UsePointerLockOptions extends ConfigurableDocument {
2624
* @param target
2725
* @param options
2826
*/
29-
export function usePointerLock(target?: MaybeElementRef<MaybeHTMLElement>, options: UsePointerLockOptions = {}) {
27+
export function usePointerLock(target?: MaybeElementRef, options: UsePointerLockOptions = {}) {
3028
const { document = defaultDocument } = options
3129

3230
const isSupported = useSupported(() => document && 'pointerLockElement' in document)
3331

34-
const element = ref<MaybeHTMLElement>()
32+
const element = ref<MaybeElement>()
3533

36-
const triggerElement = ref<MaybeHTMLElement>()
34+
const triggerElement = ref<MaybeElement>()
3735

38-
let targetElement: MaybeHTMLElement
36+
let targetElement: MaybeElement
3937

4038
if (isSupported.value) {
4139
const listenerOptions = { passive: true }
4240

4341
useEventListener(document, 'pointerlockchange', () => {
4442
const currentElement = document!.pointerLockElement ?? element.value
4543
if (targetElement && currentElement === targetElement) {
46-
element.value = document!.pointerLockElement as MaybeHTMLElement
44+
element.value = document!.pointerLockElement as MaybeElement
4745
if (!element.value)
4846
targetElement = triggerElement.value = null
4947
}
@@ -59,7 +57,7 @@ export function usePointerLock(target?: MaybeElementRef<MaybeHTMLElement>, optio
5957
}
6058

6159
async function lock(
62-
e: MaybeElementRef<MaybeHTMLElement> | Event,
60+
e: MaybeElementRef | Event,
6361
// options?: PointerLockOptions,
6462
) {
6563
if (!isSupported.value)

vitest.config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import { resolve } from 'node:path'
2+
import vue from '@vitejs/plugin-vue'
23
import { coverageConfigDefaults, defineConfig } from 'vitest/config'
34

45
export default defineConfig({
6+
plugins: [
7+
vue(),
8+
],
59
resolve: {
610
alias: {
711
'@vueuse/shared': resolve(import.meta.dirname, 'packages/shared/index.ts'),

0 commit comments

Comments
 (0)