Skip to content

Icons: Override WP_Icons_Registry singleton with Gutenberg icons registry#76455

Merged
t-hamano merged 22 commits into
trunkfrom
icons/refrection-class
Apr 8, 2026
Merged

Icons: Override WP_Icons_Registry singleton with Gutenberg icons registry#76455
t-hamano merged 22 commits into
trunkfrom
icons/refrection-class

Conversation

@t-hamano

@t-hamano t-hamano commented Mar 12, 2026

Copy link
Copy Markdown
Contributor

What?

This PR replaces the WP_Icons_Registry singleton with Gutenberg_Icons_Registry_7_1 so that all code using WP_Icons_Registry::get_instance() receives Gutenberg’s icon registry instead of the Core one.

Why?

WP_Icons_Registry was released in 7.0, but in order to continue expanding this class for future releases, we created Gutenberg_Icons_Registry_7_1, which inherits from the core WP_Icons_Registry. However, this Gutenberg class is only accessed via the REST API. This means that even if we add Gutenberg_Icons_Registry_7_1::{new_method}, it cannot be called as WP_Icons_Registry::{new_method}. This is problematic because the icon registry may be accessed directly in the future, without going through the REST API.

How?

This PR uses reflection to replace WP_Icons_Registry::$instance with the Gutenberg registry instance, ensuring that the WP_Icons_Registry class always has the latest methods.

Using reflection may feel a bit hacky, but as far as I know, it's the only way to override a singleton class.

Testing Instructions

This is one way to ensure that this PR works properly.

  • Insert an Icon block, set an icon, and save the post.
  • Open the frontend.
  • Make the following changes and reload your browser.
diff --git a/lib/class-wp-icons-registry-gutenberg.php b/lib/class-wp-icons-registry-gutenberg.php
index e361ab3372d..89dfe448474 100644
--- a/lib/class-wp-icons-registry-gutenberg.php
+++ b/lib/class-wp-icons-registry-gutenberg.php
@@ -50,6 +50,13 @@ class WP_Icons_Registry_Gutenberg extends WP_Icons_Registry {
                }
        }
 
+       public function get_registered_icon( $icon_name ) {
+               return array(
+                       'name'    => $icon_name,
+                       'content' => 'Rendered via Gutenberg_Icons_Registry class.',
+               );
+       }
+
        /**
         * Modified to also search in icon labels
         */

@github-actions

github-actions Bot commented Mar 12, 2026

Copy link
Copy Markdown

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

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

@t-hamano t-hamano self-assigned this Mar 12, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

My understanding is that this class was only needed internally to reference the Gutenberg icon registry. Now that we use reflection, this class should no longer be necessary.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Correct

@t-hamano t-hamano added [Type] Code Quality Issues or PRs that relate to code quality No Core Sync Required Indicates that any changes do not need to be synced to WordPress Core [Feature] Icons Related to Icon registration API and Icon REST API labels Mar 12, 2026
@t-hamano

Copy link
Copy Markdown
Contributor Author

@mcsf @Mamaduka, I’d like to establish an approach that allows us to continue developing the Icon API in the Gutenberg plugin while fully maintaining backward compatibility with each WordPress major version. If anyone has better ideas or suggestions, I’d love to hear them 🙏

@t-hamano t-hamano marked this pull request as ready for review March 12, 2026 16:46
@t-hamano t-hamano requested a review from spacedmonkey as a code owner March 12, 2026 16:46
@github-actions

github-actions Bot commented Mar 12, 2026

Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: mcsf <mcsf@git.wordpress.org>
Co-authored-by: im3dabasia <im3dabasia1@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@mcsf

mcsf commented Mar 12, 2026

Copy link
Copy Markdown
Contributor

I’d like to establish an approach that allows us to continue developing the Icon API in the Gutenberg plugin while fully maintaining backward compatibility with each WordPress major version. If anyone has better ideas or suggestions, I’d love to hear them 🙏

This "feels wrong" but also makes sense. The only other way I could think of was something I described here:

[…] it's technically possible to define a derived class such that, in the end, both [base and extended] classes share a static $instance. In short, it looked a little bit like this:

class Gutenberg_Foo extends WP_Foo {
    public static hijack_instance() {
        self::$instance = new self();
    }
}
Gutenberg_Foo::hijack_instance();

echo WP_Foo::get_instance() === Gutenberg_Foo::get_instance(); // 1

… but this is very hacky. I don't know what unintended consequences it may have.

The other hacky way is using PHP reflection.


The other unknown is independent of using reflection or this technique: timing. That is, where do we hook this? In my mind, the earlier we do it, the smaller the chance that the icon registry has already been called by consumers. Meanwhile, we'd probably also want to check the original instance for any registrations and "replay" them onto the new instance, right?

for icon in original_registry:
    new_registry.register( icon.name, icon )

@t-hamano

Copy link
Copy Markdown
Contributor Author

Thanks for the review!

The other unknown is independent of using reflection or this technique: timing. That is, where do we hook this? In my mind, the earlier we do it, the smaller the chance that the icon registry has already been called by consumers.

Unfortunately, when I use hooks such as plugins_loaded and after_setup_theme that run earlier, the following warning appears:

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the gutenberg domain was triggered too early. 

Meanwhile, we'd probably also want to check the original instance for any registrations and "replay" them onto the new instance, right?

You're right, addressed in 491c9fb

@Mamaduka

Copy link
Copy Markdown
Member

We could just keep copies of the registry and REST API controllers, and sync them as needed. We're already doing the same for the global styles and theme.json. It's not fancy, but it works 😄

@t-hamano

Copy link
Copy Markdown
Contributor Author

We could just keep copies of the registry and REST API controllers, and sync them as needed.

This seems like the simplest approach👍

Comment on lines +17 to +18
class WP_REST_Icons_Controller_Gutenberg extends WP_REST_Icons_Controller {
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Currently, there is no need to expand the core controller, but it may be necessary in the future.

@im3dabasia

im3dabasia commented Mar 13, 2026

Copy link
Copy Markdown
Contributor

@t-hamano , I ran into this while fetching the icons using the REST API. I think once this PR is shipped, it will solve the issue. Currently, the class with private access modifiers is being accessed by Gutenberg_REST_Icons_Controller_7_1, which is located inside the wp-includes/ folder.

Edit: I applied this PR's patch in my local, did not solve the issue 😢

image

Comment thread lib/class-gutenberg-rest-view-config-controller-7-1.php
@t-hamano

Copy link
Copy Markdown
Contributor Author

The tests were failing because I accidentally deleted unrelated code. I have fixed everything and it is ready for re-review.

@t-hamano t-hamano requested a review from mcsf April 2, 2026 11:10

@mcsf mcsf left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, just note the Reflection deprecations. Thanks for working on this :)

function gutenberg_override_wp_icons_registry() {
$reflection = new ReflectionClass( WP_Icons_Registry::class );
$property = $reflection->getProperty( 'instance' );
$property->setAccessible( true );

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Considering the deprecation of setAccessible, should we do as we did here?

if ( PHP_VERSION_ID < 80100 ) {
	$instance_property->setAccessible( true );
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Addressed in commit 60bafaa

// If the original registry was already instantiated, replay any icons outside
// the `core/` namespace onto the Gutenberg registry so they are not lost.
if ( null !== $original_registry ) {
$register_method = new ReflectionMethod( WP_Icons_Registry_Gutenberg::class, 'register' );

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Addressed in commit 60bafaa

@t-hamano t-hamano merged commit 1dc1a7f into trunk Apr 8, 2026
41 of 43 checks passed
@t-hamano t-hamano deleted the icons/refrection-class branch April 8, 2026 07:44
@github-actions github-actions Bot added this to the Gutenberg 23.0 milestone Apr 8, 2026
adamsilverstein added a commit that referenced this pull request Apr 23, 2026
…omment-type

Reconcile emoji reactions with trunk's notes architecture refactor.
Drop PR's old positioning API (reflowComments, boardOffsets,
calculatedOffset, setHeights, setBlockRef) in favor of trunk's
floating prop backed by useFloatingBoard. Preserve the reactions
data flow (reactionsMap, onToggleReaction) on top of the new
architecture. Drop require statements for icons registry files
removed in trunk (#76455).
hubot pushed a commit to nacin/wp-develop that referenced this pull request Jun 30, 2026
This updates the pinned commit hash of the Gutenberg repository from `5426109cdaf45828ef28ff8527d7d38e7e75fe74` (version `22.9.0`) to `7295bd91a3c2b64bb11dde0a12313210d9d16a12` (version `23.0.0`).

A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v22.9.0..v23.0.0.

The following commits are included:
- Classify admin-ui and dataviews to components (WordPress/gutenberg#76959)
- Add performance metrics for client-side media processing (WordPress/gutenberg#76792)
- Connectors: Update help text from 'reset' to 'manage' (WordPress/gutenberg#76963)
- Connectors: Hide Akismet unless already installed (WordPress/gutenberg#76962)
- Remove unused catch block variables across the codebase (WordPress/gutenberg#76969)
- Wrap sync update processing in try/catch (WordPress/gutenberg#76968)
- Backport: Improve validation and permission checks for `WP_HTTP_Polling_Sync_Server` (WordPress/gutenberg#76987)
- BlockMover: Remove unused disabled button props (WordPress/gutenberg#76993)
- Core Data: Fix incorrect pagination for non-paginated entities (WordPress/gutenberg#76406)
- Block Editor: Display shortcuts for moving blocks via tooltips (WordPress/gutenberg#76992)
- Convert directories in test/ to workspaces (WordPress/gutenberg#74684)
- RTC: Fix core/table cell merging (WordPress/gutenberg#76913)
- Components: Extract the autocomplete matcher into a separate function (WordPress/gutenberg#76957)
- Added Context for Next/Prev Enlarge Image (WordPress/gutenberg#76967)
- Build Tools: Update TypeScript to 6.0.2 (WordPress/gutenberg#77010)
- Text: Remove UA margins (WordPress/gutenberg#76970)
- Fix pre-existing lint errors across the codebase (WordPress/gutenberg#77002)
- Fix failing 'WP_HTTP_Polling_Sync_Server' unit test (WordPress/gutenberg#77025)
- Card: Set default foreground color on root (WordPress/gutenberg#77013)
- TypeScript: Migrate a11y package to TS  (WordPress/gutenberg#70680)
- Button: Remove unused Storybook story stylesheet (WordPress/gutenberg#77031)
- Improve CSS setup instructions in package readmes (WordPress/gutenberg#76975)
- Use Link component in details story example (WordPress/gutenberg#76997)
- @wordpress/ui: Add global CSS defense module (WordPress/gutenberg#76783)
- Autocompleters: Move and improve links search (WordPress/gutenberg#76995)
- Autocomplete: Refactor useAutocomplete to use useReducer (WordPress/gutenberg#77020)
- Components: Fix autocomplete overlapping trigger matching (WordPress/gutenberg#77018)
- Fix: A sentence has no ending punctuation in README.md file. (WordPress/gutenberg#77027)
- `ValidatedRangeControl`: Fix aria-label rendered as [object Object] (WordPress/gutenberg#77042)
- HStack, VStack: Mark as not recommended for use (WordPress/gutenberg#77041)
- Tests: Fix wp-env scripts not found in test workspaces (WordPress/gutenberg#77055)
- Bump the github-actions group across 1 directory with 2 updates (WordPress/gutenberg#77030)
- Autocomplete: Clarify 'isDebounced' setting limitation (WordPress/gutenberg#77062)
- Fix SyntaxError in Autocompleter UI when pasting matching content (WordPress/gutenberg#76961)
- Connectors: account for mu-plugins when resolving plugin.file status (WordPress/gutenberg#76994)
- Storybook: Fix E2E subpath exports and add CI build smoke test (WordPress/gutenberg#77034)
- Fix Storybook cursor Default option passing theme token (WordPress/gutenberg#77037)
- Storybook: Enable theming toolbar for wp-components (WordPress/gutenberg#77038)
- RTC: Fix "Edit as HTML" content reset during collaboration (WordPress/gutenberg#77043)
- RTC: Fix inline inserter reset on update sync (WordPress/gutenberg#76980)
- RTC: Predefined retry schedules for disconnect dialog, make more lenient (WordPress/gutenberg#76966)
- Block Editor: Prevent Enter key from inserting paragraphs in contentOnly sections (WordPress/gutenberg#76989)
- Editor: Fix 'selectedNote' action PHPDoc (WordPress/gutenberg#77080)
- Tests: Fix argument forwarding for workspace test scripts (WordPress/gutenberg#77083)
- Search block: Derive 'isSearchFieldHidden' value (WordPress/gutenberg#77082)
- Cover block: fix embed video background Error 153 in editor (WordPress/gutenberg#76904)
- Fields: Fix `postContentInfoField` when there are edits (WordPress/gutenberg#76901)
- Restore original template registration tests alongside activation variants (WordPress/gutenberg#77068)
- i18n: Make sprintf return FormattedText for type-safe createInterpolateElement (WordPress/gutenberg#76974)
- Block Editor store: refactor controlledInnerBlocks to Set (WordPress/gutenberg#77094)
- DataForm: support disabled controls (WordPress/gutenberg#77090)
- ESLint plugin: Disable `jsx-a11y/heading-has-content` (WordPress/gutenberg#77073)
- Remove remaining esModuleInterop usage (WordPress/gutenberg#77095)
- Avoid stale values in core/cover block for RTC compatibility (WordPress/gutenberg#76916)
- RTC: Add optional `shouldSync` function to entity sync config (WordPress/gutenberg#76947)
- Bump oras-project/setup-oras (WordPress/gutenberg#77096)
- RTC: Change SyncConnectionModal to isSyncConnectionErrorHandled filter and drop IS_GUTENBERG_PLUGIN check (WordPress/gutenberg#76853)
- RTC: Respect WP_ALLOW_COLLABORATION in Gutenberg for activation hook (WordPress/gutenberg#77084)
- Add iteration issue template (WordPress/gutenberg#77113)
- Media Modal Experiment: Set matching picker grid layout properties for when a user switches between layouts (WordPress/gutenberg#77118)
- contentOnly template lock: Fix block insertion and removal rules (WordPress/gutenberg#77119)
- Global Styles Revisions: Fix footer overflow (WordPress/gutenberg#77103)
- updateBlockListSettings: convert state to Map, do all updates in one action (WordPress/gutenberg#46392)
- DataViews: Fix `compact` density clipping and remove top/bottom padding (WordPress/gutenberg#77054)
- Icons: Override WP_Icons_Registry singleton with Gutenberg icons registry (WordPress/gutenberg#76455)
- Button: Remove obsolete Safari + VoiceOver workaround (WordPress/gutenberg#77107)
- E2E Tests: Ensure artifacts generate correctly and remove unnecessary artifacts (WordPress/gutenberg#77093)
- UI `Text`: Mark as recommended (WordPress/gutenberg#77044)
- ui/AlertDialog: better async confirm APIs, fully use base ui's `AlertDialog` (WordPress/gutenberg#76937)
- BlockStyleVariationOverridesWithConfig: change name and fix lint errors (WordPress/gutenberg#77130)
- Add `.scss` files to CSS module linting (WordPress/gutenberg#77140)
- BoxControl: remove unused state for icon side (WordPress/gutenberg#77143)
- Fix overflow of Highlighted white-space in Code Block (WordPress/gutenberg#77085)
- move pseudo-state slicing logic into useStyle hook (WordPress/gutenberg#77104)
- Autocomplete: Remove getAutoCompleterUI factory pattern (WordPress/gutenberg#77048)
- Add `date` field in templates and template parts (WordPress/gutenberg#77134)
- Revisions: Simplify fetching (WordPress/gutenberg#77086)
- Remove 'Home' and 'End' key usage from Navigation Tests (WordPress/gutenberg#77102)
- Guidelines: Update actions-section and import/export workflow (WordPress/gutenberg#76621)
- Image block: Hide drag handles while an upload is in progress (WordPress/gutenberg#77121)
- Build: Fix glob ignore patterns in dot-prefixed directories (WordPress/gutenberg#75114)
- Added missing documentation in `collaboration.php` (WordPress/gutenberg#77173)
- `@wordpress/ui`: add `Popover` (WordPress/gutenberg#76438)
- Add Site Tagline and Site Title to Design > Identity panel (WordPress/gutenberg#76264)
- Revision: Fix 'Show changes' button reset state (WordPress/gutenberg#77122)
- Components: update React function names for better ESLint detection (WordPress/gutenberg#77148)
- Link picker: Decode HTML entities in link preview title (WordPress/gutenberg#77170)
- MediaEdit: handle '*' wildcard in validateMimeType (WordPress/gutenberg#77168)
- Search block : Match behaviour of global styling for border and color with local styling (inspector controls) to remove inconsistency (WordPress/gutenberg#77060)
- Re-order spacing side controls when unlinked (WordPress/gutenberg#66317)
- Dataviews: remove unneeded ref callbacks (WordPress/gutenberg#77179)
- Experiment: Add revisions panel to templates, template parts and patterns (WordPress/gutenberg#77008)
- Guidelines CPT: Changes slug from wp_content_guidelines to wp_guidelines (WordPress/gutenberg#77147)
- TextArea: add disabled styles (WordPress/gutenberg#77129)
- Writing Flow: Fix format toolbar not appearing when selecting text from block edge (WordPress/gutenberg#77136)
- DataForm: Remove `text-transform` from `panel` field labels (WordPress/gutenberg#77196)
- FormTokenField: fix disabled styles (WordPress/gutenberg#77137)
- Admin UI: Increase page header vertical padding (WordPress/gutenberg#77152)
- Use entity link title for link control preview (WordPress/gutenberg#77155)
- TypeScript: migrate annotations package to TS (WordPress/gutenberg#70602)
- refactor: migrate bin/api-docs to tools/api-docs as workspace `@wordpress/api-docs-generator` (WordPress/gutenberg#77019)
- TypeScript: Migrate viewport package (WordPress/gutenberg#71118)
- UI/Tooltip: Add usage guidelines documentation (WordPress/gutenberg#77158)
- RadioControl: add support for disabling radio group (WordPress/gutenberg#77127)
- Upgrade ESLint to v10 (WordPress/gutenberg#76654)
- Add e2e test coverage for the Guidelines settings page (WordPress/gutenberg#77192)
- Admin UI: Update Page background color to surface-neutral (WordPress/gutenberg#76869)
- Fix lint-staged API docs path (WordPress/gutenberg#77203)
- PresetInputControl: Fix clearing of numeric value in custom input control (WordPress/gutenberg#77139)
- Upload external media: Ensure notice only fires once (WordPress/gutenberg#77218)
- Checkbox: fix disabled styles (WordPress/gutenberg#77132)
- FormToggle: Update disabled styles (WordPress/gutenberg#77208)
- Calendar: fix disabled styles (WordPress/gutenberg#77138)
- Textarea: remove unnecessary styles (WordPress/gutenberg#77221)
- Search Block: Ensure color settings apply to input field when button is disabled (WordPress/gutenberg#77219)
- iAPI Docs: Fix typos, code errors, and inaccuracies in the documentation (WordPress/gutenberg#76636)
- Connectors: don't clobber third-party custom render in registerDefaultConnectors (WordPress/gutenberg#77116)
- Guidelines: Improve guideline revision UX (WordPress/gutenberg#76560)
- ui/`Dialog`: update Header layout, refactor Title to use Text (WordPress/gutenberg#77161)
- ui/docs: add additional global css setup instructions (WordPress/gutenberg#77228)
- ui/VisuallyHidden: Standardize composition pattern (WordPress/gutenberg#77190)
- ui: expose `container` portal prop on all overlay Popup components (WordPress/gutenberg#77163)
- Components: Use `--wpds-cursor-control` for interactive controls (Sass only) (WordPress/gutenberg#76786)
- Card: Remove redundant margin reset from Card.Title (WordPress/gutenberg#77187)
- Theme: Rename typography tokens to use "typography" prefix (WordPress/gutenberg#76912)
- UI: Normalize render prop and ref forwarding patterns (WordPress/gutenberg#77160)
- Ensure "Retry" button is stable during retries (WordPress/gutenberg#77234)
- RTC: Improve array attribute stability when structural changes occur (WordPress/gutenberg#77164)
- Env: Fix loopback requests when running on non-default ports (WordPress/gutenberg#77057)
- Connectors: Replace speak() with notice store for state changes (WordPress/gutenberg#77174)
- Core Data: Fix 'useEntityProp' for raw attributes (WordPress/gutenberg#77120)
- Use image.copyMemory() for batch thumbnail generation (WordPress/gutenberg#76979)
- Post Author Biography: Preserve occurance of white spaces (WordPress/gutenberg#71133)
- Fix PatternsActions prop name from postType to type (WordPress/gutenberg#77251)
- Resolve package-lock.json inconsistency for @babel/eslint-parser (WordPress/gutenberg#77256)
- Fix duotone filter not applying on style variation switch (WordPress/gutenberg#77229)
- Fix: restore editor canvas padding in classic themes (WordPress/gutenberg#76864)
- DataViews: simplify `defaultLayouts` prop (WordPress/gutenberg#77232)
- getMergedItemsIds: receive full page bigger than perPage (WordPress/gutenberg#77262)
- FormTokenField: remove unnecessary styles (WordPress/gutenberg#77263)
- TypeScript: Migrate `packages/list-reusable-blocks` package to TypeScript (WordPress/gutenberg#70518)
- RTC: Add filterable flag for meta box RTC compatibility (WordPress/gutenberg#76939)
- RTC: Fix disconnect dialog due to uneditable entity (WordPress/gutenberg#77242)
- Guidelines: Try removing the jsxRuntime pragma and see what happens (WordPress/gutenberg#77255)
- DataForm: Show tooltip in edit button in `panel` layout (WordPress/gutenberg#77024)
- blocks: Convert blocks package to TypeScript (WordPress/gutenberg#76312)
- Fix Gutenberg_REST_View_Config_Controller_7_1 PHP warnings (WordPress/gutenberg#77290)
- renamed focus visible (WordPress/gutenberg#77292)
- page.waitForFunction: fix call arguments (WordPress/gutenberg#77300)
- Tabs: Simplify anchor handling (WordPress/gutenberg#77189)
- Tests: Auto-fix some new 'eslint-plugin-playwright' warnings (WordPress/gutenberg#77314)
- Tab Menu Item: simplify active tab menu item style (WordPress/gutenberg#77195)
- Eslint: Suggest alternative in `no-setting-ds-tokens` rule (WordPress/gutenberg#77154)
- Autocomplete: Fix flaky e2e tests (WordPress/gutenberg#77322)
- UI: Update `@base-ui/react` from `1.3.0` to `1.4.0` (WordPress/gutenberg#77308)
- Docs: Add README for DatePicker and TimePicker Components (WordPress/gutenberg#70365)
- UI: use Text component for Badge typography (WordPress/gutenberg#77295)
- Block Editor: Extract getElementCSSRules from useBlockProps (WordPress/gutenberg#77327)
- Edit Post: Fix warning in 'useMetaBoxInitialization' hook (WordPress/gutenberg#77311)
- Update the page slug we link to for the AI plugin after the plugin has been installed and activated (WordPress/gutenberg#77336)
- Guidelines CPT: Rename references from content guidelines to guidelines (WordPress/gutenberg#77223)
- Dialog: add explicit margin-inline-end rule to Title (WordPress/gutenberg#77334)
- Remove sandbox `allow-same-origin` for core/html blocks (WordPress/gutenberg#77212)
- Block Directory: Use `--wpds-cursor-control` design token (WordPress/gutenberg#77330)
- Registers wp_guideline_type taxonomy (WordPress/gutenberg#77156)
- DataForm: Add min/max date range support for date and datetime fields (WordPress/gutenberg#77201)
- Separator Block: Apply default block variation when inserting via `---` shortcut (WordPress/gutenberg#77135)
- Paragraph: Prevent `onEnter` splitting of parent block when insertion of that block type is not allowed (WordPress/gutenberg#77291)
- Media Upload Modal: Persist view configuration (WordPress/gutenberg#77288)
- Image block: Validate attachment ID exists before treating image as local (WordPress/gutenberg#77178)
- Tabs: remove sequential numbering from new tab labels (WordPress/gutenberg#77321)
- DataViews: Use `--wpds-cursor-control` design token for interactive controls (WordPress/gutenberg#77259)
- Post Editor: Store metaboxes RTC-compatible flag on location entries (WordPress/gutenberg#77361)
- Guidelines CPT: Skip registration when post type already exists (WordPress/gutenberg#77486)
- RTC: Fixed orphaned meta causing dirty editor state (WordPress/gutenberg#77529)
- Guidelines: Make the CPT type-aware (WordPress/gutenberg#77491)

Props adamsilverstein, jorbin, westonruter, wildworks.
Fixes #65557.

git-svn-id: https://develop.svn.wordpress.org/trunk@62580 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Jun 30, 2026
This updates the pinned commit hash of the Gutenberg repository from `5426109cdaf45828ef28ff8527d7d38e7e75fe74` (version `22.9.0`) to `7295bd91a3c2b64bb11dde0a12313210d9d16a12` (version `23.0.0`).

A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v22.9.0..v23.0.0.

The following commits are included:
- Classify admin-ui and dataviews to components (WordPress/gutenberg#76959)
- Add performance metrics for client-side media processing (WordPress/gutenberg#76792)
- Connectors: Update help text from 'reset' to 'manage' (WordPress/gutenberg#76963)
- Connectors: Hide Akismet unless already installed (WordPress/gutenberg#76962)
- Remove unused catch block variables across the codebase (WordPress/gutenberg#76969)
- Wrap sync update processing in try/catch (WordPress/gutenberg#76968)
- Backport: Improve validation and permission checks for `WP_HTTP_Polling_Sync_Server` (WordPress/gutenberg#76987)
- BlockMover: Remove unused disabled button props (WordPress/gutenberg#76993)
- Core Data: Fix incorrect pagination for non-paginated entities (WordPress/gutenberg#76406)
- Block Editor: Display shortcuts for moving blocks via tooltips (WordPress/gutenberg#76992)
- Convert directories in test/ to workspaces (WordPress/gutenberg#74684)
- RTC: Fix core/table cell merging (WordPress/gutenberg#76913)
- Components: Extract the autocomplete matcher into a separate function (WordPress/gutenberg#76957)
- Added Context for Next/Prev Enlarge Image (WordPress/gutenberg#76967)
- Build Tools: Update TypeScript to 6.0.2 (WordPress/gutenberg#77010)
- Text: Remove UA margins (WordPress/gutenberg#76970)
- Fix pre-existing lint errors across the codebase (WordPress/gutenberg#77002)
- Fix failing 'WP_HTTP_Polling_Sync_Server' unit test (WordPress/gutenberg#77025)
- Card: Set default foreground color on root (WordPress/gutenberg#77013)
- TypeScript: Migrate a11y package to TS  (WordPress/gutenberg#70680)
- Button: Remove unused Storybook story stylesheet (WordPress/gutenberg#77031)
- Improve CSS setup instructions in package readmes (WordPress/gutenberg#76975)
- Use Link component in details story example (WordPress/gutenberg#76997)
- @wordpress/ui: Add global CSS defense module (WordPress/gutenberg#76783)
- Autocompleters: Move and improve links search (WordPress/gutenberg#76995)
- Autocomplete: Refactor useAutocomplete to use useReducer (WordPress/gutenberg#77020)
- Components: Fix autocomplete overlapping trigger matching (WordPress/gutenberg#77018)
- Fix: A sentence has no ending punctuation in README.md file. (WordPress/gutenberg#77027)
- `ValidatedRangeControl`: Fix aria-label rendered as [object Object] (WordPress/gutenberg#77042)
- HStack, VStack: Mark as not recommended for use (WordPress/gutenberg#77041)
- Tests: Fix wp-env scripts not found in test workspaces (WordPress/gutenberg#77055)
- Bump the github-actions group across 1 directory with 2 updates (WordPress/gutenberg#77030)
- Autocomplete: Clarify 'isDebounced' setting limitation (WordPress/gutenberg#77062)
- Fix SyntaxError in Autocompleter UI when pasting matching content (WordPress/gutenberg#76961)
- Connectors: account for mu-plugins when resolving plugin.file status (WordPress/gutenberg#76994)
- Storybook: Fix E2E subpath exports and add CI build smoke test (WordPress/gutenberg#77034)
- Fix Storybook cursor Default option passing theme token (WordPress/gutenberg#77037)
- Storybook: Enable theming toolbar for wp-components (WordPress/gutenberg#77038)
- RTC: Fix "Edit as HTML" content reset during collaboration (WordPress/gutenberg#77043)
- RTC: Fix inline inserter reset on update sync (WordPress/gutenberg#76980)
- RTC: Predefined retry schedules for disconnect dialog, make more lenient (WordPress/gutenberg#76966)
- Block Editor: Prevent Enter key from inserting paragraphs in contentOnly sections (WordPress/gutenberg#76989)
- Editor: Fix 'selectedNote' action PHPDoc (WordPress/gutenberg#77080)
- Tests: Fix argument forwarding for workspace test scripts (WordPress/gutenberg#77083)
- Search block: Derive 'isSearchFieldHidden' value (WordPress/gutenberg#77082)
- Cover block: fix embed video background Error 153 in editor (WordPress/gutenberg#76904)
- Fields: Fix `postContentInfoField` when there are edits (WordPress/gutenberg#76901)
- Restore original template registration tests alongside activation variants (WordPress/gutenberg#77068)
- i18n: Make sprintf return FormattedText for type-safe createInterpolateElement (WordPress/gutenberg#76974)
- Block Editor store: refactor controlledInnerBlocks to Set (WordPress/gutenberg#77094)
- DataForm: support disabled controls (WordPress/gutenberg#77090)
- ESLint plugin: Disable `jsx-a11y/heading-has-content` (WordPress/gutenberg#77073)
- Remove remaining esModuleInterop usage (WordPress/gutenberg#77095)
- Avoid stale values in core/cover block for RTC compatibility (WordPress/gutenberg#76916)
- RTC: Add optional `shouldSync` function to entity sync config (WordPress/gutenberg#76947)
- Bump oras-project/setup-oras (WordPress/gutenberg#77096)
- RTC: Change SyncConnectionModal to isSyncConnectionErrorHandled filter and drop IS_GUTENBERG_PLUGIN check (WordPress/gutenberg#76853)
- RTC: Respect WP_ALLOW_COLLABORATION in Gutenberg for activation hook (WordPress/gutenberg#77084)
- Add iteration issue template (WordPress/gutenberg#77113)
- Media Modal Experiment: Set matching picker grid layout properties for when a user switches between layouts (WordPress/gutenberg#77118)
- contentOnly template lock: Fix block insertion and removal rules (WordPress/gutenberg#77119)
- Global Styles Revisions: Fix footer overflow (WordPress/gutenberg#77103)
- updateBlockListSettings: convert state to Map, do all updates in one action (WordPress/gutenberg#46392)
- DataViews: Fix `compact` density clipping and remove top/bottom padding (WordPress/gutenberg#77054)
- Icons: Override WP_Icons_Registry singleton with Gutenberg icons registry (WordPress/gutenberg#76455)
- Button: Remove obsolete Safari + VoiceOver workaround (WordPress/gutenberg#77107)
- E2E Tests: Ensure artifacts generate correctly and remove unnecessary artifacts (WordPress/gutenberg#77093)
- UI `Text`: Mark as recommended (WordPress/gutenberg#77044)
- ui/AlertDialog: better async confirm APIs, fully use base ui's `AlertDialog` (WordPress/gutenberg#76937)
- BlockStyleVariationOverridesWithConfig: change name and fix lint errors (WordPress/gutenberg#77130)
- Add `.scss` files to CSS module linting (WordPress/gutenberg#77140)
- BoxControl: remove unused state for icon side (WordPress/gutenberg#77143)
- Fix overflow of Highlighted white-space in Code Block (WordPress/gutenberg#77085)
- move pseudo-state slicing logic into useStyle hook (WordPress/gutenberg#77104)
- Autocomplete: Remove getAutoCompleterUI factory pattern (WordPress/gutenberg#77048)
- Add `date` field in templates and template parts (WordPress/gutenberg#77134)
- Revisions: Simplify fetching (WordPress/gutenberg#77086)
- Remove 'Home' and 'End' key usage from Navigation Tests (WordPress/gutenberg#77102)
- Guidelines: Update actions-section and import/export workflow (WordPress/gutenberg#76621)
- Image block: Hide drag handles while an upload is in progress (WordPress/gutenberg#77121)
- Build: Fix glob ignore patterns in dot-prefixed directories (WordPress/gutenberg#75114)
- Added missing documentation in `collaboration.php` (WordPress/gutenberg#77173)
- `@wordpress/ui`: add `Popover` (WordPress/gutenberg#76438)
- Add Site Tagline and Site Title to Design > Identity panel (WordPress/gutenberg#76264)
- Revision: Fix 'Show changes' button reset state (WordPress/gutenberg#77122)
- Components: update React function names for better ESLint detection (WordPress/gutenberg#77148)
- Link picker: Decode HTML entities in link preview title (WordPress/gutenberg#77170)
- MediaEdit: handle '*' wildcard in validateMimeType (WordPress/gutenberg#77168)
- Search block : Match behaviour of global styling for border and color with local styling (inspector controls) to remove inconsistency (WordPress/gutenberg#77060)
- Re-order spacing side controls when unlinked (WordPress/gutenberg#66317)
- Dataviews: remove unneeded ref callbacks (WordPress/gutenberg#77179)
- Experiment: Add revisions panel to templates, template parts and patterns (WordPress/gutenberg#77008)
- Guidelines CPT: Changes slug from wp_content_guidelines to wp_guidelines (WordPress/gutenberg#77147)
- TextArea: add disabled styles (WordPress/gutenberg#77129)
- Writing Flow: Fix format toolbar not appearing when selecting text from block edge (WordPress/gutenberg#77136)
- DataForm: Remove `text-transform` from `panel` field labels (WordPress/gutenberg#77196)
- FormTokenField: fix disabled styles (WordPress/gutenberg#77137)
- Admin UI: Increase page header vertical padding (WordPress/gutenberg#77152)
- Use entity link title for link control preview (WordPress/gutenberg#77155)
- TypeScript: migrate annotations package to TS (WordPress/gutenberg#70602)
- refactor: migrate bin/api-docs to tools/api-docs as workspace `@wordpress/api-docs-generator` (WordPress/gutenberg#77019)
- TypeScript: Migrate viewport package (WordPress/gutenberg#71118)
- UI/Tooltip: Add usage guidelines documentation (WordPress/gutenberg#77158)
- RadioControl: add support for disabling radio group (WordPress/gutenberg#77127)
- Upgrade ESLint to v10 (WordPress/gutenberg#76654)
- Add e2e test coverage for the Guidelines settings page (WordPress/gutenberg#77192)
- Admin UI: Update Page background color to surface-neutral (WordPress/gutenberg#76869)
- Fix lint-staged API docs path (WordPress/gutenberg#77203)
- PresetInputControl: Fix clearing of numeric value in custom input control (WordPress/gutenberg#77139)
- Upload external media: Ensure notice only fires once (WordPress/gutenberg#77218)
- Checkbox: fix disabled styles (WordPress/gutenberg#77132)
- FormToggle: Update disabled styles (WordPress/gutenberg#77208)
- Calendar: fix disabled styles (WordPress/gutenberg#77138)
- Textarea: remove unnecessary styles (WordPress/gutenberg#77221)
- Search Block: Ensure color settings apply to input field when button is disabled (WordPress/gutenberg#77219)
- iAPI Docs: Fix typos, code errors, and inaccuracies in the documentation (WordPress/gutenberg#76636)
- Connectors: don't clobber third-party custom render in registerDefaultConnectors (WordPress/gutenberg#77116)
- Guidelines: Improve guideline revision UX (WordPress/gutenberg#76560)
- ui/`Dialog`: update Header layout, refactor Title to use Text (WordPress/gutenberg#77161)
- ui/docs: add additional global css setup instructions (WordPress/gutenberg#77228)
- ui/VisuallyHidden: Standardize composition pattern (WordPress/gutenberg#77190)
- ui: expose `container` portal prop on all overlay Popup components (WordPress/gutenberg#77163)
- Components: Use `--wpds-cursor-control` for interactive controls (Sass only) (WordPress/gutenberg#76786)
- Card: Remove redundant margin reset from Card.Title (WordPress/gutenberg#77187)
- Theme: Rename typography tokens to use "typography" prefix (WordPress/gutenberg#76912)
- UI: Normalize render prop and ref forwarding patterns (WordPress/gutenberg#77160)
- Ensure "Retry" button is stable during retries (WordPress/gutenberg#77234)
- RTC: Improve array attribute stability when structural changes occur (WordPress/gutenberg#77164)
- Env: Fix loopback requests when running on non-default ports (WordPress/gutenberg#77057)
- Connectors: Replace speak() with notice store for state changes (WordPress/gutenberg#77174)
- Core Data: Fix 'useEntityProp' for raw attributes (WordPress/gutenberg#77120)
- Use image.copyMemory() for batch thumbnail generation (WordPress/gutenberg#76979)
- Post Author Biography: Preserve occurance of white spaces (WordPress/gutenberg#71133)
- Fix PatternsActions prop name from postType to type (WordPress/gutenberg#77251)
- Resolve package-lock.json inconsistency for @babel/eslint-parser (WordPress/gutenberg#77256)
- Fix duotone filter not applying on style variation switch (WordPress/gutenberg#77229)
- Fix: restore editor canvas padding in classic themes (WordPress/gutenberg#76864)
- DataViews: simplify `defaultLayouts` prop (WordPress/gutenberg#77232)
- getMergedItemsIds: receive full page bigger than perPage (WordPress/gutenberg#77262)
- FormTokenField: remove unnecessary styles (WordPress/gutenberg#77263)
- TypeScript: Migrate `packages/list-reusable-blocks` package to TypeScript (WordPress/gutenberg#70518)
- RTC: Add filterable flag for meta box RTC compatibility (WordPress/gutenberg#76939)
- RTC: Fix disconnect dialog due to uneditable entity (WordPress/gutenberg#77242)
- Guidelines: Try removing the jsxRuntime pragma and see what happens (WordPress/gutenberg#77255)
- DataForm: Show tooltip in edit button in `panel` layout (WordPress/gutenberg#77024)
- blocks: Convert blocks package to TypeScript (WordPress/gutenberg#76312)
- Fix Gutenberg_REST_View_Config_Controller_7_1 PHP warnings (WordPress/gutenberg#77290)
- renamed focus visible (WordPress/gutenberg#77292)
- page.waitForFunction: fix call arguments (WordPress/gutenberg#77300)
- Tabs: Simplify anchor handling (WordPress/gutenberg#77189)
- Tests: Auto-fix some new 'eslint-plugin-playwright' warnings (WordPress/gutenberg#77314)
- Tab Menu Item: simplify active tab menu item style (WordPress/gutenberg#77195)
- Eslint: Suggest alternative in `no-setting-ds-tokens` rule (WordPress/gutenberg#77154)
- Autocomplete: Fix flaky e2e tests (WordPress/gutenberg#77322)
- UI: Update `@base-ui/react` from `1.3.0` to `1.4.0` (WordPress/gutenberg#77308)
- Docs: Add README for DatePicker and TimePicker Components (WordPress/gutenberg#70365)
- UI: use Text component for Badge typography (WordPress/gutenberg#77295)
- Block Editor: Extract getElementCSSRules from useBlockProps (WordPress/gutenberg#77327)
- Edit Post: Fix warning in 'useMetaBoxInitialization' hook (WordPress/gutenberg#77311)
- Update the page slug we link to for the AI plugin after the plugin has been installed and activated (WordPress/gutenberg#77336)
- Guidelines CPT: Rename references from content guidelines to guidelines (WordPress/gutenberg#77223)
- Dialog: add explicit margin-inline-end rule to Title (WordPress/gutenberg#77334)
- Remove sandbox `allow-same-origin` for core/html blocks (WordPress/gutenberg#77212)
- Block Directory: Use `--wpds-cursor-control` design token (WordPress/gutenberg#77330)
- Registers wp_guideline_type taxonomy (WordPress/gutenberg#77156)
- DataForm: Add min/max date range support for date and datetime fields (WordPress/gutenberg#77201)
- Separator Block: Apply default block variation when inserting via `---` shortcut (WordPress/gutenberg#77135)
- Paragraph: Prevent `onEnter` splitting of parent block when insertion of that block type is not allowed (WordPress/gutenberg#77291)
- Media Upload Modal: Persist view configuration (WordPress/gutenberg#77288)
- Image block: Validate attachment ID exists before treating image as local (WordPress/gutenberg#77178)
- Tabs: remove sequential numbering from new tab labels (WordPress/gutenberg#77321)
- DataViews: Use `--wpds-cursor-control` design token for interactive controls (WordPress/gutenberg#77259)
- Post Editor: Store metaboxes RTC-compatible flag on location entries (WordPress/gutenberg#77361)
- Guidelines CPT: Skip registration when post type already exists (WordPress/gutenberg#77486)
- RTC: Fixed orphaned meta causing dirty editor state (WordPress/gutenberg#77529)
- Guidelines: Make the CPT type-aware (WordPress/gutenberg#77491)

Props adamsilverstein, jorbin, westonruter, wildworks.
Fixes #65557.
Built from https://develop.svn.wordpress.org/trunk@62580


git-svn-id: http://core.svn.wordpress.org/trunk@61860 1a063a9b-81f0-0310-95a4-ce76da25c4cd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Feature] Icons Related to Icon registration API and Icon REST API No Core Sync Required Indicates that any changes do not need to be synced to WordPress Core [Type] Code Quality Issues or PRs that relate to code quality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants