diff --git a/web/src/lib/components/ui/CopyButton.stories.svelte b/web/src/lib/components/ui/CopyButton.stories.svelte new file mode 100644 index 000000000..f07eac653 --- /dev/null +++ b/web/src/lib/components/ui/CopyButton.stories.svelte @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {SHA} + + + + + + + + + + Crossfade + + + + + + Morph + + + + + + + + + + {@const presets = [ + ["smooth", "\u03b6 1.00 \u2014 no overshoot"], + ["snappy", "\u03b6 0.73 \u2014 fast, slight overshoot"], + ["bouncy", "\u03b6 0.40 \u2014 playful"] + ] as const} + + {#each presets as [preset, note] (preset)} + + (checked[preset] = !checked[preset])} + aria-label={`Toggle the ${preset} morph`} + > + + + + {preset} — {note} + + + {/each} + + diff --git a/web/src/lib/components/ui/CopyButton.svelte b/web/src/lib/components/ui/CopyButton.svelte new file mode 100644 index 000000000..52d0e3850 --- /dev/null +++ b/web/src/lib/components/ui/CopyButton.svelte @@ -0,0 +1,180 @@ + + + + + void copy()} + style="--copy-fade: {fade}ms; --copy-fade-ease: {CROSSFADE_EASING}; --copy-draw: {draw}ms; --copy-draw-ease: {DRAW_EASING}" +> + {#if morph} + + {:else} + + + + + + + + + {/if} + {#if showLabel} + + {#each labels as [key, text] (key)} + {text} + {/each} + + {/if} + + {status === "copied" ? copiedLabel : status === "error" ? errorLabel : ""} + + + +
+ {SHA} +