diff --git a/web/src/lib/components/repo/CloneDropdown.svelte b/web/src/lib/components/repo/CloneDropdown.svelte index 811825885..6619ce910 100644 --- a/web/src/lib/components/repo/CloneDropdown.svelte +++ b/web/src/lib/components/repo/CloneDropdown.svelte @@ -5,6 +5,7 @@ import Download from "$icon/download"; import Checkbox from "$lib/components/ui/Checkbox.svelte"; import Dropdown from "$lib/components/ui/Dropdown.svelte"; + import { createCopyFeedback } from "$lib/copy.svelte"; import type { RepoInfo } from "./types"; interface Props { @@ -25,7 +26,7 @@ const origin = $derived(page.url.origin); let permalink = $state(false); - let copied = $state(null); + const copyFeedback = createCopyFeedback(); const urls = $derived([ { @@ -48,15 +49,6 @@ return url.toString(); }; - const copy = async (label: string, value: string) => { - try { - await navigator.clipboard.writeText(value); - copied = label; - setTimeout(() => (copied = copied === label ? null : copied), 2000); - } catch { - // clipboard was denied, the text is still selectable - } - }; copy(entry.label, value)} + onclick={() => void copyFeedback.copy(entry.label, value)} > - {#if copied === entry.label} + {#if copyFeedback.copied === entry.label}