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

Add block sidebar toggle to block settings menu #65185

Open
wants to merge 5 commits into
base: trunk
Choose a base branch
from

Conversation

getdave
Copy link
Contributor

@getdave getdave commented Sep 10, 2024

What?

Adds ability to access Block Inspector Controls sidebar from block settings menu.

Alternative / complementary to #65118

Why?

As discussed in #65118 it's very difficult for users to find the block sidebar.

This is one step towards making that easier again as suggested by @mtias in #65118 (comment).

How?

Adds as first item in block setitngs dropdown. Disables if the sidebar is already opened.

Note I tried removing the menu item if the toggle is open but the experience seemed quite jarring as the menu remains open even after you toggle it resulting in the item you just clicked being removed from the dropdown menu.

Video showing remove on click
Screen.Capture.on.2024-09-10.at.10-23-05.mp4

Testing Instructions

Please ensure you read the How section above.

  • Select block
  • Click on block settings
  • See new menu item as first option
  • Click to see block sidebar opened

Testing Instructions for Keyboard

Same instructions as above but use keyboard to navigate.

Must ensure that focus is logical and no focus losses occur.

Screenshots or screencast

Screen.Capture.on.2024-09-10.at.10-29-40.mp4

@getdave getdave added [Type] Enhancement A suggestion for improvement. [Feature] Block settings menu The block settings screen labels Sep 10, 2024
@getdave getdave self-assigned this Sep 10, 2024
@getdave getdave changed the title Add toggle to block Add block sidebar toggle to block settings menu Sep 10, 2024
Comment on lines 59 to 63
addFilter(
'editor.BlockEdit',
'core/editor/with-block-settings-inspector-toggle',
withBlockToolbar
);
Copy link
Contributor Author

@getdave getdave Sep 10, 2024

Choose a reason for hiding this comment

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

I'm unsure as to whether a hook is the best option here. I'm principally concerned about performance impacts of block edit hooks which I know can be problematic.

As an alternative, we could try adding the component here:

<>
<PatternsMenuItems />
<TemplatePartMenuItems />
<ContentOnlySettingsMenu />
{ mode === 'template-locked' && (
<DisableNonPageContentBlocks />
) }
{ type === 'wp_navigation' && (
<NavigationBlockEditingMode />
) }
<EditorKeyboardShortcuts />
<KeyboardShortcutHelpModal />
<BlockRemovalWarnings />
<StartPageOptions />
<StartTemplateOptions />
<PatternRenameModal />
<PatternDuplicateModal />
</>

This would avoid it running on each block.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@youknowriad I would value your perspective as to whether menu items that apply to all blocks in the Editor (via the @wordpress/editor package) are better included as a component in the Provider? Or is using a hook (as currently in this PR) suitable?

I've noted my concerns around performance of the hooks approach which is why I am suggesting this alternative.

Copy link

github-actions bot commented Sep 10, 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: getdave <get_dave@git.wordpress.org>
Co-authored-by: jeryj <jeryj@git.wordpress.org>
Co-authored-by: jasmussen <joen@git.wordpress.org>
Co-authored-by: jameskoster <jameskoster@git.wordpress.org>
Co-authored-by: mtias <matveb@git.wordpress.org>
Co-authored-by: joedolson <joedolson@git.wordpress.org>
Co-authored-by: draganescu <andraganescu@git.wordpress.org>
Co-authored-by: spencerfinnell <spencerfinnell@git.wordpress.org>

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

@getdave
Copy link
Contributor Author

getdave commented Sep 10, 2024

@spencerfinnell in case you are interested.

@getdave
Copy link
Contributor Author

getdave commented Sep 10, 2024

@jeryj I noticed that when we toggle the complementary area focus is not moved to it. I think that's correct as you're interacting with a menu and therefore focus should remain on that menu item and the menu should remain open.

@jasmussen
Copy link
Contributor

Taking for a quick spin, here'a a GIF showing the new "Open Block settings" menu item:

block settings

  • The item should probably not be the top-most item in the menu. Maybe even the second to last one, in its own section above "Delete" perhaps?
  • Can it say "Open settings"? Alternately, just "Block settings"?

The fact that it becomes a grayed menu item when the menu is open is the main gotcha. There's a discussion about focus transferrance right above, but it does seem useful to transfer focus to the inspector; in doing so the button would never need to be disabled, because transferring focus there would always be useful.

Copy link

github-actions bot commented Sep 10, 2024

Size Change: -9.51 kB (-0.53%)

Total Size: 1.77 MB

Filename Size Change
build/a11y/index.min.js 952 B +1 B (+0.11%)
build/blob/index.min.js 594 B +15 B (+2.59%)
build/block-editor/content-rtl.css 4.46 kB -184 B (-3.96%)
build/block-editor/content.css 4.46 kB -182 B (-3.92%)
build/block-editor/index.min.js 256 kB -1.54 kB (-0.6%)
build/block-editor/style-rtl.css 15.6 kB -606 B (-3.74%)
build/block-editor/style.css 15.6 kB -604 B (-3.73%)
build/block-library/blocks/form-input/style-rtl.css 357 B +15 B (+4.39%)
build/block-library/blocks/form-input/style.css 357 B +15 B (+4.39%)
build/block-library/blocks/form/view.min.js 484 B +14 B (+2.98%)
build/block-library/blocks/gallery/editor-rtl.css 946 B -9 B (-0.94%)
build/block-library/blocks/gallery/editor.css 951 B -7 B (-0.73%)
build/block-library/blocks/group/editor-rtl.css 334 B +1 B (+0.3%)
build/block-library/blocks/group/editor.css 334 B +1 B (+0.3%)
build/block-library/blocks/image/editor-rtl.css 785 B -106 B (-11.9%) 👏
build/block-library/blocks/image/editor.css 787 B -103 B (-11.57%) 👏
build/block-library/blocks/post-title/style-rtl.css 162 B -64 B (-28.32%) 🎉
build/block-library/blocks/post-title/style.css 162 B -64 B (-28.32%) 🎉
build/block-library/blocks/site-title/style-rtl.css 143 B -63 B (-30.58%) 🎉
build/block-library/blocks/site-title/style.css 143 B -63 B (-30.58%) 🎉
build/block-library/editor-rtl.css 11.7 kB -84 B (-0.71%)
build/block-library/editor.css 11.7 kB -82 B (-0.7%)
build/block-library/index.min.js 219 kB +1.39 kB (+0.64%)
build/block-library/style-rtl.css 14.9 kB -103 B (-0.69%)
build/block-library/style.css 14.9 kB -102 B (-0.68%)
build/blocks/index.min.js 52.5 kB +222 B (+0.42%)
build/commands/index.min.js 16.1 kB -3 B (-0.02%)
build/components/index.min.js 225 kB +785 B (+0.35%)
build/components/style-rtl.css 12.3 kB +215 B (+1.77%)
build/components/style.css 12.3 kB +217 B (+1.79%)
build/compose/index.min.js 12.7 kB +5 B (+0.04%)
build/core-commands/index.min.js 3.11 kB +293 B (+10.39%) ⚠️
build/core-data/index.min.js 73.4 kB +220 B (+0.3%)
build/customize-widgets/index.min.js 11 kB -2 B (-0.02%)
build/data/index.min.js 8.98 kB -2 B (-0.02%)
build/edit-post/index.min.js 13.6 kB +866 B (+6.8%) 🔍
build/edit-post/style-rtl.css 2.54 kB +225 B (+9.72%) ⚠️
build/edit-post/style.css 2.54 kB +226 B (+9.78%) ⚠️
build/edit-site/index.min.js 217 kB -41 B (-0.02%)
build/edit-site/posts-rtl.css 7.3 kB -1 B (-0.01%)
build/edit-site/posts.css 7.3 kB -1 B (-0.01%)
build/edit-site/style.css 12.6 kB -5 B (-0.04%)
build/edit-widgets/index.min.js 17.7 kB +10 B (+0.06%)
build/edit-widgets/style-rtl.css 4.19 kB -10 B (-0.24%)
build/edit-widgets/style.css 4.19 kB -11 B (-0.26%)
build/editor/index.min.js 103 kB +913 B (+0.9%)
build/editor/style-rtl.css 9.34 kB +53 B (+0.57%)
build/editor/style.css 9.34 kB +50 B (+0.54%)
build/interactivity/debug.min.js 0 B -16.4 kB (removed) 🏆
build/interactivity/file.min.js 0 B -447 B (removed) 🏆
build/interactivity/image.min.js 0 B -1.78 kB (removed) 🏆
build/interactivity/index.min.js 0 B -13.2 kB (removed) 🏆
build/interactivity/navigation.min.js 0 B -1.16 kB (removed) 🏆
build/interactivity/query.min.js 0 B -742 B (removed) 🏆
build/interactivity/router.min.js 0 B -2.8 kB (removed) 🏆
build/interactivity/search.min.js 0 B -615 B (removed) 🏆
build/modules/importmap-polyfill.min.js 0 B -12.3 kB (removed) 🏆
build/preferences/index.min.js 2.9 kB +2 B (+0.07%)
build/private-apis/index.min.js 1.01 kB +5 B (+0.5%)
build/url/index.min.js 3.93 kB +25 B (+0.64%)
build/vendors/react-dom.min.js 41.7 kB +2 B (0%)
build/widgets/index.min.js 7.18 kB -20 B (-0.28%)
build-module/a11y/index.min.js 482 B +482 B (new file) 🆕
build-module/block-library/file/view.min.js 447 B +447 B (new file) 🆕
build-module/block-library/image/view.min.js 1.78 kB +1.78 kB (new file) 🆕
build-module/block-library/navigation/view.min.js 1.16 kB +1.16 kB (new file) 🆕
build-module/block-library/query/view.min.js 743 B +743 B (new file) 🆕
build-module/block-library/search/view.min.js 616 B +616 B (new file) 🆕
build-module/interactivity-router/index.min.js 3 kB +3 kB (new file) 🆕
build-module/interactivity/debug.min.js 16.7 kB +16.7 kB (new file) 🆕
build-module/interactivity/index.min.js 13.4 kB +13.4 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size
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/block-directory/index.min.js 7.11 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
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 328 B
build/block-library/blocks/buttons/style.css 328 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-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.6 kB
build/block-library/blocks/freeform/editor.css 2.6 kB
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/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/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/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 B
build/block-library/blocks/post-content/style-rtl.css 79 B
build/block-library/blocks/post-content/style.css 79 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/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/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 757 B
build/block-library/blocks/social-links/editor.css 756 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/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 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/commands/style-rtl.css 955 B
build/commands/style.css 952 B
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/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/style-rtl.css 12.6 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.54 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.18 kB
build/list-reusable-blocks/style-rtl.css 846 B
build/list-reusable-blocks/style.css 846 B
build/media-utils/index.min.js 3.2 kB
build/notices/index.min.js 946 B
build/nux/index.min.js 1.61 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/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/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/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/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

@getdave
Copy link
Contributor Author

getdave commented Sep 10, 2024

@jasmussen Here is the alternative approach suggested by @mtias which was to remove the menu item if the sidebar is open. It also has some gotcha's in terms of the item disappearing once clicked. This is likely bad for a11y (confusing, loss of focus...etc) and UX in general, but I'd be curious as to your thoughts...

Screen.Capture.on.2024-09-10.at.10-23-05.mp4

@jasmussen
Copy link
Contributor

that would be the other approach, but I still suspect a fundamental underpinning relates, as you imply, to where focus goes. If it goes to the inspector, shouldn't the menu also close rather than stay open?

@jameskoster
Copy link
Contributor

Transferring focus to the Inspector seems like it could work, especially as shift+tab returns focus to the block.

@jameskoster jameskoster added the Needs Accessibility Feedback Need input from accessibility label Sep 10, 2024
@mtias
Copy link
Member

mtias commented Sep 11, 2024

Thanks for trying this one! It seems the flow should include 1) open the sidebar 2) transfer focus 3) close the dropdown in some order. If the dropdown doesn't close it, it creates a weird state where you either remove the item or keep it disabled.

@getdave
Copy link
Contributor Author

getdave commented Sep 11, 2024

Thanks for trying this one!

👍

It seems the flow should include 1) open the sidebar 2) transfer focus 3) close the dropdown in some order. If the dropdown doesn't close it, it creates a weird state where you either remove the item or keep it disabled.

Yes the flow feels strange as it currently stands. My main concern was a11y. I'll work with @jeryj on this to find a good solution along the lines of what you (and others) have suggested.

Copy link
Contributor

@jeryj jeryj left a comment

Choose a reason for hiding this comment

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

I think this is working well to expose that there are more block settings. Since the block settings are so close tab-stop wise (only takes two tab spots), I think moving focus to the settings when you click may cause more accessibility issues than it helps. I'm unsure on it though. @joedolson do you have thoughts on if we should transfer focus to the block settings sidebar after clicking this? It seems odd to click an option within a menu to transfer focus to a non-modal. But at the same time I can see how it could be useful.

@joedolson
Copy link
Contributor

With the text 'Open block settings', I think that focus should not be moved. If the text were 'Go to block settings', then I think moving focus would be fine. But I think that given the short keyboard path, just opening the settings is fine. Moving focus would be jarring to users who weren't expecting a focus change, and I think there are many use cases where a user might want to open the block settings without going to them.

@getdave
Copy link
Contributor Author

getdave commented Sep 25, 2024

Thank you for your insight @joedolson. This aligned with my understanding of a11y best practises.

I propose we move forward with the current state of this PR. To that end I'm now seeking a approving review from @WordPress/gutenberg-design.


@jasmussen Here are some responses to your initial review:

The item should probably not be the top-most item in the menu. Maybe even the second to last one, in its own section above "Delete" perhaps?

I'm concerned that this will significantly deprioritise this menu item. This significantly undermines the purpose of the PR which is to make it easier for users to discover the full block settings (something we repeatedly see is a source of confusion for users).

It's clear we do not have buy in for adding a permanent button to the block toolbar. Therefore I'm keen to emphasise the need not to further deprioritise the discoverability of the tool.

The fact that it becomes a grayed menu item when the menu is open is the main gotcha.

Contributors from the a11y team have confirmed that this is expected behaviour. That doesn't diminish the other valid concerns you've raised but it's important to consider this when we're designing the optimal solution.

I sense you are concerned that leaving the menu open on click might be confusing for sighted users? Personally I don't believe this will be an issue - their attention will be drawn to the freshly opened panel with the menu disappearing as soon as they interact.

If necessary I suppose we could try and detect when the mouse has moved outside of the block and close the menu in that case? But I fear it would introduce more problems than it would solve.

Can it say "Open settings"? Alternately, just "Block settings"?

Happy to change that now.

@jasmussen
Copy link
Contributor

I'll defer to others, including Joe and Matías.

@draganescu
Copy link
Contributor

@mtias how about instead of generic words like settings we actually use the thing that is found in the inspector and it's not found in the toolbar: settings and styles. So, instead of one item we add two, "Block settings" and "Block style". This would also justify what @jasmussen suggests to add them lower in the menu in separator jail. It would also allow focus transfer.

@jeryj
Copy link
Contributor

jeryj commented Sep 25, 2024

So, instead of one item we add two, "Block settings" and "Block style". This would also justify what @jasmussen suggests to add them lower in the menu in separator jail. It would also allow focus transfer.

I like the idea of exposing both of these.

It would also allow focus transfer.

I'm not sure how this changes the idea around focus transfer. Can you elaborate?

@spencerfinnell
Copy link

spencerfinnell commented Sep 25, 2024

Separate buttons was also suggested here: #65118 (comment)

@getdave
Copy link
Contributor Author

getdave commented Sep 25, 2024

Separate buttons was also suggested here: #65118 (comment)

Unless I'm mistaken @draganescu is suggesting putting x2 items within the block options menu rather than as top level items in the block toolbar.

@draganescu
Copy link
Contributor

I'm not sure how this changes the idea around focus transfer. Can you elaborate?

I meant that being more specific we can use phrasing like "go to" and we focus a more direct place.

@getdave
Copy link
Contributor Author

getdave commented Sep 30, 2024

One thought I had here was this

  • Keep menu item active at all times (i.e. no disabled state).
  • If the sidebar is closed and I click Block Settings then the sidebar is opened but focus remains in the menu.
  • If the sidebar is open and I click Block Settings then focus is transferred into the sidebar on the Blocks tab.
  • We can add some aria label to the button and have that change depending on the context above. Visual labels remains the same.

One issue with this approach is that we don't have any good mechanism for programmatically transferring focus to specific parts of the editor.

@draganescu
Copy link
Contributor

@jameskoster @mtias any objections to having two items and opening the settings or styles directly? This would allow us to both segment that menu and also word the labels in a way that allows for focus transfer.

@getdave
Copy link
Contributor Author

getdave commented Sep 30, 2024

....having two items and opening the settings or styles directly?

2 things I'm thinking:

  1. This increases complexity in that dropdown with more items to scan.
  2. This increases complexity of implementation because we'd have to check whether
    • tabs are enabled for the given block (yes I recently discovered you can disable those tabs on a block by block basis!)
    • the specific Styles or Settings tabs are available for this block (think simple 3rd party blocks)

@mtias
Copy link
Member

mtias commented Sep 30, 2024

@draganescu I think a direct link to "styles" should be a separate exploration to this

@getdave
Copy link
Contributor Author

getdave commented Sep 30, 2024

@draganescu might try adding separate menu items in a separate PR. Thanks Andrei 👍

Back to this PR - any objections to my proposal?

@jeryj
Copy link
Contributor

jeryj commented Sep 30, 2024

  • If the sidebar is closed and I click Block Settings then the sidebar is opened but focus remains in the menu.
  • If the sidebar is open and I click Block Settings then focus is transferred into the sidebar on the Blocks tab.

It should be one consistent action. It would be very confusing why focus moves in one scenario and not the other. I think the options are:

  1. Open Block Settings: Toggle it as an enabled/disabled option using aria-disabled to preserve focus on the item
  2. Go to Block Settings: Always enabled. Opens and focuses if closed. Moves focus if already open.
  3. Block Settings: Same as 2, but less clear. I would rather have more words and be clear about what will happen. I'm also open to just Block Settings though and always opening/transferring focus.

@getdave
Copy link
Contributor Author

getdave commented Oct 1, 2024

  1. Go to Block Settings: Always enabled. Opens and focuses if closed. Moves focus if already open.

This is what I was trying to suggest 😅 But with the caveat that the visible label will always stay the same and only the aria label would change as the additional context is - in my opinion - really only required for non-sighted users.

Note that this idea was based on an idea I saw @alexstine suggest in #65603 (comment).

@mtias
Copy link
Member

mtias commented Oct 1, 2024

That would bring us back to the exact state we removed before? Doesn't seem great and makes the UI a bit confusing.

@joedolson
Copy link
Contributor

If the aria-label doesn't match the visible text, that breaks accessibility for voice command users. The WCAG rule only requires that the visible label is contained within the accessible name, but that does mean that the entirety of the visible label would have to be in the aria-label, and I don't see how that would make sense.

@getdave
Copy link
Contributor Author

getdave commented Oct 3, 2024

Thanks for the feedback. We could refine the implementation of the aria attributes.

I don't see a way forward here. We have two opposing requirements:

  1. Focus should remain in the menu when Block settings is clicked/activated.
  2. Focus should transfer to the sidebar when Block settings is clicked/activated.

My proposal is the middle ground.

  • Block settings opens sidebar if not open - focus remains in menu.
  • Block settings focuses the sidebar if the sidebar is already open. Menu closes.

If there is a better solution available that satisfies the requirements outlined in the discussion above then I'm happy to look into it (maybe what @draganescu suggested - although that doesn't to have much support).

Otherwise I think we may have to close this out.

@mtias
Copy link
Member

mtias commented Oct 3, 2024

@getdave I'm not sure I follow where those requirements are coming from. It seems that if the sidebar is closed, we need to trigger an open sidebar and a focus transfer, similar to inserter button in the editor header. And when the sidebar is open, avoid rendering the button in the ellipsis menu. I understand the order of operations can be tricky and it's fine to revisit this later.

@getdave
Copy link
Contributor Author

getdave commented Oct 3, 2024

I'm not sure I follow where those requirements are coming from.

I'm getting those (as loose requirements) based on the discussion above. Specifically this comment from @joedolson which outlines why moving focus could be jarring. That is to be juxtaposed with your recommendation which I appreciate you've made several times here now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Block settings menu The block settings screen Needs Accessibility Feedback Need input from accessibility [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants