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

Enhance the new color picker design #34598

Merged
merged 2 commits into from
Sep 22, 2021

Conversation

jorgefilipecosta
Copy link
Member

@jorgefilipecosta jorgefilipecosta commented Sep 6, 2021

Description

Part of #34284.

Applies the design changes specified by @ciampo in order to try to match what was proposed in the mockups:

  • Adjust the white border on the circle controls to match design (compare storybook with design mockup).
  • The input padding is off, not sure if this is something we need to affect on all inputs or we can just start with the input + slider case.
  • Spacing between slider and input is off.
  • Use the new settings icon from wp/icons.
  • the color format dropdown should be rendered without borders (not sure how we want to handle this at the component level since it should be an optional thing used rarely)
  • Adjust circular handle of slider since it's too big compared to designs

Screenshots

Before After
color-picker-before color-picker-after

@jorgefilipecosta jorgefilipecosta added Needs Design Needs design efforts. [Package] Components /packages/components [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi [Feature] Component System WordPress component system labels Sep 6, 2021
@jasmussen
Copy link
Contributor

I guess #34287 needs to land before I can see this one outside of storybook. This is what I see:

color

Nice, getting there. A few things:

  • The white circle is set to 1.5px border, but the border can't render subpixels so it collapses to 1px. You can use box-shadow instead. Box shadows are removed in Windows high contrast mode, so be sure to combine it with a transparent outline or border, because transparent is made opaque in that mode.
  • The inputs look good. But I wonder if we should be tweaking them here on a per-component basis, rather then fixing them at the source instead. Eventually all inputs should be the same, and the padding/margins should come from the input component itself. The focus style of the input also needs to be 1.5px rather than 2px, so lots of low hanging fruit there.


export const InputWrapper = styled( InputControl )`
${ InputControlContainer } {
padding: 5px 8px;
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 still wrapping my head around .ts files, but when I see bespoke paddings and margins like these it gets me a little worried about code drift. What's the best solution for keeping things the same here? I understand re-used SCSS variables (like the $grid-units we have) isn't possible here. Is it more of a matter of updating the source component used?

Copy link
Contributor

@ciampo ciampo Sep 7, 2021

Choose a reason for hiding this comment

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

After switching to Emotion, we've been using the space util (packages/components/src/ui/utils/space.ts) in combination with some shared configuration (packages/components/src/utils/config-values.js) — we should probably leverage them here as well, instead of these hardcoded values

(also cc'ing @sarayourfriend in case I missed anything)


export const NumberControlWrapper = styled( NumberControl )`
${ InputControlContainer } {
width: 96px;
Copy link
Contributor

Choose a reason for hiding this comment

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

Same concern here about bespoke paddings.

On the width, what options do we have to use flex here so the items are automatically spaced and sized by the container?

Copy link
Contributor

Choose a reason for hiding this comment

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

The NumberControlWrapper is rendered as a child of <Spacer as={ HStack }>, which means that Spacer is effective a flex container, and that props from HStack can be applied to that instance of <Spacer />. NumberControlWrapper can be treated as a flexbox child.

packages/components/src/ui/color-picker/styles.ts Outdated Show resolved Hide resolved
@@ -27,7 +26,7 @@ export const InputWithSlider = ( {
}: InputWithSliderProps ) => {
return (
<Spacer as={ HStack }>
<NumberControl
<NumberControlWrapper
__unstableInputWidth="5em"
Copy link
Contributor

@ciampo ciampo Sep 7, 2021

Choose a reason for hiding this comment

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

I wonder if we can replace the __unstableInputWidth prop with some CSS directly from styles.ts


export const NumberControlWrapper = styled( NumberControl )`
${ InputControlContainer } {
width: 96px;
Copy link
Contributor

Choose a reason for hiding this comment

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

The NumberControlWrapper is rendered as a child of <Spacer as={ HStack }>, which means that Spacer is effective a flex container, and that props from HStack can be applied to that instance of <Spacer />. NumberControlWrapper can be treated as a flexbox child.

@github-actions
Copy link

github-actions bot commented Sep 8, 2021

Size Change: -27 B (0%)

Total Size: 1.06 MB

Filename Size Change
build/components/index.min.js 209 kB -27 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 931 B
build/admin-manifest/index.min.js 1.09 kB
build/annotations/index.min.js 2.7 kB
build/api-fetch/index.min.js 2.19 kB
build/autop/index.min.js 2.08 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.2 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/index.min.js 134 kB
build/block-editor/style-rtl.css 13.9 kB
build/block-editor/style.css 13.8 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 474 B
build/block-library/blocks/button/editor.css 474 B
build/block-library/blocks/button/style-rtl.css 600 B
build/block-library/blocks/button/style.css 600 B
build/block-library/blocks/buttons/editor-rtl.css 315 B
build/block-library/blocks/buttons/editor.css 315 B
build/block-library/blocks/buttons/style-rtl.css 370 B
build/block-library/blocks/buttons/style.css 370 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 131 B
build/block-library/blocks/code/theme.css 131 B
build/block-library/blocks/columns/editor-rtl.css 206 B
build/block-library/blocks/columns/editor.css 205 B
build/block-library/blocks/columns/style-rtl.css 497 B
build/block-library/blocks/columns/style.css 496 B
build/block-library/blocks/cover/editor-rtl.css 666 B
build/block-library/blocks/cover/editor.css 670 B
build/block-library/blocks/cover/style-rtl.css 1.23 kB
build/block-library/blocks/cover/style.css 1.23 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 983 B
build/block-library/blocks/gallery/editor.css 988 B
build/block-library/blocks/gallery/style-rtl.css 1.6 kB
build/block-library/blocks/gallery/style.css 1.59 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/home-link/style-rtl.css 247 B
build/block-library/blocks/home-link/style.css 247 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 728 B
build/block-library/blocks/image/editor.css 728 B
build/block-library/blocks/image/style-rtl.css 482 B
build/block-library/blocks/image/style.css 487 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 488 B
build/block-library/blocks/media-text/style.css 485 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 568 B
build/block-library/blocks/navigation-link/editor.css 570 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 300 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/style-rtl.css 195 B
build/block-library/blocks/navigation-submenu/style.css 195 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.72 kB
build/block-library/blocks/navigation/editor.css 1.72 kB
build/block-library/blocks/navigation/style-rtl.css 1.49 kB
build/block-library/blocks/navigation/style.css 1.49 kB
build/block-library/blocks/navigation/view.min.js 2.74 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 198 B
build/block-library/blocks/page-list/style.css 198 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 B
build/block-library/blocks/post-author/editor-rtl.css 210 B
build/block-library/blocks/post-author/editor.css 210 B
build/block-library/blocks/post-author/style-rtl.css 182 B
build/block-library/blocks/post-author/style.css 181 B
build/block-library/blocks/post-comments-form/style-rtl.css 140 B
build/block-library/blocks/post-comments-form/style.css 140 B
build/block-library/blocks/post-comments/style-rtl.css 360 B
build/block-library/blocks/post-comments/style.css 359 B
build/block-library/blocks/post-content/editor-rtl.css 138 B
build/block-library/blocks/post-content/editor.css 138 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 398 B
build/block-library/blocks/post-featured-image/editor.css 398 B
build/block-library/blocks/post-featured-image/style-rtl.css 143 B
build/block-library/blocks/post-featured-image/style.css 143 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 378 B
build/block-library/blocks/post-template/style.css 379 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 60 B
build/block-library/blocks/post-title/style.css 60 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 378 B
build/block-library/blocks/pullquote/style.css 378 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 262 B
build/block-library/blocks/query-pagination/editor.css 255 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query-title/editor-rtl.css 85 B
build/block-library/blocks/query-title/editor.css 85 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 220 B
build/block-library/blocks/quote/theme.css 222 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 374 B
build/block-library/blocks/search/style.css 375 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 250 B
build/block-library/blocks/separator/style.css 250 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 462 B
build/block-library/blocks/site-logo/editor.css 464 B
build/block-library/blocks/site-logo/style-rtl.css 153 B
build/block-library/blocks/site-logo/style.css 153 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 165 B
build/block-library/blocks/social-link/editor.css 165 B
build/block-library/blocks/social-links/editor-rtl.css 812 B
build/block-library/blocks/social-links/editor.css 811 B
build/block-library/blocks/social-links/style-rtl.css 1.3 kB
build/block-library/blocks/social-links/style.css 1.3 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 636 B
build/block-library/blocks/template-part/editor.css 635 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/term-description/editor-rtl.css 90 B
build/block-library/blocks/term-description/editor.css 90 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 853 B
build/block-library/common.css 849 B
build/block-library/editor-rtl.css 9.76 kB
build/block-library/editor.css 9.75 kB
build/block-library/index.min.js 147 kB
build/block-library/reset-rtl.css 527 B
build/block-library/reset.css 527 B
build/block-library/style-rtl.css 10.3 kB
build/block-library/style.css 10.3 kB
build/block-library/theme-rtl.css 665 B
build/block-library/theme.css 669 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 47 kB
build/components/style-rtl.css 15.9 kB
build/components/style.css 15.9 kB
build/compose/index.min.js 10.3 kB
build/core-data/index.min.js 12.3 kB
build/customize-widgets/index.min.js 11.1 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 614 B
build/data/index.min.js 7.1 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 428 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.45 kB
build/edit-navigation/index.min.js 15.5 kB
build/edit-navigation/style-rtl.css 3.69 kB
build/edit-navigation/style.css 3.69 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-post/index.min.js 28.9 kB
build/edit-post/style-rtl.css 7.18 kB
build/edit-post/style.css 7.17 kB
build/edit-site/index.min.js 27.4 kB
build/edit-site/style-rtl.css 5.21 kB
build/edit-site/style.css 5.21 kB
build/edit-widgets/index.min.js 16.1 kB
build/edit-widgets/style-rtl.css 4.09 kB
build/edit-widgets/style.css 4.09 kB
build/editor/index.min.js 37.4 kB
build/editor/style-rtl.css 3.76 kB
build/editor/style.css 3.75 kB
build/element/index.min.js 3.17 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 5.34 kB
build/format-library/style-rtl.css 668 B
build/format-library/style.css 670 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.6 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.72 kB
build/keycodes/index.min.js 1.3 kB
build/list-reusable-blocks/index.min.js 1.85 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.88 kB
build/notices/index.min.js 845 B
build/nux/index.min.js 2.03 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.83 kB
build/primitives/index.min.js 921 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.63 kB
build/reusable-blocks/index.min.js 2.28 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.6 kB
build/server-side-render/index.min.js 1.5 kB
build/shortcode/index.min.js 1.48 kB
build/token-list/index.min.js 562 B
build/url/index.min.js 1.74 kB
build/viewport/index.min.js 1.02 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.11 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@jorgefilipecosta jorgefilipecosta force-pushed the update/new-color-picker-design branch 2 times, most recently from d847b80 to 65de35a Compare September 9, 2021 14:20
@jorgefilipecosta
Copy link
Member Author

Hi @jasmussen, @ciampo,

Thank you a lot for the reviews, I tried to incorporate your feedback. Mainly by avoiding hardcoded values and reusing shared values and utils (that I was not aware of and really simplify things).
I also tried to make general changes and avoid things specific to this component.
For example, a general change I did with success was the slider and it seems to work for all sliders.

There is a missing general change that I tried and failed. It was to change the input height which should be 40 by default and currently is 30. But that general change did not work well and broke the design in other parts already in production:
image

Although it seems we can easily change the height because we have constant for that in practice things don't work parts of the UI stop being centered etc (we should take this opportunity to improve our code and make sure in the future we can easily change the constant). Changing the input field height also probably requires changing things like button height otherwise things don't look nice side by side. So I guess that we should do that task in a different PR focused on it. Where we can properly review it and make sure we don't break any of the existing UI.

So, for now, I keep a style specifically for the color picker that sets the inputs to 40 so the color picker already uses the new design and after making the change general we can delete this one-line style.

Feel free to have a new look at this PR and let me know what other improvements we can do. Thank you in advance for any additional insights.

@jasmussen
Copy link
Contributor

It seems like input fields might be the next thing we handle, so we don't have to add too many edgecases like these. 👍 👍

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.

When playing around in Storybook, I noticed how both "thumbs" (the circular dots used to pick a color in the "2d color square" and on the "saturation track") are not perfectly centre-aligned with their white border, and slightly wiggle when the other thumb is being dragged around. These issues are likely caused by sub-pixel rounding/rendering.

color-picker-sub-pixel.mp4

Apart from that, it'd be great to get @mtias and @pablohoneyhoney to take a look at this before merging.

Comment on lines +43 to +47
// All inputs should be the same height so this should be changed at the component level.
// That involves changing heights of multiple input types probably buttons too etc.
// So until that is done we are already using the new height on the color picker so it matches the mockups.
Copy link
Contributor

Choose a reason for hiding this comment

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

Could you please open a new issue for this task, and add it to tracking issue #34284?

@@ -38,7 +38,12 @@ export const HexInput = ( { color, onChange, enableAlpha }: HexInputProps ) => {
<InputControl
__unstableInputWidth="8em"
Copy link
Contributor

Choose a reason for hiding this comment

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

I know this is not caused by this PR, but I wonder if we could refactor away from the __unstableInputWidth property in this case as well?

(cc @sarayourfriend in case there's a specific reason why we're using this prop)

Copy link
Contributor

Choose a reason for hiding this comment

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

I don't have any insight into this prop, sorry!

Copy link
Contributor

Choose a reason for hiding this comment

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

That's fine! Thank you for replying anyway :)

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 removed the usage of __unstableInputWidth 👍

@mtias
Copy link
Member

mtias commented Sep 14, 2021

The sliders look mispositioned, not sure if it's an artefact of storybook alone:

image

The toggle button is a bit too large:

image

Most noticeable in toggled state:

Current Design
image image

The spacing between input and range control is also too tight:

Current Design
image image

There's something going on in the bottom edge of the picker where it resets values in rgb to 255. Not sure if it's just an issue with how the storybook is setup.

Screeny.Video.14.Sep.2021.at.15.32.46.mov

@mtias
Copy link
Member

mtias commented Sep 14, 2021

Expanding on the video above, when the reset happens the opacity slider renders like this:

image

@karmatosed karmatosed added Needs Design Feedback Needs general design feedback. and removed Needs Design Needs design efforts. labels Sep 17, 2021
@jorgefilipecosta
Copy link
Member Author

jorgefilipecosta commented Sep 20, 2021

When playing around in Storybook, I noticed how both "thumbs" (the circular dots used to pick a color in the "2d color square" and on the "saturation track") are not perfectly centre-aligned with their white border, and slightly wiggle when the other thumb is being dragged around. These issues are likely caused by sub-pixel rounding/rendering.

color-picker-sub-pixel.mp4
Apart from that, it'd be great to get @mtias and @pablohoneyhoney to take a look at this before merging.

Hi @ciampo,
I spend some time trying to debug this issue. Initially, I thought it may be caused by non-unitary borders and box shadows but even with unitary borders it still happens. This seems to be an issue with the chrome render.
I tested on firefox and safari and the issue does not happen there.
Firefox:
image

Safari:
image

The issue on chrome does not affects just our code even the react colorful samples are affected https://codesandbox.io/s/react-colorful-customization-demo-mq85z?file=/src/styles.css:
image

@jorgefilipecosta jorgefilipecosta force-pushed the update/new-color-picker-design branch 2 times, most recently from 2943d5a to be14755 Compare September 20, 2021 20:00
@mtias
Copy link
Member

mtias commented Sep 21, 2021

Excellent. Just a few lingering things:

  • Let's use a 4px height for the range slider so the border radius can be rendered. (Also 9999px seems excessive?)
  • There's a small jump when toggling the advanced controls.

${ inputHeightStyle }
`;

export const DetailsControlButton = styled( Button )`
Copy link
Contributor

Choose a reason for hiding this comment

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

It's a bit unfortunate that this is not a button that can be shown properly with just props. Why do we need to tweak instead of relying on composition of uncustomized Button (is the isSmall prop not enough?)

Copy link
Member Author

Choose a reason for hiding this comment

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

The isSmall prop on buttons with just an icon creates a 36-pixel width per 24 pixels height. Here we want a 24x24 pixels button.

Copy link
Contributor

@youknowriad youknowriad Sep 21, 2021

Choose a reason for hiding this comment

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

The isSmall prop on buttons with just an icon creates a 36-pixel width per 24 pixels height. Here we want a 24x24 pixels button.

Do you think we should fix it in the button's styles instead?

	&.is-small {
		height: 24px;
		line-height: 22px;
		padding: 0 8px;
		font-size: 11px;

		&.has-icon:not(.has-text) {
			padding: 0 8px;
			width: 24px;
		}
	}

According to this style from the button's styles, it's meant to be 24px maybe there's bug?

Copy link
Member Author

Choose a reason for hiding this comment

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

Good point, I will try to understand if it is a bug or not that the button appears with 36px, but the padding and other styles suggest it is intentional.

@mtias
Copy link
Member

mtias commented Sep 21, 2021

A couple more, let's reconcile these two tooltips:

image

image

The border radius is correct on the first one, but we should use the darker version not the lighter gray.

`;

export const ColorHexInputControl = styled( InputControl )`
width: 8em;
Copy link
Contributor

Choose a reason for hiding this comment

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

I guess I have similar questions for all the customized lower level components: InputControl, SelectControl, NumberControl... All of these get specific styles here. While in some cases it's fine, I do wonder whether our components don't compose well enough.

In other words, if we struggle to use the base components ourselves to build higher-level ones, it's most likely that the same struggles will exist for folks trying to use the components in their apps (or other wordpress packages like block-editor, edit-post...)

Copy link
Contributor

@youknowriad youknowriad left a comment

Choose a reason for hiding this comment

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

This is looking good to me, I do worry a bit about all the specific customizations but this is not something new, just wondering if we could improve the situation.

@ciampo
Copy link
Contributor

ciampo commented Sep 21, 2021

I spend some time trying to debug this issue. Initially, I thought it may be caused by non-unitary borders and box shadows but even with unitary borders it still happens. This seems to be an issue with the chrome render.

This is interesting — I experimented with changing the border-width from CONFIG.borderWidthFocus (which is 1.5px) to 2px on the pointer and that seemed to fix the issue for me, also in Chrome.

I wonder if we should change CONFIG.borderWidthFocus to be 2px, also in light of similar conversations about sub-pixel rendering glitches

@pablohoneyhoney
Copy link

pablohoneyhoney commented Sep 21, 2021

Loving how this is progressing. A few details I'm seeing in Safari.

Here’s a shot re: shadows.

Screen Shot 2021-09-21 at 1 12 34 PM

And how the handles move far from what was expected. Top is what I see in SB, and bottom what was in the Figma.

Screen Shot 2021-09-21 at 5 34 23 PM

There’s a strange jump when clicking on the color handle.

picker

Fields in the Figma had #BBBBBB borders, and the slider had a #CCCCCC

What I see in SB.

Screen Shot 2021-09-21 at 6 22 37 PM

What was in Figma.

Screen Shot 2021-09-21 at 6 22 21 PM

For some reason, the focus states and tooltips aren’t visible for me in Safari.

picker2

The desired style for focus would like:

image

Comment on lines +94 to +95
border: ${ CONFIG.borderWidthFocus } solid rgba( 255, 255, 255, 0 );
box-shadow: inset 0px 0px 0px ${ CONFIG.borderWidthFocus } #ffffff;
Copy link
Contributor

Choose a reason for hiding this comment

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

We should probably use the box-shadow technique for borders, as suggested by @jasmussen in #34712 (comment)

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'm not sure if this technique works for this case given that we need border and box-shadow at the same time.

Copy link
Contributor

Choose a reason for hiding this comment

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

You can stack box shadows, that's what I did in 2997a2f.

@jorgefilipecosta
Copy link
Member Author

And how the handles move far from what was expected. Top is what I see in SB, and bottom what was in the Figma.

Screen Shot 2021-09-21 at 5 34 23 PM

I made an update to make the circles not as far from the bar. Let me know if there are other improvements we should do.

There’s a strange jump when clicking on the color handle.

picker

That was a complex issue. I spend a considerable time debugging the component but it turns out the issue was not in the component. We had two pickers separated by a text displaying the color code in a container that made the three elements equally separated. It turns out moving the cursor changed the color code possibly changing the width of the text and that then repositioned the picker. I fixed the story to avoid these jumps.

Fields in the Figma had #BBBBBB borders, and the slider had a #CCCCCC

What I see in SB.

Screen Shot 2021-09-21 at 6 22 37 PM

What was in Figma.

Screen Shot 2021-09-21 at 6 22 21 PM

Yes, the fields need to have a redesign that affects multiple fields and affects existing components. I think we should have an issue focused on the fields where we change its dimensions borders etc.

For some reason, the focus states and tooltips aren’t visible for me in Safari.

picker2

The desired style for focus would like:

image

Yes, I was able to reproduce the issue in Safari. And the current focus style also does not matches the design. Let's try to have an issue focused on the range control where we address these issues given that the component is already in production.

Co-authored-by: Marco Ciampini <marco.ciampo@gmail.com> (+1 squashed commit)
Squashed commits:
[eeb7fa834e] Implement new color picker design
@jorgefilipecosta jorgefilipecosta merged commit bf53422 into trunk Sep 22, 2021
@jorgefilipecosta jorgefilipecosta deleted the update/new-color-picker-design branch September 22, 2021 11:19
@github-actions github-actions bot added this to the Gutenberg 11.6 milestone Sep 22, 2021
@jasmussen
Copy link
Contributor

Will you follow up on the border to box-shadow? I'm happy to help here.

@jorgefilipecosta
Copy link
Member Author

Merging this PR so we can continue the work, the non addressed issues will be addressed in followups:

  • Redesign the input fields taking into consideration the new border color and height (removing specific height from this component).
  • Improve the RangeControl making the focus work on safari and implementing the new focus design.
  • Address the glitch with circle borders/shadowns on chrome.
  • Replace the current color component with this one.

If there is any follow-up task that I'm missing just let me know.

@jorgefilipecosta
Copy link
Member Author

@jasmussen any help there would be appreciated :)

@jorgefilipecosta
Copy link
Member Author

jorgefilipecosta commented Sep 22, 2021

I spend some time trying to debug this issue. Initially, I thought it may be caused by non-unitary borders and box shadows but even with unitary borders it still happens. This seems to be an issue with the chrome render.

This is interesting — I experimented with changing the border-width from CONFIG.borderWidthFocus (which is 1.5px) to 2px on the pointer and that seemed to fix the issue for me, also in Chrome.

Hi @ciampo,
I did exactly the same experience and on my tests, the issue happens with 2px as the border.
image

Maybe it depends on the chrome version?

@jasmussen
Copy link
Contributor

Chrome rounds up subpixels to the nearest whole when applied to border, but not for box-shadow. There's a similar fun issue with border radii, where a 1.5px border radius renders as 1px: https://codepen.io/joen/pen/NWjLgJa?editors=1100

@ciampo ciampo mentioned this pull request Sep 24, 2021
31 tasks
@ciampo
Copy link
Contributor

ciampo commented Sep 24, 2021

Merging this PR so we can continue the work, the non addressed issues will be addressed in followups:

  • Redesign the input fields taking into consideration the new border color and height (removing specific height from this component).
  • Improve the RangeControl making the focus work on safari and implementing the new focus design.
  • Address the glitch with circle borders/shadowns on chrome.
  • Replace the current color component with this one.

If there is any follow-up task that I'm missing just let me know.

@jorgefilipecosta I've update tracking issue #34284 with the follow-up tasks you suggested. Let's use that issue to coordinate and update the status of the new color picker work

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 [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi Needs Design Feedback Needs general design feedback. [Package] Components /packages/components
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants