Something went wrong. Try again.
inkfinite (an infinite canvas/whiteboard) monorepo ink.stormlightlabs.org
svelte rust tauri svg canvas perfect-freehand
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647<script lang="ts"> import { onMount } from 'svelte'; onMount(() => { const cleanups = Array.from( document.querySelectorAll<HTMLElement>('.doc-content pre') ).map((pre) => { const code = pre.querySelector('code'); if (!code) return () => {}; const codeElement = code;
const button = document.createElement('button'); button.type = 'button'; button.className = 'copy-code'; button.setAttribute('aria-label', 'Copy code'); button.setAttribute('aria-live', 'polite');
const label = document.createElement('span'); label.textContent = 'Copy'; button.append(label);
async function copy(): Promise<void> { try { await navigator.clipboard.writeText(codeElement.textContent ?? ''); label.textContent = 'Copied'; button.setAttribute('aria-label', 'Code copied'); } catch { label.textContent = 'Copy failed'; button.setAttribute('aria-label', 'Code copy failed'); } window.setTimeout(() => { label.textContent = 'Copy'; button.setAttribute('aria-label', 'Copy code'); }, 1600); }
button.addEventListener('click', copy); pre.append(button); return () => { button.removeEventListener('click', copy); button.remove(); }; });
return () => cleanups.forEach((cleanup) => cleanup()); });</script>