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

Polish color indicator and itemgroup. #37028

Merged
merged 4 commits into from
Dec 2, 2021
Merged

Polish color indicator and itemgroup. #37028

merged 4 commits into from
Dec 2, 2021

Conversation

jasmussen
Copy link
Contributor

Description

This PR tweaks some of the metrics of the color swatch indicator to match those of the Global Styles design (#34574), which look like this in trunk:
Screenshot 2021-12-01 at 11 31 49

The circle is a bit big, 24px, should be 20, and each row in the itemgroup is a bit big. This PR polishes a bit to this:

Screenshot 2021-12-01 at 12 00 33

20x20px circles, about 40px height itemgroup rows. Note also how the gray border at the bottom goes edge to edge. There used to be a barely perceptible diagonal in the corners:

Screenshot 2021-12-01 at 11 49 31

This was due to a transparent 1px border, adding the joint in the corner.

Note that there's some padding math in the itemgroup component that appears there to adhere to a component size system, so I didn't touch it. This actually makes the itemgroup rows still e a bit too tall (42.38px rather than 40px). I'm curious if there's a better way to solve this:

Screenshot 2021-12-01 at 12 06 25

Also note that this PR completely moves the color indicator styles from global styles into the color circle component itself. As far as I can tell that component is used in the native code, and in global styles. But in both cases it should arguably be identical. I'd appreciate if someone familiar with the RN stuff could give this a quick sanity check.

How has this been tested?

Test the color pickers in global styles.

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

@jasmussen jasmussen added [Package] Components /packages/components [Feature] Component System WordPress component system labels Dec 1, 2021
@jasmussen jasmussen self-assigned this Dec 1, 2021
@jasmussen
Copy link
Contributor Author

@sarayourfriend I think you've touched this code at some point. I know you're busy elsewhere so this is just an FYI, don't feel like you have to respond.

@github-actions
Copy link

github-actions bot commented Dec 1, 2021

Size Change: +181 B (0%)

Total Size: 1.1 MB

Filename Size Change
build/block-editor/style-rtl.css 14.4 kB +6 B (0%)
build/block-editor/style.css 14.4 kB +7 B (0%)
build/block-library/style-rtl.css 10.7 kB +137 B (+1%)
build/block-library/style.css 10.7 kB +139 B (+1%)
build/components/style-rtl.css 15.4 kB -17 B (0%)
build/components/style.css 15.4 kB -17 B (0%)
build/edit-site/style-rtl.css 6.58 kB -37 B (-1%)
build/edit-site/style.css 6.58 kB -37 B (-1%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.21 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/index.min.js 139 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 58 B
build/block-library/blocks/audio/editor.css 58 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 470 B
build/block-library/blocks/button/editor.css 470 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 291 B
build/block-library/blocks/buttons/editor.css 291 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 134 B
build/block-library/blocks/code/theme.css 134 B
build/block-library/blocks/columns/editor-rtl.css 206 B
build/block-library/blocks/columns/editor.css 205 B
build/block-library/blocks/columns/style-rtl.css 503 B
build/block-library/blocks/columns/style.css 502 B
build/block-library/blocks/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/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB
build/block-library/blocks/cover/style.css 1.22 kB
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 976 B
build/block-library/blocks/gallery/editor.css 980 B
build/block-library/blocks/gallery/style-rtl.css 1.63 kB
build/block-library/blocks/gallery/style.css 1.62 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 507 B
build/block-library/blocks/image/style.css 511 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 493 B
build/block-library/blocks/media-text/style.css 490 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 649 B
build/block-library/blocks/navigation-link/editor.css 650 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.89 kB
build/block-library/blocks/navigation/editor.css 1.89 kB
build/block-library/blocks/navigation/style-rtl.css 1.68 kB
build/block-library/blocks/navigation/style.css 1.67 kB
build/block-library/blocks/navigation/view.min.js 2.74 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 172 B
build/block-library/blocks/page-list/style.css 172 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/style-rtl.css 444 B
build/block-library/blocks/post-comments-form/style.css 444 B
build/block-library/blocks/post-comments/style-rtl.css 492 B
build/block-library/blocks/post-comments/style.css 493 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 391 B
build/block-library/blocks/post-template/style.css 392 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 378 B
build/block-library/blocks/pullquote/style.css 378 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 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 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 245 B
build/block-library/blocks/separator/style.css 245 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 772 B
build/block-library/blocks/site-logo/editor.css 772 B
build/block-library/blocks/site-logo/style-rtl.css 165 B
build/block-library/blocks/site-logo/style.css 165 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 670 B
build/block-library/blocks/social-links/editor.css 669 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB
build/block-library/blocks/social-links/style.css 1.32 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 569 B
build/block-library/blocks/video/editor.css 570 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 857 B
build/block-library/common.css 856 B
build/block-library/editor-rtl.css 9.8 kB
build/block-library/editor.css 9.81 kB
build/block-library/index.min.js 162 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/theme-rtl.css 672 B
build/block-library/theme.css 677 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.3 kB
build/components/index.min.js 214 kB
build/compose/index.min.js 10.9 kB
build/core-data/index.min.js 13.2 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.47 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-post/index.min.js 29.6 kB
build/edit-post/style-rtl.css 7.1 kB
build/edit-post/style.css 7.09 kB
build/edit-site/index.min.js 34.2 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.18 kB
build/edit-widgets/style.css 4.18 kB
build/editor/index.min.js 37.8 kB
build/editor/style-rtl.css 3.78 kB
build/editor/style.css 3.77 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.57 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.71 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.72 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.84 kB
build/primitives/index.min.js 924 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.57 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@youknowriad
Copy link
Contributor

I like that this tried to improve the root component :). This one might be used though in unexpected places (I think the title of the PanelColorGradientSettings component. (which might still be used in block sidebars). Does it still look ok there?

@@ -10,7 +10,7 @@ import { CONFIG, COLORS } from '../utils';

export const unstyledButton = css`
appearance: none;
border: 1px solid transparent;
border: 0;
Copy link
Contributor

Choose a reason for hiding this comment

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

I wonder why this was using a transparent border

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I wonder the same. It could be related to vertical height/metrics. In any case removing it allowed the border to go edge to edge instead of stopping in a triangular joint.

Copy link
Contributor

@ciampo ciampo Dec 1, 2021

Choose a reason for hiding this comment

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

This change currently breaks focus styles (see the &:focus rule a few lines below).

Leaving a transparent border allows us to only modify the border-color when the component receives focus, therefore avoiding an otherwise annoying "jump" that would be caused by adding a border

@jasmussen
Copy link
Contributor Author

This one might be used though in unexpected places (I think the title of the PanelColorGradientSettings component. (which might still be used in block sidebars). Does it still look ok there?

Let me know if I'm looiking in the right place, but gradients look good to me:
color

When I investigated which component to edit, I found these:

Screenshot 2021-12-01 at 13 02 56

ColorIndicator, as far as my searching goes, is the only component that outputs the component-color-indicator classname. So yes, it appears to be used in some native stuff, but I'm not sure otherwise.

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.

Hey @jasmussen , thank you for working on these changes!

For future changes to the @wordpress/components package, it would be better if you could open one PR per component (for example, in this PR we're introducing changes to both ColorIndicator and ItemGroup).

Regarding ColorIndicator in particular, some time ago we planned to explore creating a new ColorSwatch component, which would replace both ColorIndicator and CircularOptionPicker (more details in the ColorSwatch section of #35093), but unfortunately we currently lack the capacity to work on that.

When I investigated which component to edit, I found these:

We should check each instance of ColorIndicator and see if we can remove any style overrides (similarly to what we've done in this PR in packages/edit-site/src/components/global-styles/style.scss) or if we need to add any fixes after the changes in the component.

Finally, would you mind adding 2 CHANGELOG entries for ColorIndicator and ItemGroup ?

Thank you!

Comment on lines -8 to -10
& + & {
margin-left: 0.5rem;
}
Copy link
Contributor

Choose a reason for hiding this comment

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

This change could cause some layout glitches in other parts of Gutenberg

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I haven't found any places where this rule would apply. As is, I removed it because it appears to be dead CSS.

Copy link
Contributor

Choose a reason for hiding this comment

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

I'm not sure it's dead CSS — this rule would potentially affect those situations where 2 or more ColorIndicators are rendered next to each other (at least in DOM order).

I scanned the codebase and found a few places that we should check to make sure we didn't introduce a layout regressions:

  • PanelColorGradientSettings
  • Global Styles' Palette (although this may be already tackled by the changes to packages/edit-site/src/components/global-styles/style.scss in this same PR)
  • Global Styles' Preview (although this may be OK because of the VStack element wrapping around them)

@@ -10,7 +10,7 @@ import { CONFIG, COLORS } from '../utils';

export const unstyledButton = css`
appearance: none;
border: 1px solid transparent;
border: 0;
Copy link
Contributor

@ciampo ciampo Dec 1, 2021

Choose a reason for hiding this comment

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

This change currently breaks focus styles (see the &:focus rule a few lines below).

Leaving a transparent border allows us to only modify the border-color when the component receives focus, therefore avoiding an otherwise annoying "jump" that would be caused by adding a border

@geriux
Copy link
Member

geriux commented Dec 1, 2021

All good from the mobile editor side 👍 It uses its native variant for the component and styles.

@jasmussen
Copy link
Contributor Author

Leaving a transparent border makes allows us to apply a border-color change for focus styles, without having the component change its outer dimensions.

I'll revisit this piece and per your feedback to keep component PRs separate, probably restore that rule so this only touches the color indicator. Thank you!

@jasmussen
Copy link
Contributor Author

Thanks again for the feedback. I went ahead and reverted the ItemGroup changes (I'll revisit separately), and added a changelog entry for the colorindicator. Let me know if that looks good.

@youknowriad
Copy link
Contributor

Screen Shot 2021-12-01 at 2 47 44 PM

This is where this PR falls short, we can update that panel title though to the new styles of the indicator though.

@jasmussen
Copy link
Contributor Author

Oh that's excellent, thanks for bringing my attention to that. I think I can polish that up! That part needed a little love anyway, don't you think?
Screenshot 2021-12-01 at 14 53 27

I think with the right positioning or margin, that little circle will be better.

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.

Thanks again for the feedback. I went ahead and reverted the ItemGroup changes (I'll revisit separately), and added a changelog entry for the colorindicator. Let me know if that looks good.

Speaking of which, I think that there are a few changes introduced in this PR that can definitely cause layout regressions (as Riad already pointed out).

Apart from this conversation about the sibling selector, the fact that we're changing the height and we're removing the margin-left will definitely cause layout some layout regressions (as Riad already pointed out).

We should look for every instance of this component (I like to search for both the ColorIndicator and the component-color-indicator strings) and make the necessary tweaks, mostly:

  • add a margin-left when needed
  • tweak vertical alignment and margin top/bottom (due to the change in height)

I know it can be quite a tedious task, apologies in advance! But I feel like these are definitely some good improvements — It's good that we're moving away from having a component that sets its own margin (which for me is an antipattern)

Comment on lines -8 to -10
& + & {
margin-left: 0.5rem;
}
Copy link
Contributor

Choose a reason for hiding this comment

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

I'm not sure it's dead CSS — this rule would potentially affect those situations where 2 or more ColorIndicators are rendered next to each other (at least in DOM order).

I scanned the codebase and found a few places that we should check to make sure we didn't introduce a layout regressions:

  • PanelColorGradientSettings
  • Global Styles' Palette (although this may be already tackled by the changes to packages/edit-site/src/components/global-styles/style.scss in this same PR)
  • Global Styles' Preview (although this may be OK because of the VStack element wrapping around them)

@jasmussen
Copy link
Contributor Author

jasmussen commented Dec 2, 2021

Alright, I rebased and pushed tweaks based on your feedback. The global styles interface still looks like this:
Screenshot 2021-12-02 at 12 07 55

Now the dot in the collapsed panel looks like this:
Screenshot 2021-12-02 at 12 07 03

I ended up restoring the left margin, as it did appear to be used for the color indicator inside the collapsed panel. But the sibling selector still appears unnecessary. Here's the pertinent bit:

 .component-color-indicator {
	...
	margin-left: 0.8rem;
	...
	& + & {
		margin-left: 0.5rem;
	}
}

Those margins should both be the same. So I just kept the simple margin and changed it to use the grid-units.

One thing to consider is to not let the age of this component hold us back from cleaning things up. In my digging I found that it appears to have been used for color swatches in #7924. But those now appear to use the circular-option-picker component instead. I also found reference to the component being used in the inline color UI: #16014. But as far as I can tell, that component isn't even used at all anymore, am I right in that?

Screenshot 2021-12-02 at 12 00 32

The inline color picker looks like this now:
Screenshot 2021-12-02 at 11 59 44

That's the circular option picker component in use there as well.

What do you think?

@youknowriad
Copy link
Contributor

I think this all makes sense but for me if we can, we should remove the margin as it's not the responsibility of a component to add margin to position itself. It can be used in a lot of variety of places and a margin is specific to one use-case and should move to that place instead.

@ciampo
Copy link
Contributor

ciampo commented Dec 2, 2021

I ended up restoring the left margin, as it did appear to be used for the color indicator inside the collapsed panel. But the sibling selector still appears unnecessary
[...]
Now the dot in the collapsed panel looks like this:

This sounds sensibile, thank you! I definitely trust your judgement when it comes to polishing the UI — if you're happy with the way it looks, then it's good for me too!

But as far as I can tell, that component isn't even used at all anymore, am I right in that?

I'm not sure about InlineColorUI — since it is a default export, it means that the component itself could be renamed when imported. But still, it looks like InlineColorUI internally renders a ColorPalette, which internally renders a CircularOptionPicker (as you also confirmed).

One thing to consider is to not let the age of this component hold us back from cleaning things up

Absolutely! I hope my comments are not being seen as too much "holding back" — I am just trying to make sure that we don't introduce breaking changes and layout regressions. I would also like very much to, for example, remove those margins (I believe that a component should never set an outer margin on itself), but unfortunately these components have been around for a while and it's not easy to introduce breaking changes with the current state of Gutenberg and how packages are versioned / released.

Edit: I agree with @youknowriad's comment — I think that the right solution would be to remove the margin rule from the ColorIndicator, and add it where it makes sense in the places where ColorIndicator is used.

As I mentioned before, we did have a roadmap for the changes that we wanted to apply to Color-related components, but unfortunately the components squad currently has very limited resources and no time to work on that. The fact that we decided to have the Global Styles sidebar in the upcoming WordPress release also shifted our focus on other lines of work, and therefore we didn't manage to make enough progress on this front.

I'd love it if we could get some collaboration of moving the work on color components forward — and working on a new ColorSwatch component would be one of the first tasks. It would replace (clean up!) both ColorIndicator and CircularOptionPicker, and then we could work our way up in refactoring/improving higher-level components (like palettes, gradient pickers...)

@youknowriad
Copy link
Contributor

I think some small styles "breakage" is fine if we go into the right direction. That margin there is especially obvious to me that it shouldn't be part of the component and if there's a breakage because of that (outside Gutenberg core since we'll be fixing all of that), I think it's small enough to be ok.

@jasmussen
Copy link
Contributor Author

Thanks all, I'll take another look at the margin and see if I can fix the case where you have both text and background colors defined, and how that shows in the collapsed panel. That seemed to be the primary place that margin was used.

@jasmussen
Copy link
Contributor Author

Okay, try the last one, it uses gap instead of margin:

Screenshot 2021-12-02 at 13 52 27

@@ -7,6 +7,7 @@
.block-editor-panel-color-gradient-settings {
.block-editor-panel-color-gradient-settings__panel-title {
display: flex;
gap: $grid-unit-15;
Copy link
Contributor

Choose a reason for hiding this comment

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

👍

@youknowriad
Copy link
Contributor

The circles do look too small to me on that panel thing but I guess it's just taste :)

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.

Thank you @jasmussen for polishing the ColorIndicator! 🚀

@jasmussen
Copy link
Contributor Author

Thanks both. I'll keep an eye on the php unit test update, rebase, and land this.

Regarding the small color dots, we could make them stack horizontally like the GS presets.

@youknowriad
Copy link
Contributor

Ignore the php unit failure for now, it's a bug introduced in trac/core, they should be working on it.

@jasmussen
Copy link
Contributor Author

Alright, I've got passing unit test, PHP tests are failing temporarily. So I'll ignore those for now. Thanks again folks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Component System WordPress component system [Package] Components /packages/components
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants