Skip to content

Conversation

@andrewserong
Copy link
Contributor

@andrewserong andrewserong commented Nov 5, 2025

What?

Part of #72336

Allow more flexibility when it comes to padding for the DataViews and DataViewsPicker components by adding a padding prop with a controlled set of values.

This will help consumers improve the appearance of the DataViewsPicker when used in a Modal component, by allowing folks to customise the padding. This PR updates the WithModal story to demonstrate how it can be used.

Why?

As discussed in #72336, we need the padding of the DataViewsPicker to play nicely with modals, but it's also a little tricky to implement while maintaining backwards compatibility. That issue discussed a lot of different options, and this one balances backwards compatibility (if no padding prop is passed in the styles are the same as on trunk) while allowing the component to be customised for different use cases.

It might not be the best API for the purposes, but it's one possible avenue.

How?

  • Add a padding prop to DataViews and DataViewsPicker that sets CSS variables for vertical and horizontal (outer) padding on DataViews/DataViewsPicker
  • Update the CSS to attempt to use this CSS variable, and otherwise fallback to the existing values (for the outer padding, not that internal padding that looks to the user like gaps, is not handled)
  • Update the DataViewsPicker storybook story for using it with a modal, so that we can test this out. In this example, we're explicitly setting the padding for the DataViewsPicker within the modal to zero.

So far, this PR allows the following values for padding (this follows what was recently implemented for the Card component in #72511 and was suggested by @aduth in #72989 (comment)):

{
	'x-small': '8px',
	small: '16px',
	medium: '24px',
	large: '32px',
	'x-large': '48px',
	none: '0',
}

These can be set as string values, or within an object with properties for block, inline and so on, to define padding for a particular side or axis.

Very happy for feedback and ideas on the naming and values, especially for consistency across components!

Testing Instructions

  1. Run storybook (npm run storybook:dev)
  2. Navigate to: http://localhost:50240/?path=/story/dataviews-dataviewspicker--with-modal and have a play
  3. Check out the other DataViewsPicker and DataViews stories to make sure no styles are broken
  4. Try updating the default DataViews story and the WithModal DataViewsPicker story, using the padding control in the Story to adjust the level of padding and see how it looks and feels
  5. Also double check the DataViews used within Gutenberg to ensure that there are no regressions

Screenshots or screencast

Before After
image image

@andrewserong andrewserong self-assigned this Nov 5, 2025
@andrewserong andrewserong added [Type] Enhancement A suggestion for improvement. [Feature] DataViews Work surrounding upgrading and evolving views in the site editor and beyond labels Nov 5, 2025
@andrewserong
Copy link
Contributor Author

I'm not 100% sure of the approach here, so I'll leave this as a draft for now, but very happy for any feedback.

@github-actions
Copy link

github-actions bot commented Nov 5, 2025

Size Change: +1.13 kB (+0.04%)

Total Size: 2.54 MB

Filename Size Change
build/scripts/edit-site/index.min.js 232 kB +260 B (+0.11%)
build/scripts/media-utils/index.min.js 66.3 kB +271 B (+0.41%)
build/styles/edit-site/style-rtl.css 16.1 kB +125 B (+0.78%)
build/styles/edit-site/style.css 16.2 kB +126 B (+0.79%)
build/styles/editor/style-rtl.css 18.8 kB +175 B (+0.94%)
build/styles/editor/style.css 18.8 kB +172 B (+0.92%)
ℹ️ View Unchanged
Filename Size
build/modules/a11y/index.min.js 355 B
build/modules/abilities/index.min.js 43 kB
build/modules/block-editor/utils/fit-text-frontend.min.js 549 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 859 B
build/modules/boot/index.min.js 69.7 kB
build/modules/edit-site-init/index.min.js 1.3 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 18.8 kB
build/modules/route/index.min.js 24.5 kB
build/modules/workflow/index.min.js 36.8 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 322 kB
build/scripts/block-library/index.min.js 275 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.2 kB
build/scripts/commands/index.min.js 19.9 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.1 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.3 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.8 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/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.88 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.11 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.93 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 20.8 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.4 kB
build/styles/block-editor/style.css 16.3 kB
build/styles/block-library/accordion-heading/style-rtl.css 395 B
build/styles/block-library/accordion-heading/style.css 395 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 121 B
build/styles/block-library/accordion-panel/style.css 121 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.8 kB
build/styles/block-library/editor.css 11.8 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 448 B
build/styles/block-library/embed/style.css 448 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 440 B
build/styles/block-library/html/editor.css 441 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 645 B
build/styles/block-library/navigation-link/editor.css 647 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.5 kB
build/styles/block-library/style.css 16.5 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 1.72 kB
build/styles/commands/style.css 1.72 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.42 kB
build/styles/edit-post/style.css 3.42 kB
build/styles/edit-widgets/style-rtl.css 4.67 kB
build/styles/edit-widgets/style.css 4.67 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

@github-actions
Copy link

github-actions bot commented Nov 5, 2025

Flaky tests detected in 860c35e.
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/19560136268
📝 Reported issues:

@StevenDufresne
Copy link
Contributor

StevenDufresne commented Nov 5, 2025

I've taken a similar approach in #72912, the main difference being that you create the CSS variable in the DataView, I create it in the container (the card in my example).

The ability to have more granular control on padding in your approach is more flexible and I don't think there is a best here.

With that being said, I lean towards the container providing that context, DataViews inheriting it, or using its own default when context is not provided, as a more flexible starting point.

Once we introduce padding controls for DataViews, it will be hard to take them back. However, if we start by moving padding into overridable variables, we don't have the pressure to commit to an API right now. Yes, third parties can override the CSS variables, but that's a much better problem to have (and arguably not a problem).

It also moves us toward something like the Open/Closed Principle, where layouts mostly evolve through composition and overrides rather than by changing component APIs.

@andrewserong
Copy link
Contributor Author

I've taken a similar approach in #72912, the main difference being that you create the CSS variable in the DataView, I create it in the container (the card in my example).

Glad we honed in on similar approaches! If we can handle the case for the Modal component over in #72912, too, then I lean toward your approach as well. It would be nice if we can get away with handling these cases without adding an additional prop 👍

@StevenDufresne
Copy link
Contributor

I just noticed that Card Component Padding System Enhancement merged, giving comsumers the ability to pass in spacing tokens into the component. The approach you take here would be more aligned with that.

@oandregal oandregal self-requested a review November 5, 2025 13:37
@andrewserong
Copy link
Contributor Author

I just noticed that #72511 merged, giving comsumers the ability to pass in spacing tokens into the component. The approach you take here would be more aligned with that.

Oh, thanks for flagging that. I like that it uses a size prop using string-based tokens... I wonder if we should use the same pattern here?

selection={ selectedItems.map( ( item ) =>
String( item.id )
) }
paddingX={ 32 }
Copy link
Contributor

Choose a reason for hiding this comment

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

I recognise it won't be possible currently, but it would be excellent if this value could reference a semantic spacing token to ensure it stays in sync with any future modal padding changes. cc @aduth.

Copy link
Member

Choose a reason for hiding this comment

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

Some possible suggestions for making this future compatible could be to (1) use a syntax similar to #72511 and #72984 with object containing logical properties like "block" and "inline", and (2) maybe have this behave as a multiplier of the 4px base spacing (i.e. 8 unit multiplier = 32px), which is how I've been thinking of numeric values in #72984 and #73308.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Oh, I like the idea of using a controlled set of tokens, that's looking promising. If we went with that approach, what might we call the prop. Would we call it size for consistency with Card, or simple call it padding (with no x).

I suppose one challenge with going with configurability here is that we also need modals to be able to zero out their padding. Part of the idea in #73334 was that we could make that an implicit part of using DataViewsPicker within a modal, whereas this PR will require consumers to configure things a little more manually. That mightn't be terrible, though.

Happy to continue iterating here, let me know if anyone feels strongly about one approach or the other!

Copy link
Member

Choose a reason for hiding this comment

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

I don't know that I find size to be a particularly fitting name, for this use-case or for card. At the same time "padding" is a very low-level concern that ideally developers don't need to manipulate. In the future I'd like if DataViews might use something like Box and density as being explored in #73215 to influence padding without this kind of component-level configuration. But that probably wouldn't ever support a complete padding reset.

With all that in mind, as far as suggestions:

  • I think a prop like padding={ { inline: 0 } } could be fine
  • If the goal is to supporting "zero-ing out" padding, we could consider expressing this a different way like a seamless or padded=false binary option between default padding and zero padding

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Oh, interesting, thanks for the continued ideas! I've started playing around with this and have pushed an update — it's not quite ready for review, I'm just saving my progress from hacking around with Claude on some of these ideas. I'll see if I can tidy things up tomorrow.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

In keeping with the named values theme, I've gone with none for zeroing things out for now.

Comment on lines 243 to 247
.dataviews-picker-modal .components-modal__content {
padding: 0;
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Should we build this into the componentry rather than just the story?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

How might we build it in? Were you thinking of configurable padding on the Modal component as well, or adding this as a hard-code rule somewhere?

Copy link
Contributor

Choose a reason for hiding this comment

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

I guess I was hoping to avoid this cross-component style override somehow. It relates to your point about zeroing modal padding. It remains unclear if that's something we want to commit to right now; it's quite a big change to address this relatively small issue.

Perhaps an alternative approach would be to set paddingX to 0 when DataViews or DataViewsPicker is inside a modal (just in the story, not using any logic). Then we can add some zero-padding-specific styles to DataViews (maybe something like this). We could use the exact same technique in the Card story, if we want to.

This would enable consumers to use DataViews either way in their own environments; padded with full-width strokes, or unpadded.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Mmm, interesting ideas! I like the idea of being able to support both. I haven't quite gotten to playing with this yet. I've pushed an update to this PR, but it isn't quite ready for review yet... I still need to do some more hacking on it 😄

Copy link
Contributor Author

Choose a reason for hiding this comment

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

(just in the story, not using any logic)

I've updated the Story so that I've removed the padding rule for Modal and set the DataViewsPicker to use the none value to demo what it looks like with the padding zeroed out on the DataViewsPicker.

In practical usage, consumers could decide how they want to use this — i.e. if they want to use zero padding on the DataViewsPicker or if they want to zero out the modal itself... so I think I'm liking this padding prop, as it gives quite a bit of flexibility.

@andrewserong andrewserong force-pushed the try/dataviews-with-custom-padding-x branch from 8c13d21 to e0c965b Compare November 20, 2025 06:41
@andrewserong andrewserong force-pushed the try/dataviews-with-custom-padding-x branch from 75bf716 to 61dfe54 Compare November 21, 2025 03:26
@andrewserong andrewserong changed the title DataViews / DataViewsPicker: Try adding a paddingX prop to support alternate padding for modals, etc DataViews / DataViewsPicker: Add an optional padding prop with named values Nov 21, 2025
Comment on lines +10 to +26
/**
* Maps padding size tokens to CSS values.
* Aligned with the Card component's spacing scale (space function with 4px base):
* - x-small: space(2) = 8px
* - small: space(4) = 16px
* - medium: space(6) = 24px
* - large: space(8) = 32px
* - x-large: space(12) = 48px
*/
const paddingValuesBySize: Record< PaddingSize, string > = {
'x-small': '8px',
small: '16px',
medium: '24px',
large: '32px',
'x-large': '48px',
none: '0',
};
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Very happy for feedback on the naming and sizing of this, maybe x-large should be 40px and there should be an xx-large with 48px? My hunch is that we'll want 48px to be in the scale as that's the current padding.

@andrewserong
Copy link
Contributor Author

Alrighty, I've done quite a few updates on this and I believe it's ready for review and testing. I've been staring at this code for a little too long, so it's quite possible I've missed things, but my goals have been to:

  • Support customising the outer padding for DataViews / DataViewsPicker
  • While ensuring that if no value is set, we honour what's happening in trunk to avoid any regressions

I've updated the Default DataViews story and the WithModal DataViewsPicker story so that they can be tested with the padding prop, and you can select values to try it out.

Happy for any and continued feedback of course! I'll be working on other things next week so I may be slow to implement further ideas, but I'll do my best!

@andrewserong andrewserong marked this pull request as ready for review November 21, 2025 04:48
@github-actions
Copy link

github-actions bot commented Nov 21, 2025

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: andrewserong <[email protected]>
Co-authored-by: jameskoster <[email protected]>
Co-authored-by: aduth <[email protected]>
Co-authored-by: oandregal <[email protected]>
Co-authored-by: StevenDufresne <[email protected]>
Co-authored-by: ntsekouras <[email protected]>
Co-authored-by: jasmussen <[email protected]>
Co-authored-by: fcoveram <[email protected]>
Co-authored-by: p-jackson <[email protected]>
Co-authored-by: tellthemachines <[email protected]>
Co-authored-by: ramonjd <[email protected]>
Co-authored-by: youknowriad <[email protected]>
Co-authored-by: talldan <[email protected]>

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

@oandregal
Copy link
Member

Hey, thanks for all the discussions, prototypes, and conversation to figure out this one. I wanted to surface a comment I've made in another place.

If we introduce CSS Custom Properties as the way to style DataViews, etc., this needs to be treated as public API:

  • It needs a "Styles/Design tokens" section in the README.
  • It needs tests.
  • Breaking changes need to be documented in the CHANGELOG.

I'm happy to help figure out how to better test this, but I'd appreciate it if you all bootstrap a new README section in DataViews for this.

.dataviews-footer {
padding: $grid-unit-15 $grid-unit-30;
padding-block-start: $grid-unit-15;
padding-block-end: var(--wp-dataviews-padding-block-end, #{$grid-unit-15});
Copy link
Member

Choose a reason for hiding this comment

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

I asked the same question in the other place, resurfacing here as well:

I've noticed that we're using --wp-* in existing components, and --wpds- in other places. When do we use one, and when do we use another? I haven't found anything that clarifies that, and would like to understand which one should we use here.

Copy link
Contributor

Choose a reason for hiding this comment

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

--wpds- tokens come from from the Theme package and are consumed by the components in the new UI package.

Eventually we'll want this variable to reference one of those tokens for the fallback instead of grid-unit-15. E.g.:

var(--wp-dataviews-padding-block-end, --wpds-dimension-padding-surface-lg)

I don't have any strong feelings about how the DataView-specific variables should be named.

isItemClickable={ () => hasClickableItems }
defaultLayouts={ defaultLayouts }
config={ { perPageSizes } }
padding={ padding }
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 need this property? Perhaps I've misinterpreted the conversation in this PR and this other one, so correct me if I'm wrong: aren't we promoting the use of CSS Custom Properties to style DataViews? If so, why having both things?

cc @jameskoster

Copy link
Member

@oandregal oandregal Nov 21, 2025

Choose a reason for hiding this comment

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

In other words, how consumers are expected to tweak the padding (or background in the other PR):

:root {
  --wp-dataviews-padding-block-start: /* ... */
}

or

<DataViews
  padding={ ... }
/> 

I thought Jay argued for the 1st approach, given that's how other components in the upcoming new design system (@wordpress/theme and @wordpress/ui) and the existing @wordpress/components work.

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 know if this is a good reason, but we might want to tweak some styles when the padding is a specific value (0), and a dedicated property can enable that(?).

control: 'boolean',
description: 'Are the items clickable',
},
padding: {
Copy link
Member

Choose a reason for hiding this comment

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

One thing on my mind is how do we test this public API? Starting by allowing folks to change them in the storybook sounds a great first step.

I'd like to give this public API more visibility and easier ways of testing and detect regressions. We could introduce a new story (name TBD, perhaps "Styles"? "Design Tokens"?, any works for me) where we expose every one of the design tokens we offer in DataViews. In this case, we should add the following controls:

  • padding block end
  • padding block start
  • padding inline end
  • padding inline start

.dataviews-loading,
.dataviews-no-results {
padding-inline: $grid-unit-30;
padding-inline-start: $grid-unit-30;
Copy link
Member

Choose a reason for hiding this comment

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

My understanding was that the benefit of introducing an API for styling DataViews was that we'd no longer need container specific styles. Why do we still require these styles for the card? Shouldn't they be removed?

@jameskoster
Copy link
Contributor

As you pointed out before, with 0 padding certain elements are getting cut off, e.g. the focus ring on the view options button:

Screenshot 2025-11-21 at 13 03 46

I was a bit surprised to see a different row-hover style in DataViewsPicker table layout compared to regular DataViews. Is that intentional, or maybe a separate issue? Let me know and I'll open one to track.

I think the padding prop should only affect horizontal padding; vertical spacing seems better left to density? This highlights another potential issue with this approach... We only really need padding customisation for table and list layouts—grid layout basically never needs any padding. So I began to wonder whether padding should be customisable per layout, and I'm struck once again with how much complexity we're adding here basically just to preserve the edge-to-edge border design in table and list layouts 😅 Imho the juice simply isn't worth the squeeze, and adding a bunch of complexity to account for an inconsequential design choice just feels backwards.

Obviously it goes way beyond the scope of this PR, but out of curiosity I wanted to see how critical this detail is as we think about the broader admin design. This is a super-quick mockup, but as far as I'm concerned it demonstrates a nice design is perfectly achievable without being dependent edge-to-edge borders. So I have to ask, if we didn't treat this one detail as a constraint, would we still want to add all of this complexity?

admin

@andrewserong
Copy link
Contributor Author

Thanks for all the discussion, folks! Before continuing to polish this PR, I would like to get a sense of whether or not we think it's worth pursuing further as it does add a fair bit of complexity.

Imho the juice simply isn't worth the squeeze, and adding a bunch of complexity to account for an inconsequential design choice just feels backwards.

I agree. I quite liked an earlier PR we were looking at that settled on standardising on 24px padding, and that one also resulted in reducing the complexity of the CSS styling for the component. I know we're going back and forth a bit, but personally I feel a fair bit more confident about this one:

What do folks think? Is it worth pursuing customisability, or should we settle on DataViews remaining opinionated about its padding, but potentially making it a little simpler?

@andrewserong
Copy link
Contributor Author

Now that #73334 has landed (standardize on 24px padding), I'll close this PR out. We can always revisit the concept of customisable padding in subsequent PRs, though. Thanks again for all the input, everyone!

@oandregal oandregal deleted the try/dataviews-with-custom-padding-x branch December 9, 2025 10:14
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.

DataViewsPicker: Improve appearance when used in a Modal component

6 participants