diff --git a/package-lock.json b/package-lock.json index d5615eb8e2df1..2819636e591fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -99,7 +99,7 @@ "@octokit/rest": "16.26.0", "@octokit/types": "6.34.0", "@octokit/webhooks-types": "5.6.0", - "@playwright/test": "1.42.1", + "@playwright/test": "1.43.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", "@react-native/babel-preset": "0.73.10", "@react-native/metro-babel-transformer": "0.73.10", @@ -6979,12 +6979,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.42.1.tgz", - "integrity": "sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.0.tgz", + "integrity": "sha512-Ebw0+MCqoYflop7wVKj711ccbNlrwTBCtjY5rlbiY9kHL2bCYxq+qltK6uPsVBGGAOb033H2VO0YobcQVxoW7Q==", "dev": true, "dependencies": { - "playwright": "1.42.1" + "playwright": "1.43.0" }, "bin": { "playwright": "cli.js" @@ -42214,12 +42214,12 @@ "dev": true }, "node_modules/playwright": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.42.1.tgz", - "integrity": "sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.0.tgz", + "integrity": "sha512-SiOKHbVjTSf6wHuGCbqrEyzlm6qvXcv7mENP+OZon1I07brfZLGdfWV0l/efAzVx7TF3Z45ov1gPEkku9q25YQ==", "dev": true, "dependencies": { - "playwright-core": "1.42.1" + "playwright-core": "1.43.0" }, "bin": { "playwright": "cli.js" @@ -42232,9 +42232,9 @@ } }, "node_modules/playwright-core": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.42.1.tgz", - "integrity": "sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.0.tgz", + "integrity": "sha512-iWFjyBUH97+pUFiyTqSLd8cDMMOS0r2ZYz2qEsPjH8/bX++sbIJT35MSwKnp1r/OQBAqC5XO99xFbJ9XClhf4w==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -55377,7 +55377,7 @@ "npm": ">=6.14.4" }, "peerDependencies": { - "@playwright/test": "^1.42.1", + "@playwright/test": "^1.43.0", "react": "^18.0.0", "react-dom": "^18.0.0" } @@ -60722,12 +60722,12 @@ } }, "@playwright/test": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.42.1.tgz", - "integrity": "sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.0.tgz", + "integrity": "sha512-Ebw0+MCqoYflop7wVKj711ccbNlrwTBCtjY5rlbiY9kHL2bCYxq+qltK6uPsVBGGAOb033H2VO0YobcQVxoW7Q==", "dev": true, "requires": { - "playwright": "1.42.1" + "playwright": "1.43.0" } }, "@pmmmwh/react-refresh-webpack-plugin": { @@ -88595,19 +88595,19 @@ "dev": true }, "playwright": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.42.1.tgz", - "integrity": "sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.0.tgz", + "integrity": "sha512-SiOKHbVjTSf6wHuGCbqrEyzlm6qvXcv7mENP+OZon1I07brfZLGdfWV0l/efAzVx7TF3Z45ov1gPEkku9q25YQ==", "dev": true, "requires": { "fsevents": "2.3.2", - "playwright-core": "1.42.1" + "playwright-core": "1.43.0" } }, "playwright-core": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.42.1.tgz", - "integrity": "sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.0.tgz", + "integrity": "sha512-iWFjyBUH97+pUFiyTqSLd8cDMMOS0r2ZYz2qEsPjH8/bX++sbIJT35MSwKnp1r/OQBAqC5XO99xFbJ9XClhf4w==", "dev": true }, "please-upgrade-node": { diff --git a/package.json b/package.json index edf33accd328a..c7043fa9cc06e 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,7 @@ "@octokit/rest": "16.26.0", "@octokit/types": "6.34.0", "@octokit/webhooks-types": "5.6.0", - "@playwright/test": "1.42.1", + "@playwright/test": "1.43.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", "@react-native/babel-preset": "0.73.10", "@react-native/metro-babel-transformer": "0.73.10", diff --git a/packages/block-editor/src/components/block-patterns-paging/index.js b/packages/block-editor/src/components/block-patterns-paging/index.js index 76f99e24bf244..2ad9ff3405e20 100644 --- a/packages/block-editor/src/components/block-patterns-paging/index.js +++ b/packages/block-editor/src/components/block-patterns-paging/index.js @@ -45,6 +45,7 @@ export default function Pagination( { onClick={ () => changePage( 1 ) } disabled={ currentPage === 1 } aria-label={ __( 'First page' ) } + __experimentalIsFocusable > « @@ -53,6 +54,7 @@ export default function Pagination( { onClick={ () => changePage( currentPage - 1 ) } disabled={ currentPage === 1 } aria-label={ __( 'Previous page' ) } + __experimentalIsFocusable > @@ -75,6 +77,7 @@ export default function Pagination( { onClick={ () => changePage( currentPage + 1 ) } disabled={ currentPage === numPages } aria-label={ __( 'Next page' ) } + __experimentalIsFocusable > @@ -84,6 +87,7 @@ export default function Pagination( { disabled={ currentPage === numPages } aria-label={ __( 'Last page' ) } size="default" + __experimentalIsFocusable > » diff --git a/packages/block-editor/src/hooks/layout.js b/packages/block-editor/src/hooks/layout.js index d9fa632af32ef..e044bdc1a7d27 100644 --- a/packages/block-editor/src/hooks/layout.js +++ b/packages/block-editor/src/hooks/layout.js @@ -50,13 +50,7 @@ function hasLayoutBlockSupport( blockName ) { */ export function useLayoutClasses( blockAttributes = {}, blockName = '' ) { const { kebabCase } = unlock( componentsPrivateApis ); - const rootPaddingAlignment = useSelect( ( select ) => { - const { getSettings } = select( blockEditorStore ); - return getSettings().__experimentalFeatures - ?.useRootPaddingAwareAlignments; - }, [] ); const { layout } = blockAttributes; - const { default: defaultBlockLayout } = getBlockSupport( blockName, layoutBlockSupportKey ) || {}; const usedLayout = @@ -78,12 +72,20 @@ export function useLayoutClasses( blockAttributes = {}, blockName = '' ) { layoutClassnames.push( baseClassName, compoundClassName ); } - if ( - ( usedLayout?.inherit || - usedLayout?.contentSize || - usedLayout?.type === 'constrained' ) && - rootPaddingAlignment - ) { + const hasGlobalPadding = useSelect( + ( select ) => { + return ( + ( usedLayout?.inherit || + usedLayout?.contentSize || + usedLayout?.type === 'constrained' ) && + select( blockEditorStore ).getSettings().__experimentalFeatures + ?.useRootPaddingAwareAlignments + ); + }, + [ usedLayout?.contentSize, usedLayout?.inherit, usedLayout?.type ] + ); + + if ( hasGlobalPadding ) { layoutClassnames.push( 'has-global-padding' ); } @@ -353,7 +355,11 @@ export function addAttribute( settings ) { return settings; } -function BlockWithLayoutStyles( { block: BlockListBlock, props } ) { +function BlockWithLayoutStyles( { + block: BlockListBlock, + props, + blockGapSupport, +} ) { const { name, attributes } = props; const id = useInstanceId( BlockListBlock ); const { layout } = attributes; @@ -369,7 +375,6 @@ function BlockWithLayoutStyles( { block: BlockListBlock, props } ) { const selectorPrefix = `wp-container-${ kebabCase( name ) }-is-layout-`; // Higher specificity to override defaults from theme.json. const selector = `.${ selectorPrefix }${ id }.${ selectorPrefix }${ id }`; - const [ blockGapSupport ] = useSettings( 'spacing.blockGap' ); const hasBlockGapSupport = blockGapSupport !== null; // Get CSS string for the current layout type. @@ -410,26 +415,44 @@ function BlockWithLayoutStyles( { block: BlockListBlock, props } ) { */ export const withLayoutStyles = createHigherOrderComponent( ( BlockListBlock ) => ( props ) => { - const blockSupportsLayout = hasLayoutBlockSupport( props.name ); - const shouldRenderLayoutStyles = useSelect( + const { clientId, name } = props; + const blockSupportsLayout = hasLayoutBlockSupport( name ); + const extraProps = useSelect( ( select ) => { // The callback returns early to avoid block editor subscription. if ( ! blockSupportsLayout ) { - return false; + return; + } + + const { getSettings, getBlockSettings } = unlock( + select( blockEditorStore ) + ); + const { disableLayoutStyles } = getSettings(); + + if ( disableLayoutStyles ) { + return; } - return ! select( blockEditorStore ).getSettings() - .disableLayoutStyles; + const [ blockGapSupport ] = getBlockSettings( + clientId, + 'spacing.blockGap' + ); + + return { blockGapSupport }; }, - [ blockSupportsLayout ] + [ blockSupportsLayout, clientId ] ); - if ( ! shouldRenderLayoutStyles ) { + if ( ! extraProps ) { return ; } return ( - + ); }, 'withLayoutStyles' diff --git a/packages/block-library/src/pullquote/style.scss b/packages/block-library/src/pullquote/style.scss index b53dbf6561638..07f6366d47617 100644 --- a/packages/block-library/src/pullquote/style.scss +++ b/packages/block-library/src/pullquote/style.scss @@ -1,5 +1,4 @@ .wp-block-pullquote { - padding: 4em 0; text-align: center; // Default text-alignment where the `textAlign` attribute value isn't specified. overflow-wrap: break-word; // Break long strings of text without spaces so they don't overflow the block. box-sizing: border-box; @@ -36,9 +35,10 @@ } } -// Lowest specificity to avoid overriding layout styles. +// Lowest specificity to avoid overriding layout and global styles. :where(.wp-block-pullquote) { margin: 0 0 1em 0; + padding: 4em 0; } // Ensure that we are reasonably specific to override theme defaults. diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index 84cd741f5eb74..2b67511fedc7f 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -8,6 +8,10 @@ - `ProgressBar`: Move the indicator width styles from emotion to a CSS variable ([#60388](https://github.com/WordPress/gutenberg/pull/60388)). - `Text`: Add `text-wrap: pretty;` to improve wrapping. ([#60164](https://github.com/WordPress/gutenberg/pull/60164)). +### Bug Fix + +- `ProgressBar`: Fix CSS variable with invalid value ([#60576](https://github.com/WordPress/gutenberg/pull/60576)). + ## 27.3.0 (2024-04-03) ### Bug Fix diff --git a/packages/components/src/progress-bar/index.tsx b/packages/components/src/progress-bar/index.tsx index 924d993d66c8c..ed13c036e9916 100644 --- a/packages/components/src/progress-bar/index.tsx +++ b/packages/components/src/progress-bar/index.tsx @@ -28,7 +28,9 @@ function UnforwardedProgressBar( { expect( indicator ).toHaveStyle( { width: `${ INDETERMINATE_TRACK_WIDTH }%`, } ); + expect( indicator ).not.toHaveStyle( { + '--indicator-width': expect.any( String ), + } ); } ); it( 'should use `value`% as width for determinate progress bar', () => { diff --git a/packages/dataviews/src/style.scss b/packages/dataviews/src/style.scss index c548565ef848d..1d6a6ec3b6c07 100644 --- a/packages/dataviews/src/style.scss +++ b/packages/dataviews/src/style.scss @@ -260,13 +260,16 @@ button.components-button.is-link { text-decoration: none; - color: inherit; font-weight: inherit; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; display: block; width: 100%; + color: $gray-900; + &:hover { + color: var(--wp-admin-theme-color); + } } } diff --git a/packages/scripts/package.json b/packages/scripts/package.json index a97d80578dc3c..e81954c15ae91 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -91,7 +91,7 @@ "webpack-dev-server": "^4.15.1" }, "peerDependencies": { - "@playwright/test": "^1.42.1", + "@playwright/test": "^1.43.0", "react": "^18.0.0", "react-dom": "^18.0.0" },