import { MutableRefObject, useEffect, useRef } from "react"; export function generateUUID() { // Public Domain/MIT var d = new Date().getTime(); //Timestamp var d2 = (typeof performance !== "undefined" && performance.now && performance.now() * 1000) || 0; //Time in microseconds since page-load or 0 if unsupported return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = Math.random() * 16; //random number between 0 and 16 if (d > 0) { //Use timestamp until depleted r = (d + r) % 16 | 0; d = Math.floor(d / 16); } else { //Use microseconds since page-load if supported r = (d2 + r) % 16 | 0; d2 = Math.floor(d2 / 16); } return (c === "x" ? r : (r & 0x3) | 0x8).toString(16); }); } export const useClickOutside = ( elementRefs: MutableRefObject[], callback: (event: Event) => void ): void => { const callbackRef = useRef(callback); callbackRef.current = callback; useEffect(() => { const handleClickOutside = (event: Event): void => { if ( elementRefs.every( (elementRef) => !elementRef.current?.contains(event.target as Node) ) ) { callbackRef.current?.(event); } }; document.addEventListener("click", handleClickOutside, true); return () => document.removeEventListener("click", handleClickOutside, true); }, [elementRefs]); };