Skip to content

Conversation

@aduth
Copy link
Member

@aduth aduth commented Nov 12, 2025

What?

Closes #73360

Updates theme package to implement basic support for density.

Why?

As described in #71196, density is intended to be one of the key configurable aspects of theming. Several of the use-cases described for Boxes associated with #72784 are related to context-specific spacing adjustments (see #72336 (comment)).

How?

  • Uses DTCG-standard Extensions syntax to provide "overrides" for semantic spacing tokens, defined using "modes" that Terrazzo tool can understand as part of compiled CSS
  • The changes here include a fix to the behavior of the plugin introduced in Theme: Inline values for primitive tokens in CSS output #72890 which handles value inlining, since it previously did not handle this type of mode overrides behavior (where mode values may also reference a primitive value in a way that needs to be appropriately inlined)

Testing Instructions

Verify in Storybook:

  1. Run npm run storybook:dev
  2. Go to http://localhost:50240/
  3. In sidebar navigation, navigate to "Design System" > "Components" > "Box" > "Default"
  4. Use "Theme" button in Storybook toolbar to toggle to different densities like "Compact" and "Comfortable"
  5. Observe that the padding varies based on density selection

Screenshots or screencast

Screen.Recording.2025-11-13.at.3.26.04.PM.mov

@aduth aduth requested review from a team and jameskoster November 12, 2025 22:12
@aduth aduth added [Type] Enhancement A suggestion for improvement. [Package] Theme /packages/theme labels Nov 12, 2025
@github-actions
Copy link

github-actions bot commented Nov 12, 2025

Size Change: +555 B (+0.02%)

Total Size: 2.51 MB

Filename Size Change
build/modules/boot/index.min.js 69.7 kB +543 B (+0.79%)
build/scripts/theme/index.min.js 20.8 kB +12 B (+0.06%)
ℹ️ 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/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 300 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-site/index.min.js 232 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/media-utils/index.min.js 65.9 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/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.3 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-site/style-rtl.css 16 kB
build/styles/edit-site/style.css 16 kB
build/styles/edit-widgets/style-rtl.css 4.67 kB
build/styles/edit-widgets/style.css 4.67 kB
build/styles/editor/style-rtl.css 18.6 kB
build/styles/editor/style.css 18.6 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

@jameskoster
Copy link
Contributor

Cool :)

Appreciate it's a separate thing but it'd be neat if it was possible to change theme aspects like density in the Storybook toolbar.

Comment on lines 130 to 146
[data-wpds-theme-provider-id][data-wpds-density='compact'] {
--wpds-dimension-padding-surface-large: 16px; /* Large spacing for surfaces */
--wpds-dimension-padding-surface-medium: 12px; /* Medium spacing for surfaces */
--wpds-dimension-padding-surface-small: 8px; /* Small spacing for surfaces */
--wpds-dimension-padding-surface-x-small: 4px; /* Extra small spacing for surfaces */
}

[data-wpds-theme-provider-id][data-wpds-density='comfortable'] {
--wpds-dimension-padding-surface-large: 24px; /* Large spacing for surfaces */
--wpds-dimension-padding-surface-medium: 20px; /* Medium spacing for surfaces */
--wpds-dimension-padding-surface-small: 16px; /* Small spacing for surfaces */
--wpds-dimension-padding-surface-x-small: 12px; /* Extra small spacing for surfaces */
}

Copy link
Contributor

@jameskoster jameskoster Nov 13, 2025

Choose a reason for hiding this comment

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

I don't have a strong opinion but I'm wondering if a naming convention like xs, sm, md, lg, xl would be better.

Copy link
Member Author

Choose a reason for hiding this comment

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

I think we could still change it at this point if we think it'd be an improvement. For context, these are largely carried over from existing conventions like what exist in base-styles (example)

Copy link
Contributor

Choose a reason for hiding this comment

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

I think the shorter names are a bit easier to interpret when the scale grows. IE 4xs is slightly more intuitive than 4-x-small. It also makes the tokens names shorter, and a bit easier to scan in a list. So I think I lean in that direction, but only slightly. Keen to hear other thoughts cc @mattmiklic.

/**
* The density of the theme.
*/
density?: 'compact' | 'comfortable';
Copy link
Contributor

Choose a reason for hiding this comment

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

Should there be a middle-ground default, 'balanced' or similar?

Copy link
Contributor

Choose a reason for hiding this comment

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

Ah, I understand there is a default, but it's not named. Feel free to resolve :D

Copy link
Member Author

Choose a reason for hiding this comment

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

Yeah, the absence of an override is considered the default. We could have something more explicit, though I think this mirrors nicely to the way it works in the tokens, which is that the densities are "extensions" (i.e. overrides) to some base value.

Copy link
Member

Choose a reason for hiding this comment

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

I think we should at least mention in the prop description that it's going to use some other default density as the default. As it looks to a consumer now, we might as well just forgotten to document whether the default is compact or comfortable.

export const Compact: Story = {
...Default,
globals: {
density: 'compact',
Copy link
Contributor

@jameskoster jameskoster Nov 13, 2025

Choose a reason for hiding this comment

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

I guess it could be useful to have a comfortable story too. Maybe also a story that includes all densities so you can try out the full matrix of padding/density combos.

Copy link
Member Author

@aduth aduth Nov 13, 2025

Choose a reason for hiding this comment

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

Yeah, and to your other point about Storybook configurability, this is something I had been intentionally punting, though is starting to make it difficult to demonstrate or test the differences, so might make sense to do sooner than later (i.e. maybe implement as part of this work).

"comfortable": "24px"
},
"description": "Large spacing for surfaces"
},
Copy link
Contributor

@jameskoster jameskoster Nov 13, 2025

Choose a reason for hiding this comment

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

I think we'll probably need tokens for 32px and 48px padding. 32px is currently used in Dialogs and 48px in DataViews.

I guess that also means we'll need a new primitive so that 48px can jump to 56px in comfortable density.

@aduth
Copy link
Member Author

aduth commented Nov 13, 2025

Appreciate it's a separate thing but it'd be neat if it was possible to change theme aspects like density in the Storybook toolbar.

I updated in 55afefb to add some global theme configuration to the Storybook toolbar. It ended up being a bit more involved than I initially anticipated (implemented as a custom Storybook addon), but the end result is quite nice. And the toolbar item is only shown on stories in the new "Design System" section.

Screen.Recording.2025-11-13.at.3.26.04.PM.mov

@aduth
Copy link
Member Author

aduth commented Nov 13, 2025

I'm going to mark this as ready for review, with a couple notes:

  • @jameskoster Could we maybe collaborate on a set of mappings for the initial slate of semantic surface tokens and their compact, default, and comfortable variations?
  • @mirka As part of 55afefb, I had to go a different direction from what you implemented in Storybook: Fix dev script #72487, since it looks like recent changes to the build have made your changes ineffective. The .dev-ready file is being created before transpilation happens, so the original issue resurfaced. As far as I can tell, we don't need to be watching files manually, and can entrust that to Storybook? Maybe I'm missing something, but I tested live updates to components and it seemed to work fine.

@aduth aduth marked this pull request as ready for review November 13, 2025 20:42
@github-actions
Copy link

github-actions bot commented Nov 13, 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: aduth <[email protected]>
Co-authored-by: jameskoster <[email protected]>
Co-authored-by: mirka <[email protected]>

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

@jameskoster
Copy link
Contributor

add some global theme configuration to the Storybook toolbar.

Awesome!

Could we maybe collaborate on a set of mappings for the initial slate of semantic surface tokens and their compact, default, and comfortable variations?

Do you mean map the tokens to real UI for a visual demo? If so, do you think it would be possible to update the Figma plugin that Marco created to import the spacing tokens? I see they're included in figma.json but running the importer only seems to creates color variables.

Somewhat related, I do think we'll want to support inline and block padding sooner rather than later. I was thinking about Badges as an example; they'd likely use inline padding but not block padding.

@aduth
Copy link
Member Author

aduth commented Nov 14, 2025

Could we maybe collaborate on a set of mappings for the initial slate of semantic surface tokens and their compact, default, and comfortable variations?

Do you mean map the tokens to real UI for a visual demo? If so, do you think it would be possible to update the Figma plugin that Marco created to import the spacing tokens? I see they're included in figma.json but running the importer only seems to creates color variables.

What I had in mind was similar to #72984 (comment), if you had ideas for which primitives values should be referenced by each specific density + spacing token combination.

Regarding Figma, I think it's worth revisiting though I'm also holding my breath that they ship their native support soon and it can handle this all better.

Somewhat related, I do think we'll want to support inline and block padding sooner rather than later. I was thinking about Badges as an example; they'd likely use inline padding but not block padding.

This is supported in the component implementation itself and not in the design tokens. Do you think it needs to be in the tokens?

i.e.

<Box padding={ { block: 'small', inline: 'medium' } } />

@aduth
Copy link
Member Author

aduth commented Nov 14, 2025

Alternatively, maybe we can make a quick pass at tuning up the names and values of the small, medium, large, etc. tokens as a separate task after merging this one, especially as we'll want to invite some other feedback to those choices that ideally shouldn't hold up this one.

@aduth
Copy link
Member Author

aduth commented Nov 14, 2025

Somewhat related, I do think we'll want to support inline and block padding sooner rather than later. I was thinking about Badges as an example; they'd likely use inline padding but not block padding.

This is supported in the component implementation itself and not in the design tokens. Do you think it needs to be in the tokens?

I had a chat with my AI companion today and I think we may end up needing block vs. inline spacing as part of tokens for specific groupings of tokens where it makes sense to encode those design decisions (e.g. inputs / "controls", etc.) but not necessarily as baseline for all spacing tokens.

Or this could be a component-level consideration, like inputs defining their inline padding as 2x the block padding, as part of styles:

.input {
  padding-block: var(--wpds-dimension-padding-control-sm);
  padding-inline: calc(var(--wpds-dimension-padding-control-sm) * 2);
}

package.json Outdated
"storybook:build": "storybook build -c ./storybook -o ./storybook/build",
"storybook:dev": "concurrently \"npm run dev\" \"wait-on .dev-ready && storybook dev -c ./storybook -p 50240\"",
"storybook:e2e:dev": "concurrently \"npm run dev\" \"wait-on .dev-ready && storybook dev -c test/storybook-playwright/storybook -p 50241\"",
"storybook:dev": "npm run build && storybook dev -c ./storybook -p 50240",
Copy link
Member

Choose a reason for hiding this comment

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

  • As far as I can tell, we don't need to be watching files manually, and can entrust that to Storybook? Maybe I'm missing something, but I tested live updates to components and it seemed to work fine.

If the basic setup hasn't changed, normal watchers like in the Storybook dev script won't be able to auto-rebuild changes in the Sass stylesheets in most wp packages. All the stylesheets are just imported in the index stylesheet and not imported by the component files that use them, so there isn't a proper dependency graph for a standard dev script to follow.

Copy link
Member Author

Choose a reason for hiding this comment

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

Okay 👍 The current script here is busted though, because it writes .dev-ready before the build even finishes.

Here's some ideas:

  • We could somehow shift the .dev-ready into the package, or expect it to provide some signal to the script when it's appropriate to write the file
  • Similar to something I suggested earlier, we could do an initial build and then switch to "watch" for the Storybook. We'd probably want to add some support to dev to "skip initial build", also because we don't want it to clean (read: destroy) the built files

Copy link
Member Author

Choose a reason for hiding this comment

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

Some of this could happen in a follow-up. I think the current state is much more broken than not having stylesheets recompiled on changes (a "nice to have").

Copy link
Member

@mirka mirka Nov 14, 2025

Choose a reason for hiding this comment

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

Weird, I just tried npm run storybook: dev on trunk and it's largely working for me (Storybook boots without error), aside from these warnings:

[1] WARN export 'default' (imported as 'FontSize') was not found in './font-sizes/font-size' (module has no exports)
[1] WARN Module Warning (from ./node_modules/sass-loader/dist/cjs.js):
[1] WARN Deprecation Warning on line 0, column 8 of file:///Users/lena/Documents/Work/Automattic/gutenberg/storybook/global-basic.lazy.scss:0:8:
[1] WARN Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
[1] WARN 
[1] WARN More info and automated migrator: https://sass-lang.com/d/import
[1] WARN 
[1] WARN 0 | @import "~@wordpress/base-styles/variables";
[1] WARN 
[1] WARN 
[1] WARN ../../../../storybook/global-basic.lazy.scss 1:9  root stylesheet
[1] WARN 
[1] WARN Module Warning (from ./node_modules/sass-loader/dist/cjs.js):
[1] WARN Deprecation Warning on line 0, column 8 of file:///Users/lena/Documents/Work/Automattic/gutenberg/storybook/global-wordpress.lazy.scss:0:8:
[1] WARN Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
[1] WARN 
[1] WARN More info and automated migrator: https://sass-lang.com/d/import
[1] WARN 
[1] WARN 0 | @import "~@wordpress/base-styles/colors";
[1] WARN 
[1] WARN 
[1] WARN ../../../../storybook/global-wordpress.lazy.scss 1:9  root stylesheet
[1] WARN 
[1] WARN
[1]  Module Warning (from ./node_modules/sass-loader/dist/cjs.js):
[1] WARN Deprecation Warning on line 0, column 8 of file:///Users/lena/Documents/Work/Automattic/gutenberg/storybook/stories/playground/fullpage/style.lazy.scss:0:8:
[1] WARN Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
[1] WARN 
[1] WARN More info and automated migrator: https://sass-lang.com/d/import
[1] WARN 
[1] WARN 0 | @import "~@wordpress/base-styles/colors";
[1] WARN 
[1] WARN 
[1] WARN ../../../../storybook/stories/playground/fullpage/style.lazy.scss 1:9  root stylesheet
[1] WARN 
[1] WARN Module Warning (from ./node_modules/sass-loader/dist/cjs.js):
[1] WARN Deprecation Warning on line 1, column 8 of file:///Users/lena/Documents/Work/Automattic/gutenberg/storybook/stories/playground/fullpage/style.lazy.scss:1:8:
[1] WARN Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
[1] WARN 
[1] WARN More info and automated migrator: https://sass-lang.com/d/import
[1] WARN 
[1] WARN 1 | @import "~@wordpress/base-styles/variables";
[1] WARN 
[1] WARN 
[1] WARN ../../../../storybook/stories/playground/fullpage/style.lazy.scss 2:9  root stylesheet
[1] WARN 
[1] WARN Module Warning (from ./node_modules/sass-loader/dist/cjs.js):
[1] WARN Deprecation Warning on line 2, column 8 of file:///Users/lena/Documents/Work/Automattic/gutenberg/storybook/stories/playground/fullpage/style.lazy.scss:2:8:
[1] WARN Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
[1] WARN 
[1] WARN More info and automated migrator: https://sass-lang.com/d/import
[1] WARN 
[1] WARN 2 | @import "~@wordpress/base-styles/mixins";
[1] WARN 
[1] WARN 
[1] WARN ../../../../storybook/stories/playground/fullpage/style.lazy.scss 3:9  root stylesheet
[1] WARN 
[1] WARN Module Warning (from ./node_modules/sass-loader/dist/cjs.js):
[1] WARN Deprecation Warning on line 3, column 8 of file:///Users/lena/Documents/Work/Automattic/gutenberg/storybook/stories/playground/fullpage/style.lazy.scss:3:8:
[1] WARN Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
[1] WARN 
[1] WARN More info and automated migrator: https://sass-lang.com/d/import
[1] WARN 
[1] WARN 3 | @import "~@wordpress/base-styles/breakpoints";
[1] WARN 
[1] WARN 
[1] WARN ../../../../storybook/stories/playground/fullpage/style.lazy.scss 4:9  root stylesheet
[1] WARN 
[1] WARN Module Warning (from ./node_modules/sass-loader/dist/cjs.js):
[1] WARN Deprecation Warning on line 4, column 8 of file:///Users/lena/Documents/Work/Automattic/gutenberg/storybook/stories/playground/fullpage/style.lazy.scss:4:8:
[1] WARN Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
[1] WARN 
[1] WARN More info and automated migrator: https://sass-lang.com/d/import
[1] WARN 
[1] WARN 4 | @import "~@wordpress/base-styles/animations";
[1] WARN 
[1] WARN 
[1] WARN ../../../../storybook/stories/playground/fullpage/style.lazy.scss 5:9  root stylesheet
[1] WARN 
[1] WARN Module Warning (from ./node_modules/sass-loader/dist/cjs.js):
[1] WARN 2 repetitive deprecation warnings omitted.
[1] WARN Run in verbose mode to see all warnings.

(Not sure what the FontSize problem is, that's new to me.)

Are you seeing any errors that prevent Storybook from booting? I also checked the file history, and I couldn't really identify any changes that would fundamentally break the original wait mechanism. IIRC, we basically only need to wait for the initial tsc --build to complete, and that's still intact.

Copy link
Member Author

@aduth aduth Nov 14, 2025

Choose a reason for hiding this comment

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

My impression is that it's a race condition which may not always be manifesting consistently as an error.

What I can see in trunk which validates the potential for race conditions is that in the output of npm run storybook:dev , you can see transpilation messages intermixed with Storybook output, which is a strong signal that Storybook is not waiting for the build to finish before starting. I believed this was the same sort of issue that prompted your changes in #72487

Example snippet showing transpilation and Storybook book happening concurrently for me on trunk:

[0]    ✔ Transpiled eslint-plugin (29ms)
[0]    ✔ Transpiled keycodes (136ms)
[0]    ✔ Transpiled react-i18n (135ms)
[0]    ✔ Transpiled date (139ms)
[0]    ✔ Transpiled a11y (139ms)
[1] @storybook/core v8.4.7
[1] 
[0]    ✔ Transpiled primitives (148ms)
[0]    ✔ Transpiled theme (158ms)
[0]    ✔ Transpiled api-fetch (159ms)
[0]    ✔ Transpiled dom (176ms)
[0]    ✔ Transpiled scripts (3ms)

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 the same, but FWIW that's same behavior as when I first added the wait mechanism. It never waited for transpilation, or anything else in the main build script. If I understand correctly, we don't have to wait for the entire build to complete, just certain "prebuild" that must be ready when the Storybook's builder (webpack) starts.

Yes it's messy, but if the Storybook is working then it's probably fine? 🙈 At least for the scope of this PR.

Copy link
Member Author

Choose a reason for hiding this comment

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

Yes it's messy, but if the Storybook is working then it's probably fine? 🙈 At least for the scope of this PR.

It wasn't working originally, which is what prompted the changes.

Although testing again (via git checkout trunk -- bin/dev.mjs .gitignore package.json on this branch), I'm not able to reproduce the errors as the branch exists now.

What I think happened is that in earlier iterations of the pull request, I considered having "fancier" options in the Theme dropdown to show some previews for the color theme using DuotoneSwatch, and it was the import of that component that triggered the error.

I was able to reproduce it by adding back the swatch as a test:

diff --git a/storybook/addons/design-system-theme/register.tsx b/storybook/addons/design-system-theme/register.tsx
index badc085441..9f3396376e 100644
--- a/storybook/addons/design-system-theme/register.tsx
+++ b/storybook/addons/design-system-theme/register.tsx
@@ -11,2 +11,3 @@ import {
 } from '@storybook/components';
+import { DuotoneSwatch } from '@wordpress/components';
 
@@ -83,2 +84,3 @@ const ThemeTool = () => {
 				<MirrorIcon />
+				<DuotoneSwatch />
 				Theme

At that point running npm run storybook:dev I see:

[1] ✘ [ERROR] Could not resolve "@wordpress/components"
[1] 
[1]     storybook/addons/design-system-theme/register.tsx:12:30:
[1]       12 │ import { DuotoneSwatch } from '@wordpress/components';
[1]          ╵                               ~~~~~~~~~~~~~~~~~~~~~~~
[1] 
[1]   The module "./build-module/index.js" was not found on the file system:
[1] 
[1]     node_modules/@wordpress/components/package.json:30:13:
[1]       30 │       "import": "./build-module/index.js",
[1]          ╵                 ~~~~~~~~~~~~~~~~~~~~~~~~~
[1] 
[1]   You can mark the path "@wordpress/components" as external to exclude it from the bundle, which will remove this error and leave the unresolved path in the bundle.
[1] 
[1] Error: Build failed with 1 error:
[1] storybook/addons/design-system-theme/register.tsx:12:30: ERROR: Could not resolve "@wordpress/components"

For the purpose of this pull request as is and to avoid holding this up, I can revert these changes for now, but I expect it's likely the issue will manifest again in the future.

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, yeah that's bad, thanks for posting that repro. I agree we'll need some improvements like you suggested in #73215 (comment), sooner or later.

@jameskoster
Copy link
Contributor

if you had ideas for which primitives values should be referenced by each specific density + spacing token combination.

Sorry, end of a long week... in other words do you mean review packages/theme/tokens/dimension.json? If so I can add to my todo for next week. It will probably need some mockups to get right.


For things like inputs (which I'd say is roughly the same as badges) would it make sense to have semantic tokens for them as a family? So like we have padding.surface.x-small we'd have padding.input.small (or maybe padding.interactive,small to align with colors). This is partly why I suggest inline and block at this level, so we can do things like padding.interactive.inline, padding.interactive.small.compact.inline. I guess this is where we hit an awkward tension between input size and density... they're kind of the same thing 😅

@aduth
Copy link
Member Author

aduth commented Nov 18, 2025

@jameskoster and I were able to connect today and iterate on spacing options in b7c4da6:

  • Revise the predefined values to match common usage
  • Rename size properties from "small" to short-hand "sm", etc.
    • We'll want to extend this to other existing token groupings like border, elevation, etc., but this'll be a separate task as those need to be revisited anyways and are unfinished
  • Extend the scale to include a new 2xs option (4px baseline option)

@aduth aduth force-pushed the add/theme-density branch from b7c4da6 to 79291f9 Compare November 19, 2025 14:46
@aduth aduth requested a review from a team November 19, 2025 14:46
@github-actions
Copy link

github-actions bot commented Nov 19, 2025

Flaky tests detected in 4fe0f86.
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/19516069049
📝 Reported issues:

/**
* The density of the theme.
*/
density?: 'compact' | 'comfortable';
Copy link
Member

Choose a reason for hiding this comment

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

I think we should at least mention in the prop description that it's going to use some other default density as the default. As it looks to a consumer now, we might as well just forgotten to document whether the default is compact or comfortable.

@aduth aduth requested a review from mirka November 19, 2025 21:30
Copy link
Member

@mirka mirka left a comment

Choose a reason for hiding this comment

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

Works well! 🚀

Comment on lines +27 to +34
/**
* The density of the theme. If left unspecified, the theme inherits from
* the density of the closest `ThemeProvider`, or uses the default density
* if there is no inherited density.
*
* @default undefined
*/
density?: undefined | 'default' | 'compact' | 'comfortable';
Copy link
Member

Choose a reason for hiding this comment

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

Just a thought, no strong opinion, but would something like this be more intuitive? Personally I think it would be easier to understand when skimming the docs, since it's closer to the CSS mental model.

Suggested change
/**
* The density of the theme. If left unspecified, the theme inherits from
* the density of the closest `ThemeProvider`, or uses the default density
* if there is no inherited density.
*
* @default undefined
*/
density?: undefined | 'default' | 'compact' | 'comfortable';
/**
* The density of the theme. If left unspecified, the theme inherits from
* the density of the closest `ThemeProvider`, or uses the default density
* if there is no inherited density.
*
* @default 'inherit'
*/
density?: 'inherit' | 'default' | 'compact' | 'comfortable';

Copy link
Member Author

@aduth aduth Nov 20, 2025

Choose a reason for hiding this comment

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

Hm, I think there's some advantages to that, particularly around explicitness. However, on the whole, I don't know that it's a change I want to make now:

  • The idea of using undefined (absence of value) as interpreted to inherit from the parent is consistent with how we're treating color customization above (source)
  • While not really a blocker in itself, doing this incurs some internal technical complexity because we need to normalize the 'inherit' value back to undefined in order to effect the inherit behavior by ensuring that data-wpds-density isn't assigned (source) because, unlike [data-wpds-density="compact"], etc., we don't have an explicit selector for the inherited behavior (there is no [data-wpds-density="inherit"]).
  • The suggestion feels like a logical step in part because of how I've gone out of my way to be explicit here, though in retrospect I'm not fully convinced it was necessary to be so explicit (i.e. including @default undefined and including undefined in the type union for density).

Copy link
Member

Choose a reason for hiding this comment

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

That's fair. Maybe it looks weird to me because all our "physical" components do @default 'default', and this is the first time we're doing props with inheritance.

@aduth aduth merged commit 599b25e into trunk Nov 20, 2025
46 checks passed
@aduth aduth deleted the add/theme-density branch November 20, 2025 18:51
@github-actions github-actions bot added this to the Gutenberg 22.2 milestone Nov 20, 2025
peterwilsoncc pushed a commit to peterwilsoncc/gutenberg-build that referenced this pull request Nov 20, 2025
* Theme: Fix inline plugin handling of modes

* Theme: Add density support for surface padding

* UI: Update Box story demonstrating density spacing

* Storybook: Add Theme control addon for design system stories

* Update theme story to demonstrate density nesting

* Remove Compact Box story

Now configurable through global theme configuration

* Revert changes to Storybook build with dev-ready indicator

See: https://github.com/WordPress/gutenberg/pull/73215/files#r2527844132

* Update size options to extend to baseline 4px spacing

* Use updated name for small padding token

* Ensure default CSS included in Storybook story

* Add explicit default density option

Allow resetting if unset density would otherwise inherit from a non-default density ancestor

* Limit Storybook theming options to design system components

Avoid interfering with theming shown in ThemeProvider stories

* Improve title of IconButton for Theme toolbar item

See: WordPress/gutenberg#73215 (comment)
Co-Authored-By: Lena Morita <[email protected]>

* Use padding tokens for primary, neutral color demonstration

---------

Co-authored-by: Lena Morita <[email protected]>

Co-authored-by: aduth <[email protected]>
Co-authored-by: jameskoster <[email protected]>
Co-authored-by: mirka <[email protected]>

Source: WordPress/gutenberg@599b25e
@bph bph added the Design System Issues related to the system of combining components according to best practices. label Nov 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Design System Issues related to the system of combining components according to best practices. [Package] Theme /packages/theme [Type] Enhancement A suggestion for improvement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Theme: Add support for density configuration

5 participants