Skip to content

Conversation

@talldan
Copy link
Contributor

@talldan talldan commented Oct 3, 2025

What?

Fixes #72017

I think this might need more work, but surfacing early to get some feedback.

Changes the 'Edit contents' button behavior for unsynced patterns:

  • The button is now renamed to 'Edit design', but I'm not sure of the naming, happy for feedback.
  • When clicking the button, all the inner blocks are unlocked, and the pattern is spotlighted. The button changes to 'Finish editing'
  • Selecting a block outside the pattern or clicking 'Finish editing' restores contentOnly mode.

How?

A lot of this is achieved by using and improving the existing 'Modify' option that contentOnly locking has. Unsynced patterns now use the exact same system.

As part of this I've fixed #49048, when editing a templateLock: 'contentOnly' block, the templateLock attribute is no longer temporarily removed. Instead the blockEditingModes are set to default in the reducer, a change which won't persist when saving.

Testing Instructions

  1. Turn on the Gutenberg > Experiment: contentOnly: make patterns contentOnly by default upon insertion
  2. Open an editor and insert a pattern
  3. Open the block inspector and note the 'Edit design' button that's present when any block in the pattern is selected
  4. Click 'Edit design', note that the block is spotlighted, the full block inspector tools are shown, and in List View the full block hierarchy is present
  5. Make some changes to inner blocks of the pattern. Not that 'Finish editing' is present in the block inspector whenever you're within the pattern.
  6. Click 'Finish Editing' or select a block from outside the pattern
  7. Observe that pattern returns to contentOnly mode

Also try the same with:

  • A group that has the "templateLock":"contentOnly" attribute set and wraps some content blocks.
  • Template parts

They should work the same way.

To do

Screenshots or screencast

Kapture.2025-10-03.at.15.29.32.mp4

@talldan talldan self-assigned this Oct 3, 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 Oct 3, 2025
@github-actions
Copy link

github-actions bot commented Oct 3, 2025

Size Change: +824 B (+0.03%)

Total Size: 2.45 MB

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

@jasmussen
Copy link
Contributor

jasmussen commented Oct 3, 2025

Looks good, nice work. "Edit design" is a good option. "Edit blocks" is another option. I don't know that I have a preference, it seems like a button that can also be renamed at a later time if need be.

Behaviorwise this also feels like a good experience that, through the spotlight usage, feels very coherent. Nice work.

I'm waffling a bit on the "Finish editing" button, mostly because that button sits on every single innerblock you select. That itches in my brain, insofar as it might suggest finish editing the Paragraph, not finish editing the pattern. There's also something about the phrasing, which is not bad, but perhaps something to just marinate on.

I wonder if we could do a breadcrumb instead. Something along the lines of what a navigation menu item does with a back arrow next to the main block name? We can potentially make that more explicit, happy to do some mockups if this resonates. But the loose/unformed idea would be to maintain the IA of the innerblocks, and provide a "back" affordance that sits in context of the parent.

@youknowriad
Copy link
Contributor

@talldan So I didn't check how you implemented this but one thing that I'd like to note is that I see this behavior expanding to more than just these unsynced patterns. I actually see this replacing the "focus mode" of some of the other blocks (synced patterns, template parts, navigation blocks...). I know we still need to discuss this design wise cc @jasmussen but for me, as a user, It feels like I'm "focusing" on specific area.

I know that for the use-cases I mentioned there's a subtle difference in the fact that these cases save to different entities (so we can in this case navigate to a new "page") but I do wonder if the default should be similar to this (a block focused mode) with the possibility to "navigate" to a full page to edit the entity and in that case, I wouldn't even consider that later option as a "focused mode".

Anyway, I guess all what I'm saying is that ideally this mode is not tied strongly to the "pattern" behavior. I see this as a state in "block-editor" package that says this block client ID is "focused" and it would be possible to apply it to any block. The subtle thing is that a block can adapt its behavior when focused. (allow editing design for pattern).

Anyway, just random thoughts, probably nothing actionable for now, but wanted to share this thought.

@jasmussen
Copy link
Contributor

I agree using spotlight scaffolding for this is working extremely well to focus actions, and we should be adopting this more broadly. I also agree this can take over a fair amount of similar contexts (it will be used for block comments also). I'm not convinced it's a complete replacement for isolated editing, however, because that mode also has the benefit of reducing the block tree, simplifying the amount of nesting layers you have to engage with. I don't know where to draw the line, most simple template parts feel fine in this mode, but extremely complex ones could really benefit from the isolation. And we still have concepts like navigation overlays that may end up being something that isn't rendered in the editor at all, only previewed, and then edited in isolation in a go-in and back-out kind of way.

No strong opinions shared in the above, happy to try anything, mostly wanting to ensure some potential hidden benefits so we don't forget them.

@jasmussen
Copy link
Contributor

Noting that #45264 may be able to have a context shift based on outcomes here, the most basic being to close it.

@youknowriad
Copy link
Contributor

I agree that what I'm proposing is a solution to #45264

I'll add that every-time we fork the experience for the user we confuse them. What I'm saying is that ideally, for users, there should be just a single treatment to "focus" on a block.

This doesn't mean you can't edit "template parts", "synced patterns", "navigation" in total isolation. But this, is not "focused mode", this is just navigating to the editor of these separate entities.

@jasmussen
Copy link
Contributor

jasmussen commented Oct 3, 2025

Agreed, and that resonates. It's mostly the reduced block tree in the focused mode, and of course exiting the mode being intuitive, that's on my mind. If a breadcrumbs/back button can handle the latter, I wonder, is there any way we can also handle the former? Can we/should we show a reduced block tree in the spotlight-focused mode?

@jeryj
Copy link
Contributor

jeryj commented Oct 3, 2025

This is great! The flow feels so much simpler and tighter 👏🏻 Some thoughts while trying the PR (haven't reviewed code yet):

"Done" in the toolbar

I'm torn on this. One one hand, I like the exit hatch, but I think it would be fine to leave it off for now as it's quite easy to exit this mode at the moment. If we do leave this button in the toolbar, it should match whatever text is used on the main button to exit the mode (currently "Finish editing"). I think we can remove this "Done" button from the group toolbar though, since it doesn't really semantically match the context IMO.

Keyboard users accidentally exit the mode too easily

Can focus mode become a modal/focus trap for the interaction? Pressing Escape on the canvas could exit the mode. Keyboard users navigate the block canvas with the arrow keys, and it's hard to know where your block boundary is. If you press the arrow key one too many times, you've now unintentionally exited the design editing and need to return to the sidebar to press the button then back to the canvas, etc etc.

Detach in group block options menu

This will need some naming help. Detach from what? The reason to click this would be if you want to remove contentOnly editing for this instance of the pattern. I think a name that communicates that would be better. We can leave it "detach" for now, but I wanted to get the wheels turning on what this could be named.

Note about "What should we call X button?"

I scaffolded the usability test in a way that it can hopefully be run easily with a wider audience. We could collect a few top contenders for names and run the test and see if one wins out.

I'm waffling a bit on the "Finish editing" button, mostly because that button sits on every single innerblock you select.

@jasmussen I like it sitting at that level (above all the inner blocks), as otherwise, you'd need to know to select the parent group block to find the button again.

That itches in my brain, insofar as it might suggest finish editing the Paragraph, not finish editing the pattern.

I agree that "Finish editing" could be better communicated for the same reason you mention. Let's test out a few different names once we get this overall flow down. I think we're narrowing in on the right experience and that will help us decide what language to use.

I actually see this replacing the "focus mode" of some of the other blocks (synced patterns, template parts, navigation blocks...).

@youknowriad I agree. When starting in the full site view, editing template parts would benefit from this focused editing view instead of being transferred to an isolated view. The focused/spotlight feels much more seamless.

@jeryj
Copy link
Contributor

jeryj commented Oct 3, 2025

Can we/should we show a reduced block tree in the spotlight-focused mode?

@jasmussen This may be another way to handle the keyboard selection issue I mentioned. If the block tree is limited to just those within the pattern, then the keyboard shouldn't accidentally arrow outside of the focus boundaries, since that would be the entire block tree.

@scruffian
Copy link
Contributor

I wonder if we could lean into the "Pattern" concept more here:
Screenshot 2025-10-03 at 19 47 58

I prefer the button to be connected with the group:
Screenshot 2025-10-03 at 19 54 21

@talldan
Copy link
Contributor Author

talldan commented Oct 6, 2025

Thanks for all the feedback!

I think we can remove this "Done" button from the group toolbar though, since it doesn't really semantically match the context IMO.

This option is from the existing code in trunk. Pushed a commit that hides this while the experiment is active, that way we can remove it (and the 'Modify' option) if we decide to stabilize the experiment, but for the moment existing users won't be affected.

Can focus mode become a modal/focus trap for the interaction? Pressing Escape on the canvas could exit the mode. Keyboard users navigate the block canvas with the arrow keys, and it's hard to know where your block boundary is.

I'll have a look at how we could implement something like this. Also worth considering whether we want click outside to be the main way to exit, or if it should be something like double-click or not hooked at all around block selection (at the moment it works via this component). There might a chance to align both mouse and keyboard behavior if we make the blocks outside the pattern completely non-selectable.

I actually see this replacing the "focus mode" of some of the other blocks (synced patterns, template parts, navigation blocks...)

At the moment this is fixing some issues with and replacing the 'Modify' contentOnly feature that Jorge implemented some time ago. I think it should be possible to make most of the other modes use it.

The one that's more difficult is Synced Patterns, as I think we'll have to temporarily disable bindings (pattern overrides) for the user to truly be editing the source pattern. I'm not sure if it's possible currently, so it might take a bit more exploration and collaboration with folks working on bindings. We could also try it without disabling the bindings and see what it's like, though it might then be confusing that it's different to 'Edit Original'.

@talldan talldan force-pushed the update/edit-contents-experience-for-patterns branch from 9f89941 to cd0d5de Compare October 6, 2025 05:32
@talldan
Copy link
Contributor Author

talldan commented Oct 6, 2025

I wonder if we could do a breadcrumb instead. Something along the lines of what a navigation menu item does with a back arrow next to the main block name? We can potentially make that more explicit, happy to do some mockups if this resonates. But the loose/unformed idea would be to maintain the IA of the innerblocks, and provide a "back" affordance that sits in context of the parent.

@jasmussen I pushed a commit that tries this to see what it's like. I realize there are some conflicting opinions about this part, but just trying things out at the moment.

The mention of breadcrumbs also made me realize the breadcrumb bar at the bottom needs some love!

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.

Very cool, I really like how this helps orient you when working on the pattern, and with the way it highlights working on a particular section, it's feeling pretty good to me.

The main question I had was to do with the spotlight mode and how it feels when going to make changes to the pattern that the user wants to see in relation to blocks that sit next to it. For example, if I have a template that's using particular colors and I want to see how making a big change to the design of the pattern will look in relation to other blocks, I might need to click out of the pattern in order to see that:

2025-10-06.16.39.59.mp4

Then, clicking back in to get back to where I was takes a couple of extra steps. So, for folks making design changes there's potentially some friction here. I almost wanted a toggle to be able to highlight the pattern or not — but I don't want to suggest adding additional controls 😅

On the other hand, what I'm really liking about how it all feels in this PR is that it's hard to accidentally make changes to the design, and it's easy to get back to content mode 👍

(These are just some impressions from using it — overall I like the direction here!)

I actually see this replacing the "focus mode" of some of the other blocks (synced patterns, template parts, navigation blocks...).

That thought struck me, too. The behaviour in this PR feels quite 'solid', so it'd be fun to see how the spotlight approach could work for editing headers and footers, too (separately from this PR, of course) 🤔

@talldan
Copy link
Contributor Author

talldan commented Oct 6, 2025

Can we/should we show a reduced block tree in the spotlight-focused mode?

@jasmussen By this do you mean hiding the other blocks in List View, or literally hiding all the other blocks (both in canvas and list view)?

I tried something akin to focus mode within List view, which I think works ok (though there might be accessibility issues with the contrast level):

Kapture.2025-10-06.at.14.48.55.mp4

I also tried completely removing the other blocks, not sure it works as well:

Kapture.2025-10-06.at.15.05.22.mp4

@jasmussen
Copy link
Contributor

jasmussen commented Oct 6, 2025

Lots of incredible discussion. It's likely I missed bits, apologies in advance if that's the case.

I like it sitting at that level (above all the inner blocks), as otherwise, you'd need to know to select the parent group block to find the button again.

Not a strong opinion on my part, except the wording, and fair point. I do wonder if this is one of those cases where it might make sense to in fact show the button above the block title, just to maintain the IA? I think that's actually what Ben is proposing here. It's perhaps a bit clunky, something we can ponder refining, but just to finish the thought, this:

Frame 1410129756 Frame 1410129757

Still not sure about the wording. "Exit editing" does not seem better than "Finish editing".

Note, I'm compiling the branch as I sketch this, I look forward to testing the back button too, that may also work. I'll write another comment in a minute.

@jasmussen
Copy link
Contributor

By this do you mean hiding the other blocks in List View, or literally hiding all the other blocks (both in canvas and list view)?

I mean how this shows the full template tree:

image

But if I choose to edit the header template part in isolation, current mechanism, I get this:
image

Already that shows one of the reasons it might not be quite as simple, but hopefully it gets the basic idea across.

@jasmussen
Copy link
Contributor

Taking a look at the branch:

test

Nice, that's not bad.

I'll defer to you all on whether it's something like this branch, or this. Any preferences?

One note if we go with the back button, the indentation for the description is looking a bit big. I think it might be good to generally unindent the paragraph, like I showed in the mockup above. That's not a blocker in any way, just something we can change in the blockcard component itself, as a bit of polish.

@talldan
Copy link
Contributor Author

talldan commented Nov 4, 2025

I've split out a separate PR for some refactoring and the fix to #49048 - #72959.

It hopefully cuts this PR size and makes it easier to review/test.

@talldan talldan force-pushed the update/edit-contents-experience-for-patterns branch 4 times, most recently from faff3cd to b4bcc74 Compare November 5, 2025 08:35
@talldan talldan marked this pull request as ready for review November 5, 2025 09:10
@github-actions
Copy link

github-actions bot commented Nov 5, 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: talldan <[email protected]>
Co-authored-by: andrewserong <[email protected]>
Co-authored-by: ramonjd <[email protected]>
Co-authored-by: jasmussen <[email protected]>
Co-authored-by: youknowriad <[email protected]>
Co-authored-by: jeryj <[email protected]>
Co-authored-by: scruffian <[email protected]>
Co-authored-by: tellthemachines <[email protected]>
Co-authored-by: jameskoster <[email protected]>
Co-authored-by: fcoveram <[email protected]>
Co-authored-by: Thelmachido <[email protected]>
Co-authored-by: franzaurus <[email protected]>
Co-authored-by: jorgefilipecosta <[email protected]>
Co-authored-by: t-hamano <[email protected]>
Co-authored-by: stokesman <[email protected]>

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

@talldan
Copy link
Contributor Author

talldan commented Nov 5, 2025

#72959 is now merged and I've trimmed some other parts from this PR.

It should be ready for review.

Try hooking Edit Contents button up to modifyContentLockBlock action

Fix block editing modes

Fix focus mode restoration

Fix docblock incorrect param

Remove existing editing tools

Show edit design button for templateLock contentOnly blocks

Consider temporarily edited block not to be a section

Show finish editing button for any child block of the temporarily edited block

Revert "Remove existing editing tools"

This reverts commit a43b0fa.

Ensure done button is visible

Hide modify and done button when experiment is active

Implement back arrow when child of temporarily edited blocks is selected

Only show Edit design button on main section

Try limiting list view to edited blocks

Try focus mode in List View

Try disabling blocks other than the temporarily edited blocks

Re-instate click outside behavior, but keep other blocks disabled to constrain keyboard behavior

Disallow editing of title when temporarily editing blocks

Add escape key for exiting mode

Show parent/child relationship on block card when editing contents

Fix error destructuring object caused by early return

Remove focus mode revert code

Make parent selectable in block card

Remove lint disable

Try different copy

Improve button styling

Rename APIs

Rename classname

Simplify EditContents render condition

Fix navigation block back button showing for block cards with parent/child relationship

Improve nested sections - only consider top level section as THE section

Avoid showing nav back arrow when in a content only section

Add comment

Revert changes to content preview file

Try ts-ignore on every line for import

Fix show template mode by making editedContentOnlySection take priority

Only disable blocks outside edited section when experiment is active

Fix issue where template lock is persisted even after unlock

Fix spotlight in list view

Fix conflict resolution issue

Fix merge conflict issue
@talldan talldan force-pushed the update/edit-contents-experience-for-patterns branch from 650e3d3 to 7cf99a6 Compare November 6, 2025 01:13
Comment on lines +2335 to +2339
// For the content only pattern experiment, disable blocks that are outside of the edited section.
if ( window?.__experimentalContentOnlyPatternInsertion ) {
derivedBlockEditingModes.set( clientId, 'disabled' );
return;
}
Copy link
Contributor

Choose a reason for hiding this comment

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

It looks like this results in a lock icon when the root section block is selected after unlocking the design. Is that expected? I think it might be because the section block now returns false for canMove and canRemove in useBlockLock?

image

This then also means the Unlock option is shown in the block settings menu, which could be confusing:

image

Then, I notice that if I lock the pattern again, the Unlock icon shows up in the toolbar (I think because if it's been shown once, it'll continue to be shown?):

image

Not a blocker if this one's tricky, though, as this part of the behaviour is guarded behind the experiment.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yep, it was discussed a little bit earlier as well in this PR, it's an existing bug in trunk that's surfaced by this change. I've made an issue for it - #72159.

I'll plan to tackle it separately seeing as it wasn't introduced (and this feature is still experimental).

Copy link
Contributor

Choose a reason for hiding this comment

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

Sounds good, thanks for confirming, and sorry for the double-up!

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.

This is testing great for me, and the code changes looks good. Just noted a couple of other drive-by comments as I thought of them, apologies if it's covering ground we've already covered earlier.

In addition to testing these changes, I smoke tested unsynced patterns, synced patterns, template locked patterns, template parts, etc, with the contentOnly experiment disabled, and everything appears to be working as on trunk as far as I can tell.

There's quite a few changes here, though, so do feel free to get another approving review if you're unsure of landing the change, but this LGTM!

Great work here 🚀

parentNavBlockClientId
? __( 'Go to parent Navigation block' )
: // TODO - improve copy, not sure that we should use the term 'section'
__( 'Go to parent section' )
Copy link
Contributor

Choose a reason for hiding this comment

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

Since we're flattening the structure, could "go to parent" be enough? (Not a blocker for now, of course)

Suggested change
__( 'Go to parent section' )
__( 'Go to parent' )

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ended up removing this, it's from an earlier iteration!

isTemporarilyEditedBlock:
getTemporarilyEditingAsBlocks() === clientId,
isContentOnlyTemplateLocked:
getTemplateLock( clientId ) === 'contentOnly',
};
},
[ clientId ]
);

Copy link
Contributor

Choose a reason for hiding this comment

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

I guess a problem with doing that would be that if we close the sidebar, then we'd stop editing blocks, which mightn't be desired?

getBlockSelectionStart,
} = select( blockEditorStore );
return (
! getBlockSelectionStart() ||
Copy link
Contributor

Choose a reason for hiding this comment

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

Tiny nit: feel free to ignore:

Just trying to wrap my head around this change. Is this so that if a user deselects all blocks (i.e. by hitting Escape within the list view), we don't accidentally stop editing the section? If so, it might be worth adding an inline comment as the negation of getBlockSelectionStart() is a little different to the name of the isBlockOrDescendantSelected const.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It was probably something like that. I can't remember now, so wish I'd left a comment!

I think I'll remove the code that was added, from testing I can't reproduce any issues that it might resolve.

Comment on lines +47 to +51
node.addEventListener( 'click', onClick );

return () => {
node.removeEventListener( 'click', onClick );
};
Copy link
Contributor

Choose a reason for hiding this comment

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

Also optional: should these be guarded behind the experiment, or does it not matter?

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.

Thanks a lot for all the hard work here.

I checked the following:

✅ That I can unlock and relock patterns and template parts using the button and clicking outside the pattern
✅ That I can still "lock" and "detach" the pattern
✅ Group blocks with templateLock set (work as expected)

Also turned off the experiment and compared with trunk behaviour, and couldn't see any regressions.

Thanks for splitting up the PR 🙇🏻

Folks have already noted most of these but I think follow ups could include:

  • how to separate pattern unlocking from the concepts of lock/detach in the minds of users. Might be a rename of this feature or some other hints. This will come out in the wash later I reckon.
  • Should we be able to insert patterns into other unlocked patterns? I couldn't do this
  • How to reconcile edit button in toolbar of template parts. Do they do the same thing, or are we duplicating functionality?

I think it's ready to go!

@talldan
Copy link
Contributor Author

talldan commented Nov 6, 2025

Should we be able to insert patterns into other unlocked patterns? I couldn't do this

Did you have Zoom Out active? That would prevent inserting patterns into other patterns. If you exit Zoom Out it works ok.

@talldan talldan merged commit 0e79f37 into trunk Nov 6, 2025
45 of 47 checks passed
@talldan talldan deleted the update/edit-contents-experience-for-patterns branch November 6, 2025 06:54
@github-actions github-actions bot added this to the Gutenberg 22.1 milestone Nov 6, 2025
@ramonjd
Copy link
Member

ramonjd commented Nov 6, 2025

Did you have Zoom Out active? That would prevent inserting patterns into other patterns. If you exit Zoom Out it works ok.

Oh thanks for checking. Yes I did 🤦🏻

I was trying to add patterns from the sidebar inserter - that switches zoom on straight away.

@scruffian
Copy link
Contributor

Thanks for all your work on this, its looking great!

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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Patterns: allow users to re-enter content only mode after detachment contentOnly template lock can be lost