Modal

Dialog overlay with header, body, footer, and close sub-components. Wraps bits-ui Dialog.

Example

Props

Modal.Root

PropTypeDefaultDescription
openbooleanfalseControls modal visibility (bindable)
onOpenChange(open: boolean) => voidCallback when open state changes
onclose() => voidCallback when modal closes
classstringAdditional CSS classes
childrenSnippetModal content

Modal.Header / Modal.Body / Modal.Footer

PropTypeDefaultDescription
classstringAdditional CSS classes
childrenSnippetSection content

Modal.Close

PropTypeDefaultDescription
classstringAdditional CSS classes
childrenSnippet"x"Close button content

Usage

<script>
  import { Modal, Button } from '@chrissnell/chonky-ui';

  let open = $state(false);
</script>

<Button onclick={() => (open = true)}>Open Modal</Button>
<Modal.Root bind:open>
  <Modal.Header>
    <h3>Title</h3>
    <Modal.Close />
  </Modal.Header>
  <Modal.Body>
    <p>Body content here.</p>
  </Modal.Body>
  <Modal.Footer>
    <Button onclick={() => (open = false)}>Close</Button>
    <Button variant="primary">Save</Button>
  </Modal.Footer>
</Modal.Root>