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

CSS Class Names: Add dropdown to choose from block styles #34521

Closed
wants to merge 10 commits into from

Conversation

ramonjd
Copy link
Member

@ramonjd ramonjd commented Sep 3, 2021

Description

Resolves #33934

These changes allow us to switch between block styles beside the advanced controls, and offer a quick way to select or reinstate block styles classes.

the gif

Screen Shot 2021-11-11 at 12 38 42 pm

Testing

Please make yourself comfortable.

Insert a block that has block styles, for example the Image, Table or Buttons Block in TT1 Blocks theme.

Check that:

  • Selecting a block style from the Advanced > Additional CSS class(es) field dropdown changes the block style.
  • Switching block styles using the block styles preview buttons also updates the Advanced > Additional CSS class(es) field
  • Switching block styles using the block styles preview buttons also updates the Advanced > Additional CSS class(es) field
  • Copying a valid block style classname into the field, and deleting it, updates the block styles accordingly
  • Deleting a block style classname from the field causes the block style to return to the "Default" style
  • The dropdown doesn't appear for blocks that have no block styles, e.g., a Paragraph Block in TT1 Blocks theme.
  • Things look and work okay in narrow viewports.

Check TextControl in Storybook for a new story (withChildren);

Screen Shot 2021-12-08 at 11 27 22 am

Types of changes

Additional functionality.

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).

@ramonjd ramonjd added the [Status] In Progress Tracking issues with work in progress label Sep 3, 2021
@ramonjd ramonjd self-assigned this Sep 3, 2021
@github-actions
Copy link

github-actions bot commented Sep 3, 2021

Size Change: +574 B (0%)

Total Size: 1.11 MB

Filename Size Change
build/block-editor/index.min.js 140 kB +344 B (0%)
build/block-editor/style-rtl.css 14.5 kB +109 B (+1%)
build/block-editor/style.css 14.5 kB +109 B (+1%)
build/components/index.min.js 215 kB +12 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.21 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
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 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 58 B
build/block-library/blocks/audio/editor.css 58 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 470 B
build/block-library/blocks/button/editor.css 470 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 291 B
build/block-library/blocks/buttons/editor.css 291 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 134 B
build/block-library/blocks/code/theme.css 134 B
build/block-library/blocks/columns/editor-rtl.css 210 B
build/block-library/blocks/columns/editor.css 208 B
build/block-library/blocks/columns/style-rtl.css 503 B
build/block-library/blocks/columns/style.css 502 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 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/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB
build/block-library/blocks/cover/style.css 1.22 kB
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 966 B
build/block-library/blocks/gallery/editor.css 970 B
build/block-library/blocks/gallery/style-rtl.css 1.63 kB
build/block-library/blocks/gallery/style.css 1.62 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 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 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 507 B
build/block-library/blocks/image/style.css 511 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 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 493 B
build/block-library/blocks/media-text/style.css 490 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 649 B
build/block-library/blocks/navigation-link/editor.css 650 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.91 kB
build/block-library/blocks/navigation/editor.css 1.91 kB
build/block-library/blocks/navigation/style-rtl.css 1.68 kB
build/block-library/blocks/navigation/style.css 1.67 kB
build/block-library/blocks/navigation/view.min.js 2.79 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 172 B
build/block-library/blocks/page-list/style.css 172 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 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/style-rtl.css 444 B
build/block-library/blocks/post-comments-form/style.css 444 B
build/block-library/blocks/post-comments/style-rtl.css 492 B
build/block-library/blocks/post-comments/style.css 493 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 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 391 B
build/block-library/blocks/post-template/style.css 392 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 378 B
build/block-library/blocks/pullquote/style.css 378 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 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 273 B
build/block-library/blocks/query-pagination/style.css 269 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 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 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 245 B
build/block-library/blocks/separator/style.css 245 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 772 B
build/block-library/blocks/site-logo/editor.css 772 B
build/block-library/blocks/site-logo/style-rtl.css 165 B
build/block-library/blocks/site-logo/style.css 165 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 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 670 B
build/block-library/blocks/social-links/editor.css 669 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB
build/block-library/blocks/social-links/style.css 1.32 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 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/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 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 569 B
build/block-library/blocks/video/editor.css 570 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 857 B
build/block-library/common.css 856 B
build/block-library/editor-rtl.css 9.93 kB
build/block-library/editor.css 9.93 kB
build/block-library/index.min.js 162 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 10.7 kB
build/block-library/style.css 10.7 kB
build/block-library/theme-rtl.css 672 B
build/block-library/theme.css 677 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.3 kB
build/components/style-rtl.css 15.5 kB
build/components/style.css 15.5 kB
build/compose/index.min.js 10.9 kB
build/core-data/index.min.js 13.2 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.49 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-post/index.min.js 29.6 kB
build/edit-post/style-rtl.css 7.1 kB
build/edit-post/style.css 7.09 kB
build/edit-site/index.min.js 34.3 kB
build/edit-site/style-rtl.css 6.58 kB
build/edit-site/style.css 6.58 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.18 kB
build/edit-widgets/style.css 4.18 kB
build/editor/index.min.js 37.8 kB
build/editor/style-rtl.css 3.78 kB
build/editor/style.css 3.77 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.58 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.71 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.72 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.84 kB
build/primitives/index.min.js 924 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.57 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@ramonjd ramonjd force-pushed the try/block-style-name-drop-down-controls branch from fd2df0c to 3ce7ae7 Compare September 20, 2021 04:47
@ramonjd
Copy link
Member Author

ramonjd commented Sep 20, 2021

We might need the getRenderedStyles method introduced in #34522 so that we show "Default" where one exists:

Screen Shot 2021-09-20 at 3 27 04 pm

Also, alignment of the icon is a little tricky here.

We'd want to align the ellipsis icon with the top (the Additional CSS class(es) label) or with the input field.

But because we're using <TextControl />, which encompasses a label and input control, the most straightforward approach is to align the icon to the top.

It does look much neater in the designs at #33934 – where the ellipsis icon is aligned with the input field – but in order to achieve this we might have to either:

  1. extend <TextControl /> to accept children (so we can render them as siblings of the input, or
  2. roll our own.

No 2 runs the risk of losing standardization since all items in the Advanced panel use this component.

No 1 would have be thoroughly tested given the frequency with which <TextControl /> is used in both web and native platforms.

@ramonjd ramonjd force-pushed the try/block-style-name-drop-down-controls branch 2 times, most recently from 7be19d0 to 37aae17 Compare November 11, 2021 00:52
@ramonjd ramonjd added [Feature] Custom Editor Styles Functionality for adding custom editor styles [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi [Feature] Theme Style Variations Related to style variations provided by block themes [Type] Enhancement A suggestion for improvement. and removed [Status] In Progress Tracking issues with work in progress labels Nov 11, 2021
@ramonjd ramonjd marked this pull request as ready for review November 11, 2021 01:42
@shaunandrews
Copy link
Contributor

I pushed a few updates. First I updated the menu label from "Block style classes" to "Existing styles." Then, I decided to be reckless and switch from flex to position: absolute; — this may be a mistake, but I was able to get it looking like this:

image

Otherwise, this PR seems to work as expected; The input respects the styles from the accordion above; I'm able to choose from the menu to switch styles; Typing in a class manually correctly selects the existing class.

@ramonjd
Copy link
Member Author

ramonjd commented Nov 15, 2021

Thanks for the idea @shaunandrews I think we can work with it.

I've taken it a bit further in fa22229 by passing down the dropdown as a child to <TextControl /> , and also taking care of the following scenarios:

Input overflow:
Screen Shot 2021-11-16 at 9 30 00 am

Small screens:
Screen Shot 2021-11-16 at 9 23 11 am

Label overflow:
Screen Shot 2021-11-16 at 9 30 26 am

Passing down the dropdown as a child to <TextControl /> means we can use the text control's parent as the relative positioning reference, and position from the bottom where there's less chance of variable height.

If you think this approach is okay, I might need to split this PR and do that bit first since I'd have to update the stories and promote the benefits 😄

Result:
Screen Shot 2021-11-16 at 10 00 18 am

Screen Shot 2021-11-16 at 10 00 32 am

@ramonjd ramonjd force-pushed the try/block-style-name-drop-down-controls branch 2 times, most recently from fd15e64 to 74eceee Compare December 1, 2021 01:00
@shaunandrews
Copy link
Contributor

image

There's a slight mis-alignment (1px too high, I think), but otherwise this seems good.

I might need to split this PR and do that bit first since I'd have to update the stories and promote the benefits

Seems like a solid step forward.

@ramonjd
Copy link
Member Author

ramonjd commented Dec 3, 2021

Thanks for testing @shaunandrews 🙇

There's a slight mis-alignment (1px too high, I think), but otherwise this seems good.

Pah! 1px, 2px... :trollface:

Out of interest, which browser are you using? Here's Chrome, Safari and Firefox for me, in order:

Screen Shot 2021-12-03 at 11 41 26 am

Screen Shot 2021-12-03 at 11 42 27 am

Screen Shot 2021-12-03 at 11 43 14 am

@shaunandrews
Copy link
Contributor

Safari. I may or may not have zoomed in so my old eyes can see things.

@ramonjd
Copy link
Member Author

ramonjd commented Dec 3, 2021

I may or may not have zoomed in so my old eyes can see things.

Good call. When I zoom in or out by various factors, it's visible.

Screen Shot 2021-12-03 at 11 48 36 am

shaunandrews and others added 4 commits December 8, 2021 10:53
…l component so we can position the icon more accurately.

We're also adding a background color to the icon in case the underlying text flow beneath it.
Finally, in the case of smaller screens, we're bumping up the size of the icon.
@@ -65,6 +66,7 @@ function TextControl(
ref={ ref }
{ ...props }
/>
{ children }
Copy link
Member Author

@ramonjd ramonjd Dec 7, 2021

Choose a reason for hiding this comment

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

By way of explanation, rendering children here was a trade off.

Following the design requirements, we need to be able to add a dropdown menu as a sibling of the text control input.

We could have created a custom component using the constituent parts of <TextControl />. The Advanced panel, however, uses <TextControl /> multiple times, which means that updates would have to be copied over to the custom component to retain consistency.

Does adding children here contravene any component guidelines from a technical or philosophical standpoint?

As far as I can tell, there are no side effects to adding and using the children prop, though I am worried that it might be "impure" in that it invites manifestations of a base component.

I'm overthinking things, yes.

Copy link
Member Author

Choose a reason for hiding this comment

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

I'd be grateful for your thoughts here @ciampo whenever you get time. 🙏

Copy link
Contributor

Choose a reason for hiding this comment

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

Thank you for the ping! Always happy to advise / give direction on components :)

I would say that rendering children inside a TextControl goes a bit against the way the component is supposed to work. TextControl, in my mind, is supposed to be an enriched input field.

I would personally recommend that, instead of adding children to TextInput, you render the dropdown menu as a sibling of TextInput in the CustomClassNameControl component.

Also, cc'ing @diegohaz and @mirka in case they wanted to add their views here as well

Copy link
Member Author

Choose a reason for hiding this comment

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

Thanks for the feedback and for confirming what the tiny voice in my brain was trying to tell me. I was truly struggling with the conflict 😆

I would personally recommend that, instead of adding children to TextInput, you render the dropdown menu as a sibling of TextInput in the CustomClassNameControl component.

I'll try that out, cheers! If the other Advanced control inputs end up looking or working differently I can try to switch them all over to TextInput as well.

Copy link
Member Author

Choose a reason for hiding this comment

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

Ah, I just realized that TextInput isn't a component yet. Or at least we haven't migrated it from g2.

I should know, I started it and never finished! 😅

Copy link
Contributor

Choose a reason for hiding this comment

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

Ah, I just realized that TextInput isn't a component yet. Or at least we haven't migrated it from g2.

We did initially look into it as well after you started it, but we later stopped because it was a very complicated task, since TextInput is very complex (it tries to handle single/multi line text and number input) and represents a very different approach to what we currently have in Gutenberg.

Copy link
Member Author

Choose a reason for hiding this comment

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

We did initially look into it as well after you started it, but we later stopped because it was a very complicated task

Thanks for the background info. 🙇

I discovered personally how tricky it was 😬 so I feel better that folks with a lot more experience than I have also felt the same!

- Added prop notes for children in readme
- Added story for withChildren
@ramonjd ramonjd force-pushed the try/block-style-name-drop-down-controls branch from 74eceee to de6dd44 Compare December 8, 2021 00:28
@ramonjd
Copy link
Member Author

ramonjd commented Jan 14, 2022

@shaunandrews How would you feel if I parked this one for now? I'm not sure how to achieve the current design without re-creating TextControl, which seems like an overkill.

@ramonjd
Copy link
Member Author

ramonjd commented Jan 19, 2022

Closing for now until we can revisit the approach.

We can always reopen.

Thanks to everyone for their help on this one!

@ramonjd ramonjd closed this Jan 19, 2022
@ramonjd ramonjd deleted the try/block-style-name-drop-down-controls branch January 19, 2022 00:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Custom Editor Styles Functionality for adding custom editor styles [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi [Feature] Theme Style Variations Related to style variations provided by block themes [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

CSS Class Names: Add button to choose from block styles
4 participants