Skip to content

Commit ae2cc98

Browse files
committed
fix: #1624
feat: create triggerDelay prop
1 parent a82c2bc commit ae2cc98

File tree

2 files changed

+5
-7
lines changed

2 files changed

+5
-7
lines changed

src/lib/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1865,6 +1865,7 @@ export interface TriggeredToggleEvent extends ToggleEvent {
18651865

18661866
export interface PopperProps extends Omit<HTMLAttributes<HTMLDivElement>, "onbeforetoggle" | "ontoggle"> {
18671867
triggeredBy?: string;
1868+
triggerDelay?: number;
18681869
trigger?: "hover" | "click";
18691870
placement?: Placement;
18701871
arrow?: boolean;

src/lib/utils/Popper.svelte

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,11 @@
77
import { sineIn } from "svelte/easing";
88
import clsx from "clsx";
99
10-
const TRIGGER_DELAY = 200;
11-
12-
let { triggeredBy, trigger = "click", placement = "top", offset = 8, arrow = false, yOnly = false, strategy = "absolute", reference, middlewares = [dom.flip(), dom.shift()], onbeforetoggle: _onbeforetoggle, ontoggle: _ontoggle, class: className = "", arrowClass = "", isOpen = $bindable(false), transitionParams, transition = fade, children, ...restProps }: PopperProps = $props();
10+
let { triggeredBy, triggerDelay = 200, trigger = "click", placement = "top", offset = 8, arrow = false, yOnly = false, strategy = "absolute", reference, middlewares = [dom.flip(), dom.shift()], onbeforetoggle: _onbeforetoggle, ontoggle: _ontoggle, class: className = "", arrowClass = "", isOpen = $bindable(false), transitionParams, transition = fade, children, ...restProps }: PopperProps = $props();
1311
1412
let focusable: boolean = true;
1513
let clickable: boolean = $derived(trigger === "click");
1614
let hoverable: boolean = $derived(trigger === "hover");
17-
1815
let popover: HTMLElement | null = $state(null);
1916
let invoker: HTMLElement | null = null;
2017
let referenceElement: HTMLElement | null = null;
@@ -56,7 +53,7 @@
5653
async function open_popover(ev: Event) {
5754
// throttle
5855
isTriggered = true;
59-
await new Promise((resolve) => setTimeout(resolve, TRIGGER_DELAY));
56+
await new Promise((resolve) => setTimeout(resolve, triggerDelay));
6057
if (!isTriggered) return;
6158
6259
ev.preventDefault();
@@ -65,7 +62,7 @@
6562
invoker = ev.target as HTMLElement;
6663
// if (invoker) invoker.popoverTargetElement = popover;
6764
isOpen = false;
68-
await new Promise((resolve) => setTimeout(resolve, TRIGGER_DELAY));
65+
await new Promise((resolve) => setTimeout(resolve, triggerDelay));
6966
}
7067
7168
if (ev.type === "mousedown") {
@@ -77,7 +74,7 @@
7774
7875
async function close_popover(ev: Event) {
7976
isTriggered = false;
80-
await new Promise((resolve) => setTimeout(resolve, TRIGGER_DELAY));
77+
await new Promise((resolve) => setTimeout(resolve, triggerDelay));
8178
if (isTriggered) return;
8279
8380
// if popover has focus don't close when leaving the invoker

0 commit comments

Comments
 (0)