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

Switching pattern categories inserter to Tabs component with arrow key navigation #60257

Merged
merged 24 commits into from
Apr 19, 2024

Conversation

jeryj
Copy link
Contributor

@jeryj jeryj commented Mar 27, 2024

Fixes #60209

What?

Improves the accessibility and keyboard navigation of using the pattern categories list in the inserter.

Why?

The current implementation is cumbersome with too many tabstops and the panel is disconnected from the activating button, making it hard to switch between categories using a keyboard.

How?

Changes the structure of the pattern categories from a listbox of buttons that open a panel to Tabs implementation that considers all the categories as one tabstop with arrow keys to move between the categories.

Testing Instructions for Keyboard

  • Open Block inserter (in post editor and in site editor)
  • Select Pattern Tab
  • Tab to patten categories panel
  • Use arrows to navigate between the patterns
  • Select a pattern
  • Tab into patterns panel
  • Shift + Tab out
  • Focus should be on the selected category
  • Arrow between patterns and repeat switching between categories

Screenshots or screencast

Screen.Recording.2024-03-29.at.10.03.06.AM.mov

@jeryj jeryj requested a review from ellatrix as a code owner March 27, 2024 18:06
@jeryj jeryj changed the title WIP for switching patterns to tab navigation Switching patterns categories to tab navigation Mar 27, 2024
Copy link

github-actions bot commented Mar 27, 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: jeryj <jeryj@git.wordpress.org>
Co-authored-by: draganescu <andraganescu@git.wordpress.org>
Co-authored-by: scruffian <scruffian@git.wordpress.org>
Co-authored-by: getdave <get_dave@git.wordpress.org>
Co-authored-by: jameskoster <jameskoster@git.wordpress.org>
Co-authored-by: alexstine <alexstine@git.wordpress.org>

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

Copy link

github-actions bot commented Mar 27, 2024

Size Change: +455 B (0%)

Total Size: 1.75 MB

Filename Size Change
build/block-editor/content-rtl.css 4.51 kB +9 B (0%)
build/block-editor/content.css 4.5 kB +8 B (0%)
build/block-editor/index.min.js 256 kB +182 B (0%)
build/block-editor/style-rtl.css 15.7 kB +77 B (0%)
build/block-editor/style.css 15.7 kB +86 B (+1%)
build/block-library/index.min.js 218 kB +24 B (0%)
build/blocks/index.min.js 51.6 kB +12 B (0%)
build/components/index.min.js 222 kB -148 B (0%)
build/components/style-rtl.css 11.9 kB -7 B (0%)
build/components/style.css 11.9 kB -7 B (0%)
build/edit-post/classic-rtl.css 578 B -1 B (0%)
build/edit-post/classic.css 578 B -1 B (0%)
build/edit-post/index.min.js 18.2 kB -1.71 kB (-9%)
build/edit-post/style-rtl.css 4.24 kB -207 B (-5%)
build/edit-post/style.css 4.23 kB -208 B (-5%)
build/edit-site/index.min.js 225 kB -1.63 kB (-1%)
build/edit-site/style-rtl.css 13.9 kB -140 B (-1%)
build/edit-site/style.css 13.9 kB -145 B (-1%)
build/edit-widgets/index.min.js 17.9 kB +185 B (+1%)
build/editor/index.min.js 78.1 kB +3.21 kB (+4%)
build/editor/style-rtl.css 6.94 kB +377 B (+6%) 🔍
build/editor/style.css 6.94 kB +374 B (+6%) 🔍
build/patterns/index.min.js 6.47 kB +89 B (+1%)
build/preferences-persistence/index.min.js 2.06 kB +8 B (0%)
build/preferences/index.min.js 2.85 kB +26 B (+1%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 955 B
build/annotations/index.min.js 2.27 kB
build/api-fetch/index.min.js 2.32 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 578 B
build/block-directory/index.min.js 7.26 kB
build/block-directory/style-rtl.css 1.03 kB
build/block-directory/style.css 1.03 kB
build/block-editor/default-editor-styles-rtl.css 395 B
build/block-editor/default-editor-styles.css 395 B
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 133 B
build/block-library/blocks/audio/theme.css 133 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 415 B
build/block-library/blocks/button/editor.css 414 B
build/block-library/blocks/button/style-rtl.css 627 B
build/block-library/blocks/button/style.css 626 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 671 B
build/block-library/blocks/cover/editor.css 674 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 86 B
build/block-library/blocks/details/style.css 86 B
build/block-library/blocks/embed/editor-rtl.css 322 B
build/block-library/blocks/embed/editor.css 322 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 133 B
build/block-library/blocks/embed/theme.css 133 B
build/block-library/blocks/file/editor-rtl.css 326 B
build/block-library/blocks/file/editor.css 327 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 324 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 227 B
build/block-library/blocks/form-input/editor.css 227 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 340 B
build/block-library/blocks/form-submission-notification/editor.css 340 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 471 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/editor-rtl.css 947 B
build/block-library/blocks/gallery/editor.css 952 B
build/block-library/blocks/gallery/style-rtl.css 1.72 kB
build/block-library/blocks/gallery/style.css 1.72 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 647 B
build/block-library/blocks/group/editor.css 647 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 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 878 B
build/block-library/blocks/image/editor.css 878 B
build/block-library/blocks/image/style-rtl.css 1.6 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 133 B
build/block-library/blocks/image/theme.css 133 B
build/block-library/blocks/image/view.min.js 1.54 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 306 B
build/block-library/blocks/media-text/editor.css 305 B
build/block-library/blocks/media-text/style-rtl.css 505 B
build/block-library/blocks/media-text/style.css 503 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 668 B
build/block-library/blocks/navigation-link/editor.css 669 B
build/block-library/blocks/navigation-link/style-rtl.css 259 B
build/block-library/blocks/navigation-link/style.css 257 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.26 kB
build/block-library/blocks/navigation/style.css 2.25 kB
build/block-library/blocks/navigation/view.min.js 1.03 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-content/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 729 B
build/block-library/blocks/post-featured-image/editor.css 727 B
build/block-library/blocks/post-featured-image/style-rtl.css 342 B
build/block-library/blocks/post-featured-image/style.css 342 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 409 B
build/block-library/blocks/post-template/style.css 408 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 354 B
build/block-library/blocks/pullquote/style.css 353 B
build/block-library/blocks/pullquote/theme-rtl.css 174 B
build/block-library/blocks/pullquote/theme.css 174 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/view.min.js 958 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 B
build/block-library/blocks/quote/theme-rtl.css 233 B
build/block-library/blocks/quote/theme.css 235 B
build/block-library/blocks/read-more/style-rtl.css 140 B
build/block-library/blocks/read-more/style.css 140 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 690 B
build/block-library/blocks/search/style.css 689 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 478 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 239 B
build/block-library/blocks/separator/style.css 239 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 323 B
build/block-library/blocks/shortcode/editor.css 323 B
build/block-library/blocks/site-logo/editor-rtl.css 801 B
build/block-library/blocks/site-logo/editor.css 801 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 676 B
build/block-library/blocks/social-links/editor.css 675 B
build/block-library/blocks/social-links/style-rtl.css 1.48 kB
build/block-library/blocks/social-links/style.css 1.48 kB
build/block-library/blocks/spacer/editor-rtl.css 350 B
build/block-library/blocks/spacer/editor.css 350 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 395 B
build/block-library/blocks/table/editor.css 395 B
build/block-library/blocks/table/style-rtl.css 639 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 152 B
build/block-library/blocks/table/theme.css 152 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 431 B
build/block-library/blocks/template-part/editor.css 431 B
build/block-library/blocks/template-part/theme-rtl.css 107 B
build/block-library/blocks/template-part/theme.css 107 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 185 B
build/block-library/blocks/video/style.css 185 B
build/block-library/blocks/video/theme-rtl.css 133 B
build/block-library/blocks/video/theme.css 133 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.4 kB
build/block-library/editor.css 12.4 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.8 kB
build/block-library/style.css 14.8 kB
build/block-library/theme-rtl.css 707 B
build/block-library/theme.css 713 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/commands/index.min.js 15.2 kB
build/commands/style-rtl.css 953 B
build/commands/style.css 951 B
build/compose/index.min.js 12.6 kB
build/core-commands/index.min.js 2.77 kB
build/core-data/index.min.js 72.5 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.36 kB
build/customize-widgets/style.css 1.36 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 9 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.65 kB
build/edit-widgets/style-rtl.css 4.16 kB
build/edit-widgets/style.css 4.16 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.07 kB
build/format-library/style-rtl.css 493 B
build/format-library/style.css 492 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.58 kB
build/interactivity/debug.min.js 16.2 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.67 kB
build/interactivity/index.min.js 13 kB
build/interactivity/navigation.min.js 1.17 kB
build/interactivity/query.min.js 740 B
build/interactivity/router.min.js 1.36 kB
build/interactivity/search.min.js 618 B
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.3 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.11 kB
build/list-reusable-blocks/style-rtl.css 851 B
build/list-reusable-blocks/style.css 851 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 948 B
build/nux/index.min.js 1.57 kB
build/nux/style-rtl.css 748 B
build/nux/style.css 744 B
build/patterns/style-rtl.css 595 B
build/patterns/style.css 595 B
build/plugins/index.min.js 1.8 kB
build/preferences/style-rtl.css 710 B
build/preferences/style.css 712 B
build/primitives/index.min.js 975 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 1 kB
build/react-i18n/index.min.js 623 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.73 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10 kB
build/router/index.min.js 1.88 kB
build/server-side-render/index.min.js 1.96 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 2.03 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.74 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.7 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 957 B
build/warning/index.min.js 249 B
build/widgets/index.min.js 7.23 kB
build/widgets/style-rtl.css 1.17 kB
build/widgets/style.css 1.17 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

Copy link

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

@jeryj jeryj self-assigned this Mar 28, 2024
@jeryj jeryj added [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). [Feature] Inserter The main way to insert blocks using the + button in the editing interface [Type] Code Quality Issues or PRs that relate to code quality labels Mar 28, 2024
@jeryj jeryj force-pushed the try/pattern-category-arrows branch from fa581ff to 6dc5836 Compare March 29, 2024 13:43
@jeryj jeryj changed the title Switching patterns categories to tab navigation Switching patterns categories to Tabs component with arrow key navigation Mar 29, 2024
@jeryj jeryj changed the title Switching patterns categories to Tabs component with arrow key navigation Switching pattern categories inserter to Tabs component with arrow key navigation Mar 29, 2024
@jeryj
Copy link
Contributor Author

jeryj commented Mar 29, 2024

There's a bug somewhere where:

  • if a block is selected
  • a pattern category is clicked
  • the inserter closes and focus goes to the block

@draganescu draganescu added the Needs Design Feedback Needs general design feedback. label Apr 1, 2024
@draganescu
Copy link
Contributor

I added the needs design feedback as I am not sure if opening the 1st category directly is a good interaction. I fear people won't bother checking out the other categories and will assume that what has opened are all of the patterns.

Copy link
Contributor

@draganescu draganescu left a comment

Choose a reason for hiding this comment

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

I tested this and I think it's a big improvement:

  • the focus remains on the selected category
  • the up and down arrows move selection to a new category
  • the list of categories does not scroll on chaning categories

The current implementation is quite unpredictable and even with the mouse the focus capture by the category filter button is disorientating.

@jameskoster
Copy link
Contributor

I'm also not convinced about auto-opening the first category. Probably one to extract and explore in detail separately?

@jeryj
Copy link
Contributor Author

jeryj commented Apr 2, 2024

Regarding the pattern category open or closed automatically...

Either I'm doing it wrong, or there is a bug where you can't have the first item of the tab panel category focused without also being active. I've asked the components team about this behavior.

I fear people won't bother checking out the other categories and will assume that what has opened are all of the patterns.

Isn't the All tab all of patterns in a paginated list?

@scruffian
Copy link
Contributor

On this PR, the first pattern category is open when the top level pattern tab is selected.

This seems to no longer be the case in this PR

@@ -215,6 +191,9 @@ function InserterMenu(
! delayedFilterValue &&
selectedMediaCategory;

// When the pattern panel is showing, we want to use zoom out mode
useZoomOut( showPatternPanel );
Copy link
Contributor

Choose a reason for hiding this comment

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

Why have we moved this here, rather than keeping it inside PatternCategoryPreviewPanel?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Before, the PatternCategoryPreviewPanel was mounted and then the patterns switched out inside of it. Now, each panel is its own component (via the tabs component). So, if we left it within PatternCategoryPreviewPanel it would rerun the hook each time you switched categories, toggling between zoom out and edit. By moving it up a level we can preserve the right mode.

@jeryj
Copy link
Contributor Author

jeryj commented Apr 5, 2024

This seems to no longer be the case in this PR

Yup - changed it yesterday since that's the behavior people think will be better. Forgot to update the PR description. Current status is waiting on response from the components team about how to move focus to the first selected tab but not activate it.

@draganescu draganescu removed the Needs Design Feedback Needs general design feedback. label Apr 5, 2024
If defaultSelectedId is undefined, it will automatically set the first tab as selected.
@jeryj jeryj force-pushed the try/pattern-category-arrows branch from d7c42bc to b7c495e Compare April 16, 2024 15:37
@jeryj
Copy link
Contributor Author

jeryj commented Apr 16, 2024

The behavior of the patterns sidebar now matches trunk. You have to press enter on your selected tab to see the patterns for that category.

Copy link
Contributor

@getdave getdave left a comment

Choose a reason for hiding this comment

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

Thanks for working on consistency in the editor 👍

There are a lot of changes in this PR which meant that I found it quite hard to review. That said, I recognise that this is completely transplanting one UI component for another and so I guess there was a need for a fair amount of small changes across a lot of files to facilitate this. If there is a way to break this down it might be better to land in smaller chunks but I appreciate that might not be practical.

Some things I noticed:

  • There doesn't appear to be any visual focus on the pattern items. Did we loose this?
Video: no visual focus
Screen.Capture.on.2024-04-17.at.10-27-08.mp4
  • Unsure if it's related but the animation to enter zoom out mode when select a pattern category is jarring. If it's not a bug in this PR it needs to have an Issue to track it because it's noticeable.
Video: janky animation
Screen.Capture.on.2024-04-17.at.10-29-40.mp4
  • I expected to be able to use the right arrow key to move into the pattern category. Instead I had to hit enter. I'm not sure if it's the correct paradigm but it felt natural to me that if I'm using arrows to move up and down between categories I should also be able to use the arrow to enter the category itself.
  • Once I select a pattern category with ENTER I need to hit TAB to move into the panel. Is that right? It felt as though focus should be auto-transferred. I noticed this comment so I assume that's expected behaviour.

Overall this is better than what we have on trunk right now. If we can sort the visual focus for keyboard I'd be ok with merging and iterating.

) }
</MobileTabNavigation>
) }
{ showPatternsExplorer && (
<PatternsExplorerModal
initialCategory={ initialCategory }
initialCategory={ selectedCategory || categories[ 0 ] }
Copy link
Contributor

Choose a reason for hiding this comment

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

Are categories guaranteed to exist / be an array?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I believe so. I didn't change how categories is used. I matched what trunk did.

Comment on lines -23 to -36
const container = useRef();

useEffect( () => {
const timeout = setTimeout( () => {
const [ firstTabbable ] = focus.tabbable.find( container.current );
firstTabbable?.focus();
} );
return () => clearTimeout( timeout );
}, [ category ] );

// Move to zoom out mode when this component is mounted
// and back to the previous mode when unmounted.
useZoomOut();

Copy link
Contributor

Choose a reason for hiding this comment

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

Can you explain why it was ok to remove all this code? It seems it was handling zoom out and autofocus.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This did handle autofocus and zoom out. I'd like to remove autofocus, as none of the other tab components move focus into the panel, nor is it mentioned on the tabs pattern ARIA guide. I played around with it a bit on the keyboard and quite liked not moving autofocus for being able to activate and see the patterns in a category without committing to the category. It makes browsing categories a lot easier IMO.

The zoom out mode hook had to be moved up a level to the menu.js.

@@ -223,8 +202,50 @@ function InserterMenu(
setSelectedTab( value );
};

const patternsTab = useMemo(
Copy link
Contributor

Choose a reason for hiding this comment

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

Can you explain the choice to useMemo here?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It was memoized before: https://github.com/WordPress/gutenberg/pull/60257/files#diff-2745181e57f35c49a91ec773fd2b1740c75f87b0f74efb857dd7a08a90b064e7L158.

I can't remember why I moved it down in the file though. I'll see if I can move it closer to its previous position so that relationship in git is clearer.

packages/block-editor/src/hooks/use-zoom-out.js Outdated Show resolved Hide resolved
Comment on lines +1035 to +1038
_Parameters_

- _zoomOut_ `boolean`: If we should enter into zoomOut mode or not

Copy link
Contributor

Choose a reason for hiding this comment

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

Can you help me understand why this change is part of this PR? What required the addition of this new param?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Previously the useZoomOut hook toggled between zoom in/out mode each time it ran. Passing a param of true/false allows us to intentionally choose if we want to use zoom out mode or not.

This param wasn't necessary in the previous set-up because the pattern category panel would unmount (turning zoom out mode off) then re mount a new category (turning zoom out mode back on). There's more context in this comment.

@jeryj
Copy link
Contributor Author

jeryj commented Apr 18, 2024

There doesn't appear to be any visual focus on the pattern items. Did we loose this?

Nope, it's missing on trunk too. Created an issue: #60872

Unsure if it's related but the animation to enter zoom out mode when select a pattern category is jarring. If it's not a bug in this PR it needs to have an Issue to track it because it's noticeable.

Also the same animation on trunk.

I expected to be able to use the right arrow key to move into the pattern category. Instead I had to hit enter. I'm not sure if it's the correct paradigm but it felt natural to me that if I'm using arrows to move up and down between categories I should also be able to use the arrow to enter the category itself.

I can see what you mean, but using focus to move into tabs isn't a standard pattern. There was talk about making this into a menu instead in the future. Using the arrows in that way would align more with menu pattern semantics. The tab semantics don't expect an arrow into the panel interaction though.

Once I select a pattern category with ENTER I need to hit TAB to move into the panel. Is that right? It felt as though focus should be auto-transferred. I noticed #60257 (comment) so I assume that's expected behaviour.

Explained my take on removing autofocus here: #60257 (comment)

Overall this is better than what we have on trunk right now. If we can sort the visual focus for keyboard I'd be ok with merging and iterating.

Let's merge, as visual focus is an issue on trunk as well. The issue is created (#60872) and I'd rather not expand this PR.

<div className="block-editor-inserter__menu">
<div
className={ classnames( 'block-editor-inserter__menu', {
'show-panel': showPatternPanel,
Copy link
Contributor

Choose a reason for hiding this comment

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

I don't understand why this class name is show-panel and the toggle bool is showPatternPanel - shouldn't the class be about pattern panel as well?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I left it generic, as the panel is a fly out of the menu for anything to get put into. For example, the media tab should get changed to this pattern as well. We could also add a secondary class that says it's a pattern panel if needed.

Copy link
Contributor

@draganescu draganescu left a comment

Choose a reason for hiding this comment

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

When switching to a category the whole sidebar is animated again this time with the preview open. It seems unrelated to this PR?

Did we get a tentative 🆗 from @WordPress/gutenberg-components team?

@jeryj
Copy link
Contributor Author

jeryj commented Apr 19, 2024

Did we get a tentative 🆗 from @WordPress/gutenberg-components team?

Yes, the new active id fallback behavior was approved in #60681 and approval for using the tabs here via #60573 (review)

@jeryj
Copy link
Contributor Author

jeryj commented Apr 19, 2024

When switching to a category the whole sidebar is animated again this time with the preview open. It seems unrelated to this PR?

I see what you mean. It's on Trunk too.

@jeryj jeryj merged commit dcbccfb into trunk Apr 19, 2024
64 checks passed
@jeryj jeryj deleted the try/pattern-category-arrows branch April 19, 2024 14:39
@github-actions github-actions bot added this to the Gutenberg 18.2 milestone Apr 19, 2024
@youknowriad
Copy link
Contributor

Did you consider looking at the "Media" tab as well which I believe was modeled to match the patterns inserter. It would be weird to have two different ways of implementing the same UI.

@youknowriad
Copy link
Contributor

Also @ntsekouras might be interested in this PR as well.

@jeryj
Copy link
Contributor Author

jeryj commented Apr 19, 2024

Did you consider looking at the "Media" tab as well which I believe was modeled to match the patterns inserter. It would be weird to have two different ways of implementing the same UI.

@youknowriad - Yes, I think they should share the same interactions.

@ntsekouras
Copy link
Contributor

@youknowriad - Yes, I think they should share the same interactions.

That sounds great! I'm happy to help with reviews to apply it in media tab for consistency. It should be a very similar changeset.

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 [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). [Type] Code Quality Issues or PRs that relate to code quality
Projects
Development

Successfully merging this pull request may close these issues.

Improve Keyboard Navigation on Side Panel Inserter
8 participants