import type { BindableContext, BindableRefs, PropFn } from "@zag-js/core" import type { NavigationMenuSchema } from "./navigation-menu.types" export function setCloseTimeout( refs: BindableRefs, context: BindableContext, prop: PropFn, ) { clearCloseTimeout(refs) const closeTimeoutId = window.setTimeout(() => { context.set("value", "") }, prop("closeDelay")) refs.set("closeTimeoutId", closeTimeoutId) } export function clearCloseTimeout(refs: BindableRefs) { const closeTimeoutId = refs.get("closeTimeoutId") if (closeTimeoutId) { clearTimeout(closeTimeoutId) refs.set("closeTimeoutId", null) } } export function setOpenTimeout(refs: BindableRefs, value: string, timeoutId: number) { const openTimeoutIds = refs.get("openTimeoutIds") refs.set("openTimeoutIds", { ...openTimeoutIds, [value]: timeoutId, }) } export function clearOpenTimeout(refs: BindableRefs, value: string) { const openTimeoutIds = refs.get("openTimeoutIds") const timeoutId = openTimeoutIds[value] if (timeoutId) { clearTimeout(timeoutId) // Remove the property by destructuring const { [value]: _, ...rest } = openTimeoutIds refs.set("openTimeoutIds", rest) } } export function clearAllOpenTimeouts(refs: BindableRefs) { const openTimeoutIds = refs.get("openTimeoutIds") Object.values(openTimeoutIds).forEach((timeoutId) => { if (timeoutId) clearTimeout(timeoutId) }) refs.set("openTimeoutIds", {}) }