The ld-modal component represents a dismissible modal dialog box.
The <dialog> element acts as the foundation for both, the Web Component version and the CSS component version of the component. The ld-modal Web Component wraps a <dialog> element and enhances its functionality which otherwise is not natively implemented, such as by emitting additional events and handling clicks on the dialog backdrop.
Here is a minimalistic example of a modal dialog:
<ld-modal>
  <ld-typo style="text-align: center">
    I'm a modal dialog.
  </ld-typo>
</ld-modal>
<ld-button onclick="event.target.previousElementSibling.showModal()">Open Modal</ld-button>
<dialog class="ld-modal">
  <header class="ld-modal__header">
    <button
      class="ld-modal__x"
      aria-label="Dismiss"
      onclick="this.closest('dialog').close()"
    ></button>
  </header>
  <div class="ld-modal__content">
    <p class="ld-typo" style="text-align: center">
      I'm a modal dialog.
    </p>
  </div>
</dialog>
<button class="ld-button" onclick="event.target.previousElementSibling.showModal()">Open Modal</button>
You have two additional slots to your disposal for altering the modal header and footer which are both positioned fixed at top and bottom of the dialog element.
<ld-modal>
  <ld-typo slot="header">Hello</ld-typo>
  <ld-typo style="text-align: center">
    I'm a modal dialog.
  </ld-typo>
  <ld-button slot="footer" style="width: 8rem" mode="ghost" onclick="this.closest('ld-modal').close()">Cancel</ld-button>
  <ld-button slot="footer" style="width: 8rem" onclick="this.closest('ld-modal').close()">Submit</ld-button>
</ld-modal>
<ld-button onclick="event.target.previousElementSibling.showModal()">Open Modal</ld-button>
<dialog class="ld-modal">
  <header class="ld-modal__header">
    <p class="ld-typo">Hello</p>
    <button
      class="ld-modal__x"
      aria-label="Dismiss"
      onclick="this.closest('dialog').close()"
    ></button>
  </header>
  <div class="ld-modal__content">
    <p class="ld-typo" style="text-align: center">
      I'm a modal dialog.
    </p>
  </div>
  <footer class="ld-modal__footer">
    <button class="ld-button ld-button--ghost" style="width: 8rem" onclick="this.closest('dialog').close()">Cancel</button>
    <button class="ld-button" style="width: 8rem" onclick="this.closest('dialog').close()">Submit</button>
  </footer>
</dialog>
<button class="ld-button" onclick="event.target.previousElementSibling.showModal()">Open Modal</button>
<ld-modal cancelable="false">
  <ld-typo slot="header">Hello</ld-typo>
  <ld-typo style="text-align: center">
    I'm a modal dialog.
  </ld-typo>
  <ld-button slot="footer" style="width: 8rem" onclick="this.closest('ld-modal').close()">Submit</ld-button>
</ld-modal>
<ld-button onclick="event.target.previousElementSibling.showModal()">Open Modal</ld-button>
<dialog class="ld-modal" oncancel="event.preventDefault()">
  <header class="ld-modal__header">
    <p class="ld-typo">Hello</p>
  </header>
  <div class="ld-modal__content">
    <p class="ld-typo" style="text-align: center">
      I'm a modal dialog.
    </p>
  </div>
  <footer class="ld-modal__footer">
    <button class="ld-button" style="width: 8rem" onclick="this.closest('dialog').close()">Submit</button>
  </footer>
</dialog>
<button class="ld-button" onclick="event.target.previousElementSibling.showModal()">Open Modal</button>
<ld-modal blurry-backdrop>
  <ld-typo style="text-align: center">
    I'm a modal dialog.
  </ld-typo>
</ld-modal>
<ld-button onclick="event.target.previousElementSibling.showModal()">Open Modal</ld-button>
<dialog class="ld-modal ld-modal--blurry-backdrop">
  <header class="ld-modal__header">
    <button
      class="ld-modal__x"
      aria-label="Dismiss"
      onclick="this.closest('dialog').close()"
    ></button>
  </header>
  <div class="ld-modal__content">
    <p class="ld-typo" style="text-align: center">
      I'm a modal dialog.
    </p>
  </div>
</dialog>
<button class="ld-button" onclick="event.target.previousElementSibling.showModal()">Open Modal</button>
| Property | Attribute | Description | Type | Default | 
|---|---|---|---|---|
blurryBackdrop | 
blurry-backdrop | 
Use a blurry backdrop. | boolean | 
false | 
cancelable | 
cancelable | 
The modal is cancelable by default. However, you can change this using this prop. | boolean | 
true | 
key | 
key | 
for tracking the node's identity when working with lists | string | number | 
undefined | 
open | 
open | 
Indicates that the modal dialog is active and can be interacted with. | boolean | 
undefined | 
ref | 
ref | 
reference to component | any | 
undefined | 
| Event | Description | Type | 
|---|---|---|
ldmodalclosed | 
Emitted when modal has closed (after transition). | CustomEvent<any> | 
ldmodalclosing | 
Emitted when modal is closing (before transition). | CustomEvent<any> | 
ldmodalopened | 
Emitted when modal has opened (after transition). | CustomEvent<any> | 
ldmodalopening | 
Emitted when modal is opening (before transition). | CustomEvent<any> | 
close() => Promise<void> #Closes the modal dialog.
Type: Promise<void>
showModal() => Promise<void> #Opens the modal dialog.
Type: Promise<void>
| Part | Description | 
|---|---|
"content" | 
|
"footer" | 
|
"header" |