📄 onClickOutside¶
📊 Analysis Summary¶
| Metric | Count |
|---|---|
| 🔧 Functions | 8 |
| 📦 Imports | 13 |
| 📊 Variables & Constants | 1 |
| 📐 Interfaces | 1 |
| 📑 Type Aliases | 2 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/core/onClickOutside/index.ts
📦 Imports¶
| Name | Source |
|---|---|
Fn |
@vueuse/shared |
ComponentPublicInstance |
vue |
MaybeRefOrGetter |
vue |
VNode |
vue |
ConfigurableWindow |
../_configurable |
MaybeComputedElementRef |
../unrefElement |
MaybeElementRef |
../unrefElement |
isIOS |
@vueuse/shared |
noop |
@vueuse/shared |
toValue |
vue |
defaultWindow |
../_configurable |
unrefElement |
../unrefElement |
useEventListener |
../useEventListener |
Variables & Constants¶
| Name | Type | Kind | Value | Exported |
|---|---|---|---|---|
_iOSWorkaround |
boolean |
let/var | false |
✗ |
Functions¶
onClickOutside(target: MaybeComputedElementRef, handler: OnClickOutsideHandler<T>, options: T): Fn¶
Listen for clicks outside of an element.
Parameters:
targetany: No descriptionhandlerany: No descriptionoptionsany: No description
See: https://vueuse.org/onClickOutside
Raw JSDoc
Code
Internal helpers¶
Declared inside another function in this file.
shouldIgnore(event: Event): any¶
Parameters:
eventEvent
Returns: any
Calls:
toValue(ignore).someArray.from(window.document.querySelectorAll(target)) .someevent.composedPath().includesunrefElement (from ../unrefElement)
Code
(event: Event) => {
return toValue(ignore).some((target) => {
if (typeof target === 'string') {
return Array.from(window.document.querySelectorAll(target))
.some(el => el === event.target || event.composedPath().includes(el))
}
else {
const el = unrefElement(target)
return el && (event.target === el || event.composedPath().includes(el))
}
})
}
hasMultipleRoots(target: MaybeComputedElementRef): boolean¶
Determines if the given target has multiple root elements. Referenced from: https://github.com/vuejs/test-utils/blob/ccb460be55f9f6be05ab708500a41ec8adf6f4bc/src/vue-wrapper.ts#L21
Raw JSDoc
Calls:
toValue (from vue)
Code
checkMultipleRoots(target: MaybeComputedElementRef, event: Event): boolean¶
Parameters:
targetMaybeComputedElementRefeventEvent
Returns: boolean
Calls:
toValue (from vue)Array.isArraychildren.someevent.composedPath().includes
Internal Comments:
Code
function checkMultipleRoots(target: MaybeComputedElementRef, event: Event): boolean {
const vm = toValue(target) as ComponentPublicInstance
const children = vm.$.subTree && vm.$.subTree.children
if (children == null || !Array.isArray(children))
return false
// @ts-expect-error should be VNode
return children.some((child: VNode) => child.el === event.target || event.composedPath().includes(child.el))
}
listener(event: Event): void¶
Parameters:
eventEvent
Returns: void
Calls:
unrefElement (from ../unrefElement)hasMultipleRootscheckMultipleRootsevent.composedPath().includesshouldIgnorehandler
Code
(event: Event) => {
const el = unrefElement(target)
if (event.target == null)
return
if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event))
return
if (!el || el === event.target || event.composedPath().includes(el))
return
if ('detail' in event && event.detail === 0)
shouldListen = !shouldIgnore(event)
if (!shouldListen) {
shouldListen = true
return
}
handler(event as any)
}
stop(): void¶
Returns: void
Calls:
cleanup.forEach
cancel(): void¶
Returns: void
trigger(event: Event): void¶
Parameters:
eventEvent
Returns: void
Calls:
listener
Interfaces¶
OnClickOutsideOptions<Controls extends boolean = false>¶
Interface Code
export interface OnClickOutsideOptions<Controls extends boolean = false> extends ConfigurableWindow {
/**
* List of elements that should not trigger the event,
* provided as Refs or CSS Selectors.
*/
ignore?: MaybeRefOrGetter<(MaybeElementRef | string)[]>
/**
* Use capturing phase for internal event listener.
* @default true
*/
capture?: boolean
/**
* Run handler function if focus moves to an iframe.
* @default false
*/
detectIframe?: boolean
/**
* Use controls to cancel/trigger listener.
* @default false
*/
controls?: Controls
}
Properties¶
| Name | Type | Optional | Description |
|---|---|---|---|
ignore |
MaybeRefOrGetter<(MaybeElementRef \| string)[]> |
✓ | not shown |
capture |
boolean |
✓ | not shown |
detectIframe |
boolean |
✓ | not shown |
controls |
Controls |
✓ | not shown |
Type Aliases¶
OnClickOutsideHandler<T extends OnClickOutsideOptions<boolean> = OnClickOutsideOptions>¶
type OnClickOutsideHandler<T extends OnClickOutsideOptions<boolean> = OnClickOutsideOptions> = (
event: (T['detectIframe'] extends true ? FocusEvent : never)
| (T['controls'] extends true ? Event : never)
| PointerEvent,
) => void;
OnClickOutsideReturn<Controls extends boolean = false>¶
type OnClickOutsideReturn<Controls extends boolean = false> = Controls extends false ? Fn : {
stop: Fn
cancel: Fn
trigger: (event: Event) => void
};
Generated by Syntax Scribe