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

Use ToolsPanel in Global Styles → Typography #44180

Merged
merged 9 commits into from
Sep 29, 2022

Conversation

noisysocks
Copy link
Member

@noisysocks noisysocks commented Sep 15, 2022

What?

Updates Global Styles → Typography to use ToolsPanel. This allows users to reset styles to the theme default using the familiar ellipsis menu flow.

Why?

  1. Being able to reset the value is extremely useful, especially when editing styles for blocks (e.g. Global Styles → Blocks → Heading → Typography).

  2. It makes the Global Styles interface consistent with the Block Settings interface.

  3. It means that we don't have to invent new (and inconsistent) UIs for resetting values. For example, right now there is no way to reset the font size when using the T-shirt size selector.

  4. It means we could have more advanced controls hidden by default so as to not overwhelm the user. (Not doing this yet.)

  5. It lets us hide the ugly Reset button in the font size picker when setting a custom font size.

How?

We already do this for Dimensions so I basically copied that approach.

Testing Instructions

  1. Open Site Editor → Global Styles → Typography.
  2. Experiment with changing the typography settings of various elements and blocks.
  3. Experiment with resetting those changes using the ellipsis menu flow.

Screenshots or screencast

Kapture.2022-09-21.at.16.53.11.mp4

@noisysocks noisysocks added [Type] Enhancement A suggestion for improvement. Needs Design Feedback Needs general design feedback. Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json labels Sep 15, 2022
@github-actions
Copy link

github-actions bot commented Sep 15, 2022

Size Change: +6.91 kB (+1%)

Total Size: 1.26 MB

Filename Size Change
build/block-directory/index.min.js 7.09 kB +6 B (0%)
build/block-editor/index.min.js 166 kB +3.23 kB (+2%)
build/block-editor/style-rtl.css 15.4 kB +14 B (0%)
build/block-editor/style.css 15.4 kB +10 B (0%)
build/block-library/blocks/group/editor-rtl.css 384 B +47 B (+14%) ⚠️
build/block-library/blocks/group/editor.css 384 B +47 B (+14%) ⚠️
build/block-library/blocks/image/editor-rtl.css 884 B +8 B (+1%)
build/block-library/blocks/image/editor.css 882 B +9 B (+1%)
build/block-library/blocks/navigation/editor-rtl.css 2 kB +11 B (+1%)
build/block-library/blocks/navigation/editor.css 2.01 kB +11 B (+1%)
build/block-library/blocks/paragraph/editor-rtl.css 317 B +143 B (+82%) 🆘
build/block-library/blocks/paragraph/editor.css 317 B +143 B (+82%) 🆘
build/block-library/blocks/post-featured-image/editor-rtl.css 534 B -13 B (-2%)
build/block-library/blocks/post-featured-image/editor.css 532 B -13 B (-2%)
build/block-library/blocks/video/editor-rtl.css 678 B +117 B (+21%) 🚨
build/block-library/blocks/video/editor.css 681 B +118 B (+21%) 🚨
build/block-library/editor-rtl.css 11.1 kB +107 B (+1%)
build/block-library/editor.css 11.1 kB +108 B (+1%)
build/block-library/index.min.js 191 kB +931 B (0%)
build/block-serialization-default-parser/index.min.js 1.12 kB +18 B (+2%)
build/block-serialization-spec-parser/index.min.js 2.83 kB +2 B (0%)
build/blocks/index.min.js 49.8 kB +36 B (0%)
build/components/index.min.js 199 kB +1.18 kB (+1%)
build/components/style-rtl.css 11.5 kB +10 B (0%)
build/components/style.css 11.5 kB +11 B (0%)
build/compose/index.min.js 12.5 kB +21 B (0%)
build/core-data/index.min.js 15.5 kB +3 B (0%)
build/customize-widgets/index.min.js 11.3 kB +2 B (0%)
build/data/index.min.js 8.08 kB -4 B (0%)
build/edit-navigation/index.min.js 16 kB +5 B (0%)
build/edit-post/index.min.js 31.1 kB +302 B (+1%)
build/edit-site/index.min.js 57.8 kB +237 B (0%)
build/edit-site/style.css 8.34 kB -2 B (0%)
build/edit-widgets/index.min.js 16.5 kB -1 B (0%)
build/editor/index.min.js 41.6 kB +3 B (0%)
build/element/index.min.js 4.68 kB +1 B (0%)
build/format-library/index.min.js 6.77 kB +3 B (0%)
build/keyboard-shortcuts/index.min.js 1.78 kB +1 B (0%)
build/keycodes/index.min.js 1.83 kB -1 B (0%)
build/notices/index.min.js 963 B +10 B (+1%)
build/nux/index.min.js 2.06 kB +10 B (0%)
build/preferences-persistence/index.min.js 2.22 kB +2 B (0%)
build/rich-text/index.min.js 10.6 kB +55 B (+1%)
build/style-engine/index.min.js 1.46 kB +5 B (0%)
build/vendors/react-dom.min.js 38.5 kB -23 B (0%)
build/viewport/index.min.js 1.08 kB -9 B (-1%)
ℹ️ 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/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 65 B
build/block-library/blocks/archives/style.css 65 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 523 B
build/block-library/blocks/button/style.css 523 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 103 B
build/block-library/blocks/code/style.css 103 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 187 B
build/block-library/blocks/comment-template/style.css 185 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 834 B
build/block-library/blocks/comments/editor.css 832 B
build/block-library/blocks/comments/style-rtl.css 632 B
build/block-library/blocks/comments/style.css 630 B
build/block-library/blocks/cover/editor-rtl.css 605 B
build/block-library/blocks/cover/editor.css 607 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/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/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 284 B
build/block-library/blocks/latest-comments/style.css 284 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 463 B
build/block-library/blocks/latest-posts/style.css 462 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 705 B
build/block-library/blocks/navigation-link/editor.css 703 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-submenu/view.min.js 423 B
build/block-library/blocks/navigation/style-rtl.css 2.17 kB
build/block-library/blocks/navigation/style.css 2.16 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 443 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/style-rtl.css 260 B
build/block-library/blocks/paragraph/style.css 260 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 493 B
build/block-library/blocks/post-comments-form/style.css 493 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/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 73 B
build/block-library/blocks/post-terms/style.css 73 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 282 B
build/block-library/blocks/query-pagination/style.css 278 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 439 B
build/block-library/blocks/query/editor.css 439 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 488 B
build/block-library/blocks/site-logo/editor.css 488 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 84 B
build/block-library/blocks/site-title/editor.css 84 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 494 B
build/block-library/blocks/table/editor.css 494 B
build/block-library/blocks/table/style-rtl.css 611 B
build/block-library/blocks/table/style.css 609 B
build/block-library/blocks/table/theme-rtl.css 190 B
build/block-library/blocks/table/theme.css 190 B
build/block-library/blocks/tag-cloud/style-rtl.css 239 B
build/block-library/blocks/tag-cloud/style.css 239 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/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/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.2 kB
build/block-library/style.css 12.2 kB
build/block-library/theme-rtl.css 719 B
build/block-library/theme.css 722 B
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/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/style-rtl.css 3.99 kB
build/edit-navigation/style.css 4 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/style-rtl.css 6.94 kB
build/edit-post/style.css 6.94 kB
build/edit-site/style-rtl.css 8.36 kB
build/edit-widgets/style-rtl.css 4.34 kB
build/edit-widgets/style.css 4.34 kB
build/editor/style-rtl.css 3.62 kB
build/editor/style.css 3.61 kB
build/escape-html/index.min.js 537 B
build/experiments/index.min.js 868 B
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/list-reusable-blocks/index.min.js 1.74 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/nux/style-rtl.css 732 B
build/nux/style.css 728 B
build/plugins/index.min.js 1.94 kB
build/preferences/index.min.js 1.3 kB
build/primitives/index.min.js 933 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/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.53 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.61 kB
build/vendors/react.min.js 4.34 kB
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.18 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

@noisysocks
Copy link
Member Author

What do you think of this rough proof of concept @jasmussen? It would solve the problems we have with there being no way to reset Decoration, Letter case, and Font size in Global Styles.

The only thing I don't like is that it means there are now two headers. Ideally we would consolidate the two headers circled in yellow and find somewhere else to put the controls that are in the ellipsis circled in red so that there aren't so many ellipsis buttons.

Screen Shot 2022-09-15 at 18 12 50

So something like this:

Screen Shot 2022-09-15 at 18 18 38

@jasmussen
Copy link
Contributor

I think this is an excellent solution, and would agree with the consolidation into a single header, if possible. But even with the subheading (perhaps without the separating border? 🤔 ) it would be an improvement over the reset buttons. The main challenge with the reset buttons is that there's no system in how to place them, their labels change width and wrap depending on languages, and they get undue prominence considering they are secondary to the main action. Anything to move forward from them would be a win, IMO!

@noisysocks
Copy link
Member Author

Thanks for the gut check @jasmussen!

@ciampo @mirka: Any thoughts on whether we should / how we could make ToolsPanel support the use case where you specify your own component to replace the title? Do you think it would make sense to split out the DropdownMenu in ToolsPanel out into its own component?

<ToolsPanel>
	<HStack>
		<Button icon={ arrowLeft } label="Back" />
		<Heading>Headings</Heading>
		<ToolsPanelMenu resetAll={ resetAll } />
	</HStack>
	<ToolsPanelItem>...</ToolsPanelItem>
	<ToolsPanelItem>...</ToolsPanelItem>
</ToolsPanel>

@MaggieCabrera
Copy link
Contributor

Would it make sense for this panel to have all the possible settings showing? We hide/show selectively for blocks because there's too many settings to show at once (spacing, colors, typography...) but in Global Styles it's a more limited amount, and displaying all at the same time would reduce the amount of clicking, which is already high as it is to get to the actual element we want to customize.

@noisysocks
Copy link
Member Author

Would it make sense for this panel to have all the possible settings showing?

Yeah! I think so. We only care about the reset functionality that ToolsPanel provides, not the hidden-by-default functionality that ToolsPanel provides. In this very rough PR I have it so that all the controls are visible by default.

@mirka
Copy link
Member

mirka commented Sep 19, 2022

Any thoughts on whether we should / how we could make ToolsPanel support the use case where you specify your own component to replace the title? Do you think it would make sense to split out the DropdownMenu in ToolsPanel out into its own component?

I don't have enough familiarity with this component to think of a good approach off hand, but we should definitely figure something out if this is a pattern we're going to use. The approach you're suggesting sounds reasonable, and I think it's worth trying to see if we can do it cleanly. (I'm betting that we can, because the current ToolsPanel code seems pretty well equipped to deal with refactors like this!)

@ciampo
Copy link
Contributor

ciampo commented Sep 19, 2022

where you specify your own component to replace the title

  • Would that be a replacement for the default "title label" (e.g Typography), or would it be a replacement for the whole ToolsPanelHeader component?
  • When consolidating the "navigator screen" heading and the ToolsPanel heading, we'll need to make sure that we preserve correct labelling and semantics. (currently those two headings serve two different purposes)

Do you think it would make sense to split out the DropdownMenu in ToolsPanel out into its own component?

We could look into doing that, and making changes to ToolsPanel, making it more of a modular component. We could split ToolsPanelHeader into smaller components (i.e. ToolsPanelDropdownMenu), although that could mean that we'd have to refactor all usages of ToolsPanel to the new approach (we'd also need to see if we can do this without introducing breakages to any external consumers of the component).

If we go for the modular approach, we could see if we always want a grid wrapper inside the component, or if we want to let consumers of ToolsPanel bring their own layout.

@noisysocks
Copy link
Member Author

  • Would that be a replacement for the default "title label" (e.g Typography), or would it be a replacement for the whole ToolsPanelHeader component?

I think the whole header. We could allow a JSX element to be given as the title but it could get tricky to make sure e.g. the back button and ellipsis menu are aligned.

@noisysocks
Copy link
Member Author

noisysocks commented Sep 21, 2022

I spent some time exploring how to combine the two headers in #44284. There's something there but I think it's more effort than it's worth, at least right now.

How about we keep the two headers but pull the heading level selector and font preview out of the typography panel? This creates space between the two headers, communicates the information hierarchy a lot more clearly, and makes the panel look more like the one in the block inspector.

1. Everything within panel (current) 2. Font preview first 3. Heading level selector first
Screen Shot 2022-09-21 at 15 12 28 Screen Shot 2022-09-21 at 15 14 22 Screen Shot 2022-09-21 at 15 14 38

What do you think @jasmussen?

@noisysocks noisysocks marked this pull request as ready for review September 21, 2022 06:56
@noisysocks
Copy link
Member Author

I merged trunk into this branch, went with option 3 above, and updated the PR description. I'm pretty happy with this! It feels quite intuitive to my mind and I love that there's now no more ugly Reset button when setting a custom font size.

Kapture.2022-09-21.at.16.53.11.mp4

@jasmussen
Copy link
Contributor

jasmussen commented Sep 21, 2022

To keep things simple, it does seem fine to keep the separator above the typography panel. But just to clarify some of the conversation about where to put the ellipsis, I was thinking that we could be as simple as just removing the border:

border

The video you shared looks good, except I'd keep the preview above the h1-h6. Possibly even above the description, a la #42919 (comment). Mainly a detail.

Is that helpful?

@noisysocks
Copy link
Member Author

To keep things simple, it does seem fine to keep the separator above the typography panel. But just to clarify some of the conversation about where to put the ellipsis, I was thinking that we could be as simple as just removing the border:

I did try this but having the border feels more right to me. What I like about the border is that it makes the Typography UI here look identical to the Typography UI in the block inspector. I expect that users who have learned what the ellipsis does there will instantly know what it does here too.

The video you shared looks good, except I'd keep the preview above the h1-h6. Possibly even above the description, a la #42919 (comment). Mainly a detail.

I moved the preview to be above the heading level selector. Here's how this PR looks now:

Screen Shot 2022-09-23 at 14 05 15

I could move it further up to be above the description. Here's how that would look:

Screen Shot 2022-09-23 at 14 15 39

I don't have a strong preference. The former is more consistent with other panels which always have the description below the title. The latter is more consistent with the explorations in #42919 (comment).

Is that helpful?

Always, Joen! I respect your judgement on these things more than mine.

@noisysocks noisysocks changed the title Try using ToolsPanel in Global Styles → Typography Use ToolsPanel in Global Styles → Typography Sep 26, 2022
@ramonjd
Copy link
Member

ramonjd commented Sep 26, 2022

This is looking great to me so far.

I noticed that the font family control doesn't appear to have the same checks as other typography properties, i.e., it appears in the tools panel options list even where there is no font family control.

At least in Empty Theme, for which no font families are defined in theme.json 😄

2022-09-26.14.16.56.mp4

@noisysocks
Copy link
Member Author

Thanks @ramonjd, 7f0a5d9 ought to fix that up.

@noisysocks noisysocks removed the Needs Design Feedback Needs general design feedback. label Sep 28, 2022
@noisysocks noisysocks self-assigned this Sep 28, 2022
@ramonjd
Copy link
Member

ramonjd commented Sep 29, 2022

Thanks @ramonjd, 7f0a5d9 ought to fix that up.

Can confirm that the font family tools panel item only appears where a theme has font family presets, e.g.,

2022

Screen Shot 2022-09-29 at 10 27 08 am

Empty theme

Screen Shot 2022-09-29 at 10 26 37 am

Thank you!

Resetting heading typography styles works for individual headings, e.g.., clicking "Reset all" for H1 will reset H1 typography styles only and not other headings, but I wasn't sure what "Reset all" on the "All" tab should do. My assumption is that it should result all headings (H1-H6), but for me it doesn't:

2022-09-29.10.25.37.mp4

@noisysocks
Copy link
Member Author

Resetting heading typography styles works for individual headings, e.g.., clicking "Reset all" for H1 will reset H1 typography styles only and not other headings, but I wasn't sure what "Reset all" on the "All" tab should do. My assumption is that it should result all headings (H1-H6), but for me it doesn't:

Hm yeah. I'd say the behaviour you're seeing is correct, and I even think the information hierarchy (the fact that the heading level selector appears above the Typography panel) helps to clarify what will happen, just that it's confusing that we're using the word "all" to refer to both "all heading levels" (in the heading selector) "all typography options" (in the dropdown). How about we relabel "Reset all" in the dropdown to say "Reset heading settings", "Reset H1 settings", etc.?

@noisysocks
Copy link
Member Author

noisysocks commented Sep 29, 2022

An alternative way way we could clarify that is maybe by relabelling the "All" option in the heading level selector to be something like "Default" or "Base" since what you're actually editing there is the base heading styles which can be overridden by an individual heading level's style. For example the font family selected in "H1" takes precedence over the font family selected in "All".

@ramonjd
Copy link
Member

ramonjd commented Sep 29, 2022

just that it's confusing that we're using the word "all" to refer to both "all heading levels" (in the heading selector) "all typography options" (in the dropdown).

Ah I get it now, thanks. So the "All" tab behaves similarly to the other tabs – "H1" etc – resets are mutually exclusive in that the reset functions only take effect for changes made in that tab.

In that light, things are working as expected then 😄

maybe by relabelling the "All" option in the heading level selector to be something like "Default" or "Base"

Good suggestion. I like.

Look, it could be just me that was confused. Happy to be schooled here, but that would be clearer for my 🧠

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.

Tools panel functionality works, and typography styles are applied as expected, thanks @noisysocks

Would be good to confirm with @jasmussen whether the comments in #44180 (comment) are indeed a problem or it's just down to me circuiting out 🙃

Sounds like an easy follow up though

@noisysocks
Copy link
Member Author

noisysocks commented Sep 29, 2022

Ah I get it now, thanks. So the "All" tab behaves similarly to the other tabs – "H1" etc – resets are mutually exclusive in that the reset functions only take effect for changes made in that tab.

Yeah that's right. Part of the problem is that we're using a ToggleGroupControl for the heading level selector which doesn't look like a tab bar even though it has tab semantics. See #34345 (comment). Probably something to prioritise—I'll add it to my list.

maybe by relabelling the "All" option in the heading level selector to be something like "Default" or "Base"

Good suggestion. I like.

The problem though is Default doesn't fit inside the button 😅

Look, it could be just me that was confused. Happy to be schooled here, but that would be clearer for my 🧠

Yeah let's merge this as-is and defer to @jasmussen on whether this is an actual problem or something we've invented. I'd like to get this in as I think it's a big improvement over what's in trunk. I'll no doubt continue to iterate on this panel within the context of #42919.

@noisysocks noisysocks merged commit 5073ce2 into trunk Sep 29, 2022
@noisysocks noisysocks deleted the try/tools-panel-in-global-styles branch September 29, 2022 01:26
@github-actions github-actions bot added this to the Gutenberg 14.3 milestone Sep 29, 2022
@jasmussen
Copy link
Contributor

Thanks for working on this. I think the best path forward is to try this out in the plugin and get a feel for it, I'm sure that if it becomes a problem in practice, it will resurface. Nice work!

*/
import { useStyle } from './hooks';

export default function TypographyPreview( { name, element, headingLevel } ) {
Copy link
Contributor

Choose a reason for hiding this comment

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

I noticed that to show the list of elements in the "typography-screen", we also "preview" the typography styles but in a smaller context (the buttons). It might be worth trying to use this component there as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json Needs User Documentation Needs new user documentation [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants