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

Add a WP_Style_Engine_CSS_Declarations object #42043

Merged
merged 26 commits into from
Jul 4, 2022

Conversation

aristath
Copy link
Member

@aristath aristath commented Jun 29, 2022

What?

Adds a new WP_Style_Engine_CSS_Declarations object in the Style Engine.
Part of the explorations on the Style Engine structure in #42028

The WP_Style_Engine()->get_css_rules_object( $selector ); method gets an instance of the "rules" object. This helps gather all rules for a specific selector to the same object, and these can later be used when printing.
The object takes care of parsing CSS strings to an array (prop=>value pairs), sanitizes the styles and handles compiling them to a string that can then be used in other parts of the style engine.

@aristath aristath requested a review from ramonjd June 29, 2022 11:36
@aristath aristath force-pushed the add/style-engine/rules-object branch from 322550f to b684a9f Compare June 29, 2022 12:27
Copy link
Member

@ramonjd ramonjd left a comment

Choose a reason for hiding this comment

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

Thanks a lot for demonstrating this idea @aristath

I'm feeling pretty positive about having a "rule" object.

The only hesitation I'd have is trying to knock over everything at once.

Working out a simple rule object interface would be a good step to do first and get right since we don't need to store styles just yet.

As we slowly make our way through the application, a separate store we can plugin later might be more flexible.

As always, take what I say with a salt sandwich. 🤣

packages/style-engine/class-wp-style-engine-css-rules.php Outdated Show resolved Hide resolved
packages/style-engine/class-wp-style-engine.php Outdated Show resolved Hide resolved
packages/style-engine/class-wp-style-engine.php Outdated Show resolved Hide resolved
phpunit/block-supports/border-test.php Outdated Show resolved Hide resolved
Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

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

I really like the ideas in this PR, particularly how it cleans up the readability of the generate function in the main style engine class.

Do you have an idea in mind @aristath as to how many separate classes we might want to have for organising how we store and then output styles? (I know @ramonjd described five or so broad areas in the discussion, and I was wondering how some of that could be logically grouped 🤔)

Between this PR and #41896, it sounds like so far, we've got something along the lines of:

  • A main style engine class, that is the entry point for block supports and global styles to call it to generate / register styles
  • A class for CSS key/value pairs (declarations) in this PR
  • A class for storing all the rules / outputting the style tag with de-duped rules (as in Add an inline styles handler #41896) — perhaps this one is the registry / store as well as the thing that does the outputting?

We can also keep discussing that sort of structural question over in #42028 if you think that's a better place for it 🙂

packages/style-engine/class-wp-style-engine.php Outdated Show resolved Hide resolved
packages/style-engine/class-wp-style-engine-css-rules.php Outdated Show resolved Hide resolved
@aristath
Copy link
Member Author

I really like the ideas in this PR, particularly how it cleans up the readability of the generate function in the main style engine class.

Thank you! I like the idea of having a separate object for style-rules-declarations as well, because it's small enough to be used everywhere we print styles! Since rules-declarations are not tied to a selector, it can be used to add inline styles like <div style="...">, it can be used when printing inline styles inside a <style> element, and is basically one of the smallest architectural blocks we can/should have for a style engine 👍

Do you have an idea in mind @aristath as to how many separate classes we might want to have for organising how we store and then output styles? (I know @ramonjd described five or so broad areas in the discussion, and I was wondering how some of that could be logically grouped 🤔)

Between this PR and #41896, it sounds like so far, we've got something along the lines of:

  • A main style engine class, that is the entry point for block supports and global styles to call it to generate / register styles
  • A class for CSS key/value pairs (declarations) in this PR
  • A class for storing all the rules / outputting the style tag with de-duped rules (as in Add an inline styles handler #41896) — perhaps this one is the registry / store as well as the thing that does the outputting?

That sounds about right...

@aristath aristath changed the title Add a WP_Style_Engine_CSS_Rules object Add a WP_Style_Engine_CSS_Declarations object Jun 30, 2022
@aristath aristath marked this pull request as ready for review June 30, 2022 07:00
@aristath aristath requested a review from spacedmonkey as a code owner June 30, 2022 07:00
@ramonjd ramonjd added [Package] Style Engine /packages/style-engine [Type] Experimental Experimental feature or API. labels Jun 30, 2022
@ramonjd
Copy link
Member

ramonjd commented Jun 30, 2022

I like the idea of having a separate object for style-rules-declarations as well, because it's small enough to be used everywhere we print styles! Since rules-declarations are not tied to a selector, it can be used to add inline styles like <div style="...">, it can be used when printing inline styles inside a <style> element, and is basically one of the smallest architectural blocks we can/should have for a style engine

Thanks again for helping out with the thinking on this @aristath 🍺

Great to have more folks working out the tricky issues!

@aristath
Copy link
Member Author

@ramonjd I still see the elements_with_invalid_preset_style_property test is failing in this PR... Any idea why? Looking at the code I don't see why that would happen 🤔

@ramonjd
Copy link
Member

ramonjd commented Jul 1, 2022

I still see the elements_with_invalid_preset_style_property test is failing in this PR... Any idea why? Looking at the code I don't see why that would happen

Interesting! 🤔

Because the selector is the same between tests, it looks as though the store is using the value from the previous test elements_with_css_var_value.

So either we'd need to clear the store in between tests, or overwrite store values with incoming values where the selector matches an existing record. It's a good example of why we'll need some tests when we eventually implement the store.

Until we start looking at consolidating style tag output1, we don't need the store at all. This makes the tests pass:

// Build CSS rules output.
$css_selector = isset( $options['selector'] ) ? $options['selector'] : null;
// If we're instantiating this object for every style, why not pass $css_declarations to the constructor? 
// After all, the declarations array is a dependency. 🤷 
$style_rules  = new WP_Style_Engine_CSS_Declarations(); 
$style_rules->add_declarations( $css_declarations );

It might even work out better for now since we wouldn't have to define a public function get_css_declarations_object that we might not need later.

Footnotes

  1. Edit: I think once @andrewserong's PR https://github.com/WordPress/gutenberg/pull/40875 lands, we'll have the perfect guinea pig to start doing this.

@andrewserong
Copy link
Contributor

I think once #40875 lands, we'll have the perfect guinea pig to start doing this.

Yes, once that PR lands, I think we'll be able to have a bit of fun digging into the Layout support and seeing how we can improve the output there. I think that (and the rest of the global styles class) makes another good case for the architecture of the class in this PR 👍

I ran out of time to give it a closer look again today, but I'll be back from next Tuesday and happy to do more reviewing then. Thanks again for all the work here @aristath, like Ramon mentioned, it's so nice to have more folks to collaborate with on this part of the puzzle!

@aristath
Copy link
Member Author

aristath commented Jul 1, 2022

If we're instantiating this object for every style, why not pass $css_declarations to the constructor? After all, the declarations array is a dependency. 🤷

Well... We have 3 options:

  • Pass $css_declarations to the constructor, and keep the add_declarations() method.
  • Pass $css_declarations to the constructor, and remove the add_declarations() method.
  • Don't pass $css_declarations to the constructor, and use an add_declarations() method.

If we pass $css_declarations to the constructor, we can either keep or remove the add_declarations method. The benefit of passing $css_declarations to the constructor would be that we basically won't have to call add_declarations separately, and therefore save a line when writing.
If we remove the add_declarations method, we can't add more styles to the same object, limiting what we can do in the future. If on the other hand, we keep the method, then the constructor will just be calling it and it will be used as a "shorthand" to save writing an extra line.
But what if, architecturally, we find down the line that what we want is to pass a store or a rules object to the constructor? It will be a lot easier to add something like that if we don't make decisions about the constructor now 😅
Right now, in the current implementation, it's true that there is no benefit in keeping an add_declarations method separate from the constructor. The only reason I'd like to keep it like that, is to ensure that the class can be used in any future implementation we may use, and not limit us.

Because the selector is the same between tests, it looks as though the store is using the value from the previous test elements_with_css_var_value.

Wow... excellent debug skills!! It makes perfect sense now, thank you!! 🙇
So... it's basically doing what it should do: The store is using the same object because the selectors are the same - which is what we'd expect from a store.

2 options here: Either remove the primitive store, or change the selectors in the tests, so they're different 🤔
The fix you posted above makes sense, and since right now we don't need a store (it was merely a placeholder for future implementations) I removed it like you suggested 👍

@aristath
Copy link
Member Author

aristath commented Jul 1, 2022

I think once #40875 lands, we'll have the perfect guinea pig to start doing this.

I agree 100%. #40875 is the PR we're waiting for! I'm glad to see it's close to being done and I watch that one every day. I think once it gets merged we'll be able to structure the style engine around it 👍

@ramonjd
Copy link
Member

ramonjd commented Jul 1, 2022

If we remove the add_declarations method, we can't add more styles to the same object, limiting what we can do in the future.

That's a very good point! Thank you for explaining your thinking here.

It's just a personal preference, but I'm drawn to your first option "Pass $css_declarations to the constructor, and keep the add_declarations() method." That way we have only what we need now (the constructor), and the flexibility later in add_declarations().

But what if, architecturally, we find down the line that what we want is to pass a store or a rules object to the constructor?

That's true.

The class's functionality is deliberately narrow though – even the name WP_Style_Engine_CSS_Declarations suggests a single area of responsibility. I kind of like that purity. Having declarations as a dependency might in some way preserve that purity by compelling us not to add to the dependency list.

We'd have the style engine class as the facade to deals with subsystem parts, namely, instantiating the objects and ensuring that they work together.

I am very biased in that I'm always trying to shave off as much as possible things we don't need, but I appreciate keeping options open as well 😄 I don't think we can tell what the future holds. If I could I'd be writing to you from a super yacht. 🤣

@aristath
Copy link
Member Author

aristath commented Jul 1, 2022

It's just a personal preference, but I'm drawn to your first option "Pass $css_declarations to the constructor, and keep the add_declarations() method." That way we have only what we need now (the constructor), and the flexibility later in add_declarations().

The class's functionality is deliberately narrow though – even the name WP_Style_Engine_CSS_Declarations suggests a single area of responsibility. I kind of like that purity.

Consider me convinced. I don't see any real downside to adding a constructor with an optional $styles param... Wouldn't really pollute anything and it can make some scenarios easier.

Pushed the change 👍

@aristath aristath force-pushed the add/style-engine/rules-object branch from c7d74df to 26d71a5 Compare July 4, 2022 09:30
@github-actions
Copy link

github-actions bot commented Jul 4, 2022

Size Change: 0 B

Total Size: 1.25 MB

ℹ️ 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 6.58 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 152 kB
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 65 B
build/block-library/blocks/archives/style.css 65 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 103 B
build/block-library/blocks/audio/style.css 103 B
build/block-library/blocks/audio/theme-rtl.css 110 B
build/block-library/blocks/audio/theme.css 110 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 59 B
build/block-library/blocks/avatar/style.css 59 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 441 B
build/block-library/blocks/button/editor.css 441 B
build/block-library/blocks/button/style-rtl.css 543 B
build/block-library/blocks/button/style.css 543 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 103 B
build/block-library/blocks/code/style.css 103 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 187 B
build/block-library/blocks/comment-template/style.css 185 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 95 B
build/block-library/blocks/comments/editor.css 95 B
build/block-library/blocks/cover/editor-rtl.css 615 B
build/block-library/blocks/cover/editor.css 616 B
build/block-library/blocks/cover/style-rtl.css 1.55 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 110 B
build/block-library/blocks/embed/theme.css 110 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.5 kB
build/block-library/blocks/gallery/style.css 1.49 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 333 B
build/block-library/blocks/group/editor.css 333 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 738 B
build/block-library/blocks/image/editor.css 737 B
build/block-library/blocks/image/style-rtl.css 524 B
build/block-library/blocks/image/style.css 530 B
build/block-library/blocks/image/theme-rtl.css 110 B
build/block-library/blocks/image/theme.css 110 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 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 463 B
build/block-library/blocks/latest-posts/style.css 462 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 493 B
build/block-library/blocks/media-text/style.css 490 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 705 B
build/block-library/blocks/navigation-link/editor.css 703 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-submenu/view.min.js 402 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/style-rtl.css 1.96 kB
build/block-library/blocks/navigation/style.css 1.95 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 423 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 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 260 B
build/block-library/blocks/paragraph/style.css 260 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 495 B
build/block-library/blocks/post-comments-form/style.css 495 B
build/block-library/blocks/post-comments/editor-rtl.css 77 B
build/block-library/blocks/post-comments/editor.css 77 B
build/block-library/blocks/post-comments/style-rtl.css 632 B
build/block-library/blocks/post-comments/style.css 630 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 605 B
build/block-library/blocks/post-featured-image/editor.css 605 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 282 B
build/block-library/blocks/post-template/style.css 282 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 370 B
build/block-library/blocks/pullquote/style.css 370 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 369 B
build/block-library/blocks/query/editor.css 369 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 385 B
build/block-library/blocks/search/style.css 386 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 233 B
build/block-library/blocks/separator/style.css 233 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 708 B
build/block-library/blocks/site-logo/editor.css 708 B
build/block-library/blocks/site-logo/style-rtl.css 192 B
build/block-library/blocks/site-logo/style.css 192 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 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 494 B
build/block-library/blocks/table/editor.css 494 B
build/block-library/blocks/table/style-rtl.css 611 B
build/block-library/blocks/table/style.css 609 B
build/block-library/blocks/table/theme-rtl.css 175 B
build/block-library/blocks/table/theme.css 175 B
build/block-library/blocks/tag-cloud/style-rtl.css 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 149 B
build/block-library/blocks/template-part/editor.css 149 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 561 B
build/block-library/blocks/video/editor.css 563 B
build/block-library/blocks/video/style-rtl.css 159 B
build/block-library/blocks/video/style.css 159 B
build/block-library/blocks/video/theme-rtl.css 110 B
build/block-library/blocks/video/theme.css 110 B
build/block-library/common-rtl.css 987 B
build/block-library/common.css 984 B
build/block-library/editor-rtl.css 10.2 kB
build/block-library/editor.css 10.2 kB
build/block-library/index.min.js 183 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 11.5 kB
build/block-library/style.css 11.5 kB
build/block-library/theme-rtl.css 695 B
build/block-library/theme.css 700 B
build/block-serialization-default-parser/index.min.js 1.11 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 47 kB
build/components/index.min.js 230 kB
build/components/style-rtl.css 14 kB
build/components/style.css 14 kB
build/compose/index.min.js 11.7 kB
build/core-data/index.min.js 14.7 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.4 kB
build/customize-widgets/style.css 1.4 kB
build/data-controls/index.min.js 653 B
build/data/index.min.js 7.95 kB
build/date/index.min.js 32 kB
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.65 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 4.03 kB
build/edit-navigation/style.css 4.04 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 30.4 kB
build/edit-post/style-rtl.css 7.04 kB
build/edit-post/style.css 7.04 kB
build/edit-site/index.min.js 51.3 kB
build/edit-site/style-rtl.css 8.28 kB
build/edit-site/style.css 8.26 kB
build/edit-widgets/index.min.js 16.4 kB
build/edit-widgets/style-rtl.css 4.36 kB
build/edit-widgets/style.css 4.36 kB
build/editor/index.min.js 39.2 kB
build/editor/style-rtl.css 3.67 kB
build/editor/style.css 3.67 kB
build/element/index.min.js 4.27 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 6.75 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.38 kB
build/list-reusable-blocks/index.min.js 1.74 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.9 kB
build/notices/index.min.js 953 B
build/nux/index.min.js 2.05 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.3 kB
build/primitives/index.min.js 933 B
build/priority-queue/index.min.js 612 B
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.69 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.53 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.61 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.19 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@aristath
Copy link
Member Author

aristath commented Jul 4, 2022

This PR simplifies the main WP_Style_Engine implementation cleaning things up a bit there, and the declarations class is kept small and simple, easy to understand.

The CSS_Declarations object is one that we'll need no matter what the final structure of the Style Engine will be since It is the smallest building block of styles. It would be good to get it in and use it in our subsequent implementations while building the other parts of the Style Engine.

I believe this is now ready for a final review... Structurally and future-wise it makes sense, all comments have been addressed, tests pass, and we can use it in a number of other Style-Engine-related PRs 👍

Copy link
Member

@ramonjd ramonjd 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 a great change and will definitely help our future selves!

Thanks for all your work @aristath 🙇🙇 🙇

@ramonjd ramonjd merged commit 8128e24 into trunk Jul 4, 2022
@ramonjd ramonjd deleted the add/style-engine/rules-object branch July 4, 2022 23:32
@github-actions github-actions bot added this to the Gutenberg 13.7 milestone Jul 4, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Package] Style Engine /packages/style-engine [Type] Experimental Experimental feature or API.
Projects
Status: 🏆 Done
Development

Successfully merging this pull request may close these issues.

3 participants