@primer/react
Version:
An implementation of GitHub's Primer Design System using React
88 lines (87 loc) • 2.08 kB
JavaScript
import { c } from "react-compiler-runtime";
import { useEffect, useRef, useState } from "react";
//#region src/hooks/useDetails.tsx
function useDetails(t0) {
const $ = c(15);
const { ref, closeOnOutsideClick, defaultOpen, onClickOutside } = t0;
const [open, setOpen] = useState(defaultOpen);
const backupRef = useRef(null);
const customRef = ref !== null && ref !== void 0 ? ref : backupRef;
let t1;
if ($[0] !== customRef || $[1] !== onClickOutside) {
t1 = (event) => {
const { current } = customRef;
if (event.target.closest("details") !== current) {
onClickOutside && onClickOutside(event);
if (!event.defaultPrevented) setOpen(false);
}
};
$[0] = customRef;
$[1] = onClickOutside;
$[2] = t1;
} else t1 = $[2];
const onClickOutsideInternal = t1;
let t2;
let t3;
if ($[3] !== closeOnOutsideClick || $[4] !== onClickOutsideInternal || $[5] !== open) {
t2 = () => {
if (open && closeOnOutsideClick) {
document.addEventListener("click", onClickOutsideInternal);
return () => {
document.removeEventListener("click", onClickOutsideInternal);
};
}
};
t3 = [
open,
closeOnOutsideClick,
onClickOutsideInternal
];
$[3] = closeOnOutsideClick;
$[4] = onClickOutsideInternal;
$[5] = open;
$[6] = t2;
$[7] = t3;
} else {
t2 = $[6];
t3 = $[7];
}
useEffect(t2, t3);
let t4;
if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
t4 = (e) => {
if (!e.defaultPrevented) {
const eventTarget_0 = e.target;
setOpen(eventTarget_0.open);
}
};
$[8] = t4;
} else t4 = $[8];
const handleToggle = t4;
let t5;
if ($[9] !== customRef || $[10] !== open) {
t5 = () => ({
onToggle: handleToggle,
open,
ref: customRef
});
$[9] = customRef;
$[10] = open;
$[11] = t5;
} else t5 = $[11];
const getDetailsProps = t5;
let t6;
if ($[12] !== getDetailsProps || $[13] !== open) {
t6 = {
open,
setOpen,
getDetailsProps
};
$[12] = getDetailsProps;
$[13] = open;
$[14] = t6;
} else t6 = $[14];
return t6;
}
//#endregion
export { useDetails as default };