Skip to content

Twig API

Use @ui/Disclosure/Disclosure.twig to render an accessible group of disclosures. The template renders a DisclosureGroup root and independently marked Disclosure items.

Parameters

id

  • Type: string
  • Required: yes

A unique ID for the group. It is applied to the root and used as the prefix for generated item, trigger, and panel IDs.

items

  • Type: array<{ title: string, content: unknown, open?: boolean, disabled?: boolean, id?: string, attr?: array, trigger_attr?: array, panel_attr?: array }>
  • Required: yes

The disclosure items. title and content provide the default block values. open and disabled default to false. An item id produces ${item.id}-trigger and ${item.id}-panel; otherwise the template uses ${id}-item-${loop.index} as the item ID. Item-level attribute arrays customize presentation attributes, while the required component, ref, ID and accessibility state attributes are applied last.

heading_tag

  • Type: string
  • Default: 'h3'

The native heading element wrapping each trigger button. Choose a heading level appropriate to the page outline.

attr

  • Type: array

Attributes for the DisclosureGroup root. Use this parameter to configure group options such as data_option_no_multiple: true and data_option_no_collapsible: true.

item_attr

  • Type: array

Default presentation attributes merged into every Disclosure section before each item's attr and the required component/state attributes.

trigger_attr

  • Type: array

Default presentation attributes merged into every native trigger button before each item's trigger_attr and the required ID, ref and accessibility attributes.

panel_attr

  • Type: array

Default presentation attributes merged into every panel before each item's panel_attr and the required ID, ref and accessibility attributes. Add role: 'region' only when the extra landmark is useful.

Blocks

title

Customizes each trigger's label. Defaults to item.title. The current item and Twig loop context are available.

content

Customizes each panel's content. Defaults to item.content. The current item and Twig loop context are available.

Rendered state

The template renders type="button", the trigger/panel IDs, aria-controls, aria-expanded, aria-labelledby, and initial hidden state. It does not add role="region" by default. JavaScript preserves the rendered IDs and takes ownership of aria-expanded, hidden, and temporary inert state after mounting.

twig
{% include '@ui/Disclosure/Disclosure.twig' with {
  id: 'product-faq',
  heading_tag: 'h2',
  items: items,
  attr: {
    data_option_no_multiple: true,
    data_option_no_collapsible: true
  },
  panel_attr: { role: 'region' }
} %}