import { createEffect, createSignal, onCleanup } from "solid-js";
export const createClickOutside = (fn, options) => {
    const [ref, setRef] = createSignal();
    const handleClickOutside = (event) => {
        if (ref() && !ref()?.contains(event.target)) {
            fn();
        }
    };
    const handleEscape = (event) => {
        if (!options?.callOnEscapeButtonClick)
            return;
        if (event.key === "Escape") {
            fn();
        }
    };
    const handleTab = (event) => {
        if (!options?.callOnTabButtonClick)
            return;
        if (event.key === "Tab") {
            fn();
        }
    };
    const handleEnter = (event) => {
        if (!options?.callOnEnterButtonClick)
            return;
        if (event.key === "Enter") {
            fn();
        }
    };
    createEffect(() => {
        // document.addEventListener("mousedown", handleClickOutside);
        document.addEventListener("click", handleClickOutside);
        document.addEventListener("keydown", handleEscape);
        document.addEventListener("keydown", handleTab);
        document.addEventListener("keydown", handleEnter);
        onCleanup(() => {
            // document.removeEventListener("mousedown", handleClickOutside);
            document.removeEventListener("click", handleClickOutside);
            document.removeEventListener("keydown", handleEscape);
            document.removeEventListener("keydown", handleTab);
            document.removeEventListener("keydown", handleEnter);
        });
    });
    return setRef;
};
