The dialog uses the popover API.
The <dialog id="{id}"> can be opened or closed by adding popovertarget="{id}" to a <button>.
src/components/elements/dialog// src/components/elements/dialog/schema.yaml
$schema: http://json-schema.org/draft-07/schema#
$id: /elements/dialog
additionalProperties: false
type: object
required:
- close_label
- content
- id
- title
properties:
close_label:
type: string
content:
type: string
format: html
id:
type: string
title:
type: string
open_label:
type: string
is_modal:
type: boolean
// src/components/elements/dialog/mocks.yaml
close_label: Close
content:
$tpl: patterns/rich-text
content: >-
<p>Aute duis qui id aliquip ea labore laborum sunt est. Aliquip veniam nisi
incididunt cillum. Quis ad sit qui cillum do nostrud adipisicing proident.
Qui sunt proident culpa officia laborum ullamco anim et consequat ex ex
dolor sunt. Enim pariatur aliquip ipsum culpa veniam tempor cupidatat in
duis quis. Ullamco laboris nulla amet aliqua irure est id irure sunt. Qui
deserunt incididunt tempor non ea proident.</p> <p>Qui est nisi est pariatur
cupidatat cillum proident anim consequat irure est sit nulla. Deserunt
commodo velit ipsum dolor incididunt aliqua voluptate velit. In ad esse id
sint nisi commodo ut enim. Cillum laboris incididunt esse consequat
consequat id cupidatat.</p> <p>Mollit mollit pariatur officia proident amet
velit proident quis nulla. Nisi esse eu do duis qui irure mollit sint sint
ad aute irure sit. Eiusmod velit reprehenderit velit ad esse. Nostrud ut id
eiusmod pariatur anim consectetur reprehenderit est fugiat voluptate est
elit. Tempor exercitation velit reprehenderit magna nisi deserunt. Laborum
cillum esse velit do eu eu. Nulla ea laborum sit ipsum ut ullamco ea
consectetur excepteur.</p>
id: dialog
open_label: open
title: The dialog heading
$variants:
- $name: non-modal dialog
is_modal: false
// src/components/elements/dialog/dialog.twig
{% set dialog_id = id ~ "-dialog" %}
<cd-dialog id="{{ id }}">
{% if open_label %}
<button popovertarget="{{ dialog_id }}">{{ open_label }}</button>
{% endif %}
<dialog
class="Dialog"
aria-labelledby="{{ id }}-title"
popover
id="{{ dialog_id }}"
{% if is_modal|default(true) %}data-modal="true"{% endif %}
>
<header class="Dialog-header">
<h2 class="Dialog-heading" id="{{ id }}-title">{{ title }}</h2>
<button class="Dialog-close" type="button" popovertarget="{{ dialog_id }}" aria-label="{{ close_label }}">
{% include "@elements/icon/icon.twig" with {
name: "close",
} only %}
</button>
</header>
<div class="Dialog-content">
{{ content }}
</div>
</dialog>
</cd-dialog>
default mock data
close_label: Close
content:
$tpl: patterns/rich-text
content: >-
<p>Aute duis qui id aliquip ea labore laborum sunt est. Aliquip veniam nisi
incididunt cillum. Quis ad sit qui cillum do nostrud adipisicing proident.
Qui sunt proident culpa officia laborum ullamco anim et consequat ex ex
dolor sunt. Enim pariatur aliquip ipsum culpa veniam tempor cupidatat in
duis quis. Ullamco laboris nulla amet aliqua irure est id irure sunt. Qui
deserunt incididunt tempor non ea proident.</p> <p>Qui est nisi est pariatur
cupidatat cillum proident anim consequat irure est sit nulla. Deserunt
commodo velit ipsum dolor incididunt aliqua voluptate velit. In ad esse id
sint nisi commodo ut enim. Cillum laboris incididunt esse consequat
consequat id cupidatat.</p> <p>Mollit mollit pariatur officia proident amet
velit proident quis nulla. Nisi esse eu do duis qui irure mollit sint sint
ad aute irure sit. Eiusmod velit reprehenderit velit ad esse. Nostrud ut id
eiusmod pariatur anim consectetur reprehenderit est fugiat voluptate est
elit. Tempor exercitation velit reprehenderit magna nisi deserunt. Laborum
cillum esse velit do eu eu. Nulla ea laborum sit ipsum ut ullamco ea
consectetur excepteur.</p>
id: dialog
open_label: open
title: The dialog heading
non-modal dialog mock data
close_label: Close
content:
$tpl: patterns/rich-text
content: >-
<p>Aute duis qui id aliquip ea labore laborum sunt est. Aliquip veniam nisi
incididunt cillum. Quis ad sit qui cillum do nostrud adipisicing proident.
Qui sunt proident culpa officia laborum ullamco anim et consequat ex ex
dolor sunt. Enim pariatur aliquip ipsum culpa veniam tempor cupidatat in
duis quis. Ullamco laboris nulla amet aliqua irure est id irure sunt. Qui
deserunt incididunt tempor non ea proident.</p> <p>Qui est nisi est pariatur
cupidatat cillum proident anim consequat irure est sit nulla. Deserunt
commodo velit ipsum dolor incididunt aliqua voluptate velit. In ad esse id
sint nisi commodo ut enim. Cillum laboris incididunt esse consequat
consequat id cupidatat.</p> <p>Mollit mollit pariatur officia proident amet
velit proident quis nulla. Nisi esse eu do duis qui irure mollit sint sint
ad aute irure sit. Eiusmod velit reprehenderit velit ad esse. Nostrud ut id
eiusmod pariatur anim consectetur reprehenderit est fugiat voluptate est
elit. Tempor exercitation velit reprehenderit magna nisi deserunt. Laborum
cillum esse velit do eu eu. Nulla ea laborum sit ipsum ut ullamco ea
consectetur excepteur.</p>
id: dialog
open_label: open
title: The dialog heading
is_modal: false