asw/archive/site/content/docs/components/accordion-dialog.md
exe.dev user e47a9f4401 asw-v01: archive deferred content (packs, site, lab, legacy examples)
- 2.1: packs/ -> archive/packs/
- 2.2: site/ -> archive/site/
- 2.3: src/lab/ -> archive/lab/
- 2.4: examples/ -> archive/examples-legacy/ (SSI-based)
2026-06-07 10:39:21 +02:00

3.3 KiB

title description layout weight type date tags ai-disclosure ai-model ai-provider
Accordion & Dialog Native disclosure and modal patterns. No JavaScript required for accordion; dialog uses the native showModal() API. docs 45 docs 2026-04-09
components
interactive
reference
generated claude-sonnet-4-5 Anthropic

Accordion

Style native <details>/<summary> elements. No JS needed — the browser handles open/close state.

<details>
  <summary>What is agentic HTML?</summary>
  <p>Agentic HTML is structured markup generated by AI agents — semantic, predictable, and styled without classes.</p>
</details>

Live example:

What is agentic HTML?

Agentic HTML is structured markup generated by AI agents — semantic, predictable, and styled without classes.

Why no classes?

Language models reliably produce semantic HTML. Class names require memorisation and drift. Data-attributes are explicit and grep-friendly.


Grouped Accordion

Wrap in <div data-role="accordion"> for flush connected borders.

<div data-role="accordion">
  <details>
    <summary>Reset layer</summary>
    <p>Normalises browser defaults without imposing opinions.</p>
  </details>
  <details>
    <summary>Token layer</summary>
    <p>Open Props foundation plus ASW semantic aliases.</p>
  </details>
  <details open>
    <summary>Components layer</summary>
    <p>Buttons, forms, accordion, dialog — all zero-class.</p>
  </details>
</div>

Live example:

Reset layer

Normalises browser defaults without imposing opinions.

Token layer

Open Props foundation plus ASW semantic aliases.

Components layer

Buttons, forms, accordion, dialog — all zero-class.


Dialog

Native <dialog> element. Use dialog.showModal() for a modal with backdrop, or dialog.show() for a non-modal popover.

<dialog id="demo-dialog">
  <header><h2>Confirm action</h2></header>
  <p>Are you sure you want to proceed? This cannot be undone.</p>
  <footer>
    <button onclick="document.getElementById('demo-dialog').close()">Cancel</button>
    <button onclick="document.getElementById('demo-dialog').close()">Confirm</button>
  </footer>
</dialog>

<button onclick="document.getElementById('demo-dialog').showModal()">Open dialog</button>

Live example:

Confirm action

Are you sure you want to proceed? This cannot be undone.


Notes

  • Accordion uses :not(nav details) scoping so nav dropdowns are unaffected.
  • Dialog backdrop uses color-mix() for transparency — no hardcoded rgba values.
  • All spacing uses Open Props / ASW tokens (--space-*, --radius-*, --shadow-*).
  • dialog::backdrop uses backdrop-filter: blur(4px) for frosted glass effect.