From 1432ba6fecd4fea4114dfb2055adcd5778191433 Mon Sep 17 00:00:00 2001 From: MoonLyss Date: Thu, 5 Sep 2024 14:46:58 +0200 Subject: [PATCH] Add document listener --- package.json | 2 +- src/lib/actions/document.ts | 26 ++++++++++++++++++++++++++ src/lib/actions/index.ts | 1 + 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/lib/actions/document.ts diff --git a/package.json b/package.json index 83b474f..cee271b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@selenite/commons", - "version": "0.24.12", + "version": "0.25.0", "repository": "github:ShaitanLyss/selenite-commons", "license": "MIT", "keywords": [ diff --git a/src/lib/actions/document.ts b/src/lib/actions/document.ts new file mode 100644 index 0000000..bd27fe5 --- /dev/null +++ b/src/lib/actions/document.ts @@ -0,0 +1,26 @@ +import type { Action } from 'svelte/action'; + +export type DocumentParams = DocumentEventMap & AddEventListenerOptions; +export const documentListener: Action = (node, params: DocumentParams) => { + function setup() { + Object.keys(params).forEach((key) => { + // @ts-expect-error Ignore type error + document.addEventListener(key, params[key], params); + }); + } + setup() + + return { + destroy() { + Object.keys(params).forEach((key) => { + // @ts-expect-error Ignore type error + document.removeEventListener(key, params[key], params); + }); + }, + update(parameter) { + this.destroy?.() + params = parameter; + setup() + }, + }; +}; diff --git a/src/lib/actions/index.ts b/src/lib/actions/index.ts index 65f5ea8..6cbc5a2 100644 --- a/src/lib/actions/index.ts +++ b/src/lib/actions/index.ts @@ -18,6 +18,7 @@ export * from './keyboard'; export * from './resizable'; export * from './box-selection' export * from '@neodrag/svelte'; +export * from './document'; let handleFocusLeaveRefCount = 0; let handleFocusLeaveCallbacks: ((isKeyboard: boolean) => void)[] = []; function handleKeydown(e: KeyboardEvent) {