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

Selectors API: Fix for global styles hook, style variations, and duotone #49393

Merged
merged 9 commits into from
Mar 29, 2023

Conversation

aaronrobertshaw
Copy link
Contributor

@aaronrobertshaw aaronrobertshaw commented Mar 28, 2023

Related:

Made obsolete by this PR:

What?

#46496 landed in a broken state. It missed addressing the following:

  • use of the selectors API in the JS global styles hook: useGlobalStylesOutput
  • updating Global Styles created style variations and their selectors
  • updating the image block and duotone support to use the Selectors API

This PR aims to fix the broken functionality and add the missing pieces that should have been in #46496.

In addition, some concerns were raised around the introduction of the editor-only selectors and whether the need warrants having to support that part of the API moving forward. In an effort to unblock the general Selectors API, the editor selectors functionality has been removed in this PR. It can be added in a follow-up and discussed separately.

Why?

The Selectors API introduced a few regressions, that need fixing. This PR is one pathway to that. The alternative to this PR is to revert #46496 completely.

How?

  1. Removed the editor-only selectors functionality from what had already landed for the Selectors API
  2. Moved the Duotone support from the filters key to filter
  3. Refactored the functions helping generate style declarations so they could be reused for style variations
  4. Updated the PHP theme.json class processing of style variations to handle the Selectors API shape.
  5. Updated useGlobalStylesOutput to use the Selectors API
  6. Finished off updating Duotone support to use the Selectors API

This PR might be easiest to review commit-by-commit as they should match each item from the list above.

Next Steps

Testing Instructions

  1. Run unit tests
    • npm run test:unit packages/block-editor/src/components/global-styles/test/use-global-styles-output.js
    • npm run test:unit packages/blocks/src/api/test/registration
    • npm run test:unit:php -- --filter WP_Get_Block_CSS_Selector_Test
    • npm run test:unit:php -- --filter WP_Theme_JSON_Gutenberg_Test
    • npm run test:unit:php -- --filter WP_Duotone_Gutenberg_Test
  2. Confirm theme.json styling of image block works as expected
  3. Confirm Global Styles for the image block are reflected in the site editor, block editor, and frontend
  4. Check Global Styles for other blocks continue to work correctly in both editors and the frontend
  5. Create some Block Style variations via Global Styles for multiple block types with one being the Image block
  6. Confirm that the style variations you created update correctly in real-time in the site editor and get applied as expected in the block editor and frontend
  7. Test duotone filters work on Images in the site editor
  8. Switch to the block editor and confirm individual block duotone filters work and display on the frontend

Note: There's an existing issue with Global Styles duotone filters not applying in the block editor (fix underway).

@aaronrobertshaw aaronrobertshaw added [Type] Regression Related to a regression in the latest release Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi labels Mar 28, 2023
@aaronrobertshaw aaronrobertshaw self-assigned this Mar 28, 2023
@aaronrobertshaw
Copy link
Contributor Author

Despite not yet having a chance to polish and thoroughly test the code here, I've optimistically created this draft PR in that it may offer an alternative to reverting #46496 and get us to a stable Selectors API sooner.

@github-actions
Copy link

github-actions bot commented Mar 28, 2023

Size Change: +315 B (0%)

Total Size: 1.34 MB

Filename Size Change
build/block-editor/index.min.js 200 kB +362 B (0%)
build/blocks/index.min.js 51.1 kB -23 B (0%)
build/components/index.min.js 208 kB +19 B (0%)
build/components/style-rtl.css 11.7 kB -20 B (0%)
build/components/style.css 11.7 kB -23 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/annotations/index.min.js 2.78 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 483 B
build/block-directory/index.min.js 7.2 kB
build/block-directory/style-rtl.css 1.04 kB
build/block-directory/style.css 1.04 kB
build/block-editor/content-rtl.css 4.11 kB
build/block-editor/content.css 4.1 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-editor/style-rtl.css 14.5 kB
build/block-editor/style.css 14.5 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 138 B
build/block-library/blocks/audio/theme.css 138 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 91 B
build/block-library/blocks/avatar/style.css 91 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 587 B
build/block-library/blocks/button/editor.css 587 B
build/block-library/blocks/button/style-rtl.css 628 B
build/block-library/blocks/button/style.css 627 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 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 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.6 kB
build/block-library/blocks/cover/style.css 1.59 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 138 B
build/block-library/blocks/embed/theme.css 138 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 265 B
build/block-library/blocks/file/style.css 265 B
build/block-library/blocks/file/view.min.js 353 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 984 B
build/block-library/blocks/gallery/editor.css 988 B
build/block-library/blocks/gallery/style-rtl.css 1.55 kB
build/block-library/blocks/gallery/style.css 1.55 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 654 B
build/block-library/blocks/group/editor.css 654 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 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 830 B
build/block-library/blocks/image/editor.css 829 B
build/block-library/blocks/image/style-rtl.css 652 B
build/block-library/blocks/image/style.css 652 B
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 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 716 B
build/block-library/blocks/navigation-link/editor.css 715 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 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation/editor-rtl.css 2.13 kB
build/block-library/blocks/navigation/editor.css 2.14 kB
build/block-library/blocks/navigation/style-rtl.css 2.22 kB
build/block-library/blocks/navigation/style.css 2.21 kB
build/block-library/blocks/navigation/view-modal.min.js 2.81 kB
build/block-library/blocks/navigation/view.min.js 447 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 401 B
build/block-library/blocks/page-list/editor.css 401 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 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 134 B
build/block-library/blocks/post-excerpt/style.css 134 B
build/block-library/blocks/post-featured-image/editor-rtl.css 588 B
build/block-library/blocks/post-featured-image/editor.css 586 B
build/block-library/blocks/post-featured-image/style-rtl.css 322 B
build/block-library/blocks/post-featured-image/style.css 322 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 281 B
build/block-library/blocks/post-template/style.css 281 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 463 B
build/block-library/blocks/query/editor.css 463 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 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 149 B
build/block-library/blocks/rss/editor.css 149 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 408 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 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 489 B
build/block-library/blocks/site-logo/editor.css 489 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 332 B
build/block-library/blocks/spacer/editor.css 332 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 651 B
build/block-library/blocks/table/style.css 650 B
build/block-library/blocks/table/theme-rtl.css 157 B
build/block-library/blocks/table/theme.css 157 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 404 B
build/block-library/blocks/template-part/editor.css 404 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 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 179 B
build/block-library/blocks/video/style.css 179 B
build/block-library/blocks/video/theme-rtl.css 139 B
build/block-library/blocks/video/theme.css 139 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 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.6 kB
build/block-library/editor.css 11.6 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 202 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 12.7 kB
build/block-library/style.css 12.7 kB
build/block-library/theme-rtl.css 698 B
build/block-library/theme.css 703 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/compose/index.min.js 12.4 kB
build/core-data/index.min.js 16.3 kB
build/customize-widgets/index.min.js 12.2 kB
build/customize-widgets/style-rtl.css 1.41 kB
build/customize-widgets/style.css 1.41 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 8.62 kB
build/date/index.min.js 40.4 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.72 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/index.min.js 34.8 kB
build/edit-post/style-rtl.css 7.6 kB
build/edit-post/style.css 7.59 kB
build/edit-site/index.min.js 62.9 kB
build/edit-site/style-rtl.css 10.1 kB
build/edit-site/style.css 10.1 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.56 kB
build/edit-widgets/style.css 4.56 kB
build/editor/index.min.js 45.8 kB
build/editor/style-rtl.css 3.54 kB
build/editor/style.css 3.53 kB
build/element/index.min.js 4.95 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.26 kB
build/format-library/style-rtl.css 557 B
build/format-library/style.css 556 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.79 kB
build/keycodes/index.min.js 1.94 kB
build/list-reusable-blocks/index.min.js 2.14 kB
build/list-reusable-blocks/style-rtl.css 865 B
build/list-reusable-blocks/style.css 865 B
build/media-utils/index.min.js 2.99 kB
build/notices/index.min.js 977 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.23 kB
build/preferences/index.min.js 1.35 kB
build/primitives/index.min.js 960 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 937 B
build/react-i18n/index.min.js 702 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.75 kB
build/reusable-blocks/index.min.js 2.26 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 2.09 kB
build/shortcode/index.min.js 1.52 kB
build/style-engine/index.min.js 1.55 kB
build/token-list/index.min.js 650 B
build/url/index.min.js 3.74 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 1.09 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.3 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@github-actions
Copy link

github-actions bot commented Mar 28, 2023

Flaky tests detected in 372c6f8.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/4549009557
📝 Reported issues:

@aaronrobertshaw
Copy link
Contributor Author

I've given this a bit of a test and it's working about as expected. So given this would be good to get in before the next Gutenberg release, I'll mark the PR ready for review and iterate on it as required.

@oandregal
Copy link
Member

I wasn't able to test how/whether this fixes duotone and style variations. This is good in regard to the removal of editor selectors, and everything else I've reviewed.

I've left some minor comments here, and it seems we can also remove other functions (can be a follow-up like this other).

I have an errand to run this afternoon, so I won't be available to look at this until tomorrow. Please, go ahead with this, so it's part of the 15.5 RC (provided others confirm duotone/style variations are fixed). We can always prepare smaller follow-ups within the RC cycle, if necessary.

@gziolo gziolo added the [Feature] Block API API that allows to express the block paradigm. label Mar 28, 2023
Comment on lines +26 to +31
// Duotone ( no fallback selectors for Duotone ).
if ( path === 'filter.duotone' ) {
// If selectors API in use, only use its value or null.
if ( hasSelectors ) {
return get( selectors, path, null );
}
Copy link
Contributor

Choose a reason for hiding this comment

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

I didn't comment on this in the previous PR because I felt like it could be included in the duotone follow-up, but I do think it would be better for duotone to use fallback selectors to match everything else.

I want to avoid as much duotone-specific logic as possible—that was the point of making supports.__experimentalDuotone experimental—eventually we could remove the duotone specifics.

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 want to avoid as much duotone-specific logic as possible—that was the point of making supports.__experimentalDuotone experimental—eventually we could remove the duotone specifics.

A quick search of the WP plugin directory showed some hits for __experimentalDuotone out in the wild so I'm not sure it's a simple removal, we'd need to follow an official deprecation process right? In the same way, we can't just remove the __experimentalSelector support.

We'll need some form of specific duotone code here as its old location under color.__experimentalDuotone doesn't follow the general feature.__experimentalSelector pattern.

I do think it would be better for duotone to use fallback selectors to match everything else

So to confirm, it's ok for a duotone selector, if requested, to fallback to filter.root or the block's root selector?

Combining this with the need to update duotone block support to not scope its selectors, it might be better in a separate follow-up to this PR.

What do you think about landing this now (assuming style variation updates get greenlit) to fix the glaring issues before 15.5RC and create a separate PR to address this immediately after?

Copy link
Contributor

@tellthemachines tellthemachines left a comment

Choose a reason for hiding this comment

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

I haven't reviewed the whole PR in depth, but the variations-related changes look OK and the feature is working as expected! Compared to trunk, the most obvious changes can be seen in the Image block variation:

  • In trunk, adding a border to the "Rounded" variation adds it to the block wrapper instead of the image element;
  • In trunk the updated variation style isn't visible in the post editor.

Both the above issues are fixed in this branch.

Copy link
Contributor

@talldan talldan left a comment

Choose a reason for hiding this comment

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

This looks good to me.

I think it would be good to merge this even if there are smaller issues to follow up on, rather than leave the bigger know issues in trunk, so I'm giving it a 👍

@aaronrobertshaw
Copy link
Contributor Author

Thank you everyone for all the eyes on this 🙇

In the interest of landing the major fixes here before the 15.5 RC is cut, I'll merge this one as is leaving any smaller fixes and tweaks for follow-ups.

Known Issues for Follow-up

  • Duotone selectors to be fully scoped and allow fallback to root selector as per other block support features (#49423)
  • Update filter adding block level preset styles
  • Possible re-introduction of editor-only selectors
  • Possible tweaks to align signatures between getBlockCSSSelector and wp_get_block_css_selector

@aaronrobertshaw aaronrobertshaw merged commit 52953c7 into trunk Mar 29, 2023
@aaronrobertshaw aaronrobertshaw deleted the fix/selectors-api branch March 29, 2023 07:41
@github-actions github-actions bot added this to the Gutenberg 15.5 milestone Mar 29, 2023
@oandregal
Copy link
Member

I've tested the current state of duotone and this is what I found:

  • Create a post with two images.
  • Apply the purple-green duotone to one of them and leave the other without any duotone.
  • Go the site editor > global styles > image block and set the midnight duotone.

While both images have proper duotone, the global-level duotone gets applied to any image (whether or not it's a block image). Note how the avatar at the top-right gets the global-level duotone.

image

How everything works:

  • The block-level purple-green duotone:
    • Attaches the wp-duotone-purple-green class to the image.
    • Enqueues the relevant SVG.
    • Enqueues the following styles as part of the block supports stylesheet:
/* CORE-BLOCK-SUPPORTS-INLINE-CSS STYLESHEET */

/* purple-green => duotone applied at block-level */
.wp-duotone-purple-green img,
.wp-duotone-purple-green .components-placeholder {
	filter: var(--wp--preset--duotone--purple-green) !important;
}
  • The global-level midnight duotone:
    • Enqueues styles for global styles
    • Enqueues the proper SVG.
    • All the images without block-level duotone get the wp-duotone-midnight class applied.
    • Enqueues styles for block supports (wp-duotone-midnight class).
/* CORE-BLOCK-SUPPORTS-INLINE-CSS STYLESHEET */

/* midnight => duotone applied at global-level */
.wp-duotone-midnight img,
.wp-duotone-midnight .components-placeholder {
	filter: var(--wp--preset--duotone--midnight) !important;
}

/* WP-BLOCK-IMAGE-INLINE-CSS OR GLOBAL-STYLES-INLINE-CSS STYLESHEET */

/* duotone applied to global-level */
img, .components-placeholder {
	filter: var(--wp--preset--duotone--midnight);
}

Questions:

  • Duotone at the global level does two things: works like any other style AND works like a block support (attaches to all images the class selected by the user via GS Sidebar). Why do we have both? Can we make duotone work like any other style?

  • The selectors.filter.duotone is now img, .components-placeholder. Can we make it work like any other and have the whole selector? This is: we'd have .wp-block-image img, .wp-block-image .components-placeholder. Clarifying how this should work is a must for releasing block selectors API in Gutenberg 15.5, because we should not / cannot change it later.

If we update the image selector to be whole, the block-level duotone breaks. The reason is that the block-level duotone scopes the given block selector .wp-duotone-slug .wp-block-image img but it should be .wp-duotone-slug.wp-block-image img instead. It should still scope the selector for the old API as a backwards compatibilty mechanism. It seems a simple change, though I don't know enough about the duotone implementation and may be mistaken. cc @ajlende @jeryj @scruffian

@oandregal
Copy link
Member

oandregal commented Mar 29, 2023

The selectors.filter.duotone is now img, .components-placeholder. Can we make it work like any other and have the whole selector?

Working on this at #49436

@ramonjd ramonjd added the Needs PHP backport Needs PHP backport to Core label Jun 5, 2023
ramonjd added a commit to ramonjd/wordpress-develop that referenced this pull request Jun 21, 2023
ramonjd added a commit to ramonjd/wordpress-develop that referenced this pull request Jun 22, 2023
ramonjd added a commit to ramonjd/wordpress-develop that referenced this pull request Jun 25, 2023
ramonjd added a commit to ramonjd/wordpress-develop that referenced this pull request Jun 26, 2023
tellthemachines pushed a commit to ramonjd/wordpress-develop that referenced this pull request Jun 27, 2023
@ramonjd ramonjd removed the Needs PHP backport Needs PHP backport to Core label Jun 27, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Block API API that allows to express the block paradigm. [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json [Type] Regression Related to a regression in the latest release
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants