@grail-ui/svelte
Version:
[](https://www.npmjs.com/package/@grail-ui/svelte) [](https://bundlephobia.com/package/@grail-ui/svelte) [ • 1.08 kB
JavaScript
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,
};
};