Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Post editor: fix meta boxes accessibility #65466

Merged
merged 16 commits into from
Oct 8, 2024

Conversation

stokesman
Copy link
Contributor

@stokesman stokesman commented Sep 18, 2024

What?

A fix for meta box headings being absent from accessibility tree when their container is collapsed.

Why?

Meta boxes are expected to be accessible even if their container is collapsed.

To fix #65406.

How?

  1. Replaces the details element with a custom expandable (using aria-expanded).
  2. Makes the meta boxes container a region and includes it in the navigable regions.

Testing Instructions for Keyboard

Have a plugin activated that creates meta boxes or have the custom fields preference on and open a post or page in the Post editor.

Toggle (short viewport)

  1. Make sure your window is short enough (less than 550 pixels tall)
  2. Verify the meta box headings are in the document hierarchy whether or not they are visually hidden.

@stokesman stokesman added [Type] Bug An existing feature does not function as intended [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). [Feature] Meta Boxes A draggable box shown on the post editing screen [Package] Edit Post /packages/edit-post labels Sep 18, 2024
Copy link

github-actions bot commented Sep 18, 2024

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: stokesman <[email protected]>
Co-authored-by: DaniGuardiola <[email protected]>
Co-authored-by: joedolson <[email protected]>
Co-authored-by: t-hamano <[email protected]>
Co-authored-by: tyxla <[email protected]>
Co-authored-by: afercia <[email protected]>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

Copy link

github-actions bot commented Sep 18, 2024

Size Change: +630 B (+0.04%)

Total Size: 1.77 MB

Filename Size Change
build/edit-post/index.min.js 13.7 kB +142 B (+1.05%)
build/edit-post/style-rtl.css 2.76 kB +218 B (+8.59%) 🔍
build/edit-post/style.css 2.75 kB +219 B (+8.64%) 🔍
build/edit-widgets/index.min.js 17.8 kB +28 B (+0.16%)
build/editor/index.min.js 103 kB +23 B (+0.02%)
ℹ️ View Unchanged
Filename Size
build-module/a11y/index.min.js 482 B
build-module/block-library/file/view.min.js 447 B
build-module/block-library/image/view.min.js 1.78 kB
build-module/block-library/navigation/view.min.js 1.16 kB
build-module/block-library/query/view.min.js 743 B
build-module/block-library/search/view.min.js 616 B
build-module/interactivity-router/index.min.js 3 kB
build-module/interactivity/debug.min.js 16.7 kB
build-module/interactivity/index.min.js 13.4 kB
build/a11y/index.min.js 952 B
build/annotations/index.min.js 2.26 kB
build/api-fetch/index.min.js 2.32 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 579 B
build/block-directory/index.min.js 7.26 kB
build/block-directory/style-rtl.css 1.07 kB
build/block-directory/style.css 1.07 kB
build/block-editor/content-rtl.css 4.45 kB
build/block-editor/content.css 4.45 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
build/block-editor/index.min.js 256 kB
build/block-editor/style-rtl.css 15.5 kB
build/block-editor/style.css 15.5 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 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 538 B
build/block-library/blocks/button/style.css 538 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 345 B
build/block-library/blocks/buttons/style.css 345 B
build/block-library/blocks/calendar/style-rtl.css 240 B
build/block-library/blocks/calendar/style.css 240 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 121 B
build/block-library/blocks/code/style.css 121 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 200 B
build/block-library/blocks/comment-template/style.css 199 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 228 B
build/block-library/blocks/comments-pagination/editor.css 217 B
build/block-library/blocks/comments-pagination/style-rtl.css 234 B
build/block-library/blocks/comments-pagination/style.css 231 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 832 B
build/block-library/blocks/comments/editor.css 832 B
build/block-library/blocks/comments/style-rtl.css 632 B
build/block-library/blocks/comments/style.css 631 B
build/block-library/blocks/cover/editor-rtl.css 641 B
build/block-library/blocks/cover/editor.css 642 B
build/block-library/blocks/cover/style-rtl.css 1.62 kB
build/block-library/blocks/cover/style.css 1.6 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 279 B
build/block-library/blocks/file/view.min.js 324 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 357 B
build/block-library/blocks/form-input/style.css 357 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/form/view.min.js 470 B
build/block-library/blocks/freeform/editor-rtl.css 2.6 kB
build/block-library/blocks/freeform/editor.css 2.6 kB
build/block-library/blocks/gallery/editor-rtl.css 946 B
build/block-library/blocks/gallery/editor.css 951 B
build/block-library/blocks/gallery/style-rtl.css 1.83 kB
build/block-library/blocks/gallery/style.css 1.82 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 346 B
build/block-library/blocks/html/editor.css 347 B
build/block-library/blocks/image/editor-rtl.css 785 B
build/block-library/blocks/image/editor.css 787 B
build/block-library/blocks/image/style-rtl.css 1.59 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/image/view.min.js 1.65 kB
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 179 B
build/block-library/blocks/latest-posts/editor.css 179 B
build/block-library/blocks/latest-posts/style-rtl.css 509 B
build/block-library/blocks/latest-posts/style.css 510 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 558 B
build/block-library/blocks/media-text/style.css 556 B
build/block-library/blocks/more/editor-rtl.css 427 B
build/block-library/blocks/more/editor.css 427 B
build/block-library/blocks/navigation-link/editor-rtl.css 644 B
build/block-library/blocks/navigation-link/editor.css 645 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.19 kB
build/block-library/blocks/navigation/editor.css 2.2 kB
build/block-library/blocks/navigation/style-rtl.css 2.25 kB
build/block-library/blocks/navigation/style.css 2.23 kB
build/block-library/blocks/navigation/view.min.js 1.03 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 378 B
build/block-library/blocks/page-list/editor.css 378 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 236 B
build/block-library/blocks/paragraph/editor.css 236 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/editor-rtl.css 107 B
build/block-library/blocks/post-author/editor.css 107 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-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-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 729 B
build/block-library/blocks/post-featured-image/editor.css 726 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/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 399 B
build/block-library/blocks/post-template/style.css 398 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 134 B
build/block-library/blocks/pullquote/editor.css 134 B
build/block-library/blocks/pullquote/style-rtl.css 342 B
build/block-library/blocks/pullquote/style.css 342 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 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/editor-rtl.css 452 B
build/block-library/blocks/query/editor.css 451 B
build/block-library/blocks/query/view.min.js 958 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 138 B
build/block-library/blocks/read-more/style.css 138 B
build/block-library/blocks/rss/editor-rtl.css 101 B
build/block-library/blocks/rss/editor.css 101 B
build/block-library/blocks/rss/style-rtl.css 288 B
build/block-library/blocks/rss/style.css 287 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 672 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/search/view.min.js 475 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 806 B
build/block-library/blocks/site-logo/editor.css 803 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 338 B
build/block-library/blocks/social-link/editor.css 338 B
build/block-library/blocks/social-links/editor-rtl.css 729 B
build/block-library/blocks/social-links/editor.css 727 B
build/block-library/blocks/social-links/style-rtl.css 1.51 kB
build/block-library/blocks/social-links/style.css 1.5 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 144 B
build/block-library/blocks/tag-cloud/editor.css 144 B
build/block-library/blocks/tag-cloud/style-rtl.css 266 B
build/block-library/blocks/tag-cloud/style.css 265 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 396 B
build/block-library/blocks/video/editor.css 397 B
build/block-library/blocks/video/style-rtl.css 192 B
build/block-library/blocks/video/style.css 192 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.1 kB
build/block-library/common.css 1.1 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.7 kB
build/block-library/editor.css 11.7 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 219 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.9 kB
build/block-library/style.css 14.9 kB
build/block-library/theme-rtl.css 708 B
build/block-library/theme.css 712 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.5 kB
build/commands/index.min.js 16.1 kB
build/commands/style-rtl.css 955 B
build/commands/style.css 952 B
build/components/index.min.js 227 kB
build/components/style-rtl.css 12.3 kB
build/components/style.css 12.3 kB
build/compose/index.min.js 12.7 kB
build/core-commands/index.min.js 3.11 kB
build/core-data/index.min.js 73.4 kB
build/customize-widgets/index.min.js 11 kB
build/customize-widgets/style-rtl.css 1.35 kB
build/customize-widgets/style.css 1.35 kB
build/data-controls/index.min.js 641 B
build/data/index.min.js 8.98 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.66 kB
build/edit-post/classic-rtl.css 578 B
build/edit-post/classic.css 580 B
build/edit-site/index.min.js 218 kB
build/edit-site/posts-rtl.css 7.35 kB
build/edit-site/posts.css 7.35 kB
build/edit-site/style-rtl.css 12.6 kB
build/edit-site/style.css 12.6 kB
build/edit-widgets/style-rtl.css 4.19 kB
build/edit-widgets/style.css 4.19 kB
build/editor/style-rtl.css 9.33 kB
build/editor/style.css 9.34 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.11 kB
build/format-library/style-rtl.css 476 B
build/format-library/style.css 476 B
build/hooks/index.min.js 1.65 kB
build/html-entities/index.min.js 445 B
build/i18n/index.min.js 3.58 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.19 kB
build/list-reusable-blocks/style-rtl.css 852 B
build/list-reusable-blocks/style.css 852 B
build/media-utils/index.min.js 3.2 kB
build/notices/index.min.js 946 B
build/nux/index.min.js 1.62 kB
build/nux/style-rtl.css 749 B
build/nux/style.css 745 B
build/patterns/index.min.js 7.34 kB
build/patterns/style-rtl.css 687 B
build/patterns/style.css 685 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.9 kB
build/preferences/style-rtl.css 554 B
build/preferences/style.css 554 B
build/primitives/index.min.js 829 B
build/priority-queue/index.min.js 1.54 kB
build/private-apis/index.min.js 960 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.69 kB
build/reusable-blocks/index.min.js 2.55 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.1 kB
build/router/index.min.js 1.96 kB
build/server-side-render/index.min.js 1.94 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.9 kB
build/vendors/react-dom.min.js 41.7 kB
build/vendors/react-jsx-runtime.min.js 560 B
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 965 B
build/warning/index.min.js 250 B
build/widgets/index.min.js 7.17 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

@noisysocks noisysocks added the Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label Sep 18, 2024
@t-hamano
Copy link
Contributor

Thanks for the PR!

I'd like to test this PR in detail later, but one thing I noticed is that when the resize handle is focused, pressing the up and down keys may lose focus.

I checked out #65325 (07c6a1f), which implemented a custom resize handle, and tested this problem, and I was able to reproduce the problem in my environment. And, although the behavior is slightly different, this problem also occurs in this PR. We might have to investigate and fix this issue first.

Below is a video that reproduces the problem in trunk:

688adb4e968556f21270dfa730aa77e0.mp4

By the way, I submitted a PR to the re-resizable library itself to match the focus order and visual order: bokuweb/re-resizable#827 (cc @WordPress/gutenberg-components)

Even if that PR is merged, backporting it to WP 6.7 may have a big impact. Therefore, we might consider shipping this PR at the time of WP 6.7 and updating the library in WP 6.8.

@t-hamano
Copy link
Contributor

t-hamano commented Sep 21, 2024

one thing I noticed is that when the resize handle is focused, pressing the up and down keys may lose focus.

It looks like this problem can be solved just by adding event.preventDefault() here:

const onSeparatorKeyDown = ( event ) => {
const delta = { ArrowUp: 20, ArrowDown: -20 }[ event.key ];

Update:

one thing I noticed is that when the resize handle is focused, pressing the up and down keys may lose focus.

It turns out that this issue is specific to the Windows OS and Chrome browser. When text cursor mode is enabled, pressing the up and down keys takes focus away from the drag handle. In any case, it seems that event.preventDefault() is able to work around the effects of this mode.

@t-hamano
Copy link
Contributor

bokuweb/re-resizable#827 has been merged and released as version 6.10.0. Another way to solve this issue is to update re-resizable.

@tyxla
Copy link
Member

tyxla commented Sep 23, 2024

bokuweb/re-resizable#827 has been merged and released as version 6.10.0. Another way to solve this issue is to update re-resizable.

@t-hamano I see you're already working on it in this branch, but if you need any help, let us know.

@stokesman
Copy link
Contributor Author

It turns out that this issue is specific to the Windows OS and Chrome browser.

I was able to reproduce on Mac OS with Firefox or Chrome as they both support caret browsing. I added the preventDefault call as suggested and all seems well now. Really nice you caught that Aki!

@t-hamano
Copy link
Contributor

I think we have two paths to take. Which one is better?

  1. Backport this PR to WP 6.6 > Update re-resizable library > Replace the custom code implemented in this PR with the ResizableBox component
  2. Update re-resizable library and backport it to WP6.6 (This will solve the tab order issue) > Revert the custom code implemented in this PR (just replace the details element) and backport it to WP 6.6

className: clsx( className, 'is-toggle-only', isOpen && 'is-open' ),
};
paneButtonProps = {
'aria-label': __( 'Expand or collapse meta boxes pane' ),
Copy link
Contributor

Choose a reason for hiding this comment

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

This button should have a managed aria-expanded attribute, which allows the text to be shortened to just 'Meta boxes pane'. The behavior will be conveyed by the value of the aria-expanded attribute, and the extra terms are unnecessary.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks for reviewing! b7f087e adds aria-expanded but since the button itself already had "Meta boxes" as its text I just removed aria-label. Does that seem good?

Copy link
Contributor

@t-hamano t-hamano left a comment

Choose a reason for hiding this comment

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

Regarding the tab order issue, I thought it might be solved by updating the re-resizable library (#65637). However, some behaviors have changed in the latest version, so I couldn't simply update it. Considering the impact on developers, it might be better to proceed with this PR after all.

After testing this PR, I noticed two things so far:


  1. In Windows high contrast mode, I can't see the resize handles and the chevron icon:

high-contrast-mode

details

The following style should help:

Diff
diff --git a/packages/edit-post/src/components/layout/style.scss b/packages/edit-post/src/components/layout/style.scss
index 4e2e72b721..3d4d9af30f 100644
--- a/packages/edit-post/src/components/layout/style.scss
+++ b/packages/edit-post/src/components/layout/style.scss
@@ -5,6 +5,8 @@
        display: flex;
        flex-direction: column;
        overflow: hidden;
+       // Windows High Contrast mode will show this outline, but not the box-shadow.
+       outline: 2px solid transparent;
 }
 
 .edit-post-meta-boxes-main__presenter {
@@ -35,6 +37,10 @@
                        inset: var(--wp-admin-border-width-focus);
                        @include button-style__focus();
                }
+
+               svg {
+                       fill: currentColor;
+               }
        }
 
        .is-resizable > & {
@@ -60,6 +66,8 @@
                                border-radius: $radius-small;
                                transition: width 0.3s ease-out;
                                @include reduce-motion("transition");
+                               // Windows High Contrast mode will show this outline, but not the box-shadow.
+                               outline: 2px solid transparent;
                        }
                }

  1. I can't resize it on touch devices. My guess is that this is because useDragging only targets mouse events. I haven't found a good solution to this yet...

packages/edit-post/src/components/layout/style.scss Outdated Show resolved Hide resolved
}

return (
<aside aria-label={ paneLabel } { ...paneProps }>
Copy link
Contributor

Choose a reason for hiding this comment

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

Is the aside element appropriate here? I'd like to hear from people with more knowledge.

@t-hamano
Copy link
Contributor

I'm not sure if this is possible, but I wanted to share one idea I had.

  • Use a ResizableBox component as before, and render a top resize handle via the handleComponent prop. But the resize handle is NOT focusble.
  • Users with a mouse or touch device can use this resize handle to resize.
  • Overlay a focusable button on the non-focusable resize handle. Attach a key down event to this button. Keyboard users can use this button to resize.

Copy link

Flaky tests detected in 753edcf.
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/11045799667
📝 Reported issues:

@stokesman
Copy link
Contributor Author

stokesman commented Sep 26, 2024

@afercia thanks for weighing in. I’d wanted to try a labeled section for the meta boxes for a couple of reasons.

@joedolson’s #65406 (comment) got me thinking that maybe it improves a11y for the section itself to be locatable so I wanted to apply a label. Using aria-label on an element without a role doesn’t seem recommended so I tried the aside. Now if we switch to a div without a role, would aria-label actually be meaningful? Is the label helpful in the first place?

That same comment also had me wondering if perhaps with a labeled landmark as the container then it would actually be okay to accessibly hide the meta boxes. That would remove my current concern that the container can be collapsed but there’s still a bunch of tab stops within. It seems like we have to uncollapse the section in case focus enters it. I don’t think that’s too challenging but hadn’t done it yet in case the simpler option could be considered.

@afercia
Copy link
Contributor

afercia commented Sep 27, 2024

Now if we switch to a div without a role, would aria-label actually be meaningful? Is the label helpful in the first place?

@t-hamano @stokesman What I meant with my previous comment was to try to make the aside a div with role=region and keep the label. I'd try to render the meta boxes container with a NavigableRegion, that should automatically add role="region" tabindex="-1". That way, the container would be an ARIA landmark and a navigable region. In my quick testing, Ctrl + backtick would work and allow to navigate to the meta boxes region.

Here's what I tried:

-const { Editor, FullscreenMode } = unlock( editorPrivateApis );
+const { Editor, FullscreenMode, NavigableRegion } = unlock( editorPrivateApis );
 const { BlockKeyboardShortcuts } = unlock( blockLibraryPrivateApis );
 const DESIGN_POST_TYPES = [
 	'wp_template',
@@ -298,14 +298,14 @@ function MetaBoxesMain( { isLegacy } ) {
 	const paneLabel = __( 'Meta Boxes' );
 	let Pane, paneProps;
 	if ( isShort ) {
-		Pane = 'aside';
+		Pane = NavigableRegion;
 		paneProps = {
 			className: clsx( className, 'is-toggle-only', isOpen && 'is-open' ),
 		};
 	} else {
 		Pane = ResizableBox;
 		paneProps = /** @type {Parameters<typeof ResizableBox>[0]} */ ( {
-			as: 'aside',
+			as: NavigableRegion,
 			ref: metaBoxesMainRef,
 			className: clsx( className, 'is-resizable' ),
 			defaultSize: { height: openHeight },

Navigale regions in action:

navregion

Edit:
hm, I suspect using the NavigableRegion component would break the Resizablebox functionality. Worth double checking. Otherwise, role="region" tabindex="-1" could be added manually.

@stokesman
Copy link
Contributor Author

@afercia, thanks for clarifying! I like the idea of using NavigableRegion. The only caveat I can think of is that it is possible to have the region go from present to absent if all the meta boxes are set to not show in the preferences. I remember your comment elsewhere that a region should not be conditionally rendered. However, that’s already an issue for other regions in the interface so this seems acceptable. It also seems less bad than the other regions which are more frequently/easily toggled in or out of existence.

I suspect using the NavigableRegion component would break the Resizablebox functionality.

If so, I would guess it’s because NavigableRegion doesn’t accept a ref prop and that’d be a simple thing to fix. I’ll test it out.

@joedolson
Copy link
Contributor

I remember your comment elsewhere that a region should not be conditionally rendered.

I don't think that applies in this case. A region shouldn't be conditionally rendered on the fly, but whether or not to show metaboxes is a persistent conditional. Once set, the region is always present. This is different from examples like the Document overview, which is only present when toggled, and persistent across different editor views.

@stokesman
Copy link
Contributor Author

I don't think that applies in this case

Thanks for elaborating. I thought the same and you explained the reasoning more clearly.

I’ve pushed a couple commits. The first one to create the navigable region and the second to (fully) hide the contents if collapsed. I did so to force the question of whether with a labeled navigable region if that makes it acceptable to hide its contents when not expanded. If not, then don’t we need to add logic to expand the area when focus enters its contents so to avoid invisible tab stops?

@t-hamano
Copy link
Contributor

Test results using NVDA:

ba32c898568419fa43ad6e92b072164c.mp4

@t-hamano
Copy link
Contributor

t-hamano commented Oct 5, 2024

I think we're ready to ship this PR, but what do you think? I'd be grateful for additional accessibility feedback.

@afercia
Copy link
Contributor

afercia commented Oct 7, 2024

If so, I would guess it’s because NavigableRegion doesn’t accept a ref prop and that’d be a simple thing to fix. I’ll test it out.

I see NavigableRegion is now wrapped within a forwardRef and to my understanding that solves the issue, correct?

to (fully) hide the contents if collapsed. I did so to force the question of whether with a labeled navigable region if that makes it acceptable to hide its contents when not expanded. If not, then don’t we need to add logic to expand the area when focus enters its contents so to avoid invisible tab stops?

An entirely empty navigable region (which is an ARIA landmark) wouldn't be ideal. This is a problem for other regions in teh editor. However, to my understanding, the hidden attribute is set on the meta boxes content. If that's correct, the landmark isn't entirely empty. It does contain the heading the move buttons (conditionally shown) and more importantly the toggle button to expand the content. If that's correct I think it's perfectly OK and it functionally follows the pattern used for example for the Publish region, which contains the toggle button (only revealed on focus) when ht epanel is collapsed. Screenshot:

Screenshot 2024-10-07 at 12 27 38

@stokesman
Copy link
Contributor Author

I see NavigableRegion is now wrapped within a forwardRef and to my understanding that solves the issue, correct?

Yes, that makes sure resizing added by ResizableBox works.

If that's correct, the landmark isn't entirely empty.

When collapsed it contains only the button to expand its contents. It is like the Publish region except it’s visible even when not focused.

@t-hamano t-hamano self-requested a review October 8, 2024 08:15
Copy link
Contributor

@t-hamano t-hamano left a comment

Choose a reason for hiding this comment

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

All accessibility concerns appear to be resolved, so it looks like it's ready to ship.

Let's merge this PR so it gets backported into WP 6.7 Beta 3.

@stokesman stokesman enabled auto-merge (squash) October 8, 2024 15:50
@stokesman stokesman merged commit b15b8fd into trunk Oct 8, 2024
66 checks passed
@stokesman stokesman deleted the update/meta-boxes-toggle-without-details branch October 8, 2024 16:05
@github-actions github-actions bot added this to the Gutenberg 19.5 milestone Oct 8, 2024
@github-actions github-actions bot removed the Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label Oct 8, 2024
gutenbergplugin pushed a commit that referenced this pull request Oct 8, 2024
* Replace details element with custom toggle

* Consolidate details of updating height into function

* Reduce conditionals for toggle vs. resizable

* Fix style in RTL

* Remove unneeded overflow style

* Maintain focus even with caret browsing on

* Use `ResizableBox` again

* Add aria-expanded to toggle and remove aria-label

* Fix styles for Windows high contrast mode

* Add missing "border" in Windows high contrast mode

* Move `flex-shrink` rule to toggle only

* Fix rule preserved for non-iframe canvas

* Make meta boxes container a navigable region

* Try hiding meta box region contents when not expanded

* Fix hidden conditional

* Rename a couple functions

Co-authored-by: DaniGuardiola <[email protected]>
Co-authored-by: joedolson <[email protected]>
Co-authored-by: t-hamano <[email protected]>
Co-authored-by: tyxla <[email protected]>
Co-authored-by: afercia <[email protected]>
@github-actions github-actions bot added the Backported to WP Core Pull request that has been successfully merged into WP Core label Oct 8, 2024
Copy link

github-actions bot commented Oct 8, 2024

I just cherry-picked this PR to the wp/6.7 branch to get it included in the next release: 93af574

karthick-murugan pushed a commit to karthick-murugan/gutenberg that referenced this pull request Nov 13, 2024
* Replace details element with custom toggle

* Consolidate details of updating height into function

* Reduce conditionals for toggle vs. resizable

* Fix style in RTL

* Remove unneeded overflow style

* Maintain focus even with caret browsing on

* Use `ResizableBox` again

* Add aria-expanded to toggle and remove aria-label

* Fix styles for Windows high contrast mode

* Add missing "border" in Windows high contrast mode

* Move `flex-shrink` rule to toggle only

* Fix rule preserved for non-iframe canvas

* Make meta boxes container a navigable region

* Try hiding meta box region contents when not expanded

* Fix hidden conditional

* Rename a couple functions

Co-authored-by: DaniGuardiola <[email protected]>
Co-authored-by: joedolson <[email protected]>
Co-authored-by: t-hamano <[email protected]>
Co-authored-by: tyxla <[email protected]>
Co-authored-by: afercia <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Backported to WP Core Pull request that has been successfully merged into WP Core [Feature] Meta Boxes A draggable box shown on the post editing screen [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). [Package] Edit Post /packages/edit-post [Type] Bug An existing feature does not function as intended
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

Don't use a details element for the metaboxes area
7 participants