@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
39 lines (38 loc) • 1.16 kB
JavaScript
"use client";
let react = require("react");
//#region packages/@mantine/hooks/src/use-clipboard/use-clipboard.ts
function useClipboard(options = {}) {
const timeout = options.timeout ?? 2e3;
const [error, setError] = (0, react.useState)(null);
const [copied, setCopied] = (0, react.useState)(false);
const timeoutRef = (0, react.useRef)(null);
(0, react.useEffect)(() => () => {
window.clearTimeout(timeoutRef.current);
}, []);
const handleCopyResult = (value) => {
window.clearTimeout(timeoutRef.current);
timeoutRef.current = window.setTimeout(() => setCopied(false), timeout);
setCopied(value);
};
const copy = (value) => {
if ("clipboard" in navigator) navigator.clipboard.writeText(value).then(() => {
setError(null);
handleCopyResult(true);
}).catch((err) => setError(err));
else setError(/* @__PURE__ */ new Error("useClipboard: navigator.clipboard is not supported"));
};
const reset = () => {
setCopied(false);
setError(null);
window.clearTimeout(timeoutRef.current);
};
return {
copy,
reset,
error,
copied
};
}
//#endregion
exports.useClipboard = useClipboard;
//# sourceMappingURL=use-clipboard.cjs.map