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

Grid Visualizer - improve styles #64321

Open
wants to merge 25 commits into
base: trunk
Choose a base branch
from
Open

Conversation

talldan
Copy link
Contributor

@talldan talldan commented Aug 7, 2024

What?

See #64162

Brings the styles of the grid visualizer closer to those shown in the video on the issue.

There are a few bits this doesn't do from the video:

  • The grid isn't revealed on hover, I feel this is better to do in a separate PR
  • Dragging to select multiple grid cells is also out of scope for this PR
  • In auto mode, the video shows the next available cell being interactive like the manual mode cells. This should be possible in a follow up.

There are a few other subtleties that might worth trying in separate PRs:

  • There's quite a lot of visual noise if you have a block with the visualizer squares under it. We could try de-emphasizing the cells under the selected child block within a grid or not showing them at all. The video possibly shows something like this at 1:55, but hard to say for sure

How?

In order to achieve the visual styling shown in #64162, the grid visualizer needs to be rendered behind the grid block.

This PR attempts this using an inline popover.

It requires quite a bit of code-reshuffling as there are now two separate grid visualizers being rendered:

  • GridPopunder - renders a visualizer under the selected grid block. This visualizer is entirely visual, it renders some blue rectangles.
  • GridPopover - renders interactive elements over the selected block. This is responsible for the drop zones and appenders in the grid. It has to be over the selected block to receive mouse events.

Testing Instructions

  1. Add a grid block
  2. Switch between auto and manual and notice the cells are blue in manual mode to indicate interactivity
  3. In manual mode, try dragging a block into an empty cell and observe the highlight styles.
  4. Hover over an empty cell and observe the appender styles

Screenshots or screencast

Screenshot 2024-08-09 at 5 56 41 PM

@talldan talldan added [Block] Group Affects the Group Block [Type] Experimental Experimental feature or API. labels Aug 7, 2024
@talldan talldan self-assigned this Aug 7, 2024
@talldan talldan requested a review from noisysocks August 7, 2024 10:04
Copy link

github-actions bot commented Aug 7, 2024

Size Change: +1.45 kB (+0.08%)

Total Size: 1.77 MB

Filename Size Change
build/block-editor/index.min.js 256 kB +455 B (+0.18%)
build/block-editor/style-rtl.css 16.3 kB +60 B (+0.37%)
build/block-editor/style.css 16.3 kB +62 B (+0.38%)
build/block-library/blocks/latest-posts/editor-rtl.css 139 B -47 B (-25.27%) 🎉
build/block-library/blocks/latest-posts/editor.css 138 B -45 B (-24.59%) 🎉
build/block-library/blocks/search/editor-rtl.css 199 B +6 B (+3.11%)
build/block-library/blocks/search/editor.css 199 B +6 B (+3.11%)
build/block-library/blocks/tag-cloud/editor-rtl.css 144 B +81 B (+128.57%) 🆘
build/block-library/blocks/tag-cloud/editor.css 144 B +81 B (+128.57%) 🆘
build/block-library/editor-rtl.css 11.9 kB +3 B (+0.03%)
build/block-library/editor.css 11.9 kB +3 B (+0.03%)
build/block-library/index.min.js 217 kB +101 B (+0.05%)
build/block-library/style-rtl.css 14.7 kB +6 B (+0.04%)
build/block-library/style.css 14.7 kB +7 B (+0.05%)
build/components/index.min.js 223 kB -210 B (-0.09%)
build/edit-post/index.min.js 12.6 kB +27 B (+0.21%)
build/edit-site/index.min.js 217 kB +379 B (+0.18%)
build/edit-site/posts-rtl.css 7.41 kB +19 B (+0.26%)
build/edit-site/posts.css 7.41 kB +20 B (+0.27%)
build/edit-site/style-rtl.css 12.7 kB +16 B (+0.13%)
build/edit-site/style.css 12.7 kB +15 B (+0.12%)
build/editor/index.min.js 101 kB +275 B (+0.27%)
build/patterns/index.min.js 7.37 kB +1 B (+0.01%)
build/block-library/blocks/comment-date/style-rtl.css 65 B +65 B (new file) 🆕
build/block-library/blocks/comment-date/style.css 65 B +65 B (new file) 🆕
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 951 B
build/annotations/index.min.js 2.26 kB
build/api-fetch/index.min.js 2.31 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 579 B
build/block-directory/index.min.js 7.29 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/content-rtl.css 4.58 kB
build/block-editor/content.css 4.58 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 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 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 310 B
build/block-library/blocks/button/editor.css 310 B
build/block-library/blocks/button/style-rtl.css 538 B
build/block-library/blocks/button/style.css 538 B
build/block-library/blocks/buttons/editor-rtl.css 336 B
build/block-library/blocks/buttons/editor.css 336 B
build/block-library/blocks/buttons/style-rtl.css 328 B
build/block-library/blocks/buttons/style.css 328 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 121 B
build/block-library/blocks/code/style.css 121 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-content/style-rtl.css 90 B
build/block-library/blocks/comment-content/style.css 90 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 221 B
build/block-library/blocks/comments-pagination/editor.css 211 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 832 B
build/block-library/blocks/comments/editor.css 832 B
build/block-library/blocks/comments/style-rtl.css 632 B
build/block-library/blocks/comments/style.css 631 B
build/block-library/blocks/cover/editor-rtl.css 668 B
build/block-library/blocks/cover/editor.css 669 B
build/block-library/blocks/cover/style-rtl.css 1.62 kB
build/block-library/blocks/cover/style.css 1.6 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 314 B
build/block-library/blocks/embed/editor.css 314 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/file/view.min.js 324 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 342 B
build/block-library/blocks/form-input/style.css 342 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 955 B
build/block-library/blocks/gallery/editor.css 958 B
build/block-library/blocks/gallery/style-rtl.css 1.71 kB
build/block-library/blocks/gallery/style.css 1.71 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 344 B
build/block-library/blocks/group/editor.css 344 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 894 B
build/block-library/blocks/image/editor.css 892 B
build/block-library/blocks/image/style-rtl.css 1.59 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/image/view.min.js 1.65 kB
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/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 304 B
build/block-library/blocks/media-text/editor.css 303 B
build/block-library/blocks/media-text/style-rtl.css 516 B
build/block-library/blocks/media-text/style.css 515 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 663 B
build/block-library/blocks/navigation-link/editor.css 664 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.18 kB
build/block-library/blocks/navigation/editor.css 2.19 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/navigation/view.min.js 1.03 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/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 527 B
build/block-library/blocks/post-comments-form/style.css 528 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-content/style-rtl.css 79 B
build/block-library/blocks/post-content/style.css 79 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 341 B
build/block-library/blocks/post-featured-image/style.css 341 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 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 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 220 B
build/block-library/blocks/query-pagination/editor.css 208 B
build/block-library/blocks/query-pagination/style-rtl.css 287 B
build/block-library/blocks/query-pagination/style.css 283 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/query/view.min.js 958 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/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/search/view.min.js 475 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 123 B
build/block-library/blocks/site-title/editor.css 123 B
build/block-library/blocks/site-title/style-rtl.css 90 B
build/block-library/blocks/site-title/style.css 90 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 676 B
build/block-library/blocks/social-links/editor.css 675 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/style-rtl.css 266 B
build/block-library/blocks/tag-cloud/style.css 265 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 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 541 B
build/block-library/blocks/video/editor.css 542 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.1 kB
build/block-library/common.css 1.1 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
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.4 kB
build/commands/index.min.js 16.1 kB
build/commands/style-rtl.css 955 B
build/commands/style.css 952 B
build/components/style-rtl.css 12.1 kB
build/components/style.css 12.1 kB
build/compose/index.min.js 12.9 kB
build/core-commands/index.min.js 2.82 kB
build/core-data/index.min.js 73.1 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.98 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.65 kB
build/edit-post/classic-rtl.css 578 B
build/edit-post/classic.css 580 B
build/edit-post/style-rtl.css 2.31 kB
build/edit-post/style.css 2.31 kB
build/edit-widgets/index.min.js 17.7 kB
build/edit-widgets/style-rtl.css 4.2 kB
build/edit-widgets/style.css 4.2 kB
build/editor/style-rtl.css 9.36 kB
build/editor/style.css 9.35 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.09 kB
build/format-library/style-rtl.css 476 B
build/format-library/style.css 476 B
build/hooks/index.min.js 1.54 kB
build/html-entities/index.min.js 445 B
build/i18n/index.min.js 3.58 kB
build/interactivity/debug.min.js 16.3 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.78 kB
build/interactivity/index.min.js 13.2 kB
build/interactivity/navigation.min.js 1.16 kB
build/interactivity/query.min.js 742 B
build/interactivity/router.min.js 2.8 kB
build/interactivity/search.min.js 615 B
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.16 kB
build/list-reusable-blocks/style-rtl.css 846 B
build/list-reusable-blocks/style.css 846 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.3 kB
build/notices/index.min.js 946 B
build/nux/index.min.js 1.59 kB
build/nux/style-rtl.css 749 B
build/nux/style.css 745 B
build/patterns/style-rtl.css 687 B
build/patterns/style.css 685 B
build/plugins/index.min.js 1.81 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 1.01 kB
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.69 kB
build/reusable-blocks/index.min.js 2.54 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.96 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.03 kB
build/token-list/index.min.js 581 B
build/url/index.min.js 3.85 kB
build/vendors/react-dom.min.js 41.7 kB
build/vendors/react-jsx-runtime.min.js 560 B
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 965 B
build/warning/index.min.js 250 B
build/widgets/index.min.js 7.19 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

@talldan
Copy link
Contributor Author

talldan commented Aug 8, 2024

Block Movers and Drop Zones are now underneath the grid block so are not receiving mouse events. They probably need to be rendered over the grid block, so it might be worth trying a hybrid approach with some of this PR and some of what's in trunk. 🤔

I've pushed a few more commits that try this, and it works pretty well, it partially solves the issue with the cells inside the editor iframe not having access to component CSS, as now the most interactive parts of the grid visualizer are outside the canvas, and only the cells underneath the grid need some basic styles which might be as simple as inlines styles.

@noisysocks
Copy link
Member

This is cool. I'll take it for a spin.

  • It might be worth experimenting with shadow dom to prevent styles leaking into the canvas, and then perhaps it'll possible to add stylesheets within that container.

Do you think it's still worth doing this? Or are the styles minimal enough now that it doesn't matter?

It's a problem we run into semi frequently. Might be fun to build an <Isolated> component that puts its children into shadow DOM or something along those lines.

@noisysocks
Copy link
Member

noisysocks commented Aug 9, 2024

This is really cool—you're a genius.

Can we hide the drop zone / inserter on occupied cells when you're not dragging so that you don't see stripes on top of blocks?

Screenshot 2024-08-09 at 12 37 18

@talldan
Copy link
Contributor Author

talldan commented Aug 9, 2024

Can we hide the drop zone / inserter on occupied cells when you're not dragging so that you don't see stripes on top of blocks?

I was wondering why some cells had a slightly different color. 😄

I've pushed a commit that does that, and also a bunch more styling updates to make it look more like the video in #64162 (comment). I'm mostly doing this by sight, but I think it's pretty close.

I'll work a bit more on the highlighted cell styles. Then I probably need to tidy up some before it's ready for review.

I'm surprised how quickly this has come together. That the popover component now properly supports being inline helps a lot.

Copy link

github-actions bot commented Aug 9, 2024

Flaky tests detected in 4620f5e.
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/10367423474
📝 Reported issues:

Comment on lines 71 to 113
useEffect( () => {
function onGlobalDrag() {
setIsDroppingAllowed( true );
}
function onGlobalDragEnd() {
setIsDroppingAllowed( false );
}
document.addEventListener( 'drag', onGlobalDrag );
document.addEventListener( 'dragend', onGlobalDragEnd );
return () => {
document.removeEventListener( 'drag', onGlobalDrag );
document.removeEventListener( 'dragend', onGlobalDragEnd );
};
}, [] );

return (
<BlockPopoverCover
className={ clsx( 'block-editor-grid-visualizer', {
'is-dropping-allowed': isDroppingAllowed,
} ) }
clientId={ gridClientId }
__unstablePopoverSlot="__unstable-block-tools-after"
>
<div
ref={ ref }
className="block-editor-grid-visualizer__grid"
style={ gridInfo.style }
>
{ isManualGrid ? (
<ManualGridVisualizer
gridClientId={ gridClientId }
gridInfo={ gridInfo }
/>
) : (
Array.from( { length: gridInfo.numItems }, ( _, i ) => (
<GridVisualizerCell
key={ i }
color={ gridInfo.currentColor }
/>
) )
) }
</div>
</BlockPopoverCover>
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This has all moved into GridPopover

* @param {string} props.gridClientId
* @param {Object} props.gridInfo
*/
const GridPopover = forwardRef( ( { gridClientId, gridInfo }, ref ) => {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

ManualGridVisualizer is now renamed to GridPopover, and it now encompasses all the interactive aspects of the grid visualizer. It renders it's own popover over the grid.


function GridVisualizerCell( { color, children, className } ) {
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 decided to get rid of GridVisualizerCell as it wasn't doing very much, especially in GridPopover where it's just a <div>.

In GridPopunder it's a <div> with a some styles, so I think it still doesn't need its own component.

* @param {Object} props.gridInfo
* @param {boolean} props.isManualGrid
*/
function GridPopunder( { gridClientId, gridInfo, isManualGrid } ) {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

GridPopunder (not sure if the name is too twee) now renders the blue cells in the background. It's pretty similar to the auto mode cells in trunk in terms of code.

Comment on lines -203 to -207
<GridVisualizer
clientId={ rootClientId }
contentRef={ setResizerBounds }
parentLayout={ parentLayout }
/>
Copy link
Contributor Author

Choose a reason for hiding this comment

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

In order to have the GridPopunder always render right before the grid block, I couldn't render GridVisualizer as it was before as part of the child block (when a child block is selected).

I suppose it is possible to still render GridPopover here though, but the downside would be having to calculate gridInfo twice. The upside is the GridResizerBoundsContext wouldn't be needed. 🤷

Copy link
Member

Choose a reason for hiding this comment

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

I like this approach regardless. Nice to have only one instance of GridVisualizer.

@@ -139,6 +139,7 @@ const UnforwardedPopover = (
shift = false,
inline = false,
variant,
contentStyle,
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Probably need to spin the popover changes out into a separate PR. Or look at alternative options for popover styles inside the canvas.

Copy link
Member

Choose a reason for hiding this comment

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

Could it be done in the style.scss? I suppose not because it's in the iframe.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yep, that's correct, it won't work because of the iframe. Two of the the options are to use inline styles or render a stylesheet.

Another would be to render the BlockPopoverCover inside <div> and use that div to reset the margin, but there'd still be the popover z-index to unset. Maybe though the components team would be more open to a noZIndex prop or something then though. I'll find out.

@talldan talldan marked this pull request as ready for review August 9, 2024 09:35
Copy link

github-actions bot commented Aug 9, 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: talldan <talldanwp@git.wordpress.org>
Co-authored-by: noisysocks <noisysocks@git.wordpress.org>

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

@talldan talldan changed the title Experiment: render grid visualizer behind grid block Grid Visualizer - improve styles Aug 9, 2024
@talldan talldan added [Type] Enhancement A suggestion for improvement. and removed [Type] Experimental Experimental feature or API. labels Aug 9, 2024
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.

Love this, it's a big improvement in UI and code quality.

/>
{ isManualGrid && (
<GridPopover
ref={ ref }
Copy link
Member

Choose a reason for hiding this comment

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

There's a bug here caused by ref only being passed/set when isManualGrid is true. It means that you're able to resize a grid item beyond the bounds of the grid block when it's in auto mode.

Kapture.2024-08-12.at.15.42.13.mp4

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Should be fixed in f73ca9f. The annoying aspect is that it means some parts of GridPopover always have to be rendered even when there's not much going on, but I think it's necessary. I tried to optimize it by moving the items into a separate component.

To properly finish #64162, the auto grid will also need a single appender in the next available cell, so something like this will be needed anyway.

Copy link
Member

Choose a reason for hiding this comment

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

To properly finish #64162, the auto grid will also need a single appender in the next available cell, so something like this will be needed anyway.

I think we can ignore that tbh. It's better imo to have it consistent across container blocks.

box-shadow: none;
background-color: rgba(var(--wp-admin-theme-color--rgb), 0.05);
border: 1px dashed;
border-radius: 2px;
Copy link
Member

Choose a reason for hiding this comment

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

I think we have a $border-radius var for this.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Oh yep, that was lazy. Now updated.


const addGridVisualizerToBlockEdit = createHigherOrderComponent(
( BlockEdit ) => ( props ) => {
// Use useState() instead of useRef() so that GridItemResizer updates when ref is set.
const [ resizerBounds, setResizerBounds ] = useState();
Copy link
Member

Choose a reason for hiding this comment

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

Maybe move this useState and the Provider to a new component so that we're not calling useState on every single block regardless of whether it has a grid layout. Probably doesn't make any difference to performance in practice but I think it's a nice habit to be really careful about what goes above the early return in a BlockEdit filter.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good point, I think it's also much tidier to move it into GridTools and have GridTools accept children. Done in 6139488

Comment on lines -203 to -207
<GridVisualizer
clientId={ rootClientId }
contentRef={ setResizerBounds }
parentLayout={ parentLayout }
/>
Copy link
Member

Choose a reason for hiding this comment

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

I like this approach regardless. Nice to have only one instance of GridVisualizer.

@@ -139,6 +139,7 @@ const UnforwardedPopover = (
shift = false,
inline = false,
variant,
contentStyle,
Copy link
Member

Choose a reason for hiding this comment

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

Could it be done in the style.scss? I suppose not because it's in the iframe.

return (
<BlockPopoverCover
__unstablePopoverSlot="__unstable-block-tools-after"
className={ clsx( 'block-editor-grid-visualizer', {
Copy link
Member

Choose a reason for hiding this comment

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

The class names in this file have come out of sync with the component names. It used to be that GridVisualizer rendered an element with className = 'block-editor-grid-visualizer' and so on. Should we update them?

Also, is it bad that both BlockPopover and BlockPopunder render an element with the same classname?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good point. I've pushed a commit that updates these. GridPopunder doesn't need classnames it relies on the inline css, so removing those solves the duplication. I changed the GridPopover classnames to block-editor-grid-visualizer-popover to match the components.

Also removed another unused classname.

It's not perfect, but I think good enough right now.

@talldan
Copy link
Contributor Author

talldan commented Aug 14, 2024

I've made a separate PR for the popover changes - Components: Allow style prop on Popover

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.

Nice work, this is great.

@noisysocks noisysocks added the [Feature] Layout Layout block support, its UI controls, and style output. label Aug 15, 2024
@talldan
Copy link
Contributor Author

talldan commented Aug 15, 2024

Unfortunately I've found a couple of bugs that may be difficult to solve.

Rendering the visualizer popover inline before the grid means layout rules can apply to it, like this one:

.is-layout-constrained > :first-child {
    margin-block-start: 0;
}

The problem is not so much that the layout rule applies to the visualizer - it can be overridden, more that it no longer applies to the grid block itself like its supposed to. It results in the layout being incorrect. The popover also only renders when the grid is selected, and that causes a layout shift as the css rule jumps from applying to the block to suddenly applying to the popover:

Kapture.2024-08-15.at.10.42.55.mp4

The second issue is that grid block's background can cover the visualizer popover.

Rendering the visualizer popover inside the Grid block is probably the next best option, though there's no easy way to do it using a filter from what I understand 🤔

@noisysocks
Copy link
Member

Rendering the visualizer popover inside the Grid block is probably the next best option, though there's no easy way to do it using a filter from what I understand 🤔

Can we modify the children prop that comes back from BlockEdit? Never tried. It's probably a bad idea 😛

@noisysocks
Copy link
Member

Or createPortal() into the element returned from useBlockElement. I have no shortage of bad ideas 😀

@talldan
Copy link
Contributor Author

talldan commented Aug 15, 2024

Or maybe render a slot in the selected grid block. It'd be implemented in the group block, but the slot/fill could be a private API from the block editor package. 🤔

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Group Affects the Group Block [Feature] Layout Layout block support, its UI controls, and style output. [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants