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

Update: Grid layout: Allow users to adjust grid density #63367

Conversation

jorgefilipecosta
Copy link
Member

Fixes: #60630
Part of: #63128

cc: @jameskoster

This PR adds a UI on the grid view to allow users to select a density.
The density depends on the viewport, and we kept that behavior if the viewport changes density can increase or decrease.

Screenshot

Screenshot 2024-07-10 at 16 34 01

Testing Instructions

I verified I was able to change the density of the grid on patterns, templates and pages.

@jorgefilipecosta jorgefilipecosta added [Type] Enhancement A suggestion for improvement. Needs Design Feedback Needs general design feedback. labels Jul 10, 2024
Copy link

github-actions bot commented Jul 10, 2024

Size Change: +704 B (+0.04%)

Total Size: 1.76 MB

Filename Size Change
build/compose/index.min.js 12.9 kB +14 B (+0.11%)
build/edit-site/index.min.js 212 kB +556 B (+0.26%)
build/edit-site/posts-rtl.css 6.78 kB +34 B (+0.5%)
build/edit-site/posts.css 6.79 kB +33 B (+0.49%)
build/edit-site/style-rtl.css 11.9 kB +34 B (+0.29%)
build/edit-site/style.css 11.9 kB +33 B (+0.28%)
ℹ️ 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-editor/index.min.js 254 kB
build/block-editor/style-rtl.css 16.2 kB
build/block-editor/style.css 16.2 kB
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 958 B
build/block-library/blocks/gallery/editor.css 962 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 402 B
build/block-library/blocks/group/editor.css 402 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 845 B
build/block-library/blocks/image/editor.css 843 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/editor-rtl.css 204 B
build/block-library/blocks/latest-posts/editor.css 204 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/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.2 kB
build/block-library/blocks/navigation/editor.css 2.21 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 522 B
build/block-library/blocks/post-comments-form/style.css 522 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 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 141 B
build/block-library/blocks/post-excerpt/style.css 141 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 221 B
build/block-library/blocks/quote/theme.css 225 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 183 B
build/block-library/blocks/search/editor.css 183 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-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 71 B
build/block-library/blocks/site-title/style.css 71 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/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 553 B
build/block-library/blocks/video/editor.css 554 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/editor-rtl.css 11.9 kB
build/block-library/editor.css 11.8 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 216 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.7 kB
build/block-library/style.css 14.6 kB
build/block-library/theme-rtl.css 702 B
build/block-library/theme.css 707 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.2 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 221 kB
build/components/style-rtl.css 12 kB
build/components/style.css 12 kB
build/core-commands/index.min.js 2.78 kB
build/core-data/index.min.js 72.8 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/index.min.js 12.6 kB
build/edit-post/style-rtl.css 2.34 kB
build/edit-post/style.css 2.33 kB
build/edit-widgets/index.min.js 17.6 kB
build/edit-widgets/style-rtl.css 4.2 kB
build/edit-widgets/style.css 4.2 kB
build/editor/index.min.js 98.8 kB
build/editor/style-rtl.css 9.09 kB
build/editor/style.css 9.09 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 506 B
build/format-library/style.css 505 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.5 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.78 kB
build/interactivity/index.min.js 13.4 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/index.min.js 7.36 kB
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 578 B
build/preferences/style.css 578 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

@jameskoster
Copy link
Contributor

Thanks @jorgefilipecosta, this is very cool :)

Could we apply __nextHasNoMarginBottom to the range?

Would it be feasible to define upper and lower bounds based on breakpoint? For example you'd never want to use a 5 column arrangement on mobile, so it doesn't make sense to offer that option.

  • Above 1920: 2 - 6
  • Between 1920 and 1440: 2 - 5
  • Between 1440 and 1080: 1 - 3
  • Between 1080 and 782: 1 - 2

the + / - icons feel a bit counter-intuitive to the behavior. I think I'd expect the + to increase the size of the grid item, similar to this UI in MacOS Photos:

Screenshot 2024-07-11 at 14 23 29

With that said, I wonder if we should flip things around. Instead of 'Grid density' it could be 'Item size'. IE 'Decrease item size' and 'Increase item size'. As the range value increase, the number of columns decreases. Hope that makes sense 🤞

Copy link

github-actions bot commented Jul 11, 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: jorgefilipecosta <jorgefilipecosta@git.wordpress.org>
Co-authored-by: jameskoster <jameskoster@git.wordpress.org>
Co-authored-by: stokesman <presstoke@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: colorful-tones <colorful-tones@git.wordpress.org>

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

@jorgefilipecosta jorgefilipecosta force-pushed the update/Data-views-grid-layout-Allow-users-to-adjust-grid-density-and-consumers-to-set-default-density branch from 602d40a to 1b3bbbc Compare July 16, 2024 11:56
@jorgefilipecosta
Copy link
Member Author

Hi @jameskoster, I updated the code to follow the logic you suggested. Let me know if the behavior is what you had in mind.

@jorgefilipecosta jorgefilipecosta force-pushed the update/Data-views-grid-layout-Allow-users-to-adjust-grid-density-and-consumers-to-set-default-density branch from 27042f4 to cbc9711 Compare July 16, 2024 15:44
@jameskoster
Copy link
Contributor

Thanks Jorge, this is getting close and working pretty well.

Would it be possible to update the display on container resize? One small issue currently is that; if you set a large number of columns on a wide screen, then scale down, the large number of columns persists (and doesn't work very well) on the smaller screen. The control also behaves a bit strangely. Video demo:

scaling.mp4

Ideally the display and control update in line with the container size.

Somewhat related: is it possible to set a default for each scale? E.g. above 1920 you can choose between 2 and 6 columns, but the default is 4?

@jameskoster
Copy link
Contributor

Another tiny point, the values that appear as tooltips on the range don't really communicate anything useful, we can probably hide them.

Screenshot 2024-07-17 at 10 50 18

@jorgefilipecosta jorgefilipecosta force-pushed the update/Data-views-grid-layout-Allow-users-to-adjust-grid-density-and-consumers-to-set-default-density branch from cbc9711 to 4f02361 Compare July 17, 2024 12:24
@jorgefilipecosta
Copy link
Member Author

jorgefilipecosta commented Jul 17, 2024

Hi @jameskoster, thank you for the review and suggesting enhancements, the suggestions were applied.

Copy link

github-actions bot commented Jul 17, 2024

Flaky tests detected in be85633.
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/10008365009
📝 Reported issues:

@jameskoster
Copy link
Contributor

Hey @jorgefilipecosta, I pushed a small update to the config. One issue is that the default value doesn't seem to apply at the xhuge breakpoint, which results in this broken interaction:

columns.mp4

One other request if possible: if you set a non-default value, could that value persist as you resize the screen (assuming the value is compatible with the associated breakpoint)? For example if I set 3 columns at the xhuge breakpoint, the layout would remain at 3 columns as I resize down until the large breakpoint (which doesn't support 3 columns). And vice versa, if I set 2 columns on mobile, the layout should stay in a 2 column arrangement until the xhuge breakpoint. If this adds too much complexity to the PR it's probably fine to explore separately.

@stokesman
Copy link
Contributor

I have an idea that could help provide visual indication of what’s happening with available sizes/layout for different viewport sizes. That is to borrow the styling from SpacingSizesControl.
image

Unfortunately, the styles would have to be duplicated as they’re not inherent to the mark styling of RangeControl. This could also be tried separately of course. Just a thought.

@jorgefilipecosta jorgefilipecosta force-pushed the update/Data-views-grid-layout-Allow-users-to-adjust-grid-density-and-consumers-to-set-default-density branch from 3c75796 to 02b78bc Compare July 19, 2024 11:43
@jorgefilipecosta
Copy link
Member Author

jorgefilipecosta commented Jul 19, 2024

e: if you set a non-default value, could that value persist as you resize the screen (assuming the value is compatible with the associated breakpoint)? For example if I set 3 columns at the xhuge breakpoint, the layout would remain at 3 columns as I resize down until the large breakpoint (which doesn't support 3 columns). And vice versa, if I set 2 columns on mobile, the layout should stay in a 2 column arrangement

Hi @jameskoster, your suggestions were implemented, let me know if this looks good.

@jorgefilipecosta jorgefilipecosta force-pushed the update/Data-views-grid-layout-Allow-users-to-adjust-grid-density-and-consumers-to-set-default-density branch from 02b78bc to be85633 Compare July 19, 2024 12:51
@jorgefilipecosta
Copy link
Member Author

Hi @stokesman, I think depending on @WordPress/gutenberg-design thoughts on the suggestion we could explore adding marks to the possible breaks on the range similar to what the SpacingSizesControl does on a follow-up PR.

@jameskoster
Copy link
Contributor

That's an excellent suggestion @stokesman, thanks for pointing that out. I agree it's something that would improve the experience here. We should probably consider making that component public.

@jorgefilipecosta I think this is working well now, thanks for all the adjustments ❤️

One question; is it possible for consumers to supply different configs? For instance the Pages data view might need to supply different density options to the Templates data view. Similarly it should probably be possible for a data view to opt out of this option altogether.

@jameskoster jameskoster requested a review from a team July 22, 2024 09:04
@jorgefilipecosta jorgefilipecosta force-pushed the update/Data-views-grid-layout-Allow-users-to-adjust-grid-density-and-consumers-to-set-default-density branch from be85633 to b5a9c22 Compare July 22, 2024 09:10
jorgefilipecosta and others added 3 commits July 22, 2024 12:11
Squashed commits:
[bd24def8e8] Fix logic for defaults
[1367c74410] Implement the logic to refer to item size instead of number of columns
[b18403961a] Update: Data views grid layout: Allow users to adjust grid density, and consumers to set default density
@jameskoster
Copy link
Contributor

I noticed RangeControl includes a marks prop for displaying step indicators. Is that worth trying here?

@jorgefilipecosta
Copy link
Member Author

I noticed RangeControl includes a marks prop for displaying step indicators. Is that worth trying here?

Hi @jameskoster,

Yes, I tried the marks, but it does not seems like what we want:
Screenshot 2024-07-22 at 16 06 58
This is how they look by default on the component.

We could of course hide labels and get this:
Screenshot 2024-07-22 at 16 10 37

Do you think using marks with labels hidden would be a good idea?

@jorgefilipecosta
Copy link
Member Author

One question; is it possible for consumers to supply different configs? For instance the Pages data view might need to supply different density options to the Templates data view. Similarly it should probably be possible for a data view to opt out of this option altogether.

Right now it is not consumer configurable the main goal of this PR is to get an initial version that does not changes API's for the consumer. But I have an hardcoded config object (for now) so changing to something consumer configurable will be easy. We just need to discuss the API for how the config object could be passed, and our hardcoded one could start to become the default in case nothing is passed. I guess we could work on the consumer configuration in a follow-up?

@jameskoster
Copy link
Contributor

Marks without labels is the way to go, but that looks a bit broken. Let's get that fixed at the component level (cc @ciampo @mirka) then follow up to add it here.

I guess we could work on the consumer configuration in a follow-up?

Sounds good to me.

Copy link
Contributor

@jameskoster jameskoster left a comment

Choose a reason for hiding this comment

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

I'd welcome more design feedback, but I reckon this is in a decent spot to get in since we're early in the release cycle, and begin gathering feedback.

@jorgefilipecosta jorgefilipecosta merged commit e78e4e3 into trunk Jul 22, 2024
62 checks passed
@jorgefilipecosta jorgefilipecosta deleted the update/Data-views-grid-layout-Allow-users-to-adjust-grid-density-and-consumers-to-set-default-density branch July 22, 2024 13:32
@github-actions github-actions bot added this to the Gutenberg 18.9 milestone Jul 22, 2024
@paaljoachim
Copy link
Contributor

Very nice!

@youknowriad
Copy link
Contributor

I will reiterate the feedback that I shared before. I think all view configuration should be in the ViewConfig dropdown. I'm concerned that we keep adding buttons and controls outside of that dropdown.

@jameskoster
Copy link
Contributor

In this case the range control is much more ergonomic to use than a menu. That said, perhaps there's scope to move the range inside the menu? I'd be interested to hear the a11y story around something like this:

Preview size

@jorgefilipecosta if it's not a lot of work, it might be worth trying this in a separate PR to gather feedback?

@jorgefilipecosta
Copy link
Member Author

I will reiterate the feedback that I shared before. I think all view configuration should be in the ViewConfig dropdown. I'm concerned that we keep adding buttons and controls outside of that dropdown.

Sorry @youknowriad, with the discussion that followed I lost track of this suggestion. I can give a try to the suggestion @jameskoster proposed. But I'm not sure if our components allow that, I will look.

@ciampo
Copy link
Contributor

ciampo commented Jul 23, 2024

@jameskoster

That said, perhaps there's scope to move the range inside the menu? I'd be interested to hear the a11y story around something like this:

@jorgefilipecosta

But I'm not sure if our components allow that, I will look.

Using a range input or interactive form controls in general as a menu item may not be allowed. From the menu and menubar APG:

The items contained in a menu are child elements of the containing menu or menubar and have any of the following roles:

And from menuitem documentation, it looks like a menu item needs to represent "an option in a set of choices", which gets activated when pressing the enter and space key.

There is even an active conversation happening at the ARIA standards level about introducing a role menuitemslider, but no concrete advancements have been made so far.

Having said that, I don't know if we could find a way to include a slider inside a menu
Also pinging @diegohaz in case ariakit could offer a solution here — maybe adding the slider (and other interactive controls) outside of the menu container, if that's even a possibility?

@youknowriad
Copy link
Contributor

youknowriad commented Jul 23, 2024

For me that dropdown is not a menu, I'm not a simple select box and I'm not navigating anywhere, it's a config dropdown, I'm editing the "view" config. I can see things like text inputs, sliders, selects (the existing menus)... So I think we should treat it like that instead

@jameskoster
Copy link
Contributor

@youknowriad that's quite a different proposition in terms of design, are you imagining something more Settings (#63624) oriented? Rough mockup:

view options

@ciampo
Copy link
Contributor

ciampo commented Jul 23, 2024

If it helps, we had a similar conversation in #55100 (comment) and following comments.

@youknowriad
Copy link
Contributor

@youknowriad that's quite a different proposition in terms of design, are you imagining something more Settings (#63624) oriented? Rough mockup:

That mockup works but I don't see why closer design can't work in a dropdown.

@jameskoster
Copy link
Contributor

I don't see why closer design can't work in a dropdown.

A popover might work, but without the flyouts to help organise things it could end up being quite large and feel a bit unwieldy. If we're committed to moving away from a menu lets open an issue to explore the options.

@jorgefilipecosta
Copy link
Member Author

I'm trying options at #63852. I guess we can discuss the possibilities there, and then I update the code to reflect the option we commit to.

@diegohaz
Copy link
Member

diegohaz commented Jul 23, 2024

Having said that, I don't know if we could find a way to include a slider inside a menu
Also pinging @diegohaz in case ariakit could offer a solution here — maybe adding the slider (and other interactive controls) outside of the menu container, if that's even a possibility?

A role=menu container can only contain group, separator, menuitem, and other menuitem role types as its accessible children.

However, there are other roles that could be useful here. A simple alternative could be a popover with a vertical Toolbar, if you want to keep the arrow key navigation.

A more complex solution could be a single-column grid (gridcell elements may contain widgets inside, like select and slider—related: Composite widgets with grid role).

@priethor priethor added the [Feature] DataViews Work surrounding upgrading and evolving views in the site editor and beyond label Jul 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] DataViews Work surrounding upgrading and evolving views in the site editor and beyond 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.

Data views grid layout: Allow users to adjust grid density, and consumers to set default density
8 participants