From bb27d0c9d7433a37dc4c1422c47542e288bab185 Mon Sep 17 00:00:00 2001 From: Elijah Duffy Date: Sun, 15 Mar 2026 12:58:28 -0700 Subject: [PATCH] dialog: pass state to snippet overrides --- src/lib/Dialog.svelte | 14 ++++++++------ src/routes/+page.svelte | 22 +++++++++++++--------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/lib/Dialog.svelte b/src/lib/Dialog.svelte index b4fdabd..8475f94 100644 --- a/src/lib/Dialog.svelte +++ b/src/lib/Dialog.svelte @@ -112,9 +112,9 @@ /** Bindable open state of the dialog */ open?: boolean; /** Title of the dialog */ - title: string | Snippet; + title: string | Snippet<[state: DialogState]>; /** Description of the dialog, optionally rendered below the title */ - description?: string | Snippet; + description?: string | Snippet<[state: DialogState]>; /** Size of the dialog (default: 'sm') */ size?: 'sm' | 'md' | 'lg' | 'max'; /** Additional classes for the dialog */ @@ -122,7 +122,7 @@ /** Content of the dialog */ children?: Snippet; /** Bottom controls for the dialog */ - controls?: Snippet | DialogControls; + controls?: Snippet<[state: DialogState]> | DialogControls; /** Sets bottom alignment of controls (default: end) */ controlsAlign?: 'start' | 'center' | 'end'; /** Top-right close control */ @@ -342,7 +342,9 @@ controlsAlign === 'end' && 'justify-end' ]} > - {#if controls && typeof controls === 'function'}{@render controls()}{:else if controls?.flip} + {#if controls && typeof controls === 'function'}{@render controls( + getState() + )}{:else if controls?.flip} {#if controls.ok !== null} {@render dialogOkButton(getState(), controls.ok)} {/if} @@ -417,10 +419,10 @@ {/snippet} -{#snippet stringOrSnippet(val: string | Snippet)} +{#snippet stringOrSnippet(val: string | Snippet<[state: DialogState]>)} {#if typeof val === 'string'} {val} {:else} - {@render val()} + {@render val(getState())} {/if} {/snippet} diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 536b56d..8158e3e 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -537,15 +537,6 @@ bind:open={dialogOpen} title="Dialog Title" size="sm" - controls={{ - ok: { - action: (dialog) => { - dialog.close(); - alert('Dialog submitted!'); - } - }, - cancel: null - }} onopen={(dialog) => { dialog.error('Example error message!'); dialog.loading(); @@ -554,6 +545,19 @@ }, 2000); }} > + {#snippet controls(state)} + + + {/snippet} +

This is a dialog content area.