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

Try stickier block toolbars in Customize Widgets #32490

Closed
wants to merge 6 commits into from

Conversation

stokesman
Copy link
Contributor

@stokesman stokesman commented Jun 7, 2021

An experiment in how to work out the recent toolbar overlapping issues in the Customize Widgets editor. The two high-level changes:

UPDATE: The floating block toolbar now hides when its block goes out of view (its position is still stuck to the scrolling boundaries to avoid overlap during transition).

How has this been tested?

Manually…

Screenshots

customize-widgets-moar-sticky-4.mp4
For posterity, the version with alternate transform transition of the toolbar
customize-widgets-moar-sticky-3.mp4

Types of changes

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).

@github-actions
Copy link

github-actions bot commented Jun 7, 2021

Size Change: +2.1 kB (0%)

Total Size: 1.04 MB

Filename Size Change
build/block-editor/index.min.js 119 kB +573 B (0%)
build/block-editor/style-rtl.css 13.5 kB +155 B (+1%)
build/block-editor/style.css 13.5 kB +156 B (+1%)
build/block-library/index.min.js 144 kB +124 B (0%)
build/components/index.min.js 180 kB +485 B (0%)
build/compose/index.min.js 10.2 kB +1 B (0%)
build/core-data/index.min.js 12.2 kB +71 B (+1%)
build/customize-widgets/index.min.js 10 kB +21 B (0%)
build/customize-widgets/style-rtl.css 1.45 kB +9 B (+1%)
build/customize-widgets/style.css 1.45 kB +8 B (+1%)
build/data/index.min.js 7.22 kB +2 B (0%)
build/edit-post/index.min.js 58.6 kB +140 B (0%)
build/edit-post/style-rtl.css 6.98 kB +52 B (+1%)
build/edit-post/style.css 6.96 kB +54 B (+1%)
build/edit-site/index.min.js 25.9 kB -5 B (0%)
build/edit-widgets/index.min.js 15.8 kB +99 B (+1%)
build/widgets/index.min.js 6.48 kB +160 B (+3%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.min.js 1.12 kB 0 B
build/annotations/index.min.js 2.93 kB 0 B
build/api-fetch/index.min.js 2.42 kB 0 B
build/autop/index.min.js 2.28 kB 0 B
build/blob/index.min.js 672 B 0 B
build/block-directory/index.min.js 6.62 kB 0 B
build/block-directory/style-rtl.css 989 B 0 B
build/block-directory/style.css 990 B 0 B
build/block-library/blocks/archives/editor-rtl.css 61 B 0 B
build/block-library/blocks/archives/editor.css 60 B 0 B
build/block-library/blocks/archives/style-rtl.css 65 B 0 B
build/block-library/blocks/archives/style.css 65 B 0 B
build/block-library/blocks/audio/editor-rtl.css 58 B 0 B
build/block-library/blocks/audio/editor.css 58 B 0 B
build/block-library/blocks/audio/style-rtl.css 112 B 0 B
build/block-library/blocks/audio/style.css 112 B 0 B
build/block-library/blocks/audio/theme-rtl.css 125 B 0 B
build/block-library/blocks/audio/theme.css 125 B 0 B
build/block-library/blocks/block/editor-rtl.css 161 B 0 B
build/block-library/blocks/block/editor.css 161 B 0 B
build/block-library/blocks/button/editor-rtl.css 475 B 0 B
build/block-library/blocks/button/editor.css 474 B 0 B
build/block-library/blocks/button/style-rtl.css 603 B 0 B
build/block-library/blocks/button/style.css 602 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 315 B 0 B
build/block-library/blocks/buttons/editor.css 315 B 0 B
build/block-library/blocks/buttons/style-rtl.css 375 B 0 B
build/block-library/blocks/buttons/style.css 375 B 0 B
build/block-library/blocks/calendar/style-rtl.css 208 B 0 B
build/block-library/blocks/calendar/style.css 208 B 0 B
build/block-library/blocks/categories/editor-rtl.css 84 B 0 B
build/block-library/blocks/categories/editor.css 83 B 0 B
build/block-library/blocks/categories/style-rtl.css 79 B 0 B
build/block-library/blocks/categories/style.css 79 B 0 B
build/block-library/blocks/code/style-rtl.css 90 B 0 B
build/block-library/blocks/code/style.css 90 B 0 B
build/block-library/blocks/code/theme-rtl.css 131 B 0 B
build/block-library/blocks/code/theme.css 131 B 0 B
build/block-library/blocks/columns/editor-rtl.css 190 B 0 B
build/block-library/blocks/columns/editor.css 190 B 0 B
build/block-library/blocks/columns/style-rtl.css 422 B 0 B
build/block-library/blocks/columns/style.css 422 B 0 B
build/block-library/blocks/cover/editor-rtl.css 644 B 0 B
build/block-library/blocks/cover/editor.css 646 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB 0 B
build/block-library/blocks/cover/style.css 1.23 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 486 B 0 B
build/block-library/blocks/embed/editor.css 486 B 0 B
build/block-library/blocks/embed/style-rtl.css 401 B 0 B
build/block-library/blocks/embed/style.css 400 B 0 B
build/block-library/blocks/embed/theme-rtl.css 124 B 0 B
build/block-library/blocks/embed/theme.css 124 B 0 B
build/block-library/blocks/file/editor-rtl.css 301 B 0 B
build/block-library/blocks/file/editor.css 300 B 0 B
build/block-library/blocks/file/frontend.min.js 773 B 0 B
build/block-library/blocks/file/style-rtl.css 255 B 0 B
build/block-library/blocks/file/style.css 255 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB 0 B
build/block-library/blocks/freeform/editor.css 2.44 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 704 B 0 B
build/block-library/blocks/gallery/editor.css 705 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.06 kB 0 B
build/block-library/blocks/gallery/style.css 1.06 kB 0 B
build/block-library/blocks/gallery/theme-rtl.css 122 B 0 B
build/block-library/blocks/gallery/theme.css 122 B 0 B
build/block-library/blocks/group/editor-rtl.css 160 B 0 B
build/block-library/blocks/group/editor.css 160 B 0 B
build/block-library/blocks/group/style-rtl.css 57 B 0 B
build/block-library/blocks/group/style.css 57 B 0 B
build/block-library/blocks/group/theme-rtl.css 93 B 0 B
build/block-library/blocks/group/theme.css 93 B 0 B
build/block-library/blocks/heading/editor-rtl.css 152 B 0 B
build/block-library/blocks/heading/editor.css 152 B 0 B
build/block-library/blocks/heading/style-rtl.css 76 B 0 B
build/block-library/blocks/heading/style.css 76 B 0 B
build/block-library/blocks/home-link/style-rtl.css 259 B 0 B
build/block-library/blocks/home-link/style.css 259 B 0 B
build/block-library/blocks/html/editor-rtl.css 281 B 0 B
build/block-library/blocks/html/editor.css 281 B 0 B
build/block-library/blocks/image/editor-rtl.css 729 B 0 B
build/block-library/blocks/image/editor.css 727 B 0 B
build/block-library/blocks/image/style-rtl.css 481 B 0 B
build/block-library/blocks/image/style.css 485 B 0 B
build/block-library/blocks/image/theme-rtl.css 124 B 0 B
build/block-library/blocks/image/theme.css 124 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 281 B 0 B
build/block-library/blocks/latest-comments/style.css 282 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B 0 B
build/block-library/blocks/latest-posts/editor.css 137 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 529 B 0 B
build/block-library/blocks/latest-posts/style.css 529 B 0 B
build/block-library/blocks/list/style-rtl.css 63 B 0 B
build/block-library/blocks/list/style.css 63 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 176 B 0 B
build/block-library/blocks/media-text/editor.css 176 B 0 B
build/block-library/blocks/media-text/style-rtl.css 492 B 0 B
build/block-library/blocks/media-text/style.css 489 B 0 B
build/block-library/blocks/more/editor-rtl.css 434 B 0 B
build/block-library/blocks/more/editor.css 434 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 633 B 0 B
build/block-library/blocks/navigation-link/editor.css 634 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B 0 B
build/block-library/blocks/navigation-link/style.css 94 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.55 kB 0 B
build/block-library/blocks/navigation/editor.css 1.55 kB 0 B
build/block-library/blocks/navigation/frontend.min.js 2.86 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 1.63 kB 0 B
build/block-library/blocks/navigation/style.css 1.63 kB 0 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B 0 B
build/block-library/blocks/nextpage/editor.css 395 B 0 B
build/block-library/blocks/page-list/editor-rtl.css 310 B 0 B
build/block-library/blocks/page-list/editor.css 311 B 0 B
build/block-library/blocks/page-list/style-rtl.css 240 B 0 B
build/block-library/blocks/page-list/style.css 240 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B 0 B
build/block-library/blocks/paragraph/editor.css 157 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 247 B 0 B
build/block-library/blocks/paragraph/style.css 248 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 209 B 0 B
build/block-library/blocks/post-author/editor.css 209 B 0 B
build/block-library/blocks/post-author/style-rtl.css 183 B 0 B
build/block-library/blocks/post-author/style.css 184 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 140 B 0 B
build/block-library/blocks/post-comments-form/style.css 140 B 0 B
build/block-library/blocks/post-comments/style-rtl.css 360 B 0 B
build/block-library/blocks/post-comments/style.css 359 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 139 B 0 B
build/block-library/blocks/post-content/editor.css 139 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B 0 B
build/block-library/blocks/post-excerpt/editor.css 73 B 0 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B 0 B
build/block-library/blocks/post-excerpt/style.css 69 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 338 B 0 B
build/block-library/blocks/post-featured-image/editor.css 338 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 141 B 0 B
build/block-library/blocks/post-featured-image/style.css 141 B 0 B
build/block-library/blocks/post-template/editor-rtl.css 100 B 0 B
build/block-library/blocks/post-template/editor.css 99 B 0 B
build/block-library/blocks/post-template/style-rtl.css 379 B 0 B
build/block-library/blocks/post-template/style.css 380 B 0 B
build/block-library/blocks/post-title/style-rtl.css 60 B 0 B
build/block-library/blocks/post-title/style.css 60 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 103 B 0 B
build/block-library/blocks/preformatted/style.css 103 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 183 B 0 B
build/block-library/blocks/pullquote/editor.css 183 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 318 B 0 B
build/block-library/blocks/pullquote/style.css 318 B 0 B
build/block-library/blocks/pullquote/theme-rtl.css 169 B 0 B
build/block-library/blocks/pullquote/theme.css 169 B 0 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B 0 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B 0 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B 0 B
build/block-library/blocks/query-pagination/editor.css 262 B 0 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B 0 B
build/block-library/blocks/query-pagination/style.css 168 B 0 B
build/block-library/blocks/query-title/editor-rtl.css 86 B 0 B
build/block-library/blocks/query-title/editor.css 86 B 0 B
build/block-library/blocks/query/editor-rtl.css 131 B 0 B
build/block-library/blocks/query/editor.css 132 B 0 B
build/block-library/blocks/quote/style-rtl.css 169 B 0 B
build/block-library/blocks/quote/style.css 169 B 0 B
build/block-library/blocks/quote/theme-rtl.css 221 B 0 B
build/block-library/blocks/quote/theme.css 221 B 0 B
build/block-library/blocks/rss/editor-rtl.css 201 B 0 B
build/block-library/blocks/rss/editor.css 202 B 0 B
build/block-library/blocks/rss/style-rtl.css 290 B 0 B
build/block-library/blocks/rss/style.css 290 B 0 B
build/block-library/blocks/search/editor-rtl.css 211 B 0 B
build/block-library/blocks/search/editor.css 211 B 0 B
build/block-library/blocks/search/style-rtl.css 359 B 0 B
build/block-library/blocks/search/style.css 362 B 0 B
build/block-library/blocks/search/theme-rtl.css 64 B 0 B
build/block-library/blocks/search/theme.css 64 B 0 B
build/block-library/blocks/separator/editor-rtl.css 99 B 0 B
build/block-library/blocks/separator/editor.css 99 B 0 B
build/block-library/blocks/separator/style-rtl.css 251 B 0 B
build/block-library/blocks/separator/style.css 251 B 0 B
build/block-library/blocks/separator/theme-rtl.css 172 B 0 B
build/block-library/blocks/separator/theme.css 172 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 512 B 0 B
build/block-library/blocks/shortcode/editor.css 512 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 440 B 0 B
build/block-library/blocks/site-logo/editor.css 441 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 154 B 0 B
build/block-library/blocks/site-logo/style.css 154 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 164 B 0 B
build/block-library/blocks/social-link/editor.css 165 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 800 B 0 B
build/block-library/blocks/social-links/editor.css 799 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.34 kB 0 B
build/block-library/blocks/social-links/style.css 1.34 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 308 B 0 B
build/block-library/blocks/spacer/editor.css 308 B 0 B
build/block-library/blocks/spacer/style-rtl.css 48 B 0 B
build/block-library/blocks/spacer/style.css 48 B 0 B
build/block-library/blocks/table/editor-rtl.css 478 B 0 B
build/block-library/blocks/table/editor.css 478 B 0 B
build/block-library/blocks/table/style-rtl.css 480 B 0 B
build/block-library/blocks/table/style.css 480 B 0 B
build/block-library/blocks/table/theme-rtl.css 188 B 0 B
build/block-library/blocks/table/theme.css 188 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 118 B 0 B
build/block-library/blocks/tag-cloud/editor.css 118 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B 0 B
build/block-library/blocks/tag-cloud/style.css 94 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 551 B 0 B
build/block-library/blocks/template-part/editor.css 550 B 0 B
build/block-library/blocks/template-part/theme-rtl.css 101 B 0 B
build/block-library/blocks/template-part/theme.css 101 B 0 B
build/block-library/blocks/term-description/editor-rtl.css 90 B 0 B
build/block-library/blocks/term-description/editor.css 90 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B 0 B
build/block-library/blocks/text-columns/editor.css 95 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 166 B 0 B
build/block-library/blocks/text-columns/style.css 166 B 0 B
build/block-library/blocks/verse/style-rtl.css 87 B 0 B
build/block-library/blocks/verse/style.css 87 B 0 B
build/block-library/blocks/video/editor-rtl.css 569 B 0 B
build/block-library/blocks/video/editor.css 570 B 0 B
build/block-library/blocks/video/style-rtl.css 173 B 0 B
build/block-library/blocks/video/style.css 173 B 0 B
build/block-library/blocks/video/theme-rtl.css 124 B 0 B
build/block-library/blocks/video/theme.css 124 B 0 B
build/block-library/common-rtl.css 1.26 kB 0 B
build/block-library/common.css 1.26 kB 0 B
build/block-library/editor-rtl.css 9.68 kB 0 B
build/block-library/editor.css 9.67 kB 0 B
build/block-library/reset-rtl.css 506 B 0 B
build/block-library/reset.css 507 B 0 B
build/block-library/style-rtl.css 10.2 kB 0 B
build/block-library/style.css 10.2 kB 0 B
build/block-library/theme-rtl.css 692 B 0 B
build/block-library/theme.css 693 B 0 B
build/block-serialization-default-parser/index.min.js 1.3 kB 0 B
build/block-serialization-spec-parser/index.min.js 3.06 kB 0 B
build/blocks/index.min.js 47.2 kB 0 B
build/components/style-rtl.css 16.2 kB 0 B
build/components/style.css 16.1 kB 0 B
build/data-controls/index.min.js 828 B 0 B
build/date/index.min.js 31.8 kB 0 B
build/deprecated/index.min.js 738 B 0 B
build/dom-ready/index.min.js 576 B 0 B
build/dom/index.min.js 4.62 kB 0 B
build/edit-navigation/index.min.js 14 kB 0 B
build/edit-navigation/style-rtl.css 3.08 kB 0 B
build/edit-navigation/style.css 3.08 kB 0 B
build/edit-post/classic-rtl.css 454 B 0 B
build/edit-post/classic.css 454 B 0 B
build/edit-site/style-rtl.css 4.75 kB 0 B
build/edit-site/style.css 4.75 kB 0 B
build/edit-widgets/style-rtl.css 3.45 kB 0 B
build/edit-widgets/style.css 3.45 kB 0 B
build/editor/index.min.js 38.3 kB 0 B
build/editor/style-rtl.css 3.91 kB 0 B
build/editor/style.css 3.9 kB 0 B
build/element/index.min.js 3.44 kB 0 B
build/escape-html/index.min.js 739 B 0 B
build/format-library/index.min.js 5.68 kB 0 B
build/format-library/style-rtl.css 637 B 0 B
build/format-library/style.css 639 B 0 B
build/hooks/index.min.js 1.76 kB 0 B
build/html-entities/index.min.js 628 B 0 B
build/i18n/index.min.js 3.73 kB 0 B
build/is-shallow-equal/index.min.js 709 B 0 B
build/keyboard-shortcuts/index.min.js 1.74 kB 0 B
build/keycodes/index.min.js 1.43 kB 0 B
build/list-reusable-blocks/index.min.js 2.07 kB 0 B
build/list-reusable-blocks/style-rtl.css 629 B 0 B
build/list-reusable-blocks/style.css 628 B 0 B
build/media-utils/index.min.js 3.08 kB 0 B
build/notices/index.min.js 1.07 kB 0 B
build/nux/index.min.js 2.31 kB 0 B
build/nux/style-rtl.css 718 B 0 B
build/nux/style.css 716 B 0 B
build/plugins/index.min.js 1.99 kB 0 B
build/primitives/index.min.js 1.03 kB 0 B
build/priority-queue/index.min.js 791 B 0 B
build/react-i18n/index.min.js 924 B 0 B
build/redux-routine/index.min.js 2.82 kB 0 B
build/reusable-blocks/index.min.js 2.56 kB 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/rich-text/index.min.js 10.6 kB 0 B
build/server-side-render/index.min.js 1.63 kB 0 B
build/shortcode/index.min.js 1.68 kB 0 B
build/token-list/index.min.js 847 B 0 B
build/url/index.min.js 1.95 kB 0 B
build/viewport/index.min.js 1.28 kB 0 B
build/warning/index.min.js 1.13 kB 0 B
build/widgets/style-rtl.css 693 B 0 B
build/widgets/style.css 693 B 0 B
build/wordcount/index.min.js 1.24 kB 0 B

compressed-size-action

@noisysocks noisysocks added this to PRs needing review in Block-based Widgets Editor via automation Jun 8, 2021
@talldan talldan requested a review from ellatrix June 9, 2021 02:47
@talldan talldan added the [Feature] Widgets Customizer Ability to add and edit blocks in Customize → Widgets. label Jun 9, 2021
@talldan
Copy link
Contributor

talldan commented Jun 9, 2021

@stokesman This is quite a big change (in scope and lines of code), especially for consideration as part of WordPress 5.8.

I started looking at it but found it hard to review (and I realise it's based on another PR). Would be good to see some more justification for the decisions taken and what alternatives were considered in the process of developing this.

Also would be great to see some more comments throughout the code or attempts to make the code more self-documenting.

I found the fact that popover now has lots of different sticky props confusing. Popover's props feel like they need to be generally revisited. I understood what the existing 'sticky boundary' was, but now there's 'sticky' and 'sticky area' too.

The useScrollback hook needs documentation as this kind of mathematical code is always hard to understand for a reader.

@stokesman
Copy link
Contributor Author

stokesman commented Jun 9, 2021

Thanks for the feedback @talldan. I did intend to straighten it up before marking as ready for review and your comments will aid that effort.

I found the fact that popover now has lots of different sticky props confusing.

It'd be possible to reduce flexibility a little and have fewer props. stickyBottom isn't actually needed for this use case and the 'sticky area' pair could be absorbed by a single boolean of freeRangeSticky or something.

Popover's props feel like they need to be generally revisited

👍

@stokesman stokesman force-pushed the try/customize-widgets-resticky branch from 9e1f4a2 to 7f32e0b Compare June 9, 2021 20:08
@stokesman
Copy link
Contributor Author

@talldan, I've rebased and reduced changes to what's relevant. I also reduced the added props to more tightly fit the present use case and added comments.

I think before anyone puts in the effort of a full code review the UX still needs vetted. So I'd like to bring up what has so far been the concern regarding this approach, mentioned by @kevin940726 and @critterverse

#32061 (comment)

I think it might be confusing to see the toolbar appear over other blocks after the selected block has scrolled out of view.

I've given that some thought but wager it would seldom cause confusion. I suppose a trial of it would be the only way to learn. We could also look at ways to indicate the selection is out-of-view. One quick idea:
image.


Toward the end of the screen recording in the description, I demonstrated dragging to reorder a block that was out of view. That was a nod toward looking out for such side effects. That particular one seems like it could be considered a feature by allowing an easier reordering task in some circumstances.

@talldan
Copy link
Contributor

talldan commented Jun 10, 2021

@stokesman What do you think about moving the customizer title sticky changes into a separate PR? That part seems to add quite a bit of complexity and the performance needs improvement. I also think an option could be a patch to WordPress core for changing how it works.

If the PR just focuses on the block editor top bar and toolbar, that should hopefully make it a bit easier to iterate.

@talldan
Copy link
Contributor

talldan commented Jun 10, 2021

BTW, I also had some code for reveal on scroll in this branch - trunk...try/customize-widget-revealing-topbar

That was an experiment to try the behavior on the editor top bar.

An approach I took there was to only change top when the scroll direction changes and let position: sticky do the rest of the work—set top to be on screen when scrolling down and off-screen when scrolling up. I think in this branch the top value is being modified constantly on every scroll event to match the scroll delta, which leads to the performance issues.

edit - actually looking at the code I seem to be misremembering, it seems to use the delta too. The performance difference might be more related to updating the React style prop, rather than modifying the DOM element's style directly.

@stokesman
Copy link
Contributor Author

What do you think about moving the customizer title sticky changes into a separate PR?

A fine idea 👍 I'd been starting to think it myself. Certainly even if we find a performant solution it'd be intended as a crutch until core could be updated.

@stokesman stokesman force-pushed the try/customize-widgets-resticky branch from 7f32e0b to d9c59f7 Compare June 10, 2021 16:40
@stokesman
Copy link
Contributor Author

Removed the reimplementation of the Customizer’s sticky title. Number of lines changed greatly reduced 🎉 .

@critterverse
Copy link
Contributor

critterverse commented Jun 10, 2021

This is looking good with the most recent change to the Customizer title area 👍

We could also look at ways to indicate the selection is out-of-view.

Explored a couple of options for this and I think maybe the best option is potentially the most straightforward — dimming the toolbar after the selected block has scrolled out of view. The borders and icons are currently Gutenberg Gray 900 (hex #1E1E1E) but could change to Gutenberg Gray 600 (hex #949494) when dimmed:

toolbar-dimmed.mov

Edit: Updating to include another exploration here as well since it might be helpful to get more opinions on this. In this version, the toolbar would anchor to the block as usual until it scrolls out of view, then collapse into a single-item toolbar (like a parent selector).

toolbar-collapsed.mov

@kevin940726
Copy link
Member

#32061 (comment)

I wonder if this could work 🤔?

@stokesman
Copy link
Contributor Author

@critterverse, out of those explorations I tend to think the collapsing one would be the better of the two though probably a bit more effort. I'd also like to think we could allow the drag handle to still be available. Or maybe even a separate "scroll into view" button replace the ones that are hidden.

I've been thinking on it and coming around to prefer, at least for now, something like what @kevin940726 has suggested. I'd still like to see it done with the stickier toolbar as in this PR, so there's no overlap even while it transitions in and out.

- Add props to BlockTools and Popover to support expanded sticky
  area and sticky position off the bottom
- Add logic for sticking the popover as its anchorRect overflows the
  bottom of its boundary
- Remove now extraneous z-index rules and map entry
@critterverse
Copy link
Contributor

I'd still like to see it done with the stickier toolbar as in this PR, so there's no overlap even while it transitions in and out.

This sounds like a good plan but I'm having trouble picturing how the overlap can be avoided while fading — the toolbar and top bars are still going to intersect at some point before the toolbar can fade out, no?

Also added one more previously explored idea in #32061 where the block toolbar could go in front of the header bars rather than behind (like is happening currently with the footer controls at the bottom of the Customizer sidebar).

I'm open to whichever approach we can get working better with the sticky editor bar, which is a nice usability improvement over what we have now!

@stokesman stokesman force-pushed the try/customize-widgets-resticky branch from d9c59f7 to 8352118 Compare June 13, 2021 15:59
@stokesman
Copy link
Contributor Author

stokesman commented Jun 13, 2021

I've pushed an update to hide the block toolbars when their block is out of view. Instead of a fade, a transform is used since it was fun and may help reinforce why the toolbar is hiding. I'm not attached to that and fine with changing it. To try the fade while testing this PR the following can be pasted in to the styles in dev tools:

.components-popover.block-editor-block-list__block-popover .components-popover__content[data-away]{
    transition: opacity 0.1s linear;
}
.components-popover.block-editor-block-list__block-popover .components-popover__content[data-away].is-away {
  transform: none;
  opacity:0;
}

The screen recording in the description is updated.

one more previously explored idea … where the block toolbar could go in front of the header bars rather than behind

That is definitely an improvement over trunk and happens to be where this PR started. I've put the first two commits here into a separate PR #32650.

@critterverse
Copy link
Contributor

Awesome, this was so helpful to be able to try out several different approaches at once!

To try the fade while testing this PR the following can be pasted in to the styles in dev tools:

I really like how the version with the fade is working — props @stokesman and @kevin940726 for this elegant solution, it came together nicely with the sticky editor bar 🎉

@stokesman
Copy link
Contributor Author

Thanks for testing it out @critterverse 🙇 . I've pushed an update to switch to the fade transition and that allowed a little simplification.

I've also simplified the logic determining if the selection is in view or not and that should ease code review. Which I think could be the next step here. Marking it ready.

@stokesman stokesman marked this pull request as ready for review June 15, 2021 17:18
@noisysocks
Copy link
Member

Thanks everyone for working on this. It's looking really good, but let's punt it to WordPress 5.8.1 as there's a few more rounds of UX/dev feedback required and we've only a limited amount of person hours available before the 5.8 code freeze on June 29.

@noisysocks noisysocks moved this from PRs needing review to Maybe later in Block-based Widgets Editor Jun 17, 2021
@critterverse critterverse mentioned this pull request Jul 7, 2021
27 tasks
@stokesman stokesman closed this Jul 18, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Widgets Customizer Ability to add and edit blocks in Customize → Widgets.
Projects
No open projects
5 participants