UI: Add AlertDialog primitive - #76847
Conversation
dc7aef3 to
e746200
Compare
|
Size Change: -5 B (0%) Total Size: 7.73 MB
ℹ️ View Unchanged
|
There was a problem hiding this comment.
I realized that when our Button is disabled while focusable, clicking it still triggers the :active pseudo-state, which causes the focus ring to become transparent, which could give the false impression that the button is interactive.
If we agree with this change, I can move it to a separate PR (and investigate whether the same fix should be applied to @wordpress/components)
There was a problem hiding this comment.
I think the change is consistent with how we're currently using these styles (i.e. to indicate an active interaction). Although... I'm not really sure I fully understand why we do that in the first place?
There was a problem hiding this comment.
Removing the focus ring when the button is :active (ie. it's being pressed down during a click) is an additional visual confirmation (especially for keyboard users) that the "click" happened.
With the recent async worklow-related fixes, it actually looks like we don't need the fix anymore, since the :active state is (correcly) not triggered anymore while the Button is loading.
|
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. |
|
Flaky tests detected in 3256925. 🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/23656209594
|
|
Regarding whether Escape should be blocked in the irreversible intent: I wonder if it could be reasonably inferred the "Escape" should be equated as "Cancel". My understanding of blocking something like a click on the backdrop is that it's easy to do that accidentally and not reasonably associated with confirming or canceling. Edit: I also see this behavior described in the WAI Alert Dialog pattern example (emphasis mine)
|
aduth
left a comment
There was a problem hiding this comment.
It's looking good 👍 I think the main things for me at this point are figuring out how we want to proceed on handling Escape, and making sure the async behavior is working correctly.
There was a problem hiding this comment.
I think the change is consistent with how we're currently using these styles (i.e. to indicate an active interaction). Although... I'm not really sure I fully understand why we do that in the first place?
e27765c to
ca56e56
Compare
|
@aduth all feedback should have been addressed:
|
aduth
left a comment
There was a problem hiding this comment.
Couple minor comments, but LGTM overall 👍
| onConfirm={ () => { | ||
| setIsLoading( true ); | ||
| new Promise< void >( ( resolve ) => | ||
| setTimeout( resolve, 2000 ) | ||
| ).then( () => { | ||
| setIsLoading( false ); | ||
| setIsOpen( false ); | ||
| } ); | ||
| } } |
There was a problem hiding this comment.
For the story example, we never call args.onOpenChange when confirming. Not sure it really matters except for completeness or if someone were following this example in a component abstraction of an async confirmation dialog that exposes an onOpenChange. Maybe we'd call it somewhere in this promise flow? Or as a useEffect after initial mount with open as its dependency?
There was a problem hiding this comment.
onOpenChange should fire for dialog-initiated closes (Escape, backdrop click, cancel button), and is not expected to fire when confirming since the consumer (ie. the storybook example) is controlling the open state (setIsOpen(false)).
Calling onOpenChange in the promise (or in a useEffect) would, IMO, set the wrong expectation about how onOpenChange is expected to work.
I did add an additional log of the onConfirm callback, though
| return ( | ||
| <Dialog.Popup | ||
| ref={ ref } | ||
| role={ intent === 'irreversible' ? 'alertdialog' : 'dialog' } |
There was a problem hiding this comment.
Trying to follow the spec and related examples, I don't fully understand why we wouldn't just want to apply alertdialog statically for all cases? I gather we may be associating something about "urgency" or how much it "requires a response", though all of these dialogs expect a response. And nothing I can see in the alertdialog examples or spec say anything about severity of an action or click-outside behaviors.
There was a problem hiding this comment.
I guess we started with the legacy ConfirmDialog from @wordpress/components in mind, and we saw ConfirmDialog as a convenient higher-level version of Dialog.
Then we started adding the differentiation for the irreversible variant:
- we made it harder to dismiss, hence the logic around the
Escapekey (recently reverted) and the pointer clicks on the backrdop (still applied) - we made it an official
alertdialog, while keeping the default variant a simpledialog
I remember also explicitly discussing these differences as the reason for having a custom implementation on top of our Dialog, rather than building on top of base ui's AlertDialog.
If we're ok to always (regardless of the variant):
- assign the
alertdialogrole; - allow the Escape key dismissal;
- disallow the click outside dismissal;
then we should just rename our component AlertDialog and build it on top of base ui's AlertDialog — which I'd be totally fine with.
@aduth should I go ahead with the refactor?
There was a problem hiding this comment.
That's a bit more extensive rethink than I expected to prompt with my question 😅 Though it's definitely an interesting proposition. I guess the main deviation there is standardizing the behavior of clicking outside. But the alignment to BaseUI is appealing.
I'm not sure I fully understand the relation between AlertDialog and Dialog in BaseUI, how much it builds on each other, how much that leaves for us to reimplement (i.e. how big a refactor).
If it's a big refactor, we could optionally do a few steps to move in that direction, like renaming ConfirmDialog to AlertDialog and/or always assigning the role.
Personally, I think I'd be okay with this refactor, including the implications on disallowing click outside dismissal regardless of intent. But it could be good to get some more buy-in from other folks as well.
There was a problem hiding this comment.
I tried the refactor (can be always undone), it was quite simple and didn't involve any public API changes (apart from the component name): 2d37d04
The ConfirmDialog was authored against an older Dialog version that had
a `title` prop on `Dialog.Root` and a `Dialog.Heading` subcomponent.
The current Dialog uses `Dialog.Title` (with children) and has no
`title` prop on Root.
- Thread `title` through `ConfirmDialogContext` instead of passing it
to `Dialog.Root`.
- Replace `<Dialog.Heading />` with `<Dialog.Title>{ title }</Dialog.Title>`.
- Define `title` directly on `RootProps` instead of picking it from
`DialogRootProps`.
- Fix invalid `wpds` i18n text domain.
Made-with: Cursor
- Swap runtime `react` imports for `@wordpress/element`. - Sort imports (externals, then @wordpress/*, then internal). - Use `import type` for type-only imports. - Move Storybook file to `stories/index.story.tsx`. - Update story title to `Design System/Components/ConfirmDialog`. - Fix `waitFor` blocks to use single assertions (lint rule). - Add JSDoc to Trigger component. - Export `ConfirmDialog` namespace from the package index. Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
- Add `role="alertdialog"` to the popup for `irreversible` intent, `role="dialog"` for `default`. - Block Escape key dismissal for `irreversible` intent (previously only backdrop click was blocked). - Block backdrop click for `default` intent too — confirm dialogs should always require an explicit action. - Extract `getIntentConfig()` helper in context.tsx to centralize intent-dependent behavior (role, blocked dismiss reasons). - Update JSDoc and story descriptions to reflect the new behavior. Made-with: Cursor
Add a `loading` prop to `ConfirmDialog.Popup` that shows a spinner on the confirm button and disables both buttons. All async flow logic (controlled open state, preventing close during loading, closing on completion) is handled by the consumer. Pass `disabled` alongside `loading` to `Dialog.Action` to align `_Dialog.Close`'s internal `useButton` with the desired disabled state. Made-with: Cursor
Made-with: Cursor
The title is only consumed by Popup (to render Dialog.Title), so it belongs there as a direct prop rather than traversing through context. This simplifies the data flow and removes title from ConfirmDialogContext. Made-with: Cursor
Dialog.Action wraps Base UI's Dialog.Close, which defaults `disabled` to `false` internally. This caused its `useButton` to set `aria-disabled="false"`, overriding Button's own `aria-disabled` derived from the `loading` prop. Extract `disabled` and `loading`, resolve them the same way Button does (`disabled ?? loading`), and pass the result to Dialog.Close. Forward `loading` directly to Button for the spinner CSS class. Made-with: Cursor
Now that Dialog.Action properly resolves disabled from loading,
the explicit `disabled={loading || undefined}` workaround and its
explanatory comment are no longer needed.
Made-with: Cursor
Expand the `loading` JSDoc to explicitly state that passing the prop (even as `false`) opts into manual-close mode. Add a regression test encoding this contract so future contributors don't accidentally change the `loading !== undefined` check. Made-with: Cursor
943524a to
2d5026b
Compare
aduth
left a comment
There was a problem hiding this comment.
LGTM 👍 I think I like the AlertDialog name a lot more. Not only in how it aligns to BaseUI, but also in the alertdialog role semantics.
* initlal version
* ConfirmDialog: Fix Dialog API incompatibilities
The ConfirmDialog was authored against an older Dialog version that had
a `title` prop on `Dialog.Root` and a `Dialog.Heading` subcomponent.
The current Dialog uses `Dialog.Title` (with children) and has no
`title` prop on Root.
- Thread `title` through `ConfirmDialogContext` instead of passing it
to `Dialog.Root`.
- Replace `<Dialog.Heading />` with `<Dialog.Title>{ title }</Dialog.Title>`.
- Define `title` directly on `RootProps` instead of picking it from
`DialogRootProps`.
- Fix invalid `wpds` i18n text domain.
Made-with: Cursor
* ConfirmDialog: Adapt to @wordpress/ui package conventions
- Swap runtime `react` imports for `@wordpress/element`.
- Sort imports (externals, then @wordpress/*, then internal).
- Use `import type` for type-only imports.
- Move Storybook file to `stories/index.story.tsx`.
- Update story title to `Design System/Components/ConfirmDialog`.
- Fix `waitFor` blocks to use single assertions (lint rule).
- Add JSDoc to Trigger component.
- Export `ConfirmDialog` namespace from the package index.
Made-with: Cursor
* ConfirmDialog: Add CHANGELOG entry
Made-with: Cursor
* Dialog: Remove ConfirmDialog story now covered by dedicated component
Made-with: Cursor
* ConfirmDialog: Tighten irreversible intent behavior
- Add `role="alertdialog"` to the popup for `irreversible` intent,
`role="dialog"` for `default`.
- Block Escape key dismissal for `irreversible` intent (previously
only backdrop click was blocked).
- Block backdrop click for `default` intent too — confirm dialogs
should always require an explicit action.
- Extract `getIntentConfig()` helper in context.tsx to centralize
intent-dependent behavior (role, blocked dismiss reasons).
- Update JSDoc and story descriptions to reflect the new behavior.
Made-with: Cursor
* ConfirmDialog: Add `loading` prop for async confirm flows
Add a `loading` prop to `ConfirmDialog.Popup` that shows a spinner on
the confirm button and disables both buttons. All async flow logic
(controlled open state, preventing close during loading, closing on
completion) is handled by the consumer.
Pass `disabled` alongside `loading` to `Dialog.Action` to align
`_Dialog.Close`'s internal `useButton` with the desired disabled state.
Made-with: Cursor
* ConfirmDialog: Add CHANGELOG entries for enhancements
Made-with: Cursor
* ConfirmDialog: Move title prop from Root to Popup
The title is only consumed by Popup (to render Dialog.Title), so it
belongs there as a direct prop rather than traversing through context.
This simplifies the data flow and removes title from
ConfirmDialogContext.
Made-with: Cursor
* format css
* ConfirmDialog: Restore backdrop click dismissal for default intent
The default (non-irreversible) variant should allow dismissing via
backdrop click, matching the original behavior. Only the irreversible
intent blocks all implicit dismissals.
Made-with: Cursor
* Dialog: Fix Action disabled/loading forwarding to Button
Dialog.Action wraps Base UI's Dialog.Close, which defaults
`disabled` to `false` internally. This caused its `useButton` to
set `aria-disabled="false"`, overriding Button's own `aria-disabled`
derived from the `loading` prop.
Extract `disabled` and `loading`, resolve them the same way Button
does (`disabled ?? loading`), and pass the result to Dialog.Close.
Forward `loading` directly to Button for the spinner CSS class.
Made-with: Cursor
* ConfirmDialog: Remove disabled workaround on confirm action
Now that Dialog.Action properly resolves disabled from loading,
the explicit `disabled={loading || undefined}` workaround and its
explanatory comment are no longer needed.
Made-with: Cursor
* Remove superflous CHANGELOG entries
* Update CHANGELOG PR reference
* Allow Escape key to dismiss the irreversible variant, cleanup getIntentConfig
* Remove hardcoded domain from Storybook docs URL
* CHANGELOG
* Try to fix async confirm workflow
* Better approach to async confirm work
* Add async flow unit test
* ConfirmDialog: Clarify loading prop manual-close contract
Expand the `loading` JSDoc to explicitly state that passing the prop
(even as `false`) opts into manual-close mode. Add a regression test
encoding this contract so future contributors don't accidentally
change the `loading !== undefined` check.
Made-with: Cursor
* Log "onConfirm" action
* Refactor to use base ui's AlertDialog, rename to AlertDialog
* format
Yay, I like this too 🎉 |
* initlal version
* ConfirmDialog: Fix Dialog API incompatibilities
The ConfirmDialog was authored against an older Dialog version that had
a `title` prop on `Dialog.Root` and a `Dialog.Heading` subcomponent.
The current Dialog uses `Dialog.Title` (with children) and has no
`title` prop on Root.
- Thread `title` through `ConfirmDialogContext` instead of passing it
to `Dialog.Root`.
- Replace `<Dialog.Heading />` with `<Dialog.Title>{ title }</Dialog.Title>`.
- Define `title` directly on `RootProps` instead of picking it from
`DialogRootProps`.
- Fix invalid `wpds` i18n text domain.
Made-with: Cursor
* ConfirmDialog: Adapt to @wordpress/ui package conventions
- Swap runtime `react` imports for `@wordpress/element`.
- Sort imports (externals, then @wordpress/*, then internal).
- Use `import type` for type-only imports.
- Move Storybook file to `stories/index.story.tsx`.
- Update story title to `Design System/Components/ConfirmDialog`.
- Fix `waitFor` blocks to use single assertions (lint rule).
- Add JSDoc to Trigger component.
- Export `ConfirmDialog` namespace from the package index.
Made-with: Cursor
* ConfirmDialog: Add CHANGELOG entry
Made-with: Cursor
* Dialog: Remove ConfirmDialog story now covered by dedicated component
Made-with: Cursor
* ConfirmDialog: Tighten irreversible intent behavior
- Add `role="alertdialog"` to the popup for `irreversible` intent,
`role="dialog"` for `default`.
- Block Escape key dismissal for `irreversible` intent (previously
only backdrop click was blocked).
- Block backdrop click for `default` intent too — confirm dialogs
should always require an explicit action.
- Extract `getIntentConfig()` helper in context.tsx to centralize
intent-dependent behavior (role, blocked dismiss reasons).
- Update JSDoc and story descriptions to reflect the new behavior.
Made-with: Cursor
* ConfirmDialog: Add `loading` prop for async confirm flows
Add a `loading` prop to `ConfirmDialog.Popup` that shows a spinner on
the confirm button and disables both buttons. All async flow logic
(controlled open state, preventing close during loading, closing on
completion) is handled by the consumer.
Pass `disabled` alongside `loading` to `Dialog.Action` to align
`_Dialog.Close`'s internal `useButton` with the desired disabled state.
Made-with: Cursor
* ConfirmDialog: Add CHANGELOG entries for enhancements
Made-with: Cursor
* ConfirmDialog: Move title prop from Root to Popup
The title is only consumed by Popup (to render Dialog.Title), so it
belongs there as a direct prop rather than traversing through context.
This simplifies the data flow and removes title from
ConfirmDialogContext.
Made-with: Cursor
* format css
* ConfirmDialog: Restore backdrop click dismissal for default intent
The default (non-irreversible) variant should allow dismissing via
backdrop click, matching the original behavior. Only the irreversible
intent blocks all implicit dismissals.
Made-with: Cursor
* Dialog: Fix Action disabled/loading forwarding to Button
Dialog.Action wraps Base UI's Dialog.Close, which defaults
`disabled` to `false` internally. This caused its `useButton` to
set `aria-disabled="false"`, overriding Button's own `aria-disabled`
derived from the `loading` prop.
Extract `disabled` and `loading`, resolve them the same way Button
does (`disabled ?? loading`), and pass the result to Dialog.Close.
Forward `loading` directly to Button for the spinner CSS class.
Made-with: Cursor
* ConfirmDialog: Remove disabled workaround on confirm action
Now that Dialog.Action properly resolves disabled from loading,
the explicit `disabled={loading || undefined}` workaround and its
explanatory comment are no longer needed.
Made-with: Cursor
* Remove superflous CHANGELOG entries
* Update CHANGELOG PR reference
* Allow Escape key to dismiss the irreversible variant, cleanup getIntentConfig
* Remove hardcoded domain from Storybook docs URL
* CHANGELOG
* Try to fix async confirm workflow
* Better approach to async confirm work
* Add async flow unit test
* ConfirmDialog: Clarify loading prop manual-close contract
Expand the `loading` JSDoc to explicitly state that passing the prop
(even as `false`) opts into manual-close mode. Add a regression test
encoding this contract so future contributors don't accidentally
change the `loading !== undefined` check.
Made-with: Cursor
* Log "onConfirm" action
* Refactor to use base ui's AlertDialog, rename to AlertDialog
* format
* initlal version
* ConfirmDialog: Fix Dialog API incompatibilities
The ConfirmDialog was authored against an older Dialog version that had
a `title` prop on `Dialog.Root` and a `Dialog.Heading` subcomponent.
The current Dialog uses `Dialog.Title` (with children) and has no
`title` prop on Root.
- Thread `title` through `ConfirmDialogContext` instead of passing it
to `Dialog.Root`.
- Replace `<Dialog.Heading />` with `<Dialog.Title>{ title }</Dialog.Title>`.
- Define `title` directly on `RootProps` instead of picking it from
`DialogRootProps`.
- Fix invalid `wpds` i18n text domain.
Made-with: Cursor
* ConfirmDialog: Adapt to @wordpress/ui package conventions
- Swap runtime `react` imports for `@wordpress/element`.
- Sort imports (externals, then @wordpress/*, then internal).
- Use `import type` for type-only imports.
- Move Storybook file to `stories/index.story.tsx`.
- Update story title to `Design System/Components/ConfirmDialog`.
- Fix `waitFor` blocks to use single assertions (lint rule).
- Add JSDoc to Trigger component.
- Export `ConfirmDialog` namespace from the package index.
Made-with: Cursor
* ConfirmDialog: Add CHANGELOG entry
Made-with: Cursor
* Dialog: Remove ConfirmDialog story now covered by dedicated component
Made-with: Cursor
* ConfirmDialog: Tighten irreversible intent behavior
- Add `role="alertdialog"` to the popup for `irreversible` intent,
`role="dialog"` for `default`.
- Block Escape key dismissal for `irreversible` intent (previously
only backdrop click was blocked).
- Block backdrop click for `default` intent too — confirm dialogs
should always require an explicit action.
- Extract `getIntentConfig()` helper in context.tsx to centralize
intent-dependent behavior (role, blocked dismiss reasons).
- Update JSDoc and story descriptions to reflect the new behavior.
Made-with: Cursor
* ConfirmDialog: Add `loading` prop for async confirm flows
Add a `loading` prop to `ConfirmDialog.Popup` that shows a spinner on
the confirm button and disables both buttons. All async flow logic
(controlled open state, preventing close during loading, closing on
completion) is handled by the consumer.
Pass `disabled` alongside `loading` to `Dialog.Action` to align
`_Dialog.Close`'s internal `useButton` with the desired disabled state.
Made-with: Cursor
* ConfirmDialog: Add CHANGELOG entries for enhancements
Made-with: Cursor
* ConfirmDialog: Move title prop from Root to Popup
The title is only consumed by Popup (to render Dialog.Title), so it
belongs there as a direct prop rather than traversing through context.
This simplifies the data flow and removes title from
ConfirmDialogContext.
Made-with: Cursor
* format css
* ConfirmDialog: Restore backdrop click dismissal for default intent
The default (non-irreversible) variant should allow dismissing via
backdrop click, matching the original behavior. Only the irreversible
intent blocks all implicit dismissals.
Made-with: Cursor
* Dialog: Fix Action disabled/loading forwarding to Button
Dialog.Action wraps Base UI's Dialog.Close, which defaults
`disabled` to `false` internally. This caused its `useButton` to
set `aria-disabled="false"`, overriding Button's own `aria-disabled`
derived from the `loading` prop.
Extract `disabled` and `loading`, resolve them the same way Button
does (`disabled ?? loading`), and pass the result to Dialog.Close.
Forward `loading` directly to Button for the spinner CSS class.
Made-with: Cursor
* ConfirmDialog: Remove disabled workaround on confirm action
Now that Dialog.Action properly resolves disabled from loading,
the explicit `disabled={loading || undefined}` workaround and its
explanatory comment are no longer needed.
Made-with: Cursor
* Remove superflous CHANGELOG entries
* Update CHANGELOG PR reference
* Allow Escape key to dismiss the irreversible variant, cleanup getIntentConfig
* Remove hardcoded domain from Storybook docs URL
* CHANGELOG
* Try to fix async confirm workflow
* Better approach to async confirm work
* Add async flow unit test
* ConfirmDialog: Clarify loading prop manual-close contract
Expand the `loading` JSDoc to explicitly state that passing the prop
(even as `false`) opts into manual-close mode. Add a regression test
encoding this contract so future contributors don't accidentally
change the `loading !== undefined` check.
Made-with: Cursor
* Log "onConfirm" action
* Refactor to use base ui's AlertDialog, rename to AlertDialog
* format
This updates the pinned commit hash of the Gutenberg repository from `3166ad3c587b4091f77b0e16affeed5762e193f1` (version `22.8.0`) to `5426109cdaf45828ef28ff8527d7d38e7e75fe74` (version `22.9.0`). A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v22.8.0..v22.9.0. The following commits are included: - Real Time Collaboration: Introduce filters for the polling intervals. (WordPress/gutenberg#76518) - UI: Update @base-ui/react from 1.2.0 to 1.3.0 (WordPress/gutenberg#76603) - Card: Use Text component for Title typography (WordPress/gutenberg#76642) - Add TypeScript parser tests for shouldSkipReference (WordPress/gutenberg#76611) - Update changelog link for pull request 11276 (WordPress/gutenberg#76638) - ThemeProvider: Add `cursor` prop (WordPress/gutenberg#76410) - RTC: Fix RichTextData deserialization (WordPress/gutenberg#76607) - Cross Origin Isolation: Remove `img` from the list of elements that get mutated (WordPress/gutenberg#76618) - RTC: Scroll to collaborator on click (WordPress/gutenberg#76561) - Fix backport changelog filename (WordPress/gutenberg#76651) - Build: Skip non-minified build for WASM-inlined workers (WordPress/gutenberg#76615) - Improvements to dataviews infinite scroll (WordPress/gutenberg#74378) - Image/Site Logo: hide crop toolbar when editMediaEntity is unavailable (WordPress/gutenberg#76626) - Bump lodash from 4.17.21 to 4.17.23 in /platform-docs (WordPress/gutenberg#74829) - RTC: Change RTC option name (WordPress/gutenberg#76643) - Change from PR WordPress/gutenberg#11276 to WordPress/gutenberg#11234 with with different approach (WordPress/gutenberg#76661) - Build: Fix vips worker 404 when SCRIPT_DEBUG is true (WordPress/gutenberg#76657) - Build: Remove unused JXL WASM module from vips worker (WordPress/gutenberg#76639) - Storybook: disabled autodocs for Icon library (WordPress/gutenberg#76620) - Connectors: fix button size (WordPress/gutenberg#76582) - Revisions: Add Meta fields diff panel to document sidebar (WordPress/gutenberg#76341) - Reduce the added halo for selected block. (WordPress/gutenberg#76619) - Site Editor > Pages: move view config to the server (WordPress/gutenberg#76573) - ui/Tabs: add runtime validation for tab/panel mismatches (WordPress/gutenberg#75170) - Fix Color Picker Angle Reset on Gradient Type Change (WordPress/gutenberg#76595) - ESLint: Add `no-unmerged-classname` rule (WordPress/gutenberg#76458) - RTC: Backport race condition fix (WordPress/gutenberg#76649) - ui/Card: Add overflow: clip to root container (WordPress/gutenberg#76678) - Storybook: Make "introduction" top level (WordPress/gutenberg#76671) - Fix navigation block rendering unit test (WordPress/gutenberg#76685) - Hide Additional CSS controls when block is inside contentOnly editing mode (WordPress/gutenberg#76512) - RTC: Increase polling intervals, increase polling on primary room only (WordPress/gutenberg#76704) - Navigation: Avoid List View changing position when navigation block saves (WordPress/gutenberg#76659) - Fix navigation block unit test and e2e test (WordPress/gutenberg#76692) - Stretchy Text: Fix focus loss (WordPress/gutenberg#75092) - Fix locked content when switching to a different template without exiting 'Edit pattern' (WordPress/gutenberg#76710) - Guidelines: Improvements to the UX (WordPress/gutenberg#76383) - Fix: Create custom template modal content width (WordPress/gutenberg#76713) - Core Data: Optimize getRawEntityRecord selector (WordPress/gutenberg#76632) - Metabox: Fix checkbox style in sidebar (WordPress/gutenberg#76718) - Stop keeping stale controlled blocks after reset (WordPress/gutenberg#76591) - Gate client-side media processing as plugin-only (WordPress/gutenberg#76700) - Storybook: Add redirect for moved introduction page (WordPress/gutenberg#76701) - InputControl: Add to @wordpress/ui (WordPress/gutenberg#76653) - UI Tooltip: Improve documentation to cover intended accessibility practices (WordPress/gutenberg#76705) - Add EmptyState component to @wordpress/ui (WordPress/gutenberg#74719) - RTC: Use activation hook to enable RTC by default (WordPress/gutenberg#76736) - Forms Block: Add hidden input field variation (WordPress/gutenberg#74131) - Guidelines: Refactor components and improve TypeScript typing (WordPress/gutenberg#76394) - Connectors: Align client-side registration API with server-side (WordPress/gutenberg#76737) - Properly resolve `getTemplateId` for hybrid themes (WordPress/gutenberg#76532) - Changelog: Add missing label-to-feature mappings (WordPress/gutenberg#76646) - Connectors: Support non-AI provider types and add JS extensibility e2e test (WordPress/gutenberg#76722) - Experimental: Add `template` panel to include the existing template actions (WordPress/gutenberg#76539) - RadioControl: Add `role="radiogroup"` to fieldset (WordPress/gutenberg#76745) - wp-build: Hash transformed CSS for `data-wp-hash` dedupe key (WordPress/gutenberg#76743) - Button: restore specificity of high-contrast mode focus ring (WordPress/gutenberg#76719) - Updating versions in WordPress ahead of 7.0 (WordPress/gutenberg#76723) - Bump the github-actions group across 2 directories with 1 update (WordPress/gutenberg#76681) - Admin UI: Add CSS files to sideEffects array (WordPress/gutenberg#76609) - RTC: Add E2E "stress test" with complex interactions (WordPress/gutenberg#76055) - Connectors: Improve AI plugin button (WordPress/gutenberg#76759) - Login/out block: Add button block class names to the submit button (WordPress/gutenberg#76746) - Commands: Add sections to command palette and introduce Recently used functionality (WordPress/gutenberg#75691) - RTC: Use prepared queries instead of `*_post_meta` functions (WordPress/gutenberg#76779) - Core Abilities: fix sideEffects flag (WordPress/gutenberg#76763) - Site Editor > Patterns: move config to the server (WordPress/gutenberg#76734) - Docs: Remove Puppeteer references and update to Playwright (WordPress/gutenberg#76766) - Site Editor > Templates: move config to the server (WordPress/gutenberg#76622) - Core Data: Remove 'isRawAttribute' internal util (WordPress/gutenberg#76806) - Reset blockEditingModes on RESET_BLOCKS (WordPress/gutenberg#76529) - Refactor: Use null coalescing operator for improved readability (WordPress/gutenberg#76777) - ui/CollapsibleCard: do not animate focus ring (WordPress/gutenberg#76682) - admin-ui / Breadcrumbs: stricter `items[].to` prop types (WordPress/gutenberg#76493) - RTC: Remove stale wp_enable_real_time_collaboration option check (WordPress/gutenberg#76810) - Storybook: Try changing to collapsed folders (WordPress/gutenberg#76361) - @wordpress/dataviews: migrate card layout to @wordpress/ui (WordPress/gutenberg#76282) - RTC: Fix editor freeze when replacing code editor content (WordPress/gutenberg#76815) - Preferences: Hide collaboration options when RTC is not enabled (WordPress/gutenberg#76819) - Cherry-pick: Set milestone on PRs after cherry-picking to release branch (WordPress/gutenberg#76652) - Site Tagline: Fix block error when migrating deprecated textAlign attribute (WordPress/gutenberg#76821) - Commands: Fix unstable `useSelect` return value for `recentlyUsedNames` (WordPress/gutenberg#76822) - `ControlWithError`: Connect validation messages to controls via `aria-describedby` (WordPress/gutenberg#76742) - Block Editor: Deprecate '__unstableSaveReusableBlock' action (WordPress/gutenberg#76807) - Editor: Fix template revisions using 'modified' date field instead of 'date' (WordPress/gutenberg#76760) - UI: Clarify public APIs and component naming, remove NoticeIntent typings (WordPress/gutenberg#76791) - fix(date): Recover WP timezone after third-party moment-timezone reload (WordPress/gutenberg#75831) - Admin UI: Update Page background color (WordPress/gutenberg#76548) - Snackbar: Use surface-width design token for max-width (WordPress/gutenberg#76592) - iAPI Docs: Add client-side navigation compatibility guide (WordPress/gutenberg#76242) - Enhance block registration by using blocks-manifest for improved performance (WordPress/gutenberg#76317) - docs(create-block-interactive-template): document available variants in README (WordPress/gutenberg#76831) - Build: detect version and generate asset.php for vendor scripts (WordPress/gutenberg#76811) - Site Editor > Patterns & Parts: generate sidebar from view config (WordPress/gutenberg#76823) - Interactivity API: mention `client-side-navigation` scaffold variant in getting-started guide (WordPress/gutenberg#76543) - Fields: Add `excerpt` field (WordPress/gutenberg#76829) - Update PHP_CodeSniffer repository link and schema URL (WordPress/gutenberg#76816) - docs: Fix markdown links and PHP code block in client-side navigation compatibility guide (WordPress/gutenberg#76856) - Experimental: Add `revisions` panel (WordPress/gutenberg#76735) - WordPress/gutenberg#76478 Boot: Fix black area below content when sidebar is taller than page c… (WordPress/gutenberg#76764) - Style Book: Fix missing styles for classic themes in stylebook route (WordPress/gutenberg#76843) - UI/Dialog: Expose initialFocus and finalFocus on Dialog.Popup (WordPress/gutenberg#76860) - compose/useDialog: add `stopPropagation()` to Escape handler (WordPress/gutenberg#76861) - RTC: Add e2e block gauntlet (WordPress/gutenberg#76849) - UI: Add AlertDialog primitive (WordPress/gutenberg#76847) - RTC: Fix stuck "Join" link in post list when lock expires (WordPress/gutenberg#76795) - Site Editor: simplify sidebar for Pages & Templates (WordPress/gutenberg#76868) - Site Editor v2: Add missing menu items to navigation leaf more menu (WordPress/gutenberg#76804) - Navigation: Add a shared helper for font sizes in Navigation Link and Navigation Submenu blocks (WordPress/gutenberg#74855) - Reduce specificity of nav link default padding so global styles are applied (WordPress/gutenberg#76876) - Icon: Fix center alignment in the editor for classic themes (WordPress/gutenberg#76878) - RTC: Fix notes not syncing between collaborative editors (WordPress/gutenberg#76873) - List Item: Disable edit as HTML support (WordPress/gutenberg#76897) - Block Library: Show fallback label in MediaControl when filename is empty (WordPress/gutenberg#76888) - Image block media placeholder: remove duotone (WordPress/gutenberg#76721) - Latest Comments: Fix v1 deprecated block missing supports (WordPress/gutenberg#76877) - VIPS: ensure single instance (WordPress/gutenberg#76780) - React vendor script: avoid warning on createRoot (WordPress/gutenberg#76825) - Connectors: Add Akismet as a default connector (WordPress/gutenberg#76828) - Core Data: remove offset param from stableKey, use pagination logic (WordPress/gutenberg#76808) - Button: hide focus outline on :active for click feedback in forced-colors mode (WordPress/gutenberg#76833) - Restore with compaction update (WordPress/gutenberg#76872) - Theme: Change default control cursor to `pointer` (WordPress/gutenberg#76762) - E2E Tests: Enable client-side media processing for site editor image test (WordPress/gutenberg#76648) - ComboboxControl: Fix accessible association of `help` text (WordPress/gutenberg#76761) - Add backport for WP_ALLOW_COLLABORATION (WordPress/gutenberg#76716) - DataForm: Add `compact` configuration option to the `datetime` control (WordPress/gutenberg#76905) - Admin UI: Fix Page Header not rendering with only actions and add stories (WordPress/gutenberg#76695) - Improve JSDoc for abilities API (WordPress/gutenberg#76824) - DOM: Document class wildcard matcher for 'cleanNodeList' (WordPress/gutenberg#76920) - e2e: Add e2e tests for template and template part revisions (WordPress/gutenberg#76923) - react-dom vendor script: remove __esModule flag (WordPress/gutenberg#76925) - Site Editor: Fix unsupported theme flash on direct URL navigation (WordPress/gutenberg#76465) - Icons: Enforce strict name validation in `register` method (WordPress/gutenberg#76079) - ToggleGroupControl: Fix accessible association of `help` text (WordPress/gutenberg#76740) - Connectors: Replace plugin.slug with plugin.file (WordPress/gutenberg#76909) - UI/Dialog: deprioritize close icon for initial focus (WordPress/gutenberg#76910) - Block visibility badge: use canvas iframe for viewport detection (WordPress/gutenberg#76889) - Fields: Add `sticky` field (WordPress/gutenberg#76922) - DOM: Prefer standard `caretPositionFromPoint` over deprecated `caretRangeFromPoint` (WordPress/gutenberg#76921) - Block Supports: Add background gradient support that can combine with background images (WordPress/gutenberg#75859) - Tab Block: Remove anchor from save function (WordPress/gutenberg#76511) - CollapsibleCard: Add HeaderDescription subcomponent (WordPress/gutenberg#76867) - element: Make createInterpolateElement TS/type smart (WordPress/gutenberg#71513) - admin-ui: Update README to clarify purpose and distinguish from ui package (WordPress/gutenberg#76943) - Site Editor > Quick Edit: add form config to endpoint (WordPress/gutenberg#76953) - Fields: Tweak `excerpt` field (WordPress/gutenberg#76903) - Fix: Flaky RichText format e2e test (WordPress/gutenberg#76958) Props adamsilverstein, jorbin, westonruter, wildworks. Fixes #65556. git-svn-id: https://develop.svn.wordpress.org/trunk@62578 602fd350-edb4-49c9-b593-d223f7449a82
This updates the pinned commit hash of the Gutenberg repository from `3166ad3c587b4091f77b0e16affeed5762e193f1` (version `22.8.0`) to `5426109cdaf45828ef28ff8527d7d38e7e75fe74` (version `22.9.0`). A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v22.8.0..v22.9.0. The following commits are included: - Real Time Collaboration: Introduce filters for the polling intervals. (WordPress/gutenberg#76518) - UI: Update @base-ui/react from 1.2.0 to 1.3.0 (WordPress/gutenberg#76603) - Card: Use Text component for Title typography (WordPress/gutenberg#76642) - Add TypeScript parser tests for shouldSkipReference (WordPress/gutenberg#76611) - Update changelog link for pull request 11276 (WordPress/gutenberg#76638) - ThemeProvider: Add `cursor` prop (WordPress/gutenberg#76410) - RTC: Fix RichTextData deserialization (WordPress/gutenberg#76607) - Cross Origin Isolation: Remove `img` from the list of elements that get mutated (WordPress/gutenberg#76618) - RTC: Scroll to collaborator on click (WordPress/gutenberg#76561) - Fix backport changelog filename (WordPress/gutenberg#76651) - Build: Skip non-minified build for WASM-inlined workers (WordPress/gutenberg#76615) - Improvements to dataviews infinite scroll (WordPress/gutenberg#74378) - Image/Site Logo: hide crop toolbar when editMediaEntity is unavailable (WordPress/gutenberg#76626) - Bump lodash from 4.17.21 to 4.17.23 in /platform-docs (WordPress/gutenberg#74829) - RTC: Change RTC option name (WordPress/gutenberg#76643) - Change from PR WordPress/gutenberg#11276 to WordPress/gutenberg#11234 with with different approach (WordPress/gutenberg#76661) - Build: Fix vips worker 404 when SCRIPT_DEBUG is true (WordPress/gutenberg#76657) - Build: Remove unused JXL WASM module from vips worker (WordPress/gutenberg#76639) - Storybook: disabled autodocs for Icon library (WordPress/gutenberg#76620) - Connectors: fix button size (WordPress/gutenberg#76582) - Revisions: Add Meta fields diff panel to document sidebar (WordPress/gutenberg#76341) - Reduce the added halo for selected block. (WordPress/gutenberg#76619) - Site Editor > Pages: move view config to the server (WordPress/gutenberg#76573) - ui/Tabs: add runtime validation for tab/panel mismatches (WordPress/gutenberg#75170) - Fix Color Picker Angle Reset on Gradient Type Change (WordPress/gutenberg#76595) - ESLint: Add `no-unmerged-classname` rule (WordPress/gutenberg#76458) - RTC: Backport race condition fix (WordPress/gutenberg#76649) - ui/Card: Add overflow: clip to root container (WordPress/gutenberg#76678) - Storybook: Make "introduction" top level (WordPress/gutenberg#76671) - Fix navigation block rendering unit test (WordPress/gutenberg#76685) - Hide Additional CSS controls when block is inside contentOnly editing mode (WordPress/gutenberg#76512) - RTC: Increase polling intervals, increase polling on primary room only (WordPress/gutenberg#76704) - Navigation: Avoid List View changing position when navigation block saves (WordPress/gutenberg#76659) - Fix navigation block unit test and e2e test (WordPress/gutenberg#76692) - Stretchy Text: Fix focus loss (WordPress/gutenberg#75092) - Fix locked content when switching to a different template without exiting 'Edit pattern' (WordPress/gutenberg#76710) - Guidelines: Improvements to the UX (WordPress/gutenberg#76383) - Fix: Create custom template modal content width (WordPress/gutenberg#76713) - Core Data: Optimize getRawEntityRecord selector (WordPress/gutenberg#76632) - Metabox: Fix checkbox style in sidebar (WordPress/gutenberg#76718) - Stop keeping stale controlled blocks after reset (WordPress/gutenberg#76591) - Gate client-side media processing as plugin-only (WordPress/gutenberg#76700) - Storybook: Add redirect for moved introduction page (WordPress/gutenberg#76701) - InputControl: Add to @wordpress/ui (WordPress/gutenberg#76653) - UI Tooltip: Improve documentation to cover intended accessibility practices (WordPress/gutenberg#76705) - Add EmptyState component to @wordpress/ui (WordPress/gutenberg#74719) - RTC: Use activation hook to enable RTC by default (WordPress/gutenberg#76736) - Forms Block: Add hidden input field variation (WordPress/gutenberg#74131) - Guidelines: Refactor components and improve TypeScript typing (WordPress/gutenberg#76394) - Connectors: Align client-side registration API with server-side (WordPress/gutenberg#76737) - Properly resolve `getTemplateId` for hybrid themes (WordPress/gutenberg#76532) - Changelog: Add missing label-to-feature mappings (WordPress/gutenberg#76646) - Connectors: Support non-AI provider types and add JS extensibility e2e test (WordPress/gutenberg#76722) - Experimental: Add `template` panel to include the existing template actions (WordPress/gutenberg#76539) - RadioControl: Add `role="radiogroup"` to fieldset (WordPress/gutenberg#76745) - wp-build: Hash transformed CSS for `data-wp-hash` dedupe key (WordPress/gutenberg#76743) - Button: restore specificity of high-contrast mode focus ring (WordPress/gutenberg#76719) - Updating versions in WordPress ahead of 7.0 (WordPress/gutenberg#76723) - Bump the github-actions group across 2 directories with 1 update (WordPress/gutenberg#76681) - Admin UI: Add CSS files to sideEffects array (WordPress/gutenberg#76609) - RTC: Add E2E "stress test" with complex interactions (WordPress/gutenberg#76055) - Connectors: Improve AI plugin button (WordPress/gutenberg#76759) - Login/out block: Add button block class names to the submit button (WordPress/gutenberg#76746) - Commands: Add sections to command palette and introduce Recently used functionality (WordPress/gutenberg#75691) - RTC: Use prepared queries instead of `*_post_meta` functions (WordPress/gutenberg#76779) - Core Abilities: fix sideEffects flag (WordPress/gutenberg#76763) - Site Editor > Patterns: move config to the server (WordPress/gutenberg#76734) - Docs: Remove Puppeteer references and update to Playwright (WordPress/gutenberg#76766) - Site Editor > Templates: move config to the server (WordPress/gutenberg#76622) - Core Data: Remove 'isRawAttribute' internal util (WordPress/gutenberg#76806) - Reset blockEditingModes on RESET_BLOCKS (WordPress/gutenberg#76529) - Refactor: Use null coalescing operator for improved readability (WordPress/gutenberg#76777) - ui/CollapsibleCard: do not animate focus ring (WordPress/gutenberg#76682) - admin-ui / Breadcrumbs: stricter `items[].to` prop types (WordPress/gutenberg#76493) - RTC: Remove stale wp_enable_real_time_collaboration option check (WordPress/gutenberg#76810) - Storybook: Try changing to collapsed folders (WordPress/gutenberg#76361) - @wordpress/dataviews: migrate card layout to @wordpress/ui (WordPress/gutenberg#76282) - RTC: Fix editor freeze when replacing code editor content (WordPress/gutenberg#76815) - Preferences: Hide collaboration options when RTC is not enabled (WordPress/gutenberg#76819) - Cherry-pick: Set milestone on PRs after cherry-picking to release branch (WordPress/gutenberg#76652) - Site Tagline: Fix block error when migrating deprecated textAlign attribute (WordPress/gutenberg#76821) - Commands: Fix unstable `useSelect` return value for `recentlyUsedNames` (WordPress/gutenberg#76822) - `ControlWithError`: Connect validation messages to controls via `aria-describedby` (WordPress/gutenberg#76742) - Block Editor: Deprecate '__unstableSaveReusableBlock' action (WordPress/gutenberg#76807) - Editor: Fix template revisions using 'modified' date field instead of 'date' (WordPress/gutenberg#76760) - UI: Clarify public APIs and component naming, remove NoticeIntent typings (WordPress/gutenberg#76791) - fix(date): Recover WP timezone after third-party moment-timezone reload (WordPress/gutenberg#75831) - Admin UI: Update Page background color (WordPress/gutenberg#76548) - Snackbar: Use surface-width design token for max-width (WordPress/gutenberg#76592) - iAPI Docs: Add client-side navigation compatibility guide (WordPress/gutenberg#76242) - Enhance block registration by using blocks-manifest for improved performance (WordPress/gutenberg#76317) - docs(create-block-interactive-template): document available variants in README (WordPress/gutenberg#76831) - Build: detect version and generate asset.php for vendor scripts (WordPress/gutenberg#76811) - Site Editor > Patterns & Parts: generate sidebar from view config (WordPress/gutenberg#76823) - Interactivity API: mention `client-side-navigation` scaffold variant in getting-started guide (WordPress/gutenberg#76543) - Fields: Add `excerpt` field (WordPress/gutenberg#76829) - Update PHP_CodeSniffer repository link and schema URL (WordPress/gutenberg#76816) - docs: Fix markdown links and PHP code block in client-side navigation compatibility guide (WordPress/gutenberg#76856) - Experimental: Add `revisions` panel (WordPress/gutenberg#76735) - WordPress/gutenberg#76478 Boot: Fix black area below content when sidebar is taller than page c… (WordPress/gutenberg#76764) - Style Book: Fix missing styles for classic themes in stylebook route (WordPress/gutenberg#76843) - UI/Dialog: Expose initialFocus and finalFocus on Dialog.Popup (WordPress/gutenberg#76860) - compose/useDialog: add `stopPropagation()` to Escape handler (WordPress/gutenberg#76861) - RTC: Add e2e block gauntlet (WordPress/gutenberg#76849) - UI: Add AlertDialog primitive (WordPress/gutenberg#76847) - RTC: Fix stuck "Join" link in post list when lock expires (WordPress/gutenberg#76795) - Site Editor: simplify sidebar for Pages & Templates (WordPress/gutenberg#76868) - Site Editor v2: Add missing menu items to navigation leaf more menu (WordPress/gutenberg#76804) - Navigation: Add a shared helper for font sizes in Navigation Link and Navigation Submenu blocks (WordPress/gutenberg#74855) - Reduce specificity of nav link default padding so global styles are applied (WordPress/gutenberg#76876) - Icon: Fix center alignment in the editor for classic themes (WordPress/gutenberg#76878) - RTC: Fix notes not syncing between collaborative editors (WordPress/gutenberg#76873) - List Item: Disable edit as HTML support (WordPress/gutenberg#76897) - Block Library: Show fallback label in MediaControl when filename is empty (WordPress/gutenberg#76888) - Image block media placeholder: remove duotone (WordPress/gutenberg#76721) - Latest Comments: Fix v1 deprecated block missing supports (WordPress/gutenberg#76877) - VIPS: ensure single instance (WordPress/gutenberg#76780) - React vendor script: avoid warning on createRoot (WordPress/gutenberg#76825) - Connectors: Add Akismet as a default connector (WordPress/gutenberg#76828) - Core Data: remove offset param from stableKey, use pagination logic (WordPress/gutenberg#76808) - Button: hide focus outline on :active for click feedback in forced-colors mode (WordPress/gutenberg#76833) - Restore with compaction update (WordPress/gutenberg#76872) - Theme: Change default control cursor to `pointer` (WordPress/gutenberg#76762) - E2E Tests: Enable client-side media processing for site editor image test (WordPress/gutenberg#76648) - ComboboxControl: Fix accessible association of `help` text (WordPress/gutenberg#76761) - Add backport for WP_ALLOW_COLLABORATION (WordPress/gutenberg#76716) - DataForm: Add `compact` configuration option to the `datetime` control (WordPress/gutenberg#76905) - Admin UI: Fix Page Header not rendering with only actions and add stories (WordPress/gutenberg#76695) - Improve JSDoc for abilities API (WordPress/gutenberg#76824) - DOM: Document class wildcard matcher for 'cleanNodeList' (WordPress/gutenberg#76920) - e2e: Add e2e tests for template and template part revisions (WordPress/gutenberg#76923) - react-dom vendor script: remove __esModule flag (WordPress/gutenberg#76925) - Site Editor: Fix unsupported theme flash on direct URL navigation (WordPress/gutenberg#76465) - Icons: Enforce strict name validation in `register` method (WordPress/gutenberg#76079) - ToggleGroupControl: Fix accessible association of `help` text (WordPress/gutenberg#76740) - Connectors: Replace plugin.slug with plugin.file (WordPress/gutenberg#76909) - UI/Dialog: deprioritize close icon for initial focus (WordPress/gutenberg#76910) - Block visibility badge: use canvas iframe for viewport detection (WordPress/gutenberg#76889) - Fields: Add `sticky` field (WordPress/gutenberg#76922) - DOM: Prefer standard `caretPositionFromPoint` over deprecated `caretRangeFromPoint` (WordPress/gutenberg#76921) - Block Supports: Add background gradient support that can combine with background images (WordPress/gutenberg#75859) - Tab Block: Remove anchor from save function (WordPress/gutenberg#76511) - CollapsibleCard: Add HeaderDescription subcomponent (WordPress/gutenberg#76867) - element: Make createInterpolateElement TS/type smart (WordPress/gutenberg#71513) - admin-ui: Update README to clarify purpose and distinguish from ui package (WordPress/gutenberg#76943) - Site Editor > Quick Edit: add form config to endpoint (WordPress/gutenberg#76953) - Fields: Tweak `excerpt` field (WordPress/gutenberg#76903) - Fix: Flaky RichText format e2e test (WordPress/gutenberg#76958) Props adamsilverstein, jorbin, westonruter, wildworks. Fixes #65556. Built from https://develop.svn.wordpress.org/trunk@62578 git-svn-id: http://core.svn.wordpress.org/trunk@61858 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This updates the pinned commit hash of the Gutenberg repository from `3166ad3c587b4091f77b0e16affeed5762e193f1` (version `22.8.0`) to `5426109cdaf45828ef28ff8527d7d38e7e75fe74` (version `22.9.0`). A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v22.8.0..v22.9.0. The following commits are included: - Real Time Collaboration: Introduce filters for the polling intervals. (WordPress/gutenberg#76518) - UI: Update @base-ui/react from 1.2.0 to 1.3.0 (WordPress/gutenberg#76603) - Card: Use Text component for Title typography (WordPress/gutenberg#76642) - Add TypeScript parser tests for shouldSkipReference (WordPress/gutenberg#76611) - Update changelog link for pull request 11276 (WordPress/gutenberg#76638) - ThemeProvider: Add `cursor` prop (WordPress/gutenberg#76410) - RTC: Fix RichTextData deserialization (WordPress/gutenberg#76607) - Cross Origin Isolation: Remove `img` from the list of elements that get mutated (WordPress/gutenberg#76618) - RTC: Scroll to collaborator on click (WordPress/gutenberg#76561) - Fix backport changelog filename (WordPress/gutenberg#76651) - Build: Skip non-minified build for WASM-inlined workers (WordPress/gutenberg#76615) - Improvements to dataviews infinite scroll (WordPress/gutenberg#74378) - Image/Site Logo: hide crop toolbar when editMediaEntity is unavailable (WordPress/gutenberg#76626) - Bump lodash from 4.17.21 to 4.17.23 in /platform-docs (WordPress/gutenberg#74829) - RTC: Change RTC option name (WordPress/gutenberg#76643) - Change from PR WordPress/gutenberg#11276 to WordPress/gutenberg#11234 with with different approach (WordPress/gutenberg#76661) - Build: Fix vips worker 404 when SCRIPT_DEBUG is true (WordPress/gutenberg#76657) - Build: Remove unused JXL WASM module from vips worker (WordPress/gutenberg#76639) - Storybook: disabled autodocs for Icon library (WordPress/gutenberg#76620) - Connectors: fix button size (WordPress/gutenberg#76582) - Revisions: Add Meta fields diff panel to document sidebar (WordPress/gutenberg#76341) - Reduce the added halo for selected block. (WordPress/gutenberg#76619) - Site Editor > Pages: move view config to the server (WordPress/gutenberg#76573) - ui/Tabs: add runtime validation for tab/panel mismatches (WordPress/gutenberg#75170) - Fix Color Picker Angle Reset on Gradient Type Change (WordPress/gutenberg#76595) - ESLint: Add `no-unmerged-classname` rule (WordPress/gutenberg#76458) - RTC: Backport race condition fix (WordPress/gutenberg#76649) - ui/Card: Add overflow: clip to root container (WordPress/gutenberg#76678) - Storybook: Make "introduction" top level (WordPress/gutenberg#76671) - Fix navigation block rendering unit test (WordPress/gutenberg#76685) - Hide Additional CSS controls when block is inside contentOnly editing mode (WordPress/gutenberg#76512) - RTC: Increase polling intervals, increase polling on primary room only (WordPress/gutenberg#76704) - Navigation: Avoid List View changing position when navigation block saves (WordPress/gutenberg#76659) - Fix navigation block unit test and e2e test (WordPress/gutenberg#76692) - Stretchy Text: Fix focus loss (WordPress/gutenberg#75092) - Fix locked content when switching to a different template without exiting 'Edit pattern' (WordPress/gutenberg#76710) - Guidelines: Improvements to the UX (WordPress/gutenberg#76383) - Fix: Create custom template modal content width (WordPress/gutenberg#76713) - Core Data: Optimize getRawEntityRecord selector (WordPress/gutenberg#76632) - Metabox: Fix checkbox style in sidebar (WordPress/gutenberg#76718) - Stop keeping stale controlled blocks after reset (WordPress/gutenberg#76591) - Gate client-side media processing as plugin-only (WordPress/gutenberg#76700) - Storybook: Add redirect for moved introduction page (WordPress/gutenberg#76701) - InputControl: Add to @wordpress/ui (WordPress/gutenberg#76653) - UI Tooltip: Improve documentation to cover intended accessibility practices (WordPress/gutenberg#76705) - Add EmptyState component to @wordpress/ui (WordPress/gutenberg#74719) - RTC: Use activation hook to enable RTC by default (WordPress/gutenberg#76736) - Forms Block: Add hidden input field variation (WordPress/gutenberg#74131) - Guidelines: Refactor components and improve TypeScript typing (WordPress/gutenberg#76394) - Connectors: Align client-side registration API with server-side (WordPress/gutenberg#76737) - Properly resolve `getTemplateId` for hybrid themes (WordPress/gutenberg#76532) - Changelog: Add missing label-to-feature mappings (WordPress/gutenberg#76646) - Connectors: Support non-AI provider types and add JS extensibility e2e test (WordPress/gutenberg#76722) - Experimental: Add `template` panel to include the existing template actions (WordPress/gutenberg#76539) - RadioControl: Add `role="radiogroup"` to fieldset (WordPress/gutenberg#76745) - wp-build: Hash transformed CSS for `data-wp-hash` dedupe key (WordPress/gutenberg#76743) - Button: restore specificity of high-contrast mode focus ring (WordPress/gutenberg#76719) - Updating versions in WordPress ahead of 7.0 (WordPress/gutenberg#76723) - Bump the github-actions group across 2 directories with 1 update (WordPress/gutenberg#76681) - Admin UI: Add CSS files to sideEffects array (WordPress/gutenberg#76609) - RTC: Add E2E "stress test" with complex interactions (WordPress/gutenberg#76055) - Connectors: Improve AI plugin button (WordPress/gutenberg#76759) - Login/out block: Add button block class names to the submit button (WordPress/gutenberg#76746) - Commands: Add sections to command palette and introduce Recently used functionality (WordPress/gutenberg#75691) - RTC: Use prepared queries instead of `*_post_meta` functions (WordPress/gutenberg#76779) - Core Abilities: fix sideEffects flag (WordPress/gutenberg#76763) - Site Editor > Patterns: move config to the server (WordPress/gutenberg#76734) - Docs: Remove Puppeteer references and update to Playwright (WordPress/gutenberg#76766) - Site Editor > Templates: move config to the server (WordPress/gutenberg#76622) - Core Data: Remove 'isRawAttribute' internal util (WordPress/gutenberg#76806) - Reset blockEditingModes on RESET_BLOCKS (WordPress/gutenberg#76529) - Refactor: Use null coalescing operator for improved readability (WordPress/gutenberg#76777) - ui/CollapsibleCard: do not animate focus ring (WordPress/gutenberg#76682) - admin-ui / Breadcrumbs: stricter `items[].to` prop types (WordPress/gutenberg#76493) - RTC: Remove stale wp_enable_real_time_collaboration option check (WordPress/gutenberg#76810) - Storybook: Try changing to collapsed folders (WordPress/gutenberg#76361) - @wordpress/dataviews: migrate card layout to @wordpress/ui (WordPress/gutenberg#76282) - RTC: Fix editor freeze when replacing code editor content (WordPress/gutenberg#76815) - Preferences: Hide collaboration options when RTC is not enabled (WordPress/gutenberg#76819) - Cherry-pick: Set milestone on PRs after cherry-picking to release branch (WordPress/gutenberg#76652) - Site Tagline: Fix block error when migrating deprecated textAlign attribute (WordPress/gutenberg#76821) - Commands: Fix unstable `useSelect` return value for `recentlyUsedNames` (WordPress/gutenberg#76822) - `ControlWithError`: Connect validation messages to controls via `aria-describedby` (WordPress/gutenberg#76742) - Block Editor: Deprecate '__unstableSaveReusableBlock' action (WordPress/gutenberg#76807) - Editor: Fix template revisions using 'modified' date field instead of 'date' (WordPress/gutenberg#76760) - UI: Clarify public APIs and component naming, remove NoticeIntent typings (WordPress/gutenberg#76791) - fix(date): Recover WP timezone after third-party moment-timezone reload (WordPress/gutenberg#75831) - Admin UI: Update Page background color (WordPress/gutenberg#76548) - Snackbar: Use surface-width design token for max-width (WordPress/gutenberg#76592) - iAPI Docs: Add client-side navigation compatibility guide (WordPress/gutenberg#76242) - Enhance block registration by using blocks-manifest for improved performance (WordPress/gutenberg#76317) - docs(create-block-interactive-template): document available variants in README (WordPress/gutenberg#76831) - Build: detect version and generate asset.php for vendor scripts (WordPress/gutenberg#76811) - Site Editor > Patterns & Parts: generate sidebar from view config (WordPress/gutenberg#76823) - Interactivity API: mention `client-side-navigation` scaffold variant in getting-started guide (WordPress/gutenberg#76543) - Fields: Add `excerpt` field (WordPress/gutenberg#76829) - Update PHP_CodeSniffer repository link and schema URL (WordPress/gutenberg#76816) - docs: Fix markdown links and PHP code block in client-side navigation compatibility guide (WordPress/gutenberg#76856) - Experimental: Add `revisions` panel (WordPress/gutenberg#76735) - WordPress/gutenberg#76478 Boot: Fix black area below content when sidebar is taller than page c… (WordPress/gutenberg#76764) - Style Book: Fix missing styles for classic themes in stylebook route (WordPress/gutenberg#76843) - UI/Dialog: Expose initialFocus and finalFocus on Dialog.Popup (WordPress/gutenberg#76860) - compose/useDialog: add `stopPropagation()` to Escape handler (WordPress/gutenberg#76861) - RTC: Add e2e block gauntlet (WordPress/gutenberg#76849) - UI: Add AlertDialog primitive (WordPress/gutenberg#76847) - RTC: Fix stuck "Join" link in post list when lock expires (WordPress/gutenberg#76795) - Site Editor: simplify sidebar for Pages & Templates (WordPress/gutenberg#76868) - Site Editor v2: Add missing menu items to navigation leaf more menu (WordPress/gutenberg#76804) - Navigation: Add a shared helper for font sizes in Navigation Link and Navigation Submenu blocks (WordPress/gutenberg#74855) - Reduce specificity of nav link default padding so global styles are applied (WordPress/gutenberg#76876) - Icon: Fix center alignment in the editor for classic themes (WordPress/gutenberg#76878) - RTC: Fix notes not syncing between collaborative editors (WordPress/gutenberg#76873) - List Item: Disable edit as HTML support (WordPress/gutenberg#76897) - Block Library: Show fallback label in MediaControl when filename is empty (WordPress/gutenberg#76888) - Image block media placeholder: remove duotone (WordPress/gutenberg#76721) - Latest Comments: Fix v1 deprecated block missing supports (WordPress/gutenberg#76877) - VIPS: ensure single instance (WordPress/gutenberg#76780) - React vendor script: avoid warning on createRoot (WordPress/gutenberg#76825) - Connectors: Add Akismet as a default connector (WordPress/gutenberg#76828) - Core Data: remove offset param from stableKey, use pagination logic (WordPress/gutenberg#76808) - Button: hide focus outline on :active for click feedback in forced-colors mode (WordPress/gutenberg#76833) - Restore with compaction update (WordPress/gutenberg#76872) - Theme: Change default control cursor to `pointer` (WordPress/gutenberg#76762) - E2E Tests: Enable client-side media processing for site editor image test (WordPress/gutenberg#76648) - ComboboxControl: Fix accessible association of `help` text (WordPress/gutenberg#76761) - Add backport for WP_ALLOW_COLLABORATION (WordPress/gutenberg#76716) - DataForm: Add `compact` configuration option to the `datetime` control (WordPress/gutenberg#76905) - Admin UI: Fix Page Header not rendering with only actions and add stories (WordPress/gutenberg#76695) - Improve JSDoc for abilities API (WordPress/gutenberg#76824) - DOM: Document class wildcard matcher for 'cleanNodeList' (WordPress/gutenberg#76920) - e2e: Add e2e tests for template and template part revisions (WordPress/gutenberg#76923) - react-dom vendor script: remove __esModule flag (WordPress/gutenberg#76925) - Site Editor: Fix unsupported theme flash on direct URL navigation (WordPress/gutenberg#76465) - Icons: Enforce strict name validation in `register` method (WordPress/gutenberg#76079) - ToggleGroupControl: Fix accessible association of `help` text (WordPress/gutenberg#76740) - Connectors: Replace plugin.slug with plugin.file (WordPress/gutenberg#76909) - UI/Dialog: deprioritize close icon for initial focus (WordPress/gutenberg#76910) - Block visibility badge: use canvas iframe for viewport detection (WordPress/gutenberg#76889) - Fields: Add `sticky` field (WordPress/gutenberg#76922) - DOM: Prefer standard `caretPositionFromPoint` over deprecated `caretRangeFromPoint` (WordPress/gutenberg#76921) - Block Supports: Add background gradient support that can combine with background images (WordPress/gutenberg#75859) - Tab Block: Remove anchor from save function (WordPress/gutenberg#76511) - CollapsibleCard: Add HeaderDescription subcomponent (WordPress/gutenberg#76867) - element: Make createInterpolateElement TS/type smart (WordPress/gutenberg#71513) - admin-ui: Update README to clarify purpose and distinguish from ui package (WordPress/gutenberg#76943) - Site Editor > Quick Edit: add form config to endpoint (WordPress/gutenberg#76953) - Fields: Tweak `excerpt` field (WordPress/gutenberg#76903) - Fix: Flaky RichText format e2e test (WordPress/gutenberg#76958) Props adamsilverstein, jorbin, westonruter, wildworks. Fixes #65556. git-svn-id: https://develop.svn.wordpress.org/trunk@62578 602fd350-edb4-49c9-b593-d223f7449a82
This updates the pinned commit hash of the Gutenberg repository from `3166ad3c587b4091f77b0e16affeed5762e193f1` (version `22.8.0`) to `5426109cdaf45828ef28ff8527d7d38e7e75fe74` (version `22.9.0`). A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v22.8.0..v22.9.0. The following commits are included: - Real Time Collaboration: Introduce filters for the polling intervals. (WordPress/gutenberg#76518) - UI: Update @base-ui/react from 1.2.0 to 1.3.0 (WordPress/gutenberg#76603) - Card: Use Text component for Title typography (WordPress/gutenberg#76642) - Add TypeScript parser tests for shouldSkipReference (WordPress/gutenberg#76611) - Update changelog link for pull request 11276 (WordPress/gutenberg#76638) - ThemeProvider: Add `cursor` prop (WordPress/gutenberg#76410) - RTC: Fix RichTextData deserialization (WordPress/gutenberg#76607) - Cross Origin Isolation: Remove `img` from the list of elements that get mutated (WordPress/gutenberg#76618) - RTC: Scroll to collaborator on click (WordPress/gutenberg#76561) - Fix backport changelog filename (WordPress/gutenberg#76651) - Build: Skip non-minified build for WASM-inlined workers (WordPress/gutenberg#76615) - Improvements to dataviews infinite scroll (WordPress/gutenberg#74378) - Image/Site Logo: hide crop toolbar when editMediaEntity is unavailable (WordPress/gutenberg#76626) - Bump lodash from 4.17.21 to 4.17.23 in /platform-docs (WordPress/gutenberg#74829) - RTC: Change RTC option name (WordPress/gutenberg#76643) - Change from PR WordPress/gutenberg#11276 to WordPress/gutenberg#11234 with with different approach (WordPress/gutenberg#76661) - Build: Fix vips worker 404 when SCRIPT_DEBUG is true (WordPress/gutenberg#76657) - Build: Remove unused JXL WASM module from vips worker (WordPress/gutenberg#76639) - Storybook: disabled autodocs for Icon library (WordPress/gutenberg#76620) - Connectors: fix button size (WordPress/gutenberg#76582) - Revisions: Add Meta fields diff panel to document sidebar (WordPress/gutenberg#76341) - Reduce the added halo for selected block. (WordPress/gutenberg#76619) - Site Editor > Pages: move view config to the server (WordPress/gutenberg#76573) - ui/Tabs: add runtime validation for tab/panel mismatches (WordPress/gutenberg#75170) - Fix Color Picker Angle Reset on Gradient Type Change (WordPress/gutenberg#76595) - ESLint: Add `no-unmerged-classname` rule (WordPress/gutenberg#76458) - RTC: Backport race condition fix (WordPress/gutenberg#76649) - ui/Card: Add overflow: clip to root container (WordPress/gutenberg#76678) - Storybook: Make "introduction" top level (WordPress/gutenberg#76671) - Fix navigation block rendering unit test (WordPress/gutenberg#76685) - Hide Additional CSS controls when block is inside contentOnly editing mode (WordPress/gutenberg#76512) - RTC: Increase polling intervals, increase polling on primary room only (WordPress/gutenberg#76704) - Navigation: Avoid List View changing position when navigation block saves (WordPress/gutenberg#76659) - Fix navigation block unit test and e2e test (WordPress/gutenberg#76692) - Stretchy Text: Fix focus loss (WordPress/gutenberg#75092) - Fix locked content when switching to a different template without exiting 'Edit pattern' (WordPress/gutenberg#76710) - Guidelines: Improvements to the UX (WordPress/gutenberg#76383) - Fix: Create custom template modal content width (WordPress/gutenberg#76713) - Core Data: Optimize getRawEntityRecord selector (WordPress/gutenberg#76632) - Metabox: Fix checkbox style in sidebar (WordPress/gutenberg#76718) - Stop keeping stale controlled blocks after reset (WordPress/gutenberg#76591) - Gate client-side media processing as plugin-only (WordPress/gutenberg#76700) - Storybook: Add redirect for moved introduction page (WordPress/gutenberg#76701) - InputControl: Add to @wordpress/ui (WordPress/gutenberg#76653) - UI Tooltip: Improve documentation to cover intended accessibility practices (WordPress/gutenberg#76705) - Add EmptyState component to @wordpress/ui (WordPress/gutenberg#74719) - RTC: Use activation hook to enable RTC by default (WordPress/gutenberg#76736) - Forms Block: Add hidden input field variation (WordPress/gutenberg#74131) - Guidelines: Refactor components and improve TypeScript typing (WordPress/gutenberg#76394) - Connectors: Align client-side registration API with server-side (WordPress/gutenberg#76737) - Properly resolve `getTemplateId` for hybrid themes (WordPress/gutenberg#76532) - Changelog: Add missing label-to-feature mappings (WordPress/gutenberg#76646) - Connectors: Support non-AI provider types and add JS extensibility e2e test (WordPress/gutenberg#76722) - Experimental: Add `template` panel to include the existing template actions (WordPress/gutenberg#76539) - RadioControl: Add `role="radiogroup"` to fieldset (WordPress/gutenberg#76745) - wp-build: Hash transformed CSS for `data-wp-hash` dedupe key (WordPress/gutenberg#76743) - Button: restore specificity of high-contrast mode focus ring (WordPress/gutenberg#76719) - Updating versions in WordPress ahead of 7.0 (WordPress/gutenberg#76723) - Bump the github-actions group across 2 directories with 1 update (WordPress/gutenberg#76681) - Admin UI: Add CSS files to sideEffects array (WordPress/gutenberg#76609) - RTC: Add E2E "stress test" with complex interactions (WordPress/gutenberg#76055) - Connectors: Improve AI plugin button (WordPress/gutenberg#76759) - Login/out block: Add button block class names to the submit button (WordPress/gutenberg#76746) - Commands: Add sections to command palette and introduce Recently used functionality (WordPress/gutenberg#75691) - RTC: Use prepared queries instead of `*_post_meta` functions (WordPress/gutenberg#76779) - Core Abilities: fix sideEffects flag (WordPress/gutenberg#76763) - Site Editor > Patterns: move config to the server (WordPress/gutenberg#76734) - Docs: Remove Puppeteer references and update to Playwright (WordPress/gutenberg#76766) - Site Editor > Templates: move config to the server (WordPress/gutenberg#76622) - Core Data: Remove 'isRawAttribute' internal util (WordPress/gutenberg#76806) - Reset blockEditingModes on RESET_BLOCKS (WordPress/gutenberg#76529) - Refactor: Use null coalescing operator for improved readability (WordPress/gutenberg#76777) - ui/CollapsibleCard: do not animate focus ring (WordPress/gutenberg#76682) - admin-ui / Breadcrumbs: stricter `items[].to` prop types (WordPress/gutenberg#76493) - RTC: Remove stale wp_enable_real_time_collaboration option check (WordPress/gutenberg#76810) - Storybook: Try changing to collapsed folders (WordPress/gutenberg#76361) - @wordpress/dataviews: migrate card layout to @wordpress/ui (WordPress/gutenberg#76282) - RTC: Fix editor freeze when replacing code editor content (WordPress/gutenberg#76815) - Preferences: Hide collaboration options when RTC is not enabled (WordPress/gutenberg#76819) - Cherry-pick: Set milestone on PRs after cherry-picking to release branch (WordPress/gutenberg#76652) - Site Tagline: Fix block error when migrating deprecated textAlign attribute (WordPress/gutenberg#76821) - Commands: Fix unstable `useSelect` return value for `recentlyUsedNames` (WordPress/gutenberg#76822) - `ControlWithError`: Connect validation messages to controls via `aria-describedby` (WordPress/gutenberg#76742) - Block Editor: Deprecate '__unstableSaveReusableBlock' action (WordPress/gutenberg#76807) - Editor: Fix template revisions using 'modified' date field instead of 'date' (WordPress/gutenberg#76760) - UI: Clarify public APIs and component naming, remove NoticeIntent typings (WordPress/gutenberg#76791) - fix(date): Recover WP timezone after third-party moment-timezone reload (WordPress/gutenberg#75831) - Admin UI: Update Page background color (WordPress/gutenberg#76548) - Snackbar: Use surface-width design token for max-width (WordPress/gutenberg#76592) - iAPI Docs: Add client-side navigation compatibility guide (WordPress/gutenberg#76242) - Enhance block registration by using blocks-manifest for improved performance (WordPress/gutenberg#76317) - docs(create-block-interactive-template): document available variants in README (WordPress/gutenberg#76831) - Build: detect version and generate asset.php for vendor scripts (WordPress/gutenberg#76811) - Site Editor > Patterns & Parts: generate sidebar from view config (WordPress/gutenberg#76823) - Interactivity API: mention `client-side-navigation` scaffold variant in getting-started guide (WordPress/gutenberg#76543) - Fields: Add `excerpt` field (WordPress/gutenberg#76829) - Update PHP_CodeSniffer repository link and schema URL (WordPress/gutenberg#76816) - docs: Fix markdown links and PHP code block in client-side navigation compatibility guide (WordPress/gutenberg#76856) - Experimental: Add `revisions` panel (WordPress/gutenberg#76735) - WordPress/gutenberg#76478 Boot: Fix black area below content when sidebar is taller than page c… (WordPress/gutenberg#76764) - Style Book: Fix missing styles for classic themes in stylebook route (WordPress/gutenberg#76843) - UI/Dialog: Expose initialFocus and finalFocus on Dialog.Popup (WordPress/gutenberg#76860) - compose/useDialog: add `stopPropagation()` to Escape handler (WordPress/gutenberg#76861) - RTC: Add e2e block gauntlet (WordPress/gutenberg#76849) - UI: Add AlertDialog primitive (WordPress/gutenberg#76847) - RTC: Fix stuck "Join" link in post list when lock expires (WordPress/gutenberg#76795) - Site Editor: simplify sidebar for Pages & Templates (WordPress/gutenberg#76868) - Site Editor v2: Add missing menu items to navigation leaf more menu (WordPress/gutenberg#76804) - Navigation: Add a shared helper for font sizes in Navigation Link and Navigation Submenu blocks (WordPress/gutenberg#74855) - Reduce specificity of nav link default padding so global styles are applied (WordPress/gutenberg#76876) - Icon: Fix center alignment in the editor for classic themes (WordPress/gutenberg#76878) - RTC: Fix notes not syncing between collaborative editors (WordPress/gutenberg#76873) - List Item: Disable edit as HTML support (WordPress/gutenberg#76897) - Block Library: Show fallback label in MediaControl when filename is empty (WordPress/gutenberg#76888) - Image block media placeholder: remove duotone (WordPress/gutenberg#76721) - Latest Comments: Fix v1 deprecated block missing supports (WordPress/gutenberg#76877) - VIPS: ensure single instance (WordPress/gutenberg#76780) - React vendor script: avoid warning on createRoot (WordPress/gutenberg#76825) - Connectors: Add Akismet as a default connector (WordPress/gutenberg#76828) - Core Data: remove offset param from stableKey, use pagination logic (WordPress/gutenberg#76808) - Button: hide focus outline on :active for click feedback in forced-colors mode (WordPress/gutenberg#76833) - Restore with compaction update (WordPress/gutenberg#76872) - Theme: Change default control cursor to `pointer` (WordPress/gutenberg#76762) - E2E Tests: Enable client-side media processing for site editor image test (WordPress/gutenberg#76648) - ComboboxControl: Fix accessible association of `help` text (WordPress/gutenberg#76761) - Add backport for WP_ALLOW_COLLABORATION (WordPress/gutenberg#76716) - DataForm: Add `compact` configuration option to the `datetime` control (WordPress/gutenberg#76905) - Admin UI: Fix Page Header not rendering with only actions and add stories (WordPress/gutenberg#76695) - Improve JSDoc for abilities API (WordPress/gutenberg#76824) - DOM: Document class wildcard matcher for 'cleanNodeList' (WordPress/gutenberg#76920) - e2e: Add e2e tests for template and template part revisions (WordPress/gutenberg#76923) - react-dom vendor script: remove __esModule flag (WordPress/gutenberg#76925) - Site Editor: Fix unsupported theme flash on direct URL navigation (WordPress/gutenberg#76465) - Icons: Enforce strict name validation in `register` method (WordPress/gutenberg#76079) - ToggleGroupControl: Fix accessible association of `help` text (WordPress/gutenberg#76740) - Connectors: Replace plugin.slug with plugin.file (WordPress/gutenberg#76909) - UI/Dialog: deprioritize close icon for initial focus (WordPress/gutenberg#76910) - Block visibility badge: use canvas iframe for viewport detection (WordPress/gutenberg#76889) - Fields: Add `sticky` field (WordPress/gutenberg#76922) - DOM: Prefer standard `caretPositionFromPoint` over deprecated `caretRangeFromPoint` (WordPress/gutenberg#76921) - Block Supports: Add background gradient support that can combine with background images (WordPress/gutenberg#75859) - Tab Block: Remove anchor from save function (WordPress/gutenberg#76511) - CollapsibleCard: Add HeaderDescription subcomponent (WordPress/gutenberg#76867) - element: Make createInterpolateElement TS/type smart (WordPress/gutenberg#71513) - admin-ui: Update README to clarify purpose and distinguish from ui package (WordPress/gutenberg#76943) - Site Editor > Quick Edit: add form config to endpoint (WordPress/gutenberg#76953) - Fields: Tweak `excerpt` field (WordPress/gutenberg#76903) - Fix: Flaky RichText format e2e test (WordPress/gutenberg#76958) Props adamsilverstein, jorbin, westonruter, wildworks. Fixes #65556. git-svn-id: https://develop.svn.wordpress.org/trunk@62578 602fd350-edb4-49c9-b593-d223f7449a82
Prerequisite for #76837
What?
Add a new
AlertDialogcompound component to@wordpress/ui, built on top of Base UI'sAlertDialog. Also fixesDialog.Actiondisabled/loading prop forwarding.Why?
Provides a standardized alert dialog pattern for common confirm/cancel flows — including destructive and irreversible actions — so consumers don't need to compose
Dialogfrom scratch for these use cases.An alert dialog requires a user response to proceed. It uses
role="alertdialog", is always modal, and blocks backdrop click dismissal to ensure the user makes an explicit choice.How?
AlertDialogwraps Base UI'sAlertDialog.Rootand exposes a compound API:AlertDialog.Root,AlertDialog.Trigger, andAlertDialog.Popup.Implementation details
Component structure
Root— wraps Base UI'sAlertDialog.Root, managesAlertDialogContext(intent).Popup— rendersDialog.Popupwith a header (title), body (children), and footer (cancel + confirm actions).Trigger— thin wrapper overDialog.Trigger.context.tsx— providesAlertDialogContextwith the currentintent.Intent system
The
intentprop onRootcontrols styling:defaultirreversiblealertdialogalertdialogloadingprop (async confirm flows)AlertDialog.Popupaccepts aloadingprop that shows a spinner on the confirm button and disables both buttons. Whenloadingis provided, the confirm button renders as a plainButton(instead ofDialog.Action) so clicking it doesn't auto-close — this avoids a race condition where_Dialog.Close's close handler fires before the consumer'sonClick.Important: Passing
loading— even asfalse— opts into manual-close mode. The consumer is responsible for closing the dialog viaopen={false}. Omit the prop entirely for the default auto-close-on-confirm behavior. This contract is encoded in tests and documented in the prop's JSDoc.All async flow logic is consumer-side:
open/onOpenChange)onOpenChangewhile loadingloadingtoAlertDialog.Popupopen={false}when the operation completesDialog.Action disabled/loading fix
Dialog.Actionwraps Base UI'sDialog.Close, which defaultsdisabledtofalseinternally. This caused itsuseButtonto setaria-disabled="false", overriding Button's ownaria-disabledderived fromloading. Fixed by extractingdisabledandloading, resolving them (disabled ?? loading), and forwarding correctly to bothDialog.CloseandButton.Testing Instructions
Storybook
npm run storybook:devUnit tests
Testing Instructions for Keyboard
Use of AI Tools
Cursor + Claude Opus 4.6. All code was reviewed and validated by the author.