Skip to content

Disclosure

Disclosure is a good example of progressive enhancement because the content already exists in the markup and the component only layers behavior on top.

Open this demo in a new tab

<section data-disclosure>
<button
type="button"
aria-expanded="false"
data-disclosure-button
>
More details
</button>
<div hidden data-disclosure-panel>
Progressive enhancement keeps this content in the document.
</div>
</section>
import { defineComponent } from "ornata";
export const Disclosure = defineComponent({
name: "Disclosure",
state: {
open: { default: false, type: Boolean },
},
elements: {
button: { query: "[data-disclosure-button]" },
panel: { query: "[data-disclosure-panel]" },
},
methods: {
toggle() {
this.state.open = !this.state.open;
},
},
render: {
button() {
return {
attributes: {
"aria-expanded": String(this.state.open),
},
events: {
click: () => this.methods.toggle(),
},
};
},
panel() {
return {
attributes: {
hidden: !this.state.open,
},
};
},
},
});
Disclosure.mount("[data-disclosure]");