Skip to content

[ui] Add internal wp compat overlay slot helper#77851

Merged
ciampo merged 6 commits into
trunkfrom
add/ui-overlay-prime-slot-helper
May 13, 2026
Merged

[ui] Add internal wp compat overlay slot helper#77851
ciampo merged 6 commits into
trunkfrom
add/ui-overlay-prime-slot-helper

Conversation

@ciampo
Copy link
Copy Markdown
Contributor

@ciampo ciampo commented Apr 30, 2026

What?

Adds a dormant body-level overlay slot to @wordpress/ui. Once a leaf overlay portals into it, that overlay stacks above @wordpress/components overlays in mixed-library compositions. No consumers in this PR.

Why?

Reliable cross-library stacking, without per-instance plumbing on every @wordpress/ui overlay. The first leaf-overlay wiring (Tooltip) lands in #78095 and validates the slot end-to-end; this PR ships the infrastructure on its own so it can land independently.

How?

Two opt-in paths, both lazy:

  • Auto-detect wherever window.wp.components is on the global — the typical script-loader setup for plugins and admin screens, so most consumers do nothing.
  • useEnableWpCompatOverlaySlot() hook for hosts that bundle @wordpress/components (or only @wordpress/ui) directly rather than relying on the global — apps that aren't built with standard WordPress build tooling.

When opted in, the helper lazy-creates a single <div data-wp-compat-overlay-slot> on document.body at z-index 1000000003. Otherwise it returns null and the default portal container the overlay primitives ship with stays in effect.

Implementation notes
  • Co-located unlayered CSS module: position: fixed; top: 0; left: 0; z-index: 1000000003; isolation: isolate. Full reasoning lives in the file's header comment.
  • The hook writes its internal flag synchronously during render so descendants that resolve the gate during the same render pass (e.g. Tooltip's Portal, which calls the helper on every render) pick up the slot on first mount. The enable is one-way by design — a single component shouldn't be able to turn off shared infrastructure for everyone else.
  • The internal flag is undeclared on the global Window interface; the hook is the only documented opt-in surface.
  • The slot lives in the document the helper is called from (document), with no cross-frame traversal. This gives the right placement for both common iframe patterns: Gutenberg's editor canvas iframe is a createPortal boundary, not a script boundary, so @wordpress/ui components rendered inside the canvas keep running in the parent's JS realm and the slot lands in the parent body — escaping the iframe naturally. True script-boundary iframes (Storybook's preview, embedded standalone apps) load their own bundle, run their own JS realm, and get a slot in their own document, alongside the bundle's CSS modules.
  • Multiple @wordpress/ui package instances on the same page coordinate through the DOM via the [data-wp-compat-overlay-slot] attribute — one slot regardless of bundle count. Cache self-heals when the element is removed externally.
  • document.body is null-guarded.

Testing Instructions

npx jest --config=test/unit/jest.config.js --testPathPattern='packages/ui/src/utils/test/(wp-compat-overlay-slot|use-enable-wp-compat-overlay-slot)'

Expected: 28 passing tests. The helper is dormant, so there's no user-facing surface to verify in this PR; end-to-end validation lands in #78095.

Next steps

Use of AI Tools

Authored with Cursor (Claude). Author reviewed all changes.

@github-actions github-actions Bot added the [Package] UI /packages/ui label Apr 30, 2026
@ciampo ciampo self-assigned this Apr 30, 2026
@ciampo ciampo added the [Type] Enhancement A suggestion for improvement. label Apr 30, 2026
@ciampo ciampo requested a review from Copilot April 30, 2026 15:02
@ciampo ciampo changed the title UI: Add dormant overlay prime slot helper (Phase 4) UI: Add dormant overlay prime slot helper Apr 30, 2026

This comment was marked as resolved.

@ciampo ciampo force-pushed the add/ui-overlay-prime-slot-helper branch from f04adc4 to c8f1ac9 Compare April 30, 2026 15:11
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 30, 2026

Size Change: +4 B (0%)

Total Size: 7.93 MB

📦 View Changed
Filename Size Change
build/scripts/edit-site/index.min.js 265 kB +4 B (0%)
ℹ️ 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 19.3 kB
build/modules/connectors/index.min.js 2.05 kB
build/modules/content-types/index.min.js 138 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.3 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 14.1 kB
build/modules/route/index.min.js 25.2 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 10.3 kB
build/scripts/block-editor/index.min.js 343 kB
build/scripts/block-library/index.min.js 320 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 57 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 31 kB
build/scripts/customize-widgets/index.min.js 14.6 kB
build/scripts/data-controls/index.min.js 795 B
build/scripts/data/index.min.js 9.69 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.7 kB
build/scripts/edit-widgets/index.min.js 22.2 kB
build/scripts/editor/index.min.js 428 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 13.1 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/media-utils/index.min.js 79.9 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.11 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.3 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.7 kB
build/styles/block-editor/style-rtl.min.css 15.9 kB
build/styles/block-editor/style.css 18.7 kB
build/styles/block-editor/style.min.css 15.9 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.6 kB
build/styles/components/style-rtl.min.css 14.4 kB
build/styles/components/style.css 17.7 kB
build/styles/components/style.min.css 14.4 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-site/style-rtl.css 20.3 kB
build/styles/edit-site/style-rtl.min.css 16.5 kB
build/styles/edit-site/style.css 20.3 kB
build/styles/edit-site/style.min.css 16.5 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/editor/style-rtl.css 28.4 kB
build/styles/editor/style-rtl.min.css 24 kB
build/styles/editor/style.css 28.4 kB
build/styles/editor/style.min.css 24 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

@ciampo ciampo force-pushed the add/ui-overlay-prime-slot-helper branch 3 times, most recently from 6dcdcb3 to b9db3e2 Compare April 30, 2026 15:20
@ciampo ciampo requested a review from Copilot April 30, 2026 15:20

This comment was marked as resolved.

@ciampo ciampo force-pushed the add/ui-overlay-prime-slot-helper branch 3 times, most recently from a9e8ace to e5b587f Compare April 30, 2026 15:53
@ciampo ciampo marked this pull request as ready for review April 30, 2026 15:54
@ciampo ciampo requested a review from a team as a code owner April 30, 2026 15:54
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 30, 2026

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

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

Co-authored-by: ciampo <mciampini@git.wordpress.org>
Co-authored-by: mirka <0mirka00@git.wordpress.org>

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

Copy link
Copy Markdown
Member

@mirka mirka left a comment

Choose a reason for hiding this comment

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

Excited to start testing this out!

One thing about the name. "Prime slot" was just a code name that I used randomly. In the context of our package, maybe we just call it the "wp compat overlay slot"? Or maybe even just "wp overlay slot". Any other ideas? I feel like "wp" needs to be the operative word, since the slot is specifically a WP concern.

Comment thread packages/ui/src/utils/get-overlay-prime-slot.ts Outdated
Comment thread packages/ui/src/utils/get-overlay-prime-slot.ts Outdated
Comment thread packages/ui/src/utils/get-overlay-prime-slot.ts Outdated
Comment thread packages/ui/src/utils/get-overlay-prime-slot.ts Outdated
Comment thread packages/ui/global.d.ts Outdated
Comment thread packages/ui/src/utils/get-overlay-prime-slot.ts Outdated
Comment thread packages/ui/CHANGELOG.md Outdated
Comment thread packages/ui/src/utils/get-overlay-prime-slot.ts Outdated
@ciampo ciampo changed the title UI: Add dormant overlay prime slot helper UI: Add dormant overlay compat slot helper May 7, 2026
@ciampo ciampo force-pushed the add/ui-overlay-prime-slot-helper branch from e5b587f to 849664a Compare May 8, 2026 10:49
@ciampo ciampo changed the title UI: Add dormant overlay compat slot helper [ui] Add internal wp compat overlay slot helper May 8, 2026
@ciampo
Copy link
Copy Markdown
Contributor Author

ciampo commented May 8, 2026

@mirka should have addressed all feedback

@ciampo
Copy link
Copy Markdown
Contributor Author

ciampo commented May 8, 2026

Also opened a small follow-up to test the slot: #78095 (Tooltip portals through the slot when the gate is open) and the Storybook setup

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 8, 2026

Flaky tests detected in 137688e.
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/25735856136
📝 Reported issues:

@ciampo ciampo force-pushed the add/ui-overlay-prime-slot-helper branch from 849664a to a53ea9c Compare May 8, 2026 13:57
ciampo added a commit that referenced this pull request May 12, 2026
The hook landed in #77851 alongside the dormant compat overlay slot
infrastructure, and goes live for end users once Tooltip starts
portaling into the slot (this PR). README documentation has been
intentionally deferred to this PR so the public-API copy lands
alongside a real consumer.

Adds a "Mixing with @wordpress/components" subsection under "Setup ->
Elsewhere" — the only place a host actually needs to call the hook
(standard WordPress editor screens auto-enable the slot via the
window.wp.components global and don't need it).
ciampo added a commit that referenced this pull request May 12, 2026
Replace the legacy body-level / element-wrapper placement and its
`z-index: 1000000000` with a portal-style migration onto the
`@wordpress/ui` compat overlay slot (#77851). When the slot is
available, the drag clone joins the slot's body-level stacking context
across all three placement modes, so an active drag automatically
shares stacking with any `@wordpress/ui` overlay opened mid-drag
without needing per-version z-index races.

Auto-enabled in WordPress environments via the slot helper's
`window.wp.components` auto-detect; standalone hosts that bundle
`@wordpress/components` directly fall back to the previous placement
until they call `useEnableWpCompatOverlaySlot()`.

Cross-package wiring goes through `@wordpress/private-apis` (both
packages are on the allow-list): `@wordpress/ui` locks
`getWpCompatOverlaySlot()` onto its `privateApis` export;
`@wordpress/components` unlocks it from `Draggable`. The
`@wordpress/ui` dep on `@wordpress/components` is transitional, scoped
to the legacy-overlay migration.

The default placement mode (`appendToOwnerDocument: false`, no
`dragComponent`) previously appended the clone to the dragged
element's parent. In WP environments where the slot is now in effect,
the clone instead lives in the slot — a body-level location. In-repo
ripgrep finds no CSS or event-delegation scoping anchored to the
clone's previous in-flow parent; external consumers that relied on
that ancestry must either not opt into the slot or migrate their
scoping.
Public-facing comments shouldn't reference the underlying overlay
library by name. Rewrites the four references in the helper, hook, and
CSS module to describe the relevant behavior in library-agnostic terms
("the default portal container", "overlay positioners in this
package", etc.). The technical claims are unchanged — only the wording
that named the upstream library.
ciampo added a commit that referenced this pull request May 12, 2026
The hook landed in #77851 alongside the dormant compat overlay slot
infrastructure, and goes live for end users once Tooltip starts
portaling into the slot (this PR). README documentation has been
intentionally deferred to this PR so the public-API copy lands
alongside a real consumer.

Adds a "Mixing with @wordpress/components" subsection under "Setup ->
Elsewhere" — the only place a host actually needs to call the hook
(standard WordPress editor screens auto-enable the slot via the
window.wp.components global and don't need it).
ciampo added a commit that referenced this pull request May 12, 2026
Replace the legacy body-level / element-wrapper placement and its
`z-index: 1000000000` with a portal-style migration onto the
`@wordpress/ui` compat overlay slot (#77851). When the slot is
available, the drag clone joins the slot's body-level stacking context
across all three placement modes, so an active drag automatically
shares stacking with any `@wordpress/ui` overlay opened mid-drag
without needing per-version z-index races.

Auto-enabled in WordPress environments via the slot helper's
`window.wp.components` auto-detect; standalone hosts that bundle
`@wordpress/components` directly fall back to the previous placement
until they call `useEnableWpCompatOverlaySlot()`.

Cross-package wiring goes through `@wordpress/private-apis` (both
packages are on the allow-list): `@wordpress/ui` locks
`getWpCompatOverlaySlot()` onto its `privateApis` export;
`@wordpress/components` unlocks it from `Draggable`. The
`@wordpress/ui` dep on `@wordpress/components` is transitional, scoped
to the legacy-overlay migration.

The default placement mode (`appendToOwnerDocument: false`, no
`dragComponent`) previously appended the clone to the dragged
element's parent. In WP environments where the slot is now in effect,
the clone instead lives in the slot — a body-level location. In-repo
ripgrep finds no CSS or event-delegation scoping anchored to the
clone's previous in-flow parent; external consumers that relied on
that ancestry must either not opt into the slot or migrate their
scoping.
ciampo added a commit that referenced this pull request May 13, 2026
The hook landed in #77851 alongside the dormant compat overlay slot
infrastructure, and goes live for end users once Tooltip starts
portaling into the slot (this PR). README documentation has been
intentionally deferred to this PR so the public-API copy lands
alongside a real consumer.

Adds a "Mixing with @wordpress/components" subsection under "Setup ->
Elsewhere" — the only place a host actually needs to call the hook
(standard WordPress editor screens auto-enable the slot via the
window.wp.components global and don't need it).
Per review feedback that flagged overexplanation and drift-prone
specifics in code comments: collapse the internal type, helper,
function, and module-level docblocks to the load-bearing technical
content only. Inline comments in `getWpCompatOverlaySlot()` shrink to
2–3 lines. CSS header keeps the unlayered/`position: fixed`/physical-
anchoring rationale (load-bearing, subtle) and trims the z-index
prose around the literal value.

No functional change; tests unchanged and passing.
ciampo added a commit that referenced this pull request May 13, 2026
The hook landed in #77851 alongside the dormant compat overlay slot
infrastructure, and goes live for end users once Tooltip starts
portaling into the slot (this PR). README documentation has been
intentionally deferred to this PR so the public-API copy lands
alongside a real consumer.

Adds a "Mixing with @wordpress/components" subsection under "Setup ->
Elsewhere" — the only place a host actually needs to call the hook
(standard WordPress editor screens auto-enable the slot via the
window.wp.components global and don't need it).
@ciampo ciampo merged commit b4dd5cf into trunk May 13, 2026
40 checks passed
@ciampo ciampo deleted the add/ui-overlay-prime-slot-helper branch May 13, 2026 14:10
@github-actions github-actions Bot added this to the Gutenberg 23.3 milestone May 13, 2026
ciampo added a commit that referenced this pull request May 13, 2026
The hook landed in #77851 alongside the dormant compat overlay slot
infrastructure, and goes live for end users once Tooltip starts
portaling into the slot (this PR). README documentation has been
intentionally deferred to this PR so the public-API copy lands
alongside a real consumer.

Adds a "Mixing with @wordpress/components" subsection under "Setup ->
Elsewhere" — the only place a host actually needs to call the hook
(standard WordPress editor screens auto-enable the slot via the
window.wp.components global and don't need it).
ciampo added a commit that referenced this pull request May 13, 2026
The hook landed in #77851 alongside the dormant compat overlay slot
infrastructure, and goes live for end users once Tooltip starts
portaling into the slot (this PR). README documentation has been
intentionally deferred to this PR so the public-API copy lands
alongside a real consumer.

Adds a "Mixing with @wordpress/components" subsection under "Setup ->
Elsewhere" — the only place a host actually needs to call the hook
(standard WordPress editor screens auto-enable the slot via the
window.wp.components global and don't need it).
ciampo added a commit that referenced this pull request May 13, 2026
Replace the legacy body-level / element-wrapper placement and its
`z-index: 1000000000` with a portal-style migration onto the
`@wordpress/ui` compat overlay slot (#77851). When the slot is
available, the drag clone joins the slot's body-level stacking context
across all three placement modes, so an active drag automatically
shares stacking with any `@wordpress/ui` overlay opened mid-drag
without needing per-version z-index races.

Auto-enabled in WordPress environments via the slot helper's
`window.wp.components` auto-detect; standalone hosts that bundle
`@wordpress/components` directly fall back to the previous placement
until they call `useEnableWpCompatOverlaySlot()`.

Cross-package wiring goes through `@wordpress/private-apis` (both
packages are on the allow-list): `@wordpress/ui` locks
`getWpCompatOverlaySlot()` onto its `privateApis` export;
`@wordpress/components` unlocks it from `Draggable`. The
`@wordpress/ui` dep on `@wordpress/components` is transitional, scoped
to the legacy-overlay migration.

The default placement mode (`appendToOwnerDocument: false`, no
`dragComponent`) previously appended the clone to the dragged
element's parent. In WP environments where the slot is now in effect,
the clone instead lives in the slot — a body-level location. In-repo
ripgrep finds no CSS or event-delegation scoping anchored to the
clone's previous in-flow parent; external consumers that relied on
that ancestry must either not opt into the slot or migrate their
scoping.
ciampo added a commit that referenced this pull request May 13, 2026
Replace the legacy body-level / element-wrapper placement and its
`z-index: 1000000000` with a portal-style migration onto the
`@wordpress/ui` compat overlay slot (#77851). When the slot is
available, the drag clone joins the slot's body-level stacking context
across all three placement modes, so an active drag automatically
shares stacking with any `@wordpress/ui` overlay opened mid-drag
without needing per-version z-index races.

Auto-enabled in WordPress environments via the slot helper's
`window.wp.components` auto-detect; standalone hosts that bundle
`@wordpress/components` directly fall back to the previous placement
until they call `useEnableWpCompatOverlaySlot()`.

Cross-package wiring goes through `@wordpress/private-apis` (both
packages are on the allow-list): `@wordpress/ui` locks
`getWpCompatOverlaySlot()` onto its `privateApis` export;
`@wordpress/components` unlocks it from `Draggable`. The
`@wordpress/ui` dep on `@wordpress/components` is transitional, scoped
to the legacy-overlay migration.

The default placement mode (`appendToOwnerDocument: false`, no
`dragComponent`) previously appended the clone to the dragged
element's parent. In WP environments where the slot is now in effect,
the clone instead lives in the slot — a body-level location. In-repo
ripgrep finds no CSS or event-delegation scoping anchored to the
clone's previous in-flow parent; external consumers that relied on
that ancestry must either not opt into the slot or migrate their
scoping.
ciampo added a commit that referenced this pull request May 13, 2026
Replace the legacy body-level / element-wrapper placement and its
`z-index: 1000000000` with a portal-style migration onto the
`@wordpress/ui` compat overlay slot (#77851). When the slot is
available, the drag clone joins the slot's body-level stacking context
across all three placement modes, so an active drag automatically
shares stacking with any `@wordpress/ui` overlay opened mid-drag
without needing per-version z-index races.

Auto-enabled in WordPress environments via the slot helper's
`window.wp.components` auto-detect; standalone hosts that bundle
`@wordpress/components` directly fall back to the previous placement
until they call `useEnableWpCompatOverlaySlot()`.

Cross-package wiring goes through `@wordpress/private-apis` (both
packages are on the allow-list): `@wordpress/ui` locks
`getWpCompatOverlaySlot()` onto its `privateApis` export;
`@wordpress/components` unlocks it from `Draggable`. The
`@wordpress/ui` dep on `@wordpress/components` is transitional, scoped
to the legacy-overlay migration.

The default placement mode (`appendToOwnerDocument: false`, no
`dragComponent`) previously appended the clone to the dragged
element's parent. In WP environments where the slot is now in effect,
the clone instead lives in the slot — a body-level location. In-repo
ripgrep finds no CSS or event-delegation scoping anchored to the
clone's previous in-flow parent; external consumers that relied on
that ancestry must either not opt into the slot or migrate their
scoping.
ciampo added a commit that referenced this pull request May 14, 2026
The hook landed in #77851 alongside the dormant compat overlay slot
infrastructure, and goes live for end users once Tooltip starts
portaling into the slot (this PR). README documentation has been
intentionally deferred to this PR so the public-API copy lands
alongside a real consumer.

Adds a "Mixing with @wordpress/components" subsection under "Setup ->
Elsewhere" — the only place a host actually needs to call the hook
(standard WordPress editor screens auto-enable the slot via the
window.wp.components global and don't need it).
ciampo added a commit that referenced this pull request May 14, 2026
Replace the legacy body-level / element-wrapper placement and its
`z-index: 1000000000` with a portal-style migration onto the
`@wordpress/ui` compat overlay slot (#77851). When the slot is
available, the drag clone joins the slot's body-level stacking context
across all three placement modes, so an active drag automatically
shares stacking with any `@wordpress/ui` overlay opened mid-drag
without needing per-version z-index races.

Auto-enabled in WordPress environments via the slot helper's
`window.wp.components` auto-detect; standalone hosts that bundle
`@wordpress/components` directly fall back to the previous placement
until they call `useEnableWpCompatOverlaySlot()`.

Cross-package wiring goes through `@wordpress/private-apis` (both
packages are on the allow-list): `@wordpress/ui` locks
`getWpCompatOverlaySlot()` onto its `privateApis` export;
`@wordpress/components` unlocks it from `Draggable`. The
`@wordpress/ui` dep on `@wordpress/components` is transitional, scoped
to the legacy-overlay migration.

The default placement mode (`appendToOwnerDocument: false`, no
`dragComponent`) previously appended the clone to the dragged
element's parent. In WP environments where the slot is now in effect,
the clone instead lives in the slot — a body-level location. In-repo
ripgrep finds no CSS or event-delegation scoping anchored to the
clone's previous in-flow parent; external consumers that relied on
that ancestry must either not opt into the slot or migrate their
scoping.
ciampo added a commit that referenced this pull request May 14, 2026
The hook landed in #77851 alongside the dormant compat overlay slot
infrastructure, and goes live for end users once Tooltip starts
portaling into the slot (this PR). README documentation has been
intentionally deferred to this PR so the public-API copy lands
alongside a real consumer.

Adds a "Mixing with @wordpress/components" subsection under "Setup ->
Elsewhere" — the only place a host actually needs to call the hook
(standard WordPress editor screens auto-enable the slot via the
window.wp.components global and don't need it).
ciampo added a commit that referenced this pull request May 14, 2026
…78095)

* Tooltip: Default the portal container to the wp compat overlay slot

Wire `Tooltip.Portal` to default its `container` prop to the
`@wordpress/ui` compat overlay slot (when the runtime opts in via
WordPress detection or the explicit window flag). A caller-supplied
`container` prop continues to take precedence (props are spread after
the default).

Adds three integration tests in `packages/ui/src/tooltip/test`
covering: popup is portaled into the slot when the gate is open;
slot is not created when the gate is closed (dormant default); and
caller-supplied containers override the slot default.

Adds a Storybook decorator (`WithWpCompatOverlaySlot`) that opts a
single story into the slot and cleans up on unmount, plus
demonstration stories: per-component (`Inside WP Compat Overlay
Slot`) and cross-library (`@wordpress/ui` Tooltip inside
`@wordpress/components` Modal/Popover) under `Playground/WP Compat
Overlay Slot`.

This is a sample wiring of the prime-slot infrastructure for one
leaf overlay; it doubles as the end-to-end stacking validator for
the helper introduced upstream.

* Move WithWpCompatOverlaySlot decorator into @wordpress/ui

The decorator previously lived in `storybook/decorators/`, but
per-component stories under `packages/ui/src/tooltip/stories/`
imported it from there — a `packages/ui` → `storybook/`
cross-package boundary violation.

Move it to `packages/ui/src/utils/with-wp-compat-overlay-slot.tsx`,
co-located with the helper it opts into. The Tooltip story now
imports it as a same-package file. The cross-library demo under
`storybook/stories/playground/` imports it via `packages/ui/src/...`
which is the normal upper-level → package import direction.

Drive-by: now imports `WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE` from the
helper module instead of hardcoding the data attribute string.

* [ui] README: document useEnableWpCompatOverlaySlot()

The hook landed in #77851 alongside the dormant compat overlay slot
infrastructure, and goes live for end users once Tooltip starts
portaling into the slot (this PR). README documentation has been
intentionally deferred to this PR so the public-API copy lands
alongside a real consumer.

Adds a "Mixing with @wordpress/components" subsection under "Setup ->
Elsewhere" — the only place a host actually needs to call the hook
(standard WordPress editor screens auto-enable the slot via the
window.wp.components global and don't need it).

* [ui] Tooltip / decorator / playground: remove Base UI mentions

Drops references to the underlying overlay library by name from the
three docblocks/header comments added in this PR. Rewords each to
describe the relevant behavior in library-agnostic terms ("the default
portal container", "Tooltip.Portal", "the default portal"). No code
changes.

* Co-locate WithWpCompatOverlaySlot decorator with playground stories

Moves the decorator out of `@wordpress/ui` (where it had ended up to
avoid a `packages/ui` → `storybook/` cross-boundary dependency for the
per-component Tooltip story) and into the same directory as the only
remaining consumer, the cross-library Playground story.

The dedicated `Inside WP Compat Overlay Slot` Tooltip story is removed
along with the move. The decorator mutates a window-level flag that's
process-wide across the Storybook preview iframe, so applying it to
per-component stories made the opt-in leak into every sibling story
rendered on the same autodocs page. Keeping the decorator next to the
single playground story that needs it confines the leak blast radius
to the playground; cross-library stacking remains the end-to-end
validator for the slot.

* [ui] Portal/Positioner: Harmonize JSDoc across overlay primitives

Tighten and align the JSDoc on `Portal` and `Positioner` subcomponents
across `Tooltip`, `Popover`, `Select`, `Autocomplete`, `Drawer`,
`Dialog`, and `AlertDialog` to a single-sentence "Used to apply custom
<feature> to <Component>'s <content>" cadence. The prop listings and
"Pass to X.Popup's `portal`/`positioner` prop" boilerplate are
documented by the TypeScript types — the docblock no longer duplicates
them.

---

Co-authored-by: ciampo <mciampini@git.wordpress.org>
Co-authored-by: mirka <0mirka00@git.wordpress.org>
ciampo added a commit that referenced this pull request May 14, 2026
Replace the legacy body-level / element-wrapper placement and its
`z-index: 1000000000` with a portal-style migration onto the
`@wordpress/ui` compat overlay slot (#77851). When the slot is
available, the drag clone joins the slot's body-level stacking context
across all three placement modes, so an active drag automatically
shares stacking with any `@wordpress/ui` overlay opened mid-drag
without needing per-version z-index races.

Auto-enabled in WordPress environments via the slot helper's
`window.wp.components` auto-detect; standalone hosts that bundle
`@wordpress/components` directly fall back to the previous placement
until they call `useEnableWpCompatOverlaySlot()`.

`@wordpress/components` imports `getWpCompatOverlaySlot()` directly
from `@wordpress/ui`'s public exports (also promoted from internal in
this change). The `@wordpress/components` dep on `@wordpress/ui` is
transitional, scoped to the legacy-overlay migration.

Cross-document drags (e.g. dragging an element inside an iframe while
the slot is in the parent document) fall back to the previous
placement so the clone's viewport-relative geometry stays in a single
coordinate space.

The default placement mode (`appendToOwnerDocument: false`, no
`dragComponent`) previously appended the clone to the dragged
element's parent. In WP environments where the slot is now in effect,
the clone instead lives in the slot — a body-level location. In-repo
ripgrep finds no CSS or event-delegation scoping anchored to the
clone's previous in-flow parent; external consumers that relied on
that ancestry must either not opt into the slot or migrate their
scoping.
ciampo added a commit that referenced this pull request May 15, 2026
Replace the legacy body-level / element-wrapper placement and its
`z-index: 1000000000` with a portal-style migration onto the
`@wordpress/ui` compat overlay slot (#77851). When the slot is
available, the drag clone joins the slot's body-level stacking context
across all three placement modes, so an active drag automatically
shares stacking with any `@wordpress/ui` overlay opened mid-drag
without needing per-version z-index races.

Auto-enabled in WordPress environments via the slot helper's
`window.wp.components` auto-detect; standalone hosts that bundle
`@wordpress/components` directly fall back to the previous placement
until they call `useEnableWpCompatOverlaySlot()`.

`@wordpress/components` imports `getWpCompatOverlaySlot()` directly
from `@wordpress/ui`'s public exports (also promoted from internal in
this change). The `@wordpress/components` dep on `@wordpress/ui` is
transitional, scoped to the legacy-overlay migration.

Cross-document drags (e.g. dragging an element inside an iframe while
the slot is in the parent document) fall back to the previous
placement so the clone's viewport-relative geometry stays in a single
coordinate space.

The default placement mode (`appendToOwnerDocument: false`, no
`dragComponent`) previously appended the clone to the dragged
element's parent. In WP environments where the slot is now in effect,
the clone instead lives in the slot — a body-level location. In-repo
ripgrep finds no CSS or event-delegation scoping anchored to the
clone's previous in-flow parent; external consumers that relied on
that ancestry must either not opt into the slot or migrate their
scoping.
ciampo added a commit that referenced this pull request May 15, 2026
Replace the legacy body-level / element-wrapper placement and its
`z-index: 1000000000` with a portal-style migration onto the
`@wordpress/ui` compat overlay slot (#77851). When the slot is
available, the drag clone joins the slot's body-level stacking context
across all three placement modes, so an active drag automatically
shares stacking with any `@wordpress/ui` overlay opened mid-drag
without needing per-version z-index races.

Auto-enabled in WordPress environments via the slot helper's
`window.wp.components` auto-detect; standalone hosts that bundle
`@wordpress/components` directly fall back to the previous placement
until they call `useEnableWpCompatOverlaySlot()`.

`@wordpress/components` imports `getWpCompatOverlaySlot()` directly
from `@wordpress/ui`'s public exports (also promoted from internal in
this change). The `@wordpress/components` dep on `@wordpress/ui` is
transitional, scoped to the legacy-overlay migration.

Cross-document drags (e.g. dragging an element inside an iframe while
the slot is in the parent document) fall back to the previous
placement so the clone's viewport-relative geometry stays in a single
coordinate space.

The default placement mode (`appendToOwnerDocument: false`, no
`dragComponent`) previously appended the clone to the dragged
element's parent. In WP environments where the slot is now in effect,
the clone instead lives in the slot — a body-level location. In-repo
ripgrep finds no CSS or event-delegation scoping anchored to the
clone's previous in-flow parent; external consumers that relied on
that ancestry must either not opt into the slot or migrate their
scoping.
ciampo added a commit that referenced this pull request May 15, 2026
Replace the legacy body-level / element-wrapper placement and its
`z-index: 1000000000` with a portal-style migration onto the
`@wordpress/ui` compat overlay slot (#77851). When the slot is
available, the drag clone joins the slot's body-level stacking context
across all three placement modes, so an active drag automatically
shares stacking with any `@wordpress/ui` overlay opened mid-drag
without needing per-version z-index races.

Auto-enabled in WordPress environments via the slot helper's
`window.wp.components` auto-detect; standalone hosts that bundle
`@wordpress/components` directly fall back to the previous placement
until they call `useEnableWpCompatOverlaySlot()`.

`@wordpress/components` imports `getWpCompatOverlaySlot()` directly
from `@wordpress/ui`'s public exports (also promoted from internal in
this change). The `@wordpress/components` dep on `@wordpress/ui` is
transitional, scoped to the legacy-overlay migration.

Cross-document drags (e.g. dragging an element inside an iframe while
the slot is in the parent document) fall back to the previous
placement so the clone's viewport-relative geometry stays in a single
coordinate space.

The default placement mode (`appendToOwnerDocument: false`, no
`dragComponent`) previously appended the clone to the dragged
element's parent. In WP environments where the slot is now in effect,
the clone instead lives in the slot — a body-level location. In-repo
ripgrep finds no CSS or event-delegation scoping anchored to the
clone's previous in-flow parent; external consumers that relied on
that ancestry must either not opt into the slot or migrate their
scoping.
ciampo added a commit that referenced this pull request May 15, 2026
…ot (#78183)

* Draggable: Migrate clone wrapper to wp compat overlay slot

Replace the legacy body-level / element-wrapper placement and its
`z-index: 1000000000` with a portal-style migration onto the
`@wordpress/ui` compat overlay slot (#77851). When the slot is
available, the drag clone joins the slot's body-level stacking context
across all three placement modes, so an active drag automatically
shares stacking with any `@wordpress/ui` overlay opened mid-drag
without needing per-version z-index races.

Auto-enabled in WordPress environments via the slot helper's
`window.wp.components` auto-detect; standalone hosts that bundle
`@wordpress/components` directly fall back to the previous placement
until they call `useEnableWpCompatOverlaySlot()`.

`@wordpress/components` imports `getWpCompatOverlaySlot()` directly
from `@wordpress/ui`'s public exports (also promoted from internal in
this change). The `@wordpress/components` dep on `@wordpress/ui` is
transitional, scoped to the legacy-overlay migration.

Cross-document drags (e.g. dragging an element inside an iframe while
the slot is in the parent document) fall back to the previous
placement so the clone's viewport-relative geometry stays in a single
coordinate space.

The default placement mode (`appendToOwnerDocument: false`, no
`dragComponent`) previously appended the clone to the dragged
element's parent. In WP environments where the slot is now in effect,
the clone instead lives in the slot — a body-level location. In-repo
ripgrep finds no CSS or event-delegation scoping anchored to the
clone's previous in-flow parent; external consumers that relied on
that ancestry must either not opt into the slot or migrate their
scoping.

* Draggable: Storybook: render docs-page stories in iframes

The drag clone uses `position: fixed`, which Storybook's docs-page
wrappers break because they apply `transform`s that establish new
containing blocks. As a result the clone resolves against those
wrappers instead of the viewport and lands in the wrong place on
the autodocs page.

Render each Draggable story in its own iframe on the autodocs page
via `parameters.docs.story.inline: false`, which restores
viewport-relative positioning for the clone.

* Draggable: Storybook: polish cross-document fallback playground story

Three small follow-ups on the iframe regression story:

- Inject the Draggable SCSS into the iframe via Vite's `?inline`
  import (same pattern `WithGlobalCSS` uses with
  `global-basic.scss?inline`) instead of duplicating rule bodies
  in `srcDoc`. Single source of truth; future SCSS edits flow
  through automatically.
- Guard the style injection on `iframeDoc?.head` so the brief
  about:blank → srcDoc transition doesn't throw on the initial
  `useEffect` pass.
- Align the slot-presence display with the public
  `getWpCompatOverlaySlot()` API: it now returns `undefined`
  rather than `null` when no slot is registered.

* CHANGELOG: Restore entries dropped during rebase

Three Unreleased entries were inadvertently removed when the
Draggable migration commit was rebased onto trunk:

- @wordpress/components Internal: `Modal`, `Menu`, `DropdownMenu`
  motion-token adoption (#76097).
- @wordpress/components Internal: `Popover` close-button z-index
  cleanup (#78180).
- @wordpress/ui Bug Fixes: `Text` CSS-defense values for paragraph
  and heading variants (#78172).

Restore them under their original headings.

* Storybook: Fix popover-with-slotfill cross-iframe collision boundary

`Popover.Popup` stopped accepting `collisionBoundary` directly when
#78168 introduced the `Popover.Positioner` slot subcomponent. The
prop is now silently ignored on `Popup`, so the cross-iframe story's
collision avoidance regressed after the rebase onto trunk.

Route the boundary through `Popover.Positioner` (matching the
modern `Popover.Popup`'s `positioner` slot pattern) so the popup
honors the iframe's clipping edge again.

This file is `.jsx` so the type system didn't catch the silent
prop-drop.

* Draggable: Storybook: refresh AppendElementToOwnerDocument JSDoc

The story's JSDoc still described the legacy "escape ancestor
stacking context" rationale, which now contradicts the updated
`appendToOwnerDocument` JSDoc in `types.ts` for hosts that opt
into the `@wordpress/ui` compat overlay slot — where the clone
always lives in the body-level slot and the prop is a no-op.

Update the story's docblock to mirror the type-level guidance and
call out the cross-document fallback exception.

* Draggable: CHANGELOG: Call out default-mode in-flow ancestor change

The original Draggable entry covered the stacking + cross-document
fallback story, but left the load-bearing behavior change for
third-party consumers in the PR description only: in the default
placement mode (no `appendToOwnerDocument`, no `__experimentalDragComponent`),
the clone used to be a DOM descendant of the dragged element's
parent. With the slot active, it now lives at the body-level slot
regardless.

Surface that change directly in the CHANGELOG entry, including a
migration hint for consumers that scoped CSS or event delegation
on the clone's previous ancestry.

* Draggable: Add e2e regression for chip-inside-compat-slot

Lock in the structural guarantee that underpins the stacking
claim in #78183: when `@wordpress/components`'s `Draggable` runs
in a WordPress environment, the drag chip is rendered inside the
body-level `[data-wp-compat-overlay-slot]`.

That single structural assertion subsumes the visual stacking
contract — the slot creates an isolated stacking context with
`z-index: 1000000003`, so anything appended into it stacks above
any `@wordpress/components` overlay opened mid-drag (which live
outside the slot at lower `z-index`s).

Asserting structure rather than visual layering keeps the test
robust against unrelated overlay z-index churn, and avoids a
brittle `elementFromPoint`-style probe across the
parent-doc/canvas-iframe boundary.

* Storybook: Trim file-level docblocks on playground stories

Drop the file-level brain-dump JSDoc from the
`draggable-cross-document-fallback` and `popover-with-slotfill`
playground stories. The story body and any per-story copy carry
the user-facing explanation; the file-level prose was internal
reasoning that doesn't belong in the story source.

Per mirka's review on PR #78183 (empty-suggestion blocks).

* Storybook: popover-with-slotfill story: use public @wordpress/ui API

Switch the playground story to consume `Popover` from the public
`@wordpress/ui` entry point instead of reaching into
`packages/ui/src/popover`. Inline a small `IframePortal` helper
locally so the story no longer depends on
`packages/ui/src/popover/stories/utils` either (those story
utilities are not part of any public surface).

Also swap the `Slot` ref from `useRef` to a state setter so the
popup re-renders once the slot's container element mounts, which
removes a first-render race the previous `useRef` pattern had.

Per mirka's review on PR #78183.

* Storybook: draggable cross-doc story: load components styles via Storybook bundle

Swap the iframe's style injection from a `?inline` import of
`packages/components/src/draggable/style.scss` (reaching into
another package's source) to Storybook's own
`storybook/package-styles/components-ltr.lazy.scss`, which is the
canonical bundle of `@wordpress/components` styles for stories.

The injected CSS is now broader than strictly necessary (the
whole package stylesheet rather than only Draggable's rules),
but this is a debug fixture and the cost is negligible. In
exchange we drop the cross-package src reach.

Per mirka's review on PR #78183.

* Storybook: Move cross-document fallback story under "Debug fixtures"

The cross-document fallback story is strictly defensive
regression coverage and doesn't illustrate a pattern non-
maintainers would seek out. Move it under a `Debug fixtures`
sub-section in the sidebar so the main `Playground/` namespace
stays focused on intended-usage demos.

Per mirka's review on PR #78183.

* Storybook: Drop redundant `parameters.sourceLink` from playground stories

The `source-link` Storybook addon already derives the GitHub
source path from `storyData.importPath` when no explicit
`parameters.sourceLink` is provided (see
`storybook/addons/source-link/manager.ts`). For stories living
under `storybook/stories/playground/`, that fallback resolves to
the same value the explicit `sourceLink` was hard-coding, so the
declaration is pure duplication.

Per mirka's review on PR #78183 (empty-suggestion blocks
covering the `parameters: { sourceLink: ... }` literal).

* Draggable: Migrate styles from SCSS to a CSS module

Move the (already small) Draggable stylesheet to a CSS module so
its rules travel via `@wordpress/style-runtime` (and therefore
into any iframe wrapped in `<StyleProvider>` — e.g. the
block-editor canvas) without needing the package-level
`build-style/style.css` bundle. Drops the `@use` line from
`packages/components/src/style.scss`, following the same shape
as the `AlignmentMatrixControl` (#73714/#73757) and
`AnglePickerControl` (#73786) migrations.

The CSS-module class names are standard (hashed). The legacy
`components-draggable__*` / `is-dragging-components-draggable`
class names are kept by adding them alongside the hashed ones
in the JS `classList.add(...)` calls, since several other
Gutenberg packages reference them in their own stylesheets
(block-editor's `list-view`, `block-tools`, `block-library`'s
`navigation` editor, `edit-widgets`' `widget-area` editor) and
block-editor runtime JS reads `is-dragging-components-draggable`
off `document.body`. Dropping those names would silently break
those consumers.

Per mirka's review on PR #78183 (CSS-module option for the
iframe story); the corresponding Storybook simplification
follows in a separate commit.

* Storybook: Simplify cross-document fallback story with StyleProvider

Now that Draggable's styles ship as a CSS module routed through
`@wordpress/style-runtime`, the cross-document fallback story no
longer needs to manually `?inline`-import and inject the whole
`components-ltr` SCSS bundle into the iframe's `<head>`.

Wrap the portaled iframe content in
`<StyleProvider document={iframeDoc}>` from
`@wordpress/components` instead — `StyleProvider` calls
`registerDocument()` on the iframe document, and the style
registry replays every registered CSS module (Draggable
included) into that document. The visible behavior is
unchanged: the orange clone still tracks the cursor inside the
iframe, demonstrating the cross-document fallback.

Per mirka's review on PR #78183.

* Draggable: CHANGELOG: Move entry to Unreleased and slim it down

The Enhancements entry for this PR ended up rolled into the
already-cut `33.1.0` release section during an earlier rebase,
and had grown to a 700-character paragraph spelling out every
edge case (cross-document fallback, `appendToOwnerDocument`
semantics, in-flow ancestor migration hints).

Move it back to `## Unreleased` and trim to a two-sentence
summary in line with the surrounding entries. The dropped
detail still lives in the JSDoc, the code comments, and the PR
description's <details> blocks.

* Draggable: Trim verbose inline code comments

Sweep across the comments added by this PR, dropping
redundant duplication, narration of self-evident code, and
prose that already lives in the PR description / JSDoc:

-   Drop the duplicate compat-slot note from the
    `AppendElementToOwnerDocument` story JSDoc (the
    interaction is already described on the prop's TS
    JSDoc in `types.ts`).
-   Tighten the prop JSDoc for `appendToOwnerDocument` to a
    single short paragraph.
-   Slim the same-document-only slot guard comment in
    `Draggable.start()` (the conditional itself reads as
    "slot if same document").
-   Compact the rationale comment for
    `parameters.docs.story.inline: false` in the Draggable
    autodocs config to a single explanation.
-   Trim the structural-stacking assertion comment in the
    Playwright `draggable-blocks` spec.
-   Drop the forward-looking "can be removed on a future
    Stylelint upgrade" note from `CSS_BASELINE_2024_FUNCTIONS`.

No behavior change.

* @wordpress/ui CHANGELOG: Move #78183 entry to Unreleased

The `getWpCompatOverlaySlot()` export bullet was left inside the
already-released `## 0.13.0` section when the parallel
`@wordpress/components` entry was moved to `## Unreleased`.

* Draggable: Keep physical `left` for the invisible drag image

Mirroring this offscreen stand-in in RTL has no benefit — either side
hides it equally — so revert to the original physical property and
silence the logical-properties lint with a targeted comment.

* @wordpress/ui CHANGELOG: Trim #78183 entry

* @wordpress/ui: Restore unrelated tsconfig change

* Storybook: Drop redundant story-name overrides

* Draggable: Keep body cursor class global

The cursor flip is also triggered by external code (block-editor
keyboard drag, etc.) that toggles `is-dragging-components-draggable`
directly. Targeting the legacy class globally preserves that flow,
which a module-hashed selector silently broke.

* Draggable: Guard class arrays against the Jest CSS-module mock

`jest-preset-default`'s style mock returns `undefined` for any class,
which `classList.add()` would coerce to a literal "undefined" token.
Filter falsy entries to keep test DOM clean.

* Draggable: Address minor self-review nits

- Note why the invisible drag image bypasses the compat slot.
- Drop a redundant chip-count assertion in the e2e spec.
- Flag the SCSS-only stylelint override pattern explicitly.

* Storybook: Group compat-slot fixtures under Debug fixtures

Consolidates the manual verification stories (`WP Compat Overlay Slot`,
`Popover with SlotFill`) alongside the existing Draggable fixture.

* Draggable: Use kebab-case for CSS module class names

---

Co-authored-by: ciampo <mciampini@git.wordpress.org>
Co-authored-by: mirka <0mirka00@git.wordpress.org>
ciampo added a commit that referenced this pull request May 15, 2026
Compresses JSDoc, inline comments, prose, and CHANGELOG/README copy
added by #77851, #78095, and #78183 down to the essentials. Public API
docs keep the "what / when / two opt-in paths" guidance; internal
narration and implementation reasoning that the code already conveys
are dropped or compressed. No behavior changes.
ciampo added a commit that referenced this pull request May 15, 2026
Compresses JSDoc, inline comments, prose, and README copy added by
#77851, #78095, and #78183 down to the essentials. Public API docs
keep the "what / when / two opt-in paths" guidance; internal narration
and implementation reasoning that the code already conveys is dropped
or compressed. No behavior changes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Package] UI /packages/ui [Type] Enhancement A suggestion for improvement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants