chat-ui / src /lib /components /DeleteConversationModal.svelte
victor's picture
victor HF Staff
Add DeleteConversationModal and update delete flow
5367212
<script lang="ts">
import Modal from "$lib/components/Modal.svelte";
import { onMount } from "svelte";
interface Props {
open?: boolean;
title?: string;
onclose?: () => void;
ondelete?: () => void;
}
let { open = false, title = "", onclose, ondelete }: Props = $props();
let deleteButtonEl: HTMLButtonElement | undefined = $state();
function close() {
open = false;
onclose?.();
}
function confirmDelete() {
ondelete?.();
close();
}
onMount(() => {
setTimeout(() => {
deleteButtonEl?.focus();
}, 100);
});
</script>
{#if open}
<Modal onclose={close} width="w-[90dvh] md:w-[480px]">
<div class="flex w-full flex-col gap-5 p-6">
<div class="flex items-start justify-between">
<h2 class="text-xl font-semibold text-gray-800 dark:text-gray-200">Delete conversation</h2>
<button type="button" class="group outline-none" onclick={close} aria-label="Close">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 32 32"
class="size-5 text-gray-700 group-hover:text-gray-500 dark:text-gray-300 dark:group-hover:text-gray-400"
><path
d="M24 9.41 22.59 8 16 14.59 9.41 8 8 9.41 14.59 16 8 22.59 9.41 24 16 17.41 22.59 24 24 22.59 17.41 16 24 9.41z"
fill="currentColor"
/></svg
>
</button>
</div>
<p class="text-sm text-gray-600 dark:text-gray-400">
Are you sure you want to delete "<span class="font-semibold">{title}</span>"? This action
cannot be undone.
</p>
<div class="flex items-center justify-end gap-2">
<button
type="button"
class="inline-flex items-center rounded-xl border border-gray-300 bg-white px-3 py-1.5 text-sm font-medium text-gray-900 shadow outline-none hover:bg-gray-50 dark:border-gray-700 dark:bg-gray-700 dark:text-gray-100 dark:hover:bg-gray-600"
onclick={close}
>
Cancel
</button>
<button
bind:this={deleteButtonEl}
type="button"
class="inline-flex items-center rounded-xl border border-red-600 bg-red-600 px-3 py-1.5 text-sm font-semibold text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-400 focus:ring-offset-2 dark:border-red-500 dark:bg-red-500 dark:hover:bg-red-600 dark:focus:ring-red-400 dark:focus:ring-offset-gray-800"
onclick={confirmDelete}
>
Delete
</button>
</div>
</div>
</Modal>
{/if}