UNPKG

@mantine/hooks

Version:

A collection of 50+ hooks for state and UI management

1 lines 2.66 kB
{"version":3,"file":"use-clipboard.cjs","names":[],"sources":["../../src/use-clipboard/use-clipboard.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport interface UseClipboardInput {\n /** Time in ms after which the copied state will reset, `2000` by default */\n timeout?: number;\n}\n\nexport interface UseClipboardReturnValue {\n /** Function to copy value to clipboard */\n copy: (value: any) => void;\n\n /** Function to reset copied state and error */\n reset: () => void;\n\n /** Error if copying failed */\n error: Error | null;\n\n /** Boolean indicating if the value was copied successfully */\n copied: boolean;\n}\n\nexport function useClipboard(options: UseClipboardInput = {}): UseClipboardReturnValue {\n const timeout = options.timeout ?? 2000;\n const [error, setError] = useState<Error | null>(null);\n const [copied, setCopied] = useState(false);\n const timeoutRef = useRef<number | null>(null);\n\n useEffect(\n () => () => {\n window.clearTimeout(timeoutRef.current!);\n },\n []\n );\n\n const handleCopyResult = (value: boolean) => {\n window.clearTimeout(timeoutRef.current!);\n timeoutRef.current = window.setTimeout(() => setCopied(false), timeout);\n setCopied(value);\n };\n\n const copy = (value: any) => {\n if ('clipboard' in navigator) {\n navigator.clipboard\n .writeText(value)\n .then(() => {\n setError(null);\n handleCopyResult(true);\n })\n .catch((err) => setError(err));\n } else {\n setError(new Error('useClipboard: navigator.clipboard is not supported'));\n }\n };\n\n const reset = () => {\n setCopied(false);\n setError(null);\n window.clearTimeout(timeoutRef.current!);\n };\n\n return { copy, reset, error, copied };\n}\n\nexport namespace useClipboard {\n export type Input = UseClipboardInput;\n export type ReturnValue = UseClipboardReturnValue;\n}\n"],"mappings":";;;AAqBA,SAAgB,aAAa,UAA6B,CAAC,GAA4B;CACrF,MAAM,UAAU,QAAQ,WAAW;CACnC,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UAAmC,IAAI;CACrD,MAAM,CAAC,QAAQ,cAAA,GAAA,MAAA,UAAsB,KAAK;CAC1C,MAAM,cAAA,GAAA,MAAA,QAAmC,IAAI;CAE7C,CAAA,GAAA,MAAA,uBACc;EACV,OAAO,aAAa,WAAW,OAAQ;CACzC,GACA,CAAC,CACH;CAEA,MAAM,oBAAoB,UAAmB;EAC3C,OAAO,aAAa,WAAW,OAAQ;EACvC,WAAW,UAAU,OAAO,iBAAiB,UAAU,KAAK,GAAG,OAAO;EACtE,UAAU,KAAK;CACjB;CAEA,MAAM,QAAQ,UAAe;EAC3B,IAAI,eAAe,WACjB,UAAU,UACP,UAAU,KAAK,EACf,WAAW;GACV,SAAS,IAAI;GACb,iBAAiB,IAAI;EACvB,CAAC,EACA,OAAO,QAAQ,SAAS,GAAG,CAAC;OAE/B,yBAAS,IAAI,MAAM,oDAAoD,CAAC;CAE5E;CAEA,MAAM,cAAc;EAClB,UAAU,KAAK;EACf,SAAS,IAAI;EACb,OAAO,aAAa,WAAW,OAAQ;CACzC;CAEA,OAAO;EAAE;EAAM;EAAO;EAAO;CAAO;AACtC"}