From b49dff9a86e405963c569141dfbc5fc1e29d04a0 Mon Sep 17 00:00:00 2001 From: untemps Date: Sun, 3 Jul 2022 18:40:08 +0200 Subject: [PATCH] fix: Fix tooltip focus management, #40 --- .prettierignore | 5 ++++- .prettierrc | 11 +++++++++++ src/Tooltip.js | 24 +++++++++++++++--------- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/.prettierignore b/.prettierignore index 763301f..3b7f27c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,5 @@ -dist/ +.husky/ +.idea/ +build/ +coverage/ node_modules/ \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 792a253..ab33a19 100644 --- a/.prettierrc +++ b/.prettierrc @@ -14,6 +14,17 @@ "parser": "babylon" } }, + { + "files": "./**/*.svelte", + "options": { + "svelteBracketNewLine": false, + "svelteAllowShorthand": false, + "svelteSortOrder" : "options-scripts-styles-markup", + "plugins": [ + "prettier-plugin-svelte" + ] + } + }, { "files": "./**/*.json", "options": { diff --git a/src/Tooltip.js b/src/Tooltip.js index bca7249..2e782bc 100644 --- a/src/Tooltip.js +++ b/src/Tooltip.js @@ -271,14 +271,14 @@ class Tooltip { await this.#transitionTooltip(1) } - this.#target.appendChild(this.#tooltip) - this.#observer.wait(this.#tooltip, null, { events: [DOMObserver.EXIST, DOMObserver.ADD] }).then(() => { + this.#observer.wait(this.#tooltip, null, { events: [DOMObserver.ADD] }).then(({ node }) => { this.#positionTooltip() }) + this.#target.appendChild(this.#tooltip) if (this.#contentActions) { Object.entries(this.#contentActions).forEach( - ([key, { eventType, callback, callbackParams, closeOnCallback }]) => { + ([key, { eventType, callback, callbackParams, closeOnCallback }], i) => { const trigger = key === '*' ? this.#tooltip : this.#tooltip.querySelector(key) if (trigger) { const listener = (event) => { @@ -289,6 +289,8 @@ class Tooltip { } trigger.addEventListener(eventType, listener) this.#events.push({ trigger, eventType, listener }) + + if (i === 0) trigger.focus() } } ) @@ -352,14 +354,18 @@ class Tooltip { }) } - async #onTargetEnter() { - await this.#waitForDelay(this.#enterDelay) - await this.#appendTooltipToTarget() + async #onTargetEnter(e) { + if (this.#target === e.target) { + await this.#waitForDelay(this.#enterDelay) + await this.#appendTooltipToTarget() + } } - async #onTargetLeave() { - await this.#waitForDelay(this.#leaveDelay) - await this.#removeTooltipFromTarget() + async #onTargetLeave(e) { + if (this.#target === e.target || !this.#target.contains(e.target)) { + await this.#waitForDelay(this.#leaveDelay) + await this.#removeTooltipFromTarget() + } } async #onWindowChange(e) {