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

Borders: Switch to ToolsPanel for displaying UI #33743

Merged
merged 14 commits into from Nov 29, 2021

Conversation

aaronrobertshaw
Copy link
Contributor

@aaronrobertshaw aaronrobertshaw commented Jul 29, 2021

Depends on:

Related:

Description

This PR:

  • Adds new border InspectorControls group slot
  • Updates the border block support hooks to provide callbacks required for ToolsPanel
  • Updates the border hook to inject border support controls via the new InspectorControls slot
  • Updates the global styles border panel to use the new ToolsPanel
  • Adds default CSS styles to ensure visual borders when width, style or color are set individually

Default Controls

This PR only addresses the switch to the new ToolsPanel component. Deciding which controls should display by default for which blocks will be addressed via a separate PR.

How has this been tested?

Manually.

Test instructions

  1. Edit a post, add a group block, then select that block.
  2. Confirm that the border controls within the sidebar are within a ToolsPanel
  3. Confirm each border control works appropriately (Note: this PR does not make any specific block's border controls "default" in terms of always displaying within the new panel)
  4. Switch to the site editor
  5. Under "By block type", expand the group block panel and confirm the border controls are also in the new panel there
  6. Test the border controls within global styles and ensure they work as expected.

Screenshots

Screen.Recording.2021-08-12.at.2.39.41.pm.mp4

Types of changes

New feature. Enhancement.

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).

@aaronrobertshaw aaronrobertshaw added [Type] Enhancement A suggestion for improvement. [Feature] Block API API that allows to express the block paradigm. Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi labels Jul 29, 2021
@aaronrobertshaw aaronrobertshaw self-assigned this Jul 29, 2021
@aaronrobertshaw aaronrobertshaw marked this pull request as draft July 29, 2021 07:00
@github-actions
Copy link

github-actions bot commented Jul 29, 2021

Size Change: +385 B (0%)

Total Size: 1.1 MB

Filename Size Change
build/block-editor/index.min.js 139 kB +241 B (0%)
build/block-editor/style-rtl.css 14.4 kB -45 B (0%)
build/block-editor/style.css 14.4 kB -47 B (0%)
build/block-library/common-rtl.css 857 B +42 B (+5%) 🔍
build/block-library/common.css 856 B +44 B (+5%) 🔍
build/block-library/style-rtl.css 10.5 kB +20 B (0%)
build/block-library/style.css 10.5 kB +21 B (0%)
build/edit-site/index.min.js 33.3 kB +169 B (+1%)
build/edit-site/style-rtl.css 6.48 kB -29 B (0%)
build/edit-site/style.css 6.47 kB -31 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.21 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 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 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 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 58 B
build/block-library/blocks/audio/editor.css 58 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 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 470 B
build/block-library/blocks/button/editor.css 470 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 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 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 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 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 134 B
build/block-library/blocks/code/theme.css 134 B
build/block-library/blocks/columns/editor-rtl.css 206 B
build/block-library/blocks/columns/editor.css 205 B
build/block-library/blocks/columns/style-rtl.css 503 B
build/block-library/blocks/columns/style.css 502 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB
build/block-library/blocks/cover/style.css 1.22 kB
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 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 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 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 976 B
build/block-library/blocks/gallery/editor.css 980 B
build/block-library/blocks/gallery/style-rtl.css 1.62 kB
build/block-library/blocks/gallery/style.css 1.62 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 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 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 507 B
build/block-library/blocks/image/style.css 511 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 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 493 B
build/block-library/blocks/media-text/style.css 490 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 649 B
build/block-library/blocks/navigation-link/editor.css 650 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.89 kB
build/block-library/blocks/navigation/editor.css 1.89 kB
build/block-library/blocks/navigation/style-rtl.css 1.66 kB
build/block-library/blocks/navigation/style.css 1.65 kB
build/block-library/blocks/navigation/view.min.js 2.74 kB
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 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 172 B
build/block-library/blocks/page-list/style.css 172 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 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/style-rtl.css 444 B
build/block-library/blocks/post-comments-form/style.css 444 B
build/block-library/blocks/post-comments/style-rtl.css 492 B
build/block-library/blocks/post-comments/style.css 493 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 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/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 391 B
build/block-library/blocks/post-template/style.css 392 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 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 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 378 B
build/block-library/blocks/pullquote/style.css 378 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 262 B
build/block-library/blocks/query-pagination/editor.css 255 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 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 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 245 B
build/block-library/blocks/separator/style.css 245 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 772 B
build/block-library/blocks/site-logo/editor.css 772 B
build/block-library/blocks/site-logo/style-rtl.css 165 B
build/block-library/blocks/site-logo/style.css 165 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 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 670 B
build/block-library/blocks/social-links/editor.css 669 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB
build/block-library/blocks/social-links/style.css 1.32 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 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 569 B
build/block-library/blocks/video/editor.css 570 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/editor-rtl.css 9.81 kB
build/block-library/editor.css 9.81 kB
build/block-library/index.min.js 162 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/theme-rtl.css 672 B
build/block-library/theme.css 677 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.3 kB
build/components/index.min.js 214 kB
build/components/style-rtl.css 15.3 kB
build/components/style.css 15.3 kB
build/compose/index.min.js 10.9 kB
build/core-data/index.min.js 13.2 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.47 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-post/index.min.js 29.6 kB
build/edit-post/style-rtl.css 7.1 kB
build/edit-post/style.css 7.09 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.18 kB
build/edit-widgets/style.css 4.18 kB
build/editor/index.min.js 37.8 kB
build/editor/style-rtl.css 3.78 kB
build/editor/style.css 3.77 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.57 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.71 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.86 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.84 kB
build/primitives/index.min.js 924 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.57 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@aaronrobertshaw aaronrobertshaw force-pushed the update/border-support-to-use-new-panel branch from c641f4b to ad25333 Compare August 6, 2021 04:29
Base automatically changed from try/block-supports-dimensions-panel to trunk August 10, 2021 23:44
@aaronrobertshaw aaronrobertshaw force-pushed the update/border-support-to-use-new-panel branch from ad25333 to e0eb0d6 Compare August 11, 2021 06:21
@ramonjd ramonjd added this to In progress in Design Tools Aug 11, 2021
@aaronrobertshaw aaronrobertshaw changed the title [WIP] Borders: Update border block support and global styles to use new panel Borders: Switch to ToolsPanel for displaying UI Aug 12, 2021
@aaronrobertshaw aaronrobertshaw marked this pull request as ready for review August 12, 2021 04:45
@ramonjd
Copy link
Member

ramonjd commented Aug 13, 2021

I just took this for a test run. It works well for border supports in both the block and site editors 🎉

Screen Shot 2021-08-14 at 7 15 31 am

I know you're coming back to this after all the changes to the ToolsPanels, but as far as I could see there wasn't much more than updating the comments to refer to ToolsPanel instead of progressive disclosure and using cleanEmptyObject for the reset functions ??

There' a WIP defaults PR for borders over at #34061

@aaronrobertshaw
Copy link
Contributor Author

Thanks for reviewing this @ramonjd. Appreciate it 👍

I know you're coming back to this after all the changes to the ToolsPanels, but as far as I could see there wasn't much more than updating the comments to refer to ToolsPanel instead of progressive disclosure

Looks like I'd missed updating the border panel's CSS that referred to the .components-progressive-disclosure-panel during the last rebase. With tweaks to the ToolsPanel styles the border.scss file can be removed now. The new styles overlap changes that were required for the color block supports panel so there'll be less in the long run.

In terms of the comments, I see references to a progressive discovery panel which is what the ToolsPanel is. The possibility of renaming the ToolsPanel has come up elsewhere so for the time being, maybe we should leave these comments. The nature of the panel won't change but the component's name might.

and using cleanEmptyObject for the reset functions ??

Thanks for catching the copy/paste error in the border-color hook.

It should be style: removeBorderAttribute( style, 'color' ). There is a call to clean the style object in the removeBorderAttribute util function so that's covered.

Copy link
Member

@ramonjd ramonjd left a comment

Choose a reason for hiding this comment

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

This is working well for me with the defaults in #34061 activated.

Independent of any blocking concerns/discussions, of which I'm not aware, this LGTM.

Thank you!

✅ I can apply and reset border support controls as expected. The corresponding inline styles are applied/removed.
✅ All changes are reflected on the frontend
✅ Updates to border styles in the Site Editor are applied to selected blocks

fern-border-support

@aaronrobertshaw
Copy link
Contributor Author

Thank you everyone for testing the latest iteration of this! I appreciate it 🙇

The panel is testing really well for me now. I'd love to get this in and iterate on the controls separately.

I think it's good to go.

Sounds like we're nearly ready to merge.

@jasmussen or @jameskoster do you have any objections to us merging this PR and iterating on the border controls separately?

@ramonjd already has a PR up to discuss and address which border controls will show by default for individual blocks. #34061

One final thing worth mentioning, is I think the PR @stacimc created, splitting out the multiple origin color palette update to the border color control, should be merged before this as it might make it easier to sneak that into 5.9 as a fix.

@jasmussen
Copy link
Contributor

To take stock. This is trunk:
current

Border being something that should not be shown by default on any block (possibly with the exception of quotes in the future, if we manage to absorb the left border into theme.json), to me it then feels appropriate that this panel starts collapsed, but then also that it shows both width, style, and color at once when expanded. The big downside here is that you have to set both a width and a style for any border to show.

This branch:
this branch

Border being something you explicitly add using the "Plus" button feels good, and the fact that you can set a border width without also selecting a style is a key problem solved.

The fundamental problem here is that width and style are two separate controls that both need to be added if you want to make a dashed line. While changing to dashed or dots isn't something I expect people to do that often, it still feels like those controls are separate only because border-style and border-width are separate in CSS, as opposed to being good for the flow. This reminds me of the font-styleand font-family support we added as a single dropdown that included both in one list.

In that vein, I still think that at least border-width and style (unsure about color) should be considered a single user interface control to add, rather than two separate ones.

Can that happen in a followup? I think that depends mostly on whether we can come back to the panel and make it a single control in the future, without having to handle a slew of deprecations and related issues. If we can, seems fine to land.

One thing I noticed though — which is possibly/probably unrelated to this PR, is that the panel when empty has the wrong height:

Screenshot 2021-11-25 at 10 18 51

It's 53px tall when it should be 48:
Screenshot 2021-11-25 at 10 33 02

That height appears to be due to the component inheriting an arbitrary line-height from an ancestor. If we add line-height: 0; to the panel, it becomes 49px, the extra pixel probably explained by the border:

Screenshot 2021-11-25 at 10 35 14

@aaronrobertshaw
Copy link
Contributor Author

Thanks for the detailed comment @jasmussen 👍

Border being something you explicitly add using the "Plus" button feels good, and the fact that you can set a border width without also selecting a style is a key problem solved.

It's not just border width you can set and immediately see a border. With this PR, you see a border regardless of which individual control you set, width, style or color.

The fundamental problem here is that width and style are two separate controls that both need to be added if you want to make a dashed line

In my testing across a few different themes, this isn't the case.

You can select only border style from the border panel menu, select a style and see a border without the need to set a width. The current approach in this PR should pick up browser defaults.

In that vein, I still think that at least border-width and style (unsure about color) should be considered a single user interface control to add, rather than two separate ones.

I have no objections to this being a follow-up. I do not think it should block this PR given you can create a border via any of the individual controls and this is a improvement over the current state.

If a mockup can be created for how a single control should look and function, I'll be happy to pick that up for implementation.

Can that happen in a followup? I think that depends mostly on whether we can come back to the panel and make it a single control in the future, without having to handle a slew of deprecations and related issues. If we can, seems fine to land.

The border block supports (other than named colors) just add inline styles. Those inline styles are separate now and would continue to be so once combining controls together in the UI. There should be no deprecation issues as a result.

This is the same as the font-style and font-weight block supports that we combined under the "Appearance" control. The font-family support has its own individual UI.

The inline styles here would benefit from staying separate as per font-style and font-weight so blocks still have the freedom to opt-out of any individual border feature they did not want e.g. border-style.

One thing I noticed though — which is possibly/probably unrelated to this PR, is that the panel when empty has the wrong height:

You are correct this is unrelated to this PR. When the ToolsPanel previously had a horizontal ellipsis for its menu icon, it didn't inflate the height when empty. When the menu button has its line-height set to 0 as suggested, this brings the empty state for the panel to 49px. This matches the collapsed state of the other panels due to the border. The ToolsPanel is laid out differently so a direct comparison between the actual panel headers' heights can't be made.

I'll fix this height issue in a separate PR.

@aaronrobertshaw
Copy link
Contributor Author

I added the tweak to fix the empty ToolsPanel height in #36895.

The plan now is to merge this Border panel PR first thing Monday.

@jasmussen
Copy link
Contributor

In my testing across a few different themes, this isn't the case.
You can select only border style from the border panel menu, select a style and see a border without the need to set a width. The current approach in this PR should pick up browser defaults.

Just in case there was any doubt, the fact that style and width work as separate controls is commendable. But what I meant was that you should never have to add both style and width with two visits to the tools panel. There should be only a single "Border" control. Something like this:

tools panel

If a mockup can be created for how a single control should look and function, I'll be happy to pick that up for implementation.

I think there are still some border designs underway for improving how that looks in the future. So in the mean time and just for simplicity, we can use the current design:

Screenshot 2021-11-26 at 09 18 35

☝️ That could be a single control called "Border" in the tools panel.

You should never see only the width, or only the style. Does that sound okay?

The inline styles here would benefit from staying separate as per font-style and font-weight so blocks still have the freedom to opt-out of any individual border feature they did not want e.g. border-style.

Sounds good. The key is that it doesn't make a lot of sense to add only width and not also style, or only style and not also width.

@aaronrobertshaw
Copy link
Contributor Author

I think there are still some border designs underway for improving how that looks in the future. So in the mean time and just for simplicity, we can use the current design:

☝️ That could be a single control called "Border" in the tools panel.

You should never see only the width, or only the style. Does that sound okay?

Sounds good. The key is that it doesn't make a lot of sense to add only width and not also style, or only style and not also width.

I could see a theme author wishing to disable border style to prevent dotted/dashed borders etc but still allowing variations in border width.

I'll continue with the plan to merge this PR today and work on a separate PR to combine the width/style controls within the ToolsPanel menu only. We can discuss that further there.

aaronrobertshaw and others added 14 commits November 29, 2021 11:49
Creating the ToolsPanel for block supports around the slot resulted in the slot adding an extra div within the ToolsPanel breaking its layout. This div is needed for the slot's ref to be applied allowing virtual bubbling.  This change effectively moves the ToolsPanel inside that. It also avoids needing to retrieve ToolsPanelContext and recreating the context provider.
Update border support to display via progressive disclosure panel

Updating border support UI styling for grid layout

Update border global styles panel

Fix border global style hasValue checks
These changes include adding a new border group to the inspector controls slots and updating the border tools panel to match the latest changes to that component.
* Restore single-column styling for appropriate controls

* Remove clear button from Color picker in ToolsPanel
When a user first sets a border width or color their may not be a border style set. These changes aim to provide a fallback for that (in the frontend/block editor) or apply a border style by default in the site editor for Global Styles.
@aaronrobertshaw aaronrobertshaw force-pushed the update/border-support-to-use-new-panel branch from 8956b49 to 3a8e748 Compare November 29, 2021 02:03
@aaronrobertshaw aaronrobertshaw merged commit 3475693 into trunk Nov 29, 2021
@aaronrobertshaw aaronrobertshaw deleted the update/border-support-to-use-new-panel branch November 29, 2021 03:46
@github-actions github-actions bot added this to the Gutenberg 12.1 milestone Nov 29, 2021
// can see a visible border.
const handleOnChangeWithStyle = ( setStyle ) => ( value ) => {
if ( !! value && ! borderStyle ) {
setBorderStyle( 'solid' );
Copy link
Contributor

Choose a reason for hiding this comment

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

Do you happen to know why we do that here? This is creating some issues.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

There was feedback here that we needed to ensure when first setting a border width or color that there is a visible border. That involved ensuring a border style was set.

The inline comment above this line and the commit message point to that as the primary reason (3a8e748).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Block API API that allows to express the block paradigm. [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants