Skip to main content

Ask before acting: waits on an async confirm, a drawer on phones.

3 files in this folder

Usage

Example.svelte
<script lang="ts">
	import ConfirmDialog from "@zedensix/ui/components/confirm-dialog";
	import { Button } from "@zedensix/ui/button";

	let archiveOpen = $state(false);
	let deleteOpen = $state(false);
	let status = $state("3 files in this folder");

	function wait(milliseconds: number) {
		return new Promise((resolve) => setTimeout(resolve, milliseconds));
	}
</script>

<div class="flex flex-wrap items-center gap-3">
	<Button
		variant="outline"
		class="h-11 rounded-xl md:h-9"
		onclick={() => (archiveOpen = true)}
	>
		Archive project
	</Button>
	<Button
		variant="destructive"
		class="h-11 rounded-xl md:h-9"
		onclick={() => (deleteOpen = true)}
	>
		Delete folder
	</Button>
	<p class="text-muted-foreground text-sm">{status}</p>
</div>

<ConfirmDialog
	bind:open={archiveOpen}
	title="Archive this project?"
	description="Members keep read access. You can restore it later."
	confirmLabel="Archive"
	onconfirm={() => (status = "Project archived")}
/>

<ConfirmDialog
	bind:open={deleteOpen}
	title="Delete this folder?"
	description="The folder and its 3 files are removed for every member."
	confirmLabel="Delete"
	destructive
	onconfirm={async () => {
		await wait(1500);
		status = "Folder deleted";
	}}
/>