Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix resizing items to top and left with GridItemResizer #60986

Merged
merged 13 commits into from
May 10, 2024

Conversation

tellthemachines
Copy link
Contributor

@tellthemachines tellthemachines commented Apr 23, 2024

What?

Part of #57478.

Updates the GridItemResizer to allow resizing by dragging the block to the top and left. Because the resizing doesn't position the block on a specific column/row, most often resizing to the top or left will result in the block growing to the bottom or right, as it keeps its auto-placement in the grid.

I'm not sure we should meddle with auto-placement in auto mode, but in manual mode there's scope to possibly add a column/row start value to a resized block so it sticks to the area the resizer has been dragged to. I think that given the ongoing work around positioning in manual mode (see #61025) this PR could be merged as it stands (pending review of course) and placement worked on as a follow-up.

Feedback on all this is very welcome!

Testing Instructions

  1. Enable grid experiment;
  2. Add a grid with some children to a post or template and play around with resizing the children with the drag handles.
  3. Try this in manual and auto modes.

Testing Instructions for Keyboard

Screenshots or screencast

resizing-left.mov

@tellthemachines tellthemachines added [Type] Enhancement A suggestion for improvement. [Feature] Layout Layout block support, its UI controls, and style output. labels Apr 23, 2024
@tellthemachines tellthemachines self-assigned this Apr 23, 2024
Copy link

github-actions bot commented Apr 23, 2024

Size Change: +2.52 kB (+0.14%)

Total Size: 1.74 MB

Filename Size Change
build/block-editor/content-rtl.css 4.57 kB +70 B (+1.56%)
build/block-editor/content.css 4.57 kB +71 B (+1.58%)
build/block-editor/index.min.js 259 kB +1.07 kB (+0.42%)
build/block-editor/style-rtl.css 15.5 kB +9 B (+0.06%)
build/block-editor/style.css 15.5 kB +9 B (+0.06%)
build/block-library/blocks/post-template/style-rtl.css 397 B -12 B (-2.93%)
build/block-library/blocks/post-template/style.css 396 B -12 B (-2.94%)
build/block-library/style-rtl.css 14.8 kB -4 B (-0.03%)
build/block-library/style.css 14.8 kB -4 B (-0.03%)
build/blocks/index.min.js 51.7 kB +17 B (+0.03%)
build/components/index.min.js 220 kB +8 B (0%)
build/core-commands/index.min.js 2.81 kB +46 B (+1.66%)
build/edit-post/index.min.js 14.4 kB +4 B (+0.03%)
build/edit-site/index.min.js 223 kB +779 B (+0.35%)
build/edit-site/style-rtl.css 12.9 kB +159 B (+1.25%)
build/edit-site/style.css 12.9 kB +157 B (+1.23%)
build/edit-widgets/index.min.js 17.5 kB -10 B (-0.06%)
build/edit-widgets/style-rtl.css 4.18 kB +17 B (+0.41%)
build/edit-widgets/style.css 4.18 kB +18 B (+0.43%)
build/editor/index.min.js 83.1 kB +94 B (+0.11%)
build/editor/style-rtl.css 8.27 kB +18 B (+0.22%)
build/editor/style.css 8.28 kB +18 B (+0.22%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 955 B
build/annotations/index.min.js 2.27 kB
build/api-fetch/index.min.js 2.32 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 578 B
build/block-directory/index.min.js 7.26 kB
build/block-directory/style-rtl.css 1.03 kB
build/block-directory/style.css 1.03 kB
build/block-editor/default-editor-styles-rtl.css 395 B
build/block-editor/default-editor-styles.css 395 B
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 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 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 133 B
build/block-library/blocks/audio/theme.css 133 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 277 B
build/block-library/blocks/block/editor.css 277 B
build/block-library/blocks/button/editor-rtl.css 415 B
build/block-library/blocks/button/editor.css 414 B
build/block-library/blocks/button/style-rtl.css 627 B
build/block-library/blocks/button/style.css 626 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 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 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 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 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 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 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 671 B
build/block-library/blocks/cover/editor.css 674 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 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 312 B
build/block-library/blocks/embed/editor.css 312 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 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 327 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 324 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 227 B
build/block-library/blocks/form-input/editor.css 227 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 340 B
build/block-library/blocks/form-submission-notification/editor.css 340 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 471 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/editor-rtl.css 956 B
build/block-library/blocks/gallery/editor.css 960 B
build/block-library/blocks/gallery/style-rtl.css 1.72 kB
build/block-library/blocks/gallery/style.css 1.72 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 394 B
build/block-library/blocks/group/editor.css 394 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 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 891 B
build/block-library/blocks/image/editor.css 891 B
build/block-library/blocks/image/style-rtl.css 1.6 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 133 B
build/block-library/blocks/image/theme.css 133 B
build/block-library/blocks/image/view.min.js 1.54 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 306 B
build/block-library/blocks/media-text/editor.css 305 B
build/block-library/blocks/media-text/style-rtl.css 505 B
build/block-library/blocks/media-text/style.css 503 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 668 B
build/block-library/blocks/navigation-link/editor.css 669 B
build/block-library/blocks/navigation-link/style-rtl.css 193 B
build/block-library/blocks/navigation-link/style.css 192 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.26 kB
build/block-library/blocks/navigation/style.css 2.25 kB
build/block-library/blocks/navigation/view.min.js 1.03 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 377 B
build/block-library/blocks/page-list/editor.css 377 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 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 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 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-content/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 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 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 734 B
build/block-library/blocks/post-featured-image/editor.css 732 B
build/block-library/blocks/post-featured-image/style-rtl.css 342 B
build/block-library/blocks/post-featured-image/style.css 342 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-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 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 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 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 354 B
build/block-library/blocks/pullquote/style.css 353 B
build/block-library/blocks/pullquote/theme-rtl.css 174 B
build/block-library/blocks/pullquote/theme.css 174 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/view.min.js 958 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 B
build/block-library/blocks/quote/theme-rtl.css 233 B
build/block-library/blocks/quote/theme.css 235 B
build/block-library/blocks/read-more/style-rtl.css 140 B
build/block-library/blocks/read-more/style.css 140 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 690 B
build/block-library/blocks/search/style.css 689 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 478 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 239 B
build/block-library/blocks/separator/style.css 239 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 323 B
build/block-library/blocks/shortcode/editor.css 323 B
build/block-library/blocks/site-logo/editor-rtl.css 805 B
build/block-library/blocks/site-logo/editor.css 805 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 324 B
build/block-library/blocks/social-link/editor.css 324 B
build/block-library/blocks/social-links/editor-rtl.css 676 B
build/block-library/blocks/social-links/editor.css 675 B
build/block-library/blocks/social-links/style-rtl.css 1.48 kB
build/block-library/blocks/social-links/style.css 1.48 kB
build/block-library/blocks/spacer/editor-rtl.css 350 B
build/block-library/blocks/spacer/editor.css 350 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/editor-rtl.css 395 B
build/block-library/blocks/table/editor.css 395 B
build/block-library/blocks/table/style-rtl.css 639 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/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 393 B
build/block-library/blocks/template-part/editor.css 393 B
build/block-library/blocks/template-part/theme-rtl.css 107 B
build/block-library/blocks/template-part/theme.css 107 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 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 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 185 B
build/block-library/blocks/video/style.css 185 B
build/block-library/blocks/video/theme-rtl.css 133 B
build/block-library/blocks/video/theme.css 133 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.3 kB
build/block-library/editor.css 12.2 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 218 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/theme-rtl.css 707 B
build/block-library/theme.css 713 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/commands/index.min.js 15.1 kB
build/commands/style-rtl.css 953 B
build/commands/style.css 951 B
build/components/style-rtl.css 11.9 kB
build/components/style.css 11.9 kB
build/compose/index.min.js 12.8 kB
build/core-data/index.min.js 72.5 kB
build/customize-widgets/index.min.js 10.9 kB
build/customize-widgets/style-rtl.css 1.36 kB
build/customize-widgets/style.css 1.36 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 9 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.65 kB
build/edit-post/classic-rtl.css 578 B
build/edit-post/classic.css 578 B
build/edit-post/style-rtl.css 2.68 kB
build/edit-post/style.css 2.68 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.07 kB
build/format-library/style-rtl.css 493 B
build/format-library/style.css 492 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.58 kB
build/interactivity/debug.min.js 16.2 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.67 kB
build/interactivity/index.min.js 13 kB
build/interactivity/navigation.min.js 1.17 kB
build/interactivity/query.min.js 740 B
build/interactivity/router.min.js 2.79 kB
build/interactivity/search.min.js 618 B
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.3 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.11 kB
build/list-reusable-blocks/style-rtl.css 851 B
build/list-reusable-blocks/style.css 851 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 948 B
build/nux/index.min.js 1.57 kB
build/nux/style-rtl.css 748 B
build/nux/style.css 744 B
build/patterns/index.min.js 6.45 kB
build/patterns/style-rtl.css 595 B
build/patterns/style.css 595 B
build/plugins/index.min.js 1.8 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.85 kB
build/preferences/style-rtl.css 710 B
build/preferences/style.css 712 B
build/primitives/index.min.js 809 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 1 kB
build/react-i18n/index.min.js 623 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.7 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 1.93 kB
build/server-side-render/index.min.js 1.96 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 2.02 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.74 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.7 kB
build/vendors/react.min.js 4.03 kB
build/viewport/index.min.js 957 B
build/warning/index.min.js 249 B
build/widgets/index.min.js 7.11 kB
build/widgets/style-rtl.css 1.17 kB
build/widgets/style.css 1.17 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

Copy link

github-actions bot commented Apr 29, 2024

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: tellthemachines <isabel_brison@git.wordpress.org>
Co-authored-by: noisysocks <noisysocks@git.wordpress.org>
Co-authored-by: jasmussen <joen@git.wordpress.org>

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

@noisysocks noisysocks mentioned this pull request Apr 30, 2024
37 tasks
@noisysocks noisysocks added the Needs Design Feedback Needs general design feedback. label Apr 30, 2024
@noisysocks
Copy link
Member

Hmm, tricky. Would be good to get some design input. @jasmussen: Is there anyone in particular I should ping for grid design work while @SaxonF is away? 😀

I am thinking it probably doesn't make sense to have resizing to the top and left unless the item can also be positioned manually.

@jasmussen
Copy link
Contributor

is there anyone in particular I should ping for grid design work

Saxon is hard to replace, since he was so close to this grid work. I'll give this a quick shot now, and I'm always happy to be pinged. But also in general, the easiest is to ping @WordPress/gutenberg-design, that'll ping a bunch of useful folks that can likely provide good input.

@jasmussen
Copy link
Contributor

jasmussen commented Apr 30, 2024

Taking this branch for a spin, first here's a quick GIF of trunk with the "grid interactivity" experiment enabled:

grid in trunk

Here there are only resize handles bottom and right. Here's a GIF of this branch, description to follow:
branch

Shown here, resize handles in all four corners on select. Resizing is essentially the canvas counterpart to the column-span and row-span that exists as inspector controls.

First off, this continues to be impressive and amazing work. Grid is a super powerful tool, and even if the spec itself comes with some quirks and oddities, this will ultimately be a great tool in the hands of designers, and for a broader audience it will enable fantastic patterns that are perhaps contentOnly locked, etc. So I'd love to see something land for 6.6, and that could be this resizing, if polished right.

I'm still seeing an issue where occasionally the resizing will "stick", almost as if the onmouseup event doesn't register and the resizablebox just sticks to me. This is commonly when I try to break things, e.g. resize the top left cell leftwards or upwards, which obviously doesn't work.

This is most easily reproducible by dragging downwards in a setup like this:
sticky

You'll see that as soon as I drag outside of the grid itself, the cursor changes, and now the box sticks.

In that vein, would it be sensible to hide the resize handles in the directions where resizing doesn't make sense? I.e. hide the left handle on the first column, hide the right handle on the last column, hide the top handle on the first row, hide the bottom handle on the last row?

In the case of resizing downwards on the last row, that actually creates new rows. The spec allows this, and you could certainly force this by typing in a large number in the inspector. But it's not clear that there's value in optimizing the canvas controls for this, I'd be tempted to add the guardrails here, and hide the bottom handle on the last row, if possible.

Probably not a blocker for launch, but something to note regardless — when resizing, it can be hard to see when you've dragged long enough for the box to "snap" and create a new colspan or rowspan. If there was some way to visualize this it would be great. Perhaps that's showing a semi-transparent version of the block with its new col/row-span until you release the cursor.

I mentioned in the intro that in general the spec allows for some weird configurations. We shouldn't jump through hoops to prevent this from being possible, but if some easy heuristic comes to mind, it might be good. For example, in this GIF, scaling item 8 in a 9-grid upwards makes it a 12 grid where item 8 spans row 3 and 4:

12 grid

Finally, I wonder if you had a chance to discuss in the past an alternative to the dashed outline indicating cells. They work as they are, but I wonder if we can do something neater than dashed lines. They can work, but there may be clearer options. A couple of quick tests:

Option 1 Option 2

Those both work because they use currentColor with opacity. There's a neat trick for that:

.cell {
	background-color: color-mix( in srgb, currentColor 10%, transparent );
	outline: 1px solid color-mix( in srgb, currentColor 20%, transparent );
	border-radius: 2px;
}

That essentially ensures contrast against any background color, as it would inherit the cell-indication color. Here's another colored example:

purple and yellow

But in summary:

  • Great work, would be good to land resize handles so we can graduate the grid.
  • Worth polishing the interactions, fix stickiness bugs, see if we can add guardrails at least to the canvas controls.
  • Explore a different cell-indication that relies on currentColor.
  • If possible, add some "snapping", in the form of a preview of the end-result of the drag operation.

Those are mainly thoughts, let me know if they're useful, and they definitely go beyond just this PR, which probably can land if we can decide on whether to always show all 4 handles, or only do that for inner cells.

@tellthemachines
Copy link
Contributor Author

Thanks for the thorough feedback and testing @jasmussen!

I'm still seeing an issue where occasionally the resizing will "stick", almost as if the onmouseup event doesn't register and the resizablebox just sticks to me. This is commonly when I try to break things, e.g. resize the top left cell leftwards or upwards, which obviously doesn't work.

This should be fixed now. The resizer shouldn't stick anymore, but I also experimented with removing the resizers from the edges. Let me know if that improves things!

I mentioned in the intro that in general the spec allows for some weird configurations. We shouldn't jump through hoops to prevent this from being possible, but if some easy heuristic comes to mind, it might be good. For example, in this GIF, scaling item 8 in a 9-grid upwards makes it a 12 grid where item 8 spans row 3 and 4

This is a tough one. Rearranging a grid to have less empty space in it would involve either deliberately positioning items with a column/row start, or adding something like grid-auto-flow: dense to the grid styles. My main reservation about both these options is the risk of having visual order not match markup order (which is why we're trying to rearrange blocks in the DOM when they're positioned in #61025).

Replacing the dashed cell indication with opacity should be easy to do. Rob's tried something like that out already in #61025, but given that one's extremely unlikely to ship in 6.6 at this point, perhaps we can move it out. Either way I think it's a good candidate for its own PR, to try and keep this one (relatively) simple for review 😅

@jasmussen
Copy link
Contributor

jasmussen commented May 6, 2024

Nice work. This is feeling very much better than trunk, and rapidly approaching something very solid. I would appreciate reviews from as many others as you can, especially folks familiar with grid, so we can approve this one.

The stickiness seems addressed, and the contextual resizing handles feels like it's working well, and as intended. All of that, captured in this GIF below:

grid test

I did encounter one curiosity in that GIF above, hard to describe, but I resized a row upwards, and the first couple of resizes didn't take, and the third one seemed to suddenly create a bunch more rows than I was expecting. It's not clear it was a bug or not. And snapping, though likely very tricky to get right, may help here.

@tellthemachines
Copy link
Contributor Author

I resized a row upwards, and the first couple of resizes didn't take, and the third one seemed to suddenly create a bunch more rows than I was expecting. It's not clear it was a bug or not.

I can reproduce this locally, pretty sure it's a bug 😅
Looking into it now.

@tellthemachines
Copy link
Contributor Author

tellthemachines commented May 7, 2024

I can reproduce this locally, pretty sure it's a bug

This is indeed a bug. The problem is that in certain grid configurations, increasing the number of rows on an element at the edges of the grid won't change its overall size. The GridVisualizer component is observing window resizing in order to know when to make changes to the grid, but because no block dimensions change, there's no way of observing an extra row getting added.

This could potentially be fixed by #61383, which by making sure auto rows always have a minimum height, will almost always trigger some change to the grid dimensions. I'm open to other ideas though!

bottom: 'flex-start',
};

const styles = {
Copy link
Member

Choose a reason for hiding this comment

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

What do you think about doing this with a CSS classname instead of a styles object? BlockPopoverCover could have a .block-popover-cover and .block-popover-cover__cover class and .block-editor-grid-item-resizer could have .is-right-justified and .is-top-aligned variations.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I mean we could do that but is there any advantage to it? Using styles is more consistent with how the component works, like with the width and height props.

Copy link
Member

@noisysocks noisysocks May 8, 2024

Choose a reason for hiding this comment

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

It lets us avoid adding the new additionalStyles prop. Not a big deal since BlockPopoverCover is not a public component but nice to keep API surface area low where possible. Up to you.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hmm yeah. I think the additional prop is a worthwhile trade-off for better legibility. Also the inline style means it's less likely some over-specific CSS will break this at any point 😄

* The mouseup event on the resize handle doesn't trigger if the mouse
* isn't directly above the handle, so we try to detect if it happens
* outside the grid and dispatch a mouseup event on the handle.
*/
Copy link
Member

Choose a reason for hiding this comment

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

Should this fix live in ResizableBox so that future users of the component don't run into the same issue?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hmm good question. This issue only surfaces when we set bounds on the box, so it's not really useful for all the instances. And this fix depends on knowing about a parent element, which ResizableBox doesn't. It doesn't even implement its own onResizeStart, just passes it directly to Resizable. So I'm not sure it's worth adding complexity to the component for what so far is a pretty niche use case. Maybe worth doing it if similar instances pop up in other places?

Copy link
Member

Choose a reason for hiding this comment

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

The mouseup handler could be added to ownerWindow or ownerDocument to avoid it having to know about a parent element.

But yeah, not sure if it's needed in ResizableBox, up to you.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hmmm not sure that'll work if we have the iframe in the way. The parent element I added the event listener to is in the actual editor canvas, but the component isn't.

@noisysocks
Copy link
Member

This could potentially be fixed by #61383, which by making sure auto rows always have a minimum height, will almost always trigger some change to the grid dimensions. I'm open to other ideas though!

Maybe GridVisualizer could observe rowCount and columnCount as well? It's a bit hacky...

I don't think we can use a MutationObserver to monitor for changes to the CSS since that's all done via style engine class outputs.

@tellthemachines
Copy link
Contributor Author

I don't think we can use a MutationObserver to monitor for changes to the CSS since that's all done via style engine class outputs.

Yeah looks like there's no observer that can be used in this context. I think we can leave this issue for a separate PR though, because it's an existing one (can be reproduced on trunk by changing the Row count for a top or bottom block in the sidebar control). If we do decide to ship #61383, it'll be solved, otherwise I'm sure we'll think of something.

@noisysocks
Copy link
Member

The handles don't show/hide when the position of the element changes because of a resize:

Kapture.2024-05-10.at.14.48.40.mp4

* outside the grid and dispatch a mouseup event on the handle.
*/
const rootElementParent = rootBlockElement.parentElement;
rootElementParent.addEventListener(
Copy link
Member

Choose a reason for hiding this comment

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

We need to remove this event listener somewhere to avoid memory leaks.

Copy link
Member

@noisysocks noisysocks left a comment

Choose a reason for hiding this comment

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

@tellthemachines tellthemachines merged commit 927ed76 into trunk May 10, 2024
63 checks passed
@tellthemachines tellthemachines deleted the fix/grid-item-resizing branch May 10, 2024 07:21
@github-actions github-actions bot added this to the Gutenberg 18.4 milestone May 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Layout Layout block support, its UI controls, and style output. Needs Design Feedback Needs general design feedback. [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants