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

[WIP] LayoutPanel: Update to use ToolsPanel and ToolsPanelItems #45833

Closed

Conversation

andrewserong
Copy link
Contributor

@andrewserong andrewserong commented Nov 17, 2022

🚧 🚧 🚧 🚧 This is still a draft, it isn't quite ready for testing yet 🚧 🚧 🚧 🚧

What?

Fixes #44560

Update the LayoutPanel which appears in the inspector controls to use the ToolsPanel so that controls can be conditionally displayed and reset.

Why?

As additional controls are added to the layout panel, some of which might be used infrequently, it will be helpful if we can hide some of them by default. A good example is sticky position support (as raised in #30121 and being worked on in #44723), which will likely be a useful feature that will only be used in particular circumstances.

How?

  • Add a layout group to the inspector controls
  • Wrap each of the layout controls in a ToolsPanelItem

To-do

  • Tweak broken styling / subtle styling issues
  • Wrap layout switcher in a ToolsPanelItem
  • Work out what the correct defaults should be for each block that opts-in to the layout block support
  • Double-check that it's working correctly for each block that uses layout, and update the testing instructions to reflect this

Testing Instructions

TBD

Screenshots or screencast

Constrained layout Flex layout
2022-11-17 14 13 27 2022-11-17 15 49 54

@codesandbox
Copy link

codesandbox bot commented Nov 17, 2022

CodeSandbox logoCodeSandbox logo  Open in CodeSandbox Web Editor | VS Code | VS Code Insiders

@andrewserong andrewserong self-assigned this Nov 17, 2022
@andrewserong andrewserong added [Feature] Layout Layout block support, its UI controls, and style output. [Type] Enhancement A suggestion for improvement. [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi labels Nov 17, 2022
@github-actions
Copy link

github-actions bot commented Nov 17, 2022

Size Change: +403 B (0%)

Total Size: 1.3 MB

Filename Size Change
build/block-editor/index.min.js 176 kB +329 B (0%)
build/block-editor/style-rtl.css 15.9 kB -16 B (0%)
build/block-editor/style.css 15.9 kB -16 B (0%)
build/block-library/index.min.js 194 kB +63 B (0%)
build/components/index.min.js 203 kB +17 B (0%)
build/edit-site/style-rtl.css 8.4 kB +7 B (0%)
build/edit-site/style.css 8.39 kB +19 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.81 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/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/index.min.js 34.4 kB
build/edit-post/style-rtl.css 7.39 kB
build/edit-post/style.css 7.38 kB
build/edit-site/index.min.js 61 kB
build/edit-widgets/index.min.js 16.7 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

@andrewserong andrewserong force-pushed the try/update-layout-panel-to-use-tools-panel branch from 475324a to 288af0b Compare November 17, 2022 23:57
@andrewserong
Copy link
Contributor Author

One the potentially challenging design issues for this one: The Justification and Orientation controls bump up against each other, as the Justification controls extend slightly past the gutter that's meant to exist between these two controls:

image

@andrewserong andrewserong force-pushed the try/update-layout-panel-to-use-tools-panel branch from 288af0b to c91060a Compare November 21, 2022 05:50
@andrewserong
Copy link
Contributor Author

@jasmussen and @jameskoster 👋 just a heads-up that I'm working on this one now. It seems to be going pretty well so far, but there are a couple of styling issues to address. The main issue is currently with the spacing between the Justification and Orientation controls — they just manage to fit in next to each other, but it's a bit of a squeeze.

There's still a bit more to work on for this PR (I haven't tested it out across blocks, we'll need to tweak defaults, etc), but just thought I'd let you know that work is under way!

@jameskoster
Copy link
Contributor

Thanks for working on this.

One initial observation: I don't think "Content size" should be a dedicated control. It's intrinsically linked to the "Content layout" option, and should be presented automatically when the latter is set to true.


When I toggle the content layout option to true, the Justification control appears, is that intended? I couldn't really work out why that happened and my expectation is that it would remain toggled off until explicitly enabled via the tools menu.


As you mentioned, when there are four options the Justification and Orientation controls are breaking the grid:

Screenshot 2022-11-21 at 10 31 48

Probably best to place them on separate rows for now because we'll likely need to revisit these controls – they do not allow Stacks to be have right/center justification with space-between spacing.

@andrewserong
Copy link
Contributor Author

Thanks for the testing and feedback @jameskoster! I've made a few updates:

  • Fixed issue where justification was displaying by default in the Group block when the content width toggle was switched on
  • Updated the UI to display the justification and orientation controls on separate lines, and tweaked the spacing for consistency
  • Refactored the content width toggle so that it's combined in the same ToolsPanelItem as the content and wide size controls. I agree, it feels better keeping all of those controls combined under the one item. Now that they're combined into the same files, it should be a little easier to pull them apart again if further down the track we decide we'd like to add more fine-grained control over resetting these items.

I had to move things around a fair bit while doing the updates, so I very likely might have broken something in the process. I'll do some more testing and follow-up tomorrow, so no rush on taking another look at this just yet 🙂

@jasmussen
Copy link
Contributor

I realize I'm a bit late to this, but I think showing these two on a single row may be worth breaking the 2 column grid for:

image

I think there may be a separate exploration worth having, of making the orientation + justification controls count as a single control 🤔

@jameskoster
Copy link
Contributor

I think there may be a separate exploration worth having, of making the orientation + justification controls count as a single control 🤔

Yeah I think that makes sense. But as with #44723 if we're going to consider the full layout scope, we need to consider things like container height and width. It may be that the entire layout panel is a single control, like in Figma which I personally find to be very intuitive. We can potentially find inspiration there:

layout.mp4
  • Adding layout to a Group inherently transforms it into a Stack
  • Orientation, alignment/justification, and spacing mode are all linked
  • The icon removes the layout altogether and reverts to Group.

@jasmussen
Copy link
Contributor

Intriguing! Some good bits there worth noodling on. Some things would need refinement, but at a more high level, I wonder if it would make sense to think of this in terms of such a boolan "having layout" toggle, with layout being flex and no layout being block 🤔

@jameskoster
Copy link
Contributor

Yep that's exactly what I was thinking :)

@jasmussen
Copy link
Contributor

It would be nice to still have a single "Layout" panel, though, so I wonder if there was a way to have these has-layout tools work in the existing environment 🤔

@jameskoster
Copy link
Contributor

Perhaps the options here could be revised to represent flex/flow:

Screenshot 2022-11-22 at 13 47 41

And depending on which option you select determines which controls are available in the Layout panel. That would also solve the awkward duplication we have currently between this variation switcher and the orientation control.

@andrewserong
Copy link
Contributor Author

Love the ideation, folks! I'm very happy seeing all the attention to exploring our Layout panel options 😀
Hope you don't mind, but just jotting down some immediate thoughts:

Intriguing! Some good bits there worth noodling on.

Very much so. I suppose at the moment, my main focus is to try to figure out what makes for a good logical next step in this PR, where the UX feels decently improved, but without overhauling how we conceptualise layout just yet. Still, it's super valuable taking a look at the direction we'd like to go in, to confidence check that we're taking steps in the right direction 👍

At the moment, the layout concept is more of an is-a logic rather than a has-a logic, in that the default layout type is flow, which defines spacing as using top-margins, so it isn't quite a blank slate. Separately, I was wondering if eventually we might have a case for a null layout type that doesn't even apply a particular spacing type? Also worth considering for how we handle the UI is that we have constrained as a discrete layout type, and the current layout types are documented in the handbook, so whichever changes we wind up making, we'll need to take care that they feel like a logical progression for folks already used to how they work.

So, I think I lean a bit more toward thinking of the different layout types as adjacent rather than additive, if that makes sense? E.g. we can switch between layouts, with flow as default, rather than thinking about adding a layout per se — but this might just be because I've been working closely with it for so long, so I might have a familiarity bias here 🙂

One technical note is that I don't think we have a way for the plus icon in the ToolsPanel menu to do anything other than display the current menu items available, so having that button perform an action would be a departure from the other instances in the sidebar and could be a challenge figuring out the right accessibility for it.

Orientation, alignment/justification, and spacing mode are all linked
The – icon removes the layout altogether and reverts to Group.

If we group all the controls together, does that then defeat the purpose of switching over to the ToolsPanel? I think the panel is most useful for granular control over the display and resetting of separate settings. The change in this PR is probably going to be most valuable if we have seldom used controls that we'd like users to be able to reach for only when needed (the sticky position support being the more pressing use case).

And depending on which option you select determines which controls are available in the Layout panel. That would also solve the awkward duplication we have currently between this variation switcher and the orientation control.

One of the other things to keep in mind with this PR is that the changes affect all blocks that opt in to layout, and not just the Group block. So while there's duplication of the control for Row and Stack, there is no duplication in Buttons and Social Icons blocks.


Anyhow, thanks again for all the explorations! If we're veering off track from the current task of the conversion to ToolsPanel, I'm happy for us to continue the discussion in separate issues if need be.

For the moment, what do you think the best next step is for this PR design-wise? Is the main thing to address what we do about justification and orientation controls?

@jameskoster
Copy link
Contributor

The layout concept has many threads, and the current implementation is not perfect – particularly how the controls switch based on whether the block is flow or flex.

So my instinct is that this needs a bit more design consideration before making any changes to the layout panel in the short term, for the reasons above, and because the migration seems to require some tangential effort – grouping certain controls, presentation of options like "Inner blocks use content width", etc.

@andrewserong
Copy link
Contributor Author

So my instinct is that this needs a bit more design consideration before making any changes to the layout panel in the short term, for the reasons above, and because the migration seems to require some tangential effort – grouping certain controls, presentation of options like "Inner blocks use content width", etc.

Understood, thanks for clarifying! I'll pause work on this PR for now, then.

In terms of the sticky position support over in #44723, do you think it's still worth pursuing for now, or does that also need more design-time to figure out how it'll work inside the panel? From my perspective, sticky position will be used a bit too infrequently for it to be displayed prominently in the existing panel without the ToolsPanel for it to be hidden by default, but happy to go with your or @jasmussen's lead 🙂

Copy link
Contributor

@tellthemachines tellthemachines left a comment

Choose a reason for hiding this comment

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

Thanks for working on this! Just catching up on the discussion now and adding a few thoughts:

  • When adding a block with "constrained" type I was hoping that the controls for custom content and wide size would no longer display by default. In the multiple discussions around the non-intuitiveness of layout controls 😅 one point that came up a bit was that it generally makes more sense for users to be able to set a global default than a custom size for each block. Given these controls may not get much use, it would be nice to separate them logically from the "use content width" toggle and have them hidden by default.
  • It feels a bit weird to have "allow to wrap" control display by default for the horizontal flex blocks, whereas for vertical it's "orientation". Perhaps we could display orientation and justification by default for both?

I wonder if it would make sense to think of this in terms of such a boolan "having layout" toggle, with layout being flex and no layout being block

I'm not sure this will be possible at this point. We already have two non-flex layout types ("flow" and "constrained"), "position" will be another and in the future we also want to implement "grid".

the current implementation is not perfect – particularly how the controls switch based on whether the block is flow or flex

I'm inclined to consider this a feature 😄 because they are different layout types with different features, so it makes sense that they have different controls. Having the same-looking control potentially have different effects for different layout types would be quite confusing.

So my instinct is that this needs a bit more design consideration before making any changes to the layout panel in the short term

My biggest concern here is that we're considering this change as an essential part of the work towards stabilising the layout support, which we should do ASAP because the feature is starting to see some real-world use, and the more extenders come to depend on it, the less flexibility we have to make changes going forward.

Could we perhaps turn this around and not consider the migration to ToolsPanel essential, as it is mostly a cosmetic rearrangement of the controls, and focus instead on stabilising the API for extenders?

// Only show the inherit toggle if it's supported,
// a default theme layout is set (e.g. one that provides `contentSize` and/or `wideSize` values),
// and either the default / flow or the constrained layout type is in use, as the toggle switches from one to the other.
const showInheritToggle = !! (
Copy link
Contributor

Choose a reason for hiding this comment

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

Could we keep this logic in the parent layout panel, so as not to duplicate it across two layout types?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Could we keep this logic in the parent layout panel, so as not to duplicate it across two layout types?

Good question! I couldn't work out a way to combine this toggle with the content size controls without moving it down to the layout type level. If we keep them separate (as you suggest in your other comment), then we can happily move it back to the parent.

Let me know if you can think of a better way to go about it, though! (I'll hold off on implementing further changes until we hear more from designers)

@jameskoster
Copy link
Contributor

do you think it's still worth pursuing for now, or does that also need more design-time to figure out how it'll work inside the panel?

That one needs a little more work. It came up in a conversation yesterday with Matias and Joen, and consensus was to take another look at fixed & sticky together to make sure we're not painting ourselves into a corner with the design. It may still be that we implement Sticky on its own first. Hopefully we'll have an update soon :)

I'm inclined to consider this a feature 😄 because they are different layout types with different features, so it makes sense that they have different controls.

Sorry I was referring to the UX. I understand the need for different sets of controls, but we need to present them in ways that feel intuitive and the current experience is a bit lacklustre in that regard. For instance it's not really clear why switching from Group to Stack results in totally different Layout controls. Or that 'Orientation' and block type (Row / Stack) are the same thing presented two different ways.

@andrewserong
Copy link
Contributor Author

Thanks for the feedback and updates, folks!

I think it was a useful exploration this PR, in digging up these ideas and insights into the controls. For now, I think let's park this PR,particularly with the discussion over in #46032 that looks at other options for where the sticky/fixed position control could go 👍

Could we perhaps turn this around and not consider the migration to ToolsPanel essential, as it is mostly a cosmetic rearrangement of the controls, and focus instead on stabilising the API for extenders?

Treating the ToolsPanel migration as non-essential sounds like a good idea to me, as that'll free up other more impactful work if we can workaround the absence of the ToolsPanel like in #46032

@andrewserong
Copy link
Contributor Author

Since we're pursuing a different direction for the Position UI now that is decoupled from Layout, and this PR is a little old, I'll close out this experiment. We can always open a new PR and borrow ideas from here if and when we'd like to revisit using the ToolsPanel for Layout.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi [Feature] Layout Layout block support, its UI controls, and style output. [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

LayoutPanel: Switch to using the ToolsPanel
4 participants