tav-ui
Version:
1 lines • 3.68 kB
Source Map (JSON)
{"version":3,"file":"useCopyToClipboard2.mjs","sources":["../../../../../../packages/hooks/web/useCopyToClipboard.ts"],"sourcesContent":["import { ref, watch } from 'vue'\nimport { isDef } from '@tav-ui/utils/is'\n\ninterface Options {\n target?: HTMLElement\n}\nexport function useCopyToClipboard(initial?: string) {\n const clipboardRef = ref(initial || '')\n const isSuccessRef = ref(false)\n const copiedRef = ref(false)\n\n watch(\n clipboardRef,\n (str?: string) => {\n if (isDef(str)) {\n copiedRef.value = true\n isSuccessRef.value = copyTextToClipboard(str)\n }\n },\n { immediate: !!initial, flush: 'sync' }\n )\n\n return { clipboardRef, isSuccessRef, copiedRef }\n}\n\nexport function copyTextToClipboard(input: string, { target = document.body }: Options = {}) {\n const element = document.createElement('textarea')\n const previouslyFocusedElement = document.activeElement\n\n element.value = input\n\n element.setAttribute('readonly', '')\n ;(element.style as any).contain = 'strict'\n element.style.position = 'absolute'\n element.style.left = '-9999px'\n element.style.fontSize = '12pt'\n\n const selection = document.getSelection()\n let originalRange\n if (selection && selection.rangeCount > 0) originalRange = selection.getRangeAt(0)\n\n target.append(element)\n element.select()\n\n element.selectionStart = 0\n element.selectionEnd = input.length\n\n let isSuccess = false\n try {\n isSuccess = document.execCommand('copy')\n } catch (e: any) {\n throw new Error(e)\n }\n\n element.remove()\n\n if (originalRange && selection) {\n selection.removeAllRanges()\n selection.addRange(originalRange)\n }\n\n if (previouslyFocusedElement) (previouslyFocusedElement as HTMLElement).focus()\n\n return isSuccess\n}\n"],"names":[],"mappings":";;;AAEO,SAAS,kBAAkB,CAAC,OAAO,EAAE;AAC5C,EAAE,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;AAC1C,EAAE,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAClC,EAAE,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,GAAG,KAAK;AAC/B,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;AACpB,MAAM,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;AAC7B,MAAM,YAAY,CAAC,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;AACpD,KAAK;AACL,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9C,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC;AACM,SAAS,mBAAmB,CAAC,KAAK,EAAE,EAAE,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;AAC5E,EAAE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AACrD,EAAE,MAAM,wBAAwB,GAAG,QAAQ,CAAC,aAAa,CAAC;AAC1D,EAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AACxB,EAAE,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACvC,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;AACnC,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AACtC,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;AACjC,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;AAClC,EAAE,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC5C,EAAE,IAAI,aAAa,CAAC;AACpB,EAAE,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC;AAC3C,IAAI,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5C,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACnB,EAAE,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;AAC7B,EAAE,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;AACtC,EAAE,IAAI,SAAS,GAAG,KAAK,CAAC;AACxB,EAAE,IAAI;AACN,IAAI,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC7C,GAAG,CAAC,OAAO,CAAC,EAAE;AACd,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AACvB,GAAG;AACH,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACnB,EAAE,IAAI,aAAa,IAAI,SAAS,EAAE;AAClC,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;AAChC,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACtC,GAAG;AACH,EAAE,IAAI,wBAAwB;AAC9B,IAAI,wBAAwB,CAAC,KAAK,EAAE,CAAC;AACrC,EAAE,OAAO,SAAS,CAAC;AACnB;;;;"}