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

LineHeightControl: Enhance interactions by migrating internals to NumberControl on Style options. #37160

Merged
merged 14 commits into from
Feb 16, 2022

Conversation

mirka
Copy link
Member

@mirka mirka commented Dec 6, 2021

Closes #37110
Prerequisite for #36196
Related to #36387

⚠️ This PR is just for styling concerns. Porting of the behavior implementation is handled separately in a stacked PR (#37164).

Description

Replaces the underlying component of LineHeightControl from the older TextControl to the new NumberControl. This will help us avoid adding hacky styles to achieve consistency with newer components.

Previous description

First off, we need to decide how and how much we want to keep the legacy styling. Specifically, the style differences we have are:

  1. margin bottom
  2. spacing between label and input
  3. fixed width of input

These all affect layout for existing external usage, and I'm assuming we'll need to keep supporting them by default. However, we do not want any of these legacy styles in our internal usage of the component (i.e. in Typography panel).

In this PR, I am proposing a __unstableHasLegacyStyles prop that can be used to remove these back-compat styles:

Toggling legacy styles in Storybook

This way, we can cleanly use the next-gen styles where we want to. Thoughts?

In accordance with the style deprecation strategy discussed in #38540, the outer margins have been deprecated and early adopters can opt-in via the __nextHasNoMarginBottom prop. The stylesheet can now be completely removed, opening up a path to remove the .block-editor-line-height-control hardcoded classname if desired.

Existing usage in the Global Styles and block editor Typography Panels have also been updated, which lets us remove an internal style hack 🎉

TODO before merge

  • Update docs/changelog once we decide on the approach
  • Merge the Part 2 PR into this branch
  • Remove all temporary code

How has this been tested?

  1. npm run storybook:dev
  2. Go to the stories for Block Editor ▸ LineHeightControl. In the "Temporary Test" story, you can see a migrated component and a Legacy (unchanged) component side by side. They should look identical.

(The Legacy component is there for testing purposes — it will be entirely deleted before merge.)

Screenshots

Screenshot of a migrated component beside a legacy component. They look almost identical.

Types of changes

New feature (non-breaking change which adds functionality)

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).

@mirka mirka added the [Package] Components /packages/components label Dec 6, 2021
@mirka mirka self-assigned this Dec 6, 2021
@github-actions
Copy link

github-actions bot commented Dec 6, 2021

Size Change: +2.12 kB (0%)

Total Size: 1.15 MB

Filename Size Change
build/block-directory/index.min.js 6.51 kB +199 B (+3%)
build/block-editor/index.min.js 143 kB +531 B (0%)
build/block-editor/style-rtl.css 14.8 kB -16 B (0%)
build/block-editor/style.css 14.8 kB -16 B (0%)
build/block-library/blocks/image/editor-rtl.css 731 B -79 B (-10%) 👏
build/block-library/blocks/image/editor.css 730 B -79 B (-10%) 👏
build/block-library/blocks/image/style-rtl.css 518 B +18 B (+4%)
build/block-library/blocks/image/style.css 523 B +20 B (+4%)
build/block-library/blocks/navigation/style-rtl.css 1.89 kB +44 B (+2%)
build/block-library/blocks/navigation/style.css 1.88 kB +41 B (+2%)
build/block-library/editor-rtl.css 10.1 kB -72 B (-1%)
build/block-library/editor.css 10.1 kB -73 B (-1%)
build/block-library/index.min.js 168 kB +232 B (0%)
build/block-library/style-rtl.css 11.3 kB +68 B (+1%)
build/block-library/style.css 11.3 kB +67 B (+1%)
build/blocks/index.min.js 46.4 kB +11 B (0%)
build/core-data/index.min.js 14 kB +607 B (+5%) 🔍
build/edit-post/index.min.js 30 kB +45 B (0%)
build/edit-post/style-rtl.css 7.19 kB +15 B (0%)
build/edit-post/style.css 7.18 kB +15 B (0%)
build/edit-site/index.min.js 42.2 kB +561 B (+1%)
build/edit-site/style-rtl.css 7.23 kB +7 B (0%)
build/edit-site/style.css 7.22 kB +8 B (0%)
build/editor/index.min.js 38.4 kB -30 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/admin-manifest/index.min.js 1.13 kB
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.25 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
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 150 B
build/block-library/blocks/audio/editor.css 150 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 292 B
build/block-library/blocks/buttons/editor.css 292 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 131 B
build/block-library/blocks/code/theme.css 131 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-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 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-query-loop/editor-rtl.css 95 B
build/block-library/blocks/comments-query-loop/editor.css 95 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.55 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 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 353 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 965 B
build/block-library/blocks/gallery/editor.css 967 B
build/block-library/blocks/gallery/style-rtl.css 1.61 kB
build/block-library/blocks/gallery/style.css 1.61 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/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 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 447 B
build/block-library/blocks/latest-posts/style.css 446 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 375 B
build/block-library/blocks/navigation/editor-rtl.css 1.98 kB
build/block-library/blocks/navigation/editor.css 1.99 kB
build/block-library/blocks/navigation/view.min.js 2.85 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 401 B
build/block-library/blocks/page-list/editor.css 402 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 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 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 521 B
build/block-library/blocks/post-comments/style.css 521 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 323 B
build/block-library/blocks/post-template/style.css 323 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 389 B
build/block-library/blocks/pullquote/style.css 388 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 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 201 B
build/block-library/blocks/quote/style.css 201 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 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 233 B
build/block-library/blocks/separator/style.css 233 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 744 B
build/block-library/blocks/site-logo/editor.css 744 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 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 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 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 214 B
build/block-library/blocks/tag-cloud/style.css 215 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 921 B
build/block-library/common.css 919 B
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 676 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/components/index.min.js 215 kB
build/components/style-rtl.css 15.5 kB
build/components/style.css 15.5 kB
build/compose/index.min.js 11.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 663 B
build/data/index.min.js 7.47 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.53 kB
build/edit-navigation/index.min.js 16.2 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-widgets/index.min.js 16.7 kB
build/edit-widgets/style-rtl.css 4.17 kB
build/edit-widgets/style.css 4.17 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 3.32 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 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.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.12 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.98 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 611 B
build/react-i18n/index.min.js 704 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.69 kB
build/reusable-blocks/index.min.js 2.25 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.92 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.18 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

@mirka mirka marked this pull request as ready for review December 6, 2021 19:46
@mirka mirka requested a review from ellatrix as a code owner December 6, 2021 19:46
@mirka mirka force-pushed the migrate/line-height-control-styles branch from 94c0562 to 05b3631 Compare December 6, 2021 20:00
Copy link
Contributor

@aaronrobertshaw aaronrobertshaw left a comment

Choose a reason for hiding this comment

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

Thanks for working on this @mirka 👍

I appreciate the effort placing the legacy control alongside the migrated one in the Storybook. Made testing much easier.

They should look identical.

To the naked eye, the controls look the same. Upon inspecting the controls in dev tools I see there is the slightest of discrepancies between them.

In Chrome and Firefox it is only a fraction of a pixel so you could ignore it. Safari appears to have a 3px difference in height between the migrated and legacy controls.

Chrome / Firefox Safari
Screen Shot 2021-12-07 at 11 52 05 am Screen Shot 2021-12-07 at 12 16 47 pm

For the record, the migrated control has a different line-height on the label and some weird spacing styles mixing padding and margin. The slight discrepancy can be ironed out with the following tweaks applied to the migrated control's label.

    line-height: normal;
    padding-bottom: 0;
    margin-bottom: 4px;
Migrated - Before Legacy Migrated - After
Screen Shot 2021-12-07 at 11 55 16 am Screen Shot 2021-12-07 at 11 55 07 am Screen Shot 2021-12-07 at 11 59 30 am

I don't feel strongly about whether this needs attention, I'll leave that up to you.

@ciampo ciampo added the [Type] Enhancement A suggestion for improvement. label Dec 7, 2021
Copy link
Contributor

@ciampo ciampo left a comment

Choose a reason for hiding this comment

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

These all affect layout for existing external usage, and I'm assuming we'll need to keep supporting them by default. However, we do not want any of these legacy styles in our internal usage of the component (i.e. in Typography panel).

In this PR, I am proposing a __unstableHasLegacyStyles prop

I'd like to think about how we can possibly switch to the new styles in the future (and potentially remove support the legacy styles) — __unstable* props are definitely useful to help us introduce this kind of changes, but I'd like to have plan for them to not stick around, and therefore either becoming "stable" or going away.

In this specific case, I wonder if we could:

  • add, in this PR, a warning when __unstableHasLegacyStyles === true, mentioning that from a future version of WordPress (eg 5.10) those legacy styles will be removed, and therefore all instances of LineHeightControl will be forced to use the new styles. Consumers of this component will be advised to set __unstableHasLegacyStyles to false and adjust styles accordingly before that happens.
  • when the future version of WordPress mentioned above (e.g. 5.10) gets released, we can remove the __unstableHasLegacyStyles prop from the code and force the new styles on the LineHeightControl component

In Chrome and Firefox it is only a fraction of a pixel so you could ignore it. Safari appears to have a 3px difference in height between the migrated and legacy controls.

Aaron is correct about the discrepancy in Safari. I applied the suggested styles this way:

.block-editor-line-height-control {
	&.has-legacy-styles {
		margin-bottom: 24px;

		// TODO: remove hardcoded classname
		.components-input-control__label {
			line-height: normal;
			padding-bottom: 0;
			margin-bottom: 4px;
		}

		// TODO: remove hardcoded classname
		.components-input-control__container {
			margin-top: 4px;
		}
	}
}

This seems to fix Safari, but re-introduces a difference in Chrome. Those differences seem to be related to differences in the User Agent stylesheets (line height of the label and margin around the input element), and are not easy to iron out across all browsers while also making sure that the new and the legacy version look exactly the same. If we had to compromise and keep some discrepancies in one browser, probably Safari would be my pick given the lower usage.


Finally, a thought — should we look into standardising how *Control components are implemented internally, so that they all build on top of the same base control component? This would automatically standardise line-heights / input margins / etc and solve the problem at the root.

@mirka
Copy link
Member Author

mirka commented Dec 21, 2021

Good catch with the browser discrepancies, thank you!

Speaking of, I recently got a high resolution setup, and it’s now clearly showing me that in Chrome the migrated <input> is rendering in Arial because of user agent styles 😭 (#37555)

not easy to iron out across all browsers while also making sure that the new and the legacy version look exactly the same. If we had to compromise and keep some discrepancies in one browser, probably Safari would be my pick given the lower usage.

Agreed. Also it’d be unwise to continue using UA-dependent values like line-height normal — it perpetuates the problem.

In a new project I would reach for normalize.css but I guess that ship has sailed.

We can expect to surface more cross-browser issues as we continue these component migrations. I think we’ll have to live with the fact that we can’t always replicate the legacy styling perfectly where there were underlying UA inconsistencies to begin with.

should we look into standardising how *Control components are implemented internally, so that they all build on top of the same base control component?

Yes, it was my understanding that we are headed toward that direction.

I'd like to have plan for them to not stick around, and therefore either becoming "stable" or going away.

Great point, I added a deprecation warning.

Copy link
Contributor

@ciampo ciampo left a comment

Choose a reason for hiding this comment

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

it’d be unwise to continue using UA-dependent values like line-height normal — it perpetuates the problem.

💯

In a new project I would reach for normalize.css but I guess that ship has sailed.

I'd love to do so. We could look into it, but I'm afraid that doing so could introduce many regressions.

We can expect to surface more cross-browser issues as we continue these component migrations. I think we’ll have to live with the fact that we can’t always replicate the legacy styling perfectly where there were underlying UA inconsistencies to begin with.

That makes sense. I guess that the best compromise for this PR is to keep the styles as they currently are, and aim at solving the browser discrepancies by refactoring every *Control component to use internally BaseControl and its label.

--

We should probably rebase this PR before giving it a final look and focus on #37164

@mirka mirka added the [Status] In Progress Tracking issues with work in progress label Feb 8, 2022
@mirka mirka force-pushed the migrate/line-height-control-styles branch from 7b0d262 to 9440108 Compare February 10, 2022 23:48
@mirka mirka removed the [Status] In Progress Tracking issues with work in progress label Feb 11, 2022
@mirka
Copy link
Member Author

mirka commented Feb 11, 2022

I’ve updated this PR (added commits) to follow the style deprecation strategy discussed in #38540.

The styling being deprecated is now only the margin-bottom, because:

Existing usage in the Global Styles and block editor Typography Panels have been updated as well.

Comment on lines +109 to +111
const deprecatedStyles = __nextHasNoMarginBottom
? undefined
: { marginBottom: 24 };
Copy link
Member Author

Choose a reason for hiding this comment

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

I hope this is simple and ephemeral enough to put in here as an inline style. The @wordpress/block-editor package itself doesn't really use Emotion yet, and we can avoid a hardcoded classname here if we just do it inline.

@mirka mirka added the Needs Dev Note Requires a developer note for a major WordPress release cycle label Feb 11, 2022
@mirka mirka mentioned this pull request Feb 11, 2022
49 tasks
Copy link
Contributor

@aaronrobertshaw aaronrobertshaw left a comment

Choose a reason for hiding this comment

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

Thanks for your continued efforts on this 👍

I've given this other test across browsers, the storybook, and in the block editor.

✅ Legacy and updated components look and behave similarly in the Storybook
✅ Legacy and updated components look the same across browsers
(Fine in Chrome/FF, close enough in Safari)
✅ The block editor's typography panel layout and appearance has been maintained
❓ The typography panel storybook has new spacing added to it

As noted previously they are some differences between the legacy component and the updated version when viewed in Safari. I agree with Marco that if we must have a discrepancy, then it is best to be in Safari.

I've also left a couple of other minor comments but this should be pretty close.

…vior) (#37164)

* Maintain previous behavior via state reducer

* Add tests

* Add comment about strange reducer behavior

* Fix tests
@mirka mirka merged commit 7a3e37a into trunk Feb 16, 2022
@mirka mirka deleted the migrate/line-height-control-styles branch February 16, 2022 00:24
@github-actions github-actions bot added this to the Gutenberg 12.7 milestone Feb 16, 2022
@cbravobernal cbravobernal changed the title LineHeightControl: Migrate internals to NumberControl (Part 1: Styles) LineHeightControl: Enhance interactions by migrating internals to NumberControl on Style options. Feb 25, 2022
@cbravobernal cbravobernal added [Package] Block editor /packages/block-editor and removed [Package] Components /packages/components labels Feb 26, 2022
@mirka mirka mentioned this pull request Mar 10, 2022
20 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Needs Dev Note Requires a developer note for a major WordPress release cycle [Package] Block editor /packages/block-editor [Type] Enhancement A suggestion for improvement.
Projects
No open projects
Status: Done
Development

Successfully merging this pull request may close these issues.

LineHeightControl: Replace internal implementation with NumberControl
4 participants