Repository navigation
Use image.copyMemory() for batch thumbnail generation - #76979
Conversation
Decode the source image once via copyMemory() and use thumbnailImage() for each sub-size, instead of re-decoding the source buffer for every thumbnail. This approach was suggested by the wasm-vips maintainer and avoids both re-decoding overhead and the need for intermediate format conversions. The new batchResizeImage() function in the vips package materializes the decoded image in WASM memory, then generates all thumbnails from that single in-memory copy. Results are written directly to the target output format, eliminating separate transcode steps. Falls back to per-thumbnail processing if the batch operation fails.
|
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 If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message. To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
Performance AnalysisHow it worksThe core optimization is decode once, resize many. Instead of each thumbnail independently decoding the source image from its compressed buffer, we:
Per-operation comparisonWordPress default generates ~7 sub-sizes (thumbnail, medium, medium_large, large, 1536x1536, 2048x2048) plus a scaled version for large images. Here's what happens for 8 sub-sizes:
Where the time savings come from1. Source decoding (biggest win) Each The libvips discussion showed ~30ms per thumbnail with 2. Worker RPC overhead Each RPC call involves serializing args, posting a message to the worker, and receiving the result. With 3. Queue scheduling In the per-thumbnail path, each thumbnail is a separate queue item competing for the 2 concurrent image processing slots ( Format conversion scenario (AVIF → JPEG)This is where the improvement is most dramatic. In the current per-thumbnail flow: With the batch approach: The expensive AVIF encode step is eliminated entirely for sub-sizes when the output format differs. Memory considerations
For very large images (e.g., 10K×10K = ~400MB), this could be significant. The fallback path provides a safety net — if the batch allocation fails (OOM), it falls back to per-thumbnail processing automatically. What's NOT changed
|
|
Size Change: +746 B (+0.01%) Total Size: 7.74 MB 📦 View Changed
ℹ️ View Unchanged
|
|
Flaky tests detected in 0120477. 🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/24294887127
|
| let vipsPromise: Promise< typeof Vips > | undefined; | ||
| let vipsInstance: typeof Vips; | ||
|
|
||
| /** | ||
| * Instantiates and returns a new vips instance. | ||
| * | ||
| * Reuses any existing instance. | ||
| */ | ||
| async function getVips(): Promise< typeof Vips > { | ||
| if ( vipsPromise ) { | ||
| return await vipsPromise; | ||
| if ( vipsInstance ) { | ||
| return vipsInstance; | ||
| } | ||
|
|
||
| vipsPromise = Vips( { | ||
| vipsInstance = await Vips( { | ||
| // Load HEIF dynamic module for HEIF/HEIC and AVIF format support. | ||
| // JXL is omitted as WordPress Core does not currently support it. | ||
| // It can be re-added when Core adds JXL support. | ||
| dynamicLibraries: [ 'vips-heif.wasm' ], | ||
| locateFile: ( fileName: string ) => { | ||
| // WASM files are inlined as base64 data URLs at build time, | ||
| // eliminating the need for separate file downloads and avoiding | ||
| // issues with hosts not serving WASM files with correct MIME types. | ||
| if ( fileName.endsWith( 'vips.wasm' ) ) { | ||
| return VipsModule; | ||
| } else if ( fileName.endsWith( 'vips-heif.wasm' ) ) { | ||
| return VipsHeifModule; | ||
| } | ||
| return fileName; | ||
| }, | ||
| preRun: ( module: EmscriptenModule ) => { | ||
| // https://github.com/kleisauke/wasm-vips/issues/13#issuecomment-1073246828 | ||
| module.setAutoDeleteLater( true ); | ||
| module.setDelayFunction( ( fn: () => void ) => { | ||
| cleanup = fn; | ||
| } ); | ||
| }, | ||
| } ); | ||
|
|
||
| return await vipsPromise; | ||
| return vipsInstance; | ||
| } |
There was a problem hiding this comment.
Just double-checking, is this an intentional revert of #76780? If not, looks like a possible unintended change during rebase?
There was a problem hiding this comment.
It does look like an unintended change, as this should all be transparent to consumers of getVips(). @adamsilverstein : If at all possible, please keep the vipsPromise approach, as it ensures we only ever have a single instance of Vips.
There was a problem hiding this comment.
Oops, that was not intended. Will fix.
andrewserong
left a comment
There was a problem hiding this comment.
I really like this approach! Sounds like we'd also be able to close out the PNG intermediate PR in #76846 👍
It's generally testing well to me and feels much faster than on trunk. I did run into a curious issue with a test .avif file. I've been randomly grabbing images from this repo to use for testing: https://github.com/link-u/avif-sample-images
Interestingly, with this file, everything works correctly: https://raw.githubusercontent.com/link-u/avif-sample-images/refs/heads/master/kimono.rotate270.avif
However with this file, I get an endless spinner in the editor but no errors logged to the console: https://raw.githubusercontent.com/link-u/avif-sample-images/refs/heads/master/fox.profile0.8bpc.yuv420.avif
I imagine the latter might be due to either the 10 bits per color channel, or its YUV color space. I'm not sure it's caused by this PR, but just thought I'd mention it since I encountered the issue while testing. Also not sure if it means if we need to add additional error handling, or whether there's a gap in the kinds of avif files we can parse?
I'm wrapping up before the Easter break, but happy to do further testing next week!
| * @param smartCrop Whether to use smart cropping (i.e. saliency-aware). | ||
| * @return Array of processed results, one per resize config. | ||
| */ | ||
| export async function batchResizeImage( |
There was a problem hiding this comment.
It looks like there's a fair bit of duplication between resizeImage and this batchResizeImage function. Is it possible to split out a common utility function to avoid the duplication? I'm wondering if that could help ensure that the two behave exactly the same.
I'm mostly thinking of the resize and crop logic.
| } else { | ||
| // Fallback: per-thumbnail processing (original approach | ||
| // without batch resize). | ||
| for ( const name of sizesToGenerate ) { |
There was a problem hiding this comment.
In which cases would we expect the batch resize to fail?
There was a problem hiding this comment.
Maybe if some parts of the batch fail, eg a corrupted image is uploaded? Makes me realize we should be sure to add more failure tests where we expect a certain type of failure (probably on the errror handling PR)
There was a problem hiding this comment.
Hrm, interesting. Maybe not for this PR, then, but I'm curious if there's a case where batch will fail but per-thumbnail will succeed. My assumption (e.g. if there's a corrupt image) is that we'd bail entirely rather than trying another approach to procesing/uploading. But not a blocker to go with this!
Mostly my thinking was if this else condition isn't required then we could remove some code 😄
| // Use faster AVIF encoding for sub-sizes. | ||
| if ( 'image/avif' === outputType ) { | ||
| saveOptions.effort = 2; | ||
| } |
There was a problem hiding this comment.
It looks like this isn't included in resizeImage but is in batchResizeImage. Is there a reason to make these different? Again, maybe we could consolidate logic to ensure we don't have variances between the two functions 🤔
There was a problem hiding this comment.
the consolidated version fixes this omission
Thanks for testing and pointing out the issue with that particular image. I will give it a test to see if I can determine why it is failing and if we can fix or just need to better catch the error. |
Fix unintended revert of #76780 during rebase. The promise-based approach ensures only a single Vips instance is ever created, even when multiple callers race on initialization.
Add applyResizeAndCrop() to consolidate the duplicated dimension calculation and crop logic between resizeImage and batchResizeImage. Add buildSaveOptions() to unify save option construction, which also fixes the missing AVIF effort=2 setting in resizeImage.
@andrewserong this image worked fine for me, can you check the response to the initial upload of the image to see if you get an error? I'm going to test more of the images in avif-sample-images to see if any cause issues. |
Perhaps try after a fresh editor load? I am working separately on an issue where uploading many AVIF files seems to crash the editor. See #76707 I see an error in the console though:
|
|
Confirmed in my testing the original Pisa AVIF image processes much more quickly than trunk, this is a huge improvement, maybe x2! All image formats benefit from this improvement, but its most obvious with AVIF since its so slow the begin with. |
|
I do get a consistent failure and console error, and endless spinner with Working on this in the error handling ticket. |
this is addressed in #76707 |
andrewserong
left a comment
There was a problem hiding this comment.
Great work on this, it's testing really nicely for me, and the consolidation updates are looking good to me. Left a couple of tiny nits but nothing major, I think this is in good shape overall.
And anecdotally, this is feeling quite a bit faster in my local env now, great stuff 🎉
Tested with an assortment of avif, jpeg, animated gif, png, and other images and all held up as expected.
LGTM 🚀
| } else { | ||
| // Fallback: per-thumbnail processing (original approach | ||
| // without batch resize). | ||
| for ( const name of sizesToGenerate ) { |
There was a problem hiding this comment.
Hrm, interesting. Maybe not for this PR, then, but I'm curious if there's a case where batch will fail but per-thumbnail will succeed. My assumption (e.g. if there's a corrupt image) is that we'd bail entirely rather than trying another approach to procesing/uploading. But not a blocker to go with this!
Mostly my thinking was if this else condition isn't required then we could remove some code 😄
| // If resize.height is zero, calculate from aspect ratio. | ||
| resize.height = | ||
| resize.height || ( originalHeight / originalWidth ) * resize.width; | ||
|
|
There was a problem hiding this comment.
Tiny nit: this is mutating the resize object. Should we make this immutable by expanding into a new object and performing mutations on that one instead?
There was a problem hiding this comment.
Addressed in 0120477 — now clones the config into a local target object rather than mutating the caller's ImageSizeCrop.
| // Check cancellation between thumbnails. | ||
| if ( ! inProgressOperations.has( id ) ) { | ||
| break; | ||
| } |
There was a problem hiding this comment.
Not a blocker, but I'm wondering a tiny bit about what we want to have happen if a cancellation happens between generating thumbnails. Would we want to abandon them all, or ensure completion of thumbnails? (I.e. how atomic do we want to be?)
As a user, if I were attempting to cancel an upload, I wonder what the expectation would be 🤔
(Don't let this comment derail landing this PR by the way, just a thought)
| top = Math.max( 0, top ); | ||
| resize.width = Math.min( image.width, resize.width ); | ||
| resize.height = Math.min( image.height, resize.height ); | ||
| const strOptions = ''; |
There was a problem hiding this comment.
Tiniest of nits, but is this const useful? I guess it's to document the param we're passing newFromBuffer?
Clone the resize config into a local target object rather than mutating the caller's ImageSizeCrop parameter, and drop an unused strOptions constant in batchResizeImage.
|
Filed follow-ups for the two non-blocking questions from the review so they don't get lost:
Both can be picked up alongside the broader error-handling work. |
|
@andrewserong I addressed your final nits and did some final manual testing - everything looks good, going to merge once CI is green. |
|
Nice one, and thanks for capturing the ideas for follow-ups! 🎉 |
The feature shipping target moved from 7.0 to 7.1 (per #76756). Bring the architecture explanation and how-to guide up to date with the post-7.0-cycle state of the code: - Reposition introductions around 7.1 with 7.0 as the groundwork cycle. - HEIC/HEIF: document the canvas-based fallback path (createImageBitmap, HTMLImageElement+OffscreenCanvas, HEIC container parsing + WebCodecs VideoDecoder), JPEG companion file, and isHeicCanvasSupported() gate. - AVIF: note the wp_prevent_unsupported_mime_type_uploads bypass when generate_sub_sizes=false (#76371). - Batch thumbnail generation via image.copyMemory() / thumbnailImage() (#76979). - Sub-size deduplication via image_size: string|string[] on the sideload route (#77036). - Single VIPS instance via promise caching (#76780). - Build-output trimming: remove vips-jxl.wasm (#76639), skip non-min worker (#76615), skip WASM-inlined sourcemaps (#75993). - COI: <img> excluded from cross-origin attribute injection (#76618). - Loosened feature-detection thresholds: 2 cores, 3g (#76616). - Post-saving lock fix: Save Draft now respects the lock (#76973). - convert_format declared as boolean on sideload route (#77565). - Fix incorrect REST index settings list (only image_sizes and image_size_threshold are exposed). - Remove references to client_side_supported_mime_types filter (PR #76549 was closed unmerged); state the supported MIME set is fixed at CLIENT_SIDE_SUPPORTED_MIME_TYPES. Refs #75111.
…77975) The single-pass batch resize path was originally introduced in #76979 to decode the source image once and produce every sub-size from a single in-memory copy, with a per-thumbnail else branch as a fallback. #75888 (concurrent sideloads) then restructured generateThumbnails() so each sub-size dispatches its own queued ResizeCrop+Upload sideload item that runs in parallel. After that refactor neither the batch path nor the per-thumbnail fallback in private-actions.ts is wired up: the sideload queue performs the per-sub-size resize via vipsResizeImage, and batchResizeImage has zero callers in the repo. Drop the dead WASM-side batchResizeImage function in @wordpress/vips, the matching vipsBatchResizeImage main-thread wrapper, the worker API entry, the BatchResizeConfig/BatchResizeResult helper types, and the auto-generated README sections. The shared applyResizeAndCrop and buildSaveOptions helpers are retained because resizeImage still uses them. Fixes #77247
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
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
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
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

Summary
Closes #77248.
copyMemory()call that materializes the decoded image in WASM memorythumbnailImage()(instance method) instead ofthumbnailBuffer()(static method that re-decodes) for each sub-sizeThis approach was suggested by the wasm-vips maintainer and is based on this libvips discussion where
copyMemory()reduced per-thumbnail time from ~2s to ~30ms (60x faster).Alternative approach to #76752 — instead of using a lossless PNG intermediate to avoid expensive re-encoding, this decodes the source once into memory and generates all thumbnails from that single in-memory copy.
How it works
batchResizeImage()in@wordpress/vipsdecodes the source image once withnewFromBuffer()image.copyMemory()to materialize the full image in WASM memorymemImage.thumbnailImage(width, opts)on the in-memory imageTest plan
image_output_formatsto map JPEG→AVIF — verify AVIF thumbnails from JPEG sourceimage_output_formatsto map AVIF→JPEG — verify JPEG thumbnails from AVIF sourcenpm run test:unit -- packages/vips packages/upload-media