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

Add a command center to the site editor. #49330

Merged
merged 37 commits into from
Apr 6, 2023
Merged

Add a command center to the site editor. #49330

merged 37 commits into from
Apr 6, 2023

Conversation

youknowriad
Copy link
Contributor

@youknowriad youknowriad commented Mar 24, 2023

Alternative to #49152
see #48457

What?

The idea of this PR is to bootstrap a command center for WordPress that can be the home of any random command be it:

  • Navigating in the site editor
  • Manipulating the content if we're within an editor
  • Navigating in WPAdmin
  • ...

In this initial PR, the goal is to build the APIs and components for that command center but not necessarily to implement all the commands.

Here are the requirements guiding my work:

  • The command center can be loaded in any WPAdmin page.
  • The commands and the command center are independent: Commands can be registered dynamically depending on the context.
  • Some small hierarchy of commands to be able to organize the items.
  • Allowing dynamic searches for commands.

How?

  • I've added a new @wordpress/commands package that serves as a store for the registered commands and provides the components to render the command center.
  • I'm using cmdk package. There are alternatives but this one seem to be reasonable and accepted by the JS community. It's an implementation detail though and can be switched at any point.
  • Built an API on top of the lower level package to register static and dynamic commands to meet the requirements above.

Todo

  • Polish the design
  • Add minimum set of commands
  • Add documentation
  • Add tests
  • Validate the API

Testing Instructions

1- Open the site editor
2- Type cmd + k
3- Use the command center.

@youknowriad youknowriad added [Type] Feature New feature to highlight in changelogs. [Feature] Site Editor Related to the overarching Site Editor (formerly "full site editing") labels Mar 24, 2023
@youknowriad youknowriad self-assigned this Mar 24, 2023
@github-actions
Copy link

github-actions bot commented Mar 24, 2023

Size Change: +783 B (0%)

Total Size: 1.37 MB

Filename Size Change
build/edit-site/index.min.js 64.2 kB +778 B (+1%)
build/private-apis/index.min.js 942 B +5 B (+1%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/annotations/index.min.js 2.78 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 483 B
build/block-directory/index.min.js 7.2 kB
build/block-directory/style-rtl.css 1.04 kB
build/block-directory/style.css 1.04 kB
build/block-editor/content-rtl.css 4.11 kB
build/block-editor/content.css 4.1 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-editor/index.min.js 203 kB
build/block-editor/style-rtl.css 14.6 kB
build/block-editor/style.css 14.6 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 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 138 B
build/block-library/blocks/audio/theme.css 138 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 91 B
build/block-library/blocks/avatar/style.css 91 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 587 B
build/block-library/blocks/button/editor.css 587 B
build/block-library/blocks/button/style-rtl.css 628 B
build/block-library/blocks/button/style.css 627 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 409 B
build/block-library/blocks/columns/style.css 409 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 649 B
build/block-library/blocks/cover/editor.css 651 B
build/block-library/blocks/cover/style-rtl.css 1.61 kB
build/block-library/blocks/cover/style.css 1.6 kB
build/block-library/blocks/details-summary/editor-rtl.css 65 B
build/block-library/blocks/details-summary/editor.css 65 B
build/block-library/blocks/details-summary/style-rtl.css 61 B
build/block-library/blocks/details-summary/style.css 61 B
build/block-library/blocks/details/style-rtl.css 54 B
build/block-library/blocks/details/style.css 54 B
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 138 B
build/block-library/blocks/embed/theme.css 138 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 269 B
build/block-library/blocks/file/style.css 270 B
build/block-library/blocks/file/view.min.js 353 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 984 B
build/block-library/blocks/gallery/editor.css 988 B
build/block-library/blocks/gallery/style-rtl.css 1.55 kB
build/block-library/blocks/gallery/style.css 1.55 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 654 B
build/block-library/blocks/group/editor.css 654 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 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 830 B
build/block-library/blocks/image/editor.css 829 B
build/block-library/blocks/image/style-rtl.css 652 B
build/block-library/blocks/image/style.css 652 B
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
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 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 716 B
build/block-library/blocks/navigation-link/editor.css 715 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 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation/editor-rtl.css 2.13 kB
build/block-library/blocks/navigation/editor.css 2.14 kB
build/block-library/blocks/navigation/style-rtl.css 2.22 kB
build/block-library/blocks/navigation/style.css 2.21 kB
build/block-library/blocks/navigation/view-modal.min.js 2.81 kB
build/block-library/blocks/navigation/view.min.js 447 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 401 B
build/block-library/blocks/page-list/editor.css 401 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 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 588 B
build/block-library/blocks/post-featured-image/editor.css 586 B
build/block-library/blocks/post-featured-image/style-rtl.css 322 B
build/block-library/blocks/post-featured-image/style.css 322 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 281 B
build/block-library/blocks/post-template/style.css 281 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 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 335 B
build/block-library/blocks/pullquote/style.css 335 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 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 463 B
build/block-library/blocks/query/editor.css 463 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 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 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 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 408 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 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 489 B
build/block-library/blocks/site-logo/editor.css 489 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 359 B
build/block-library/blocks/spacer/editor.css 359 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 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 651 B
build/block-library/blocks/table/style.css 650 B
build/block-library/blocks/table/theme-rtl.css 157 B
build/block-library/blocks/table/theme.css 157 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 404 B
build/block-library/blocks/template-part/editor.css 404 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 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 179 B
build/block-library/blocks/video/style.css 179 B
build/block-library/blocks/video/theme-rtl.css 139 B
build/block-library/blocks/video/theme.css 139 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.12 kB
build/block-library/common.css 1.12 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.7 kB
build/block-library/editor.css 11.7 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 204 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 12.8 kB
build/block-library/style.css 12.8 kB
build/block-library/theme-rtl.css 698 B
build/block-library/theme.css 703 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 51.1 kB
build/commands/index.min.js 14.7 kB
build/commands/style-rtl.css 1.1 kB
build/commands/style.css 1.09 kB
build/components/index.min.js 208 kB
build/components/style-rtl.css 11.7 kB
build/components/style.css 11.7 kB
build/compose/index.min.js 12.4 kB
build/core-data/index.min.js 16.3 kB
build/customize-widgets/index.min.js 12.2 kB
build/customize-widgets/style-rtl.css 1.41 kB
build/customize-widgets/style.css 1.41 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 8.68 kB
build/date/index.min.js 40.4 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.72 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/index.min.js 34.9 kB
build/edit-post/style-rtl.css 7.59 kB
build/edit-post/style.css 7.58 kB
build/edit-site/style-rtl.css 10.1 kB
build/edit-site/style.css 10.1 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.56 kB
build/edit-widgets/style.css 4.56 kB
build/editor/index.min.js 45.9 kB
build/editor/style-rtl.css 3.49 kB
build/editor/style.css 3.48 kB
build/element/index.min.js 4.95 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.26 kB
build/format-library/style-rtl.css 557 B
build/format-library/style.css 556 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.79 kB
build/keycodes/index.min.js 1.94 kB
build/list-reusable-blocks/index.min.js 2.14 kB
build/list-reusable-blocks/style-rtl.css 865 B
build/list-reusable-blocks/style.css 865 B
build/media-utils/index.min.js 2.99 kB
build/notices/index.min.js 977 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.23 kB
build/preferences/index.min.js 1.35 kB
build/primitives/index.min.js 960 B
build/priority-queue/index.min.js 1.52 kB
build/react-i18n/index.min.js 702 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.75 kB
build/reusable-blocks/index.min.js 2.26 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 2.09 kB
build/shortcode/index.min.js 1.52 kB
build/style-engine/index.min.js 1.55 kB
build/token-list/index.min.js 650 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.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 1.09 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.3 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@jasmussen
Copy link
Contributor

A quick spin:

command bar

This feels really nice. Props to @SaxonF for initial work. Let's do a design pass on the modal that opens (CC: @jameskoster as well) so it feels at home with the componentry. Outside of that, in addition to the keyboard shortcut, we need a button to invoke this. Maybe that can be the search icon in the site hub:

Screenshot 2023-03-24 at 11 08 46

There are some of the flows we can hopefully clarify a little with UI, placeholders, context, help text, focus styles etc. This GIF shows searching both content and commands, and illustrating some of the hiccips:

search

  • First I searched for pages, but I hadn't drilled down to the page filter yet. Unless we enable page/content searching at the top level, we could potentially show some help text, a la "no commands found" — but with a better term than "commands".
  • If I do search for "Navigate", currently the only filter available, the text stays in place and then immediately filters the page search results. The net effect is that it looks like an error. I had to delete the text on the 2nd level to start searching pages. What's the best practice here?

@jameskoster
Copy link
Contributor

Thanks for the ping, I'm excited to dive into this next week!

Maybe that can be the search icon in the site hub

I agree on the location. Search icon may be fine to start but this feature could eventually grow far beyond searching, so it might be worth exploring some different (maybe more abstract) options.

A slightly random thought and probably not something for this PR; it would be interesting if the input could entertain dictation, so this interface can in the future become a way to 'talk to WordPress'.

@SaxonF
Copy link
Contributor

SaxonF commented Mar 27, 2023

this feature could eventually grow far beyond searching, so it might be worth exploring some different (maybe more abstract) options.

+1. If we launch with Create page or Create post , which I think we should, it already goes beyond search. is often used but maybe something more magical :)

We can probably just copy over stylesheet from #49152 if we wanted to give this branch a stronger starting point, but can also just start fresh.

@youknowriad
Copy link
Contributor Author

I've added commands to navigate to "new page" or "new post". Thought I did it by actually navigating to the post editors page which leaves the site editor. I think there are arguments to be made for both approaches though.

@youknowriad
Copy link
Contributor Author

Also if you folks want to push a design/CSS changes here please feel free to do so.

@github-actions
Copy link

github-actions bot commented Mar 27, 2023

Flaky tests detected in 55e94f7.
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/4627378477
📝 Reported issues:

@jameskoster
Copy link
Contributor

I spent some time playing with this today. Additional the the feedback already shared, here's some other thoughts / questions:

  • Clicking outside the modal should close it.
  • It would need to be felt out to be sure but I suspect that selecting an item (e.g. Page) should close the modal too.
  • Is it worth trying a scrim to aid focus? A blur would be nice, but I know there are performance issue so it may have to be a simple overlay.
  • We should add a placeholder to the input with suggestions. Something like: "Search for posts and pages, or try a command like Create".
  • Should the commands be universally accessible? I can only find the create page / post commands when searching at the root.
  • If you drill into 'Navigate to a page' then there's no way to get back to the root except for refreshing the entire page. We either need a UI to get back to the root, or make cmdk always expose the root on-open.
  • 'Create' flows leading to post editor felt unexpected but may be a necessary interim until we figure out Experimenting with ability to focus on editing the post or editing the template #49292, and other missing features like drafts / revisions.
  • I can only invoke the command center when the dark material is visible in the Site Editor. I'm not sure how trivial it is to make it accessible in other areas, but it should probably be accessible in the full-screen editor, and the post editor?
  • A search for 'Index' returned nothing. It feels like templates (and parts) should be included.
  • We should design a 'no results' state.
  • The dedicated 'Navigate to a page' view only really seems useful when there are very few pages at the site. I think we should encourage folks to search rather than navigate per-post-type list views – they probably wont scale very well.
    • Displaying n recent destinations (posts/pages/templates for now) at the root may be useful shortcuts.

@youknowriad
Copy link
Contributor Author

Made some tweaks here. I've used or own Modal component to allow focus outside to close. I borrowed some CSS from the other branch too.

@SaxonF
Copy link
Contributor

SaxonF commented Mar 28, 2023

If you drill into 'Navigate to a page' then there's no way to get back to the root except for refreshing the entire page. We either need a UI to get back to the root, or make cmdk always expose the root on-open.

Using a back arrow in #49152 which seemed consistent with how other panels work.

Thought I did it by actually navigating to the post editors page which leaves the site editor. I think there are arguments to be made for both approaches though.

If this ships with 6.3 along with some of the content vs template editing changes we are working on, I think we should keep people within the site editor.

@youknowriad
Copy link
Contributor Author

If this ships with 6.3 along with some of the content vs template editing changes we are working on, I think we should keep people within the site editor.

The page for creating a "post" in the site editor is a bit ackward to be honest, it's not really clear that you're actually creating a post while we already have a nice page that users are familiar with to create posts and pages. As things stand, personally, I feel it's better to just redirect them to the page they're familiar with but I'm not strongly opposed to improving the experience in the site editor either.

@jameskoster
Copy link
Contributor

I'd agree that keeping folks in the site editor is the long-term objective. But for the purpose of this PR it may not be ideal. We'll be exposing folks to the content/template issues, and excluding key functionality like drafts / revisions.

Maybe we link to the post editor for now. As a follow-up task we can list the gaps we need to close and prioritise for 6.3?

Alternatively, if we're worried about the disconnect we could keep the content creation commands on ice until those gaps are closed?

@jasmussen
Copy link
Contributor

I'd agree that keeping folks in the site editor is the long-term objective. But for the purpose of this PR it may not be ideal. We'll be exposing folks to the content/template issues, and excluding key functionality like drafts / revisions.

I'd generally agree with this sentiment, notably the part about keeping things separate in the near term.

But also add a little nuance: while under the hood the editors could be the same, I think it's useful for there to be a "Post-first" entry point, or a "Page-first" entry point for an editor. When I'm in a busy newsroom, I probably never want to see a header and a footer. And when I'm editing page-first, I don't want to have to worry about ensuring all my blocks are inside the Post Content block, lest they become global. If we truly are going to keep everything inside a single editor, those flows need to be super solid first.

@youknowriad
Copy link
Contributor Author

I can only invoke the command center when the dark material is visible in the Site Editor. I'm not sure how trivial it is to make it accessible in other areas, but it should probably be accessible in the full-screen editor, and the post editor?

It is accessible in the site editor in edit mode too but when RichText is selected, ctrl + k is bound to the link format so it doesn't trigger the command centeR.

A search for 'Index' returned nothing. It feels like templates (and parts) should be included.

We need to decide whether we want "Search pages" and "search templates" to be different or not, same for "search posts".


I made several updates based on your feedback, What's the next steps here?

@jameskoster
Copy link
Contributor

We need to decide whether we want "Search pages" and "search templates" to be different or not, same for "search posts".

My inclination is that we should focus the flows around commands rather than navigation. Otherwise I fear we're going to end up re-creating the main navigation drilldown in the command center and confusing users about where to go to do different tasks.

With that in mind, plus the fact I don't think it would scale all that well, I don't think we should include things like "Navigate to a page" as suggestions. Instead the default placeholder can instruct the user to search for content, or try commands.

To delineate between different post types / taxonomies in results we could try something like the suggested design for link control:

Screenshot 2023-03-29 at 12 08 21

What's the next steps here?

  • Some styling tweaks, I'll try and push something today.
  • Would it be easy to close the command center when clicking outside, or pressing escape?
  • A short 'no results found' message might help here:

Screenshot 2023-03-29 at 12 12 28

@youknowriad
Copy link
Contributor Author

With that in mind, plus the fact I don't think it would scale all that well, I don't think we should include things like "Navigate to a page" as suggestions. Instead the default placeholder can instruct the user to search for content, or try commands.

That has a big impact on the API for the commands package. So we need to decide here. We can always start with a private API though while we figure things out.

Would it be easy to close the command center when clicking outside, or pressing escape?

It should be already the case

@jameskoster
Copy link
Contributor

jameskoster commented Mar 29, 2023

I pushed some style updates. I'm not suggesting this is a final work, but it brings things a bit closer to the rest of the UI:

Screenshot 2023-03-29 at 14 46 24

It can serve as a blank canvas from which we refine.

A couple of other observations on general UX:

  1. Selecting an item like a page navigates to that page, but the modal remains open – it would be good to try closing it.
  2. Selecting an item like a page navigates to that page with the details panel open. This is a bit unexpected if you're in the full-screen editor. I'd expect that context to remain.

@youknowriad
Copy link
Contributor Author

I've updated the PR with a new architecture (no nested tree) and added posts, templates and template parts. Let me know how it feels.

@jameskoster
Copy link
Contributor

I'm interested to hear what others think, but the full list of all-the-things that you see on-open feels a bit overwhelming. I suspect the usefulness will diminish quite quickly on large sites with 000's of posts. I'd lean towards only suggesting commands here:

Screenshot 2023-03-30 at 14 03 04

We can try some other placeholders to inform folks they can search for content.

Other than that:

  • We're still missing a "no results found" state
  • Can we try closing the modal when you click an item? I noticed this happens sometimes, but not all the time.
  • If I cmdk in the full screen editor then select an item like a page, I'd expect to stay in the full screen editor. Possible to try?

Then there are a few items that might need to be follow-ups:

@mtias
Copy link
Member

mtias commented Mar 30, 2023

@jameskoster it depends largely on the context in which you invoke this.

@jameskoster
Copy link
Contributor

That's true. If you're in the full-screen editor working on a page, then it might be useful to see other recent pages, and the underling page template listed as suggestions. Or if you're at the root of the Design section then perhaps creating a new page or template would be more helpful.

Should we figure out those contexts / suggestions for this PR, or separately? If separate, then in the mean time do we continue to list all-the-things in lieu of context?

@youknowriad
Copy link
Contributor Author

Since there are still different opinions on how to organize and design the command center, and also in terms of behavior, I've added an "experiment" flag to the Gutenberg experiments page to enable the command center. This will allow us to ship this and iterate without impacting the users yet. We can remove the experiment flag when we think on the state of the command center is ready.

@youknowriad
Copy link
Contributor Author

@ntsekouras I've fixed the duplicated selected item issue.
@richtabor I've added the "no title" case.

Copy link
Contributor

@ntsekouras ntsekouras left a comment

Choose a reason for hiding this comment

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

Sounds good to land and iterate, thank you Riad! By adding more commands based on context we'll also see if the current API is a good fit and if we'll preserve the hooks or find/use an alternative.

@youknowriad youknowriad merged commit 14f1ea8 into trunk Apr 6, 2023
@youknowriad youknowriad deleted the add/commands branch April 6, 2023 12:07
@github-actions github-actions bot added this to the Gutenberg 15.6 milestone Apr 6, 2023
await admin.visitSiteEditor();
} );

test.skip( 'Open the command center and navigate to the page create page', async ( {
Copy link
Member

Choose a reason for hiding this comment

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

Why do we want to add these skipped tests? Perhaps adding comments above would help?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Because they're hidden behind a feature flag right now and we'll be removing the feature flag soon. I preferred to have the tests in place to allow us to iterate and I verified that the tests pass.

I tried enabling the feature flag using the global variable but it doesn't work because you need to trigger a "rerender". I think ideally we need utils in the e2e tests to enable and disable feature flags (navigate to the options screen and enable the flags), I'm pretty sure we had these at some point.

Copy link
Member

Choose a reason for hiding this comment

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

Still, a comment above would be helpful for the readers (or reviewers) :).

navigate to the options screen and enable the flags

It's recommended to create this util as a requestUtil to speed up the process. You are welcome to create one!

@alexstine
Copy link
Contributor

@youknowriad Could you please create a follow-up and use the keycodes package to make this cross-platform? This is currently testable on Mac only due to the event.metaKey. If there is a way to make it work on Windows, I have not found it.

@youknowriad
Copy link
Contributor Author

@alexstine good call 👍

@ndiego ndiego added [Type] Enhancement A suggestion for improvement. and removed [Type] Enhancement A suggestion for improvement. labels Apr 11, 2023
@annezazu annezazu mentioned this pull request Apr 17, 2023
57 tasks
@afercia
Copy link
Contributor

afercia commented May 22, 2023

Looks like the cmdk combobox is not accessible. I'll create a new issue.

@alexstine
Copy link
Contributor

I could not even test this on Windows before this PR was merged. In a perfect world, this should not have gone into trunk without accessibility checks, sigh. This is also a 3rd-party component, hopefully it is fixable. Please ping me on the issue @afercia . This fell off the radar for me. :(

@afercia
Copy link
Contributor

afercia commented Jul 21, 2023

In a perfect world, this should not have gone into trunk without accessibility checks, sigh.

@alexstine I'd agree this shouldn't have been released but that's not under my control. The broken accessibility of the combobox pattern provided by the cmdk library is very evident: It misses the aria-activedescendant attribute. A very quick testing with any screen reader would have been sufficient to find out this doesn't work at all for a11y. I'd also argue that we should not introduce in Gutenberg external packages or libraries that come with broken accessibility. It happened, and it's unfortunate.

I reported some of the main problems in a new issue at #50846
The command center does have more accessibility problems and I tried to report them in other issues.

@richtabor
Copy link
Member

Connecting the dots here: #52930

"wordpress",
"gutenberg",
"commands",
"k"
Copy link
Member

Choose a reason for hiding this comment

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

Hey @youknowriad 👋 What does this "k" keyword mean? Noticed this when reviewing #52987, when looking up what are the dependencies of the commands packages 🙂

Copy link
Contributor Author

Choose a reason for hiding this comment

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

most packages call these cmd+k menus I guess :)

Copy link
Member

Choose a reason for hiding this comment

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

I see, so it's not a typo 🙂 I haven't found any other packages using this keyword though.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fine to remove.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Site Editor Related to the overarching Site Editor (formerly "full site editing") Needs User Documentation Needs new user documentation [Type] Feature New feature to highlight in changelogs.
Projects
None yet
Development

Successfully merging this pull request may close these issues.