Skip to content

DataViews: Add a context menu when right clicking on the table header#73104

Merged
youknowriad merged 2 commits into
trunkfrom
add/context-menu-dataviews-columns
Nov 8, 2025
Merged

DataViews: Add a context menu when right clicking on the table header#73104
youknowriad merged 2 commits into
trunkfrom
add/context-menu-dataviews-columns

Conversation

@youknowriad

Copy link
Copy Markdown
Contributor

What?

Extracts the DataViews properties section into a reusable component and adds a right-click context menu on the table layout header to access field visibility controls.

Why?

Users need quick access to show/hide fields when working with DataViews tables. Previously, this was only available through the view config dropdown. This also matches other tools like the MacOS finder.

Testing Instructions

  1. Open the WordPress admin and navigate to a page with DataViews (e.g., Posts list, Pages list, or any DataViews demo)
  2. Test context menu:
    - Right-click anywhere on the table header row
    - Verify the properties menu appears at the cursor position
    - Click on checkboxes to show/hide fields
    - Verify the table updates immediately

@youknowriad youknowriad self-assigned this Nov 8, 2025
@youknowriad youknowriad added [Type] Enhancement A suggestion for improvement. [Feature] DataViews Work surrounding upgrading and evolving views in the site editor and beyond labels Nov 8, 2025
@github-actions

github-actions Bot commented Nov 8, 2025

Copy link
Copy Markdown

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: youknowriad <youknowriad@git.wordpress.org>
Co-authored-by: mtias <matveb@git.wordpress.org>

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

return !! item;
}

export function PropertiesSection( {

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

no big change here outside the new showLabel prop, all the rest is the same previous component no change.

@github-actions

github-actions Bot commented Nov 8, 2025

Copy link
Copy Markdown

Size Change: +423 B (+0.02%)

Total Size: 2.47 MB

Filename Size Change
build/scripts/edit-site/index.min.js 228 kB +186 B (+0.08%)
build/scripts/media-utils/index.min.js 63.6 kB +176 B (+0.28%)
build/styles/edit-site/posts-rtl.css 9.72 kB +13 B (+0.13%)
build/styles/edit-site/posts.css 9.71 kB +13 B (+0.13%)
build/styles/edit-site/style-rtl.css 15.3 kB +9 B (+0.06%)
build/styles/edit-site/style.css 15.3 kB +8 B (+0.05%)
build/styles/editor/style-rtl.css 17.9 kB +9 B (+0.05%)
build/styles/editor/style.css 17.9 kB +9 B (+0.05%)
ℹ️ View Unchanged
Filename Size
build/modules/a11y/index.min.js 355 B
build/modules/block-editor/utils/fit-text-frontend.min.js 439 B
build/modules/block-library/accordion/view.min.js 528 B
build/modules/block-library/file/view.min.js 346 B
build/modules/block-library/form/view.min.js 528 B
build/modules/block-library/image/view.min.js 1.95 kB
build/modules/block-library/navigation/view.min.js 1.03 kB
build/modules/block-library/query/view.min.js 518 B
build/modules/block-library/search/view.min.js 498 B
build/modules/block-library/tabs/view.min.js 776 B
build/modules/boot/index.min.js 79.6 kB
build/modules/interactivity-router/full-page.min.js 451 B
build/modules/interactivity-router/index.min.js 11.5 kB
build/modules/interactivity/index.min.js 14.9 kB
build/modules/latex-to-mathml/index.min.js 56.5 kB
build/modules/latex-to-mathml/loader.min.js 131 B
build/modules/lazy-editor/index.min.js 12.1 kB
build/scripts/a11y/index.min.js 1.06 kB
build/scripts/annotations/index.min.js 2.38 kB
build/scripts/api-fetch/index.min.js 2.83 kB
build/scripts/autop/index.min.js 2.18 kB
build/scripts/blob/index.min.js 631 B
build/scripts/block-directory/index.min.js 8.03 kB
build/scripts/block-editor/index.min.js 296 kB
build/scripts/block-library/index.min.js 271 kB
build/scripts/block-serialization-default-parser/index.min.js 1.16 kB
build/scripts/block-serialization-spec-parser/index.min.js 3.08 kB
build/scripts/blocks/index.min.js 56.1 kB
build/scripts/commands/index.min.js 17.4 kB
build/scripts/components/index.min.js 271 kB
build/scripts/compose/index.min.js 13.8 kB
build/scripts/core-commands/index.min.js 4.13 kB
build/scripts/core-data/index.min.js 86 kB
build/scripts/customize-widgets/index.min.js 12.3 kB
build/scripts/data-controls/index.min.js 793 B
build/scripts/data/index.min.js 9.61 kB
build/scripts/date/index.min.js 23.6 kB
build/scripts/deprecated/index.min.js 752 B
build/scripts/dom-ready/index.min.js 476 B
build/scripts/dom/index.min.js 4.91 kB
build/scripts/edit-post/index.min.js 16.4 kB
build/scripts/edit-widgets/index.min.js 20 kB
build/scripts/editor/index.min.js 283 kB
build/scripts/element/index.min.js 5.19 kB
build/scripts/escape-html/index.min.js 586 B
build/scripts/format-library/index.min.js 10.6 kB
build/scripts/hooks/index.min.js 1.83 kB
build/scripts/html-entities/index.min.js 494 B
build/scripts/i18n/index.min.js 2.46 kB
build/scripts/is-shallow-equal/index.min.js 568 B
build/scripts/keyboard-shortcuts/index.min.js 1.57 kB
build/scripts/keycodes/index.min.js 1.53 kB
build/scripts/latex-to-mathml/index.min.js 56.7 kB
build/scripts/list-reusable-blocks/index.min.js 2.44 kB
build/scripts/notices/index.min.js 1.11 kB
build/scripts/nux/index.min.js 1.88 kB
build/scripts/patterns/index.min.js 7.87 kB
build/scripts/plugins/index.min.js 2.14 kB
build/scripts/preferences-persistence/index.min.js 2.15 kB
build/scripts/preferences/index.min.js 3.31 kB
build/scripts/primitives/index.min.js 1.01 kB
build/scripts/priority-queue/index.min.js 1.61 kB
build/scripts/private-apis/index.min.js 1.1 kB
build/scripts/react-i18n/index.min.js 832 B
build/scripts/react-refresh-entry/index.min.js 9.44 kB
build/scripts/react-refresh-runtime/index.min.js 3.59 kB
build/scripts/redux-routine/index.min.js 3.36 kB
build/scripts/reusable-blocks/index.min.js 2.92 kB
build/scripts/rich-text/index.min.js 12.9 kB
build/scripts/router/index.min.js 5.96 kB
build/scripts/server-side-render/index.min.js 1.91 kB
build/scripts/shortcode/index.min.js 1.58 kB
build/scripts/style-engine/index.min.js 2.32 kB
build/scripts/theme/index.min.js 21.5 kB
build/scripts/token-list/index.min.js 739 B
build/scripts/undo-manager/index.min.js 917 B
build/scripts/url/index.min.js 3.98 kB
build/scripts/vendors/react-dom.min.js 43 kB
build/scripts/vendors/react-jsx-runtime.min.js 691 B
build/scripts/vendors/react.min.js 4.27 kB
build/scripts/viewport/index.min.js 1.22 kB
build/scripts/warning/index.min.js 454 B
build/scripts/widgets/index.min.js 7.81 kB
build/scripts/wordcount/index.min.js 1.04 kB
build/styles/block-directory/style-rtl.css 1.05 kB
build/styles/block-directory/style.css 1.05 kB
build/styles/block-editor/content-rtl.css 4.79 kB
build/styles/block-editor/content.css 4.79 kB
build/styles/block-editor/default-editor-styles-rtl.css 224 B
build/styles/block-editor/default-editor-styles.css 224 B
build/styles/block-editor/style-rtl.css 16 kB
build/styles/block-editor/style.css 15.9 kB
build/styles/block-library/accordion-heading/style-rtl.css 335 B
build/styles/block-library/accordion-heading/style.css 335 B
build/styles/block-library/accordion-item/style-rtl.css 213 B
build/styles/block-library/accordion-item/style.css 213 B
build/styles/block-library/accordion-panel/style-rtl.css 99 B
build/styles/block-library/accordion-panel/style.css 99 B
build/styles/block-library/archives/editor-rtl.css 61 B
build/styles/block-library/archives/editor.css 61 B
build/styles/block-library/archives/style-rtl.css 90 B
build/styles/block-library/archives/style.css 90 B
build/styles/block-library/audio/editor-rtl.css 149 B
build/styles/block-library/audio/editor.css 151 B
build/styles/block-library/audio/style-rtl.css 132 B
build/styles/block-library/audio/style.css 132 B
build/styles/block-library/audio/theme-rtl.css 134 B
build/styles/block-library/audio/theme.css 134 B
build/styles/block-library/avatar/editor-rtl.css 115 B
build/styles/block-library/avatar/editor.css 115 B
build/styles/block-library/avatar/style-rtl.css 104 B
build/styles/block-library/avatar/style.css 104 B
build/styles/block-library/breadcrumbs/style-rtl.css 203 B
build/styles/block-library/breadcrumbs/style.css 203 B
build/styles/block-library/button/editor-rtl.css 265 B
build/styles/block-library/button/editor.css 265 B
build/styles/block-library/button/style-rtl.css 554 B
build/styles/block-library/button/style.css 554 B
build/styles/block-library/buttons/editor-rtl.css 291 B
build/styles/block-library/buttons/editor.css 291 B
build/styles/block-library/buttons/style-rtl.css 349 B
build/styles/block-library/buttons/style.css 349 B
build/styles/block-library/calendar/style-rtl.css 239 B
build/styles/block-library/calendar/style.css 239 B
build/styles/block-library/categories/editor-rtl.css 132 B
build/styles/block-library/categories/editor.css 131 B
build/styles/block-library/categories/style-rtl.css 152 B
build/styles/block-library/categories/style.css 152 B
build/styles/block-library/classic-rtl.css 179 B
build/styles/block-library/classic.css 179 B
build/styles/block-library/code/editor-rtl.css 53 B
build/styles/block-library/code/editor.css 53 B
build/styles/block-library/code/style-rtl.css 139 B
build/styles/block-library/code/style.css 139 B
build/styles/block-library/code/theme-rtl.css 122 B
build/styles/block-library/code/theme.css 122 B
build/styles/block-library/columns/editor-rtl.css 108 B
build/styles/block-library/columns/editor.css 108 B
build/styles/block-library/columns/style-rtl.css 421 B
build/styles/block-library/columns/style.css 421 B
build/styles/block-library/comment-author-avatar/editor-rtl.css 124 B
build/styles/block-library/comment-author-avatar/editor.css 124 B
build/styles/block-library/comment-author-name/style-rtl.css 72 B
build/styles/block-library/comment-author-name/style.css 72 B
build/styles/block-library/comment-content/style-rtl.css 120 B
build/styles/block-library/comment-content/style.css 120 B
build/styles/block-library/comment-date/style-rtl.css 65 B
build/styles/block-library/comment-date/style.css 65 B
build/styles/block-library/comment-edit-link/style-rtl.css 70 B
build/styles/block-library/comment-edit-link/style.css 70 B
build/styles/block-library/comment-reply-link/style-rtl.css 71 B
build/styles/block-library/comment-reply-link/style.css 71 B
build/styles/block-library/comment-template/style-rtl.css 191 B
build/styles/block-library/comment-template/style.css 191 B
build/styles/block-library/comments-pagination-numbers/editor-rtl.css 122 B
build/styles/block-library/comments-pagination-numbers/editor.css 121 B
build/styles/block-library/comments-pagination/editor-rtl.css 168 B
build/styles/block-library/comments-pagination/editor.css 168 B
build/styles/block-library/comments-pagination/style-rtl.css 201 B
build/styles/block-library/comments-pagination/style.css 201 B
build/styles/block-library/comments-title/editor-rtl.css 75 B
build/styles/block-library/comments-title/editor.css 75 B
build/styles/block-library/comments/editor-rtl.css 842 B
build/styles/block-library/comments/editor.css 842 B
build/styles/block-library/comments/style-rtl.css 637 B
build/styles/block-library/comments/style.css 637 B
build/styles/block-library/common-rtl.css 1.11 kB
build/styles/block-library/common.css 1.11 kB
build/styles/block-library/cover/editor-rtl.css 631 B
build/styles/block-library/cover/editor.css 631 B
build/styles/block-library/cover/style-rtl.css 1.7 kB
build/styles/block-library/cover/style.css 1.69 kB
build/styles/block-library/details/editor-rtl.css 65 B
build/styles/block-library/details/editor.css 65 B
build/styles/block-library/details/style-rtl.css 86 B
build/styles/block-library/details/style.css 86 B
build/styles/block-library/editor-elements-rtl.css 75 B
build/styles/block-library/editor-elements.css 75 B
build/styles/block-library/editor-rtl.css 11.7 kB
build/styles/block-library/editor.css 11.7 kB
build/styles/block-library/elements-rtl.css 54 B
build/styles/block-library/elements.css 54 B
build/styles/block-library/embed/editor-rtl.css 331 B
build/styles/block-library/embed/editor.css 331 B
build/styles/block-library/embed/style-rtl.css 419 B
build/styles/block-library/embed/style.css 419 B
build/styles/block-library/embed/theme-rtl.css 133 B
build/styles/block-library/embed/theme.css 133 B
build/styles/block-library/file/editor-rtl.css 324 B
build/styles/block-library/file/editor.css 324 B
build/styles/block-library/file/style-rtl.css 278 B
build/styles/block-library/file/style.css 278 B
build/styles/block-library/footnotes/style-rtl.css 198 B
build/styles/block-library/footnotes/style.css 197 B
build/styles/block-library/form-input/editor-rtl.css 229 B
build/styles/block-library/form-input/editor.css 229 B
build/styles/block-library/form-input/style-rtl.css 366 B
build/styles/block-library/form-input/style.css 366 B
build/styles/block-library/form-submission-notification/editor-rtl.css 344 B
build/styles/block-library/form-submission-notification/editor.css 341 B
build/styles/block-library/form-submit-button/style-rtl.css 69 B
build/styles/block-library/form-submit-button/style.css 69 B
build/styles/block-library/freeform/editor-rtl.css 2.59 kB
build/styles/block-library/freeform/editor.css 2.59 kB
build/styles/block-library/gallery/editor-rtl.css 615 B
build/styles/block-library/gallery/editor.css 616 B
build/styles/block-library/gallery/style-rtl.css 1.84 kB
build/styles/block-library/gallery/style.css 1.84 kB
build/styles/block-library/gallery/theme-rtl.css 108 B
build/styles/block-library/gallery/theme.css 108 B
build/styles/block-library/group/editor-rtl.css 335 B
build/styles/block-library/group/editor.css 335 B
build/styles/block-library/group/style-rtl.css 103 B
build/styles/block-library/group/style.css 103 B
build/styles/block-library/group/theme-rtl.css 79 B
build/styles/block-library/group/theme.css 79 B
build/styles/block-library/heading/style-rtl.css 205 B
build/styles/block-library/heading/style.css 205 B
build/styles/block-library/html/editor-rtl.css 357 B
build/styles/block-library/html/editor.css 358 B
build/styles/block-library/image/editor-rtl.css 763 B
build/styles/block-library/image/editor.css 763 B
build/styles/block-library/image/style-rtl.css 1.6 kB
build/styles/block-library/image/style.css 1.59 kB
build/styles/block-library/image/theme-rtl.css 137 B
build/styles/block-library/image/theme.css 137 B
build/styles/block-library/latest-comments/style-rtl.css 355 B
build/styles/block-library/latest-comments/style.css 354 B
build/styles/block-library/latest-posts/editor-rtl.css 139 B
build/styles/block-library/latest-posts/editor.css 138 B
build/styles/block-library/latest-posts/style-rtl.css 520 B
build/styles/block-library/latest-posts/style.css 520 B
build/styles/block-library/list/style-rtl.css 107 B
build/styles/block-library/list/style.css 107 B
build/styles/block-library/loginout/style-rtl.css 61 B
build/styles/block-library/loginout/style.css 61 B
build/styles/block-library/math/editor-rtl.css 105 B
build/styles/block-library/math/editor.css 105 B
build/styles/block-library/math/style-rtl.css 61 B
build/styles/block-library/math/style.css 61 B
build/styles/block-library/media-text/editor-rtl.css 321 B
build/styles/block-library/media-text/editor.css 320 B
build/styles/block-library/media-text/style-rtl.css 543 B
build/styles/block-library/media-text/style.css 542 B
build/styles/block-library/more/editor-rtl.css 393 B
build/styles/block-library/more/editor.css 393 B
build/styles/block-library/navigation-link/editor-rtl.css 626 B
build/styles/block-library/navigation-link/editor.css 628 B
build/styles/block-library/navigation-link/style-rtl.css 190 B
build/styles/block-library/navigation-link/style.css 188 B
build/styles/block-library/navigation-submenu/editor-rtl.css 295 B
build/styles/block-library/navigation-submenu/editor.css 294 B
build/styles/block-library/navigation/editor-rtl.css 2.24 kB
build/styles/block-library/navigation/editor.css 2.24 kB
build/styles/block-library/navigation/style-rtl.css 2.27 kB
build/styles/block-library/navigation/style.css 2.25 kB
build/styles/block-library/nextpage/editor-rtl.css 392 B
build/styles/block-library/nextpage/editor.css 392 B
build/styles/block-library/page-list/editor-rtl.css 356 B
build/styles/block-library/page-list/editor.css 356 B
build/styles/block-library/page-list/style-rtl.css 192 B
build/styles/block-library/page-list/style.css 192 B
build/styles/block-library/paragraph/editor-rtl.css 251 B
build/styles/block-library/paragraph/editor.css 251 B
build/styles/block-library/paragraph/style-rtl.css 341 B
build/styles/block-library/paragraph/style.css 340 B
build/styles/block-library/post-author-biography/style-rtl.css 74 B
build/styles/block-library/post-author-biography/style.css 74 B
build/styles/block-library/post-author-name/style-rtl.css 69 B
build/styles/block-library/post-author-name/style.css 69 B
build/styles/block-library/post-author/style-rtl.css 188 B
build/styles/block-library/post-author/style.css 189 B
build/styles/block-library/post-comments-count/style-rtl.css 72 B
build/styles/block-library/post-comments-count/style.css 72 B
build/styles/block-library/post-comments-form/editor-rtl.css 96 B
build/styles/block-library/post-comments-form/editor.css 96 B
build/styles/block-library/post-comments-form/style-rtl.css 525 B
build/styles/block-library/post-comments-form/style.css 525 B
build/styles/block-library/post-comments-link/style-rtl.css 71 B
build/styles/block-library/post-comments-link/style.css 71 B
build/styles/block-library/post-content/style-rtl.css 61 B
build/styles/block-library/post-content/style.css 61 B
build/styles/block-library/post-date/style-rtl.css 62 B
build/styles/block-library/post-date/style.css 62 B
build/styles/block-library/post-excerpt/editor-rtl.css 71 B
build/styles/block-library/post-excerpt/editor.css 71 B
build/styles/block-library/post-excerpt/style-rtl.css 155 B
build/styles/block-library/post-excerpt/style.css 155 B
build/styles/block-library/post-featured-image/editor-rtl.css 719 B
build/styles/block-library/post-featured-image/editor.css 717 B
build/styles/block-library/post-featured-image/style-rtl.css 347 B
build/styles/block-library/post-featured-image/style.css 347 B
build/styles/block-library/post-navigation-link/style-rtl.css 215 B
build/styles/block-library/post-navigation-link/style.css 214 B
build/styles/block-library/post-template/style-rtl.css 414 B
build/styles/block-library/post-template/style.css 414 B
build/styles/block-library/post-terms/style-rtl.css 96 B
build/styles/block-library/post-terms/style.css 96 B
build/styles/block-library/post-time-to-read/style-rtl.css 70 B
build/styles/block-library/post-time-to-read/style.css 70 B
build/styles/block-library/post-title/style-rtl.css 162 B
build/styles/block-library/post-title/style.css 162 B
build/styles/block-library/preformatted/style-rtl.css 125 B
build/styles/block-library/preformatted/style.css 125 B
build/styles/block-library/pullquote/editor-rtl.css 133 B
build/styles/block-library/pullquote/editor.css 133 B
build/styles/block-library/pullquote/style-rtl.css 365 B
build/styles/block-library/pullquote/style.css 365 B
build/styles/block-library/pullquote/theme-rtl.css 176 B
build/styles/block-library/pullquote/theme.css 176 B
build/styles/block-library/query-pagination-numbers/editor-rtl.css 121 B
build/styles/block-library/query-pagination-numbers/editor.css 118 B
build/styles/block-library/query-pagination/editor-rtl.css 154 B
build/styles/block-library/query-pagination/editor.css 154 B
build/styles/block-library/query-pagination/style-rtl.css 237 B
build/styles/block-library/query-pagination/style.css 237 B
build/styles/block-library/query-title/style-rtl.css 64 B
build/styles/block-library/query-title/style.css 64 B
build/styles/block-library/query-total/style-rtl.css 64 B
build/styles/block-library/query-total/style.css 64 B
build/styles/block-library/query/editor-rtl.css 438 B
build/styles/block-library/query/editor.css 438 B
build/styles/block-library/quote/style-rtl.css 238 B
build/styles/block-library/quote/style.css 238 B
build/styles/block-library/quote/theme-rtl.css 233 B
build/styles/block-library/quote/theme.css 236 B
build/styles/block-library/read-more/style-rtl.css 131 B
build/styles/block-library/read-more/style.css 131 B
build/styles/block-library/reset-rtl.css 472 B
build/styles/block-library/reset.css 472 B
build/styles/block-library/rss/editor-rtl.css 126 B
build/styles/block-library/rss/editor.css 126 B
build/styles/block-library/rss/style-rtl.css 284 B
build/styles/block-library/rss/style.css 283 B
build/styles/block-library/search/editor-rtl.css 199 B
build/styles/block-library/search/editor.css 199 B
build/styles/block-library/search/style-rtl.css 665 B
build/styles/block-library/search/style.css 666 B
build/styles/block-library/search/theme-rtl.css 113 B
build/styles/block-library/search/theme.css 113 B
build/styles/block-library/separator/editor-rtl.css 100 B
build/styles/block-library/separator/editor.css 100 B
build/styles/block-library/separator/style-rtl.css 248 B
build/styles/block-library/separator/style.css 248 B
build/styles/block-library/separator/theme-rtl.css 195 B
build/styles/block-library/separator/theme.css 195 B
build/styles/block-library/shortcode/editor-rtl.css 286 B
build/styles/block-library/shortcode/editor.css 286 B
build/styles/block-library/site-logo/editor-rtl.css 773 B
build/styles/block-library/site-logo/editor.css 770 B
build/styles/block-library/site-logo/style-rtl.css 218 B
build/styles/block-library/site-logo/style.css 218 B
build/styles/block-library/site-tagline/editor-rtl.css 87 B
build/styles/block-library/site-tagline/editor.css 87 B
build/styles/block-library/site-tagline/style-rtl.css 65 B
build/styles/block-library/site-tagline/style.css 65 B
build/styles/block-library/site-title/editor-rtl.css 85 B
build/styles/block-library/site-title/editor.css 85 B
build/styles/block-library/site-title/style-rtl.css 143 B
build/styles/block-library/site-title/style.css 143 B
build/styles/block-library/social-link/editor-rtl.css 314 B
build/styles/block-library/social-link/editor.css 314 B
build/styles/block-library/social-links/editor-rtl.css 339 B
build/styles/block-library/social-links/editor.css 338 B
build/styles/block-library/social-links/style-rtl.css 1.51 kB
build/styles/block-library/social-links/style.css 1.51 kB
build/styles/block-library/spacer/editor-rtl.css 346 B
build/styles/block-library/spacer/editor.css 346 B
build/styles/block-library/spacer/style-rtl.css 48 B
build/styles/block-library/spacer/style.css 48 B
build/styles/block-library/style-rtl.css 16.4 kB
build/styles/block-library/style.css 16.4 kB
build/styles/block-library/tab/style-rtl.css 202 B
build/styles/block-library/tab/style.css 202 B
build/styles/block-library/table-of-contents/style-rtl.css 83 B
build/styles/block-library/table-of-contents/style.css 83 B
build/styles/block-library/table/editor-rtl.css 394 B
build/styles/block-library/table/editor.css 394 B
build/styles/block-library/table/style-rtl.css 641 B
build/styles/block-library/table/style.css 640 B
build/styles/block-library/table/theme-rtl.css 152 B
build/styles/block-library/table/theme.css 152 B
build/styles/block-library/tabs/editor-rtl.css 236 B
build/styles/block-library/tabs/editor.css 236 B
build/styles/block-library/tabs/style-rtl.css 983 B
build/styles/block-library/tabs/style.css 983 B
build/styles/block-library/tag-cloud/editor-rtl.css 92 B
build/styles/block-library/tag-cloud/editor.css 92 B
build/styles/block-library/tag-cloud/style-rtl.css 248 B
build/styles/block-library/tag-cloud/style.css 248 B
build/styles/block-library/template-part/editor-rtl.css 368 B
build/styles/block-library/template-part/editor.css 368 B
build/styles/block-library/template-part/theme-rtl.css 113 B
build/styles/block-library/template-part/theme.css 113 B
build/styles/block-library/term-count/style-rtl.css 63 B
build/styles/block-library/term-count/style.css 63 B
build/styles/block-library/term-description/style-rtl.css 126 B
build/styles/block-library/term-description/style.css 126 B
build/styles/block-library/term-name/style-rtl.css 62 B
build/styles/block-library/term-name/style.css 62 B
build/styles/block-library/term-template/editor-rtl.css 225 B
build/styles/block-library/term-template/editor.css 225 B
build/styles/block-library/term-template/style-rtl.css 114 B
build/styles/block-library/term-template/style.css 114 B
build/styles/block-library/text-columns/editor-rtl.css 95 B
build/styles/block-library/text-columns/editor.css 95 B
build/styles/block-library/text-columns/style-rtl.css 165 B
build/styles/block-library/text-columns/style.css 165 B
build/styles/block-library/theme-rtl.css 715 B
build/styles/block-library/theme.css 719 B
build/styles/block-library/verse/style-rtl.css 98 B
build/styles/block-library/verse/style.css 98 B
build/styles/block-library/video/editor-rtl.css 415 B
build/styles/block-library/video/editor.css 416 B
build/styles/block-library/video/style-rtl.css 202 B
build/styles/block-library/video/style.css 202 B
build/styles/block-library/video/theme-rtl.css 134 B
build/styles/block-library/video/theme.css 134 B
build/styles/commands/style-rtl.css 999 B
build/styles/commands/style.css 1 kB
build/styles/components/style-rtl.css 14 kB
build/styles/components/style.css 14 kB
build/styles/customize-widgets/style-rtl.css 1.44 kB
build/styles/customize-widgets/style.css 1.44 kB
build/styles/edit-post/classic-rtl.css 426 B
build/styles/edit-post/classic.css 427 B
build/styles/edit-post/style-rtl.css 3.33 kB
build/styles/edit-post/style.css 3.33 kB
build/styles/edit-widgets/style-rtl.css 4.59 kB
build/styles/edit-widgets/style.css 4.59 kB
build/styles/format-library/style-rtl.css 326 B
build/styles/format-library/style.css 326 B
build/styles/list-reusable-blocks/style-rtl.css 1.02 kB
build/styles/list-reusable-blocks/style.css 1.02 kB
build/styles/nux/style-rtl.css 622 B
build/styles/nux/style.css 618 B
build/styles/patterns/style-rtl.css 611 B
build/styles/patterns/style.css 611 B
build/styles/preferences/style-rtl.css 415 B
build/styles/preferences/style.css 415 B
build/styles/reusable-blocks/style-rtl.css 275 B
build/styles/reusable-blocks/style.css 275 B
build/styles/widgets/style-rtl.css 1.17 kB
build/styles/widgets/style.css 1.18 kB

compressed-size-action

@youknowriad youknowriad merged commit 974f95a into trunk Nov 8, 2025
36 checks passed
@youknowriad youknowriad deleted the add/context-menu-dataviews-columns branch November 8, 2025 23:44
@github-actions github-actions Bot added this to the Gutenberg 22.1 milestone Nov 8, 2025
@ntsekouras

Copy link
Copy Markdown
Contributor

So I guess this is the wanted alternative for #72844, that I had a PR ready?

@jameskoster

jameskoster commented Nov 10, 2025

Copy link
Copy Markdown
Contributor

@ntsekouras we could have both. Your PR is a bit better from an a11y perspective as it makes this feature available to keyboard users. Although having said that it's already available in the appearance options panel, so I can go either way on this :)

@jameskoster

Copy link
Copy Markdown
Contributor

@youknowriad Couldn't we use Menu here? It handles/offers everything we want in a consistent way.

The styling as-is seems a bit broken, double border, strokes between items:

Screenshot 2025-11-10 at 10 52 45

@youknowriad

Copy link
Copy Markdown
Contributor Author

@jameskoster This uses the same component as the one used in the view config dropdown, I think ideally we'd have a lower level abstraction than Menu that can be used for both within Menu (DropdownMenu) and inline.

Maybe @aduth can talk about how we can do this.

@jameskoster

Copy link
Copy Markdown
Contributor

Yes we've spoken a few times about Menus that appear 'inline' in other UIs, but didn't have a valid use case yet so it hasn't been prioritised. There's also potential overlap with navigation menus to consider as well.

But in this case doesn't it seem like Menu would be a better fit compared to the ad hoc view config dropdown implementation? It's literally a menu, with no other adjacent affordance :D If not, should we update the styling to match?

@youknowriad

Copy link
Copy Markdown
Contributor Author

But in this case doesn't it seem like Menu would be a better fit compared to the ad hoc view config dropdown implementation?

No, it's not possible the Menu renders contextually to a button not to the mouse position. We might need a dedicated ContextualMenu component or something like this.

@youknowriad

Copy link
Copy Markdown
Contributor Author

should we update the styling to match?

I would love thoughts from @aduth on how to go about this, I think the way we make styles match is by using the "inline menu" component.

@aduth

aduth commented Nov 10, 2025

Copy link
Copy Markdown
Member

I think we'll want to have a dedicated ContextMenu component (like BaseUI) or at least a documented pattern (like Ariakit) that wraps Menu and handles all of the positioning and interaction details (i.e. reusing Menu with some extra behaviors).

With how Menu is currently implemented, it's not currently possible to use it like how we're using Popover here to arbitrarily position the menu.

A realistic short-term solution could be one of:

Another option that could be done today without changes to Menu would be to interact with the menu's internal store to assign an anchor element. I don't love this though, since ideally I don't think we'd be exposing the internal, library-specific context store for external usage. I think we should change this, because otherwise it binds us to a specific implementation.

@aduth

aduth commented Nov 10, 2025

Copy link
Copy Markdown
Member

As far as the reusing parts between the config menu and the context menu, I'm not sure these are the same kind of thing, since the context menu items feel more like menuitemcheckbox (WAI ARIA example), with the config more like a (multi-)select or group of checkboxes. We might be able to implement a component which has some default semantics but allows for control to override with a context-relevant role, but it could also be that these are separate components, and what's shared are common styles / design tokens.

@youknowriad

Copy link
Copy Markdown
Contributor Author

As a user, I feel like this is the same thing. I'm selecting which fields are available. If the UI is triggered using right click or a trigger (the view config dropdown trigger) feels really secondary.

@jameskoster

Copy link
Copy Markdown
Contributor

That's a fair point, but don't you think context and design can play a role? It seems clear that the right-click affordance should be a Menu because it only handles one aspect and feels like a quick action. But I think there might be a case to use different semantics in the config UI.

If we used checkboxes/toggles the property visibility section would be more congruent with the rest of the UI, presenting as a single form rather than a form + a menu. The layout would be more compact, sidestepping the boxes-in-boxes issue the current design suffers from a bit. Finally it'd lessen the urgency to implement the 'inline menu' functionality.

Menu Checkboxes
Screenshot 2025-11-11 at 09 19 45 Screenshot 2025-11-11 at 09 30 32

Implementing pointer anchoring for the Menu would still be necessary, but it appears achievable, and given its broader application it would be a valuable enhancement beyond this particular scenario.

@youknowriad

Copy link
Copy Markdown
Contributor Author

In discussing with Andrew I came to realize something:

  • A checkbox is something you persist as a boolean (this is visible true or not).
  • A list block is you select an array of items out of a bigger array.

Now, I'm strongly convinced that this is not a checkbox. We actually store this as view.fields: string[]. This is really a multi-select semantically.

@jameskoster

jameskoster commented Nov 12, 2025

Copy link
Copy Markdown
Contributor

If you're strongly convinced then so am I :)

It would still be nice to fix the styling in the context menu though 😄

@youknowriad

Copy link
Copy Markdown
Contributor Author

Yeah, I think we should fix the styling ideally in a reusable UI component that we can use between both context. What would be the desired style here?

@jameskoster

Copy link
Copy Markdown
Contributor

Just to be sure we're talking about the same thing, are you saying it's a listbox pattern because it behaves like a multi-select list, rather than a 'random' list of checkboxes?

If so we already have a design for that here: #65801 which can serve as a starting point. I should note that the 'checkboxes' in that concept are not inputs, just elements styled to look like checkboxes to indicate the behavior. I'm happy to use simple checkmarks (like we did here) if that's the preferred approach though. Is this a component you see living in the new UI package? If so the design will need a slight refactor to utilise the new color tokens.

@youknowriad

Copy link
Copy Markdown
Contributor Author

I was thinking about the default browser multi-select (without aria), but it may correspond to the listbox pattern, I don't know to be honest.

I would love for this component to live in the new UI package if possible yes :)

@jameskoster

Copy link
Copy Markdown
Contributor

You mean <select multiple>? I suppose that would be simpler, but I think it's a bit tricky to style, and multi-selection requires keyboard interaction (e.g. shift-click or cmd-click) which would probably be a bit clunky/unintuitive in this context. Let's see what @aduth thinks.

@youknowriad

Copy link
Copy Markdown
Contributor Author

@jameskoster I was not saying that we should be using it as is and style it, instead I was saying that it's the same semantics for me.

@simison

simison commented Nov 13, 2025

Copy link
Copy Markdown
Member
Screenshot 2025-11-13 at 23 04 37

width: min-content in the surrounding popover is causing these menus look a bit weird.

With fit-content it looks good:

image

@mirka

mirka commented Nov 13, 2025

Copy link
Copy Markdown
Member

I experimented a bit with the listbox idea to determine feasibility and effort.

Feasibility

One design implication I noticed for using the listbox pattern in isolation (i.e. "inline") is that we'll need a focus ring on the entire list to indicate that it's a composite widget with a single tab stop. Is that ok? This detail hasn't been captured in existing mockups.

Listbox example with focus ring

Effort

We'll likely need to build this as a custom component using Ariakit Composite.

I was hoping we could simply render the listbox in Base UI Select outside of its popup, but it currently doesn't support this. We can request support, but I'm not sure if they'll find it worthwhile. Base UI Combobox does currently support rendering the listbox outside of its popup, but unfortunately the keyboard interactions of a combobox listbox is slightly different from a normal listbox (in a combobox, items cannot be selected by Space).


Alternative: CheckboxGroup

While I'm fine with investing in a Listbox component if we agree it's worth the effort, there's still a possibility we do not need one. Our new UI package will have a CheckboxGroup component, which will allow consumers to handle the checkbox values as a single array, rather than a bunch of boolean values. So devex-wise, there's no inconvenience. Screen reader users may incur a slight inconvenience depending on the number of items in the list (harder to discern the total number of items, your current index in the item list, etc), but given that we probably wouldn't be using this pattern for more than a handful of items, I wouldn't say it's a blocker.

@mirka

mirka commented Nov 13, 2025

Copy link
Copy Markdown
Member

On the context menu side, I agree with @aduth that we can have a dedicated ContextMenu component. We'll also be updating the Menu styles soon to use the new checkbox-style indicators, so visual consistency will not be a problem.

@youknowriad

Copy link
Copy Markdown
Contributor Author

I think @mtias have some strong feelings here about the design being very light (no actual checkbox, but an icon) and I'm not sure about the whole focus ring, that feels very weird to me to be honest.

@youknowriad

Copy link
Copy Markdown
Contributor Author

@simison I swear I though I fixed this using flex-string: 0 or something like that. Maybe it didn't solve all use-case. Please if you have time for a quick PR, go for it.

@simison

simison commented Nov 13, 2025

Copy link
Copy Markdown
Member

Huh, now I refreshed the page and it works again! Maybe some styles were still loading from the old version. I'll let you know if I see it again!

@jameskoster

Copy link
Copy Markdown
Contributor

@mirka I know we've discussed a lot when to use checkbox-appearance vs. plain icon but I can't remember all the details 😅 Do you think a plain icon could work in listbox?

Also, could it be appropriate for the focus ring appear on focus-visible to reduce the visual weight for mouse users?

I still think a checkboxgroup would be a better fit for the appearance config popover 🙊

@mirka

mirka commented Nov 14, 2025

Copy link
Copy Markdown
Member

@mirka I know we've discussed a lot when to use checkbox-appearance vs. plain icon but I can't remember all the details 😅 Do you think a plain icon could work in listbox?

It all started from Menu, when there can be single and multiple select item groups, sometimes in the same menu. We wanted clear cues to differentiate between the two. Then, it followed that we should use the same cues for other single/multiple select UIs, like Select and Combobox.

It's tricky. Not all contexts require a clear differentiation between single/multiple, but in the few cases where it is needed, we can't differentiate them without a consistent cue that's already been established across the system 😅

Given the difficulties we're starting to see with the checkbox-style indicators, I can think of two paths forward:

  1. Discard the idea that we need to differentiate between single/multiple selects. Some design systems take this stance, for example Apple.
  2. See if we can decrease the prominence of the multiple-select indicator. Would it help if we removed the accent color and made it neutral? No background fill when selected?

I still think a checkboxgroup would be a better fit for the appearance config popover 🙊

Same! Would you be fine with that @youknowriad?

@youknowriad

Copy link
Copy Markdown
Contributor Author

Same! Would you be fine with that @youknowriad?

what would do that look like? I think @mtias kind of feels strongly about this menu looking very similar to finder's columns menu. I'm not the one to convince here :)

@jameskoster

Copy link
Copy Markdown
Contributor

Menu still seems to be using check icons rather than checkboxes, so I guess we aren't fully committed? I'm hesitant to discard but this does remind me of the recent Combobox issue we faced. Maybe it's not so important to visually distinguish if we ensure appropriate labeling? In this case a group label might make the multi-select aspect clear; "Toggle property visibility"?

this menu looking very similar to finder's columns menu. I'm not the one to convince here :)

Wasn't that mostly about the context menu? I agree that should be minimal, basically a Menu with checkboxes instance. The popover would look like the mockup in this comment.

@youknowriad

Copy link
Copy Markdown
Contributor Author

Wasn't that mostly about the context menu?

I think it was for both (AFAIK)

@mirka

mirka commented Nov 14, 2025

Copy link
Copy Markdown
Member

Menu still seems to be using check icons rather than checkboxes, so I guess we aren't fully committed?

It's not that we weren't fully committed, we just haven't made all the changes in code yet 😄

So, given that this is a decision we can reverse later without major disruption, how about we revert all our "checkbox-style indicator" plans for now, and see how that goes? Plain checkmark indicators for both single and multiple selection — in all menus, selects, and comboboxes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Feature] DataViews Work surrounding upgrading and evolving views in the site editor and beyond [Type] Enhancement A suggestion for improvement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants