Navigation and interaction
Dialog
Modal dialog using the native dialog element.
Live example
Usage
Each example includes the complete adapter-specific parameter reference. Copy it as a starting point, then remove options your use case does not need.
React
import { Dialog } from "@cofob/design-system-react";
/**
* Complete Dialog parameter reference.
* @param open/defaultOpen
* type: boolean; controlled or initial state
* default: false
* example: true
* @param onOpenChange
* type: (open: boolean) => void
* default: —
* example: {handleOpenChange}
* @param trigger
* type: ReactNode | Svelte snippet with trigger controls
* default: —
* example: <Button>Open</Button> / trigger snippet
* @param triggerLabel
* type: string
* default: "Open dialog"
* example: "Accessible label"
* @param title
* type: string | renderable content
* required
* example: "Delete draft?"
* @param description
* type: string | renderable content
* default: —
* example: "This action cannot be undone."
* @param footer
* type: ReactNode | Svelte snippet
* default: —
* example: <Button>Confirm</Button> / footer snippet
* @param closeLabel
* type: string
* default: "Close dialog"
* example: "Accessible label"
* @param dialog attributes
* type: native element attributes
* default: —
* example: class / style / aria-* / data-*
* @param children
* type: ReactNode | Svelte Snippet | child HTML
* default: —
* example: children / snippet / child HTML
*/
export function DialogExample() {
return (
<Dialog trigger="Open" title="Confirm">Content</Dialog>
);
}Svelte
<script lang="ts">
import { Dialog } from "@cofob/design-system-svelte";
// Complete Dialog parameter reference.
// open/defaultOpen
// type: boolean; controlled or initial state
// default: false
// example: true
// onOpenChange
// type: (open: boolean) => void
// default: —
// example: {handleOpenChange}
// trigger
// type: ReactNode | Svelte snippet with trigger controls
// default: —
// example: <Button>Open</Button> / trigger snippet
// triggerLabel
// type: string
// default: "Open dialog"
// example: "Accessible label"
// title
// type: string | renderable content
// required
// example: "Delete draft?"
// description
// type: string | renderable content
// default: —
// example: "This action cannot be undone."
// footer
// type: ReactNode | Svelte snippet
// default: —
// example: <Button>Confirm</Button> / footer snippet
// closeLabel
// type: string
// default: "Close dialog"
// example: "Accessible label"
// dialog attributes
// type: native element attributes
// default: —
// example: class / style / aria-* / data-*
// children
// type: ReactNode | Svelte Snippet | child HTML
// default: —
// example: children / snippet / child HTML
</script>
<Dialog title="Confirm">{#snippet trigger({ open })}<Button onclick={open}>Open</Button>{/snippet}Content</Dialog>HTML
<!--
Complete Dialog parameter reference.
open/defaultOpen
type: boolean; controlled or initial state
default: false
example: true
onOpenChange
type: (open: boolean) => void
default: —
example: {handleOpenChange}
trigger
type: ReactNode | Svelte snippet with trigger controls
default: —
example: <Button>Open</Button> / trigger snippet
triggerLabel
type: string
default: "Open dialog"
example: "Accessible label"
title
type: string | renderable content
required
example: "Delete draft?"
description
type: string | renderable content
default: —
example: "This action cannot be undone."
footer
type: ReactNode | Svelte snippet
default: —
example: <Button>Confirm</Button> / footer snippet
closeLabel
type: string
default: "Close dialog"
example: "Accessible label"
dialog attributes
type: native element attributes
default: —
example: class / style / aria-* / data-*
children
type: ReactNode | Svelte Snippet | child HTML
default: —
example: children / snippet / child HTML
-->
<dialog class="cf-dialog" data-cf-dialog>Content</dialog>
<script type="module">
import { initDesignSystem } from "@cofob/design-system-css";
const designSystem = initDesignSystem(document);
window.addEventListener("pagehide", () => designSystem.destroy(), { once: true });
</script>Parameters
Adapter differences are explicit. Native element attributes are forwarded in React and Svelte and can be written directly in HTML.
| Parameter | Type | Default | Adapters | Example | Description |
|---|---|---|---|---|---|
open/defaultOpen | boolean; controlled or initial state | false | React · Svelte · HTML | true | Use open/bind:open for controlled state or defaultOpen for initial state. |
onOpenChange | (open: boolean) => void | — | React · Svelte · HTML | {handleOpenChange} | Reports every user-driven open state transition. |
trigger | ReactNode | Svelte snippet with trigger controls | — | React · Svelte · HTML | <Button>Open</Button> / trigger snippet | Trigger content; Svelte snippets receive accessible trigger controls. |
triggerLabel | string | "Open dialog" | React · Svelte · HTML | "Accessible label" | Fallback accessible name when trigger content has no text. |
titlerequired | string | renderable content | required | React · Svelte · HTML | "Delete draft?" | Primary heading or accessible title. |
description | string | renderable content | — | React · Svelte · HTML | "This action cannot be undone." | Supporting explanatory content. |
footer | ReactNode | Svelte snippet | — | React · Svelte · HTML | <Button>Confirm</Button> / footer snippet | Optional dialog action area. |
closeLabel | string | "Close dialog" | React · Svelte · HTML | "Accessible label" | Accessible name for the dialog or toast close button. |
dialog attributes | native element attributes | — | React · Svelte · HTML | class / style / aria-* / data-* | Forwards native class/style, accessibility, event, and data attributes to the root element. |
children | ReactNode | Svelte Snippet | child HTML | — | React · Svelte · HTML | children / snippet / child HTML | Idiomatic adapter composition content. |