UNPKG

@grail-ui/svelte

Version:

[![NPM](https://img.shields.io/npm/v/@grail-ui/svelte)](https://www.npmjs.com/package/@grail-ui/svelte) [![minified](https://img.shields.io/bundlephobia/min/@grail-ui/svelte)](https://bundlephobia.com/package/@grail-ui/svelte) [![minified + zipped](https:

32 lines (31 loc) 1.08 kB
import { writable } from 'svelte/store'; import { isClient } from '../util/is.js'; export const createClipboard = ({ onCopy, copiedDuring = 1500, } = {}) => { const isSupported = isClient && Boolean(navigator && 'clipboard' in navigator); const { subscribe: subscribeText, set: setText } = writable(''); const { subscribe: subscribeCopied, set: setCopied } = writable(false); let copiedTimeout; async function copy(text) { clearTimeout(copiedTimeout); if (isSupported && text != null) { if (typeof text !== 'string') { text = text.innerText; } await navigator.clipboard.writeText(text); setText(text); setCopied(true); copiedTimeout = setTimeout(() => { setCopied(false); }, copiedDuring); if (onCopy) { onCopy(text); } } } return { copy, text: { subscribe: subscribeText }, copied: { subscribe: subscribeCopied }, isSupported, }; };