Skip to content

DataViews: Migrate modals from @wordpress/components Modal to @wordpress/ui Dialog#76837

Closed
ciampo wants to merge 33 commits into
trunkfrom
refactor/dataviews-ui-dialog
Closed

DataViews: Migrate modals from @wordpress/components Modal to @wordpress/ui Dialog#76837
ciampo wants to merge 33 commits into
trunkfrom
refactor/dataviews-ui-dialog

Conversation

@ciampo
Copy link
Copy Markdown
Contributor

@ciampo ciampo commented Mar 26, 2026

Builds on #76487. Depends on:

What?

Migrate three overlay surfaces away from @wordpress/components Modal:

  • DataViews action modals@wordpress/ui Dialog (alertdialog semantics for destructive actions).
  • DataForm panel modal@wordpress/ui Dialog.
  • Edit Site Quick Edit panel@wordpress/ui Drawer (replaces ~90 lines of custom drawer-emulation CSS).

Also migrates the two remaining direct RenderModal consumers (Page Templates' duplicate dialog and the duplicated ActionModal in @wordpress/editor) to Dialog so internal RenderModals can adopt Dialog.Action for Cancel.

⚠️ Heads-up for reviewers — Action.RenderModal host-contract refinement

Phase B of this PR replaces the Cancel button inside every internal Action.RenderModal with @wordpress/ui Dialog.Action. Dialog.Action requires a Dialog.Root ancestor — Base UI throws "Dialog parts must be placed within <Dialog.Root>" otherwise. Practical implications:

  • In-tree consumers: every place we render <action.RenderModal> (DataViews item-actions, editor PostActions, edit-site page-templates) now wraps the content in Dialog.Root. ✓
  • External consumers: plugins or custom UIs that import an exported action (e.g. deleteTaxonomyAction, deletePostTypeAction, the fields/* actions, the editor's set-as-* actions) and render its RenderModal outside a Dialog.Root will crash on first render of the popup body.

The pre-migration implicit contract was "render RenderModal inside any modal-like host" (<Modal> and <Dialog> both qualified). The new contract is narrower: "render inside a Dialog.Root ancestor". This is a deliberate trade-off — the alternative (keep <Button onClick={ closeModal }> in every RenderModal body) avoids the public-API ratchet but loses idiomatic Cancel-via-Dialog-primitives. I'd appreciate explicit reviewer input on whether this trade-off is acceptable, or whether Phase B should be reverted in favour of host-agnostic <Button> Cancel buttons.

Made loud in the diff via:

  • Breaking Changes entries in @wordpress/dataviews, @wordpress/fields, and @wordpress/editor CHANGELOGs.
  • A header comment above every migrated RenderModal: declaration (11 files) calling out the requirement and pointing to RenderModalProps JSDoc.
  • Updated JSDoc on RenderModalProps.RenderModal in packages/dataviews/src/types/dataviews.ts.

Why?

Dialog and Drawer are the recommended replacements for Modal, and migrating real consumers validates the new APIs.

How?

Tests land first to spec the migration, then the migration itself, then per-instance z-index scoping (via portal from #77452) and the Quick Edit Drawer swap.

Implementation details
  • Action modals: Dialog.Root + Dialog.Popup + Dialog.Header/Dialog.Content/Dialog.Footer. Destructive actions (hideModalHeader: true) use disablePointerDismissal and role="alertdialog" on Dialog.Popup, with a visually-hidden Dialog.Title for the accessible name. Dialog.Root / Dialog.Trigger live at the call site (per-action ModalActionMenuItem / ModalActionInlineButton) so each modal action owns its own open state.
  • Z-index scoping: per-portal class dataviews-action-modal__portal carries the legacy --wp-ui-dialog-z-index override. A small wp-ui-legacy-compat.scss also seeds :root defaults for --wp-ui-dialog-z-index / --wp-ui-tooltip-z-index so @wordpress/ui overlays coexist with legacy @wordpress/components overlays during the transition. The editor's editor-action-modal__portal follows the same pattern.
  • modalSize: union extended with 'stretch' and 'full'; 'fill' deprecated (since: 15.0.0) and aliased to 'stretch'.
  • Focus mapping: shared useMapFocusOnMount helper translates the legacy focusOnMount values onto Base UI's initialFocus. With Base UI's smart default, 'firstElement' and 'firstContentElement' now behave identically (both skip the close icon and focus the first content tabbable) — documented in the CHANGELOG.
  • Quick Edit panel: Drawer.Root (swipeDirection="right", physical in both LTR and RTL) + Drawer.Popup + Drawer.Header (with Drawer.Title + Drawer.CloseIcon) + Drawer.Content + Drawer.Footer. The ~90 lines of drawer-emulation CSS in post-list/style.scss are gone.
  • Modal session lifecycle: all migrated modals follow the same pattern — always-mounted Dialog.Root / Drawer.Root with open controlled by parent state, and per-session state bound to the popup's mount lifecycle so it auto-resets between sessions and stays rendered through the exit animation. Action modals render one <ActionModal> per modal action with a stable action prop. PanelModal extracts a <PanelModalSession> whose key is bumped from onOpenChangeComplete to preserve the existing "Cancel/close always wipes the draft" semantic. QuickEditModal extracts a <QuickEditSession> as a child of Drawer.Popup so Base UI's portal manages its mount/unmount.
  • Idiomatic Dialog.Action / Drawer.Action: Cancel buttons in PanelModal, QuickEditModal, and every internal RenderModal (fields/*, user-taxonomies/delete, user-post-types/delete, editor/post-actions/set-as-*) move from <Button variant="tertiary" onClick={ closeModal }> to <Dialog.Action variant="outline"> / <Drawer.Action variant="outline">. Async submit/destructive buttons stay as plain <Button> so they can surface isBusy and decide when to close based on success/error. See the heads-up note above for the host-contract implication.
  • CSS cleanup: removed .components-modal__frame / [role="document"] overrides for duplicateTemplatePart and duplicatePattern (replaced by modalSize: 'small' on the action definitions); removed .dataforms-layouts-panel__modal-footer margin and the stale dataforms-layouts-panel__modal className.

Testing Instructions

  1. Site Editor → Patterns or Template Parts → trigger Rename, Duplicate, Delete: verify open/close via close icon, Escape, and backdrop click.
  2. Destructive actions (Delete, Trash, Reset): backdrop click should NOT dismiss; Escape should.
  3. Duplicate Template Part / Duplicate Pattern: small modal size, focus on first input.
  4. DataForm panel modals (where available): Cancel/Apply work, focus on first input. Open, type, Cancel, immediately re-open: form should be empty (wipe-on-close preserved). During exit animation the form contents should remain populated and not flash empty.
  5. Quick Edit panel (any post-type list → select → Quick Edit): slides in from the right, Cancel/Done work, Escape closes, swipe-right dismisses on touch devices. Closing should animate the form out smoothly without the contents blanking mid-animation.
  6. Page Templates → registered template row click: opens the duplicate dialog; Cancel and submit close it cleanly.
  7. Post editor → "All actions" menu: any modal action (Trash, Rename, Duplicate, Set as homepage…) opens through Dialog.Trigger; Cancel via Dialog.Action, Escape, and backdrop all close.

Testing Instructions for Keyboard

Open an action modal via keyboard, Tab cycles within it, Escape returns focus to the trigger, and focus on mount lands inside the content (not on the close icon).

TODO / Follow-ups

  • New modal: { type: 'dialog' | 'confirm' } action API to replace RenderModal / hideModalHeader (separate PR; also where aria-describedby for alert dialogs gets wired in).
  • Same migration for the duplicated Quick Edit panel in routes/post-list/quick-edit-modal.tsx (the new admin-shell location).
  • Move the :root --wp-ui-*-z-index defaults from wp-ui-legacy-compat.scss into a shell-level adapter once the long-term overlay-stacking plan lands.
  • swipeDirection could expose a logical inline-end value upstream so RTL flips automatically.
  • QuickEdit: surface aggregated save-result feedback. Pre-existing gap (independent of this PR): saveEditedEntityRecord doesn't dispatch its own snackbar, and Quick Edit doesn't pass throwOnError, so users get no feedback on success or failure (single or bulk). Follow-up should pass { throwOnError: true }, run Promise.allSettled, and emit one aggregate snackbar per save batch — same pattern as permanently-delete-post's RenderModal. Fits behind the synchronous-close UX (notice fires asynchronously after the drawer dismisses).
  • Hoist the duplicated mapModalSize / useMapFocusOnMount / ActionModal shape out of @wordpress/dataviews and @wordpress/editor into a shared module once a neutral home exists. The two are kept in lockstep manually right now (see comment block at the top of the editor's post-actions/index.js).

Use of AI Tools

Cursor + Claude Opus 4.7

@github-actions github-actions Bot added [Package] Compose /packages/compose [Package] Edit Site /packages/edit-site [Package] DataViews /packages/dataviews [Package] Fields /packages/fields [Package] UI /packages/ui labels Mar 26, 2026
@ciampo ciampo force-pushed the refactor/dataviews-ui-dialog branch from 50a77c2 to a8b8a61 Compare March 26, 2026 15:02
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Mar 26, 2026

Size Change: +212 kB (+2.7%)

Total Size: 8.08 MB

📦 View Changed
Filename Size Change
build/scripts/block-editor/index.min.js 389 kB +47.8 kB (+14.01%) ⚠️
build/scripts/edit-site/index.min.js 329 kB +64.8 kB (+24.54%) 🚨
build/scripts/editor/index.min.js 472 kB +48 kB (+11.31%) ⚠️
build/scripts/media-utils/index.min.js 132 kB +52.7 kB (+66.32%) 🆘
build/styles/edit-site/style-rtl.css 20.1 kB -276 B (-1.36%)
build/styles/edit-site/style-rtl.min.css 16.2 kB -284 B (-1.72%)
build/styles/edit-site/style.css 20.1 kB -277 B (-1.36%)
build/styles/edit-site/style.min.css 16.2 kB -280 B (-1.69%)
build/styles/editor/style-rtl.css 27.2 kB +19 B (+0.07%)
build/styles/editor/style-rtl.min.css 22.9 kB +15 B (+0.07%)
build/styles/editor/style.css 27.3 kB +19 B (+0.07%)
build/styles/editor/style.min.css 22.9 kB +17 B (+0.07%)
ℹ️ View Unchanged
Filename Size
build/modules/a11y/index.min.js 355 B
build/modules/abilities/index.min.js 42.3 kB
build/modules/block-editor/utils/fit-text-frontend.min.js 617 B
build/modules/block-library/accordion/view.min.js 595 B
build/modules/block-library/file/view.min.js 346 B
build/modules/block-library/form/view.min.js 528 B
build/modules/block-library/image/view.min.js 2.64 kB
build/modules/block-library/navigation/view.min.js 1.14 kB
build/modules/block-library/playlist/view.min.js 10.9 kB
build/modules/block-library/query/view.min.js 518 B
build/modules/block-library/search/view.min.js 498 B
build/modules/block-library/tabs/view.min.js 946 B
build/modules/boot/index.min.js 18.6 kB
build/modules/connectors/index.min.js 2.05 kB
build/modules/core-abilities/index.min.js 907 B
build/modules/edit-site-init/index.min.js 1.4 kB
build/modules/interactivity-router/full-page.min.js 451 B
build/modules/interactivity-router/index.min.js 11.6 kB
build/modules/interactivity/index.min.js 15.1 kB
build/modules/latex-to-mathml/index.min.js 56.5 kB
build/modules/latex-to-mathml/loader.min.js 131 B
build/modules/lazy-editor/index.min.js 13.9 kB
build/modules/route/index.min.js 25.2 kB
build/modules/user-post-types/index.min.js 49 kB
build/modules/user-taxonomies/index.min.js 48.8 kB
build/modules/vips/loader.min.js 127 B
build/modules/vips/worker.min.js 4.56 MB
build/modules/workflow/index.min.js 19.9 kB
build/scripts/a11y/index.min.js 1.06 kB
build/scripts/annotations/index.min.js 2.49 kB
build/scripts/api-fetch/index.min.js 2.83 kB
build/scripts/autop/index.min.js 2.18 kB
build/scripts/base-styles/index.min.js 98 B
build/scripts/blob/index.min.js 631 B
build/scripts/block-directory/index.min.js 9.98 kB
build/scripts/block-library/index.min.js 319 kB
build/scripts/block-serialization-default-parser/index.min.js 1.16 kB
build/scripts/block-serialization-spec-parser/index.min.js 3.08 kB
build/scripts/blocks/index.min.js 56.9 kB
build/scripts/commands/index.min.js 21 kB
build/scripts/components/index.min.js 266 kB
build/scripts/compose/index.min.js 11.1 kB
build/scripts/core-commands/index.min.js 4.33 kB
build/scripts/core-data/index.min.js 30.8 kB
build/scripts/customize-widgets/index.min.js 14.3 kB
build/scripts/data-controls/index.min.js 795 B
build/scripts/data/index.min.js 9.66 kB
build/scripts/date/index.min.js 23.6 kB
build/scripts/deprecated/index.min.js 756 B
build/scripts/dom-ready/index.min.js 476 B
build/scripts/dom/index.min.js 5 kB
build/scripts/edit-post/index.min.js 18.4 kB
build/scripts/edit-widgets/index.min.js 21.9 kB
build/scripts/element/index.min.js 5.17 kB
build/scripts/escape-html/index.min.js 587 B
build/scripts/format-library/index.min.js 12.8 kB
build/scripts/hooks/index.min.js 1.83 kB
build/scripts/html-entities/index.min.js 494 B
build/scripts/i18n/index.min.js 2.47 kB
build/scripts/is-shallow-equal/index.min.js 572 B
build/scripts/keyboard-shortcuts/index.min.js 1.61 kB
build/scripts/keycodes/index.min.js 1.56 kB
build/scripts/list-reusable-blocks/index.min.js 2.49 kB
build/scripts/notices/index.min.js 1.85 kB
build/scripts/nux/index.min.js 1.89 kB
build/scripts/patterns/index.min.js 7.96 kB
build/scripts/plugins/index.min.js 2.15 kB
build/scripts/preferences-persistence/index.min.js 2.15 kB
build/scripts/preferences/index.min.js 3.3 kB
build/scripts/primitives/index.min.js 1.01 kB
build/scripts/priority-queue/index.min.js 1.62 kB
build/scripts/private-apis/index.min.js 1.1 kB
build/scripts/react-i18n/index.min.js 833 B
build/scripts/redux-routine/index.min.js 3.37 kB
build/scripts/reusable-blocks/index.min.js 3.1 kB
build/scripts/rich-text/index.min.js 14 kB
build/scripts/router/index.min.js 5.96 kB
build/scripts/server-side-render/index.min.js 1.91 kB
build/scripts/shortcode/index.min.js 1.59 kB
build/scripts/style-engine/index.min.js 2.42 kB
build/scripts/sync/index.min.js 38.8 kB
build/scripts/theme/index.min.js 22 kB
build/scripts/token-list/index.min.js 739 B
build/scripts/undo-manager/index.min.js 918 B
build/scripts/upload-media/index.min.js 11.2 kB
build/scripts/url/index.min.js 3.98 kB
build/scripts/vendors/react-dom.min.js 43.3 kB
build/scripts/vendors/react-jsx-runtime.min.js 667 B
build/scripts/vendors/react.min.js 2.77 kB
build/scripts/viewport/index.min.js 1.22 kB
build/scripts/warning/index.min.js 454 B
build/scripts/widgets/index.min.js 7.8 kB
build/scripts/wordcount/index.min.js 1.04 kB
build/styles/base-styles/admin-schemes-rtl.css 1.71 kB
build/styles/base-styles/admin-schemes-rtl.min.css 775 B
build/styles/base-styles/admin-schemes.css 1.71 kB
build/styles/base-styles/admin-schemes.min.css 775 B
build/styles/block-directory/style-rtl.css 1.97 kB
build/styles/block-directory/style-rtl.min.css 1.06 kB
build/styles/block-directory/style.css 1.98 kB
build/styles/block-directory/style.min.css 1.06 kB
build/styles/block-editor/content-rtl.css 5.44 kB
build/styles/block-editor/content-rtl.min.css 4.01 kB
build/styles/block-editor/content.css 5.44 kB
build/styles/block-editor/content.min.css 4.01 kB
build/styles/block-editor/default-editor-styles-rtl.css 697 B
build/styles/block-editor/default-editor-styles-rtl.min.css 224 B
build/styles/block-editor/default-editor-styles.css 697 B
build/styles/block-editor/default-editor-styles.min.css 224 B
build/styles/block-editor/style-rtl.css 18.6 kB
build/styles/block-editor/style-rtl.min.css 15.9 kB
build/styles/block-editor/style.css 18.6 kB
build/styles/block-editor/style.min.css 15.8 kB
build/styles/block-library/accordion-heading/style-rtl.css 346 B
build/styles/block-library/accordion-heading/style-rtl.min.css 325 B
build/styles/block-library/accordion-heading/style.css 346 B
build/styles/block-library/accordion-heading/style.min.css 325 B
build/styles/block-library/accordion-item/style-rtl.css 239 B
build/styles/block-library/accordion-item/style-rtl.min.css 180 B
build/styles/block-library/accordion-item/style.css 238 B
build/styles/block-library/accordion-item/style.min.css 180 B
build/styles/block-library/accordion-panel/style-rtl.css 110 B
build/styles/block-library/accordion-panel/style-rtl.min.css 99 B
build/styles/block-library/accordion-panel/style.css 110 B
build/styles/block-library/accordion-panel/style.min.css 99 B
build/styles/block-library/accordion/style-rtl.css 69 B
build/styles/block-library/accordion/style-rtl.min.css 62 B
build/styles/block-library/accordion/style.css 69 B
build/styles/block-library/accordion/style.min.css 62 B
build/styles/block-library/archives/style-rtl.css 101 B
build/styles/block-library/archives/style-rtl.min.css 90 B
build/styles/block-library/archives/style.css 101 B
build/styles/block-library/archives/style.min.css 90 B
build/styles/block-library/audio/editor-rtl.css 166 B
build/styles/block-library/audio/editor-rtl.min.css 149 B
build/styles/block-library/audio/editor.css 166 B
build/styles/block-library/audio/editor.min.css 151 B
build/styles/block-library/audio/style-rtl.css 945 B
build/styles/block-library/audio/style-rtl.min.css 132 B
build/styles/block-library/audio/style.css 945 B
build/styles/block-library/audio/style.min.css 132 B
build/styles/block-library/audio/theme-rtl.css 967 B
build/styles/block-library/audio/theme-rtl.min.css 134 B
build/styles/block-library/audio/theme.css 967 B
build/styles/block-library/audio/theme.min.css 134 B
build/styles/block-library/avatar/editor-rtl.css 127 B
build/styles/block-library/avatar/editor-rtl.min.css 115 B
build/styles/block-library/avatar/editor.css 127 B
build/styles/block-library/avatar/editor.min.css 115 B
build/styles/block-library/avatar/style-rtl.css 117 B
build/styles/block-library/avatar/style-rtl.min.css 104 B
build/styles/block-library/avatar/style.css 117 B
build/styles/block-library/avatar/style.min.css 104 B
build/styles/block-library/breadcrumbs/style-rtl.css 233 B
build/styles/block-library/breadcrumbs/style-rtl.min.css 203 B
build/styles/block-library/breadcrumbs/style.css 233 B
build/styles/block-library/breadcrumbs/style.min.css 203 B
build/styles/block-library/button/editor-rtl.css 306 B
build/styles/block-library/button/editor-rtl.min.css 265 B
build/styles/block-library/button/editor.css 317 B
build/styles/block-library/button/editor.min.css 265 B
build/styles/block-library/button/style-rtl.css 651 B
build/styles/block-library/button/style-rtl.min.css 596 B
build/styles/block-library/button/style.css 662 B
build/styles/block-library/button/style.min.css 596 B
build/styles/block-library/buttons/editor-rtl.css 391 B
build/styles/block-library/buttons/editor-rtl.min.css 291 B
build/styles/block-library/buttons/editor.css 391 B
build/styles/block-library/buttons/editor.min.css 291 B
build/styles/block-library/buttons/style-rtl.css 452 B
build/styles/block-library/buttons/style-rtl.min.css 349 B
build/styles/block-library/buttons/style.css 453 B
build/styles/block-library/buttons/style.min.css 349 B
build/styles/block-library/calendar/style-rtl.css 271 B
build/styles/block-library/calendar/style-rtl.min.css 239 B
build/styles/block-library/calendar/style.css 271 B
build/styles/block-library/calendar/style.min.css 239 B
build/styles/block-library/categories/editor-rtl.css 171 B
build/styles/block-library/categories/editor-rtl.min.css 132 B
build/styles/block-library/categories/editor.css 170 B
build/styles/block-library/categories/editor.min.css 131 B
build/styles/block-library/categories/style-rtl.css 226 B
build/styles/block-library/categories/style-rtl.min.css 169 B
build/styles/block-library/categories/style.css 235 B
build/styles/block-library/categories/style.min.css 169 B
build/styles/block-library/classic-rtl.css 402 B
build/styles/block-library/classic-rtl.min.css 358 B
build/styles/block-library/classic.css 402 B
build/styles/block-library/classic.min.css 358 B
build/styles/block-library/code/editor-rtl.css 59 B
build/styles/block-library/code/editor-rtl.min.css 53 B
build/styles/block-library/code/editor.css 59 B
build/styles/block-library/code/editor.min.css 53 B
build/styles/block-library/code/style-rtl.css 158 B
build/styles/block-library/code/style-rtl.min.css 140 B
build/styles/block-library/code/style.css 178 B
build/styles/block-library/code/style.min.css 140 B
build/styles/block-library/code/theme-rtl.css 135 B
build/styles/block-library/code/theme-rtl.min.css 122 B
build/styles/block-library/code/theme.css 135 B
build/styles/block-library/code/theme.min.css 122 B
build/styles/block-library/columns/editor-rtl.css 119 B
build/styles/block-library/columns/editor-rtl.min.css 108 B
build/styles/block-library/columns/editor.css 119 B
build/styles/block-library/columns/editor.min.css 108 B
build/styles/block-library/columns/style-rtl.css 1.3 kB
build/styles/block-library/columns/style-rtl.min.css 421 B
build/styles/block-library/columns/style.css 1.3 kB
build/styles/block-library/columns/style.min.css 421 B
build/styles/block-library/comment-author-avatar/editor-rtl.css 136 B
build/styles/block-library/comment-author-avatar/editor-rtl.min.css 124 B
build/styles/block-library/comment-author-avatar/editor.css 136 B
build/styles/block-library/comment-author-avatar/editor.min.css 124 B
build/styles/block-library/comment-author-name/style-rtl.css 79 B
build/styles/block-library/comment-author-name/style-rtl.min.css 72 B
build/styles/block-library/comment-author-name/style.css 79 B
build/styles/block-library/comment-author-name/style.min.css 72 B
build/styles/block-library/comment-content/style-rtl.css 137 B
build/styles/block-library/comment-content/style-rtl.min.css 120 B
build/styles/block-library/comment-content/style.css 137 B
build/styles/block-library/comment-content/style.min.css 120 B
build/styles/block-library/comment-date/style-rtl.css 72 B
build/styles/block-library/comment-date/style-rtl.min.css 65 B
build/styles/block-library/comment-date/style.css 72 B
build/styles/block-library/comment-date/style.min.css 65 B
build/styles/block-library/comment-edit-link/style-rtl.css 77 B
build/styles/block-library/comment-edit-link/style-rtl.min.css 70 B
build/styles/block-library/comment-edit-link/style.css 77 B
build/styles/block-library/comment-edit-link/style.min.css 70 B
build/styles/block-library/comment-reply-link/style-rtl.css 78 B
build/styles/block-library/comment-reply-link/style-rtl.min.css 71 B
build/styles/block-library/comment-reply-link/style.css 78 B
build/styles/block-library/comment-reply-link/style.min.css 71 B
build/styles/block-library/comment-template/style-rtl.css 213 B
build/styles/block-library/comment-template/style-rtl.min.css 191 B
build/styles/block-library/comment-template/style.css 213 B
build/styles/block-library/comment-template/style.min.css 191 B
build/styles/block-library/comments-pagination-numbers/editor-rtl.css 135 B
build/styles/block-library/comments-pagination-numbers/editor-rtl.min.css 122 B
build/styles/block-library/comments-pagination-numbers/editor.css 144 B
build/styles/block-library/comments-pagination-numbers/editor.min.css 121 B
build/styles/block-library/comments-pagination/editor-rtl.css 184 B
build/styles/block-library/comments-pagination/editor-rtl.min.css 168 B
build/styles/block-library/comments-pagination/editor.css 184 B
build/styles/block-library/comments-pagination/editor.min.css 168 B
build/styles/block-library/comments-pagination/style-rtl.css 224 B
build/styles/block-library/comments-pagination/style-rtl.min.css 201 B
build/styles/block-library/comments-pagination/style.css 236 B
build/styles/block-library/comments-pagination/style.min.css 201 B
build/styles/block-library/comments-title/editor-rtl.css 83 B
build/styles/block-library/comments-title/editor-rtl.min.css 75 B
build/styles/block-library/comments-title/editor.css 83 B
build/styles/block-library/comments-title/editor.min.css 75 B
build/styles/block-library/comments/editor-rtl.css 968 B
build/styles/block-library/comments/editor-rtl.min.css 842 B
build/styles/block-library/comments/editor.css 968 B
build/styles/block-library/comments/editor.min.css 842 B
build/styles/block-library/comments/style-rtl.css 754 B
build/styles/block-library/comments/style-rtl.min.css 637 B
build/styles/block-library/comments/style.css 752 B
build/styles/block-library/comments/style.min.css 637 B
build/styles/block-library/common-rtl.css 2.48 kB
build/styles/block-library/common-rtl.min.css 1.12 kB
build/styles/block-library/common.css 2.5 kB
build/styles/block-library/common.min.css 1.12 kB
build/styles/block-library/cover/editor-rtl.css 1.05 kB
build/styles/block-library/cover/editor-rtl.min.css 631 B
build/styles/block-library/cover/editor.css 1.05 kB
build/styles/block-library/cover/editor.min.css 631 B
build/styles/block-library/cover/style-rtl.css 2.5 kB
build/styles/block-library/cover/style-rtl.min.css 1.82 kB
build/styles/block-library/cover/style.css 2.51 kB
build/styles/block-library/cover/style.min.css 1.81 kB
build/styles/block-library/details/editor-rtl.css 72 B
build/styles/block-library/details/editor-rtl.min.css 65 B
build/styles/block-library/details/editor.css 72 B
build/styles/block-library/details/editor.min.css 65 B
build/styles/block-library/details/style-rtl.css 97 B
build/styles/block-library/details/style-rtl.min.css 86 B
build/styles/block-library/details/style.css 97 B
build/styles/block-library/details/style.min.css 86 B
build/styles/block-library/editor-elements-rtl.css 117 B
build/styles/block-library/editor-elements-rtl.min.css 75 B
build/styles/block-library/editor-elements.css 117 B
build/styles/block-library/editor-elements.min.css 75 B
build/styles/block-library/editor-rtl.css 12.5 kB
build/styles/block-library/editor-rtl.min.css 10.3 kB
build/styles/block-library/editor.css 12.5 kB
build/styles/block-library/editor.min.css 10.3 kB
build/styles/block-library/elements-rtl.css 84 B
build/styles/block-library/elements-rtl.min.css 54 B
build/styles/block-library/elements.css 84 B
build/styles/block-library/elements.min.css 54 B
build/styles/block-library/embed/editor-rtl.css 391 B
build/styles/block-library/embed/editor-rtl.min.css 331 B
build/styles/block-library/embed/editor.css 390 B
build/styles/block-library/embed/editor.min.css 331 B
build/styles/block-library/embed/style-rtl.css 1.29 kB
build/styles/block-library/embed/style-rtl.min.css 448 B
build/styles/block-library/embed/style.css 1.29 kB
build/styles/block-library/embed/style.min.css 448 B
build/styles/block-library/embed/theme-rtl.css 967 B
build/styles/block-library/embed/theme-rtl.min.css 133 B
build/styles/block-library/embed/theme.css 967 B
build/styles/block-library/embed/theme.min.css 133 B
build/styles/block-library/file/editor-rtl.css 352 B
build/styles/block-library/file/editor-rtl.min.css 324 B
build/styles/block-library/file/editor.css 353 B
build/styles/block-library/file/editor.min.css 324 B
build/styles/block-library/file/style-rtl.css 318 B
build/styles/block-library/file/style-rtl.min.css 278 B
build/styles/block-library/file/style.css 331 B
build/styles/block-library/file/style.min.css 278 B
build/styles/block-library/footnotes/style-rtl.css 220 B
build/styles/block-library/footnotes/style-rtl.min.css 198 B
build/styles/block-library/footnotes/style.css 219 B
build/styles/block-library/footnotes/style.min.css 197 B
build/styles/block-library/form-input/editor-rtl.css 286 B
build/styles/block-library/form-input/editor-rtl.min.css 265 B
build/styles/block-library/form-input/editor.css 285 B
build/styles/block-library/form-input/editor.min.css 264 B
build/styles/block-library/form-input/style-rtl.css 467 B
build/styles/block-library/form-input/style-rtl.min.css 366 B
build/styles/block-library/form-input/style.css 467 B
build/styles/block-library/form-input/style.min.css 366 B
build/styles/block-library/form-submission-notification/editor-rtl.css 368 B
build/styles/block-library/form-submission-notification/editor-rtl.min.css 344 B
build/styles/block-library/form-submission-notification/editor.css 368 B
build/styles/block-library/form-submission-notification/editor.min.css 341 B
build/styles/block-library/form-submit-button/style-rtl.css 77 B
build/styles/block-library/form-submit-button/style-rtl.min.css 69 B
build/styles/block-library/form-submit-button/style.css 77 B
build/styles/block-library/form-submit-button/style.min.css 69 B
build/styles/block-library/freeform/editor-rtl.css 1.12 kB
build/styles/block-library/freeform/editor-rtl.min.css 288 B
build/styles/block-library/freeform/editor.css 1.12 kB
build/styles/block-library/freeform/editor.min.css 288 B
build/styles/block-library/gallery/editor-rtl.css 1.52 kB
build/styles/block-library/gallery/editor-rtl.min.css 615 B
build/styles/block-library/gallery/editor.css 1.52 kB
build/styles/block-library/gallery/editor.min.css 616 B
build/styles/block-library/gallery/style-rtl.css 2.84 kB
build/styles/block-library/gallery/style-rtl.min.css 1.84 kB
build/styles/block-library/gallery/style.css 2.84 kB
build/styles/block-library/gallery/style.min.css 1.84 kB
build/styles/block-library/gallery/theme-rtl.css 941 B
build/styles/block-library/gallery/theme-rtl.min.css 108 B
build/styles/block-library/gallery/theme.css 941 B
build/styles/block-library/gallery/theme.min.css 108 B
build/styles/block-library/group/editor-rtl.css 772 B
build/styles/block-library/group/editor-rtl.min.css 335 B
build/styles/block-library/group/editor.css 772 B
build/styles/block-library/group/editor.min.css 335 B
build/styles/block-library/group/style-rtl.css 120 B
build/styles/block-library/group/style-rtl.min.css 103 B
build/styles/block-library/group/style.css 120 B
build/styles/block-library/group/style.min.css 103 B
build/styles/block-library/group/theme-rtl.css 468 B
build/styles/block-library/group/theme-rtl.min.css 79 B
build/styles/block-library/group/theme.css 468 B
build/styles/block-library/group/theme.min.css 79 B
build/styles/block-library/heading/style-rtl.css 604 B
build/styles/block-library/heading/style-rtl.min.css 205 B
build/styles/block-library/heading/style.css 604 B
build/styles/block-library/heading/style.min.css 205 B
build/styles/block-library/html/editor-rtl.css 1.29 kB
build/styles/block-library/html/editor-rtl.min.css 464 B
build/styles/block-library/html/editor.css 1.3 kB
build/styles/block-library/html/editor.min.css 464 B
build/styles/block-library/icon/editor-rtl.css 776 B
build/styles/block-library/icon/editor-rtl.min.css 377 B
build/styles/block-library/icon/editor.css 776 B
build/styles/block-library/icon/editor.min.css 377 B
build/styles/block-library/icon/style-rtl.css 218 B
build/styles/block-library/icon/style-rtl.min.css 154 B
build/styles/block-library/icon/style.css 218 B
build/styles/block-library/icon/style.min.css 154 B
build/styles/block-library/image/editor-rtl.css 1.64 kB
build/styles/block-library/image/editor-rtl.min.css 782 B
build/styles/block-library/image/editor.css 1.64 kB
build/styles/block-library/image/editor.min.css 780 B
build/styles/block-library/image/style-rtl.css 2.92 kB
build/styles/block-library/image/style-rtl.min.css 1.86 kB
build/styles/block-library/image/style.css 2.92 kB
build/styles/block-library/image/style.min.css 1.85 kB
build/styles/block-library/image/theme-rtl.css 971 B
build/styles/block-library/image/theme-rtl.min.css 137 B
build/styles/block-library/image/theme.css 971 B
build/styles/block-library/image/theme.min.css 137 B
build/styles/block-library/latest-comments/style-rtl.css 392 B
build/styles/block-library/latest-comments/style-rtl.min.css 352 B
build/styles/block-library/latest-comments/style.css 390 B
build/styles/block-library/latest-comments/style.min.css 352 B
build/styles/block-library/latest-posts/editor-rtl.css 154 B
build/styles/block-library/latest-posts/editor-rtl.min.css 139 B
build/styles/block-library/latest-posts/editor.css 153 B
build/styles/block-library/latest-posts/editor.min.css 138 B
build/styles/block-library/latest-posts/style-rtl.css 1.36 kB
build/styles/block-library/latest-posts/style-rtl.min.css 520 B
build/styles/block-library/latest-posts/style.css 1.37 kB
build/styles/block-library/latest-posts/style.min.css 520 B
build/styles/block-library/list/style-rtl.css 498 B
build/styles/block-library/list/style-rtl.min.css 107 B
build/styles/block-library/list/style.css 498 B
build/styles/block-library/list/style.min.css 107 B
build/styles/block-library/loginout/style-rtl.css 68 B
build/styles/block-library/loginout/style-rtl.min.css 61 B
build/styles/block-library/loginout/style.css 68 B
build/styles/block-library/loginout/style.min.css 61 B
build/styles/block-library/math/editor-rtl.css 491 B
build/styles/block-library/math/editor-rtl.min.css 105 B
build/styles/block-library/math/editor.css 502 B
build/styles/block-library/math/editor.min.css 105 B
build/styles/block-library/math/style-rtl.css 70 B
build/styles/block-library/math/style-rtl.min.css 61 B
build/styles/block-library/math/style.css 70 B
build/styles/block-library/math/style.min.css 61 B
build/styles/block-library/media-text/editor-rtl.css 389 B
build/styles/block-library/media-text/editor-rtl.min.css 321 B
build/styles/block-library/media-text/editor.css 389 B
build/styles/block-library/media-text/editor.min.css 320 B
build/styles/block-library/media-text/style-rtl.css 873 B
build/styles/block-library/media-text/style-rtl.min.css 552 B
build/styles/block-library/media-text/style.css 901 B
build/styles/block-library/media-text/style.min.css 550 B
build/styles/block-library/more/editor-rtl.css 796 B
build/styles/block-library/more/editor-rtl.min.css 393 B
build/styles/block-library/more/editor.css 798 B
build/styles/block-library/more/editor.min.css 393 B
build/styles/block-library/navigation-link/editor-rtl.css 1.28 kB
build/styles/block-library/navigation-link/editor-rtl.min.css 710 B
build/styles/block-library/navigation-link/editor.css 1.27 kB
build/styles/block-library/navigation-link/editor.min.css 713 B
build/styles/block-library/navigation-link/style-rtl.css 579 B
build/styles/block-library/navigation-link/style-rtl.min.css 190 B
build/styles/block-library/navigation-link/style.css 579 B
build/styles/block-library/navigation-link/style.min.css 188 B
build/styles/block-library/navigation-overlay-close/style-rtl.css 260 B
build/styles/block-library/navigation-overlay-close/style-rtl.min.css 237 B
build/styles/block-library/navigation-overlay-close/style.css 260 B
build/styles/block-library/navigation-overlay-close/style.min.css 237 B
build/styles/block-library/navigation-submenu/editor-rtl.css 1.12 kB
build/styles/block-library/navigation-submenu/editor-rtl.min.css 295 B
build/styles/block-library/navigation-submenu/editor.css 1.12 kB
build/styles/block-library/navigation-submenu/editor.min.css 294 B
build/styles/block-library/navigation/editor-rtl.css 3.28 kB
build/styles/block-library/navigation/editor-rtl.min.css 2.28 kB
build/styles/block-library/navigation/editor.css 3.29 kB
build/styles/block-library/navigation/editor.min.css 2.28 kB
build/styles/block-library/navigation/style-rtl.css 3.59 kB
build/styles/block-library/navigation/style-rtl.min.css 2.52 kB
build/styles/block-library/navigation/style.css 3.59 kB
build/styles/block-library/navigation/style.min.css 2.5 kB
build/styles/block-library/nextpage/editor-rtl.css 799 B
build/styles/block-library/nextpage/editor-rtl.min.css 392 B
build/styles/block-library/nextpage/editor.css 800 B
build/styles/block-library/nextpage/editor.min.css 392 B
build/styles/block-library/page-list/editor-rtl.css 1.18 kB
build/styles/block-library/page-list/editor-rtl.min.css 356 B
build/styles/block-library/page-list/editor.css 1.18 kB
build/styles/block-library/page-list/editor.min.css 356 B
build/styles/block-library/page-list/style-rtl.css 207 B
build/styles/block-library/page-list/style-rtl.min.css 192 B
build/styles/block-library/page-list/style.css 207 B
build/styles/block-library/page-list/style.min.css 192 B
build/styles/block-library/paragraph/editor-rtl.css 315 B
build/styles/block-library/paragraph/editor-rtl.min.css 292 B
build/styles/block-library/paragraph/editor.css 314 B
build/styles/block-library/paragraph/editor.min.css 292 B
build/styles/block-library/paragraph/style-rtl.css 746 B
build/styles/block-library/paragraph/style-rtl.min.css 341 B
build/styles/block-library/paragraph/style.css 752 B
build/styles/block-library/paragraph/style.min.css 340 B
build/styles/block-library/playlist-track/style-rtl.css 453 B
build/styles/block-library/playlist-track/style-rtl.min.css 420 B
build/styles/block-library/playlist-track/style.css 453 B
build/styles/block-library/playlist-track/style.min.css 420 B
build/styles/block-library/playlist/editor-rtl.css 120 B
build/styles/block-library/playlist/editor-rtl.min.css 112 B
build/styles/block-library/playlist/editor.css 120 B
build/styles/block-library/playlist/editor.min.css 112 B
build/styles/block-library/playlist/style-rtl.css 1.52 kB
build/styles/block-library/playlist/style-rtl.min.css 1.42 kB
build/styles/block-library/playlist/style.css 1.52 kB
build/styles/block-library/playlist/style.min.css 1.42 kB
build/styles/block-library/post-author-biography/style-rtl.css 96 B
build/styles/block-library/post-author-biography/style-rtl.min.css 86 B
build/styles/block-library/post-author-biography/style.css 96 B
build/styles/block-library/post-author-biography/style.min.css 86 B
build/styles/block-library/post-author-name/style-rtl.css 76 B
build/styles/block-library/post-author-name/style-rtl.min.css 69 B
build/styles/block-library/post-author-name/style.css 76 B
build/styles/block-library/post-author-name/style.min.css 69 B
build/styles/block-library/post-author/editor-rtl.css 490 B
build/styles/block-library/post-author/editor-rtl.min.css 104 B
build/styles/block-library/post-author/editor.css 490 B
build/styles/block-library/post-author/editor.min.css 104 B
build/styles/block-library/post-author/style-rtl.css 213 B
build/styles/block-library/post-author/style-rtl.min.css 188 B
build/styles/block-library/post-author/style.css 214 B
build/styles/block-library/post-author/style.min.css 189 B
build/styles/block-library/post-comments-count/style-rtl.css 79 B
build/styles/block-library/post-comments-count/style-rtl.min.css 72 B
build/styles/block-library/post-comments-count/style.css 79 B
build/styles/block-library/post-comments-count/style.min.css 72 B
build/styles/block-library/post-comments-form/editor-rtl.css 104 B
build/styles/block-library/post-comments-form/editor-rtl.min.css 96 B
build/styles/block-library/post-comments-form/editor.css 104 B
build/styles/block-library/post-comments-form/editor.min.css 96 B
build/styles/block-library/post-comments-form/style-rtl.css 585 B
build/styles/block-library/post-comments-form/style-rtl.min.css 525 B
build/styles/block-library/post-comments-form/style.css 584 B
build/styles/block-library/post-comments-form/style.min.css 525 B
build/styles/block-library/post-comments-link/style-rtl.css 78 B
build/styles/block-library/post-comments-link/style-rtl.min.css 71 B
build/styles/block-library/post-comments-link/style.css 78 B
build/styles/block-library/post-comments-link/style.min.css 71 B
build/styles/block-library/post-content/style-rtl.css 68 B
build/styles/block-library/post-content/style-rtl.min.css 61 B
build/styles/block-library/post-content/style.css 68 B
build/styles/block-library/post-content/style.min.css 61 B
build/styles/block-library/post-date/style-rtl.css 69 B
build/styles/block-library/post-date/style-rtl.min.css 62 B
build/styles/block-library/post-date/style.css 69 B
build/styles/block-library/post-date/style.min.css 62 B
build/styles/block-library/post-excerpt/editor-rtl.css 78 B
build/styles/block-library/post-excerpt/editor-rtl.min.css 71 B
build/styles/block-library/post-excerpt/editor.css 78 B
build/styles/block-library/post-excerpt/editor.min.css 71 B
build/styles/block-library/post-excerpt/style-rtl.css 171 B
build/styles/block-library/post-excerpt/style-rtl.min.css 155 B
build/styles/block-library/post-excerpt/style.css 171 B
build/styles/block-library/post-excerpt/style.min.css 155 B
build/styles/block-library/post-featured-image/editor-rtl.css 1.14 kB
build/styles/block-library/post-featured-image/editor-rtl.min.css 719 B
build/styles/block-library/post-featured-image/editor.css 1.14 kB
build/styles/block-library/post-featured-image/editor.min.css 717 B
build/styles/block-library/post-featured-image/style-rtl.css 392 B
build/styles/block-library/post-featured-image/style-rtl.min.css 347 B
build/styles/block-library/post-featured-image/style.css 392 B
build/styles/block-library/post-featured-image/style.min.css 347 B
build/styles/block-library/post-navigation-link/style-rtl.css 234 B
build/styles/block-library/post-navigation-link/style-rtl.min.css 215 B
build/styles/block-library/post-navigation-link/style.css 245 B
build/styles/block-library/post-navigation-link/style.min.css 214 B
build/styles/block-library/post-template/style-rtl.css 1.27 kB
build/styles/block-library/post-template/style-rtl.min.css 441 B
build/styles/block-library/post-template/style.css 1.27 kB
build/styles/block-library/post-template/style.min.css 441 B
build/styles/block-library/post-terms/style-rtl.css 108 B
build/styles/block-library/post-terms/style-rtl.min.css 96 B
build/styles/block-library/post-terms/style.css 108 B
build/styles/block-library/post-terms/style.min.css 96 B
build/styles/block-library/post-time-to-read/style-rtl.css 77 B
build/styles/block-library/post-time-to-read/style-rtl.min.css 70 B
build/styles/block-library/post-time-to-read/style.css 77 B
build/styles/block-library/post-time-to-read/style.min.css 70 B
build/styles/block-library/post-title/style-rtl.css 175 B
build/styles/block-library/post-title/style-rtl.min.css 162 B
build/styles/block-library/post-title/style.css 175 B
build/styles/block-library/post-title/style.min.css 162 B
build/styles/block-library/preformatted/style-rtl.css 511 B
build/styles/block-library/preformatted/style-rtl.min.css 125 B
build/styles/block-library/preformatted/style.css 511 B
build/styles/block-library/preformatted/style.min.css 125 B
build/styles/block-library/pullquote/editor-rtl.css 146 B
build/styles/block-library/pullquote/editor-rtl.min.css 133 B
build/styles/block-library/pullquote/editor.css 146 B
build/styles/block-library/pullquote/editor.min.css 133 B
build/styles/block-library/pullquote/style-rtl.css 765 B
build/styles/block-library/pullquote/style-rtl.min.css 365 B
build/styles/block-library/pullquote/style.css 764 B
build/styles/block-library/pullquote/style.min.css 365 B
build/styles/block-library/pullquote/theme-rtl.css 195 B
build/styles/block-library/pullquote/theme-rtl.min.css 176 B
build/styles/block-library/pullquote/theme.css 195 B
build/styles/block-library/pullquote/theme.min.css 176 B
build/styles/block-library/query-pagination-numbers/editor-rtl.css 134 B
build/styles/block-library/query-pagination-numbers/editor-rtl.min.css 121 B
build/styles/block-library/query-pagination-numbers/editor.css 144 B
build/styles/block-library/query-pagination-numbers/editor.min.css 118 B
build/styles/block-library/query-pagination/editor-rtl.css 168 B
build/styles/block-library/query-pagination/editor-rtl.min.css 154 B
build/styles/block-library/query-pagination/editor.css 168 B
build/styles/block-library/query-pagination/editor.min.css 154 B
build/styles/block-library/query-pagination/style-rtl.css 254 B
build/styles/block-library/query-pagination/style-rtl.min.css 237 B
build/styles/block-library/query-pagination/style.css 265 B
build/styles/block-library/query-pagination/style.min.css 237 B
build/styles/block-library/query-title/style-rtl.css 71 B
build/styles/block-library/query-title/style-rtl.min.css 64 B
build/styles/block-library/query-title/style.css 71 B
build/styles/block-library/query-title/style.min.css 64 B
build/styles/block-library/query-total/style-rtl.css 71 B
build/styles/block-library/query-total/style-rtl.min.css 64 B
build/styles/block-library/query-total/style.css 71 B
build/styles/block-library/query-total/style.min.css 64 B
build/styles/block-library/query/editor-rtl.css 1.28 kB
build/styles/block-library/query/editor-rtl.min.css 438 B
build/styles/block-library/query/editor.css 1.28 kB
build/styles/block-library/query/editor.min.css 438 B
build/styles/block-library/quote/style-rtl.css 255 B
build/styles/block-library/quote/style-rtl.min.css 238 B
build/styles/block-library/quote/style.css 256 B
build/styles/block-library/quote/style.min.css 238 B
build/styles/block-library/quote/theme-rtl.css 253 B
build/styles/block-library/quote/theme-rtl.min.css 233 B
build/styles/block-library/quote/theme.css 254 B
build/styles/block-library/quote/theme.min.css 236 B
build/styles/block-library/read-more/style-rtl.css 146 B
build/styles/block-library/read-more/style-rtl.min.css 131 B
build/styles/block-library/read-more/style.css 146 B
build/styles/block-library/read-more/style.min.css 131 B
build/styles/block-library/reset-rtl.css 936 B
build/styles/block-library/reset-rtl.min.css 467 B
build/styles/block-library/reset.css 936 B
build/styles/block-library/reset.min.css 467 B
build/styles/block-library/rss/editor-rtl.css 144 B
build/styles/block-library/rss/editor-rtl.min.css 126 B
build/styles/block-library/rss/editor.css 144 B
build/styles/block-library/rss/editor.min.css 126 B
build/styles/block-library/rss/style-rtl.css 1.11 kB
build/styles/block-library/rss/style-rtl.min.css 284 B
build/styles/block-library/rss/style.css 1.12 kB
build/styles/block-library/rss/style.min.css 283 B
build/styles/block-library/search/editor-rtl.css 217 B
build/styles/block-library/search/editor-rtl.min.css 199 B
build/styles/block-library/search/editor.css 217 B
build/styles/block-library/search/editor.min.css 199 B
build/styles/block-library/search/style-rtl.css 1.1 kB
build/styles/block-library/search/style-rtl.min.css 665 B
build/styles/block-library/search/style.css 1.1 kB
build/styles/block-library/search/style.min.css 666 B
build/styles/block-library/search/theme-rtl.css 130 B
build/styles/block-library/search/theme-rtl.min.css 113 B
build/styles/block-library/search/theme.css 130 B
build/styles/block-library/search/theme.min.css 113 B
build/styles/block-library/separator/editor-rtl.css 106 B
build/styles/block-library/separator/editor-rtl.min.css 100 B
build/styles/block-library/separator/editor.css 106 B
build/styles/block-library/separator/editor.min.css 100 B
build/styles/block-library/separator/style-rtl.css 284 B
build/styles/block-library/separator/style-rtl.min.css 248 B
build/styles/block-library/separator/style.css 297 B
build/styles/block-library/separator/style.min.css 248 B
build/styles/block-library/separator/theme-rtl.css 226 B
build/styles/block-library/separator/theme-rtl.min.css 195 B
build/styles/block-library/separator/theme.css 226 B
build/styles/block-library/separator/theme.min.css 195 B
build/styles/block-library/shortcode/editor-rtl.css 1.1 kB
build/styles/block-library/shortcode/editor-rtl.min.css 286 B
build/styles/block-library/shortcode/editor.css 1.1 kB
build/styles/block-library/shortcode/editor.min.css 286 B
build/styles/block-library/site-logo/editor-rtl.css 1.12 kB
build/styles/block-library/site-logo/editor-rtl.min.css 696 B
build/styles/block-library/site-logo/editor.css 1.12 kB
build/styles/block-library/site-logo/editor.min.css 692 B
build/styles/block-library/site-logo/style-rtl.css 239 B
build/styles/block-library/site-logo/style-rtl.min.css 218 B
build/styles/block-library/site-logo/style.css 238 B
build/styles/block-library/site-logo/style.min.css 218 B
build/styles/block-library/site-tagline/editor-rtl.css 94 B
build/styles/block-library/site-tagline/editor-rtl.min.css 87 B
build/styles/block-library/site-tagline/editor.css 94 B
build/styles/block-library/site-tagline/editor.min.css 87 B
build/styles/block-library/site-tagline/style-rtl.css 72 B
build/styles/block-library/site-tagline/style-rtl.min.css 65 B
build/styles/block-library/site-tagline/style.css 72 B
build/styles/block-library/site-tagline/style.min.css 65 B
build/styles/block-library/site-title/editor-rtl.css 93 B
build/styles/block-library/site-title/editor-rtl.min.css 85 B
build/styles/block-library/site-title/editor.css 93 B
build/styles/block-library/site-title/editor.min.css 85 B
build/styles/block-library/site-title/style-rtl.css 153 B
build/styles/block-library/site-title/style-rtl.min.css 143 B
build/styles/block-library/site-title/style.css 153 B
build/styles/block-library/site-title/style.min.css 143 B
build/styles/block-library/social-link/editor-rtl.css 346 B
build/styles/block-library/social-link/editor-rtl.min.css 314 B
build/styles/block-library/social-link/editor.css 348 B
build/styles/block-library/social-link/editor.min.css 314 B
build/styles/block-library/social-links/editor-rtl.css 737 B
build/styles/block-library/social-links/editor-rtl.min.css 339 B
build/styles/block-library/social-links/editor.css 738 B
build/styles/block-library/social-links/editor.min.css 338 B
build/styles/block-library/social-links/style-rtl.css 1.57 kB
build/styles/block-library/social-links/style-rtl.min.css 1.51 kB
build/styles/block-library/social-links/style.css 1.57 kB
build/styles/block-library/social-links/style.min.css 1.51 kB
build/styles/block-library/spacer/editor-rtl.css 774 B
build/styles/block-library/spacer/editor-rtl.min.css 346 B
build/styles/block-library/spacer/editor.css 774 B
build/styles/block-library/spacer/editor.min.css 346 B
build/styles/block-library/spacer/style-rtl.css 55 B
build/styles/block-library/spacer/style-rtl.min.css 48 B
build/styles/block-library/spacer/style.css 55 B
build/styles/block-library/spacer/style.min.css 48 B
build/styles/block-library/style-rtl.css 21.5 kB
build/styles/block-library/style-rtl.min.css 18 kB
build/styles/block-library/style.css 21.6 kB
build/styles/block-library/style.min.css 18 kB
build/styles/block-library/tab-list/editor-rtl.css 107 B
build/styles/block-library/tab-list/editor-rtl.min.css 97 B
build/styles/block-library/tab-list/editor.css 107 B
build/styles/block-library/tab-list/editor.min.css 97 B
build/styles/block-library/tab-panel/style-rtl.css 238 B
build/styles/block-library/tab-panel/style-rtl.min.css 215 B
build/styles/block-library/tab-panel/style.css 238 B
build/styles/block-library/tab-panel/style.min.css 215 B
build/styles/block-library/tab-panels/style-rtl.css 76 B
build/styles/block-library/tab-panels/style-rtl.min.css 65 B
build/styles/block-library/tab-panels/style.css 76 B
build/styles/block-library/tab-panels/style.min.css 65 B
build/styles/block-library/tab/editor-rtl.css 160 B
build/styles/block-library/tab/editor-rtl.min.css 148 B
build/styles/block-library/tab/editor.css 160 B
build/styles/block-library/tab/editor.min.css 148 B
build/styles/block-library/tab/style-rtl.css 397 B
build/styles/block-library/tab/style-rtl.min.css 352 B
build/styles/block-library/tab/style.css 398 B
build/styles/block-library/tab/style.min.css 356 B
build/styles/block-library/table-of-contents/style-rtl.css 89 B
build/styles/block-library/table-of-contents/style-rtl.min.css 83 B
build/styles/block-library/table-of-contents/style.css 89 B
build/styles/block-library/table-of-contents/style.min.css 83 B
build/styles/block-library/table/editor-rtl.css 1.25 kB
build/styles/block-library/table/editor-rtl.min.css 394 B
build/styles/block-library/table/editor.css 1.25 kB
build/styles/block-library/table/editor.min.css 394 B
build/styles/block-library/table/style-rtl.css 1.06 kB
build/styles/block-library/table/style-rtl.min.css 641 B
build/styles/block-library/table/style.css 1.06 kB
build/styles/block-library/table/style.min.css 640 B
build/styles/block-library/table/theme-rtl.css 985 B
build/styles/block-library/table/theme-rtl.min.css 152 B
build/styles/block-library/table/theme.css 985 B
build/styles/block-library/table/theme.min.css 152 B
build/styles/block-library/tabs/style-rtl.css 64 B
build/styles/block-library/tabs/style-rtl.min.css 57 B
build/styles/block-library/tabs/style.css 64 B
build/styles/block-library/tabs/style.min.css 57 B
build/styles/block-library/tag-cloud/style-rtl.css 283 B
build/styles/block-library/tag-cloud/style-rtl.min.css 248 B
build/styles/block-library/tag-cloud/style.css 283 B
build/styles/block-library/tag-cloud/style.min.css 248 B
build/styles/block-library/template-part/editor-rtl.css 1.2 kB
build/styles/block-library/template-part/editor-rtl.min.css 368 B
build/styles/block-library/template-part/editor.css 1.2 kB
build/styles/block-library/template-part/editor.min.css 368 B
build/styles/block-library/template-part/theme-rtl.css 492 B
build/styles/block-library/template-part/theme-rtl.min.css 113 B
build/styles/block-library/template-part/theme.css 492 B
build/styles/block-library/template-part/theme.min.css 113 B
build/styles/block-library/term-count/style-rtl.css 70 B
build/styles/block-library/term-count/style-rtl.min.css 63 B
build/styles/block-library/term-count/style.css 70 B
build/styles/block-library/term-count/style.min.css 63 B
build/styles/block-library/term-description/style-rtl.css 138 B
build/styles/block-library/term-description/style-rtl.min.css 126 B
build/styles/block-library/term-description/style.css 138 B
build/styles/block-library/term-description/style.min.css 126 B
build/styles/block-library/term-name/style-rtl.css 69 B
build/styles/block-library/term-name/style-rtl.min.css 62 B
build/styles/block-library/term-name/style.css 69 B
build/styles/block-library/term-name/style.min.css 62 B
build/styles/block-library/term-template/editor-rtl.css 267 B
build/styles/block-library/term-template/editor-rtl.min.css 225 B
build/styles/block-library/term-template/editor.css 267 B
build/styles/block-library/term-template/editor.min.css 225 B
build/styles/block-library/term-template/style-rtl.css 124 B
build/styles/block-library/term-template/style-rtl.min.css 114 B
build/styles/block-library/term-template/style.css 124 B
build/styles/block-library/term-template/style.min.css 114 B
build/styles/block-library/text-columns/editor-rtl.css 481 B
build/styles/block-library/text-columns/editor-rtl.min.css 95 B
build/styles/block-library/text-columns/editor.css 481 B
build/styles/block-library/text-columns/editor.min.css 95 B
build/styles/block-library/text-columns/style-rtl.css 177 B
build/styles/block-library/text-columns/style-rtl.min.css 165 B
build/styles/block-library/text-columns/style.css 177 B
build/styles/block-library/text-columns/style.min.css 165 B
build/styles/block-library/theme-rtl.css 1.59 kB
build/styles/block-library/theme-rtl.min.css 715 B
build/styles/block-library/theme.css 1.6 kB
build/styles/block-library/theme.min.css 719 B
build/styles/block-library/verse/style-rtl.css 155 B
build/styles/block-library/verse/style-rtl.min.css 137 B
build/styles/block-library/verse/style.css 155 B
build/styles/block-library/verse/style.min.css 137 B
build/styles/block-library/video/editor-rtl.css 839 B
build/styles/block-library/video/editor-rtl.min.css 428 B
build/styles/block-library/video/editor.css 840 B
build/styles/block-library/video/editor.min.css 428 B
build/styles/block-library/video/style-rtl.css 1.02 kB
build/styles/block-library/video/style-rtl.min.css 202 B
build/styles/block-library/video/style.css 1.02 kB
build/styles/block-library/video/style.min.css 202 B
build/styles/block-library/video/theme-rtl.css 967 B
build/styles/block-library/video/theme-rtl.min.css 134 B
build/styles/block-library/video/theme.css 967 B
build/styles/block-library/video/theme.min.css 134 B
build/styles/commands/style-rtl.css 2.07 kB
build/styles/commands/style-rtl.min.css 1.17 kB
build/styles/commands/style.css 2.06 kB
build/styles/commands/style.min.css 1.17 kB
build/styles/components/style-rtl.css 17.5 kB
build/styles/components/style-rtl.min.css 14.3 kB
build/styles/components/style.css 17.6 kB
build/styles/components/style.min.css 14.3 kB
build/styles/customize-widgets/style-rtl.css 2.35 kB
build/styles/customize-widgets/style-rtl.min.css 1.44 kB
build/styles/customize-widgets/style.css 2.35 kB
build/styles/customize-widgets/style.min.css 1.44 kB
build/styles/edit-post/classic-rtl.css 1.29 kB
build/styles/edit-post/classic-rtl.min.css 425 B
build/styles/edit-post/classic.css 1.31 kB
build/styles/edit-post/classic.min.css 428 B
build/styles/edit-post/style-rtl.css 3.51 kB
build/styles/edit-post/style-rtl.min.css 2.21 kB
build/styles/edit-post/style.css 3.51 kB
build/styles/edit-post/style.min.css 2.21 kB
build/styles/edit-widgets/style-rtl.css 4.85 kB
build/styles/edit-widgets/style-rtl.min.css 3.52 kB
build/styles/edit-widgets/style.css 4.85 kB
build/styles/edit-widgets/style.min.css 3.52 kB
build/styles/format-library/style-rtl.css 735 B
build/styles/format-library/style-rtl.min.css 326 B
build/styles/format-library/style.css 746 B
build/styles/format-library/style.min.css 326 B
build/styles/list-reusable-blocks/style-rtl.css 1.07 kB
build/styles/list-reusable-blocks/style-rtl.min.css 250 B
build/styles/list-reusable-blocks/style.css 1.07 kB
build/styles/list-reusable-blocks/style.min.css 249 B
build/styles/media-utils/style-rtl.css 2.08 kB
build/styles/media-utils/style-rtl.min.css 1.17 kB
build/styles/media-utils/style.css 2.08 kB
build/styles/media-utils/style.min.css 1.17 kB
build/styles/nux/style-rtl.css 1.48 kB
build/styles/nux/style-rtl.min.css 622 B
build/styles/nux/style.css 1.5 kB
build/styles/nux/style.min.css 618 B
build/styles/patterns/style-rtl.css 1.46 kB
build/styles/patterns/style-rtl.min.css 611 B
build/styles/patterns/style.css 1.46 kB
build/styles/patterns/style.min.css 611 B
build/styles/preferences/style-rtl.css 1.26 kB
build/styles/preferences/style-rtl.min.css 415 B
build/styles/preferences/style.css 1.26 kB
build/styles/preferences/style.min.css 415 B
build/styles/reusable-blocks/style-rtl.css 1.11 kB
build/styles/reusable-blocks/style-rtl.min.css 275 B
build/styles/reusable-blocks/style.css 1.11 kB
build/styles/reusable-blocks/style.min.css 275 B
build/styles/widgets/style-rtl.css 2.05 kB
build/styles/widgets/style-rtl.min.css 1.16 kB
build/styles/widgets/style.css 2.06 kB
build/styles/widgets/style.min.css 1.16 kB

compressed-size-action

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Mar 26, 2026

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

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

@ciampo ciampo force-pushed the refactor/dataviews-ui-dialog branch from a8b8a61 to 1aa3fc8 Compare March 30, 2026 17:04
@github-actions github-actions Bot added [Package] UI /packages/ui and removed [Package] Compose /packages/compose [Package] UI /packages/ui labels Mar 30, 2026
@ciampo ciampo self-assigned this Apr 3, 2026
@ciampo ciampo force-pushed the refactor/dataviews-ui-dialog branch from 641b86b to cec69a8 Compare April 8, 2026 15:53
@github-actions github-actions Bot removed the [Package] UI /packages/ui label Apr 8, 2026
@ciampo ciampo requested a review from Copilot April 8, 2026 17:25

This comment was marked as resolved.

@github-actions github-actions Bot added the [Package] UI /packages/ui label Apr 8, 2026
@ciampo ciampo added the [Type] Enhancement A suggestion for improvement. label Apr 8, 2026
Comment thread packages/ui/src/alert-dialog/popup.tsx Outdated
@ciampo ciampo force-pushed the refactor/dataviews-ui-dialog branch 2 times, most recently from 64dc918 to d482b19 Compare April 15, 2026 12:43
ciampo added a commit that referenced this pull request Apr 16, 2026
@ciampo ciampo force-pushed the refactor/dataviews-ui-dialog branch from d410b6f to a2c9043 Compare April 16, 2026 08:49
@github-actions github-actions Bot added the [Package] Components /packages/components label Apr 16, 2026
@ciampo ciampo force-pushed the refactor/dataviews-ui-dialog branch from cb17dc4 to 94800e6 Compare April 16, 2026 15:38
@github-actions github-actions Bot added the [Package] Blocks /packages/blocks label Apr 16, 2026
ciampo added 6 commits April 30, 2026 18:05
- Wrap the DataForm in `Drawer.Content` so long forms scroll properly while
  the `PostCardPanel` header and `Drawer.Footer` stay pinned (sticky default).
- Use `closeModal()` directly since the prop is required by the only caller.
- Document that `swipeDirection="right"` is intentionally physical (matches
  the previous Modal-based implementation in both LTR and RTL).
- Correct the `modalSize: 'fill'` deprecation `since` to `15.0.0` (next major
  for @wordpress/dataviews) and update the matching test assertion. The
  previous `'7.8'` value was copied over from an unrelated package and would
  have shown an inaccurate version in the runtime warning.
- Drop the loose `as` cast in `mapModalSize` now that the function's return
  type is satisfied by `?? 'medium'` directly. The cast widened the type
  unnecessarily and would have hidden future breakage.
- Wrap the action-modal body in `Dialog.Content` so long forms scroll and
  Header/Footer stay sticky (`Dialog.Content` is the official scroll
  container).
- Rename the portal class to `dataviews-action-modal__portal` for BEM
  consistency with the popup's `dataviews-action-modal` block, and update
  the per-portal `--wp-ui-dialog-z-index` override accordingly.
- Rewrite the `wp-ui-legacy-compat.scss` header comment as a self-contained
  explanation. The previous wording referenced an unpublished migration
  plan; the rules themselves are unchanged.
Extract the `useMapFocusOnMount` helper out of `dataviews-item-actions`
into `hooks/use-map-focus-on-mount` and reuse it from the DataForm panel
modal.

`PanelModal` previously dropped to Base UI's smart default after the
Dialog migration. The smart default is fine in many cases, but for a
field-edit popup we want the first input focused (matching the legacy
`Modal.focusOnMount: 'firstInputElement'` behaviour). Reusing the same
helper keeps both layouts in sync and avoids duplicating the
input-selector heuristic.

Also wraps the `PanelModal` body in `Dialog.Content` so long forms scroll
while the title and footer stay sticky, matching the action-modal
treatment.
…ions

Base UI's `Dialog`/`Drawer` only fire the entry transition when the
underlying store sees `open` go from `false → true` after mount. When the
component is conditionally rendered AND mounted with `open={ true }`, the
internal `mounted`/`transitionStatus` start in their final values and the
animation never plays.

Move to the canonical pattern across the three DataViews/Edit Site call
sites: keep `Dialog.Root` / `Drawer.Root` always mounted in the React tree
and toggle `open` based on state.

- `ActionModal` now accepts a nullable `action` prop. Parents always render
  it; `renderedAction` is retained internally so the popup contents survive
  the exit animation, and `onOpenChangeComplete` clears it once the dialog
  has finished closing.
- `PanelModal`'s heavy hooks move into a new `ModalPopup` child. The parent
  always renders `Dialog.Root` and gates `ModalPopup` behind `renderPopup`
  so the per-open form state still resets when the dialog closes.
- `QuickEditModal` is always rendered by `PostList` with an `open` prop;
  side effects (`useSelect`, etc.) are gated on `renderPopup` to avoid
  spurious entity-record fetches when Quick Edit isn't active.

The popup now unmounts asynchronously after Base UI's animation tracking
resolves, so two `dataform` tests are updated to use `waitFor` for the
"dialog removed from document" assertion.
…ckEditModal

`Dialog.Portal`/`Drawer.Portal` already mount and unmount the popup DOM
based on Base UI's internal `mounted` state, so the consumer-side
`renderPopup` gate is only useful as a perf/UX hedge — not for correctness.

Drop it where the trade-offs are acceptable:

- `PanelModal`: `ModalPopup` now stays mounted and resets its in-progress
  edits via a `useEffect` that fires when `isOpen` flips to `false`. The
  per-render hooks (form validity etc.) are cheap; their JSX output only
  commits when Base UI's portal mounts the popup.
- `QuickEditModal`: `useSelect` is gated on the `open` prop directly, so
  we still skip `getEditedEntityRecord` resolution for non-quick-edit
  selections. The cost is a brief visual blank in the form area at the
  start of the exit animation as `record`/`hasFinishedResolution` reset
  before the drawer finishes sliding out.

`ActionModal` keeps its `renderedAction`/`onOpenChangeComplete` pair —
the popup contents reference `renderedAction.RenderModal` directly, so
losing the retained value during the exit animation would crash.
@ciampo ciampo force-pushed the refactor/dataviews-ui-dialog branch from 8d9e90d to 490e0a2 Compare April 30, 2026 16:06
ciampo added 9 commits April 30, 2026 23:08
Refactor the internal `ActionModal` component so each instance owns one
specific action for its lifetime, rather than sharing a single
`Dialog.Root` across multiple actions and swapping which one to render.

Parents now render one `<ActionModal>` per modal action and toggle a
controlled `open` prop, instead of toggling between `null` and the
active action on a single shared instance. This removes the need for
`renderedAction` state, the setter-during-render trick, and the
`onOpenChangeComplete` callback that cleared it; the popup contents
stay rendered through the exit animation naturally because the
`action` prop never changes for that instance.

The component's prop shape changes from
`{ action: Action | null, items, closeModal }` to
`{ action: Action, items, open, onOpenChange }`. This is fully
internal — `ActionModal` is not re-exported from the package — so no
public API changes.
Refactor `PanelModal` so that the per-session state (in-progress
`changes`, validity refs, content ref) lives in a dedicated
`PanelModalSession` component remounted via `key`-bump from
`onOpenChangeComplete` after the exit animation finishes.

Previously the session component was always mounted and reset its
`changes` state synchronously via a `useEffect( … on isOpen )` —
which caused the form contents to flash to their reset state during
the exit animation. The new approach keeps `changes` intact through
the exit animation (so the form looks right while it's animating
out) while still preserving the existing "Cancel/close always wipes
the draft" semantic by force-remounting the session once the dialog
has finished closing.
Extract the editable form portion of `QuickEditModal` into a new
`QuickEditSession` component rendered as a child of `Drawer.Popup`,
and remove the explicit `open` gate on the `useSelect` resolver.

Base UI's `Drawer.Portal` returns `null` once the exit animation
completes, so anything rendered inside `Drawer.Popup` is naturally
mounted on open and unmounted on close-complete. By moving the
entity-record subscription and the local edits state into the
session, those concerns are now tied to the drawer's on-screen
lifecycle: they engage when the drawer opens, stay alive through
the exit animation (so the form keeps rendering while the drawer
slides out, instead of blanking out as the resolver flips to its
"closed" branch), and tear down cleanly once the drawer is fully
closed. The perf benefit of skipping entity-record fetches while
the drawer isn't on screen is preserved — it's just delegated to
React's mount lifecycle rather than a manual `open`-prop gate.
…call sites

`ActionModal` now renders only `Dialog.Popup` and accepts a `closeModal`
callback. Each call site wraps it in a `Dialog.Root` paired with a
`Dialog.Trigger` (rendered via `Menu.Item`, plain `Button`, or
`Composite.Item`), so the trigger and the popup share the dialog's
context and the open state lives in a small per-action wrapper instead
of a parent-owned `activeModalAction` map.

This eliminates the imperative `setActiveModalAction(action)` plumbing
in `CompactItemActions`, `PrimaryActions`, `ListItem`, and
`PrimaryActionGridCell`, and replaces it with two new internal helpers
(`ModalActionMenuItem`, `ModalActionInlineButton`) that own a leaf-level
`useState`. Bulk-action triggers move from a custom `ActionTrigger`
component to a direct `Dialog.Trigger render={<Button />}` so Base UI's
ARIA wiring (`aria-haspopup="dialog"`, `aria-expanded`,
`aria-controls`) flows through automatically.

`closeModal` stays on `RenderModalProps` because the public contract
allows consumers to call it from async code; the wrapper component owns
the `useState` so the imperative path remains a one-liner
(`() => setOpen(false)`) without any direct Base UI store access.

Tests updated to render `<ActionModal>` inside a controlled
`<Dialog.Root>` instead of injecting `open`/`onOpenChange` props on
`<ActionModal>` directly.
Replace the Cancel/Apply `@wordpress/components` Buttons in
`PanelModalSession` with `Dialog.Action`, so closing flows through the
dialog primitive rather than an imperative `onClose` callback.

- Cancel becomes a propless `<Dialog.Action variant="outline">`. It
  closes via Base UI's `Dialog.Close`; the existing `setTouched(true)`
  side effect runs through the parent's `onOpenChange` handler.
- Apply becomes `<Dialog.Action onClick={() => onChange(changes)}>`.
  `onChange` runs synchronously before Base UI fires the close, so the
  draft commits before the dialog dismisses; `setTouched` follows via
  `onOpenChange` exactly as for Cancel.
- `PanelModalSession` drops its `onClose` prop entirely — both buttons
  now close through the Dialog primitive.
- `PanelModal` keeps its controlled `isOpen` / `setTouched` /
  `sessionKey` state so `SummaryButton` (a custom div-based trigger)
  can still set `aria-expanded` and the existing key-bump preserves
  "Cancel/close wipes the draft" semantics across reopenings.

Drops `@wordpress/components` `Button` and the legacy
`__next40pxDefaultSize` flag from this file.
Restructure the Quick Edit drawer to match the canonical
`Drawer.Header` → (no Drawer.Description) → `Drawer.Footer` shape from
the @wordpress/ui Storybook, and route close/save through Drawer
primitives instead of imperative callbacks.

- `<Drawer.Header>` now wraps the visually-hidden `<Drawer.Title>`,
  `<PostCardPanel hideActions />`, and `<Drawer.CloseIcon />`. The
  drawer now gets the primitive's pinned-top header positioning and
  scroll-edge separator behavior; before this change those wins were
  forfeited because PostCardPanel was a `Drawer.Popup`-direct sibling.
- Drop the `onClose={ closeModal }` prop on `PostCardPanel` — close is
  now a single, idiomatic affordance via `<Drawer.CloseIcon />` instead
  of a duplicate ad-hoc close button rendered by PostCardPanel.
- Cancel button → `<Drawer.Action variant="outline">`. Drops legacy
  `__next40pxDefaultSize` and `variant="secondary"` props (the latter is
  a `@wordpress/components` Button variant; `@wordpress/ui` Button uses
  `outline` for the equivalent).
- Done button → `<Drawer.Action onClick={ onSave }>`. Drawer closes
  synchronously through Base UI's `Drawer.Close`, then the
  `editEntityRecord` / `saveEditedEntityRecord` calls run in the
  background — more responsive UX. Errors continue to surface via the
  existing core-data notice path.
- `QuickEditSession` no longer needs `closeModal` as a prop; both
  buttons close through the Drawer primitive.

The Quick Edit drawer keeps controlled `open` / `closeModal` props on
its top-level `<QuickEditModal>` because the trigger lives in the
post-list view (a row-level action driving a single shared drawer over
an array of `postId`s) and doesn't fit `Drawer.Trigger`'s
sibling-of-popup model.

Note for review: `<PostCardPanel>` inside `<Drawer.Header>` is the
"D1a" route from the audit plan — PostCardPanel's VStack sits as a
flex-row child alongside the close icon, leveraging the header's
shared-padding / scroll-edge separator. Worth a quick visual
verification; a fallback ("D1b") leaves PostCardPanel as a Popup-direct
sibling and only puts the title + close icon inside the header.
Replaces the legacy `@wordpress/components` `Modal` wrapper around
`duplicateAction.RenderModal` with `<Dialog.Root>` + `<Dialog.Popup>` so
this consumer hosts the migrated `RenderModal` inside a real
`Dialog` ancestor (a prerequisite for the action's `Cancel` button to
move to `Dialog.Action`). The dialog uses a separate "is open" state so
the cached template clears on `onOpenChangeComplete` rather than
mid-animation, keeping the popup contents rendered through the exit
transition.
Mirrors the recent dataviews `ActionModal` refactor: the `<Modal>` wrapper
becomes `<Dialog.Popup>` (with `Dialog.Header` / `Dialog.Title` /
`Dialog.CloseIcon` / `Dialog.Content`), and `Dialog.Root` /
`Dialog.Trigger` are hoisted to a per-action `ModalActionMenuItem` so
each menu item owns its own open state. Drops the parent-level
`activeModalAction` state from `PostActions` and rescopes the legacy
z-index to the dialog portal class, matching the dataviews compat
sheet.

Together with the page-templates migration this hosts every consumer of
`action.RenderModal` inside a real `Dialog` ancestor, unblocking the
follow-up where each `RenderModal`'s Cancel button can adopt
`Dialog.Action`.
Now that every consumer of `action.RenderModal` (DataViews item / bulk
actions, edit-site Page Templates, editor PostActions) hosts the
`RenderModal` inside a real `<Dialog.Root>`, internal `RenderModal`s can
swap their `<Button variant="tertiary" onClick={ closeModal }>` Cancel
button for the idiomatic `<Dialog.Action variant="outline">`. The
primary submit/destructive button stays a plain `<Button>` because it
runs async work, surfaces `isBusy`, and decides when to close based on
success/error.

Migrated `RenderModal`s:

- `@wordpress/fields`: `delete-post`, `permanently-delete-post`,
  `trash-post`, `reset-post`, `rename-post`, `reorder-page`,
  `duplicate-post`.
- `@wordpress/user-taxonomies`: `delete`.
- `@wordpress/user-post-types`: `delete`.
- `@wordpress/editor`: `set-as-homepage`, `set-as-posts-page`.

No public API changes — `RenderModalProps.closeModal` keeps its
plain-callback contract; the inner `Dialog.Action` simply closes via
the surrounding `Dialog.Root`'s `onOpenChange`, which the consumer's
state setter already wires to `closeModal`.
@github-actions github-actions Bot added the [Package] Editor /packages/editor label May 1, 2026
ciampo added 5 commits May 3, 2026 15:22
Bring the editor's duplicated ActionModal helpers to parity with the
canonical dataviews implementation:

- Propagate `action.disabled` to the underlying `Menu.Item` (was being
  silently dropped).
- Honour `action.modalSize` (incl. the deprecated `'fill'` value) by
  duplicating the small `mapModalSize` helper from dataviews.
- Honour `action.modalFocusOnMount` by duplicating `useMapFocusOnMount`
  from dataviews so `'firstInputElement'` actually targets the first
  input instead of falling back to the popup default.
- Document, in a single comment block, that these helpers are duplicated
  from dataviews and should eventually move to a shared module.

Also reframes the `modalHeader`-as-function support and the
`hideModalHeader` alert semantics as the bug fixes they really are in
the changelog (both behaviours used to silently mismatch dataviews).
Two small safeguards against the mid-animation re-open race:

- Defensive setter inside `onOpenChangeComplete` so a late "closed"
  callback (firing after the user has already re-opened the dialog with
  a different template) is ignored instead of nulling the active
  selection mid-session.
- `key={ selectedRegisteredTemplate.id }` on `<duplicateAction.RenderModal>`
  so switching templates while the dialog is still closing remounts the
  inner component with a fresh `useState` initializer — otherwise the
  previous template's "(Copy)" title persists into the new session.

Same-template re-open intentionally keeps state (no key change), which
matches the user's likely intent of returning to in-progress edits.
Short-term layout fix for two issues with rendering `PostCardPanel`
inside `Drawer.Header`:

1. PostCardPanel renders its own `<h2>`, which competed with the
   `<h2>` produced by `Drawer.Title` and resulted in two top-level
   headings inside the popup.
2. PostCardPanel is laid out as a vertical stack, which doesn't
   compose with `Drawer.Header`'s flex-row title-and-close-icon
   shape.

Move `PostCardPanel` into `Drawer.Content` (just above the form) and
leave `Drawer.Header` minimal: a visually-hidden `Drawer.Title`
rendered as a `<span>` (so it doesn't introduce a second `<h2>`) plus
`Drawer.CloseIcon`. Base UI still wires `aria-labelledby`
automatically, so the drawer keeps an explicit accessible name.

Tracked as a follow-up: integrate `PostCardPanel` properly with
`Drawer.Header` so it can act as the visible drawer title.
Phase B of the Modal→Dialog migration replaced the Cancel button in
every internal `Action.RenderModal` body with `Dialog.Action`, which
requires a `@wordpress/ui` `Dialog.Root` ancestor at render time.
Every in-tree consumer of `<action.RenderModal>` (DataViews
item-actions, editor `PostActions`, edit-site page-templates) wraps
its content in `Dialog.Root`, so all in-tree call paths are safe.
External consumers that import an action and render its `RenderModal`
outside a `Dialog.Root` will crash with "Dialog parts must be placed
within `<Dialog.Root>`".

Make this contract refinement loud in the diff so it gets explicitly
discussed in PR review:

- Update the `RenderModalProps.RenderModal` JSDoc in
  `@wordpress/dataviews` types to spell out the new host requirement.
- Add a short, identical header comment above every migrated
  `RenderModal:` declaration (11 files across @wordpress/fields,
  @wordpress/user-taxonomies, @wordpress/user-post-types,
  @wordpress/editor).
- Add explicit `Breaking Changes` entries in
  @wordpress/dataviews, @wordpress/fields, and @wordpress/editor
  CHANGELOGs describing the contract narrowing and the upgrade path
  ("wrap in Dialog.Root or render through an in-tree consumer").

No behaviour change in this commit — purely documentation. The PR
description (see #76837) carries a "heads-up for reviewers" section
calling out the trade-off so it can be discussed and, if needed,
reverted in favour of host-agnostic `<Button onClick={ closeModal }>`
Cancel buttons.
…nder

`ButtonTrigger` and `MenuItemTrigger` (dataviews) and the editor's
mirrored `DropdownMenuItemTrigger` now `forwardRef` and spread unknown
props onto their underlying `Button` / `Menu.Item`. This lets the
modal-action wrappers (`ModalActionInlineButton` / `ModalActionMenuItem`)
reuse them via the render-prop pattern:

  <Dialog.Trigger render={ <ButtonTrigger ... /> } />
  <MenuItemTrigger ... render={ <Dialog.Trigger /> } />

instead of inlining their own copy of the trigger markup. No behaviour
change — just removes the structural duplication that R1#8 of the
self-review flagged. The triggers now have a single source of truth
for action-derived attributes (`disabled={ action.disabled }`,
`accessibleWhenDisabled`, `size`, label rendering), so future drift
between the modal and non-modal usages is structurally prevented.

Side effect: `ActionTriggerProps.onClick` is now optional, since
render-prop composition supplies the click handler from the wrapping
primitive. Documented in JSDoc.
@ciampo
Copy link
Copy Markdown
Contributor Author

ciampo commented May 6, 2026

Closing this in favour of 5 smaller, self-contained drafts that split the work along host boundaries: #78028 (DataViews ActionModal / PanelModalDialog), #78029 (Edit Site Quick Edit → Drawer), #78030 (Page Templates duplicate dialog → Dialog), #78031 (Editor PostActionsDialog), and #78032 (Action.RenderModal Cancel buttons → Dialog.Action, depends on the four host migrations).

@ciampo ciampo closed this May 6, 2026
ciampo added a commit that referenced this pull request May 7, 2026
Self-review follow-ups for #78028:

- CHANGELOG: retarget the four `[#76837]` links to `[#78028]` across
  `packages/dataviews`, `packages/edit-site`, and `packages/fields` so
  the entries point at the active PR (CI `Check CHANGELOG diff` fails
  otherwise).
- CHANGELOG: reword the dataviews Breaking-Changes entry — drop the
  inaccurate `AlertDialog` mention (the migration imports `Dialog`
  only), and call out the actual mechanism for destructive actions
  (`Dialog.Popup` with `role="alertdialog"` + `disablePointerDismissal`).
- `useMapFocusOnMount`: enumerate all five legacy `modalFocusOnMount`
  values (`false`, `'firstInputElement'`, `'firstContentElement'`,
  `'firstElement'`, `true`) explicitly in the JSDoc, even where three
  of them converge on the same Base UI smart default — so grepping for
  any of the legacy strings lands here.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Package] DataViews /packages/dataviews [Package] Edit Site /packages/edit-site [Package] Editor /packages/editor [Package] Fields /packages/fields [Type] Enhancement A suggestion for improvement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants