Skip to content

Conversation

jffng
Copy link
Contributor

@jffng jffng commented Jul 30, 2024

What

Adds several experimental blocks to the block library to enable an Accordion pattern.

Screenshot 2024-07-31 at 5 11 15 PM

Video Demo
https://cldup.com/transcoded/Oy55bzki_B.mov.mp4

Why

See #21584 and #63501

How

  • Implements four blocks: Accordions > Accordion Item > Accordion Header > Accordion Panel. This allows the user to style the trigger and content separately, while still maintaining the accessibility and semantic requirements of an accordion. I explored an approach with only two blocks — accordion group and item — but this made it difficult to provide the user with enough styling control over the trigger and content.
  • Allows configuration of which items are open by default, if the drawers autoclose when another item is opened, and the icon.
  • Uses the interactivity API + tag processor to handle interactivity in the view.
  • I followed the HTML semantics and practices presented in these examples: WCAG, USWDS, and informed by design input from @jarekmorawski and @Nyiriland.

Testing Instructions

  • Visit Gutenberg > Experiments and check the option to "Enable experimental blocks"
  • Verify you can implement an Accordion to a post, page or template.

Playground link to test the PR in browser.

Test block markup
<!-- wp:accordions -->
<div class="wp-block-accordions"><!-- wp:accordion-item -->
<div class="wp-block-accordion-item"><!-- wp:accordion-header -->
<h3 class="wp-block-accordion-header accordion-item__heading"><button class="accordion-item__toggle"><span>Getting Started</span><span class="accordion-item__toggle-icon has-icon-plus" style="width:1.2em;height:1.2em"><span style="display:inline-block;width:1.2em;height:1.2em;line-height:1.2empx;text-align:center;font-size:NaNpx;font-weight:bold;color:currentColor">+</span></span></button></h3>
<!-- /wp:accordion-header -->

<!-- wp:accordion-panel -->
<div class="wp-block-accordion-panel"><div class="accordion-content__wrapper"><!-- wp:paragraph -->
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
<!-- /wp:paragraph --></div></div>
<!-- /wp:accordion-panel --></div>
<!-- /wp:accordion-item -->

<!-- wp:accordion-item -->
<div class="wp-block-accordion-item"><!-- wp:accordion-header -->
<h3 class="wp-block-accordion-header accordion-item__heading"><button class="accordion-item__toggle"><span>Benefits of using accordion patterns</span><span class="accordion-item__toggle-icon has-icon-plus" style="width:1.2em;height:1.2em"><span style="display:inline-block;width:1.2em;height:1.2em;line-height:1.2empx;text-align:center;font-size:NaNpx;font-weight:bold;color:currentColor">+</span></span></button></h3>
<!-- /wp:accordion-header -->

<!-- wp:accordion-panel -->
<div class="wp-block-accordion-panel"><div class="accordion-content__wrapper"><!-- wp:paragraph -->
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
<!-- /wp:paragraph --></div></div>
<!-- /wp:accordion-panel --></div>
<!-- /wp:accordion-item -->

<!-- wp:accordion-item -->
<div class="wp-block-accordion-item"><!-- wp:accordion-header -->
<h3 class="wp-block-accordion-header accordion-item__heading"><button class="accordion-item__toggle"><span>How to use the accordion block</span><span class="accordion-item__toggle-icon has-icon-plus" style="width:1.2em;height:1.2em"><span style="display:inline-block;width:1.2em;height:1.2em;line-height:1.2empx;text-align:center;font-size:NaNpx;font-weight:bold;color:currentColor">+</span></span></button></h3>
<!-- /wp:accordion-header -->

<!-- wp:accordion-panel -->
<div class="wp-block-accordion-panel"><div class="accordion-content__wrapper"><!-- wp:paragraph -->
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
<!-- /wp:paragraph --></div></div>
<!-- /wp:accordion-panel --></div>
<!-- /wp:accordion-item -->

<!-- wp:accordion-item -->
<div class="wp-block-accordion-item"><!-- wp:accordion-header -->
<h3 class="wp-block-accordion-header accordion-item__heading"><button class="accordion-item__toggle"><span>Best practices of accordion patterns</span><span class="accordion-item__toggle-icon has-icon-plus" style="width:1.2em;height:1.2em"><span style="display:inline-block;width:1.2em;height:1.2em;line-height:1.2empx;text-align:center;font-size:NaNpx;font-weight:bold;color:currentColor">+</span></span></button></h3>
<!-- /wp:accordion-header -->

<!-- wp:accordion-panel -->
<div class="wp-block-accordion-panel"><div class="accordion-content__wrapper"><!-- wp:paragraph -->
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
<!-- /wp:paragraph --></div></div>
<!-- /wp:accordion-panel --></div>
<!-- /wp:accordion-item -->

<!-- wp:accordion-item -->
<div class="wp-block-accordion-item"><!-- wp:accordion-header -->
<h3 class="wp-block-accordion-header accordion-item__heading"><button class="accordion-item__toggle"><span>Common questions and mistakes</span><span class="accordion-item__toggle-icon has-icon-plus" style="width:1.2em;height:1.2em"><span style="display:inline-block;width:1.2em;height:1.2em;line-height:1.2empx;text-align:center;font-size:NaNpx;font-weight:bold;color:currentColor">+</span></span></button></h3>
<!-- /wp:accordion-header -->

<!-- wp:accordion-panel {"isSelected":true} -->
<div class="wp-block-accordion-panel"><div class="accordion-content__wrapper"><!-- wp:paragraph -->
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<!-- /wp:paragraph --></div></div>
<!-- /wp:accordion-panel --></div>
<!-- /wp:accordion-item --></div>
<!-- /wp:accordions -->

Copy link

github-actions bot commented Jul 30, 2024

Size Change: +4.93 kB (+0.26%)

Total Size: 1.92 MB

Filename Size Change
build/block-library/index.min.js 232 kB +2.56 kB (+1.11%)
build/block-library/style-rtl.css 15.4 kB +385 B (+2.56%)
build/block-library/style.css 15.4 kB +384 B (+2.56%)
build-module/block-library/accordions/view.min.js 427 B +427 B (new file) 🆕
build/block-library/blocks/accordions/style-rtl.css 591 B +591 B (new file) 🆕
build/block-library/blocks/accordions/style.css 590 B +590 B (new file) 🆕
ℹ️ View Unchanged
Filename Size
build-module/a11y/index.min.js 482 B
build-module/block-library/file/view.min.js 466 B
build-module/block-library/form/view.min.js 533 B
build-module/block-library/image/view.min.js 1.78 kB
build-module/block-library/navigation/view.min.js 1.19 kB
build-module/block-library/query/view.min.js 767 B
build-module/block-library/search/view.min.js 639 B
build-module/interactivity-router/full-page.min.js 565 B
build-module/interactivity-router/index.min.js 11.4 kB
build-module/interactivity/debug.min.js 17.5 kB
build-module/interactivity/index.min.js 13.9 kB
build/a11y/index.min.js 952 B
build/annotations/index.min.js 2.13 kB
build/api-fetch/index.min.js 2.4 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 579 B
build/block-directory/index.min.js 7.18 kB
build/block-directory/style-rtl.css 1.03 kB
build/block-directory/style.css 1.03 kB
build/block-editor/content-rtl.css 4.43 kB
build/block-editor/content.css 4.42 kB
build/block-editor/default-editor-styles-rtl.css 392 B
build/block-editor/default-editor-styles.css 392 B
build/block-editor/index.min.js 266 kB
build/block-editor/style-rtl.css 15.9 kB
build/block-editor/style.css 15.9 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 61 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 149 B
build/block-library/blocks/audio/editor.css 151 B
build/block-library/blocks/audio/style-rtl.css 132 B
build/block-library/blocks/audio/style.css 132 B
build/block-library/blocks/audio/theme-rtl.css 134 B
build/block-library/blocks/audio/theme.css 134 B
build/block-library/blocks/avatar/editor-rtl.css 115 B
build/block-library/blocks/avatar/editor.css 115 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/button/editor-rtl.css 265 B
build/block-library/blocks/button/editor.css 265 B
build/block-library/blocks/button/style-rtl.css 554 B
build/block-library/blocks/button/style.css 554 B
build/block-library/blocks/buttons/editor-rtl.css 291 B
build/block-library/blocks/buttons/editor.css 291 B
build/block-library/blocks/buttons/style-rtl.css 349 B
build/block-library/blocks/buttons/style.css 349 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 132 B
build/block-library/blocks/categories/editor.css 131 B
build/block-library/blocks/categories/style-rtl.css 152 B
build/block-library/blocks/categories/style.css 152 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 139 B
build/block-library/blocks/code/style.css 139 B
build/block-library/blocks/code/theme-rtl.css 122 B
build/block-library/blocks/code/theme.css 122 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 420 B
build/block-library/blocks/columns/style.css 420 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 124 B
build/block-library/blocks/comment-author-avatar/editor.css 124 B
build/block-library/blocks/comment-author-name/style-rtl.css 72 B
build/block-library/blocks/comment-author-name/style.css 72 B
build/block-library/blocks/comment-content/style-rtl.css 120 B
build/block-library/blocks/comment-content/style.css 120 B
build/block-library/blocks/comment-date/style-rtl.css 65 B
build/block-library/blocks/comment-date/style.css 65 B
build/block-library/blocks/comment-edit-link/style-rtl.css 70 B
build/block-library/blocks/comment-edit-link/style.css 70 B
build/block-library/blocks/comment-reply-link/style-rtl.css 71 B
build/block-library/blocks/comment-reply-link/style.css 71 B
build/block-library/blocks/comment-template/style-rtl.css 191 B
build/block-library/blocks/comment-template/style.css 191 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 168 B
build/block-library/blocks/comments-pagination/editor.css 168 B
build/block-library/blocks/comments-pagination/style-rtl.css 201 B
build/block-library/blocks/comments-pagination/style.css 201 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 842 B
build/block-library/blocks/comments/editor.css 842 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 637 B
build/block-library/blocks/cover/editor-rtl.css 631 B
build/block-library/blocks/cover/editor.css 631 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 86 B
build/block-library/blocks/details/style.css 86 B
build/block-library/blocks/embed/editor-rtl.css 331 B
build/block-library/blocks/embed/editor.css 331 B
build/block-library/blocks/embed/style-rtl.css 419 B
build/block-library/blocks/embed/style.css 419 B
build/block-library/blocks/embed/theme-rtl.css 133 B
build/block-library/blocks/embed/theme.css 133 B
build/block-library/blocks/file/editor-rtl.css 326 B
build/block-library/blocks/file/editor.css 326 B
build/block-library/blocks/file/style-rtl.css 278 B
build/block-library/blocks/file/style.css 278 B
build/block-library/blocks/footnotes/style-rtl.css 198 B
build/block-library/blocks/footnotes/style.css 197 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 229 B
build/block-library/blocks/form-input/style-rtl.css 349 B
build/block-library/blocks/form-input/style.css 349 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 344 B
build/block-library/blocks/form-submission-notification/editor.css 341 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/freeform/editor-rtl.css 2.59 kB
build/block-library/blocks/freeform/editor.css 2.59 kB
build/block-library/blocks/gallery/editor-rtl.css 615 B
build/block-library/blocks/gallery/editor.css 616 B
build/block-library/blocks/gallery/style-rtl.css 1.83 kB
build/block-library/blocks/gallery/style.css 1.83 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 334 B
build/block-library/blocks/group/editor.css 334 B
build/block-library/blocks/group/style-rtl.css 103 B
build/block-library/blocks/group/style.css 103 B
build/block-library/blocks/group/theme-rtl.css 79 B
build/block-library/blocks/group/theme.css 79 B
build/block-library/blocks/heading/style-rtl.css 188 B
build/block-library/blocks/heading/style.css 188 B
build/block-library/blocks/html/editor-rtl.css 353 B
build/block-library/blocks/html/editor.css 354 B
build/block-library/blocks/image/editor-rtl.css 763 B
build/block-library/blocks/image/editor.css 763 B
build/block-library/blocks/image/style-rtl.css 1.6 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/latest-comments/style-rtl.css 355 B
build/block-library/blocks/latest-comments/style.css 354 B
build/block-library/blocks/latest-posts/editor-rtl.css 139 B
build/block-library/blocks/latest-posts/editor.css 138 B
build/block-library/blocks/latest-posts/style-rtl.css 520 B
build/block-library/blocks/latest-posts/style.css 520 B
build/block-library/blocks/list/style-rtl.css 107 B
build/block-library/blocks/list/style.css 107 B
build/block-library/blocks/loginout/style-rtl.css 61 B
build/block-library/blocks/loginout/style.css 61 B
build/block-library/blocks/media-text/editor-rtl.css 321 B
build/block-library/blocks/media-text/editor.css 320 B
build/block-library/blocks/media-text/style-rtl.css 543 B
build/block-library/blocks/media-text/style.css 542 B
build/block-library/blocks/more/editor-rtl.css 393 B
build/block-library/blocks/more/editor.css 393 B
build/block-library/blocks/navigation-link/editor-rtl.css 566 B
build/block-library/blocks/navigation-link/editor.css 568 B
build/block-library/blocks/navigation-link/style-rtl.css 192 B
build/block-library/blocks/navigation-link/style.css 191 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 295 B
build/block-library/blocks/navigation-submenu/editor.css 294 B
build/block-library/blocks/navigation/editor-rtl.css 2.23 kB
build/block-library/blocks/navigation/editor.css 2.24 kB
build/block-library/blocks/navigation/style-rtl.css 2.27 kB
build/block-library/blocks/navigation/style.css 2.26 kB
build/block-library/blocks/nextpage/editor-rtl.css 392 B
build/block-library/blocks/nextpage/editor.css 392 B
build/block-library/blocks/page-list/editor-rtl.css 356 B
build/block-library/blocks/page-list/editor.css 356 B
build/block-library/blocks/page-list/style-rtl.css 192 B
build/block-library/blocks/page-list/style.css 192 B
build/block-library/blocks/paragraph/editor-rtl.css 251 B
build/block-library/blocks/paragraph/editor.css 251 B
build/block-library/blocks/paragraph/style-rtl.css 341 B
build/block-library/blocks/paragraph/style.css 340 B
build/block-library/blocks/post-author-biography/style-rtl.css 74 B
build/block-library/blocks/post-author-biography/style.css 74 B
build/block-library/blocks/post-author-name/style-rtl.css 69 B
build/block-library/blocks/post-author-name/style.css 69 B
build/block-library/blocks/post-author/style-rtl.css 188 B
build/block-library/blocks/post-author/style.css 189 B
build/block-library/blocks/post-comments-count/style-rtl.css 72 B
build/block-library/blocks/post-comments-count/style.css 72 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 527 B
build/block-library/blocks/post-comments-form/style.css 528 B
build/block-library/blocks/post-comments-link/style-rtl.css 71 B
build/block-library/blocks/post-comments-link/style.css 71 B
build/block-library/blocks/post-content/style-rtl.css 61 B
build/block-library/blocks/post-content/style.css 61 B
build/block-library/blocks/post-date/style-rtl.css 62 B
build/block-library/blocks/post-date/style.css 62 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 155 B
build/block-library/blocks/post-excerpt/style.css 155 B
build/block-library/blocks/post-featured-image/editor-rtl.css 715 B
build/block-library/blocks/post-featured-image/editor.css 712 B
build/block-library/blocks/post-featured-image/style-rtl.css 347 B
build/block-library/blocks/post-featured-image/style.css 347 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/style-rtl.css 414 B
build/block-library/blocks/post-template/style.css 414 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 70 B
build/block-library/blocks/post-time-to-read/style.css 70 B
build/block-library/blocks/post-title/style-rtl.css 162 B
build/block-library/blocks/post-title/style.css 162 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 133 B
build/block-library/blocks/pullquote/editor.css 133 B
build/block-library/blocks/pullquote/style-rtl.css 365 B
build/block-library/blocks/pullquote/style.css 365 B
build/block-library/blocks/pullquote/theme-rtl.css 176 B
build/block-library/blocks/pullquote/theme.css 176 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 121 B
build/block-library/blocks/query-pagination-numbers/editor.css 118 B
build/block-library/blocks/query-pagination/editor-rtl.css 154 B
build/block-library/blocks/query-pagination/editor.css 154 B
build/block-library/blocks/query-pagination/style-rtl.css 237 B
build/block-library/blocks/query-pagination/style.css 237 B
build/block-library/blocks/query-title/style-rtl.css 64 B
build/block-library/blocks/query-title/style.css 64 B
build/block-library/blocks/query-total/style-rtl.css 64 B
build/block-library/blocks/query-total/style.css 64 B
build/block-library/blocks/query/editor-rtl.css 404 B
build/block-library/blocks/query/editor.css 404 B
build/block-library/blocks/quote/style-rtl.css 238 B
build/block-library/blocks/quote/style.css 238 B
build/block-library/blocks/quote/theme-rtl.css 233 B
build/block-library/blocks/quote/theme.css 236 B
build/block-library/blocks/read-more/style-rtl.css 131 B
build/block-library/blocks/read-more/style.css 131 B
build/block-library/blocks/rss/editor-rtl.css 126 B
build/block-library/blocks/rss/editor.css 126 B
build/block-library/blocks/rss/style-rtl.css 284 B
build/block-library/blocks/rss/style.css 283 B
build/block-library/blocks/search/editor-rtl.css 199 B
build/block-library/blocks/search/editor.css 199 B
build/block-library/blocks/search/style-rtl.css 674 B
build/block-library/blocks/search/style.css 671 B
build/block-library/blocks/search/theme-rtl.css 113 B
build/block-library/blocks/search/theme.css 113 B
build/block-library/blocks/separator/editor-rtl.css 100 B
build/block-library/blocks/separator/editor.css 100 B
build/block-library/blocks/separator/style-rtl.css 248 B
build/block-library/blocks/separator/style.css 248 B
build/block-library/blocks/separator/theme-rtl.css 195 B
build/block-library/blocks/separator/theme.css 195 B
build/block-library/blocks/shortcode/editor-rtl.css 286 B
build/block-library/blocks/shortcode/editor.css 286 B
build/block-library/blocks/site-logo/editor-rtl.css 773 B
build/block-library/blocks/site-logo/editor.css 770 B
build/block-library/blocks/site-logo/style-rtl.css 218 B
build/block-library/blocks/site-logo/style.css 218 B
build/block-library/blocks/site-tagline/editor-rtl.css 87 B
build/block-library/blocks/site-tagline/editor.css 87 B
build/block-library/blocks/site-tagline/style-rtl.css 65 B
build/block-library/blocks/site-tagline/style.css 65 B
build/block-library/blocks/site-title/editor-rtl.css 85 B
build/block-library/blocks/site-title/editor.css 85 B
build/block-library/blocks/site-title/style-rtl.css 143 B
build/block-library/blocks/site-title/style.css 143 B
build/block-library/blocks/social-link/editor-rtl.css 314 B
build/block-library/blocks/social-link/editor.css 314 B
build/block-library/blocks/social-links/editor-rtl.css 339 B
build/block-library/blocks/social-links/editor.css 338 B
build/block-library/blocks/social-links/style-rtl.css 1.51 kB
build/block-library/blocks/social-links/style.css 1.51 kB
build/block-library/blocks/spacer/editor-rtl.css 346 B
build/block-library/blocks/spacer/editor.css 346 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table-of-contents/style-rtl.css 83 B
build/block-library/blocks/table-of-contents/style.css 83 B
build/block-library/blocks/table/editor-rtl.css 394 B
build/block-library/blocks/table/editor.css 394 B
build/block-library/blocks/table/style-rtl.css 640 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 152 B
build/block-library/blocks/table/theme.css 152 B
build/block-library/blocks/tag-cloud/editor-rtl.css 92 B
build/block-library/blocks/tag-cloud/editor.css 92 B
build/block-library/blocks/tag-cloud/style-rtl.css 248 B
build/block-library/blocks/tag-cloud/style.css 248 B
build/block-library/blocks/template-part/editor-rtl.css 368 B
build/block-library/blocks/template-part/editor.css 368 B
build/block-library/blocks/template-part/theme-rtl.css 113 B
build/block-library/blocks/template-part/theme.css 113 B
build/block-library/blocks/term-description/style-rtl.css 126 B
build/block-library/blocks/term-description/style.css 126 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 165 B
build/block-library/blocks/text-columns/style.css 165 B
build/block-library/blocks/verse/style-rtl.css 98 B
build/block-library/blocks/verse/style.css 98 B
build/block-library/blocks/video/editor-rtl.css 413 B
build/block-library/blocks/video/editor.css 414 B
build/block-library/blocks/video/style-rtl.css 202 B
build/block-library/blocks/video/style.css 202 B
build/block-library/blocks/video/theme-rtl.css 134 B
build/block-library/blocks/video/theme.css 134 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.08 kB
build/block-library/common.css 1.08 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 11.4 kB
build/block-library/editor.css 11.4 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/theme-rtl.css 715 B
build/block-library/theme.css 719 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 52.6 kB
build/commands/index.min.js 16.2 kB
build/commands/style-rtl.css 956 B
build/commands/style.css 953 B
build/components/index.min.js 249 kB
build/components/style-rtl.css 13.6 kB
build/components/style.css 13.6 kB
build/compose/index.min.js 12.8 kB
build/core-commands/index.min.js 3.09 kB
build/core-data/index.min.js 74.9 kB
build/customize-widgets/index.min.js 11 kB
build/customize-widgets/style-rtl.css 1.43 kB
build/customize-widgets/style.css 1.43 kB
build/data-controls/index.min.js 641 B
build/data/index.min.js 8.67 kB
build/date/index.min.js 18 kB
build/deprecated/index.min.js 458 B
build/dom-ready/index.min.js 325 B
build/dom/index.min.js 4.68 kB
build/edit-post/classic-rtl.css 577 B
build/edit-post/classic.css 578 B
build/edit-post/index.min.js 13.4 kB
build/edit-post/style-rtl.css 2.69 kB
build/edit-post/style.css 2.69 kB
build/edit-site/index.min.js 235 kB
build/edit-site/posts-rtl.css 8.68 kB
build/edit-site/posts.css 8.68 kB
build/edit-site/style-rtl.css 14.7 kB
build/edit-site/style.css 14.7 kB
build/edit-widgets/index.min.js 17.8 kB
build/edit-widgets/style-rtl.css 4.05 kB
build/edit-widgets/style.css 4.06 kB
build/editor/index.min.js 127 kB
build/editor/style-rtl.css 9.2 kB
build/editor/style.css 9.21 kB
build/element/index.min.js 4.82 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.23 kB
build/format-library/style-rtl.css 472 B
build/format-library/style.css 472 B
build/hooks/index.min.js 1.65 kB
build/html-entities/index.min.js 467 B
build/i18n/index.min.js 2.23 kB
build/is-shallow-equal/index.min.js 526 B
build/keyboard-shortcuts/index.min.js 1.31 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.13 kB
build/list-reusable-blocks/style-rtl.css 847 B
build/list-reusable-blocks/style.css 848 B
build/media-utils/index.min.js 3.69 kB
build/notices/index.min.js 946 B
build/nux/index.min.js 1.62 kB
build/nux/style-rtl.css 767 B
build/nux/style.css 763 B
build/patterns/index.min.js 7.36 kB
build/patterns/style-rtl.css 687 B
build/patterns/style.css 685 B
build/plugins/index.min.js 1.86 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.9 kB
build/preferences/style-rtl.css 562 B
build/preferences/style.css 562 B
build/primitives/index.min.js 829 B
build/priority-queue/index.min.js 1.54 kB
build/private-apis/index.min.js 978 B
build/react-i18n/index.min.js 630 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.76 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.53 kB
build/reusable-blocks/style-rtl.css 255 B
build/reusable-blocks/style.css 255 B
build/rich-text/index.min.js 12.2 kB
build/router/index.min.js 5.44 kB
build/server-side-render/index.min.js 1.6 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 2.04 kB
build/token-list/index.min.js 581 B
build/url/index.min.js 3.97 kB
build/vendors/react-dom.min.js 41.7 kB
build/vendors/react-jsx-runtime.min.js 556 B
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 965 B
build/vips/index.min.js 36.2 kB
build/warning/index.min.js 250 B
build/widgets/index.min.js 7.16 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@jffng jffng added [Type] Enhancement A suggestion for improvement. New Block Suggestion for a new block labels Jul 31, 2024
@jffng jffng force-pushed the try/accordion-block branch 2 times, most recently from c22c920 to f6726e8 Compare July 31, 2024 20:44
@jffng jffng self-assigned this Jul 31, 2024
Copy link
Member

@luisherranz luisherranz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is exciting. I'm happy to see more interactive blocks in Core 🙂

I have left some comments here, but overall it looks great.

Copy link
Member

@luisherranz luisherranz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code-wise seems good to me. It'll probably be ready to go once you've reviewed how to share functions between different Gutenberg blocks 🙂

EDIT: I've labeled the pull request with "Needs Accessibility Review" to ensure this block also undergoes an accessibility review.

}

$p = new WP_HTML_Tag_Processor( $content );
$unique_id = wp_unique_id( 'accordion-item-' );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's leave it with wp_unique_id for the moment 👍

@jffng
Copy link
Contributor Author

jffng commented Aug 6, 2024

I plan to follow up with some design and UX improvements, and will mark the PR ready for review after that.

@Nyiriland
Copy link

@jffng Picking up convo from over here.

do you still think h4 or h5 is best for the default, or can we keep it h3?

I polled some other designers who regularly build sites, and the vote was to keep it an h3 (although both work IMO). I have a feeling h5 will most likely be too small in most themes.

Also something to consider is when this setting is enabled and multiple accordion items are open by default, clicking any open section actually closes all of them.

Yeah, although this is a bit weird, it makes functional sense, and should be included in the wording. What about this for the Accordion Group language:

Toggle: "Auto-close"
Helper text: "Automatically closes accordions when a new one is opened."

@jffng jffng marked this pull request as ready for review August 12, 2024 18:51
Copy link

github-actions bot commented Aug 12, 2024

Flaky tests detected in 43dc276.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/16940178291
📝 Reported issues:

@WordPress WordPress deleted a comment from github-actions bot Aug 12, 2024

This comment was marked as resolved.

@ndiego
Copy link
Member

ndiego commented Aug 12, 2024

Just noting that it would be good to make the Heading level attribute extensible as we recently did with other Core blocks that use the HeadingLevelDropdown component.

Here's the original PR for reference: #63535

@hanneslsm

This comment was marked as resolved.

Copy link
Member

@mikachan mikachan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is looking amazing, thank you for working on it ✨

When testing it out, I noticed that the accordions are difficult to close in the Editor when clicking on the close button, but maybe this is on purpose, as you also need to be able to click to edit the title:

Screen.Recording.2024-08-14.at.12.20.04.mov

They close easily if I click anywhere outside the accordion content.

Otherwise, this is testing on the front-end and in the Editor really well for me.

I've also tested using a screen reader, and I believe all the notices that are read out sound correct. I am also able to tab through the accordions in the Editor to edit their titles and contents. However, it would be great to see more specific accessibility feedback before this lands. I did notice a small potential change to the way aria-labelledby and aria-controls are used, I think both may need their own unique id references.

@mikachan mikachan changed the title Add Accordion Block Add Accordions Block Aug 12, 2025
@jasmussen
Copy link
Contributor

From my POV this one is ready! Just needs a good code gutcheck.

@scruffian
Copy link
Contributor

One piece of usability feedback: The only way I could discover to add another Accordion to the group was using the [+] appender. I wonder if its also worth surfacing an action for that in the Block Toolbar, but this is probably best as a follow up if others give similar feedback.

@jasmussen
Copy link
Contributor

Can use similar vernacular, potentially, as what exists for the Gallery block:

image

"Add". Or "Add group".

@mikachan
Copy link
Member

Good idea, thanks both. I like the idea of adding an "Add" button to the toolbar. Maybe this could be done in a follow-up PR, as this one is already quite big.

Copy link
Contributor

@scruffian scruffian left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested this with Global Styles. When I set a color for the heading, the CSS for the block overrides it:

Screenshot 2025-08-13 at 14 01 48

Copy link
Contributor

@scruffian scruffian left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is looking good to me now. Let's bring it in!

@dinhtungdu
Copy link
Contributor

The block works wonders! Amazing updates @mikachan! I only have a question on extensibility.

Have we considered using a Heading block inside the Accordion Header? By doing so, we won't have to worry about styling the heading anymore. It also paves the way for extenders to customize the header content.

There is one use case that comes from WooCommerce: previously, with the classic theme, we used a tab for product details and displayed the number of reviews in the tab title of the review tab. Recently, we introduced a new accordion layout (which is a clone of this block), but we can't show the number of reviews in the accordion header because it's a static string set in the editor. If the Accordion Header block supports inner blocks, we can solve that issue nicely with a custom block. I will have the same need if I wrap the Comments block inside an Accordion.

@jasmussen
Copy link
Contributor

Have we considered using a Heading block inside the Accordion Header? By doing so, we won't have to worry about styling the heading anymore. It also paves the way for extenders to customize the header content.

The main challenge is that it might make it easy to create incorrect heading level hierarchies in the DOM. E.g. usually your post title is an H2, so we can default H3 in the accordion, which should make it match in most cases. However then you insert an accordion on your homepage, where perhaps the site title is an H1, then you'll have a missing level in-between.

This is usually the reason to not use heading blocks in compound blocks, because you have to choose a heading level and often times that can cause conflicts. Whereas using just a paragraph block will enable any styling, even to match headings or intentionally diverge, and it will never cause such hierarchy conflicts.

@scruffian
Copy link
Contributor

The block does use heading elements, so we already have that challenge. I believe the reason for not using the Heading block is that it doesn't allow inner blocks, and we want to toggle to open and close the accordion using the heading element. This is so we could use the same semantics as https://www.w3.org/WAI/ARIA/apg/patterns/accordion/examples/accordion/ and https://designsystem.digital.gov/components/accordion/

@jasmussen
Copy link
Contributor

That's valid enough. Another thing on the radar is a "linting tool", a la VS Code, but for the block editor. It's not a new idea and likely exists in an issue in the archive somewhere.

This would provide an interface for flagging warnings, errors, and notice level bits. Incorrect headings should be flagged as errors, and could well show up in a pre-publish dialog, as well as the document outline. I.e. if an error is shown, we’d show an unread dot on top of the List view button (which serendipitously would be similar to the unread dot here), alerting you to the issue.

@MaggieCabrera
Copy link
Contributor

That's valid enough. Another thing on the radar is a "linting tool", a la VS Code, but for the block editor. It's not a new idea and likely exists in an issue in the archive somewhere.

This would provide an interface for flagging warnings, errors, and notice level bits. Incorrect headings should be flagged as errors, and could well show up in a pre-publish dialog, as well as the document outline. I.e. if an error is shown, we’d show an unread dot on top of the List view button (which serendipitously would be similar to the unread dot here), alerting you to the issue.

I was thinking about this too. It would need the context of the whole template, if editing on the post editor, but it would be really helpful!

@jasmussen
Copy link
Contributor

jasmussen commented Aug 14, 2025

Yes, this would be a global linting system for anything, not just pieces here or there. Choosing the right heading levels is not a challenge unique to just one block. The system could also flag in the three levels many other things that would be good to know about, whether failing contrasts, missing or even dead links, blocks in a setup state, hidden blocks, etc etc. The system should also be extensible, so potentially SEO plugins can use an official API to provide suggestions.

But to be clear, I would not think of this system as a blocker for the accordion to land. This idea has been around for years at this point, and although its potential value keeps going up, it hasn't yet been more important than many of the other shortcomings we mean to address, including this block itself!

@MaggieCabrera
Copy link
Contributor

Yes, this would be a global linting system for anything, not just pieces here or there. Choosing the right heading levels is not a challenge unique to just one block. The system could also flag in the three levels many other things that would be good to know about, whether failing contrasts, missing or even dead links, blocks in a setup state, hidden blocks, etc etc. The system should also be extensible, so potentially SEO plugins can use an official API to provide suggestions.

But to be clear, I would not think of this system as a blocker for the accordion to land. This idea has been around for years at this point, and although its potential value keeps going up, it hasn't yet been more important than many of the other shortcomings we mean to address, including this block itself!

yes yes, I didn't mean to derail this PR :) I would love to see this happening though, I hope we can prioritize it soon enough

@mikachan
Copy link
Member

There is one use case that comes from WooCommerce: previously, with the classic theme, we used a tab for product details and displayed the number of reviews in the tab title of the review tab. Recently, we introduced a new accordion layout (which is a clone of this block), but we can't show the number of reviews in the accordion header because it's a static string set in the editor. If the Accordion Header block supports inner blocks, we can solve that issue nicely with a custom block. I will have the same need if I wrap the Comments block inside an Accordion.

I think the biggest issue with allowing inner blocks inside the Accordion Header is that it could disrupt the semantic markup of this block. However, I'll have a think about how we could address this. Maybe we could allow appending string content to the existing header string.

Thanks for all the feedback! I'll get this merged, and then we can start addressing the follow-ups:

  • Add an "Add" button to the toolbar to easily add another Accordion Item
  • Think about how to append content to the Accordion Header content

@mikachan mikachan merged commit 12f6389 into trunk Aug 14, 2025
74 checks passed
@mikachan mikachan deleted the try/accordion-block branch August 14, 2025 14:24
@github-actions github-actions bot added this to the Gutenberg 21.5 milestone Aug 14, 2025
@portrayaloflife
Copy link

Thank you everyone!

@dinhtungdu
Copy link
Contributor

Think about how to append content to the Accordion Header content

@mikachan I think we should make it not only appendable but also adjustable. Additionally, what we do here should also be applied to the Tab block. This is an interesting problem to solve btw. I can think of one way to do it is using block variation, for example, a Review Accordion Header variation to be used with the Reviews block, then filter the block content server-side before sending to the client. It's far from perfect, though, even hacky, but at least something doable right now.

@bph bph added the [Feature] Blocks Overall functionality of blocks label Aug 21, 2025
@sntran
Copy link

sntran commented Aug 29, 2025

Hello,

Not sure where the appropriate place to bring this up, but would there be plan to integrate or make this block transformable from/to post-template block? There are FAQs post types that would be nice to make them accordion inside a query loop.

@mikachan
Copy link
Member

@sntran It's usually best to open a new issue for feature requests like this. This sounds like an interesting idea, especially for FAQ patterns.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Accordion (experimental) Affects the Accordion Block [Feature] Blocks Overall functionality of blocks Needs Accessibility Feedback Need input from accessibility New Block Suggestion for a new block No Core Sync Required Indicates that any changes do not need to be synced to WordPress Core
Projects
None yet
Development

Successfully merging this pull request may close these issues.

New block: Accordion block