[wp-trac] [WordPress Trac] #61018: Block editor color selector displays incorrect color information

WordPress Trac noreply at wordpress.org
Tue Apr 16 16:34:30 UTC 2024


#61018: Block editor color selector displays incorrect color information
--------------------------+-----------------------------
 Reporter:  gerardreches  |      Owner:  (none)
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  Editor        |    Version:  6.5
 Severity:  minor         |   Keywords:
  Focuses:                |
--------------------------+-----------------------------
 I'm loading my own color palette to the theme.json.

 The colors are dynamic and retrieved from the DB. These colors can have
 any valid CSS value for a color.

 So a color value in the palette can actually take the value of another
 color from the same palette by using `var(--wp--preset--color--another-
 color)`.

 This creates a bug in the Block Editor. Although the color is displayed in
 the palette and it keeps its identifier, when you choose it the checked
 color will be the one it is making reference to, and the name and color
 displayed at the top will be those from the referenced color instead of
 the selected one.

 Also, you cannot deselect the color by clicking again on it.

 Let me set a simplified example of my code:

 {{{#!php
 <?php
 function filter_theme_json_theme( WP_Theme_JSON_Data $theme_json ):
 WP_Theme_JSON_Data {
         $palette = array(
                 array(
                         'name'  => 'Greeen',
                         'slug'  => 'green',
                         'color' => '#55C42D',
                 ),
                 array(
                         'name'  => 'Pink',
                         'slug'  => 'pink',
                         'color' => 'var(--wp--preset--color--green)',
                 ),
         );
         $new_data = array(
                 'version'  => 2,
                 'settings' => array(
                         'color' => array(
                                 'defaultPalette' => false,
                                 'palette'        => $palette
                         ),
                 ),
         );

         return $theme_json->update_with( $new_data );
 }
 add_filter( 'wp_theme_json_data_theme', 'filter_theme_json_theme' );
 }}}

 With this we'll have two theme colors displayed in the color selector in
 the Block Editor (Gutenberg). Both color circles will be green as it is
 supposed to be.

 Everything will work as expected for the first color (Green).

 When you click on the second color, the selection border will appear on
 the second color, but the checkmark will appear on the first color.

 The preview displayed on top will be:


 {{{
 [#55C42D background]
 Green
 #55C42D
 }}}


 But it should be:


 {{{
 [#55C42D background]
 Pink
 var(--wp--preset--color--green)
 }}}

 Clicking again on the second color will not deselect it either.

 The tooltip when the cursor is on the second color displays 'Pink', as
 expected.

 Saving the post will correctly store the pink. If you change now its value
 on the previous code to another color (without using `var()`) and reload
 the editor page, you will see how the color changes, so there is no
 problem with the association.

 **So what it needs a fix is:**

 1. Checkmark appearing on the wrong color.
 2. Color preview information
 3. Color not being able to be deselected by clicking again.

 I understand that using `var()` instead of a color format wasn't an
 expected usage, however there are cases where this makes sense. I may have
 for example a primary, secondary, and accent color. And then I may have
 other colors such as 'Background', 'Button', 'Text', 'Link On Hover', etc.
 These are being used as utility colors and are meant to reference one of
 the already defined colors and not to have their own custom value.

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/61018>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list