-
Notifications
You must be signed in to change notification settings - Fork 4.2k
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: Global styles css variables generation mechanism #19883
Add: Global styles css variables generation mechanism #19883
Conversation
b6a526c
to
be1ddec
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚀 @jorgefilipecosta This works beautifully! I just tested this locally on Twenty Eleven. The loading of the local theme.json
+ wp-gs
environment bootstrapping works as expected.
The theme.json
overrides apply on the instance for multiples views (e.g. homepage, single post page, etc...).
Lastly, setting a local block override works as expected. In this case, it's because you've applied the style if there is no background set (identified by a className). I suspect we'll need to be more.. systemtic about this approach, as I anticipate a lot of variation between blocks. But that's a note for the future.
Spectacular job!! 🙌
$inline_style .= "\t" . $var . ': ' . $value . ";\n"; | ||
} | ||
$inline_style .= '}'; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A filter here would come in really handy...
I'd like to work on this issue: #19611 (comment) but without a filter it's just going to get messy 😉
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We are still in early stages, but I agree filters here make sense. I will propose an experimental filter 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't we hold on adding filters until we're sure about the APIs...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It'd be good to start making a list of which functions (in the non-code sense) make sense to extend.
@@ -36,6 +36,10 @@ $blocks-button__height: 56px; | |||
} | |||
} | |||
|
|||
.wp-gs .wp-block-button__link:not(.has-background) { | |||
background-color: var(--wp-gs-core-button-color-background, var(--wp-gs-color-primary, $dark-gray-700)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is $dark-gray-700
the current default background color for this block? Won't this cause a change in existing themes?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, the default is already $dark-gray-700.
https://github.com/WordPress/gutenberg//blob/79d28866952ec3976eafad41d90458aa9d266455/packages/block-library/src/button/style.scss#L17
It will not cause any change in existing themes because they don't use global styles so the class wp-gs is not present.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should probably drop $dark-gray-700 from here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @youknowriad, what is the reason for removing $dark-gray-700 from here? It is a fact that the default background color will be $dark-gray-700 because of existing rule even if we don't include $dark-gray-700. But I think setting defaults in this way may open the door to allow tools to easily parse the fallbacks on a given variable and allow the user to easily see the defaults.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Today the block doesn't have any default and I feel that's fine. This is changing the behavior of the block for me.
The question is do we want block authors to provide these defaults like or should we just rely on the theme styles? I feel we always choose the theme styles in general.
For example in dark theme, it doesn't make sense to force a dark color on paragraph text color.
@@ -36,6 +36,10 @@ $blocks-button__height: 56px; | |||
} | |||
} | |||
|
|||
.wp-gs .wp-block-button__link:not(.has-background) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you explain to me why the .wp-gs
is necessary? Why can't we just drop it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If I added the rule .wp-block-button__link:not(.has-background)
to the block most existing themes would break. That happens because that selector has a specificity of two classes, so a theme setting the background color using .wp-block-button__link{ background-color: ...}
would stop working.
Another case where this problem is even more noticeable is the implementation of global styles in a paragraph. We can not simply set p { background-color: var(--wp-gs-paragraph-color-text, var( --wp-gs-color-text ) )
otherwise paragrapgs would probably change colors in most existing themes.
The wp-gs
class offers a block the possibility of keeping existing styles so existing themes styling them still work while at the same time they could provide styles that are used in the presence of a theme compatible with global styles.
The CSS variables with the defaults or user-configured options will be always be loaded even if the theme does not support global styles. So a new block build now may not need to use wp-gs and can just use the global styles all the time.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can these problems be solved if we avoid an explicit value at the last argument. Concretely, if it's something like that
background-color: var(--wp-core-button-color-background, var(--wp-color-primary, initial));
(initial or inherit depending on the property we're setting)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, this code would not work because --wp-color-primary would always be defined as it is a default that WordPress needs to provide even if themes don't use global styles. If defaults were not provided blocks could never safely rely on a global variable.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
--wp-color-primary would always be defined as it is a default that WordPress needs
Making sure I'm understanding properly here. Why WordPress need to define defaults for these variables?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it would be good to provide a set of defaults to make things consistent even if the theme is not setting global styles.
So, for example, block A and block B created by different authors both use the --wp-gs-color-text, if a default for the variable is not provided both blocks may end up using different text colors while ideally, the text color would be the same.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not just consider the browser defaults as the defaults? There's something I'm missing here.
If these blocks do support the variables they will have something like that on their styles right?
color: var(--wp-block-something-color-primary, var(--wp-color-primary, initial));
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we set something like p:not(.has-background) { color: var(--wp-block-something-color-primary, var(--wp-color-primary, initial)); }
without targetting current themes supporting global styles (having wp-gs class) we make break the styles for example if the current theme has p { color: red }
the style will stop working as color will take the default browser value.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What happens if we just remove "initial" from that code?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What happens if we just remove "initial" from that code?
In my tests, I think the browser uses the default value for the property when the var is used (it seems the same as including initial).
So I think we can not avoid wp-gs otherwise we may break styles.
There was a problem hiding this 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 start, any thoughts about how to best document this? The CSS variables from block authors, the overall flow...
Hi @youknowriad, regarding the documentation of the overall flow @ItsJonQ is working on that and shared details on #19611 (comment). So ideally, block authors would provide a theme.md or styles.MD file where they document the variables they support so theme authors can read them. |
I'm a little bit concerned about this. I think personally that ideally, the number of these variables should be small and should be consistent across all blocks. That way they can be also supported by third-party blocks. If we allow blocks to define their own custom variables (and these variables not being generated from the default variables), the proposal loses part of its purpose since the theme can not style all blocks (core or third-party) in an agnostic way. |
Hi @youknowriad, the main objective is that we have a set of global styles and blocks use these styles in their implementations. |
Agreed, but for me, this doesn't mean that we need to document anything specific for the block. It simply means that we have a naming convention for the block specific variable. If the option is Global style option is "color-text" the theme could define something like:
This would generate two variables:
This means we only have to document:
|
But what if the block has a very specific variable and wants to allow themes to change it? E.g: A "WordArt" like block that wants to allow themes to change space between letters and the orientation of the text? I think there will be always cases where a block was some specific need that will not be covered and if we don't provide a way for blocks to create variable specific to them, themes will end up customizing them by overwriting the CSS instead of relying on previously defined variables. |
But what if the block has a particular variable and wants to allow themes to change it? E.g.: A "WordArt" like block that wants to allow themes to change space between letters and the orientation of the text? I think there will always be cases where a block was some specific need that will not be covered, and if we don't provide a way for blocks to create variable specific to them, themes will end up customizing them by overwriting the CSS instead of relying on previously defined variables. |
Maybe but overriding a specific CSS variable or overriding a specific style is not that different and is not the main benefit from the global styles work. this proposal shines when it serves as a shared design system. I think this should be considered later and we should focus on the shared design system first. Also for these particular cases, ideally, the block author derives that style from the global variables (transformations, plugins like were shared initially in the prototypes) |
Sure I understand the reason behind this. I think for now we can assume blocks don't define their own variables. In that case, I asked my self if it even makes sense to have variables named --wp-gs-paragraph-color-text, if we wanted to change the color of a paragraph using global styles we could simply do p { --wp-gs-color-text: green; }. But I think using variables like --wp-gs-paragraph-color-text still makes sense the reason being that we don't which selector to use to select the block (in this case is "p" but it could be another thing) blocks would need to configure their selector. It would mean during styles generation on every page load; we would need to load their configuration files. Also, for cases where, for example, we want to change global styles inside a specific group e.g., change headings color inside a group but not the text color, the generated styles would be complex. So I guess for blocks documentation, a block can specify which global styles affect that block, and from there, we can know the specific names of variables for that block. Of course, programmatically, a plugin could also identify which global styles affect the block. |
@youknowriad Thank you for all of your feedback! After that discussion, it sounds like there we need some of WP global styles "environment flag" of some kind. In this case, in the form of a global
After seeing your example, the If we change that though, there may be a slight disconnect between a I think that may be okay to start. @jorgefilipecosta Would love your thoughts! I'm okay either way, as the principle of the implementation seems to be viable 👍 . I feel comfortable landing this as is, or with the modification to the namespace. Thank you all! |
be1ddec
to
6e6bf25
Compare
@@ -36,6 +36,10 @@ $blocks-button__height: 56px; | |||
} | |||
} | |||
|
|||
.wp-gs .wp-block-button__link:not(.has-background) { | |||
background-color: var(--wp-block-core-button--color--background, var(--wp-color--primary, $dark-gray-700)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jorgefilipecosta Halloo!!! Just wanted to verify! It looks like there are two hyphens after the prefix, example:
--wp-block-core-button--color--background
Note: --color--background
Is this intentional?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, it is intentional to remove ambiguity. If we don't add two hyphens, we don't know if the variable represents this object { ... { color: { background: ... } } } or this one { ...{ 'color-background': ... } }. Having two different object shapes generate the same variables is something that would, for sure, cause problems as an object may overwrite the styles of another object when it is not supposed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cool! I'm down with this approach 👍
Thank you!
There is one thing that I would like to understand better. How do you envision the future of the {
"global": {
"color": {
"primary": "green",
"background": "red",
"text": "red"
}
},
"blocks": {
"core/paragraph": {
"color": {
"text": "hotpink"
}
},
"core/button": {
"color": {
"background": "pink"
}
}
}
} What I mean by that is, the way it's structured makes it very easy to modify default global styles for all individual blocks. However, it might be not the best approach in terms of maintenance if it would be something that is done manually and need to support modifications on many individual blocks. I It will become more evident once there are examples where people try to apply the same type of overrides for blocks that share similar characteristics, e.g. change text color to pink for all text blocks, or change the background color for all media blocks. In the current shape, all custom blocks couldn't be supported in It's not that important at the moment but something we should think about in the long term. One thing to consider could be adding |
* Use Select: Fix render queue. (#19286) * Use Select: Fix render queue issues. * Use Select: Make `isMounted` more informative. * Framework: Reset lockfile changes to dependencies Co-authored-by: Andrew Duthie <andrew@andrewduthie.com> * Project Management: Run pull request automation on closed (#19742) * Try/group block custom text color (#19181) * Add text color selector to group block to allow setting a text colour that applies to all children of the group to avoid having to set text colour on every individual child * Block Editor: Handle LinkControl submission via form handler (#19651) * Block Editor: Handle LinkControl submission via form handler * E2E Tests: Unskip intermittent buttons test failure * Added conditions and new translation strings for BlockMover (#19757) * Added conditions and new translation strings for BlockMover * Moved translator comments into sprintf function * Storybook: Add Placeholder component story (#19734) * Add Placeholder story for storybook * Update storybook test snapshot * Project Management: Fix pull request merge automation errors (#19768) * Framework: Use fixed version of checkout action Avoid unintended breaking changes. To a lesser extent, helps clarify that this tag refers to the _version of the action_, not the branch being checked out. * Framework: Configure PR automation checkout to master branch * Add post requests documentation for apiFetch (#19759) * Multi-select: don't focus first selected block (#19762) * Multi-select: don't focus first selected block * Move CopyHandler outside WritingFlow * Fix click appender * Remove useless line * Update: Readme.txt Link to changelog instead of adding it inline(#19761) * Fix: Media & Text: "Crop image to fill entire column" reset on image change (#19765) * Build: Include JSON files in zip archive (#19772) * Build: Include JSON files * Zip build script: Include json files in `build/block-library/blocks/` Co-Authored-By: Jorge Bernal <jorge@automattic.com> Co-authored-by: Jorge Bernal <jbernal@gmail.com> * Makes appenders visible only for the current selection (#19598) * makes appenders visible only for the current selection * adds smaller footprint to appenders in navigation, only shows them if item has descendants * align appender to level of the menu item, remove useless CSS * Core-data: do not publish outdated state to subscribers during updates (#19752) * Core-data: do not publish outdated state to subscribers during updates Calling `saveEntityRecord` with an update does the following: 1. Calls `getEntityRecord` to fetch the current persisted state of the entity record 2. Calls `receiveEntityRecords` with the new up-to-date state to render the updates 3. Sends an API fetch with the update patch to persist the update 4. Calls `receiveEntityRecords` again with the new up-to-date *persisted* state The issue here, is that point 1 (Calling `getEntityRecord`) not only fetches the persisted state, but it also internally calls `receiveEntityRecords` itself . This results in the persisted outdated server state to be rendered on the UI, causing a flickering effect, that jumps pack when point 2 takes turn. This commit removes the call to getEntityRecord, and instead, it just calls receiveEntityRecords with the local up-to-date state of the entity record. This fixes the flickering issue. * Core-data: update tests to match saveEntityRecord yeilded actions Given `saveEntityRecord` no longer selects `getEntityRecord`, which itself triggers a SELECT action, two SELECTs are no longer yielded. This commit removes the expectation of these two SELECTs. * Core-data: Introduce getEntityRecordNoResolver selector To allow saveEntityRecord access the latest local full version of an entity without issung an API request. This prevents propogating outdating states to subscribers when saveEntityRecord is called. See: #19752 (comment) * Address review comments at #19752: 1. Capitalize alll added comment messages 2. Alias getEntityRecord with getEntityRecordNoResolver instead of copying it 3. Use describe.each instaed of looping manually in selectors tests * Add WordPress primitives package (#19781) * navigation-link: set page id in the attrs (#18641) * Project management: Add step that updates CHANGELOG files before npm releases (#19764) * Navigation Block: Add submenu chevron w/ setting (#19601) * Initialize setting in the nav block settings panel * Add submenu icon * Register "showSubmenuIcon" attributes * Add submenu icon to front-end of the page * Update submenu icon setting description * Don't use <span> for RichText element * Isolate NavigationLink icons * Clean up a little * Use <span> for NavigationLink contents * Rename `$level_zero` to `$is_level_zero` * Add missing spaces * Update submenu icon selector in style.scss * Add comment about span-wrapping * Fix phpcs errors * Remove unused styles * Fix failing e2e tests * Update failing snapshots * Embed: Fix failure placeholder alignment/sizing (#19673) * Fix error message sizing + alignment in Embed Placeholder * Fix Table placeholder input vs button alignment * Adjust spacing between error message and buttons * Fix card component sub-component example code (#19802) * Introduce the Icons package (#17055) * Expose @wordpress/icons to react-native (#19810) * Block popover: allow scrolling over (#19769) * Block popover: allow scrolling over * Clean up * Fix overlapping inserter popover * Better comment * Multi select: keep selection after move (#19784) * Multi select: keep selection after move * Add e2e test * Change e2e test * Address feedback * Fix snapshots * Bump plugin version to 7.3.0 * Navigation: Select parent navigation block on handleCreateFromExistingPages() action (#19817) * Paragraph block: remove dead CSS (#19821) * Bundle the icons package instead of using it as an external (#19809) * Move a dozen of block icons to the icons package (#19808) * Chore: Improve package-lock.json configuration * Add mkevins and pinarol as code owners for gallery block (#19829) * Added shippedProposals (#19065) * Added shippedProposals * Setting shippedProposals during init * Rich text: remove is-selected class (#19822) * Rich text: prefix is-selected class * Adjust more cases * Remove the class * Move more block SVGs to the icons package (#19834) * Block: use context to provide selected element (#19782) * Block: use context to provide selected element * Include multi selection nodes * Add comment * Popover: clean up requestAnimationFrame (#19771) * Popover: clean up requestAnimationFrame * Cancel the last request before a new request * Update: Removed editor store usage from native mobile block ed… (#18794) * Navigation: Manage navigation link appender visibility based on current selection (#19846) Show the navigation link appender when the selected item has descendants and is selected, or if it's the parent of the selected block. * Remove editor dependency from the block library (#16160) * Add AnglePicker Component; Add useDragging hook (#19637) This commit adds a component to pick angles and a hook to make dragging things easier to implement. Some components will be refactored to use the new hook e.g: the custom gradient picker. * Testing: Use deterministic selectors for incremented IDs (#19844) * Innerblock Templates Docs Link Typo Issue Fixed (#19813) * Innerblock Templates Docs Link Typo Issue Fixed * Innerblock Templates Docs Link Typo Issue Fixed * Rich text: enable if multi selection is aborted (#19839) * Block Directory: Refactor the reducer by breaking out the block management actions into their own reducer. (#19330) * Block Directory: Refactory the reducer by break out the block management actions into their own reducer. * Moved hasPermission into its own reducer. * Also remove the 'items' list as it's not being used * Update the getInstalledBlockTypes selector to point to the new reducer that manages installs. * Update typo in test. * Remove the lodash dependency in the selectors. It isn\'t necessary. * Fix panel header styles (#19842) * Move more block icons to the icons package (#19838) * Bump @babel/preset-env to 7.8.3 (Optional Chaining!) (#19831) * Bump babel to 7.8.3 * Added test for optional chaining * Bump other babel packages. * Fix * Changelog Update CHANGELOG.md * Update package-lock.json Co-authored-by: Grzegorz (Greg) Ziółkowski <grzegorz@gziolo.pl> * Style improvements for template previews (#19763) * First scaffold for template previews (mobile only) * WIP: managed to make the preview show, saving as a checkpoint - BlockEditorProvider needs an update so it uses the subRegistry - We need a better way to only render the picker on the main block list - We need to make the bottom sheet full height, and adapt the block preview accordingly * Set a fixed height for the template preview * Move template picker to the toolbar * Read only block list * Lint fixes * Made scrolling sort of working with read only block list * A longer template to test scrolling * Replace BottomSheet with Modal for previews * Allow closing previews with back button on Android * Revert changes to BlockList that were required for bottom sheet integration * Revert changes to BottomSheet * Add usage example for ModalHeaderBar * Improve accessibility of template preview * Improve accessibility of ModalHeaderBar * Remove unused imports * Added missing web file * RNMobile - Page template picker: apply layout from the preview * RNMobile - Layout preview: apply action * RNMobile - Page templates - set layout action * Remove mobile action from docs * New components for modal header buttons * Fix alignment of modal header buttons * Fix metrics for iOS modal header * Add subtitle to preview header * Use named color for modal header button * Updated modal title color and weight * Make Apply button bolder on iOS * Make Apply button bolder on iOS * Fix vertical alignment for close button * Allow modal rotation on iOS * Fix modal background on dark mode * Fixed dark mode for template previews * Revert changes to editor store after bad merge * Add material close icon for modal header * Tweak modal title colors * Lint fixes Co-authored-by: Gerardo Pacheco <gerardo.pacheco@automattic.com> * [RNMobile] Release v1.21.0 to master (#19854) * Adding empty function to RichText children call. (#19818) This fixes a crash originated on this PR: #19536 ` * Disable gallery image size options on mobile (#19828) * Revert "Disable gallery image size options on mobile (#19828)" This reverts commit 47b74aa. Co-authored-by: Matthew Kevins <mkevins@users.noreply.github.com> * Packages: New create-block package for block scaffolding (#19773) * Packages: New create-block package for block scaffolding * Promote action handler to async to make implementation simpler * Pass the prop for selection color. (#19635) * Do not use the deprecated package editor for InnerBlocks component (#19869) * Remove dead is-hovered selectors (#19870) * Move is-navigate-mode class to WritingFlow (#19868) * [RNmobile] Upgrade to RN 0.61.5 (#19369) * `focusable` replaced `clickable See facebook/react-native#25274 * Provide a native colors.native.scss * Upgrade React Native version in Gutenberg web repo * Jest doesn't have hasteImplModulePath anymore * Work around other regressions. Will revert when those fixed * Bump react-native version to 0.61.5 * Update babel-jest to try fixing babel-plugin-jest-hoist jest.mock issue * Update jest to try fixing babel-plugin-jest-hoist jest.mock issue * Pin xmldom to older version to bypass license file ambiguity With newer versions, the license check script doesn't recognise that the package is dual licenced and is reporting it as incompatible. This commit pins the package to an older version. There is no functional difference between the two versions, see xmldom/xmldom@v0.1.27...v0.1.30 * Revert "Provide a native colors.native.scss" This reverts commit b05f1e4. This shouldn't be needed anymore after wordpress-mobile/gutenberg-mobile#1683 * Revert "Pin xmldom to older version to bypass license file ambiguity" This reverts commit 7e3c2b5. * Cater for lowercase OR in licenses types Props to @pento for the solution #19369 (comment) * Update package-lock.json via npm v6.13.6 * Check for the same "or" format as we're splitting Otherwise, the 'or' in `GPL-2.0-or-later` causes an infinite recursion. See error in https://travis-ci.com/WordPress/gutenberg/jobs/278348885. * Update package-lock.json after running run check-local-changes * Fix package-lock.json conflicts by keeping Jest to 24.9.0, Babel to 7.8.3 * Update package-lock by running npm install * Update README.md (#19876) Fix typo * Multi selection: fix intermittent e2e failure (#19865) * Move more block icons to the icons library (#19862) * Paragraph block: remove min-height (#19835) * Paragraph block: remove min-height * Use lineheight to set drop cap min height * Framework: Fix server-registered fixtures script (#19884) * Env: Format run output only for terminal display * Framework: Fix server-registered fixtures script * Testing: Regenerate server-registered fixtures * Testing: Regenerate navigation block fixture * Env: Fix CHANGELOG typo "or" * Shortcode Design Review (#19852) * Update style of shortcode based on design review * Fix title colors * Update component to components in CONTRIBUTING.md (#19914) * Apply sentence case formatting to PanelBody titles (#19901) * Color Settings -> Color settings * Block PanelBody titles: Settings -> settings * Clarify when isEligible function is called (#19899) Added a note that isEligible is only used for valid blocks and is not called for invalid blocks. * Block Editor: Refactor ObserveTyping as function component (#19881) * Block Editor: Refactor ObserveTyping as function component * Block Editor: ObserveTyping: Avoid persisting event * Remove unnecessary import from playground (#19893) * Documentation: Organize Contributors Guide (#19853) * Simplify CONTRIBUTING.md to be just guidelines We don't need to include too much here because the real information for contributing is in the handbook. This page is a standard page for Github repos, so trimming it down to just a few links to sections in the handbook. Plus the policies for code of conduct and GPL. * Add design contribution from CONTRIBUTING.md to design page * Cleanup and organize Contributors Guide * Use consistent Contributors Guide title * Move Principles and catch-all docs to Project Overview section * Switch background to more relevant repository management * Apply suggestions from code review Thanks for the fixes 👍 Co-Authored-By: Chris Van Patten <hello@chrisvanpatten.com> * Fix extra newlines * Standardize on Contributor Guide, matches core handbook * Update manifest Co-authored-by: Chris Van Patten <hello@chrisvanpatten.com> * [RNMobile] Correct isMobile condition in nested Media&Text (#19778) * Correct isMobile condition in nested Media&Text * Do not export BREAKPOINTS * Blocks: Match blocks in the inserter using keywords from patterns (#19243) * Blocks: Match blocks in the inserter using keywords from patterns * Ensure that matched patterns with the search term are marked * Introduce scopes for block patterns * Make it possible to apply initial attributes and inner blocks directly from the inserter * Update block preview in the inserter to use attributes from the variation * Change the way patterns are handled in the inserter * Update packages/block-editor/src/components/block-types-list/index.js Co-Authored-By: Miguel Fonseca <miguelcsf@gmail.com> * Improve the way patterns are added to the inserter * Rename pattern label to patter title to align with block types * Inserter: Don't auto-add block if it has variations Co-authored-by: Miguel Fonseca <miguelcsf@gmail.com> * Block editor: Alt+F10 shouldn't scroll to top (#19896) * Add e2e test * Leave fixed position until position can be set * Multi-selection: fix clearing with side click (#19787) * Multi-selection: fix clearing with side click * Add e2e test * [RNMobile] fix show appender and separator in Group block (#19908) * fix appender to duplicate separator line * Add docs for LocalAutosaveMonitor and __experimentalUpdateLocalAutosaveInterval (#19915) * [RNMobile] Add media edit icon to image block (#19723) * Creates a MediaEdit component that shows a picker * Add Gridicon's customize icon * Show a button in images block that displays a picker * Fix lint issues * Fix no-shadow error * Fix the name of the params * When "Edit" is selected, request the Media Editor * Fix lint issues * Change media editor ID to a constant * When "Replace" is tapped, show all available media options * Fix lint issues * Avoid destructuring * Block Library: Handle Popover onClose for LinkControl (#19885) * Block Library: Handle Popover onClose for LinkControl * E2E Tests: Verify link popover Escape handling * Disable Autocomplete in shortcode block (#19848) * Disable Autocomplete in shortcode block * RichText API: Limit `prefix` transformations to Paragraph (#19727) … and any consumer of RichText that provides experimental prop `__unstableAllowPrefixTransformations.` * Block Editor: LinkControl: Resolve error when undefined value, "view" state (#19856) * Block Editor: LinkControl: Resolve error when undefined value, "view" state * Block Editor: LinkControl: Document only url, title, opensInNewTab value properties * Block Editor: LinkControl: Change documented example to reference known value property * [RNMobile] Revert change to fix Action Sheet (#19934) * Revert "Avoid destructuring" This reverts commit e113310. * Fix the var name * Add background color support to Columns block (#17813) * Add attributes * Update edit function * Update save function * Add .has-background style * Improve has-background and backgroundColor.class checks * Try passing the columns block e2e test * Refactor to use __experimentalUseColors * Normalize has-background padding with variables * Remove extra bit * Fix RTL styling for Media Text block (#18764) * Add proper !rtl ignore comments to maintain styling on RTL * Tweak comment * Add direction: ltr (not ignored) to the content container * change order of composing style in svg primitive (#19927) * Add Prettier formatting script (#18048) * Add Prettier NPM dependency to packages/scripts and top-level * Scripts: export the fromProjectRoot function from scripts/utils module * Scripts: Add Prettier formatting script * ESLint config: use default (linebreak before ternary op) config for operator-linebreak rule * ESLint: disable formatting rules in the recommended config Adds `eslint-config-prettier` to the recommended config and creates an alternative `recommended-with-formatting` config for project that want to keep ESLint formatting rules and opt-out of Prettier. * Scripts: the format-js script checks if Prettier is present and has top-level config Prettier presence in a `wp-scripts`-powered project is optional, and the `format-js` script checks if it's there and if it's indeed the fork (`wp-prettier`). Will report error otherwise. Also, require a top-level Prettier config to be present. We can't default to the one inside `wp-scripts`, because IDE and editor integrations won't find it there and will use the Prettier defaults. * Bump the minimum required version of npm to 6.9.0 * Add ESLint config changes notice to changelog * Update package-lock.json * Regenerate package-lock.json Co-authored-by: Grzegorz (Greg) Ziółkowski <grzegorz@gziolo.pl> * Components: FontSizePicker: Adjust Select Button sizing (#19479) * Documentation: fix typo "Th" to "The" (#19833) * [RNMobile] Long-press on inserter to show options for "add above" and "add below" (#18791) * Add onLongPress prop to Button * Show inserter menu on long press * Make onLongPress a prop of toggle * Make withSelect of Inserter return destinationRootClientId * Insert default block before the selected one on long press * Add add canReplaceBlock key to the insertionPoint state * Hide a block in list only if it can be replaced * Move insertion index logic from menu to inserter * Update selector tests for newly added key in state * Add insertionIndexAfter and isAnyBlockSelected props with selector * Update docs for newly added key in state * Add insertionType to component state and map to insertion index * Refactor insertion index logic * Show BottomSheet on long press to choose to insert before or after * Update UI strings to be title case * Hide cancel button from Bottom Sheet on Android * Add icons to Bottom Sheet options on Android * Add “Replace Current Block” option to menu on long-press * Scroll to newly added block if it doesn't trigger keyboard to open * Change “Replace Current Block” menu icon on Android * Use shorter syntax for setState * Rename getShouldReplaceBlock method to shouldReplaceBlock * Revert "Scroll to newly added block if it doesn't trigger keyboard to open" This reverts commit 9c1c71d25eb573427ca09761bd3154286d19539b. * Revert “Add canReplaceBlock key to the insertionPoint state" * Remove Block show/hide logic from BlockList * Update Inserter local state to store block insertion information * Make InserterMenu add/remove unmodified default block during replace * Handle replacing last remaining block * Fix Inserter test * Fix code style issue * Move insertion options into getInsertionOptions function * Add comment about removing last block case * Use findByProps instead of toJSON when testing Inserter * Docs: Add details for format-js to @wordpress/scripts package (#19946) * Docs: Add details for format-js to @wordpress/scripts package * Update README.md * Update packages/eslint-plugin/CHANGELOG.md Co-Authored-By: Marcus Kazmierczak <marcus@mkaz.com> Co-authored-by: Marcus Kazmierczak <marcus@mkaz.com> * Fix: Crash when creating a hierarchical post without title (#19936) * Fix: Color Gradients component was not able to handle only gra… (#19925) * Add markdownlint script to lint docs markup (#19855) * Add markdownlint script to lint docs markup Adds a new script `lint-md-docs` that runs markdownlint to lint markdown files for proper syntax. A default `.markdownlint.json` config is included, it will require some testing to tune. Fixes #12426 * Clarify naming of lint-md scripts js and docs - Updates lint-md scripts to lint-md-js for linting source included in the document and lint-md-docs for linting the markup of the document itself. - Update scripts changelog - Update readme with commands * Apply suggestions from code review Co-Authored-By: Grzegorz (Greg) Ziółkowski <grzegorz@gziolo.pl> * Fix URL for markdownlint CLI * Add -i check, details around ignore on CLI * Check for additional project config files * Update script commands to all for lint:* * Local changes applied to package-lock.json * Update packages/scripts/README.md Co-Authored-By: Grzegorz (Greg) Ziółkowski <grzegorz@gziolo.pl> * Apply suggestions from code review Thanks for the review and updates 👍 Co-Authored-By: Grzegorz (Greg) Ziółkowski <grzegorz@gziolo.pl> Co-authored-by: Grzegorz (Greg) Ziółkowski <grzegorz@gziolo.pl> * Use require.resolve() instead of <rootDir> in @wordpress/jest-preset-default (#19957) * use require.resolve() instead of <rootDir> * formatted * added changelog entry (#19958) * Move the insert dashicon to the icons package (#19943) * Replace all occurences of the yes dashicon with the check icon from the icons package (#19926) * Build: Include block.json files in the build output (#19786) * Block Editor: LinkControl: Prevent focus loss in edit mode toggle (#19931) * Block Editor: LinkControl: Prevent focus loss in edit mode toggle * Block Library: Remove custom focus loss protection Previously used effect lifecycle to anticipate and respond to focus loss. Now, focus loss is prevented by LinkControl. See: 722a4d6dec * Block Editor: Rephrase and move forced input rendering comment * Block Editor: Ensure isEndingEditWithFocus always assigned as boolean * Move Alignment, movers and trash icons to the icons package (#19944) * Navigation Block: Move the link description panel below the SEO panel because this is likely to be used signficantly less than the SEO panel. (#19917) * Update hover and focus selectors for Move to Trash to ensure they're always red (#19974) - Updates the selectors in .editor-post-trash to use similar specificity as .components-button.is-link for the hover and focus states to ensure that they are always red. * Create block: Code quality improvements for the block scaffolding (#19867) * Create block: Code quality improvements for the block scaffolding * Improve the strucutre and handling of templates Props to @aduth for the proposal: #19773 (comment). * Ensure that package-lock.json file is refreshed with the changes from master * Docs: Add a note about version and help options * Code style: Run Prettier formatting on the package files * Create block: Align .editorconfig with Gutenberg settings * Fix: Use the description provided to fill the `description` field in `package.json` file in ESNext template * Fix: Ensure that values provided for slug and namespace get converted to lower case * Fix: Simplify the logic for transforming slug to title * Update packages/create-block/lib/templates.js Co-Authored-By: Andrew Duthie <andrew@andrewduthie.com> Co-authored-by: Andrew Duthie <andrew@andrewduthie.com> * Code quality: Enable linting for JS files starting with . * Popover: fix typo in removing event listener (#19978) * Eslint Plugin: Lint code formatting. (#19963) * Eslint Plugin: Lint code formatting. * Gutenberg: Add code formatting pre-commit hook. * Eslint Plugin: Update docs. * Gutenberg: Format code. * Storybook: Update snapshots. * [RNMobile] Show the media edit icon only if the block is selected (#19961) * Only shows the media edit icon if the block is selected Also, matches the style of the native gallery block buttons * Fix lint * Fix: Admin menu collapses for 960px width but editor doesn't (#19970) * Chore: Fix differences in package-lock.json file * RichText: try using hooks for wrapper component (#19095) * Components: Apply width-based modifier classes to Placeholder only when width is known (#19825) * Components: Apply `is-small` modifier class to Placeholder only when width known * E2E Tests: Wait for placeholder error display in embed tests * Testing: Update snapshots for Placeholder class assignment * Eslint: set line width to 80 (#19992) * Update config * npm run lint-js:fix * Move eslint comments * Update snapshots * Editor: Remove post title escaping (#19955) * Add: Global styles css variables generation mechanism (#19883) * Navigation: Change UX to move focus to navigation link label and close the LinkControl (#19686) * When adding a link via the LinkControl, selects/highlights nav link label text if it's url-like. Focuses if not. Automatically adds url-like labels as the label. * Adds @wordpress/dom to package-lock.json * Removed test for awaiting for Link Control focus after pressing Enter, as the focus should now be on the navigation link text with the Link Control closed * Lib: Limit `pre_render_block` extension. (#19989) * Lib: Limit `pre_render_block` extension. * Update lib/compat.php Co-Authored-By: Andrew Duthie <andrew@andrewduthie.com> Co-authored-by: Andrew Duthie <andrew@andrewduthie.com> * Fix, update, and sort _rc_ `hasProjectFile` filenames (#19994) * Update and fix `hasProjectFile` filenames * Sort `hasProjectFile` filenames * Update CHANGELOG.md * Docs: Include CHANGELOG entries from the relocated create-wordpress-block package * Blocks: Rename patterns to variations in the Block API (#19966) * Blocks: Rename patterns to variations in the Block API * Fix: Remove ESLint errors and warnings related to block variations * [Mobile] Fix gallery upload sync (#19941) * Invoke mediaUploadSync for gallery in React hook * Use integer type explicitly for gallery image id * Set state before attributes on upload success in gallery image * Use ref hook for concurrency in media placeholder * Extract dedup function and add comments in media placeholder * Fix lint * Use explicit radix with parseInt Co-Authored-By: Gerardo Pacheco <gerardo.pacheco@automattic.com> * Import useRef from @wordpress/element * Fix lint * Fix lint / prettier Co-authored-by: Gerardo Pacheco <gerardo.pacheco@automattic.com> * [Mobile] Fix blank image size labels on mobile (#19800) (#20045) * Fix blank image size labels on mobile * Use name instead of label in default imageSizes * [RNMobile] Enable Dismiss on PlainText in Android (#20095) * Add flag for determining if running on Android * Enable Dismiss button on PlainText. Enable show keyboard in Android on PlainText mount * Enable Dismiss button on PlainText. Enable show keyboard in Android on PlainText mount Co-authored-by: Enrique Piqueras <epiqueras@users.noreply.github.com> Co-authored-by: Andrew Duthie <andrew@andrewduthie.com> Co-authored-by: Glen Davies <glendaviesnz@users.noreply.github.com> Co-authored-by: Christopher Reece <momotofu@users.noreply.github.com> Co-authored-by: Marcus Kazmierczak <marcus@mkaz.com> Co-authored-by: Ella van Durpe <ella@automattic.com> Co-authored-by: Jorge Costa <jorge.costa@developer.pt> Co-authored-by: Bernie Reiter <ockham@raz.or.at> Co-authored-by: Jorge Bernal <jbernal@gmail.com> Co-authored-by: andrei draganescu <me@andreidraganescu.info> Co-authored-by: Omar Alshaker <omar@omaralshaker.com> Co-authored-by: Riad Benguella <benguella@gmail.com> Co-authored-by: Damián Suárez <rdsuarez@gmail.com> Co-authored-by: Grzegorz (Greg) Ziółkowski <grzegorz@gziolo.pl> Co-authored-by: Bart Kalisz <bartlomiej.kalisz@gmail.com> Co-authored-by: Jon Quach <hello@jonquach.com> Co-authored-by: Edi Amin <to.ediamin@gmail.com> Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com> Co-authored-by: Jerry Jones <jones.jeremydavid@gmail.com> Co-authored-by: Matthew Kevins <mkevins@users.noreply.github.com> Co-authored-by: Abdelmajid HAMDANI <abdel.hamdani213@gmail.com> Co-authored-by: Delowar Hossain <delowardev@gmail.com> Co-authored-by: Steven Dufresne <steve.dufresne@automattic.com> Co-authored-by: Adam Boro <adam@adamboro.com> Co-authored-by: Kukhyeon Heo <sainthkh@naver.com> Co-authored-by: Gerardo Pacheco <gerardo.pacheco@automattic.com> Co-authored-by: etoledom <etoledom@icloud.com> Co-authored-by: Sérgio Estêvão <sergioestevao@gmail.com> Co-authored-by: Florian TIAR <florian.tiar@theculturetrip.com> Co-authored-by: Chip <chip.snyder3@gmail.com> Co-authored-by: Haz <hazdiego@gmail.com> Co-authored-by: Rich Tabor <hello@themebeans.com> Co-authored-by: Benjamin Intal <bfintal@gmail.com> Co-authored-by: Rostislav Wolný <rwolny@gmail.com> Co-authored-by: Chris Van Patten <hello@chrisvanpatten.com> Co-authored-by: Luke Walczak <lukasz.walczak.pwr@gmail.com> Co-authored-by: Miguel Fonseca <miguelcsf@gmail.com> Co-authored-by: jbinda <jakub.binda@gmail.com> Co-authored-by: Leandro Alonso <contato@leandroalonso.com> Co-authored-by: Jarda Snajdr <jsnajdr@gmail.com> Co-authored-by: Martin Posselt <nekomajin@gmx.de> Co-authored-by: Ceyhun Ozugur <ceyhunozugur@gmail.com> Co-authored-by: James Newell <jameslnewell@users.noreply.github.com> Co-authored-by: Andy Peatling <apeatling@users.noreply.github.com> Co-authored-by: Andrew Serong <14988353+andrewserong@users.noreply.github.com> Co-authored-by: Stephen Edgar <stephen@netweb.com.au>
@@ -0,0 +1,9 @@ | |||
{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This file isn't included in the plugin:
https://plugins.trac.wordpress.org/browser/gutenberg/tags/7.7.1
Because we whitelist files to include in the ZIP, and this isn't one of them:
gutenberg/bin/build-plugin-zip.sh
Lines 112 to 125 in 56a12a6
build_files=$(ls build/*/*.{js,css,asset.php} build/block-library/blocks/*.php build/block-library/blocks/*/block.json) | |
# Generate the plugin zip file. | |
status "Creating archive... 🎁" | |
zip -r gutenberg.zip \ | |
gutenberg.php \ | |
lib \ | |
packages/block-serialization-default-parser/*.php \ | |
post-content.php \ | |
$vendor_scripts \ | |
$build_files \ | |
readme.txt \ | |
changelog.txt \ | |
README.md |
We could simply add the pattern there, but I also think we should try to align some convention of where we want these sort of static files to live.
- https://github.com/WordPress/gutenberg/tree/master/lib/demo-block-template-parts
- https://github.com/WordPress/gutenberg/tree/master/lib/demo-block-templates
- https://github.com/WordPress/gutenberg/tree/master/lib/patterns
If we move this into lib
or a subfolder, it would be included.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR moves it within lib/global-styles
.
Description
Part of: #19611
This PR adds the mechanism that with the default WordPress global styles and a theme.json file generates a set of CSS variables representing these global styles.
Basically, we implement the Resolver concept referred in #19611.
As a follow, we will also retrieve user overwrites for the global styles from the database that will take priority over theme and defaults.
Blocks should consume these global variables as part of their styles by using CSS variables. As a sample, I converted the button in a back-compatible way.
This PR also adds wp-gs to the body of the frontend and the editor if the theme supports global styles (defines a theme.json file).
How has this been tested?
Create a file named experimental-theme.json in the root directory of the currently enabled theme.
Add the following contents to the file:
Add a button block verify the background by default is pink on the editor and frontend. Verify that when the user selects a color for the button, it is applied.
Delete "core/button" section from theme.json
Reload the post and verify that the button is now green (primary color on the theme.json file).
Delete the primary color from theme.json and verify the button color is now #52accc (default primary color).