WordPress / gutenberg

The Block Editor project for WordPress and beyond. Plugin is available from the official repository.
https://wordpress.org/gutenberg/
Other
10.49k stars 4.19k forks source link

Optimize `getVisibleElementBounds` in scrollable cases #66546

Closed stokesman closed 19 hours ago

stokesman commented 4 days ago

What?

A minor improvement of getVisibleElementBounds.

Why?

To avoid extraneous DOM method invocations. I think it also makes the code more clear. The performance probably isn’t really an issue. Scrollable elements aren’t expected to be the primary use case of the utility anyway.

How?

Skips iteration of children when the parent is scrollable.

Testing Instructions

Scrollable block for use in reproduction/testing ```js wp.blocks.registerBlockType( 'test/scrollable', { apiVersion: 3, title: 'Scrollable block', attributes: { isHorizontal: { default: false, type: 'boolean', } }, edit: ( { attributes: { isHorizontal }, setAttributes } ) => { const { createElement: h, Fragment, useRef } = wp.element; const controls = h( wp.blockEditor.BlockControls, { group: 'block' }, h( wp.components.ToolbarButton, { isPressed: isHorizontal, onClick: () => setAttributes( { isHorizontal: ! isHorizontal } ), }, 'Horizontal' ) ); const menuRef = useRef(); const toggleMenu = ( event ) => { if ( menuRef.current.hasAttribute( 'hidden' ) ) menuRef.current.removeAttribute( 'hidden' ); else menuRef.current.setAttribute( 'hidden', '' ); }; const block = h( 'div', wp.blockEditor.useBlockProps(), h( 'header', { style: { background: '#fff', marginInline: '-.5em', padding: '.5em', borderRadius: '.5em', filter: 'drop-shadow(0 0 .25em #0003)', display: 'flex', } }, '📜 Scroll please', h( 'button', { onClick: toggleMenu, style: { marginInline: 'auto 0' } }, '⋮' ), h( 'div', { ref: menuRef, style: { position: 'absolute', inset: '3rem 0 auto auto', height: '300px', fontSize: '300px', lineHeight: .93, overflow: 'hidden', background: 'inherit', borderRadius: 'inherit', }, hidden: true, }, '⋮' ) ), h( 'div', { style: { overflow: 'auto', background: 'papayawhip', ...( isHorizontal ? { display: 'grid', gridAutoColumns: '5em', gridAutoFlow: 'column' } : { height: '200px' } ) }, }, ...Array .from( { length: 40 } ) .map( ( v, i ) => h( 'p', { key: 'u' + i, children:'p ' + ( i + 1 ) } ) ) ) ); return h( Fragment, null, controls, block ); }, } ); ```

Verify the extraneous calls on trunk (optional)

It seems pretty clear just reading the source of the function but if your like me you want to run the experiment.

Diff to log iterations when the element is scrollable ```diff diff --git a/packages/block-editor/src/utils/dom.js b/packages/block-editor/src/utils/dom.js index 0603e9bbb1..027e81eeb0 100644 --- a/packages/block-editor/src/utils/dom.js +++ b/packages/block-editor/src/utils/dom.js @@ -167,6 +167,7 @@ export function getVisibleElementBounds( element ) { let childBounds = child.getBoundingClientRect(); // If the parent is scrollable, use parent's scrollable bounds. if ( isScrollable( currentElement ) ) { + console.log('using parent bounds', currentElement) childBounds = currentElement.getBoundingClientRect(); } bounds = rectUnion( bounds, childBounds ); @@ -174,6 +175,7 @@ export function getVisibleElementBounds( element ) { } } } + console.log('- - - - - - - -'); /* * Take into account the outer horizontal limits of the container in which diff --git a/packages/components/src/popover/index.tsx b/packages/components/src/popover/index.tsx index 3005f13c95..390385091d 100644 --- a/packages/components/src/popover/index.tsx +++ b/packages/components/src/popover/index.tsx @@ -290,7 +290,7 @@ const UnforwardedPopover = ( whileElementsMounted: ( referenceParam, floatingParam, updateParam ) => autoUpdate( referenceParam, floatingParam, updateParam, { layoutShift: false, - animationFrame: true, + animationFrame: false, } ), } ); ```
  1. On trunk apply the above diff
  2. Open a post in the editor
  3. Paste and execute the code for the scrollable block in the dev tools console
  4. Insert the block
  5. Check the console and verify each iteration is using the same element and therefore there’s no need to keep getting its bounds.

Navigation block with child extending beyond the nav block's bounds

This will confirm that the original fix from https://github.com/WordPress/gutenberg/pull/62711#issuecomment-2413101197 still works.

  1. Switch to EmptyTheme and navigate to Appearance > Editor
  2. Click on the canvas and add a navigation block to the header
  3. Move the navigation block to the very first position in the block list to force the toolbar below the block
  4. Add a submenu to the navigation if it doesn't already have one
  5. Ensure that the block toolbar moves down to accomodate the submenu when it is opened i.e. the toolbar shouldn't overlap the navigation or submenu blocks
  6. Confirm the toolbar behaves appropriately when adding new submenu items or scrolling the overall page

Scrollable block toolbars

Follow the nice and detailed instructions on https://github.com/WordPress/gutenberg/issues/66112

TL;DR version

  1. Edit a post, open dev tools and paste in the snippet from the issue to create some test blocks that scroll
  2. Add the test blocks to a long post with several paragraphs
  3. Select each of the horizontal and vertical scrolling blocks and confirm their toolbar stays in the correct location
  4. Scroll down the page and ensure their toolbars disappear correctly as the block leaves the viewport

Block Popovers and Visualizers

  1. Edit a post and add blocks that have a block popover e.g. Cover block with its resizable popover
  2. Add some blocks that support spacing visualizers e.g. Group block with padding and margin support
  3. Confirm that the visualizers and popovers display appropriately (visualizers have some problems on trunk not matching the controls value immediately so ignore them)

Screenshots or screencast

Making sure the toolbar positioning works as expected on this branch

https://github.com/user-attachments/assets/2f78eea2-0345-48c0-88c4-6ce7e2fb72cd

github-actions[bot] commented 4 days ago

Size Change: -7 B (0%)

Total Size: 1.81 MB

Filename Size Change
build/block-editor/index.min.js 255 kB -7 B (0%)
ℹ️ View Unchanged | Filename | Size | | :--- | :---: | | `build-module/a11y/index.min.js` | 482 B | | `build-module/block-library/file/view.min.js` | 447 B | | `build-module/block-library/image/view.min.js` | 1.78 kB | | `build-module/block-library/navigation/view.min.js` | 1.16 kB | | `build-module/block-library/query/view.min.js` | 742 B | | `build-module/block-library/search/view.min.js` | 616 B | | `build-module/interactivity-router/index.min.js` | 3.03 kB | | `build-module/interactivity/debug.min.js` | 17.2 kB | | `build-module/interactivity/index.min.js` | 13.6 kB | | `build/a11y/index.min.js` | 952 B | | `build/annotations/index.min.js` | 2.26 kB | | `build/api-fetch/index.min.js` | 2.32 kB | | `build/autop/index.min.js` | 2.12 kB | | `build/blob/index.min.js` | 579 B | | `build/block-directory/index.min.js` | 7.26 kB | | `build/block-directory/style-rtl.css` | 1 kB | | `build/block-directory/style.css` | 1 kB | | `build/block-editor/content-rtl.css` | 4.46 kB | | `build/block-editor/content.css` | 4.45 kB | | `build/block-editor/default-editor-styles-rtl.css` | 394 B | | `build/block-editor/default-editor-styles.css` | 394 B | | `build/block-editor/style-rtl.css` | 15.3 kB | | `build/block-editor/style.css` | 15.3 kB | | `build/block-library/blocks/archives/editor-rtl.css` | 84 B | | `build/block-library/blocks/archives/editor.css` | 83 B | | `build/block-library/blocks/archives/style-rtl.css` | 90 B | | `build/block-library/blocks/archives/style.css` | 90 B | | `build/block-library/blocks/audio/editor-rtl.css` | 149 B | | `build/block-library/blocks/audio/editor.css` | 151 B | | `build/block-library/blocks/audio/style-rtl.css` | 132 B | | `build/block-library/blocks/audio/style.css` | 132 B | | `build/block-library/blocks/audio/theme-rtl.css` | 134 B | | `build/block-library/blocks/audio/theme.css` | 134 B | | `build/block-library/blocks/avatar/editor-rtl.css` | 115 B | | `build/block-library/blocks/avatar/editor.css` | 115 B | | `build/block-library/blocks/avatar/style-rtl.css` | 104 B | | `build/block-library/blocks/avatar/style.css` | 104 B | | `build/block-library/blocks/button/editor-rtl.css` | 265 B | | `build/block-library/blocks/button/editor.css` | 265 B | | `build/block-library/blocks/button/style-rtl.css` | 555 B | | `build/block-library/blocks/button/style.css` | 555 B | | `build/block-library/blocks/buttons/editor-rtl.css` | 291 B | | `build/block-library/blocks/buttons/editor.css` | 291 B | | `build/block-library/blocks/buttons/style-rtl.css` | 345 B | | `build/block-library/blocks/buttons/style.css` | 345 B | | `build/block-library/blocks/calendar/style-rtl.css` | 240 B | | `build/block-library/blocks/calendar/style.css` | 240 B | | `build/block-library/blocks/categories/editor-rtl.css` | 132 B | | `build/block-library/blocks/categories/editor.css` | 131 B | | `build/block-library/blocks/categories/style-rtl.css` | 152 B | | `build/block-library/blocks/categories/style.css` | 152 B | | `build/block-library/blocks/code/editor-rtl.css` | 53 B | | `build/block-library/blocks/code/editor.css` | 53 B | | `build/block-library/blocks/code/style-rtl.css` | 139 B | | `build/block-library/blocks/code/style.css` | 139 B | | `build/block-library/blocks/code/theme-rtl.css` | 122 B | | `build/block-library/blocks/code/theme.css` | 122 B | | `build/block-library/blocks/columns/editor-rtl.css` | 108 B | | `build/block-library/blocks/columns/editor.css` | 108 B | | `build/block-library/blocks/columns/style-rtl.css` | 420 B | | `build/block-library/blocks/columns/style.css` | 420 B | | `build/block-library/blocks/comment-author-avatar/editor-rtl.css` | 124 B | | `build/block-library/blocks/comment-author-avatar/editor.css` | 124 B | | `build/block-library/blocks/comment-author-name/style-rtl.css` | 72 B | | `build/block-library/blocks/comment-author-name/style.css` | 72 B | | `build/block-library/blocks/comment-content/style-rtl.css` | 120 B | | `build/block-library/blocks/comment-content/style.css` | 120 B | | `build/block-library/blocks/comment-date/style-rtl.css` | 65 B | | `build/block-library/blocks/comment-date/style.css` | 65 B | | `build/block-library/blocks/comment-edit-link/style-rtl.css` | 70 B | | `build/block-library/blocks/comment-edit-link/style.css` | 70 B | | `build/block-library/blocks/comment-reply-link/style-rtl.css` | 71 B | | `build/block-library/blocks/comment-reply-link/style.css` | 71 B | | `build/block-library/blocks/comment-template/style-rtl.css` | 200 B | | `build/block-library/blocks/comment-template/style.css` | 199 B | | `build/block-library/blocks/comments-pagination-numbers/editor-rtl.css` | 122 B | | `build/block-library/blocks/comments-pagination-numbers/editor.css` | 121 B | | `build/block-library/blocks/comments-pagination/editor-rtl.css` | 228 B | | `build/block-library/blocks/comments-pagination/editor.css` | 217 B | | `build/block-library/blocks/comments-pagination/style-rtl.css` | 234 B | | `build/block-library/blocks/comments-pagination/style.css` | 231 B | | `build/block-library/blocks/comments-title/editor-rtl.css` | 75 B | | `build/block-library/blocks/comments-title/editor.css` | 75 B | | `build/block-library/blocks/comments/editor-rtl.css` | 837 B | | `build/block-library/blocks/comments/editor.css` | 836 B | | `build/block-library/blocks/comments/style-rtl.css` | 637 B | | `build/block-library/blocks/comments/style.css` | 637 B | | `build/block-library/blocks/cover/editor-rtl.css` | 641 B | | `build/block-library/blocks/cover/editor.css` | 642 B | | `build/block-library/blocks/cover/style-rtl.css` | 1.64 kB | | `build/block-library/blocks/cover/style.css` | 1.63 kB | | `build/block-library/blocks/details/editor-rtl.css` | 65 B | | `build/block-library/blocks/details/editor.css` | 65 B | | `build/block-library/blocks/details/style-rtl.css` | 86 B | | `build/block-library/blocks/details/style.css` | 86 B | | `build/block-library/blocks/embed/editor-rtl.css` | 331 B | | `build/block-library/blocks/embed/editor.css` | 331 B | | `build/block-library/blocks/embed/style-rtl.css` | 419 B | | `build/block-library/blocks/embed/style.css` | 419 B | | `build/block-library/blocks/embed/theme-rtl.css` | 133 B | | `build/block-library/blocks/embed/theme.css` | 133 B | | `build/block-library/blocks/file/editor-rtl.css` | 326 B | | `build/block-library/blocks/file/editor.css` | 326 B | | `build/block-library/blocks/file/style-rtl.css` | 278 B | | `build/block-library/blocks/file/style.css` | 279 B | | `build/block-library/blocks/footnotes/style-rtl.css` | 198 B | | `build/block-library/blocks/footnotes/style.css` | 197 B | | `build/block-library/blocks/form-input/editor-rtl.css` | 229 B | | `build/block-library/blocks/form-input/editor.css` | 229 B | | `build/block-library/blocks/form-input/style-rtl.css` | 357 B | | `build/block-library/blocks/form-input/style.css` | 357 B | | `build/block-library/blocks/form-submission-notification/editor-rtl.css` | 344 B | | `build/block-library/blocks/form-submission-notification/editor.css` | 341 B | | `build/block-library/blocks/form-submit-button/style-rtl.css` | 69 B | | `build/block-library/blocks/form-submit-button/style.css` | 69 B | | `build/block-library/blocks/form/view.min.js` | 470 B | | `build/block-library/blocks/freeform/editor-rtl.css` | 2.6 kB | | `build/block-library/blocks/freeform/editor.css` | 2.6 kB | | `build/block-library/blocks/gallery/editor-rtl.css` | 946 B | | `build/block-library/blocks/gallery/editor.css` | 951 B | | `build/block-library/blocks/gallery/style-rtl.css` | 1.83 kB | | `build/block-library/blocks/gallery/style.css` | 1.82 kB | | `build/block-library/blocks/gallery/theme-rtl.css` | 108 B | | `build/block-library/blocks/gallery/theme.css` | 108 B | | `build/block-library/blocks/group/editor-rtl.css` | 409 B | | `build/block-library/blocks/group/editor.css` | 409 B | | `build/block-library/blocks/group/style-rtl.css` | 103 B | | `build/block-library/blocks/group/style.css` | 103 B | | `build/block-library/blocks/group/theme-rtl.css` | 79 B | | `build/block-library/blocks/group/theme.css` | 79 B | | `build/block-library/blocks/heading/style-rtl.css` | 188 B | | `build/block-library/blocks/heading/style.css` | 188 B | | `build/block-library/blocks/html/editor-rtl.css` | 346 B | | `build/block-library/blocks/html/editor.css` | 347 B | | `build/block-library/blocks/image/editor-rtl.css` | 785 B | | `build/block-library/blocks/image/editor.css` | 787 B | | `build/block-library/blocks/image/style-rtl.css` | 1.61 kB | | `build/block-library/blocks/image/style.css` | 1.6 kB | | `build/block-library/blocks/image/theme-rtl.css` | 137 B | | `build/block-library/blocks/image/theme.css` | 137 B | | `build/block-library/blocks/latest-comments/style-rtl.css` | 355 B | | `build/block-library/blocks/latest-comments/style.css` | 354 B | | `build/block-library/blocks/latest-posts/editor-rtl.css` | 179 B | | `build/block-library/blocks/latest-posts/editor.css` | 179 B | | `build/block-library/blocks/latest-posts/style-rtl.css` | 509 B | | `build/block-library/blocks/latest-posts/style.css` | 510 B | | `build/block-library/blocks/list/style-rtl.css` | 107 B | | `build/block-library/blocks/list/style.css` | 107 B | | `build/block-library/blocks/loginout/style-rtl.css` | 61 B | | `build/block-library/blocks/loginout/style.css` | 61 B | | `build/block-library/blocks/media-text/editor-rtl.css` | 321 B | | `build/block-library/blocks/media-text/editor.css` | 320 B | | `build/block-library/blocks/media-text/style-rtl.css` | 558 B | | `build/block-library/blocks/media-text/style.css` | 556 B | | `build/block-library/blocks/more/editor-rtl.css` | 427 B | | `build/block-library/blocks/more/editor.css` | 427 B | | `build/block-library/blocks/navigation-link/editor-rtl.css` | 644 B | | `build/block-library/blocks/navigation-link/editor.css` | 645 B | | `build/block-library/blocks/navigation-link/style-rtl.css` | 192 B | | `build/block-library/blocks/navigation-link/style.css` | 191 B | | `build/block-library/blocks/navigation-submenu/editor-rtl.css` | 295 B | | `build/block-library/blocks/navigation-submenu/editor.css` | 294 B | | `build/block-library/blocks/navigation/editor-rtl.css` | 2.2 kB | | `build/block-library/blocks/navigation/editor.css` | 2.2 kB | | `build/block-library/blocks/navigation/style-rtl.css` | 2.25 kB | | `build/block-library/blocks/navigation/style.css` | 2.23 kB | | `build/block-library/blocks/nextpage/editor-rtl.css` | 392 B | | `build/block-library/blocks/nextpage/editor.css` | 392 B | | `build/block-library/blocks/page-list/editor-rtl.css` | 378 B | | `build/block-library/blocks/page-list/editor.css` | 378 B | | `build/block-library/blocks/page-list/style-rtl.css` | 175 B | | `build/block-library/blocks/page-list/style.css` | 175 B | | `build/block-library/blocks/paragraph/editor-rtl.css` | 236 B | | `build/block-library/blocks/paragraph/editor.css` | 236 B | | `build/block-library/blocks/paragraph/style-rtl.css` | 341 B | | `build/block-library/blocks/paragraph/style.css` | 340 B | | `build/block-library/blocks/post-author-biography/style-rtl.css` | 74 B | | `build/block-library/blocks/post-author-biography/style.css` | 74 B | | `build/block-library/blocks/post-author-name/style-rtl.css` | 69 B | | `build/block-library/blocks/post-author-name/style.css` | 69 B | | `build/block-library/blocks/post-author/editor-rtl.css` | 107 B | | `build/block-library/blocks/post-author/editor.css` | 107 B | | `build/block-library/blocks/post-author/style-rtl.css` | 188 B | | `build/block-library/blocks/post-author/style.css` | 189 B | | `build/block-library/blocks/post-comments-form/editor-rtl.css` | 96 B | | `build/block-library/blocks/post-comments-form/editor.css` | 96 B | | `build/block-library/blocks/post-comments-form/style-rtl.css` | 527 B | | `build/block-library/blocks/post-comments-form/style.css` | 528 B | | `build/block-library/blocks/post-content/style-rtl.css` | 61 B | | `build/block-library/blocks/post-content/style.css` | 61 B | | `build/block-library/blocks/post-date/style-rtl.css` | 62 B | | `build/block-library/blocks/post-date/style.css` | 62 B | | `build/block-library/blocks/post-excerpt/editor-rtl.css` | 71 B | | `build/block-library/blocks/post-excerpt/editor.css` | 71 B | | `build/block-library/blocks/post-excerpt/style-rtl.css` | 155 B | | `build/block-library/blocks/post-excerpt/style.css` | 155 B | | `build/block-library/blocks/post-featured-image/editor-rtl.css` | 729 B | | `build/block-library/blocks/post-featured-image/editor.css` | 726 B | | `build/block-library/blocks/post-featured-image/style-rtl.css` | 347 B | | `build/block-library/blocks/post-featured-image/style.css` | 347 B | | `build/block-library/blocks/post-navigation-link/style-rtl.css` | 215 B | | `build/block-library/blocks/post-navigation-link/style.css` | 214 B | | `build/block-library/blocks/post-template/editor-rtl.css` | 99 B | | `build/block-library/blocks/post-template/editor.css` | 98 B | | `build/block-library/blocks/post-template/style-rtl.css` | 399 B | | `build/block-library/blocks/post-template/style.css` | 398 B | | `build/block-library/blocks/post-terms/style-rtl.css` | 96 B | | `build/block-library/blocks/post-terms/style.css` | 96 B | | `build/block-library/blocks/post-time-to-read/style-rtl.css` | 70 B | | `build/block-library/blocks/post-time-to-read/style.css` | 70 B | | `build/block-library/blocks/post-title/style-rtl.css` | 162 B | | `build/block-library/blocks/post-title/style.css` | 162 B | | `build/block-library/blocks/preformatted/style-rtl.css` | 125 B | | `build/block-library/blocks/preformatted/style.css` | 125 B | | `build/block-library/blocks/pullquote/editor-rtl.css` | 134 B | | `build/block-library/blocks/pullquote/editor.css` | 134 B | | `build/block-library/blocks/pullquote/style-rtl.css` | 342 B | | `build/block-library/blocks/pullquote/style.css` | 342 B | | `build/block-library/blocks/pullquote/theme-rtl.css` | 167 B | | `build/block-library/blocks/pullquote/theme.css` | 167 B | | `build/block-library/blocks/query-pagination-numbers/editor-rtl.css` | 121 B | | `build/block-library/blocks/query-pagination-numbers/editor.css` | 118 B | | `build/block-library/blocks/query-pagination/editor-rtl.css` | 154 B | | `build/block-library/blocks/query-pagination/editor.css` | 154 B | | `build/block-library/blocks/query-pagination/style-rtl.css` | 237 B | | `build/block-library/blocks/query-pagination/style.css` | 237 B | | `build/block-library/blocks/query-title/style-rtl.css` | 64 B | | `build/block-library/blocks/query-title/style.css` | 64 B | | `build/block-library/blocks/query/editor-rtl.css` | 452 B | | `build/block-library/blocks/query/editor.css` | 451 B | | `build/block-library/blocks/quote/style-rtl.css` | 238 B | | `build/block-library/blocks/quote/style.css` | 238 B | | `build/block-library/blocks/quote/theme-rtl.css` | 233 B | | `build/block-library/blocks/quote/theme.css` | 236 B | | `build/block-library/blocks/read-more/style-rtl.css` | 138 B | | `build/block-library/blocks/read-more/style.css` | 138 B | | `build/block-library/blocks/rss/editor-rtl.css` | 101 B | | `build/block-library/blocks/rss/editor.css` | 101 B | | `build/block-library/blocks/rss/style-rtl.css` | 288 B | | `build/block-library/blocks/rss/style.css` | 287 B | | `build/block-library/blocks/search/editor-rtl.css` | 199 B | | `build/block-library/blocks/search/editor.css` | 199 B | | `build/block-library/blocks/search/style-rtl.css` | 672 B | | `build/block-library/blocks/search/style.css` | 671 B | | `build/block-library/blocks/search/theme-rtl.css` | 113 B | | `build/block-library/blocks/search/theme.css` | 113 B | | `build/block-library/blocks/separator/editor-rtl.css` | 100 B | | `build/block-library/blocks/separator/editor.css` | 100 B | | `build/block-library/blocks/separator/style-rtl.css` | 248 B | | `build/block-library/blocks/separator/style.css` | 248 B | | `build/block-library/blocks/separator/theme-rtl.css` | 195 B | | `build/block-library/blocks/separator/theme.css` | 195 B | | `build/block-library/blocks/shortcode/editor-rtl.css` | 286 B | | `build/block-library/blocks/shortcode/editor.css` | 286 B | | `build/block-library/blocks/site-logo/editor-rtl.css` | 806 B | | `build/block-library/blocks/site-logo/editor.css` | 803 B | | `build/block-library/blocks/site-logo/style-rtl.css` | 218 B | | `build/block-library/blocks/site-logo/style.css` | 218 B | | `build/block-library/blocks/site-tagline/editor-rtl.css` | 87 B | | `build/block-library/blocks/site-tagline/editor.css` | 87 B | | `build/block-library/blocks/site-tagline/style-rtl.css` | 65 B | | `build/block-library/blocks/site-tagline/style.css` | 65 B | | `build/block-library/blocks/site-title/editor-rtl.css` | 85 B | | `build/block-library/blocks/site-title/editor.css` | 85 B | | `build/block-library/blocks/site-title/style-rtl.css` | 143 B | | `build/block-library/blocks/site-title/style.css` | 143 B | | `build/block-library/blocks/social-link/editor-rtl.css` | 338 B | | `build/block-library/blocks/social-link/editor.css` | 338 B | | `build/block-library/blocks/social-links/editor-rtl.css` | 729 B | | `build/block-library/blocks/social-links/editor.css` | 727 B | | `build/block-library/blocks/social-links/style-rtl.css` | 1.51 kB | | `build/block-library/blocks/social-links/style.css` | 1.5 kB | | `build/block-library/blocks/spacer/editor-rtl.css` | 346 B | | `build/block-library/blocks/spacer/editor.css` | 346 B | | `build/block-library/blocks/spacer/style-rtl.css` | 48 B | | `build/block-library/blocks/spacer/style.css` | 48 B | | `build/block-library/blocks/table-of-contents/style-rtl.css` | 83 B | | `build/block-library/blocks/table-of-contents/style.css` | 83 B | | `build/block-library/blocks/table/editor-rtl.css` | 394 B | | `build/block-library/blocks/table/editor.css` | 394 B | | `build/block-library/blocks/table/style-rtl.css` | 640 B | | `build/block-library/blocks/table/style.css` | 639 B | | `build/block-library/blocks/table/theme-rtl.css` | 152 B | | `build/block-library/blocks/table/theme.css` | 152 B | | `build/block-library/blocks/tag-cloud/editor-rtl.css` | 144 B | | `build/block-library/blocks/tag-cloud/editor.css` | 144 B | | `build/block-library/blocks/tag-cloud/style-rtl.css` | 266 B | | `build/block-library/blocks/tag-cloud/style.css` | 265 B | | `build/block-library/blocks/template-part/editor-rtl.css` | 368 B | | `build/block-library/blocks/template-part/editor.css` | 368 B | | `build/block-library/blocks/template-part/theme-rtl.css` | 113 B | | `build/block-library/blocks/template-part/theme.css` | 113 B | | `build/block-library/blocks/term-description/style-rtl.css` | 126 B | | `build/block-library/blocks/term-description/style.css` | 126 B | | `build/block-library/blocks/text-columns/editor-rtl.css` | 95 B | | `build/block-library/blocks/text-columns/editor.css` | 95 B | | `build/block-library/blocks/text-columns/style-rtl.css` | 165 B | | `build/block-library/blocks/text-columns/style.css` | 165 B | | `build/block-library/blocks/verse/style-rtl.css` | 98 B | | `build/block-library/blocks/verse/style.css` | 98 B | | `build/block-library/blocks/video/editor-rtl.css` | 396 B | | `build/block-library/blocks/video/editor.css` | 397 B | | `build/block-library/blocks/video/style-rtl.css` | 192 B | | `build/block-library/blocks/video/style.css` | 192 B | | `build/block-library/blocks/video/theme-rtl.css` | 134 B | | `build/block-library/blocks/video/theme.css` | 134 B | | `build/block-library/classic-rtl.css` | 179 B | | `build/block-library/classic.css` | 179 B | | `build/block-library/common-rtl.css` | 1.08 kB | | `build/block-library/common.css` | 1.08 kB | | `build/block-library/editor-elements-rtl.css` | 75 B | | `build/block-library/editor-elements.css` | 75 B | | `build/block-library/editor-rtl.css` | 11.7 kB | | `build/block-library/editor.css` | 11.7 kB | | `build/block-library/elements-rtl.css` | 54 B | | `build/block-library/elements.css` | 54 B | | `build/block-library/index.min.js` | 220 kB | | `build/block-library/reset-rtl.css` | 472 B | | `build/block-library/reset.css` | 472 B | | `build/block-library/style-rtl.css` | 14.9 kB | | `build/block-library/style.css` | 14.9 kB | | `build/block-library/theme-rtl.css` | 708 B | | `build/block-library/theme.css` | 712 B | | `build/block-serialization-default-parser/index.min.js` | 1.12 kB | | `build/block-serialization-spec-parser/index.min.js` | 2.87 kB | | `build/blocks/index.min.js` | 52.6 kB | | `build/commands/index.min.js` | 16.1 kB | | `build/commands/style-rtl.css` | 955 B | | `build/commands/style.css` | 952 B | | `build/components/index.min.js` | 227 kB | | `build/components/style-rtl.css` | 12.4 kB | | `build/components/style.css` | 12.4 kB | | `build/compose/index.min.js` | 12.7 kB | | `build/core-commands/index.min.js` | 3.11 kB | | `build/core-data/index.min.js` | 73.4 kB | | `build/customize-widgets/index.min.js` | 11 kB | | `build/customize-widgets/style-rtl.css` | 1.35 kB | | `build/customize-widgets/style.css` | 1.35 kB | | `build/data-controls/index.min.js` | 641 B | | `build/data/index.min.js` | 8.97 kB | | `build/date/index.min.js` | 18 kB | | `build/deprecated/index.min.js` | 458 B | | `build/dom-ready/index.min.js` | 325 B | | `build/dom/index.min.js` | 4.66 kB | | `build/edit-post/classic-rtl.css` | 578 B | | `build/edit-post/classic.css` | 580 B | | `build/edit-post/index.min.js` | 13.7 kB | | `build/edit-post/style-rtl.css` | 2.76 kB | | `build/edit-post/style.css` | 2.75 kB | | `build/edit-site/index.min.js` | 220 kB | | `build/edit-site/posts-rtl.css` | 7.32 kB | | `build/edit-site/posts.css` | 7.32 kB | | `build/edit-site/style-rtl.css` | 13 kB | | `build/edit-site/style.css` | 13 kB | | `build/edit-widgets/index.min.js` | 17.7 kB | | `build/edit-widgets/style-rtl.css` | 4.1 kB | | `build/edit-widgets/style.css` | 4.09 kB | | `build/editor/index.min.js` | 106 kB | | `build/editor/style-rtl.css` | 9.53 kB | | `build/editor/style.css` | 9.53 kB | | `build/element/index.min.js` | 4.82 kB | | `build/escape-html/index.min.js` | 537 B | | `build/format-library/index.min.js` | 8.05 kB | | `build/format-library/style-rtl.css` | 476 B | | `build/format-library/style.css` | 476 B | | `build/hooks/index.min.js` | 1.65 kB | | `build/html-entities/index.min.js` | 445 B | | `build/i18n/index.min.js` | 3.58 kB | | `build/is-shallow-equal/index.min.js` | 526 B | | `build/keyboard-shortcuts/index.min.js` | 1.31 kB | | `build/keycodes/index.min.js` | 1.46 kB | | `build/list-reusable-blocks/index.min.js` | 2.13 kB | | `build/list-reusable-blocks/style-rtl.css` | 852 B | | `build/list-reusable-blocks/style.css` | 852 B | | `build/media-utils/index.min.js` | 3.2 kB | | `build/notices/index.min.js` | 946 B | | `build/nux/index.min.js` | 1.62 kB | | `build/nux/style-rtl.css` | 749 B | | `build/nux/style.css` | 745 B | | `build/patterns/index.min.js` | 7.35 kB | | `build/patterns/style-rtl.css` | 687 B | | `build/patterns/style.css` | 685 B | | `build/plugins/index.min.js` | 1.86 kB | | `build/preferences-persistence/index.min.js` | 2.06 kB | | `build/preferences/index.min.js` | 2.9 kB | | `build/preferences/style-rtl.css` | 554 B | | `build/preferences/style.css` | 554 B | | `build/primitives/index.min.js` | 829 B | | `build/priority-queue/index.min.js` | 1.54 kB | | `build/private-apis/index.min.js` | 960 B | | `build/react-i18n/index.min.js` | 630 B | | `build/react-refresh-entry/index.min.js` | 9.47 kB | | `build/react-refresh-runtime/index.min.js` | 6.76 kB | | `build/redux-routine/index.min.js` | 2.7 kB | | `build/reusable-blocks/index.min.js` | 2.55 kB | | `build/reusable-blocks/style-rtl.css` | 256 B | | `build/reusable-blocks/style.css` | 256 B | | `build/rich-text/index.min.js` | 10.1 kB | | `build/router/index.min.js` | 2.11 kB | | `build/server-side-render/index.min.js` | 1.94 kB | | `build/shortcode/index.min.js` | 1.4 kB | | `build/style-engine/index.min.js` | 2.04 kB | | `build/token-list/index.min.js` | 581 B | | `build/url/index.min.js` | 3.9 kB | | `build/vendors/react-dom.min.js` | 41.7 kB | | `build/vendors/react-jsx-runtime.min.js` | 556 B | | `build/vendors/react.min.js` | 4.02 kB | | `build/viewport/index.min.js` | 965 B | | `build/vips/index.min.js` | 36.2 kB | | `build/warning/index.min.js` | 250 B | | `build/widgets/index.min.js` | 7.16 kB | | `build/widgets/style-rtl.css` | 1.16 kB | | `build/widgets/style.css` | 1.16 kB | | `build/wordcount/index.min.js` | 1.03 kB |

compressed-size-action

github-actions[bot] commented 4 days ago

Flaky tests detected in 5edd745e6e824d80d5a36ee618599314d82a5ea5. 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/11566904008 📝 Reported issues:

ramonjd commented 2 days ago

but is there anything else we should be doing?

Do you mean whether there are alternatives to this PR?

stokesman commented 2 days ago

I’m pretty confident this would be okay to land. I’d kept it drafted mostly because I didn’t complete the testing instructions.

I was also interested in testing with Aki’s cool plugin as I figured it’d be a good case where a performance difference could be significant. I just now got around to trying that but only got as far as noticing that the toolbar still shifts with the scrolling 😵‍💫. I then switched to trunk and saw the same thing:

https://github.com/user-attachments/assets/c93f692a-4094-42f0-bf17-82fe3f2af597

So this PR still appears okay but it seems like the detection of elements that can be skipped is lacking somehow.

github-actions[bot] commented 2 days ago

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: stokesman <presstoke@git.wordpress.org>
Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>

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

t-hamano commented 2 days ago

Thanks for the PR!

I was also interested in testing with Aki’s cool plugin as I figured it’d be a good case where a performance difference could be significant. I just now got around to trying that but only got as far as noticing that the toolbar still shifts with the scrolling 😵‍💫

Yes, I reported issue #66112 because I was testing my plugin with WP 6.7 😅

I was trying to figure out why my plugin couldn’t fix the toolbar positioning issue, and I found that it occurred when an element was inside a scrollable element.

Below is the code to reproduce the issue:

Details ```javascript wp.blocks.registerBlockType( 'test/horizontally-scrollable', { apiVersion: 3, title: 'Horizontally scrollable block', edit: () => { return wp.element.createElement( 'div', wp.blockEditor.useBlockProps( { style: { overflowX: 'scroll', background: 'lightgray', }, } ), wp.element.createElement( 'div', { style: { width: '2000px', height: '100px', }, }, wp.element.createElement( 'button', {}, 'Button inside scrollable element' ) ) ); }, } ); wp.blocks.registerBlockType( 'test/vertically-scrollable', { apiVersion: 3, title: 'Vertically scrollable block', edit: () => { return wp.element.createElement( 'div', wp.blockEditor.useBlockProps( { style: { overflowY: 'scroll', background: 'lightgray', height: '200px', }, } ), wp.element.createElement( 'div', { style: { height: '1000px', }, }, wp.element.createElement( 'button', {}, 'Button inside scrollable element' ) ) ); }, } ); ```

The video below reproduces the issue, and shows that if I hide the descendants of the scrollable element, the block toolbar works correctly:

https://github.com/user-attachments/assets/35f30779-572b-4bde-b51a-13b0647bd260

ramonjd commented 1 day ago

If @t-hamano is happy with this PR, then so am I 😄

Thank you!

stokesman commented 19 hours ago

However, as discovered in this comment, I still think it's not ideal with regard to the block toolbar position

Right, it seems #66188 fixed the scrollable issue for reduced test cases but for some reason not on your plugin.


Thanks for reviewing folks ❤️. We might as well get this in.