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

Try generating random color palettes #40988

Merged
merged 4 commits into from
Nov 14, 2022
Merged

Conversation

vcanales
Copy link
Member

This experiment shows a method in which random color palettes may be
generated by utilizing hue rotations. For demonstration purposes, I've
used the Cubehelix color scheme utilities within chroma-js, which allow easy access to hue rotation functionality.

Hue rotation consists in rotating the hue wheel — such as the one you
might see in a color picker — by a determined amount of degrees, each turn
generating a new color.

This experiment highlights the need for themes to explicitly support
style randomization, as well as the need to incorporate a way to define
a color's role within a palette as a way of avoiding getting, for
example, palettes where background and foreground don't contrast,
rendering text illegible.

Demo

Kapture 2022-05-11 at 01 46 50

Next things to try in this PR

  • Add a role definition for colors or, at least, a way to flag that they should contrast.
  • Custom color scales, defining start and end colors.

@vcanales vcanales added the [Type] Experimental Experimental feature or API. label May 11, 2022
@vcanales vcanales self-assigned this May 11, 2022
@github-actions
Copy link

github-actions bot commented May 11, 2022

Size Change: +2.86 kB (0%)

Total Size: 1.29 MB

Filename Size Change
build/edit-site/index.min.js 61.1 kB +2.86 kB (+5%) 🔍
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 982 B
build/annotations/index.min.js 2.76 kB
build/api-fetch/index.min.js 2.26 kB
build/autop/index.min.js 2.14 kB
build/blob/index.min.js 475 B
build/block-directory/index.min.js 7.09 kB
build/block-directory/style-rtl.css 990 B
build/block-directory/style.css 991 B
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/index.min.js 174 kB
build/block-editor/style-rtl.css 15.9 kB
build/block-editor/style.css 15.9 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 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 126 B
build/block-library/blocks/audio/theme.css 126 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 84 B
build/block-library/blocks/avatar/style.css 84 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 482 B
build/block-library/blocks/button/editor.css 482 B
build/block-library/blocks/button/style-rtl.css 532 B
build/block-library/blocks/button/style.css 532 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 100 B
build/block-library/blocks/categories/style.css 100 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 612 B
build/block-library/blocks/cover/editor.css 613 B
build/block-library/blocks/cover/style-rtl.css 1.57 kB
build/block-library/blocks/cover/style.css 1.55 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 126 B
build/block-library/blocks/embed/theme.css 126 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 253 B
build/block-library/blocks/file/style.css 254 B
build/block-library/blocks/file/view.min.js 346 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 948 B
build/block-library/blocks/gallery/editor.css 950 B
build/block-library/blocks/gallery/style-rtl.css 1.53 kB
build/block-library/blocks/gallery/style.css 1.53 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 394 B
build/block-library/blocks/group/editor.css 394 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 327 B
build/block-library/blocks/html/editor.css 329 B
build/block-library/blocks/image/editor-rtl.css 880 B
build/block-library/blocks/image/editor.css 880 B
build/block-library/blocks/image/style-rtl.css 627 B
build/block-library/blocks/image/style.css 630 B
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 B
build/block-library/blocks/latest-comments/style-rtl.css 298 B
build/block-library/blocks/latest-comments/style.css 298 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 507 B
build/block-library/blocks/media-text/style.css 505 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 712 B
build/block-library/blocks/navigation-link/editor.css 711 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.15 kB
build/block-library/blocks/navigation/editor.css 2.16 kB
build/block-library/blocks/navigation/style-rtl.css 2.21 kB
build/block-library/blocks/navigation/style.css 2.2 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 443 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 501 B
build/block-library/blocks/post-comments-form/style.css 501 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 586 B
build/block-library/blocks/post-featured-image/editor.css 584 B
build/block-library/blocks/post-featured-image/style-rtl.css 315 B
build/block-library/blocks/post-featured-image/style.css 315 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 282 B
build/block-library/blocks/post-template/style.css 282 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 326 B
build/block-library/blocks/pullquote/style.css 325 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 440 B
build/block-library/blocks/query/editor.css 440 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 409 B
build/block-library/blocks/search/style.css 406 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 464 B
build/block-library/blocks/shortcode/editor.css 464 B
build/block-library/blocks/site-logo/editor-rtl.css 490 B
build/block-library/blocks/site-logo/editor.css 490 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.4 kB
build/block-library/blocks/social-links/style.css 1.39 kB
build/block-library/blocks/spacer/editor-rtl.css 322 B
build/block-library/blocks/spacer/editor.css 322 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 505 B
build/block-library/blocks/table/editor.css 505 B
build/block-library/blocks/table/style-rtl.css 631 B
build/block-library/blocks/table/style.css 631 B
build/block-library/blocks/table/theme-rtl.css 172 B
build/block-library/blocks/table/theme.css 172 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 235 B
build/block-library/blocks/template-part/editor.css 235 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 691 B
build/block-library/blocks/video/editor.css 694 B
build/block-library/blocks/video/style-rtl.css 174 B
build/block-library/blocks/video/style.css 174 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/classic-rtl.css 162 B
build/block-library/classic.css 162 B
build/block-library/common-rtl.css 1.02 kB
build/block-library/common.css 1.02 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 11.3 kB
build/block-library/editor.css 11.3 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 193 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 12.4 kB
build/block-library/style.css 12.4 kB
build/block-library/theme-rtl.css 704 B
build/block-library/theme.css 708 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 49.9 kB
build/components/index.min.js 203 kB
build/components/style-rtl.css 11.3 kB
build/components/style.css 11.4 kB
build/compose/index.min.js 12.2 kB
build/core-data/index.min.js 15.5 kB
build/customize-widgets/index.min.js 11.3 kB
build/customize-widgets/style-rtl.css 1.38 kB
build/customize-widgets/style.css 1.38 kB
build/data-controls/index.min.js 653 B
build/data/index.min.js 8.08 kB
build/date/index.min.js 32.1 kB
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.7 kB
build/edit-navigation/index.min.js 16.1 kB
build/edit-navigation/style-rtl.css 3.99 kB
build/edit-navigation/style.css 4 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 34.1 kB
build/edit-post/style-rtl.css 7.31 kB
build/edit-post/style.css 7.3 kB
build/edit-site/style-rtl.css 8.37 kB
build/edit-site/style.css 8.35 kB
build/edit-widgets/index.min.js 16.7 kB
build/edit-widgets/style-rtl.css 4.34 kB
build/edit-widgets/style.css 4.34 kB
build/editor/index.min.js 43.7 kB
build/editor/style-rtl.css 3.6 kB
build/editor/style.css 3.59 kB
build/element/index.min.js 4.68 kB
build/escape-html/index.min.js 537 B
build/experiments/index.min.js 868 B
build/format-library/index.min.js 6.95 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.64 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.77 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.78 kB
build/keycodes/index.min.js 1.83 kB
build/list-reusable-blocks/index.min.js 2.13 kB
build/list-reusable-blocks/style-rtl.css 835 B
build/list-reusable-blocks/style.css 835 B
build/media-utils/index.min.js 2.93 kB
build/notices/index.min.js 963 B
build/nux/index.min.js 2.06 kB
build/nux/style-rtl.css 732 B
build/nux/style.css 728 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.22 kB
build/preferences/index.min.js 1.33 kB
build/primitives/index.min.js 944 B
build/priority-queue/index.min.js 1.58 kB
build/react-i18n/index.min.js 696 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.74 kB
build/reusable-blocks/index.min.js 2.21 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.7 kB
build/server-side-render/index.min.js 1.77 kB
build/shortcode/index.min.js 1.53 kB
build/style-engine/index.min.js 1.48 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.61 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.19 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@priethor priethor added [Type] Feature New feature to highlight in changelogs. Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json labels May 11, 2022
@priethor priethor linked an issue May 11, 2022 that may be closed by this pull request
@pablohoneyhoney
Copy link

pablohoneyhoney commented May 17, 2022

Neat to see progress with something fun like this color randomizer. Is there a specific reason to be located within the ellipsis colors/palette/theme or are we just testing the mechanics?

@vcanales
Copy link
Member Author

Neat to see progress with something fun like this color randomizer. Is there a specific reason to be located within the ellipsis colors/palette/theme or are we just testing the mechanics?

Just testing. What I have in mind for a definitive UI would be a popover which should allow the user to undo the random palette change, choose start/end colors, and anything else that we might make configurable. I'm not sure yet what the best place for this popover would be; I'd appreciate any suggestions!

@pablohoneyhoney
Copy link

There's a neat example in the Substack editor that simply has a random button/icon that switches styles, without the need to add extra complexity to the interaction.

We'd need to define what parameters get changed, the logic behind it. But ideally not a popover or modal.

The placement of the icon could be at the bottom of the GS panel, or right above the preview card. It also depends how we evolve the Change Styles flow.

@vcanales vcanales force-pushed the try/color-palette-randomizer branch from a2ea1e6 to 54f9725 Compare May 19, 2022 18:41
@vcanales
Copy link
Member Author

There's a neat example in the Substack editor that simply has a random button/icon that switches styles, without the need to add extra complexity to the interaction.

We'd need to define what parameters get changed, the logic behind it. But ideally not a popover or modal.

The placement of the icon could be at the bottom of the GS panel, or right above the preview card. It also depends how we evolve the Change Styles flow.

Thanks for pointing me to Substack, I think I agree that we'll want to keep this simple. I've moved the button to the root screen for Global Styles, although it doesn't look quite right for me yet:

Kapture 2022-05-19 at 14 44 51

Perhaps something like this, with a button inside the preview, might also make sense:

image

Let me know what you think!

@pablohoneyhoney
Copy link

Nice!

It could be wise to consider this new UI (randomizer) alongside the Styles switcher I believe @critterverse was working on. #35619 And something @richtabor has been mulling on too. #38918

@pablohoneyhoney
Copy link

It could make sense to find or define an icon for the randomizer to be still understandable but also less prominent. Even at the bottom of GS root?

@colorful-tones
Copy link
Member

This is a really neat idea and great way to incorporate fun for users. 🌈 👏

I've spent the last few weeks working with style variations with WordPress 6.0. So, I thought I would test this PR with a custom theme with several style variations. All of my results from randomizing a variety of style variations provided very low contrast between foreground and background. These particular color slugs are seemingly becoming naming standards. However, there is still yet to be an internal guidance on these standards, and mostly community conversations and trending agreements. See: #29568

I suspect there may be a few issues at play here:

  • The ability to target certain color slugs would likely be ideal. Perhaps even an option for the user to select a color(s) in the existing Site Editor and randomize that color(s). However, now we're building something like Coolors.co, which could quickly become complex. It could still be worth pursuing, but complex.
  • The ability to allow users to dial in the lightness or darkness of a color(s). Again, see my comment above about complexity.

With all that said. I do not have any understanding around what the Cubehelix library is doing (besides generating random color values based on lightness/darkness seeds and baseline), and it may be a matter of just dialing in the Lightness/Darkness values? Or, even the rotations?

These:

const minLightness = Math.random() * ( 0.3 - 0.01 ) + 0.1; // Generate a random number between 0.1 and 0.3
const maxLightneess = Math.random() * ( 0.99 - 0.8 ) + 0.8; // Generate a random numbet between 0.8 and 0.99

Here is a video of me attempting to generate random palette based on my high-contrast style variation.

site-editing-color-randomizer-testing.mp4

For now, I would prefer to see more exploration around randomizing style variations. I do like the location of the Randomize button, but would prefer it nested underneath style variations screen and when the user clicks it a random style variation is chosen, as opposed to a color palette. However, the usage and implementation of style variations has yet to be explored in WP.org repo, and I suspect that it'll gain traction in the coming weeks with more and more themes having variations within. 🤔

@richtabor
Copy link
Member

A few thoughts to clarify:

  1. Do we see this idea eventually expanding to randomizing typography, spacing, other elements/blocks?

  2. Is it possible to ensure the value of the color (lightness/darkness) is maintained when randomizing colors? If so, the result would ensure the same level of contrast as the initial style. I.e. buttons, text, background etc would maintain contrast. 3.

The resulting color schemes would not be as dramatic as what we see currently in the PR, but this would likely solve the contrast issues with the non-standardized color values. Something like the palettes below, where the contrast ratio between existing color palette values is maintained across the design:

CleanShot 2022-06-05 at 10 18 55@2x

@critterverse
Copy link
Contributor

This is a really neat idea and great way to incorporate fun for users. 🌈 👏

+1 exciting to see this idea moving forward!

It could make sense to find or define an icon for the randomizer to be still understandable but also less prominent. Even at the bottom of GS root?

Agree that the bottom of the panel probably makes the most sense for this button — I can see it working as a fixed position element anchored to the bottom of the Global Styles panel:

randomize

@vcanales
Copy link
Member Author

vcanales commented Jun 7, 2022

Created #41574 regarding this, which implements one of the alternatives shown in Global Styles panel: iterating on the "Browse styles" button #40478

@vcanales vcanales changed the title try generating random color palettes Try generating random color palettes Jun 7, 2022
@vcanales
Copy link
Member Author

vcanales commented Jun 7, 2022

Do we see this idea eventually expanding to randomizing typography, spacing, other elements/blocks?

Typography, yes. For the rest of styles we might need to have a discussion about safe random values/ranges in order to implement them, but it's certainly possible to randomize them.

Is it possible to ensure the value of the color (lightness/darkness) is maintained when randomizing colors?

By maintaining it, do you mean figuring out what the lightness is for the current color, and then applying that to the new one?

This experiment proposes applying a lightness value between 0.01 and 0.3 on the black end of the spectrum, and 0.8 and 0.99 on the white end, which in theory means that there's a discernible gap between both ends, ensuring contrast to an extent.

@richtabor
Copy link
Member

By maintaining it, do you mean figuring out what the lightness is for the current color, and then applying that to the new one?

I mean if one color is "light" then that same level of lightness is applied to its randomized value. The same for the darkness of a color. Like in the palettes below, each line could be the resulting palette of the randomization - where each color maintains its value (lightness/darkness) from the origin.

Row two and three represents a randomized color palette of one:
172043909-ce892dc4-c95d-44e7-ad5c-17d600976b27

@colorful-tones
Copy link
Member

Just dropping some links that might inspire the effort:

  • Colorable - color combination contrast tester
  • Huemint.com - Huemint uses machine learning to generate colors for graphic design.

@vcanales vcanales force-pushed the try/color-palette-randomizer branch from 85042fa to 6d4870a Compare June 20, 2022 15:56
@vcanales
Copy link
Member Author

vcanales commented Jun 20, 2022

@critterverse
Agree that the bottom of the panel probably makes the most sense for this button — I can see it working as a fixed position element anchored to the bottom of the Global Styles panel

I moved the button to the bottom in the latest commit

image

Could you share the shuffle icon shown on your example? I would love to add it to our Icons collection. Now, I'm still using the replaceable block icon as a placeholder.

@vcanales vcanales marked this pull request as ready for review June 20, 2022 17:35
@vcanales vcanales requested a review from ajitbohra as a code owner June 20, 2022 17:35
@vcanales
Copy link
Member Author

vcanales commented Jun 20, 2022

@richtabor
I mean if one color is "light" then that same level of lightness is applied to its randomized value. The same for the darkness of a color. Like in the palettes below, each line could be the resulting palette of the randomization - where each color maintains its value (lightness/darkness) from the origin.

I'm working on incorporating this. The problem I'm trying to deal with right now is that if #000 or #fff are being used, since lightness and darkness are 1 and 0 respectively, they will continue being absolute black and white. I think we'd still have to randomize lightness to some extent, although keeping it within a safe range.

@vcanales vcanales force-pushed the try/color-palette-randomizer branch 2 times, most recently from 43e0afb to 71a7565 Compare November 3, 2022 14:04
@vcanales vcanales enabled auto-merge (squash) November 12, 2022 18:23
@vcanales
Copy link
Member Author

Updated screenshot

colors

Copy link
Contributor

@scruffian scruffian left a comment

Choose a reason for hiding this comment

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

LGTM

@scruffian
Copy link
Contributor

I think we should bring this in as it's under and experiment, and then we can iterate once we get feedback.

@vcanales vcanales merged commit 00b334f into trunk Nov 14, 2022
@vcanales vcanales deleted the try/color-palette-randomizer branch November 14, 2022 10:21
@github-actions github-actions bot added this to the Gutenberg 14.6 milestone Nov 14, 2022
@annezazu
Copy link
Contributor

For the FSE Outreach Program's sake, is this in the Gutenberg > Experiments tab? Asking as I can likely sneak this into the current exploration :)

@vcanales
Copy link
Member Author

For the FSE Outreach Program's sake, is this in the Gutenberg > Experiments tab?

Indeed! Under "Color randomizer" in the Experimental settings.

image

@annezazu
Copy link
Contributor

Officially in the current call for testing :) https://make.wordpress.org/test/2022/11/13/fse-program-exploration-site-editor-sneak-peek/ Thank you!

@ellenbauer
Copy link

I'm a bit conflicted with this one... Sure, it's cool... but I'm not convinced that we need it. There are a bunch of useful tools we could add to color palettes... We could allow users to select a single color and then build a palette using complementary, triadic, tetradic etc colors. We could have a11y calculations take care of color-selections. We could do soooo much... and we don't. Not because we don't want to, but because we need to be careful about what options we add & expose to users, keeping the UI as simple as possible. A "randomize palette" functionality is cool, but does it really enhance the user experience to the point where it should be core functionality and not a 3rd-party plugin? The fact that we can do it doesn't necessarily mean we should.

To be honest, I feel the same. Yes, it's a fun, but from a theme designer's perspective I don't see an urgent use since the theme designer can provide numerous style variations. For the user this provides the same kind of 'fun feel', but theme designers would provide an experience that actually works.

There is so much potential in styles, but not much is published yet. So as a theme builder I feel style export/imports, the option to separate font styles from color styles are much more basic features I would love to have first.

@lesley-pizza
Copy link

lesley-pizza commented Nov 16, 2022

To be honest, I feel the same. Yes, it's a fun, but from a theme designer's perspective I don't see an urgent use since the theme designer can provide numerous style variations. For the user this provides the same kind of 'fun feel', but theme designers would provide an experience that actually works.

There is so much potential in styles, but not much is published yet. So as a theme builder I feel style export/imports, the option to separate font styles from color styles are much more basic features I would love to have first.

I agree with @ellenbauer and @aristath. It's a nice, fun idea. But anyone using a theme will probably rely on the theme's style variations. And that will probably feel like a randomizer to them already. At least, that's how I personally view style variations.

I'd much rather focus on basic features first too, rather than fun ones. Let plugin and theme developers build the fun. :)

@ellenbauer
Copy link

I've been thinking about the idea of randomizing elements in the site editor.

Are there explorations to offer pattern randomizing to create page templates? I think this would be very powerful imo, especially as patterns can be presorted by categories.

Also, I think if theme authors could offer presets for their color palette values, I think the randomize color palette idea could also work better. So it's not completely random, but more like a mix/match approach to preset colors provided by the theme builder.

@scruffian
Copy link
Contributor

This exploration aims at something along those lines: #45618

@vcanales
Copy link
Member Author

Also, I think if theme authors could offer presets for their color palette values, I think the randomize color palette idea could also work better. So it's not completely random, but more like a mix/match approach to preset colors provided by the theme builder.

This generator takes the initial colors and moves them around in a color wheel, so the palettes generated are always somewhat related to the starting palette. Automagically generating derivative palettes for theme creators is the next thing I'll try.

@ellenbauer
Copy link

ellenbauer commented Nov 20, 2022

This generator takes the initial colors and moves them around in a color wheel, so the palettes generated are always somewhat related to the starting palette. Automagically generating derivative palettes for theme creators is the next thing I'll try.

I think this approach most likely works great for small color palettes.

As we are working with more complex color palettes for our themes, I feel it would work smoother if the theme author could provide a set of colors for each slug. Something like 10 variations of primary-button colors, primary background colors, text colors and so on.

This could be an easy solution to guarantee that all randomized outcome actually works and something like a dark button text color on a dark button background color can be avoided.

Maybe the slug in theme.json can just by default hold multiple values and the author can optionally set one value as the default and provide addition values right in the color if they want to control the outcome in their themes? E.g.:

{ "slug": "background-primary", "name": "Background Primary", "color": "#ffffff", "variations": "#EFF5F5", "#FFFBC1", "#FFDDD2" }

But maybe I'm too much of a control freak here 😆 and it actually just works nicely if the colors are related to the original and are in a similar range of contrast.

@scruffian
Copy link
Contributor

One thing I like about this tool is the element of surprise. Of course sometimes not all variations will work and look good, but not being able to predict what the outcome will be makes it very interesting!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json Needs User Documentation Needs new user documentation [Type] Experimental Experimental feature or API. [Type] Feature New feature to highlight in changelogs.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Style variations: Add "Randomize" button