1+ import { on } from 'svelte/events' ;
12/**
23 * Dispatch a `clickoutside` {@link https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent | CustomEvent } on click outside of node
34 * @example
5152 * @returns {import('./public').ClickOutsideActionReturn }
5253 */
5354export function clickoutside ( node , param = { enabled : true } ) {
54- let { enabled, eventType, nodeForEvent, options, capture } = resolveConfig ( param ) ;
55+ let { enabled, eventType, nodeForEvent, options } = resolveConfig ( param ) ;
5556
5657 /**
5758 * @param {Event } event
@@ -63,18 +64,20 @@ export function clickoutside(node, param = { enabled: true }) {
6364 }
6465 }
6566
67+ /** @type {undefined | (() => void) } */
68+ let off ;
6669 if ( param . enabled !== false ) {
67- nodeForEvent . addEventListener ( eventType , handle , options ) ;
70+ off = on ( /** @type { Element } */ ( nodeForEvent ) , eventType , handle , options ) ;
6871 }
6972
7073 return {
7174 update ( update ) {
72- nodeForEvent . removeEventListener ( eventType , handle , capture ) ;
73- ( { enabled, eventType, nodeForEvent, options, capture } = resolveConfig ( update ) ) ;
74- if ( enabled ) nodeForEvent . addEventListener ( eventType , handle , options ) ;
75+ off ?. ( ) ;
76+ ( { enabled, eventType, nodeForEvent, options } = resolveConfig ( update ) ) ;
77+ if ( enabled ) off = on ( /** @type { Element } */ ( nodeForEvent ) , eventType , handle , options ) ;
7578 } ,
7679 destroy ( ) {
77- nodeForEvent . removeEventListener ( eventType , handle , capture ) ;
80+ off ?. ( ) ;
7881 } ,
7982 } ;
8083}
@@ -86,17 +89,17 @@ export function clickoutside(node, param = { enabled: true }) {
8689 * enabled: boolean;
8790 * nodeForEvent: Element | Document;
8891 * eventType: string;
89- * options: boolean | AddEventListenerOptions | undefined;
90- * capture: boolean | undefined;
92+ * options?: AddEventListenerOptions;
9193 * }}
9294 */
9395export function resolveConfig ( param = { } ) {
9496 return {
9597 enabled : param . enabled ?? true ,
9698 nodeForEvent : param . limit ?. parent ?? document ,
9799 eventType : param . event ?? 'click' ,
98- options : param . options ,
99- capture : typeof param . options === 'object' ? param . options ?. capture : param . options ,
100+ options : typeof param . options === 'boolean'
101+ ? { capture : param . options }
102+ : param . options ,
100103 } ;
101104}
102105
0 commit comments