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

[Experiment - Inserter]: Try search input inside each tab #45203

Closed
wants to merge 13 commits into from

Conversation

ntsekouras
Copy link
Contributor

@ntsekouras ntsekouras commented Oct 21, 2022

What?

This PR explores how we should handle the search in the inserter. It's still just an early start to discuss design and UX, as it's not clear yet from the existing suggestions.

Some designs about this can be found: #44496 (comment), #44918 (comment).

It's also related to the Media tab in the inserter(PR).

Notes

  1. We should decide if we'll show both patterns and blocks results when searching from the respective tabs. The current PR shows only of the type of the selected tab.
  2. The above affects how to handle the browse all button in quick inserter.

Testing Instructions

  1. Interact with inserter and the search results

Screenshots or screencast

Screen.Recording.2022-10-21.at.1.15.34.PM.mov

@ntsekouras ntsekouras added [Feature] Inserter The main way to insert blocks using the + button in the editing interface Needs Design Needs design efforts. labels Oct 21, 2022
@ntsekouras ntsekouras self-assigned this Oct 21, 2022
@github-actions
Copy link

github-actions bot commented Oct 21, 2022

Size Change: +160 B (0%)

Total Size: 1.28 MB

Filename Size Change
build/block-editor/index.min.js 169 kB +165 B (0%)
build/block-editor/style-rtl.css 15.8 kB +8 B (0%)
build/block-editor/style.css 15.8 kB +7 B (0%)
build/edit-post/index.min.js 34.1 kB +5 B (0%)
build/edit-site/index.min.js 57.9 kB -3 B (0%)
build/edit-widgets/index.min.js 16.6 kB -22 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 982 B
build/annotations/index.min.js 2.76 kB
build/api-fetch/index.min.js 2.26 kB
build/autop/index.min.js 2.14 kB
build/blob/index.min.js 475 B
build/block-directory/index.min.js 7.09 kB
build/block-directory/style-rtl.css 990 B
build/block-directory/style.css 991 B
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 126 B
build/block-library/blocks/audio/theme.css 126 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 84 B
build/block-library/blocks/avatar/style.css 84 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 482 B
build/block-library/blocks/button/editor.css 482 B
build/block-library/blocks/button/style-rtl.css 532 B
build/block-library/blocks/button/style.css 532 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 100 B
build/block-library/blocks/categories/style.css 100 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 612 B
build/block-library/blocks/cover/editor.css 613 B
build/block-library/blocks/cover/style-rtl.css 1.57 kB
build/block-library/blocks/cover/style.css 1.55 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 126 B
build/block-library/blocks/embed/theme.css 126 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 253 B
build/block-library/blocks/file/style.css 254 B
build/block-library/blocks/file/view.min.js 346 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 948 B
build/block-library/blocks/gallery/editor.css 950 B
build/block-library/blocks/gallery/style-rtl.css 1.53 kB
build/block-library/blocks/gallery/style.css 1.53 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 394 B
build/block-library/blocks/group/editor.css 394 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 327 B
build/block-library/blocks/html/editor.css 329 B
build/block-library/blocks/image/editor-rtl.css 880 B
build/block-library/blocks/image/editor.css 880 B
build/block-library/blocks/image/style-rtl.css 627 B
build/block-library/blocks/image/style.css 630 B
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 463 B
build/block-library/blocks/latest-posts/style.css 462 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 507 B
build/block-library/blocks/media-text/style.css 505 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 705 B
build/block-library/blocks/navigation-link/editor.css 703 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.02 kB
build/block-library/blocks/navigation/editor.css 2.03 kB
build/block-library/blocks/navigation/style-rtl.css 2.17 kB
build/block-library/blocks/navigation/style.css 2.16 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 443 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 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 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 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 501 B
build/block-library/blocks/post-comments-form/style.css 501 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 586 B
build/block-library/blocks/post-featured-image/editor.css 584 B
build/block-library/blocks/post-featured-image/style-rtl.css 315 B
build/block-library/blocks/post-featured-image/style.css 315 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/style.css 153 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 282 B
build/block-library/blocks/post-template/style.css 282 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-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 326 B
build/block-library/blocks/pullquote/style.css 325 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 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 282 B
build/block-library/blocks/query-pagination/style.css 278 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 439 B
build/block-library/blocks/query/editor.css 439 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 409 B
build/block-library/blocks/search/style.css 406 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 464 B
build/block-library/blocks/shortcode/editor.css 464 B
build/block-library/blocks/site-logo/editor-rtl.css 490 B
build/block-library/blocks/site-logo/editor.css 490 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.4 kB
build/block-library/blocks/social-links/style.css 1.39 kB
build/block-library/blocks/spacer/editor-rtl.css 322 B
build/block-library/blocks/spacer/editor.css 322 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 494 B
build/block-library/blocks/table/editor.css 494 B
build/block-library/blocks/table/style-rtl.css 611 B
build/block-library/blocks/table/style.css 609 B
build/block-library/blocks/table/theme-rtl.css 190 B
build/block-library/blocks/table/theme.css 190 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 235 B
build/block-library/blocks/template-part/editor.css 235 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 691 B
build/block-library/blocks/video/editor.css 694 B
build/block-library/blocks/video/style-rtl.css 174 B
build/block-library/blocks/video/style.css 174 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/classic-rtl.css 162 B
build/block-library/classic.css 162 B
build/block-library/common-rtl.css 1.02 kB
build/block-library/common.css 1.02 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.2 kB
build/block-library/editor.css 11.2 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 192 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 12.3 kB
build/block-library/style.css 12.3 kB
build/block-library/theme-rtl.css 719 B
build/block-library/theme.css 722 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 49.9 kB
build/components/index.min.js 202 kB
build/components/style-rtl.css 11.3 kB
build/components/style.css 11.3 kB
build/compose/index.min.js 12.2 kB
build/core-data/index.min.js 15.5 kB
build/customize-widgets/index.min.js 11.3 kB
build/customize-widgets/style-rtl.css 1.38 kB
build/customize-widgets/style.css 1.38 kB
build/data-controls/index.min.js 653 B
build/data/index.min.js 8.08 kB
build/date/index.min.js 32.1 kB
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.7 kB
build/edit-navigation/index.min.js 16.1 kB
build/edit-navigation/style-rtl.css 3.99 kB
build/edit-navigation/style.css 4 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/style-rtl.css 7.33 kB
build/edit-post/style.css 7.32 kB
build/edit-site/style-rtl.css 8.37 kB
build/edit-site/style.css 8.35 kB
build/edit-widgets/style-rtl.css 4.34 kB
build/edit-widgets/style.css 4.34 kB
build/editor/index.min.js 43.6 kB
build/editor/style-rtl.css 3.6 kB
build/editor/style.css 3.59 kB
build/element/index.min.js 4.68 kB
build/escape-html/index.min.js 537 B
build/experiments/index.min.js 868 B
build/format-library/index.min.js 6.95 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.64 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.77 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.78 kB
build/keycodes/index.min.js 1.83 kB
build/list-reusable-blocks/index.min.js 2.13 kB
build/list-reusable-blocks/style-rtl.css 835 B
build/list-reusable-blocks/style.css 835 B
build/media-utils/index.min.js 2.93 kB
build/notices/index.min.js 963 B
build/nux/index.min.js 2.06 kB
build/nux/style-rtl.css 732 B
build/nux/style.css 728 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.22 kB
build/preferences/index.min.js 1.33 kB
build/primitives/index.min.js 944 B
build/priority-queue/index.min.js 1.58 kB
build/react-i18n/index.min.js 696 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.74 kB
build/reusable-blocks/index.min.js 2.21 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.6 kB
build/server-side-render/index.min.js 1.77 kB
build/shortcode/index.min.js 1.53 kB
build/style-engine/index.min.js 1.46 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.61 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.19 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@ntsekouras ntsekouras mentioned this pull request Oct 21, 2022
5 tasks
@alexstine
Copy link
Contributor

@ntsekouras This still looks kind of early, but please let me know when this is ready for A11Y review.

@jameskoster
Copy link
Contributor

Nice PR. This feels like a good approach that will enable the expansion of the Inserter to include media (#44918). It also streamlines search results and makes them much less overwhelming.

I found the search term persisting between tabs a bit unexpected. It makes the search feel like an awkward middle-ground between global/local search. Keen to hear what others think of that.

The above affects how to handle the browse all button in quick inserter.

The issue here seems to be: If you search the quick inserter, then click 'Browse all', it opens the inserter with the same search term. So we're faced with a question of which tab should be active in this re-arranged UI. Since the quick inserter searches everything, there would no longer be an equivalent state for the main Inserter, so perhaps the Browse all button should disappear when you search the quick inserter? 🤔

@ntsekouras
Copy link
Contributor Author

The issue here seems to be: If you search the quick inserter, then click 'Browse all', it opens the inserter with the same search term. So we're faced with a question of which tab should be active in this re-arranged UI. Since the quick inserter searches everything, there would no longer be an equivalent state for the main Inserter, so perhaps the Browse all button should disappear when you search the quick inserter? 🤔

I don't think we should hide it because there is the case of searching something and there are just more results available, but no the one we're looking for. This could be most noticeable in patterns. We have a flag of what to prioritize(patterns vs blocks) and we could probably use that.. 🤔

Right now the search results for blocks and reusable blocks are the same. Should we do something about that like making this more strict? I think there were discussions about merging the reusable tab somehow..

@jameskoster
Copy link
Contributor

We have a flag of what to prioritize(patterns vs blocks) and we could probably use that..

But then you are not browsing 'all'. It seems a bit counter-intuitive to go from viewing results from all categories to viewing only patterns, or blocks. Especially after clicking browse 'all'.

I think there were discussions about merging the reusable tab somehow

Perhaps Reusable could be a category within the Blocks tab?

@ntsekouras
Copy link
Contributor Author

But then you are not browsing 'all'. It seems a bit counter-intuitive to go from viewing results from all categories to viewing only patterns, or blocks. Especially after clicking browse 'all'.

So one option is to hide browse all. Could another alternative be to have two browse buttons (blocks and patterns)? 🤔

Are we committed with this design to add the search inside the tabs? If yes, I should look into all the details and the changes especially in tests are expected to be quite a lot. --cc @WordPress/gutenberg-design

@paaljoachim
Copy link
Contributor

I was wondering what this PR was about. Meaning I thought by default it already was this way, but noticed it was not. Adding Search inside each tab seems like a given to me, as it creates a natural consistency that one is able to make a search inside each tab.

Making a search for "heading" inside one tab and not finding what I am looking in the specific tab screen it would be natural to have the search term carry over to the next tab without needing to write the search term again. That would be extra useful when there are 4-5 tabs I click through to find what I am looking for. I can easily change the search term or click the x to remove it.

@ntsekouras ntsekouras force-pushed the try/inserter-search-inside-tabs branch from 3e195ae to d5182ed Compare October 26, 2022 14:39
@ntsekouras
Copy link
Contributor Author

@alexstine in this commit I'm basically reverting your previous PR, but I might missing something important in terms of context. When you find some time I'd really appreciate some feedback and/or alternatives on how to make this work best. Thanks!

@alexstine
Copy link
Contributor

alexstine commented Oct 26, 2022

@ntsekouras You cannot do that because of this apparently.

#37357 (comment)

I guess this can be used outside of a sidebar so we need the ability to fire focus from our sidebar, not from the inserter components themselves.

CC @youknowriad

From my current understanding, wordpress/block-editor could be used in any project.

@ntsekouras
Copy link
Contributor Author

I guess this can be used outside of a sidebar so we need the ability to fire focus from our sidebar, not from the inserter components themselves.

It's a different implementation though now. We don't have a single search input outside.. So the idea would be to focus once when the fist tab is selected and if we switch tabs(ex Blocks->Patterns) the search input should not focus?

@alexstine
Copy link
Contributor

@ntsekouras I think that is okay but what about the focusOnMount hook? The only reason it works right now is because you cannot access the tabs using the keyboard. Once that issue is fixed, and that is an issue that needs to be fixed in this PR, focus will be placed on the tabs instead of the search box on initial render.

Can you also try to debug why this PR makes it impossible to tab/shift+tab in to the tabs?

Thanks.

@ntsekouras
Copy link
Contributor Author

ntsekouras commented Oct 26, 2022

the only reason it works right now is because you cannot access the tabs using the keyboard.

I'll check it better tomorrow, but for me shift navigation works. After rendering and setting the first selected tab, the search input on that tab is focused. After that, if I press shift+tab goes to the tabs and then I can go to other tabs with left/right arrow keys. Right now if a new tab is selected, the focus moves to that tab's search input. Isn't that the case for you?

I appreciate the feedback Alex!

@alexstine
Copy link
Contributor

@ntsekouras Reproduction steps:

  1. Open block inserter.
  2. Focus is placed in the search input.
  3. Press shift+tab and I start from the end of the block categories.

I think the issue is the roving tabindex is applied to the tab content, not the sidebar itself.

Thanks.

@ntsekouras ntsekouras force-pushed the try/inserter-search-inside-tabs branch from 9e6c65c to 464152b Compare October 27, 2022 07:13
@ntsekouras
Copy link
Contributor Author

  1. Open block inserter.
  2. Focus is placed in the search input.
  3. Press shift+tab and I start from the end of the block categories.

I think the issue is the roving tabindex is applied to the tab content, not the sidebar itself.

I couldn't reproduce in chrome, but I think that's an existing issue in trunk too.. Can you give it a go in trunk?

@@ -136,6 +136,7 @@ export function TabPanel( {
role="tabpanel"
id={ `${ selectedId }-view` }
className="components-tab-panel__tab-content"
tabIndex={ -1 }
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Include tabindex="-1" on enable a tabpanel to receive focus without putting the tabpanel in the page Tab focus sequence for keyboard users.

According to tabpanel role docs, this seems to be okay I think. -cc @ciampo

Copy link
Contributor

@ciampo ciampo Oct 27, 2022

Choose a reason for hiding this comment

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

Thank you for the ping! I must admit that I'm not super expert about TabPanel (the component pre-dates the start of my work on components, and I haven't really used it often so far), but the MDN docs seem quite clear.

What's the reason why you're adding that attribute specifically for this PR ? Do we want all TabPanel instances to have tabIndex = -1 ?

Best thing to do here would be to split changes to TabPanel to a separate PR, so that it can be discussed more in details

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The reason would be:

I think the issue is the roving tabindex is applied to the tab content, not the sidebar itself.

I'm not really sure if that's what we want either here or for the component and right now I'm reading and exploring. If we need a change like that eventually, I'll open a separate PR.

In general is really hard because different browsers have different behaviors for me right now and is baffling 😄

Copy link
Contributor

Choose a reason for hiding this comment

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

Opened an issue to track this separately #45390

Copy link
Contributor

Choose a reason for hiding this comment

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

@ntsekouras That is not the reason. The reason is, your PR changes the DOM order. In trunk, I can press tab once focus is placed in the search input and move in to the TabPanel. Because the focus is placed in the search input and the search input is wrapped with the constrained tabbing as part of the inserter, there is no way to get back to the tabs as those seem to be outside of the constrained tabbing area.

This is one of those things that needs to be fixed before your PR gets merged or we will end up making the inserter inaccessible. :(

If you do a fresh build of trunk, try the following.

  1. Open the inserter.
  2. Press tab.
  3. Focus is placed on the Blocks tab item as normal.

In your PR.

  1. Open the inserter.
  2. Notice how the search input receives focus but it is below the tabs in the DOM.
  3. Press shift+tab to move to the Blocks tab.
  4. You land at the bottom category of the inserter.

Copy link
Contributor

Choose a reason for hiding this comment

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

Ah, never mind. I think it will not matter for this PR. You can eventually get to the tabs, but it is a little hard.

Can someone open a follow-up issue to apply the constrained tabbing to the inserter sidebars and not the specific components themselves? This should help out a lot with this. That way the sidebar has the same roving tabindex no matter what tab is selected.

Aside from that, need to wait until the above issue for manual tab activation is implemented. Once that is done, I give A11Y sign off on this.

Copy link
Contributor Author

@ntsekouras ntsekouras Oct 31, 2022

Choose a reason for hiding this comment

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

It's still not 100% clear to me though what else I should do regarding the constraint tabbing issue you mention. Inserter sidebars use the useConstrainedTabbing hook and for me it seems we have an existing issue in trunk with composite navigation in some browsers like firefox.

Example:

  1. Open inserter and leave it to blocks tab
  2. Focus goes to search input
  3. Try to enter the block types list with tab
  4. Observe that you can't.

Do you have some specific solution in mind code wise?

Copy link
Contributor

Choose a reason for hiding this comment

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

@ntsekouras Not at this point. I just do not understand how it works right now. I am busy working on other issues.

@ntsekouras ntsekouras force-pushed the try/inserter-search-inside-tabs branch from c688472 to 7ee3513 Compare November 1, 2022 08:44
@@ -117,7 +117,7 @@ describe( 'Site Editor Performance', () => {
await canvas().click(
'[data-type="core/post-content"] [data-type="core/paragraph"]'
);
await insertBlock( 'Paragraph' );
await insertBlock( 'Paragraph', { checkSelectedTab: true } );
Copy link
Contributor Author

@ntsekouras ntsekouras Nov 1, 2022

Choose a reason for hiding this comment

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

This needs to be revisited for this PR as it will probably affect the perf results. With this PR the results are contained to the selected tab, so since we have patterns as the first tab in site editor, we have to first click to the blocks tab before inserting the block.. --cc @youknowriad @dmsnell

Copy link
Member

Choose a reason for hiding this comment

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

are you saying we need to add a step in the performance e2e tests so that the block inserter appears?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

yes

Copy link
Member

Choose a reason for hiding this comment

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

sounds good! I haven't touched anything inside the performance tests, but you are welcome to also tag me as a reviewer when you update them.

@ntsekouras
Copy link
Contributor Author

This seems to be blocked by an a11y issue mentioned by @alexstine . I think this is the same thing that exists on trunk and I created a new issue to figure this out.

@alexstine
Copy link
Contributor

@ntsekouras Thanks for putting this one on hold while the bigger A11Y issue is figured out.

@ntsekouras ntsekouras marked this pull request as draft June 29, 2023 13:28
@ntsekouras ntsekouras closed this Nov 12, 2023
@youknowriad youknowriad deleted the try/inserter-search-inside-tabs branch November 13, 2023 07:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Inserter The main way to insert blocks using the + button in the editing interface Needs Accessibility Feedback Need input from accessibility Needs Design Needs design efforts.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants