fix: build errors and merging projects and homepage
This commit is contained in:
51
src/lib/components/CopyButton.svelte
Normal file
51
src/lib/components/CopyButton.svelte
Normal file
@@ -0,0 +1,51 @@
|
||||
<script lang="ts">
|
||||
import type { Component } from 'svelte';
|
||||
|
||||
let {
|
||||
icon: Icon,
|
||||
label,
|
||||
value
|
||||
}: {
|
||||
icon: Component;
|
||||
label: string;
|
||||
value: string;
|
||||
} = $props();
|
||||
|
||||
let copied = $state(false);
|
||||
|
||||
async function copy(): Promise<void> {
|
||||
try {
|
||||
await navigator.clipboard.writeText(value);
|
||||
copied = true;
|
||||
} catch {
|
||||
// clipboard blocked
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<div
|
||||
class="group relative"
|
||||
role="group"
|
||||
onmouseleave={(): void => {
|
||||
copied = false;
|
||||
}}
|
||||
>
|
||||
<button
|
||||
onclick={copy}
|
||||
aria-label={`Copy ${label}: ${value}`}
|
||||
class="text-2xl transition hover:opacity-60 cursor-pointer"
|
||||
>
|
||||
<Icon />
|
||||
</button>
|
||||
|
||||
<span
|
||||
role="tooltip"
|
||||
class="pointer-events-none absolute top-full left-1/2 mt-2 -translate-x-1/2
|
||||
rounded bg-neutral-800 px-2 py-1 text-xs whitespace-nowrap text-white
|
||||
opacity-0 transition group-hover:opacity-100"
|
||||
>
|
||||
{copied ? 'Copied!' : value}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div aria-live="polite" class="sr-only">{copied ? `${label} copied` : ''}</div>
|
||||
Reference in New Issue
Block a user