Skip to content

Conversation

@talldan
Copy link
Contributor

@talldan talldan commented Sep 18, 2025

What?

Part of #71517
Contributes to solving #71557

Adds editable fields for contentOnly patterns. At the moment this only shows UI for non-container blocks, and I think it covers most of the main use cases with some outliers. Galleries, Links, and others should probably have some kind of drilldown, but I'll work on this as a followup.

TODO

  • Make the new APIs from this PR private
  • Explore using DataForms
  • Consider improvements to drilldown mechanic
  • Make it possible to select the blocks from the inspector fields.

Differences to #71567

  • Uses the correct controls for fields. E.g. RichText for Rich Text, Plain text for normal text, Media Dropdown for Media, Link Control for links. It turns out the majority of blocks are made up of only those four things for their content. 😄
  • Requires config on blocks in the index.js. I think this is a more achievable way to start. It may be possible to follow up by inferring the controls for blocks like Experimental - Add content attribute controls to "Content" sidebar in contentOnly #71567, but I think having a working implementation and reverse engineering it will be much easier. The config shows fairly clearly what each block requires.
  • Uses ToolsPanel, but I'm not married to this. The UI is quite heavy in appearance IMO, but maybe there's a way to lighten it up. I think DataForm is definitely the right choice in the long run, but it'll require some improvements which will take a little longer (e.g. adding the new fields, being able to show/hide a default selection of fields).

Other notes

  • I need to follow up with making the new APIs private, and refine a few things.
  • The RichTextControl seems to work, but I don't know the APIs involved all that well, so it might be a bit sketchy! I also had to copy/paste a lot of styles to make it look like an input. Not sure if there's a better option.
  • This needs testing with bindings and pattern overrides. I have a suspicion it won't work automatically and might need some adjustments if block bindings still works the way I remember (hooking in to setAttributes and not updateBlockAttributes)

Testing Instructions

  1. Enable the experiment
  2. Add an unsynced pattern
  3. Open the inspector and edit the content

Screenshots or screencast

(In the video there's an issue where LinkControl doesn't open up correctly when at the bottom of the screen, I need to fix it)

Kapture.2025-09-18.at.10.19.30.mp4
@talldan talldan self-assigned this Sep 18, 2025
@talldan talldan added [Type] Experimental Experimental feature or API. [Feature] Patterns A collection of blocks that can be synced (previously reusable blocks) or unsynced labels Sep 18, 2025
@github-actions
Copy link

github-actions bot commented Sep 18, 2025

Size Change: +5.9 kB (+0.25%)

Total Size: 2.41 MB

Filename Size Change
build/scripts/block-editor/index.min.js 299 kB +3.78 kB (+1.28%)
build/scripts/block-library/index.min.js 275 kB +1.29 kB (+0.47%)
build/scripts/editor/index.min.js 283 kB +28 B (+0.01%)
build/styles/block-editor/style-rtl.css 16.4 kB +402 B (+2.52%)
build/styles/block-editor/style.css 16.3 kB +400 B (+2.51%)
ℹ️ View Unchanged
Filename Size
build/modules/a11y/index.min.js 355 B
build/modules/block-editor/utils/fit-text-frontend.min.js 440 B
build/modules/block-library/accordion/view.min.js 528 B
build/modules/block-library/file/view.min.js 346 B
build/modules/block-library/form/view.min.js 528 B
build/modules/block-library/image/view.min.js 1.95 kB
build/modules/block-library/navigation/view.min.js 1.03 kB
build/modules/block-library/query/view.min.js 518 B
build/modules/block-library/search/view.min.js 498 B
build/modules/block-library/tabs/view.min.js 776 B
build/modules/boot/index.min.js 89.8 kB
build/modules/interactivity-router/full-page.min.js 451 B
build/modules/interactivity-router/index.min.js 11.5 kB
build/modules/interactivity/index.min.js 14.9 kB
build/modules/latex-to-mathml/index.min.js 56.5 kB
build/modules/latex-to-mathml/loader.min.js 131 B
build/modules/lazy-editor/index.min.js 12.1 kB
build/scripts/a11y/index.min.js 1.06 kB
build/scripts/annotations/index.min.js 2.38 kB
build/scripts/api-fetch/index.min.js 2.83 kB
build/scripts/autop/index.min.js 2.18 kB
build/scripts/blob/index.min.js 631 B
build/scripts/block-directory/index.min.js 8.03 kB
build/scripts/block-serialization-default-parser/index.min.js 1.16 kB
build/scripts/block-serialization-spec-parser/index.min.js 3.08 kB
build/scripts/blocks/index.min.js 56.1 kB
build/scripts/commands/index.min.js 17.4 kB
build/scripts/components/index.min.js 271 kB
build/scripts/compose/index.min.js 13.8 kB
build/scripts/core-commands/index.min.js 4.13 kB
build/scripts/core-data/index.min.js 86 kB
build/scripts/customize-widgets/index.min.js 12.3 kB
build/scripts/data-controls/index.min.js 793 B
build/scripts/data/index.min.js 9.61 kB
build/scripts/date/index.min.js 23.6 kB
build/scripts/deprecated/index.min.js 752 B
build/scripts/dom-ready/index.min.js 476 B
build/scripts/dom/index.min.js 4.91 kB
build/scripts/edit-post/index.min.js 16.4 kB
build/scripts/edit-site/index.min.js 228 kB
build/scripts/edit-widgets/index.min.js 20 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 64.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.1 kB
build/scripts/react-i18n/index.min.js 832 B
build/scripts/react-refresh-entry/index.min.js 9.44 kB
build/scripts/react-refresh-runtime/index.min.js 3.59 kB
build/scripts/redux-routine/index.min.js 3.36 kB
build/scripts/reusable-blocks/index.min.js 2.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-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.33 kB
build/styles/edit-post/style.css 3.33 kB
build/styles/edit-site/style-rtl.css 15.4 kB
build/styles/edit-site/style.css 15.4 kB
build/styles/edit-widgets/style-rtl.css 4.59 kB
build/styles/edit-widgets/style.css 4.59 kB
build/styles/editor/style-rtl.css 18.1 kB
build/styles/editor/style.css 18.1 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 Sep 18, 2025

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

Copy link
Member

@ramonjd ramonjd left a comment

Choose a reason for hiding this comment

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

This is a really promising direction. Thank you for getting it up @talldan

I think there's value in exposing an API to blocks, more so if, later, there's a way to register field controls or rely on Dataforms. And especially if this is coupled with smart defaults.

The more I think about it, the more I can picture the benefits of an inspector-based content editing approach:

  • it centralizes content editing, but still having canvas editing as a complementary mechanism
  • reduces friction: users don't have to click into each block individually and deal with visual clutter, and also don't have to understand which blocks are editable vs. which are locked
  • for patterns with multiple text fields, users don't have to to click in/out of each block repeatedly

There are going to be some trade offs that can be hopefully addressed by good design choices.

For example, it's a new interaction pattern to learn. Not here, but later, we might want to provide "Edit on Canvas" option for users who prefer it, or make it obvious that it can be detached.

For patterns with many content blocks there'll be iterations to avoid the vertical scrolling nightmare, cognitive overload, and performance.

On mobile we'd want it to be usable too. Some ideas here:

  • hierarchical grouping, e.g., grouping headings, other text, media, actions...
  • grouping with tabs
  • expandable text areas or modals for large content

All that could be adaptable in the UI based on block length and other context vars I guess.

Copy link
Contributor

@tellthemachines tellthemachines left a comment

Choose a reason for hiding this comment

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

This is generally testing well! I couldn't get the media upload in Cover block to work but apart from that all the fields worked OK.

UX-wise I think the biggest missing thing is a way to select the inspector control from canvas and vice-versa, so it can be obvious what we're editing.

Editing the actual content of a block from the inspector still feels a bit silly, but it does work well for other attributes such as alt text and button links. Though it's tempting to use tools panel to hide the attribs that are not the main content so it feels less overwhelming, I'm also conscious that hiding them might mean some folks don't discover them at all 😅 (I struggle with remembering there are hidden tools even after years of working on this UI).

I'm almost tempted to suggest we make content editing from the inspector a preference, because personally I'd much prefer the inspector to show just the secondary editable fields for the selected block, and not everything for every block in the pattern.

The controls API feels very onerous though. I understand the problem with #71567 is that not all attributes with "content" role should be exposed as editable fields, so auto-rendering fields based on that won't work. But what's the minimum that we can get away with here? Could it just be an extra property on each attribute we want to make editable?

Also, could this mechanism also be leveraged for rendering the relevant inspector fields when the block isn't in contentOnly mode? It feels a bit wasteful to have a different version of each field in each mode, and unifying would make the overall experience more consistent.

@talldan
Copy link
Contributor Author

talldan commented Sep 18, 2025

This is generally testing well! I couldn't get the media upload in Cover block to work but apart from that all the fields worked OK.

What was the issue? It should work and has done in my testing, so any problem I can try to fix.

The controls API feels very onerous though. I understand the problem with #71567 is that not all attributes with "content" role should be exposed as editable fields, so auto-rendering fields based on that won't work. But what's the minimum that we can get away with here? Could it just be an extra property on each attribute we want to make editable?

It was developed very quickly, so it's definitely not perfect. For something like this I think we need more than a day of developer work, which is about all I've spent on it, but it's a proof of concept/experiment, so not yet in the refinements stage. I personally don't think it's particularly onerous though, it's pretty simple and was very quick to add to blocks, but I created it so maybe I'm biased. 😄

I mentioned it in the PR description, but I think my plan would be to make it private and try some different things with the API to see what's achievable to simplify it. In #71567 the fields are still very far from functioning as expected, so it's hard to compare, I expect in that PR config will be needed too (labels, which fields are shown by default, some extra configuration for particular block behaviors). Perhaps in the end there's a middle ground between the two PRs that finds the right balance.

@tellthemachines
Copy link
Contributor

What was the issue? It should work and has done in my testing, so any problem I can try to fix.

In Cover blocks that had an opaque overlay color, the image didn't appear, though it showed a URL in the field.

I think my plan would be to make it private and try some different things with the API to see what's achievable to simplify it.

The question is would it be acceptable to ship this in 6.9 with only the canvas interaction parts of the API public? So we could continue iterating on the inspector experience and maybe have it ready for 7.0?

In #71567 the fields are still very far from functioning as expected, so it's hard to compare

My preliminary opinion on this is that even though I don't love ToolsPanel, it provides a better experience than the drilldown thing going on in #71567 😅

Having to click on stuff to do stuff is incrementally annoying the more clicks you have to do.

@talldan
Copy link
Contributor Author

talldan commented Sep 18, 2025

In Cover blocks that had an opaque overlay color, the image didn't appear, though it showed a URL in the field.

Any particular patterns this happened with? I tried a few and creating my own, but still can't reproduce any issues.

The question is would it be acceptable to ship this in 6.9 with only the canvas interaction parts of the API public? So we could continue iterating on the inspector experience and maybe have it ready for 7.0?

We could also ship the feature with the API still private, but it means no support for third party blocks. Though I think lots of third party blocks are unlikely to adopt any API immediately anyway. Maybe canvas editing is enough for those blocks if we ship the support.contentRole = true flag (and role: content, which is already public).

The alternative is being able to finalize #71567 in just a few short weeks. 😬

@talldan
Copy link
Contributor Author

talldan commented Sep 18, 2025

Small design challenge that I'm trying to solve is that these buttons look like input fields to me:
Screenshot 2025-09-18 at 2 53 43 pm

My initial implementation was based on a component called FeaturedImageEdit, which is from the fields package, but it has a bunch of problems and isn't keyboard accessible. I switched to a regular Button in the latest commit, but now the closest option is a blue button which looks too prominent IMO 🤔 :
Screenshot 2025-09-18 at 2 56 08 pm

Maybe the styles need to be overridden 😈

Not sure if we have prior art that I can borrow for this implementation.

edit: changed the button to a grey colour now to match the featured image button in the post editor, which I think is better, but still looks like an input:
Screenshot 2025-09-18 at 3 57 52 pm

@tellthemachines
Copy link
Contributor

Any particular patterns this happened with?

One of my own with Cover as a top-level container (with an opaque overlay), and also this TT5 one where the opaque colored squares are also Covers:

Screenshot 2025-09-18 at 5 00 50 pm

In the screenshot, I tried to add an image to the black one.

@talldan
Copy link
Contributor Author

talldan commented Sep 18, 2025

In the screenshot, I tried to add an image to the black one.

So it seems like the background image is set, but the black background color remains on the block and obscures the image. If you do the same process via the block on the canvas, the black background color is unset when the background image is added (edit: it actually dims the background).

These kind of special block behaviors are difficult to account for. I'll have a think about it!

@talldan
Copy link
Contributor Author

talldan commented Sep 19, 2025

I've added some support for drill down now, with support for blocks like list and navigation. Some notes:

  • Avoids lots of deeply nested menu, there's only one level of drilldowns, which I think should work for most cases.
  • Also avoids orphaned items. For example if the pattern is a group with one cover, and that cover has lots of inner content, I didn't want to just show the cover as a drilldown menu, instead it flattens the list.
  • Avoids drilldowns that only have one child block, also flattens those into siblings.

I think it works pretty well, but no doubt can have some refinement. For example, the following video shows a nav block, and we could maybe show visually that although the submenus are flattened that they're still part of a content group. Perhaps by showing a separator/border above the submenu. I think this kind of thing could be a follow-up based on design feedback:

Kapture.2025-09-19.at.12.36.09.mp4

Support for blocks that use entities like Site Title / Logo is still missing, as those can't simply use updateBlockAttributes.

We'll need to figure out where we draw the line on this PR.

@tellthemachines
Copy link
Contributor

This is working well for me with Lists, Buttons and Galleries, provided we're not expecting to be able to add new items to them from the inspector 😅

Screenshot 2025-09-19 at 3 30 01 pm

Clicking through to enter a block with nesting doesn't feel too bad.

A nested Cover with Gallery inside it has all the Gallery images un-nested (which is better than multiple nesting levels):

Screenshot 2025-09-19 at 3 35 06 pm

I wonder if we really needed to nest the Cover contents though. While it makes the list of fields in the inspector shorter, it doesn't necessarily make sense from looking at the pattern. Should I have to know that the part of the pattern with a different background color is a Cover block? Here is where being able to select an inspector field from the canvas, and vice-versa, might improve the experience.

@jasmussen
Copy link
Contributor

Nice work, this is coming along impressively well.
test

Already in this state, it feels like a very superior experience.

There's a question of cases that feature a lot of paragraphs, where editing each paragraph as a separate field is a bit curious, but I'm not expecting a change here as this is part of the expectation of the pattern design, so no complete thoughts on that yet.

A few other thoughts. We should elide (...) the label if it goes too long, so it doesn't wrap:
image

The above also surfaces a challenge specifically with the Heading block, which has been changed for the benefit of the list view to show the contents of itself as its title. That becomes duplicative here, and is a bit curious. I understand from #71517 that it's important we show the block names for ergonomics, but I wonder: is it technically reasonable to only show block names, or customized block names, in this interface? I.e. in the above screenshot, unless I've manually renamed the Heading block to be called "Callout" or something else, it would be simply called "Heading"?

image

Can we omit the ellipsis menu for now? You mention the toolspanel approach for this, and I appreciate the re-use of an off the shelf component. But in part, this interface is about simplifying the editing of patterns, keeping them locked down, so fewer controls aid that aspect. And separately I'm excited about #71203 and theoretical future pattern authoring opportunities as part of this feature, and I have this idea:

image

The idea being to bring block visibility right into the content panel. Don't want a CTA button? Just hide it, but the pattern author can still include it. To be clear, this is just a vague idea. I'm sharing it only because it might affect the use of the toolspanel pattern.

image

Showing the links, rich text in the sidebar, this will likely be a future bridge to cross insofar as for the moment, you can't link anything. (Which is fine, this is about a reduced interface). But I do wonder if this means we'll need the ability of the block toolbar to appear in those cases. Or, you can't edit rich text at all, and we show only the text, not the visual link style. In fact the latter may be a better place to start.

@talldan
Copy link
Contributor Author

talldan commented Sep 19, 2025

Showing the links, rich text in the sidebar, this will likely be a future bridge to cross insofar as for the moment, you can't link anything.

You can use the highlight text + paste URL method to create a link in the sidebar. Cmd + B and Cmd + I should also work for bold and italics. But yeah, no toolbar or popovers right now so you can't see what a link is.

@talldan
Copy link
Contributor Author

talldan commented Sep 22, 2025

Can we omit the ellipsis menu for now? You mention the toolspanel approach for this, and I appreciate the re-use of an off the shelf component. But in part, this interface is about simplifying the editing of patterns, keeping them locked down, so fewer controls aid that aspect.

@jasmussen The only thing about making this change is that tools panel is used to hide some fields for some blocks:
Screenshot 2025-09-22 at 12 58 44 pm

Is there some other way you'd recommend handling this if the ToolsPanel is removed?

Or, you can't edit rich text at all, and we show only the text, not the visual link style. In fact the latter may be a better place to start.

This is a difficult balance to get right. I think the formatting needs to be preserved—a user might have gone to great lengths to format text in a long paragraph, so we need to maintain a rich-text style value somehow, it can't be completely plain text. This is definitely one of my main concerns about the idea of editing in the sidebar, it's an area that I don't think there has been much exploration.

@talldan talldan closed this Sep 22, 2025
@talldan talldan reopened this Sep 22, 2025
@andrewserong andrewserong force-pushed the add/content-only-inspector-fields branch from 7a18611 to 5cb023e Compare November 13, 2025 00:42
Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

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

After re-testing this PR with and without the contentOnly experiment on, I'm in favour of the idea of merging this in the shorter-term and continuing to iterate once it's in trunk. It's quite a large PR and there are heaps of things to consider and continue discussing, but it's also a change that's fairly well guarded / preserved behind an experiment.

My thinking here is that:

  • The UI is all contained nicely within the content-only-controls directory, and the main entrypoint for this is in inspector-controls-tabs/content-tab.js. The only actual change to the ContentTab component is that it now also receives rootClientId and if the experiment is switched on then we use ContentOnlyControls instead of BlockQuickNavigation.
  • This means that we can continue to iterate on the UI in subsequent PRs, like exploring switching to using DataForm / switch out the ToolsPanel for an ad hoc heading + DropdownMenu for handling visibility
  • We can also continue to iterate on the shape of settings.fields in each of the blocks — while this PR changes lots of files, each of the changes to block files is guarded behind the experiment and it would be relatively simple to roll these back or update the shape of settings.fields
  • In follow-ups, I'd like to see us update the shape of settings.fields so that it can match the DataForm API as closely as possible. I.e. type should correspond to DataForm controls, and we'd use id instead of mapping in some cases, etc, etc. But these nuances are best explored in smaller PRs IMO

So, all up — I think this PR provides a good foundation for continued work on this feature. There's also a natural entrypoint for us if we want to add an additional experiment to toggle between this editable fields UI and the previous BlockQuickNavigation — we'd simply update the ContentTab component to use a different experiment check before rendering ContentOnlyControls.

In short, I think merging will allow us to iterate more confidently and help tease apart decisions surrounding use of components and ideal UI and UX. If we decide that the overall experiment is not worth pursuing, then I also think it wouldn't be hard to remove this change (i.e. update ContentTab and remove settings.fields changes from the block library changes).

With all this in mind, I'm going to give this a tentative approval. I'm 50/50 on the UI — for smaller patterns I think it feels good, for longer ones I think it can be pretty rough, but I'm also keen to see how this UX pattern can evolve, and if we can polish it into something good, or if it winds up feeling like too much.

@ramonjd
Copy link
Member

ramonjd commented Nov 13, 2025

Thanks @andrewserong - appreciate the thorough testing.

LGTM to me. Approving because it's behind an experiment.

We can let it simmer overnight in case @jasmussen and @mtias have time to give it a look.

Other options if we want to test this feature and the base content only functionality separately:

  • Create another experiment (for this feature)
  • Merge this feature in 22.2 ( the next release is 22.1)

In short, I think merging will allow us to iterate more confidently and help tease apart decisions surrounding use of components and ideal UI and UX. If we decide that the overall experiment is not worth pursuing, then I also think it wouldn't be hard to remove this change (i.e. update ContentTab and remove settings.fields changes from the block library changes).

💯

I think we have a good base from which to iterate seeing as it's still behind an experiment. Looks like reverting won't be too spaghetti-like in any event.

Agree about DataForms, and carrying on the work to find a better UX for the side bar.

I don't think we've cracked it, but hopefully a combo of testing, eyes and iteration will set us on course.

On the public API side of things, I couldn't find any public API leaks

  • The ContentOnlyControls component and child controls aren't exported from packages/block-editor/src/components/index.js (Only imported internally)
  • the feature is protected by experiment flag check in content-tab.js
    Control components (PlainText, RichText, Media, Link)
  • Utility functions and constants only used internally too

An optional improvement is to ensure that the block being edited is actually visible:

I think not knowing which block you're editing could get annoying very fast. 😄

@jasmussen
Copy link
Contributor

I'm hoping to review the state of things well today, provide any missing mockups, and in general give this the attention it deserves. Before I return, a quick kudos for the patience and the hard work. This is impactful.

Some quick instincts:

I believe at some point we'll need to address how we're going to deal with long-form content, both in the number of content blocks (they can be n) and and character count. How much scrolling is acceptable? And to whom? What about keyboard navigation and mobile?

I'd question whether someone would choose to write long-form content inside a pattern or template part, which is one of the reasons I think it's important to start with the most basic interface outlined, and only optimize for what could be an edgecase when we know more clearly whether it's an edge-case or not.

And yes, if this turns out to be a real headache for folks, then there are a lot of things we can do. I'll be eyeing #73222 a bit later, excited about some of the potential there. We've discussed how complex it might be to work with contiguous paragraphs, vs. keeping them separate. But there may still be something there, treat them as one, or collapse into flyouts, collapsibles. All sorts of optimizations are available to us: but let's build them when we realize they are necessary.

One of the most important rules of thumb for all this work, is that this interface is not meant to be a replacement for the regular editing interface, it's meant to be a simpler interface for engaging with patterns. And if your needs situationally go beyond what's surfaced in the reduced interface, it needs to be trivial and intuitive to edit the blocks that make up the pattern, or just straight up detach. We can make those actions as prominent as we need them to be.

I'm 50/50 on the UI — for smaller patterns I think it feels good, for longer ones I think it can be pretty rough, but I'm also keen to see how this UX pattern can evolve, and if we can polish it into something good, or if it winds up feeling like too much.

I will focus on this in my testing today, and try the most complex patterns I can find. Kudos for the attention to detail, and I want to help validate what we're doing here, but also agreeing that there will almost certainly be easy fixes to apply as followup PRs, especially since this is already an experiment.

@jasmussen
Copy link
Contributor

Okay, I've gone fairly deep on this, and I want to start again with kudos. This is in a good spot, and I think we should land it and iterate. In addition to that, I found have some observations that I'd like to share, none of them I'd consider blockers to this PR landing:

  • Some of the patterns, especially the starter patterns, did not engage the contentOnly mode, and it wasn’t clear why.
  • As part of the DataForms work, it would be nice to improve the “MediaItem” control we also use for Site Logo, and with a square/round-rect image thumbnail.
  • I like the 40px height of paragraphs, we can try the 32px compact size if we want to save a little space, but then ideally MediaItems and others also work in this size, and we can fiddle with the spacing as well.
  • I’d like ⌘K (the link shortcut) to work inside text fields.
  • The terminology changes for entering/exiting the mode are already underway.
  • Click outside to exit works well. Can we also add double-click to “edit contents”?

For me the picture that is forming is that the flow feels right, and it's now a matter of iterating the details, including those above. To hopefully help make that more specific, I dove into some fresh iterations on the mockups we've had so far. I'll start with this one:

i3 editing

  • I still believe that a big prompt in the top toolbar can be a good way to make clear that you are now editing a pattern. This is also with an eye to the spotlight-powered focus mode hopefully expanding to becoming how we edit template parts and synced patterns as well—we already have a "Go back" button up there for those cases, but it's been a tiny button, there's a case for making it big and prominent.
  • This is not a strongy held opinion, and perhaps isn't the first thing we optimize towards. But sharing it as part of these mockups still, as it seems the strongest and simplest visual for exiting, so far.
  • The metrics around the items in the content panel are tightened slightly. No gap between the icon+block title, and the textarea below, and 32px compact sizing for 1-line items, such as the MediaItem.
  • A feature mentioned as a bonus item in Pattern Editing and contentOnly interactivity #71517, the ability to hide blocks. Or, for the pattern author to hide them by default, so you can unhide them, i.e. toggle new details of a pattern on. Shown in Gray 600, 3:1 UI contrast, assuming that's sufficient. If it isn't we can bump that to Gray 700, 4.5:1 text contrast.

One of the things also discussed in 71517 is how we edit additional attributes set, such as alt text or a caption on an image. That same issue suggests a flyout, same as DataForm can hopefully provide, which I've sketched here:

i3 flyouts and showing blocks

  • Note here how "Caption" isn't shown as an attribute. That's because no caption is set in the pattern. If you clicked "Edit pattern", added one, it would then show up as a "Caption" field in the flyout.
  • For the hidden block, click the closed eye icon to unhide it. Incidentally that surfaces social links in a list, and those can also be edited in a flyout, similarly.

I realize that this PR at present would put those inside a drilldown. Whether drilldown or flyout, we can feel out what works best there, but key here would be that the fields are very much data-driven, as Matías alludes to here.

Let me know if this is useful!

@ramonjd
Copy link
Member

ramonjd commented Nov 13, 2025

@jasmussen Thanks for the feedback 🙇🏻 And good to have the confidence that we can merge and iterate.

We'll dissect your feedback and create follow up tasks.

Some of the patterns, especially the starter patterns, did not engage the contentOnly mode, and it wasn’t clear why.

@tellthemachines pointed out that it's probably due to patterns that have no "root" block.

There's no workaround for this yet. Issue reported:

@ramonjd
Copy link
Member

ramonjd commented Nov 13, 2025

This is in a good spot, and I think we should land it and iterate.

Agree. Iteration tasks to come...

Thanks again.

@talldan
Copy link
Contributor Author

talldan commented Nov 18, 2025

On the public API side of things, I couldn't find any public API leaks

The settings.fields property is a public API. I think it should be made private. It's very far from finalized, so I wouldn't like third parties to start using it and experience breaking changes. Also I wouldn't want to require a deprecation for two plugin versions before being able to make any changes.

@andrewserong
Copy link
Contributor

andrewserong commented Nov 18, 2025

The settings.fields property is a public API. I think it should be made private.

Did you have an idea in mind for how to make it private? I couldn't see anywhere where we're treating it as a public API because both the contentOnly controls and setting settings.fields are behind the contentOnly experiment.

Or do you mean because if someone calls getBlockType and adds their own arbitrary values to settings.fields, they'll be able to access and interact with values there? 🤔

@talldan
Copy link
Contributor Author

talldan commented Nov 18, 2025

Yes, I'm not sure the experiment flag is a strong enough contract to consider it a private API. I would personally prefer if it didn't show up at all just to be on the safe side.

I think we can use the private symbol key approach that's been used for private block editor settings. I'll put a PR together.

edit: PR here - #73376

@andrewserong
Copy link
Contributor

I would personally prefer if it didn't show up at all just to be on the safe side. I think we can use the private symbol key approach that's been used for private block editor settings. I'll put a PR together.

Gotcha — that sounds reasonable, especially to make sure we don't accidentally expose anything when stabilising the experiment, if we still want to keep the API for fields experimental. Thanks for taking a look!

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

Labels

[Feature] Patterns A collection of blocks that can be synced (previously reusable blocks) or unsynced [Type] Experimental Experimental feature or API.