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

Typography: Switch to ToolsPanel for block support UI #33744

Merged
merged 3 commits into from
Oct 22, 2021

Conversation

aaronrobertshaw
Copy link
Contributor

@aaronrobertshaw aaronrobertshaw commented Jul 29, 2021

Depends on:

Related:

Description

This PR:

  • Adds new typography InspectorControls group slot
  • Updates the typography block support hooks to provide callbacks required for ToolsPanel
  • Updates the typography hook to render the typography support controls via the new InspectorControls slot

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 navigation block, then select that block.
  2. Confirm that the typography controls within the sidebar are within a ToolsPanel
  3. Confirm each typography control works appropriately (Note: this PR does not make any specific block's typography controls "default" in terms of always displaying within the new panel)

Screenshots

Screen.Recording.2021-10-20.at.7.47.48.pm.mp4

Types of changes

New feature.

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
@github-actions
Copy link

github-actions bot commented Jul 29, 2021

Size Change: +583 B (0%)

Total Size: 1.07 MB

Filename Size Change
build/block-editor/index.min.js 135 kB +480 B (0%)
build/block-editor/style-rtl.css 13.9 kB +46 B (0%)
build/block-editor/style.css 13.9 kB +50 B (0%)
build/block-library/index.min.js 149 kB +7 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 931 B
build/admin-manifest/index.min.js 1.09 kB
build/annotations/index.min.js 2.7 kB
build/api-fetch/index.min.js 2.21 kB
build/autop/index.min.js 2.08 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.2 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 549 B
build/block-library/blocks/button/style.css 549 B
build/block-library/blocks/buttons/editor-rtl.css 309 B
build/block-library/blocks/buttons/editor.css 309 B
build/block-library/blocks/buttons/style-rtl.css 317 B
build/block-library/blocks/buttons/style.css 317 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 131 B
build/block-library/blocks/code/theme.css 131 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 497 B
build/block-library/blocks/columns/style.css 496 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.17 kB
build/block-library/blocks/cover/style.css 1.17 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 977 B
build/block-library/blocks/gallery/editor.css 982 B
build/block-library/blocks/gallery/style-rtl.css 1.6 kB
build/block-library/blocks/gallery/style.css 1.59 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/home-link/style-rtl.css 247 B
build/block-library/blocks/home-link/style.css 247 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 502 B
build/block-library/blocks/image/style.css 505 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 568 B
build/block-library/blocks/navigation-link/editor.css 570 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/style-rtl.css 195 B
build/block-library/blocks/navigation-submenu/style.css 195 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.71 kB
build/block-library/blocks/navigation/editor.css 1.71 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 198 B
build/block-library/blocks/page-list/style.css 198 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 140 B
build/block-library/blocks/post-comments-form/style.css 140 B
build/block-library/blocks/post-comments/style-rtl.css 360 B
build/block-library/blocks/post-comments/style.css 359 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 396 B
build/block-library/blocks/post-featured-image/editor.css 397 B
build/block-library/blocks/post-featured-image/style-rtl.css 156 B
build/block-library/blocks/post-featured-image/style.css 156 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 60 B
build/block-library/blocks/post-title/style.css 60 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 250 B
build/block-library/blocks/separator/style.css 250 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 770 B
build/block-library/blocks/site-logo/editor.css 770 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 824 B
build/block-library/blocks/social-links/editor.css 823 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 571 B
build/block-library/blocks/video/editor.css 572 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/common-rtl.css 815 B
build/block-library/common.css 812 B
build/block-library/editor-rtl.css 9.65 kB
build/block-library/editor.css 9.65 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 10.3 kB
build/block-library/style.css 10.3 kB
build/block-library/theme-rtl.css 668 B
build/block-library/theme.css 673 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 kB
build/components/index.min.js 212 kB
build/components/style-rtl.css 15.3 kB
build/components/style.css 15.3 kB
build/compose/index.min.js 10.4 kB
build/core-data/index.min.js 12.4 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 614 B
build/data/index.min.js 7.1 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 428 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.46 kB
build/edit-navigation/index.min.js 15.8 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.4 kB
build/edit-post/style-rtl.css 7.12 kB
build/edit-post/style.css 7.12 kB
build/edit-site/index.min.js 30.6 kB
build/edit-site/style-rtl.css 5.74 kB
build/edit-site/style.css 5.74 kB
build/edit-widgets/index.min.js 15.8 kB
build/edit-widgets/style-rtl.css 4.12 kB
build/edit-widgets/style.css 4.13 kB
build/editor/index.min.js 37.6 kB
build/editor/style-rtl.css 3.78 kB
build/editor/style.css 3.77 kB
build/element/index.min.js 3.21 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 5.99 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.6 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.72 kB
build/keycodes/index.min.js 1.3 kB
build/list-reusable-blocks/index.min.js 1.85 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 845 B
build/nux/index.min.js 2.03 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.83 kB
build/primitives/index.min.js 921 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.63 kB
build/reusable-blocks/index.min.js 2.19 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.52 kB
build/shortcode/index.min.js 1.48 kB
build/token-list/index.min.js 562 B
build/url/index.min.js 1.74 kB
build/viewport/index.min.js 1.02 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.11 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/typography-support-to-use-new--panel branch from 86f2bef to f2ab691 Compare August 6, 2021 04:44
Base automatically changed from try/block-supports-dimensions-panel to trunk August 10, 2021 23:44
@aaronrobertshaw aaronrobertshaw force-pushed the update/typography-support-to-use-new--panel branch from f2ab691 to d4149ae Compare August 11, 2021 06:33
@aaronrobertshaw aaronrobertshaw changed the title [WIP] Typography: Update typography block support and global styles to use new panel Typography: Switch to ToolsPanel for display UI Aug 12, 2021
@aaronrobertshaw aaronrobertshaw marked this pull request as ready for review August 12, 2021 05:18
@jasmussen
Copy link
Contributor

Nice one. In general for all these toolspanel refactors, we want to tread carefully with changing too much from what's shipping at the moment. Ideally give or take a few exceptions, we want the default design tools to be the same as they were before the panel switch. The bigger benefit of the tools panel is for any future features to benefit global styles and be available in a non-default way in the post editor.

So in this case, we want to at the very least show font size and line height by default. What do you think?

@apeatling
Copy link
Contributor

apeatling commented Aug 12, 2021

@jasmussen There's a bit of a mix of what blocks show for Typography by default. I think I agree that we should stick to font size and line height as the default for a lot of these unless there's a good reason not to?

Here's the blocks using Typography and what they currently show as the default. Let me know how we should move forward:

  • Button
    -- Currently shows: Font family, Font size
  • Code
    -- Currently shows: Font size
  • Heading
    -- Currently shows: Font size, Font weight, Line height
  • List
    -- Currently shows: Font family, Font size
  • Navigation
    -- Currently shows: Font family, Font size, Appearance, Line height, Decoration, Letter case
  • Paragraph
    -- Currently shows: Font size, Line height
  • Post Author
    -- Currently shows: Font size, Line height
  • Post Comments
    -- Currently shows: Font size, Line height
  • Post Comments Count
    -- Currently shows: Font size, Line height
  • Post Comments Form
    -- Currently shows: Font size, Line height
  • Post Comments Link
    -- Currently shows: Font size, Line height
  • Post Date
    -- Currently shows: Font size, Line height
  • Post Excerpt
    -- Currently shows: Font size, Line height
  • Post Categories
    -- Currently shows: Font size, Line height
  • Post Tags
    -- Currently shows: Font size, Line height
  • Post Title
    -- Currently shows: Font family, Font size, Line height
  • Preformatted
    -- Currently shows: Font size
  • Query Pagination
    -- Currently shows: Font size, Line height
  • Query Title
    -- Currently shows: Font family, Font size, Line height
  • Site Tagline
    -- Currently shows: Font family, Font size, Line height, Letter case
  • Site Title
    -- Currently shows: Font family, Font size, Appearance, Line height, Decoration, Letter case
  • Term Description
    -- Currently shows: Font size, Line height
  • Verse
    -- Currently shows: Font family, Font size

@apeatling
Copy link
Contributor

I think we could merge this work first, and then follow up on a decision on defaults in a separate PR.

@jasmussen
Copy link
Contributor

If we were to merge this one with a completely empty typography panel for all those blocks, we'd want to move pretty fast to at least enable font size and lineheight for the Paragraph block. It honestly seems better to at least enable those two by default for all these as a starting point.

@apeatling
Copy link
Contributor

It honestly seems better to at least enable those two by default for all these as a starting point.

Agreed, if we stick to font size and line height as the two defaults for everything, then we could add it to this PR /cc @aaronrobertshaw

@aaronrobertshaw
Copy link
Contributor Author

Agreed, if we stick to font size and line height as the two defaults for everything, then we could add it to this PR /cc

The block.json changes are easily done though I have two thoughts I'd like feedback on.

  1. This PR already touches a lot of files. I think it would be best to have all the block.json in a separate PR. Is this ok? I can base it off this and have it ready to go so the two can be merged together.

  2. Some of the blocks in the list above don't have line-height support enabled for them by the looks of it. Are we happy to opt into that support?

@ramonjd
Copy link
Member

ramonjd commented Aug 13, 2021

I think it would be best to have all the block.json in a separate PR.

There's a PR over here: #34064 It's based off trunk for now.

I can rebase it on top of this for testing once we're ready.

Some of the blocks in the list above don't have line-height support enabled for them by the looks of it. Are we happy to opt into that support?

For now I've defaulted to which control was available, that is, setting fontSize and lineHeight defaults where each block supports them.

@jasmussen
Copy link
Contributor

Some of the blocks in the list above don't have line-height support enabled for them by the looks of it. Are we happy to opt into that support?

Is it not yet possible to tailor the support on a per-block basis?

@aaronrobertshaw
Copy link
Contributor Author

Is it not yet possible to tailor the support on a per-block basis?

It is. That's why some blocks have opted into the support while others haven't. We can also choose which controls are defaults on a per-block basis.

It honestly seems better to at least enable those two by default for all these as a starting point.

I only wanted to confirm that we do indeed want to turn on line height for the blocks that hadn't already opted into it. Or, whether we wanted to just display font size and line height as default controls if the blocks currently support them.

For example, the paragraph block has font size and line-height support, so it would show both by default. The code block only has font size support at the moment. Does it only show the font size control by default, or do we also update it to opt into line-height support and display that control as well?

@jasmussen
Copy link
Contributor

I only wanted to confirm that we do indeed want to turn on line height for the blocks that hadn't already opted into it. Or, whether we wanted to just display font size and line height as default controls if the blocks currently support them.

Right. Having both font size and line-height feel valuable, the only niggle is we want to make sure the line-height works well before enabling it. So for those that haven't yet had access to lineheight we might want to start without it and go from there.

@aaronrobertshaw
Copy link
Contributor Author

I've rebased this PR again.

In addition, I've removed the change of the Global Styles typography UI to the ToolsPanel. The ToolsPanel doesn't fit with the new navigation in the Global Styles sidebar. I think any desired changes to the Global Styles sidebar would be better addressed in a separate PR.

The following screenshot is how the Global Styles panel appeared before the removal of those changes as described above:

Screen Shot 2021-10-20 at 7 57 48 pm

@aaronrobertshaw aaronrobertshaw force-pushed the update/typography-support-to-use-new--panel branch from 2153158 to eaac5c4 Compare October 21, 2021 07:05
@aaronrobertshaw
Copy link
Contributor Author

This has now been updated to handle the font-family moving from a property on the style attribute to a top level attribute itself. The font-size reset e2es have also been updated to be ToolsPanel aware again.

@apeatling apeatling self-requested a review October 21, 2021 18:55
Copy link
Contributor

@apeatling apeatling left a comment

Choose a reason for hiding this comment

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

I've gone through a number of different blocks and tried all typography settings on, off, and with them reset. Everything worked as expected. I can't see a reason for this not to be approved, so I'll kick the process off. :)

There are a couple of UI issues that are related to components that I don't think need to be fixed prior to this being merged. I can follow up with those afterwards.

@ramonjd
Copy link
Member

ramonjd commented Oct 22, 2021

I've been testing this PR as a base for Typography block support: add typography support and defaults #34064.

The ToolsPanel is working as expected for all the blocks I'm testing.

Here's the Site Title, which opts-in to all Typography support:

Oct-22-2021 11-59-40

Looks great!

I think it's also good to go! It'll also undergo more testing as a product of testing #34064.

@aaronrobertshaw
Copy link
Contributor Author

Thanks for the testing @apeatling and @ramonjd. The more eyes on this one the better I think.

Having said that, this PR is probably in a good place to push forward with a view to merging soon.

Because this PR touches a lot of files, I'll write up a bit of a summary to help break down the changes and make it easier for other reviewers or reference in the future.

@aaronrobertshaw
Copy link
Contributor Author

Summary

New InspectorControls slot

As part of the switch to the ToolsPanel, this PR adds a new Slot to the grouped Inspector Controls.

This allows for the injection of ad hoc controls by blocks or plugins into a block support’s panel. This way we can avoid overlapping panel responsibilities. An example of this could be a block adding a drop cap control into the Typography panel even though that is not currently offered through block supports.

Updating block support hooks

Each typography block support feature requires its hook to be updated with util functions to facilitate resetting or checking the presence of values. The block support edit components have also had their checks that skip rendering streamlined. These will now only be made once, at the ToolsPanel level.

has<Feature>Value

This will check whether values have been set in a block’s attributes. Depending on the feature, it might be top level attributes or a property on the style attribute that must be checked.

reset<Feature>

This handles clearing values from a block’s attributes and will also vary per feature.

Updated Hooks

Switching to the ToolsPanel

The real shift to using the ToolsPanel occurs within the typography.js hook.

Here, the original use of a PanelBody that is rendered into the general InspectorControls slot, is replaced. Each feature or control that would have been rendered in the PanelBody is wrapped in a new ToolsPanelItem component and rendered into the new typography grouped Inspector Controls slot. The main typography hook also creates functions that are used by the ToolsPanel to carry out resets on those individual items when the corresponding menu item is toggled on or off.

Styling

Not all components used in block support controls have been converted to the new hook and context system. As such, we need to rely on some additional CSS to polish up the display of these controls within the ToolsPanel context. These styles will eventually be removed as the components used, adopt the context system.

Typography support opt-in & default controls

It was requested that the paragraph block opts into the typography support for at least font size and line height and these controls be displayed by default within the ToolsPanel. This is the only block that has its support changed in this PR. All other changes in terms of opt-in or defaults occur in a follow-up PR to this one: #34064

E2E test changes

As a result of the switch to the ToolsPanel, the font size picker will now opt out of displaying the reset button as it's superfluous to the reset functionality offered by the ToolsPanel menu. This affected the e2e’s in that they previously relied on tabbing to the reset button to ensure a font size could be reset. This was updated to work via the menu.

Clean up

There is currently no use of the combined text decoration and transform controls. These are used individually. Moving forward in the ToolsPanel these will have to remain individually used to allow for resetting each control via the panel menu. As such those individual controls are now exported through the block-editor components package.

Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

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

Great work @aaronrobertshaw, it's super satisfying seeing the ToolsPanel rolled out to the Typography support, and I like the consistent patterns used for all the different hooks 👍

Each of the typography supports is working well in my testing (along with reset and rest all behaviour). I noticed with the Navigation block that setting text decoration updates the setting correctly, and the styling on the front end renders correctly, but the style doesn't appear to win the specificity/inheritance within the editor if we're using the editor version of the Navigation block (e.g. clicking Edit on the block so we're not using the server rendered view in the editor). This is the same behaviour as on trunk, though, so unrelated to this PR and not a blocker.

The code change is looking good, I noticed one issue with the Font Appearance control. We might want to update the label in the menu dropdown so that it shares the same logic as the label used by the hook (I've left a comment about this).

Since this is already a fairly big PR, I'd be in support of merging this in as-is, and us looking at tweaking the label for Font Appearance in a quick follow-up PR, since we're already going to be doing a bunch of other follow-ups anyway.

LGTM! 🚀

<ToolsPanelItem
className="single-column"
hasValue={ () => hasFontAppearanceValue( props ) }
label={ __( 'Appearance' ) }
Copy link
Contributor

Choose a reason for hiding this comment

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

In font-appearance-control the label is conditional as to whether font styles, font weights, or both are available. Should we add a conditional here, too? (or abstract that logic into its own function so it can be used in both places?

I noticed while testing the Heading block in TT1-Blocks that it felt a little confusing the label in the menu being different to the one in the panel item itself.

Panel label Menu label
image image

@aaronrobertshaw
Copy link
Contributor Author

Thanks for the thorough review @andrewserong, always appreciate it 👍

I noticed with the Navigation block that setting text decoration updates the setting correctly, and the styling on the front end renders correctly, but the style doesn't appear to win the specificity/inheritance within the editor if we're using the editor version of the Navigation block (e.g. clicking Edit on the block so we're not using the server rendered view in the editor).

I've been able to replicate this but only after selecting the individual item/link within the Navigation block and choosing Edit from the block's toolbar. After a little exploration, it appears that we end up with a div inside the item's <a> and it has a text-decoration-line style that interferes with the text-decoration inheritance.

As mentioned, it occurs on trunk and is not directly related to this PR. I'll happily address it in a follow-up.

I noticed one issue with the Font Appearance control. We might want to update the label in the menu dropdown so that it shares the same logic as the label used by the hook

Nice catch!

I like the idea of addressing this in a follow-up as well. Given the use of the label as a key for the panel's internal menu item state and for item registration, I'll need to check for any edge cases around making this change when used in conjunction with the typography Inspector Controls SlotFill.


Thank you everyone for the testing and reviews. As we have multiple approvals and plans for a few small follow ups I'll merge this now to unblock #34064

@aaronrobertshaw aaronrobertshaw merged commit 0d5bd30 into trunk Oct 22, 2021
@aaronrobertshaw aaronrobertshaw deleted the update/typography-support-to-use-new--panel branch October 22, 2021 04:30
@github-actions github-actions bot added this to the Gutenberg 11.9 milestone Oct 22, 2021
@aaronrobertshaw
Copy link
Contributor Author

A potential fix for the Nav item not inheriting the text-decoration style correctly is up in #35859

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.

7 participants