feat(confirm): add ConfirmService and ConfirmDialog with deferred-Promise pattern

- confirm.svelte.ts: context-based async service returning Promise<boolean>
- ConfirmDialog.svelte: native <dialog> element, reads service from context
- Concurrent calls return false immediately (guard at top of confirm())
- SSR-safe: confirm() returns Promise.resolve(false) on server
- getConfirmService() throws descriptive error outside provider tree
- 5 Vitest tests: confirm/cancel/Escape/concurrent/outside-provider all green

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-12 13:20:37 +02:00
parent fb00de6690
commit 1942c2a5cb
4 changed files with 242 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
<script lang="ts">
import { provideConfirmService, type ConfirmService } from './confirm.svelte.js';
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
let { onReady }: { onReady: (service: ConfirmService) => void } = $props();
const service = provideConfirmService();
onReady(service);
</script>
<ConfirmDialog />