diff --git a/.changeset/perfect-dogs-behave.md b/.changeset/perfect-dogs-behave.md new file mode 100644 index 000000000..1810ac385 --- /dev/null +++ b/.changeset/perfect-dogs-behave.md @@ -0,0 +1,5 @@ +--- +"svelte-ux": minor +--- + +Allow customizing CopyButton notification diff --git a/.changeset/shy-oranges-float.md b/.changeset/shy-oranges-float.md new file mode 100644 index 000000000..5d047c4b8 --- /dev/null +++ b/.changeset/shy-oranges-float.md @@ -0,0 +1,5 @@ +--- +"svelte-ux": minor +--- + +Allow CopyButton to take a function that returns a string diff --git a/packages/svelte-ux/src/lib/components/CopyButton.svelte b/packages/svelte-ux/src/lib/components/CopyButton.svelte index bb7d4348b..6b122ab8a 100644 --- a/packages/svelte-ux/src/lib/components/CopyButton.svelte +++ b/packages/svelte-ux/src/lib/components/CopyButton.svelte @@ -5,12 +5,16 @@ import Button from './Button.svelte'; import { getComponentSettings } from './settings.js'; import { slide } from 'svelte/transition'; + import { createEventDispatcher } from 'svelte'; let className: string | undefined = undefined; export { className as class }; + const dispatch = createEventDispatcher<{ click: void }>(); + const { classes: settingsClasses, defaults } = getComponentSettings('CopyButton'); - export let value: string; + export let value: string | (() => string); + export let message: string | null = 'Copied!'; let showMessage = false; $: if (showMessage) { @@ -25,11 +29,15 @@ {...restProps} class={cls('CopyButton', settingsClasses.root, className)} on:click={() => { - navigator.clipboard.writeText(value); - showMessage = true; + let copyValue = typeof value === 'function' ? value() : value; + navigator.clipboard.writeText(copyValue); + dispatch('click'); + if (message) { + showMessage = true; + } }} > - {#if showMessage} - Copied! + {#if showMessage && message} + {message} {/if} diff --git a/packages/svelte-ux/src/routes/docs/components/CopyButton/+page.svelte b/packages/svelte-ux/src/routes/docs/components/CopyButton/+page.svelte index 83df28e10..24e51591c 100644 --- a/packages/svelte-ux/src/routes/docs/components/CopyButton/+page.svelte +++ b/packages/svelte-ux/src/routes/docs/components/CopyButton/+page.svelte @@ -54,3 +54,21 @@ + +

Using a Function

+ + + 'Stop copying me!'} /> + + +

With Custom Message

+ + + + + +

With Alternate Notification

+ + + alert('Copied!')} message={null} /> +