Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add visual indicator if a block is connected to block binding source #59185

Merged
merged 19 commits into from
Feb 29, 2024

Conversation

michalczaplinski
Copy link
Contributor

@michalczaplinski michalczaplinski commented Feb 19, 2024

⚠️ This PR will need a slight refactor once #58895 is merged. Once that's done, we'll have proper mechanism to add logic to "bound" blocks.

What?

Add visual indicators if a block is connected to block bindng sources:

  1. A "connection" icon in the block toolbar.
  2. Focus color of the bound block is now #9747FF

Part of fixes in #58978.

Why?

To make the "bound" blocks visually distinct.

How?

  • Adding a new icon to @wordpress/icons
  • Add logic to the hook which handles block binding registration.

Testing Instructions

Register a new custom field however you prefer. You can use a snippet similar to this:

register_meta(
	'post',
	'text_custom_field',
	array(
		'show_in_rest' => true,
		'single'       => true,
		'type'         => 'string',
		'default'	   => 'This is the content of the text custom field',
	)
);
register_meta(
	'post',
	'url_custom_field',
	array(
		'show_in_rest' => true,
		'single'       => true,
		'type'         => 'string',
		'default'	   => 'https://wpmovies.dev/wp-content/uploads/2023/04/goncharov-poster-original-1-682x1024.jpeg',
	)
);

In all of the following cases, verify that the purple focus outline is visible and that the connection icon appears both in the block toolbar and the list view.

Test paragraph
Add a paragraph with the content connected to a custom field:

<!-- wp:paragraph {"metadata":{"bindings":{"content":{"source":"core/post-meta","args":{"key":"text_custom_field"}}}}} -->
<p>Content of the PAGE text custom field</p>
<!-- /wp:paragraph -->

Test heading
Repeat the paragraph test but using a heading.

Test button
Add a button with the content connected to a custom field:

<!-- wp:buttons -->
<div class="wp-block-buttons"><!-- wp:button {"metadata":{"bindings":{"text":{"source":"core/post-meta","args":{"key":"text_custom_field"}}}}} -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button">Test</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

Screenshots or screencast

Screenshot 2024-02-27 at 8 37 55 PM

@michalczaplinski michalczaplinski added [Type] Bug An existing feature does not function as intended Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta [Feature] Custom Fields Anything related to the custom fields project - connecting block attributes and dynamic values labels Feb 19, 2024
Copy link

github-actions bot commented Feb 19, 2024

Size Change: +1.61 kB (0%)

Total Size: 1.71 MB

Filename Size Change
build/block-directory/style-rtl.css 1.03 kB +12 B (+1%)
build/block-directory/style.css 1.03 kB +13 B (+1%)
build/block-editor/content-rtl.css 4.38 kB +13 B (0%)
build/block-editor/content.css 4.38 kB +13 B (0%)
build/block-editor/default-editor-styles-rtl.css 394 B +13 B (+3%)
build/block-editor/default-editor-styles.css 394 B +13 B (+3%)
build/block-editor/index.min.js 252 kB +696 B (0%)
build/block-editor/style-rtl.css 15.7 kB +148 B (+1%)
build/block-editor/style.css 15.7 kB +151 B (+1%)
build/block-library/common-rtl.css 1.11 kB +13 B (+1%)
build/block-library/common.css 1.11 kB +13 B (+1%)
build/block-library/index.min.js 217 kB +105 B (0%)
build/commands/style-rtl.css 935 B +14 B (+2%)
build/commands/style.css 930 B +12 B (+1%)
build/customize-widgets/style-rtl.css 1.33 kB +12 B (+1%)
build/customize-widgets/style.css 1.33 kB +12 B (+1%)
build/edit-post/classic-rtl.css 558 B +14 B (+3%)
build/edit-post/classic.css 558 B +13 B (+2%)
build/edit-post/style-rtl.css 5.65 kB +11 B (0%)
build/edit-post/style.css 5.64 kB +11 B (0%)
build/edit-site/index.min.js 216 kB -1 B (0%)
build/edit-site/style-rtl.css 15.4 kB +40 B (0%)
build/edit-site/style.css 15.4 kB +39 B (0%)
build/edit-widgets/style-rtl.css 4.23 kB +11 B (0%)
build/edit-widgets/style.css 4.23 kB +12 B (0%)
build/editor/style-rtl.css 5.34 kB +13 B (0%)
build/editor/style.css 5.33 kB +13 B (0%)
build/format-library/style-rtl.css 492 B +14 B (+3%)
build/format-library/style.css 490 B +13 B (+3%)
build/list-reusable-blocks/style-rtl.css 851 B +15 B (+2%)
build/list-reusable-blocks/style.css 849 B +13 B (+2%)
build/nux/style-rtl.css 747 B +12 B (+2%)
build/nux/style.css 742 B +10 B (+1%)
build/patterns/style-rtl.css 553 B +13 B (+2%)
build/patterns/style.css 552 B +13 B (+2%)
build/preferences/style-rtl.css 710 B +12 B (+2%)
build/preferences/style.css 712 B +12 B (+2%)
build/reusable-blocks/style-rtl.css 256 B +13 B (+5%) 🔍
build/reusable-blocks/style.css 256 B +13 B (+5%) 🔍
build/widgets/style-rtl.css 1.17 kB +13 B (+1%)
build/widgets/style.css 1.17 kB +13 B (+1%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 955 B
build/annotations/index.min.js 2.69 kB
build/api-fetch/index.min.js 2.32 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 578 B
build/block-directory/index.min.js 7.22 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 126 B
build/block-library/blocks/audio/theme.css 126 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 415 B
build/block-library/blocks/button/editor.css 414 B
build/block-library/blocks/button/style-rtl.css 627 B
build/block-library/blocks/button/style.css 626 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.69 kB
build/block-library/blocks/cover/style.css 1.68 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 98 B
build/block-library/blocks/details/style.css 98 B
build/block-library/blocks/embed/editor-rtl.css 322 B
build/block-library/blocks/embed/editor.css 322 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 126 B
build/block-library/blocks/embed/theme.css 126 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 324 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 227 B
build/block-library/blocks/form-input/editor.css 227 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 340 B
build/block-library/blocks/form-submission-notification/editor.css 340 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 471 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/editor-rtl.css 947 B
build/block-library/blocks/gallery/editor.css 952 B
build/block-library/blocks/gallery/style-rtl.css 1.72 kB
build/block-library/blocks/gallery/style.css 1.72 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 647 B
build/block-library/blocks/group/editor.css 647 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 894 B
build/block-library/blocks/image/editor.css 893 B
build/block-library/blocks/image/style-rtl.css 1.6 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 B
build/block-library/blocks/image/view.min.js 1.54 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 505 B
build/block-library/blocks/media-text/style.css 503 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 668 B
build/block-library/blocks/navigation-link/editor.css 669 B
build/block-library/blocks/navigation-link/style-rtl.css 259 B
build/block-library/blocks/navigation-link/style.css 257 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.26 kB
build/block-library/blocks/navigation/style.css 2.25 kB
build/block-library/blocks/navigation/view.min.js 1.02 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-content/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 666 B
build/block-library/blocks/post-featured-image/editor.css 662 B
build/block-library/blocks/post-featured-image/style-rtl.css 342 B
build/block-library/blocks/post-featured-image/style.css 342 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 409 B
build/block-library/blocks/post-template/style.css 408 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 354 B
build/block-library/blocks/pullquote/style.css 354 B
build/block-library/blocks/pullquote/theme-rtl.css 168 B
build/block-library/blocks/pullquote/theme.css 168 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/view.min.js 958 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 140 B
build/block-library/blocks/read-more/style.css 140 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 629 B
build/block-library/blocks/search/style.css 628 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 478 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 229 B
build/block-library/blocks/separator/style.css 229 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 323 B
build/block-library/blocks/shortcode/editor.css 323 B
build/block-library/blocks/site-logo/editor-rtl.css 754 B
build/block-library/blocks/site-logo/editor.css 754 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 682 B
build/block-library/blocks/social-links/editor.css 681 B
build/block-library/blocks/social-links/style-rtl.css 1.49 kB
build/block-library/blocks/social-links/style.css 1.48 kB
build/block-library/blocks/spacer/editor-rtl.css 350 B
build/block-library/blocks/spacer/editor.css 350 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 395 B
build/block-library/blocks/table/editor.css 395 B
build/block-library/blocks/table/style-rtl.css 639 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 146 B
build/block-library/blocks/table/theme.css 146 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 185 B
build/block-library/blocks/video/style.css 185 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.4 kB
build/block-library/editor.css 12.3 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.8 kB
build/block-library/style.css 14.8 kB
build/block-library/theme-rtl.css 688 B
build/block-library/theme.css 693 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 51.8 kB
build/commands/index.min.js 15.6 kB
build/components/index.min.js 223 kB
build/components/style-rtl.css 11.8 kB
build/components/style.css 11.8 kB
build/compose/index.min.js 12.6 kB
build/core-commands/index.min.js 2.77 kB
build/core-data/index.min.js 72.8 kB
build/customize-widgets/index.min.js 12.1 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 8.95 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.65 kB
build/edit-post/index.min.js 23.7 kB
build/edit-widgets/index.min.js 17.3 kB
build/editor/index.min.js 64 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 7.89 kB
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.58 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.67 kB
build/interactivity/index.min.js 12.9 kB
build/interactivity/navigation.min.js 1.15 kB
build/interactivity/query.min.js 740 B
build/interactivity/router.min.js 1.36 kB
build/interactivity/search.min.js 618 B
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.74 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.11 kB
build/media-utils/index.min.js 2.9 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 948 B
build/nux/index.min.js 2 kB
build/patterns/index.min.js 5.78 kB
build/plugins/index.min.js 1.8 kB
build/preferences-persistence/index.min.js 2.05 kB
build/preferences/index.min.js 2.82 kB
build/primitives/index.min.js 975 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 1 kB
build/react-i18n/index.min.js 623 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.72 kB
build/rich-text/index.min.js 10.4 kB
build/router/index.min.js 1.79 kB
build/server-side-render/index.min.js 1.95 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 2.08 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.72 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 957 B
build/warning/index.min.js 249 B
build/widgets/index.min.js 7.21 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

Copy link

github-actions bot commented Feb 19, 2024

Flaky tests detected in 06fdbf7.
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/8009112699
📝 Reported issues:

@Mamaduka
Copy link
Member

The release beta cycle might not be a good time to introduce a new public SlotFill.

We can use a private SlotFill (see example #49819) or add a component directly to the toolbar like BlockParentSelector. What do you think?

@gziolo
Copy link
Member

gziolo commented Feb 20, 2024

The release beta cycle might not be a good time to introduce a new public SlotFill.

We can use a private SlotFill (see example #49819) or add a component directly to the toolbar like BlockParentSelector. What do you think?

This is the expected change in the toolbar that triggered refactoring to introduce a new slot:

Add a "bound" icon in the block toolbar.

Screenshot 2024-02-13 at 17 00 38

@SaxonF or @jasmussen, what would be the alternative to change the block's icon instead in a way that retains the original but also gives a clear indicator that it's connected? This way, we wouldn't have to introduce another toolbar group. In its current shape, should it even be a toolbar item? Is it actionable?

Anyway, the other aspect is that we should stop using the filters to integrate Block Bindings with the block editor, but instead consider it part of the framework that should be tightly integrated. In effect, the changes should go directly to the block toolbar to add icon indicator there. The border for the block's content can be integrated withing useBlockProps, etc.

@gziolo
Copy link
Member

gziolo commented Feb 21, 2024

This PR will need a slight refactor once #58895 is merged. Once that's done, we'll have proper mechanism to add logic to "bound" blocks.

We will need to cherry-pick this PR to the wp/6.5 branch, so I would wait to merge the #58895 refactoring until WP 6.5 RC1 so this bug fix lands without conflicts.

@jasmussen
Copy link
Contributor

what would be the alternative to change the block's icon instead in a way that retains the original but also gives a clear indicator that it's connected? This way, we wouldn't have to introduce another toolbar group. In its current shape, should it even be a toolbar item? Is it actionable?

Functionally this seems okay in the name of shipping the work. That being said, it feels like there's potential for a deeper design iteration going forward, since the feature is so potent, so this is something we'll want to follow up on. The issue here goes back to the same issue we have elsewhere in the site editor, more clearly delineating what content is reusable/global, and what content is local. We haven't fully threaded the needle on how to address that; the purple sync color is a useful start, the "Content" panel and some of the work around pattern overrides can potentially be leveraged here as well. But ideally we can find one concept that would work across all of those, and make it much clearer for anyone editing, where and what they are changing.

@michalczaplinski
Copy link
Contributor Author

Thanks for the feedback folks! I've moved the implementation directly to the <BlockToolbar>. My only concern with this approach is performance because then we have to run an additional selector for every block.

I've tried to use the private SlotFills but I wasn't quite able to make it work. Unlike the BlockControls SloFill, I saw duplicated elements (there was a button on the toolbar for each connected block). Perhaps they'd have to be deduplicated manually.

Screenshot 2024-02-21 at 19 05 40

Copy link
Member

@Mamaduka Mamaduka left a comment

Choose a reason for hiding this comment

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

My only concern with this approach is performance because then we have to run an additional selector for every block.

That should be okay in this case. The block toolbar is only rendered for the currently selected block.

packages/icons/src/library/connection.js Outdated Show resolved Hide resolved
@SaxonF
Copy link
Contributor

SaxonF commented Feb 22, 2024

Wondering if we could highlight properties in the toolbar that are connected much like we will do in inspector where we use an icon. In toolbar we could highlight with colour + shape. If a block's "primary" attribute is connected we'd highlight the block icon e.g. a paragraph content.

image

So for an image that has src, link and alt text connected when in a template it would look something like

image

@afercia afercia added the [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). label Feb 22, 2024
@afercia
Copy link
Contributor

afercia commented Feb 22, 2024

Any important information need a visual indicaotr but also needs to be provided in a semantic and accessible way. I'm not sure a button that doesn't do anything and its only used for visual purposes is ideal.

  • The new ToolbarButton doesn't do anything.
  • Toolbar are supposed to contain controls for actual actions. Toolbars aren't the right place for descriptions.
  • The label of the ToolbarButton is too long as @Mamaduka reported. More importantly, labels and tooltips of buttons are meant to expose the button name, which is what the button does. Besides the fact this button doesn;;t do anything the text Connected to a block bindins source or even a horter version of it is a description of one of the block properties, not really the anme of the button action.
  • Color alone can't be the only indication of the connected state.
  • Consistency: the first button within the toolbar is supposed to:
    • Indicate the block type
    • Provide the transform to menu, which is communciated via the button description.
  • Please, no purple or blue 'dots' to indicate a state: we already tried them in teh templates list and they're not great for accessibility. Also, toolbar buttons aren't the right place to indicate properties that belong to the block.

Overall, I'm not sure the toolbar is the right place to add an indicator to. I'd see the Settings panel a sa more appropriate palce, as that's where block properties and settings are available to users.

@michalczaplinski
Copy link
Contributor Author

Interesting concept @SaxonF, thanks! That does look better visually IMO.

My only concern is that we would have to use custom fields-specific logic to handle this. Sources other than custom fields might not have fields whose names we can display here.

Screenshot 2024-02-22 at 13 29 34

What if it just says "Connected to core/post-meta" ?

@michalczaplinski
Copy link
Contributor Author

Interesting concept @SaxonF, thanks! That does look better visually IMO.

My only concern is that we would have to use custom fields-specific logic to handle this. Sources other than custom fields might not have fields whose names we can display here.

Screenshot 2024-02-22 at 13 29 34 What if it just says "Connected to `core/post-meta`" ?

Actually, scratch that because each of block's attributes can be connected to multiple sources so that won't work either 🙁 .

What we'd need is a way to indicate the "Connected to " in the UI per attribute

@michalczaplinski
Copy link
Contributor Author

Hi @afercia

I understand some of your concerns.

About the "button": We could get rid of the <ToolbarButton> and just use a <div> with an icon in it. What would you propose to use instead?


Toolbar are supposed to contain controls for actual actions. Toolbars aren't the right place for descriptions.

That's a subjective opinion about what the UI should look like so it's hard to argue one way or the other 🙂


The label of the ToolbarButton is too long

I've changed it to just "Connected" in bbd3fcc


Color alone can't be the only indication of the connected state.

I'm not sure I understand - It's not the only indicator, it's in addition to the indicators that are already present:

  • block editing is disabled
  • there's a icon in the toolbar

So, it's an improvement over the status quo.


Consistency: the first button within the toolbar is supposed to:

  • Indicate the block type
  • Provide the transform to menu, which is communciated via the button description.

That's again a subjective opinion about what UI should look like 🙂 Besides, e.g. the Button block has a parent selector as the first item in the toolbar.


Please, no purple or blue 'dots' to indicate a state: we already tried them in teh templates list and they're not great for accessibility. Also, toolbar buttons aren't the right place to indicate properties that belong to the block.

As of right now, there is no indication of the state so I don't understand how adding dots would be worse? The design proposed by @SaxonF also adds indicators of "connected" state in the block Settings as you suggest. Is that what you're proposing?

@michalczaplinski
Copy link
Contributor Author

RE: Avoiding rendering a <button>. I'm not 100% sure how to proceed here. Here's what I tried:

  1. Keep <ToolbarButton> but find a way to pass the as prop to render a different component like <ToolbarButton as={"div"}>. The <ToolbarButton> does not support the as prop.

  2. Use the more generic ToolbarItem component. This is the current approach I tried in 06fdbf7. However, using the ToolbarItem also comes with a disadvantage of not having a label and tooltip as a button does.

@michalczaplinski michalczaplinski marked this pull request as ready for review February 22, 2024 18:15
Copy link

github-actions bot commented Feb 22, 2024

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: michalczaplinski <czapla@git.wordpress.org>
Co-authored-by: artemiomorales <artemiosans@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
Co-authored-by: SantosGuillamot <santosguillamot@git.wordpress.org>
Co-authored-by: jasmussen <joen@git.wordpress.org>
Co-authored-by: SaxonF <saxonafletcher@git.wordpress.org>
Co-authored-by: afercia <afercia@git.wordpress.org>

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

@michalczaplinski
Copy link
Contributor Author

During my testing I've seen that it is adding the visual indicators when I bind a block that is not supported. Is this the expected behavior?

That's a good catch @SantosGuillamot . In addition to checking isConnected we should also check if the block can be bound using canBindBlock()

@artemiomorales
Copy link
Contributor

That's a good catch @SantosGuillamot . In addition to checking isConnected we should also check if the block can be bound using canBindBlock()

@michalczaplinski Addressed this in ac72c0a

}

.block-editor-block-bindings-indicator svg g {
stroke: #9747ff;
Copy link
Member

Choose a reason for hiding this comment

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

@jasmussen or @SaxonF - do you usually put colors that are used in several places under a variable name?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

  1. Should we reuse this property ?

    --wp-block-synced-color: #7a00df;

  2. Currently the color of the "bound" blocks is #9747ff which is close but different from synced blocks color (#7a00df). Should it be the same?

Copy link
Contributor Author

@michalczaplinski michalczaplinski Feb 29, 2024

Choose a reason for hiding this comment

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

OK, in 4dc1103, I've added a new --wp-bound-block-color property to _default-custom-properties.scss that I reused in other components.

We can still change this color in the future.

Copy link
Contributor

Choose a reason for hiding this comment

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

I'd defer to Saxon, but my instinct would've been to make these the same, so it could be good to follow up and retire the variable. We do reuse colors like this, there should almost never be stray hex codes in the codebase. But at the same time we're also very careful with introducing new variables. Sorry for the delayed response @michalczaplinski

- get rid of 2 unnecessary `<path>` elements
- move the stroke styles to CSS
- add the `evenodd` rule
@michalczaplinski
Copy link
Contributor Author

I'm pretty happy with the PR now. If there aren't any more concerns I will merge later today :)

@michalczaplinski
Copy link
Contributor Author

Not sure why "some checks were not successful" because looking at the individual checks they all seem to pass. I will merge now as this seems like a github reporting issue.

There's one last thing I've noticed, the block icon color in the List View is barely visible if the block is selected:

Screenshot 2024-02-29 at 19 30 01

We can fix this in a quick follow-up PR.

@michalczaplinski michalczaplinski merged commit 1c4418b into trunk Feb 29, 2024
61 of 63 checks passed
@michalczaplinski michalczaplinski deleted the fix/update-block-bindings-ui-indicator branch February 29, 2024 19:32
@github-actions github-actions bot added this to the Gutenberg 17.9 milestone Feb 29, 2024
@SantosGuillamot
Copy link
Contributor

It seems that when I click on a block that is connected it throws an error in the console:

Warning: Invalid DOM property `fill-rule`. Did you mean `fillRule`?

@michalczaplinski @artemiomorales Could you check if you are able to reproduce it and, in that case, fix it please?

@artemiomorales
Copy link
Contributor

Could you check if you are able to reproduce it and, in that case, fix it please?

@SantosGuillamot Fixed in the following commit on the same PR to fix the fill color.

youknowriad pushed a commit that referenced this pull request Mar 4, 2024
…59185)

* Add BlockControlsFirst slot to block controls groups

* Add connection icon to BlockControls toolbar button

* Add block binding toolbar button if block is connected to a source

* Add i18n support for block toolbar button label

* Add BlockBindingsButton component and remove BlockControlsFirst group

* Refactor BlockBindingsButton to check for block connections

* Change the ToolbarButton label

* Update block-bindings-button import to block-bindings-indicator

* Block Bindings: Add connection icon to list view (#59331)

* Add connection icon to list view

* Remove extraneous string

* Move bindings style to useBlockProps

* Remove extraneous comment

* Move bindings selector logic to toolbar

* Rename indicator file

* Move purple stroke style from SVG markup to CSS

* Check if block can be bound before adding styles

* Simplify the SVG icon:
- get rid of 2 unnecessary `<path>` elements
- move the stroke styles to CSS
- add the `evenodd` rule

* Update the CSS namespacing to include the `__`

* Fix issues with block binding indicator color

---------

Co-authored-by: michalczaplinski <czapla@git.wordpress.org>
Co-authored-by: artemiomorales <artemiosans@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
Co-authored-by: SantosGuillamot <santosguillamot@git.wordpress.org>
Co-authored-by: jasmussen <joen@git.wordpress.org>
Co-authored-by: SaxonF <saxonafletcher@git.wordpress.org>
Co-authored-by: afercia <afercia@git.wordpress.org>
@youknowriad
Copy link
Contributor

I just cherry-picked this PR to the update/packages-6.5-rc1 branch to get it included in the next release

@youknowriad youknowriad added Backported to WP Core Pull request that has been successfully merged into WP Core and removed Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta labels Mar 4, 2024
youknowriad pushed a commit that referenced this pull request Mar 4, 2024
…59185)

* Add BlockControlsFirst slot to block controls groups

* Add connection icon to BlockControls toolbar button

* Add block binding toolbar button if block is connected to a source

* Add i18n support for block toolbar button label

* Add BlockBindingsButton component and remove BlockControlsFirst group

* Refactor BlockBindingsButton to check for block connections

* Change the ToolbarButton label

* Update block-bindings-button import to block-bindings-indicator

* Block Bindings: Add connection icon to list view (#59331)

* Add connection icon to list view

* Remove extraneous string

* Move bindings style to useBlockProps

* Remove extraneous comment

* Move bindings selector logic to toolbar

* Rename indicator file

* Move purple stroke style from SVG markup to CSS

* Check if block can be bound before adding styles

* Simplify the SVG icon:
- get rid of 2 unnecessary `<path>` elements
- move the stroke styles to CSS
- add the `evenodd` rule

* Update the CSS namespacing to include the `__`

* Fix issues with block binding indicator color

---------

Co-authored-by: michalczaplinski <czapla@git.wordpress.org>
Co-authored-by: artemiomorales <artemiosans@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
Co-authored-by: SantosGuillamot <santosguillamot@git.wordpress.org>
Co-authored-by: jasmussen <joen@git.wordpress.org>
Co-authored-by: SaxonF <saxonafletcher@git.wordpress.org>
Co-authored-by: afercia <afercia@git.wordpress.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Backported to WP Core Pull request that has been successfully merged into WP Core [Feature] Block bindings [Feature] Custom Fields Anything related to the custom fields project - connecting block attributes and dynamic values [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). [Type] Bug An existing feature does not function as intended
Projects
No open projects
Status: Done
Development

Successfully merging this pull request may close these issues.

9 participants