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" |