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

Sidebar: Split block tools into menu, settings, and appearance tabs #45005

Merged
merged 2 commits into from
Nov 17, 2022

Conversation

aaronrobertshaw
Copy link
Contributor

@aaronrobertshaw aaronrobertshaw commented Oct 17, 2022

Fixes: #40204

What?

  • Adds new Gutenberg Experiment to put the new tabs feature behind
  • Splits the block inspector primarily between settings and appearance-related tools.
  • The appearance tab contains tools provided via block supports.
  • The settings tab contains block-specific tools rendered into the default InspectorControls slot.
  • Updates the sidebar icon to use two new "drawer" icons taking into account RTL.

Why?

It's another step towards decluttering the sidebar and making it more intuitive to locate and discover block tools.

How?

  • Adds new drawer icons to the icons package
  • Updates sidebar icons
  • Updates the TabPanel component to allow icon-only buttons
  • Adds Gutenberg Experiment, making the new tabs opt-in
  • Updates the block inspector to render the various InspectorControls slots into their respective tabs when the new experiment is enabled
  • The same tabs have been introduced into the block inspector for both single and multi-block selections

Note: Tabs are no longer omitted should they not have any fills in their respective slots. Instead, they'd display a message illustrating the fact there are no settings/appearance tools. This helps maintain a more consistent UI for a11y purposes.

Testing Instructions

  1. Check that the sidebar icons have been updated in both the post and site editors, and confirm they get flipped when switching between LTR and RTL.
  2. In the post editor, add a navigation block, several paragraphs, a group block etc., to a post, save and select one.
  3. Confirm the block inspector displays as normal.
  4. Navigate to the Gutenberg Experiments admin page and enabled the Block Inspector Tabs experiment
    Screen Shot 2022-10-26 at 6 05 27 pm
  5. Switch back to the editor, reload the page, and select each block.
  6. Check that both tabs (settings & appearance) are in the sidebar and controls continue to function.
  7. Select multiple blocks of different types and confirm no controls within either tab.
  8. Select multiple blocks of the same type, e.g. two paragraph blocks. The appearance tab should still contain items.

Screenshots or screencast

Screen.Recording.2022-10-31.at.4.37.19.pm.mp4

@aaronrobertshaw aaronrobertshaw added [Type] Enhancement A suggestion for improvement. [Feature] Inspector Controls The interface showing block settings and the controls available for each block [Package] Block editor /packages/block-editor labels Oct 17, 2022
@aaronrobertshaw aaronrobertshaw self-assigned this Oct 17, 2022
@aaronrobertshaw
Copy link
Contributor Author

@jasmussen and @jameskoster, any chance I can pick your brains on the best approach to improving the UX for these new sidebar tabs? 🙏

At present, this PR is omitting any tabs that do not have anything in them. I take it that is the desired approach?

Given that, what's the desired behaviour when there are only block tools for a single tab? It looks a little odd when there is only the settings/appearance tab.

Screen Shot 2022-10-17 at 5 28 56 pm

The display of panels within the tabs probably needs some tweaking. An example of this is when there is only the advanced controls panel being shown, collapsed, under the settings tab.

Screen Shot 2022-10-17 at 5 29 04 pm

Open to any ideas you have and happy to give them a try.

@jasmussen
Copy link
Contributor

Wow, fast work. This feels pretty good to me. GIF showing new subtabs, with appearance and settings, and the new inspector icon:

sidebar

Appearance should be the first tab.

At present, this PR is omitting any tabs that do not have anything in them. I take it that is the desired approach?

I would lean towards yes, definitely, perhaps even with the addition that if we are at a point where there's only 1 tab left, remove the tabbar as well.

The display of panels within the tabs probably needs some tweaking. An example of this is when there is only the advanced controls panel being shown, collapsed, under the settings tab.

With settings as the 2nd tab, I think this is fine.

@jameskoster
Copy link
Contributor

FWIW I don't think it would be terrible to keep the tab, but display a "no settings" message:

Screenshot 2022-10-17 at 10 17 14

Similar to how the "Block" tab itself behaves if you click it without having selected a block:

Screenshot 2022-10-17 at 10 18 36

I can imagine folks being disoriented by missing tabs ("Why can't I edit the settings for this block?"). We might consider exploring this part of the UX in a follow-up?

@mtias
Copy link
Member

mtias commented Oct 17, 2022

Great to see this. We should consider whether the default tab should be hinted by a block author. In the case of Paragraph we might want to default to Styles, for Navigation to List, and for Query to Settings, etc.

@mtias
Copy link
Member

mtias commented Oct 17, 2022

Also, if a block has no Settings we should not render any tab and just show the style groups directly.

@mtias
Copy link
Member

mtias commented Oct 17, 2022

Another thing that comes to mind is leveraging the Tips entry points we did a while ago for every block, as it could be shown on some of the Settings group when it's empty.

@pablohoneyhoney
Copy link

This is likely unintentional, but the sidebar/inspector icon should be inverse, no?

@aaronrobertshaw
Copy link
Contributor Author

aaronrobertshaw commented Oct 18, 2022

This is likely unintentional, but the sidebar/inspector icon should be inverse, no?

@pablohoneyhoney unfortunately I can't replicate this issue. The sidebar icons are correct for me and update properly in both the block and site editors when I switch between LTR (e.g. English) and RTL (e.g. Arabic) languages.

EDIT: Nevermind, sorry didn't realise that was the mockup not a screenshot of this PR 🤦

Block Editor
LTR RTL
Screen Shot 2022-10-18 at 7 02 28 pm Screen Shot 2022-10-18 at 7 12 31 pm
Site Editor
LTR RTL
Screen Shot 2022-10-18 at 7 18 54 pm Screen Shot 2022-10-18 at 7 13 02 pm

@aaronrobertshaw
Copy link
Contributor Author

Thank you everyone for the quick feedback 🙇

Appearance should be the first tab

Appearance is now before the settings tab.

While we are revisiting the order of tabs. The mockups on the issue have the Menu/List tab for the Navigation block first, should it remain like that?

Does it make more sense to keep it located beside settings? Could blocks in future add their own tabs here?

I would lean towards yes, definitely, perhaps even with the addition that if we are at a point where there's only 1 tab left, remove the tabbar as well.

Also, if a block has no Settings we should not render any tab and just show the style groups directly.

I've refactored things so now if there is only a single tab with contents, we render those contents directly (no TabPanel).

Having blocks define their default tab or including tips is still on the todo list.

@jameskoster
Copy link
Contributor

Could blocks in future add their own tabs here?

I would say potentially yes. One example could be transporting the concept in #44582 to the template part block itself. Perhaps content-locked containers as well.

@mtias
Copy link
Member

mtias commented Oct 18, 2022

Could blocks in future add their own tabs here?

Very unlikely

@aaronrobertshaw aaronrobertshaw force-pushed the try/appearance-settings-tabs-in-sidebar branch from a87f200 to 1b9c616 Compare October 26, 2022 08:10
@github-actions
Copy link

github-actions bot commented Oct 26, 2022

Size Change: +671 B (0%)

Total Size: 1.3 MB

Filename Size Change
build/block-editor/index.min.js 175 kB +862 B (0%)
build/block-editor/style-rtl.css 15.9 kB +29 B (0%)
build/block-editor/style.css 15.9 kB +28 B (0%)
build/components/index.min.js 203 kB +22 B (0%)
build/edit-post/index.min.js 34.4 kB -132 B (0%)
build/edit-site/index.min.js 61 kB -138 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 982 B
build/annotations/index.min.js 2.76 kB
build/api-fetch/index.min.js 2.26 kB
build/autop/index.min.js 2.14 kB
build/blob/index.min.js 475 B
build/block-directory/index.min.js 7.09 kB
build/block-directory/style-rtl.css 990 B
build/block-directory/style.css 991 B
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 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 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 126 B
build/block-library/blocks/audio/theme.css 126 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 84 B
build/block-library/blocks/avatar/style.css 84 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 482 B
build/block-library/blocks/button/editor.css 482 B
build/block-library/blocks/button/style-rtl.css 532 B
build/block-library/blocks/button/style.css 532 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 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 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 100 B
build/block-library/blocks/categories/style.css 100 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 124 B
build/block-library/blocks/code/theme.css 124 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 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 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 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 612 B
build/block-library/blocks/cover/editor.css 613 B
build/block-library/blocks/cover/style-rtl.css 1.57 kB
build/block-library/blocks/cover/style.css 1.55 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 126 B
build/block-library/blocks/embed/theme.css 126 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 253 B
build/block-library/blocks/file/style.css 254 B
build/block-library/blocks/file/view.min.js 346 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 948 B
build/block-library/blocks/gallery/editor.css 950 B
build/block-library/blocks/gallery/style-rtl.css 1.53 kB
build/block-library/blocks/gallery/style.css 1.53 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 654 B
build/block-library/blocks/group/editor.css 654 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 327 B
build/block-library/blocks/html/editor.css 329 B
build/block-library/blocks/image/editor-rtl.css 880 B
build/block-library/blocks/image/editor.css 880 B
build/block-library/blocks/image/style-rtl.css 627 B
build/block-library/blocks/image/style.css 630 B
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 B
build/block-library/blocks/latest-comments/style-rtl.css 298 B
build/block-library/blocks/latest-comments/style.css 298 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 507 B
build/block-library/blocks/media-text/style.css 505 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 712 B
build/block-library/blocks/navigation-link/editor.css 711 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.15 kB
build/block-library/blocks/navigation/editor.css 2.16 kB
build/block-library/blocks/navigation/style-rtl.css 2.21 kB
build/block-library/blocks/navigation/style.css 2.2 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 443 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 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 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 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 501 B
build/block-library/blocks/post-comments-form/style.css 501 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 586 B
build/block-library/blocks/post-featured-image/editor.css 584 B
build/block-library/blocks/post-featured-image/style-rtl.css 315 B
build/block-library/blocks/post-featured-image/style.css 315 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/style.css 153 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 282 B
build/block-library/blocks/post-template/style.css 282 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-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 326 B
build/block-library/blocks/pullquote/style.css 325 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 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 440 B
build/block-library/blocks/query/editor.css 440 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 409 B
build/block-library/blocks/search/style.css 406 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 464 B
build/block-library/blocks/shortcode/editor.css 464 B
build/block-library/blocks/site-logo/editor-rtl.css 490 B
build/block-library/blocks/site-logo/editor.css 490 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.4 kB
build/block-library/blocks/social-links/style.css 1.39 kB
build/block-library/blocks/spacer/editor-rtl.css 322 B
build/block-library/blocks/spacer/editor.css 322 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/editor-rtl.css 505 B
build/block-library/blocks/table/editor.css 505 B
build/block-library/blocks/table/style-rtl.css 631 B
build/block-library/blocks/table/style.css 631 B
build/block-library/blocks/table/theme-rtl.css 172 B
build/block-library/blocks/table/theme.css 172 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 235 B
build/block-library/blocks/template-part/editor.css 235 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 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 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 691 B
build/block-library/blocks/video/editor.css 694 B
build/block-library/blocks/video/style-rtl.css 174 B
build/block-library/blocks/video/style.css 174 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/classic-rtl.css 162 B
build/block-library/classic.css 162 B
build/block-library/common-rtl.css 1.02 kB
build/block-library/common.css 1.02 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.5 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/index.min.js 194 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 12.4 kB
build/block-library/style.css 12.4 kB
build/block-library/theme-rtl.css 704 B
build/block-library/theme.css 708 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 49.9 kB
build/components/style-rtl.css 11.5 kB
build/components/style.css 11.5 kB
build/compose/index.min.js 12.2 kB
build/core-data/index.min.js 15.5 kB
build/customize-widgets/index.min.js 11.3 kB
build/customize-widgets/style-rtl.css 1.38 kB
build/customize-widgets/style.css 1.38 kB
build/data-controls/index.min.js 653 B
build/data/index.min.js 8.08 kB
build/date/index.min.js 32.1 kB
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.7 kB
build/edit-navigation/index.min.js 16.2 kB
build/edit-navigation/style-rtl.css 4.06 kB
build/edit-navigation/style.css 4.06 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/style-rtl.css 7.39 kB
build/edit-post/style.css 7.38 kB
build/edit-site/style-rtl.css 8.4 kB
build/edit-site/style.css 8.37 kB
build/edit-widgets/index.min.js 16.8 kB
build/edit-widgets/style-rtl.css 4.41 kB
build/edit-widgets/style.css 4.41 kB
build/editor/index.min.js 43.7 kB
build/editor/style-rtl.css 3.6 kB
build/editor/style.css 3.59 kB
build/element/index.min.js 4.68 kB
build/escape-html/index.min.js 537 B
build/experiments/index.min.js 868 B
build/format-library/index.min.js 6.95 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.64 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.77 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.78 kB
build/keycodes/index.min.js 1.83 kB
build/list-reusable-blocks/index.min.js 2.13 kB
build/list-reusable-blocks/style-rtl.css 835 B
build/list-reusable-blocks/style.css 835 B
build/media-utils/index.min.js 2.93 kB
build/notices/index.min.js 963 B
build/nux/index.min.js 2.06 kB
build/nux/style-rtl.css 732 B
build/nux/style.css 728 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.22 kB
build/preferences/index.min.js 1.33 kB
build/primitives/index.min.js 944 B
build/priority-queue/index.min.js 1.58 kB
build/react-i18n/index.min.js 696 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.74 kB
build/reusable-blocks/index.min.js 2.21 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.7 kB
build/server-side-render/index.min.js 1.77 kB
build/shortcode/index.min.js 1.53 kB
build/style-engine/index.min.js 1.48 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.61 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.19 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@aaronrobertshaw
Copy link
Contributor Author

aaronrobertshaw commented Oct 26, 2022

I've put these new tabs behind a new Gutenberg Experiment and rebased the PR to resolve the recent conflicts. The PR description has been updated accordingly.

How best to implement allowing blocks to define their own default tab might require a little iteration so I'll get up the simplest implementation for that in a separate follow-up PR and work through it there. Hopefully, that might allow us to land this sooner and test more widely.

While testing this locally with the Query block I found that it renders a "Create a new post" link into the InspectorControls that expects to visually look a part of the BlockCard at the top of the block inspector sidebar.

Without Tabs With Tabs
Screen Shot 2022-10-26 at 5 59 14 pm Screen Shot 2022-10-26 at 5 59 47 pm

Would it be worth potentially adding a new slot to that BlockCard or immediately below it, at least? Allowing blocks, such as the Query block, to render additional info there.

@mtias
Copy link
Member

mtias commented Oct 26, 2022

Would it be worth potentially adding a new slot to that BlockCard or immediately below it, at least? Allowing blocks, such as the Query block, to render additional info there.

Probably, yes. We have to be careful with how we name it to make sure it's more semantic driven and less location driven. (Example: "I want to add something relevant to the block as a whole" vs "I want to print something within the block card".)

@jameskoster
Copy link
Contributor

Is there not already something available for that? I noticed that group transforms appear in the correct position:

Screenshot 2022-10-26 at 11 21 12

@aaronrobertshaw
Copy link
Contributor Author

Is there not already something available for that? I noticed that group transforms appear in the correct position:

Good question. Unfortunately, those block variation controls are specifically rendered immediately following the Block Card. They don't offer a slot to render anything else into.

@aaronrobertshaw
Copy link
Contributor Author

Just flagging on this PR that there were some a11y concerns raised around inconsistent behaviour between blocks when allowing block-specific default tabs. This might also give us reason to reconsider omitting tabs when they would otherwise be empty for individual blocks.

Keen to hear everyone's thoughts on this.

cc/ @alexstine

@alexstine
Copy link
Contributor

The problem with multiple tabs is if they are not used for every block, users will never know where to find anything. People with vision constantly discount these small details because you get a heck of an overview of a page. It is cumbersome and annoying to use a page with a screen reader especially when every block has a different experience. My advice, leave it alone if it is not really broken. There are other projects around the editor that could best enjoy our time. I think this could be a better idea down the road but we'd need to figure out how to communicate that info better to keyboard users.

Thanks.

@aaronrobertshaw
Copy link
Contributor Author

Appreciate the great feedback @alexstine. Thank you for raising the a11y issues here and on #45304.

Would maintaining the same tabs across all blocks (as suggested earlier in this PR) alleviate the majority of these concerns? To achieve that, we might need to consolidate the navigation block's menu tab into the general settings one.

@mtias, @jasmussen, and @jameskoster, do you have any thoughts?

Copy link
Contributor

@talldan talldan left a comment

Choose a reason for hiding this comment

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

This looks good to me, considering the feature is behind an experiment toggle and won't be active by default it seems pretty much ready to merge save for a couple of issues.

I think it might be good to look at Alex's feedback, and come to a decision there about how the tabs should work in this first iteration.

Also the tab specific to the navigation block (while right from a UI point of view) doesn't feel like it's implemented in the right way, and I think it could be moved to a follow-up.

IMO, the query loop issue is a minor annoyance, but isn't a blocker. If you did want to fix it though you could always add some experiment specific code to query loop block itself to make that UI appear tidier (as a temporary measure).

Before shipping as well, it'd be good to update either #40204 or a new issue with all the outstanding tasks.

Comment on lines 1 to 7
.block-editor-block-inspector__tabs [role="tablist"] {
display: flex;

> * {
flex: 1;
}
}
Copy link
Contributor

@talldan talldan Oct 28, 2022

Choose a reason for hiding this comment

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

I think this should be added as a new 'variant' of the tab panel component.

There was a related discussion over here about making that component support different styles - #44788 (comment).

It could be a separate PR, but would be good to make sure it's tracked in a task list, and maybe there's an opportunity to collaborate with Jorge on it.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

After looking into adding a variant to the TabPanel component, I think that might be better as a follow-up to open up the chance for a more substantial refactor to improve upon a few issues we've encountered with it of late. That also ensures it doesn't delay this PR unnecessarily.

Regarding a compromise option, I've reduced the new CSS to get the tabs to fill the available space equally, down to a single line. The current approach now also removes the introduction of a new SCSS file into the mix.

I'll create an issue for exploring TabPanel improvements shortly so it doesn't slip through the cracks.

@alexstine
Copy link
Contributor

@aaronrobertshaw One of the best ways to have good A11Y is to not change things. Consistency is very important and often times not really included in the modern React/Vue apps. The languages are very powerful but with power comes great responsibility. Aside from bad quotes, keep things as much the same as you can, you will eliminate confusion not only for A11Y users but everyone.

@talldan
Copy link
Contributor

talldan commented Nov 17, 2022

I've rebased this and I'm going to merge it.

Some things to note:

  • This PR is currently not affected by the accessibility discussion above, that conversation is related to Sidebar: Add list view tab for Navigation block et al. #45483.
  • This does introduce a new way to specify an icon as part of a TabPanel tab. That seems ok to me. I've spent some time looking at whether TabPanel can be refactored and I don't think this change will cause any issues (including if the underlying implementation is refactored to ariakit).
  • This is currently implemented behind an experiment toggle, so it isn't the default experience for plugin users, but I would encourage testing and feedback!

@talldan talldan merged commit 476ce03 into trunk Nov 17, 2022
@talldan talldan deleted the try/appearance-settings-tabs-in-sidebar branch November 17, 2022 07:51
@github-actions github-actions bot added this to the Gutenberg 14.7 milestone Nov 17, 2022
@ntsekouras
Copy link
Contributor

Thanks all the work here!

I haven't checked the code here to suggest something, but just noting that Query Loop block uses a filter to add the new post link here and it's a bit off right now.

Screen.Recording.2022-11-18.at.4.56.14.PM.mov

@mtias
Copy link
Member

mtias commented Nov 18, 2022

@ntsekouras indeed, that is being addressed in #45437

@ntsekouras
Copy link
Contributor

@ntsekouras indeed, that is being addressed in #45437

Thanks! I missed that.

@ndiego
Copy link
Member

ndiego commented Dec 8, 2022

Just wanted to add a little follow-up that this new functionality is working great in my testing with third-party extensions. Separating the content really simplifies the sidebar panel, great work everyone!

block-panels

For extenders, is there a way to hook into either the Styles or Settings? Looks like any extensions are put in Settings, but maybe I am missing something.

@aaronrobertshaw
Copy link
Contributor Author

For extenders, is there a way to hook into either the Styles or Settings?

My apologies for the slow reply @ndiego.

For now, any controls rendered into the block support panels dedicated to styling are rendered into the Styles tab i.e. border, colors, typography etc. Anything rendered to the default or advanced inspector controls slots will appear under the Settings tab.

For reference you can see exactly what is rendered for each tab via the links below:

As we gather feedback from this Gutenberg experiment, we'll aim to delineate what should be rendered within each tab and document the feature and our recommendations accordingly.

@ndiego
Copy link
Member

ndiego commented Dec 15, 2022

My apologies for the slow reply @ndiego.

No worries at all. Getting some really positive feedback on this experiment on Twitter. As I have played with it more, I like how only native block supports render on the styles panel. That said, I can see how people would want to add additional "style" controls to this panel, and custom blocks add another dimension. Definitely things to be worked out, but it feels like we are headed in the correct direction with this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Inspector Controls The interface showing block settings and the controls available for each block Needs User Documentation Needs new user documentation [Package] Block editor /packages/block-editor [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Split block tools between "settings" and "appearance"