diff --git a/packages/block-editor/src/components/block-icon/test/__snapshots__/index.js.snap b/packages/block-editor/src/components/block-icon/test/__snapshots__/index.js.snap
index 977b1d1a5f6c82..2f36e6e3267910 100644
--- a/packages/block-editor/src/components/block-icon/test/__snapshots__/index.js.snap
+++ b/packages/block-editor/src/components/block-icon/test/__snapshots__/index.js.snap
@@ -9,12 +9,17 @@ exports[`BlockIcon renders a Icon 1`] = `
aria-hidden="true"
focusable="false"
height="24"
+ stroke="currentColor"
+ stroke-width="1.5"
+ style="fill: none;"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md
index 1944bb69f68478..a90781260ddde8 100644
--- a/packages/components/CHANGELOG.md
+++ b/packages/components/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+### Bug Fixes
+
+- `ItemGroup`: Drop the blanket `path { fill: currentColor }` rule that was overriding stroke-based icons' intended fill via inheritance bypass. Old fill-based icons remain coloured via the surrounding `svg { fill: currentColor }` rule plus normal SVG inheritance. ([#78808](https://github.com/WordPress/gutenberg/pull/78808))
+
## 34.0.0 (2026-05-27)
### Breaking Changes
diff --git a/packages/components/src/item-group/styles.ts b/packages/components/src/item-group/styles.ts
index e40598d383baf7..6b8b60f4337732 100644
--- a/packages/components/src/item-group/styles.ts
+++ b/packages/components/src/item-group/styles.ts
@@ -19,8 +19,7 @@ export const unstyledButton = ( as: 'a' | 'button' ) => {
text-align: start;
text-decoration: ${ as === 'a' ? 'none' : undefined };
- svg,
- path {
+ svg {
fill: currentColor;
}
diff --git a/packages/components/src/item-group/test/__snapshots__/index.js.snap b/packages/components/src/item-group/test/__snapshots__/index.js.snap
index a37644ae7773c8..5889885750615c 100644
--- a/packages/components/src/item-group/test/__snapshots__/index.js.snap
+++ b/packages/components/src/item-group/test/__snapshots__/index.js.snap
@@ -11,8 +11,8 @@ Snapshot Diff:
role="listitem"
>
@@ -24,8 +24,8 @@ Snapshot Diff:
role="listitem"
>
@@ -44,8 +44,8 @@ Snapshot Diff:
role="listitem"
>
@@ -114,8 +114,8 @@ Snapshot Diff:
@@ -1,18 +1,18 @@
@@ -142,8 +142,8 @@ Snapshot Diff:
@@ -1,18 +1,18 @@
@@ -170,7 +170,7 @@ Snapshot Diff:
@@ -1,8 +1,8 @@
- { icon && (
-
- ) }
+ { icon && }
{ children }
{ withChevron && (
` instead of the `fill` attribute, so the source's intent survives ordinary 3rd-party CSS overrides like `.foo svg { fill: currentColor }` without using `!important`. ([#78804](https://github.com/WordPress/gutenberg/pull/78804))
## 13.2.0 (2026-05-27)
diff --git a/packages/icons/lib/generate-library.cjs b/packages/icons/lib/generate-library.cjs
index 2c7568dd08f3b6..f39de60d480016 100644
--- a/packages/icons/lib/generate-library.cjs
+++ b/packages/icons/lib/generate-library.cjs
@@ -262,6 +262,28 @@ function svgToTsx( svgContent ) {
}
);
+ // Convert CSS-string style attributes (e.g. `style="fill: none"`) into JSX
+ // style object syntax (e.g. `style={ { fill: 'none' } }`). Source SVGs use
+ // the CSS-string form so they remain valid SVG when read by non-React
+ // renderers (the PHP path, webpack SVG loaders, raw file preview).
+ jsxContent = jsxContent.replace( /\sstyle="([^"]*)"/g, ( _, cssString ) => {
+ const declarations = cssString
+ .split( ';' )
+ .map( ( decl ) => decl.trim() )
+ .filter( Boolean )
+ .map( ( decl ) => {
+ const colonIndex = decl.indexOf( ':' );
+ const key = decl.slice( 0, colonIndex ).trim();
+ const value = decl.slice( colonIndex + 1 ).trim();
+ const camelKey = key.replace( /-([a-z])/g, ( _m, c ) =>
+ c.toUpperCase()
+ );
+ return `${ camelKey }: '${ value }'`;
+ } )
+ .join( ', ' );
+ return ` style={ { ${ declarations } } }`;
+ } );
+
// Tags that ought to be converted to WordPress primitives when converting
// SVGs to React elements
const primitives = {
diff --git a/packages/icons/src/library/add-card.svg b/packages/icons/src/library/add-card.svg
index 91a4565df69349..7bc774b83e0f41 100644
--- a/packages/icons/src/library/add-card.svg
+++ b/packages/icons/src/library/add-card.svg
@@ -1,3 +1,3 @@
-