aotds-docks/src/lib/actions/clipboard.js

28 lines
827 B
JavaScript

// stolen from svelte-copy-clipboard-action
export function clipboard(node, { trigger = "click", text = "" } = {}) {
const handle = async (e) => {
await navigator.clipboard.writeText(text).then(
() =>
node.dispatchEvent(
new CustomEvent("copied", { detail: { clipboard: text } })
),
(e) =>
node.dispatchEvent(new CustomEvent("error", { detail: { error: e } }))
);
};
node.addEventListener(trigger, handle, true);
return {
update: (params) => {
if (params.trigger !== undefined) trigger = params.trigger;
if (params.text !== undefined) text = params.text;
},
destroy() {
node.removeEventListener(trigger, handle, true);
},
};
}