Skip to content

Conversation

@jorgefilipecosta
Copy link
Member

@jorgefilipecosta jorgefilipecosta commented Nov 3, 2025

Fixes: #72947

What?

Converts the fit text functionality from a typography block support (used by paragraph and heading blocks) to a dedicated core/fit-text block.

Why?

Based on UX feedback during the beta stage, the block support approach presented several usability issues:

Problems with Block Support

  • Poor Discoverability: Feature hidden in typography panel options menu (7 clicks to enable)
  • Cognitive Load: Toggle behavior on existing blocks was confusing
  • Unclear Differentiation: Hard to identify fit text blocks in list view
  • Workflow Friction: Multiple nested menu interactions required

Benefits of Standalone Block

  • Clear Intent: Inserting fit text block immediately signals purpose
  • Better Discoverability: Visible in block inserter with clear description
  • Simplified UX: No toggles needed - the block IS fit text (2 clicks total)
  • Easier Management: Distinct block type in list/document views
  • Cleaner Code: Removes conditional typography logic from paragraph/heading

Testing Instructions

  1. Insert fit text block:

    /fit text
    

    Type content and observe automatic size scaling

  2. Test level switching:

    • Select fit text block
    • Use HeadingLevelDropdown in toolbar
    • Switch between h1-h6 and paragraph
  3. Test alignment changes:

    • Change alignment (none/wide/full)
    • Verify text recalculates immediately
  4. Test content changes:

    • Add/remove text
    • Observe dynamic font size adjustments
  5. Test frontend:

    • Publish post with fit text
    • View on frontend
    • Resize browser window
    • Verify text scales responsively

Screenshots

Screenshot 2025-11-03 at 21 49 30

Related

Follows similar pattern to Site Title block which also supports level switching.

cc: @mtias, @youknowriad

@github-actions
Copy link

github-actions bot commented Nov 3, 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: jorgefilipecosta <[email protected]>
Co-authored-by: luisherranz <[email protected]>
Co-authored-by: youknowriad <[email protected]>
Co-authored-by: talldan <[email protected]>
Co-authored-by: jasmussen <[email protected]>
Co-authored-by: henriqueiamarino <[email protected]>
Co-authored-by: fabiankaegy <[email protected]>
Co-authored-by: t-hamano <[email protected]>
Co-authored-by: aaronrobertshaw <[email protected]>
Co-authored-by: scruffian <[email protected]>
Co-authored-by: jeryj <[email protected]>
Co-authored-by: ntsekouras <[email protected]>
Co-authored-by: fcoveram <[email protected]>

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

@jorgefilipecosta jorgefilipecosta added [Type] Bug An existing feature does not function as intended [Package] Block library /packages/block-library labels Nov 3, 2025
@github-actions
Copy link

github-actions bot commented Nov 3, 2025

Size Change: +50 B (0%)

Total Size: 2.45 MB

Filename Size Change
build/modules/block-editor/utils/fit-text-frontend.min.js 0 B -435 B (removed) 🏆
build/scripts/block-editor/index.min.js 294 kB -978 B (-0.33%)
build/scripts/block-library/index.min.js 272 kB +948 B (+0.35%)
build/styles/block-library/common-rtl.css 1.09 kB -18 B (-1.62%)
build/styles/block-library/common.css 1.09 kB -18 B (-1.62%)
build/styles/block-library/style-rtl.css 16.4 kB -8 B (-0.05%)
build/styles/block-library/style.css 16.4 kB -7 B (-0.04%)
build/modules/block-library/fit-text/view.min.js 430 B +430 B (new file) 🆕
build/styles/block-library/fit-text/style-rtl.css 68 B +68 B (new file) 🆕
build/styles/block-library/fit-text/style.css 68 B +68 B (new file) 🆕
ℹ️ View Unchanged
Filename Size
build/modules/a11y/index.min.js 355 B
build/modules/block-library/accordion/view.min.js 520 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.66 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-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.8 kB
build/scripts/edit-site/index.min.js 228 kB
build/scripts/edit-widgets/index.min.js 20 kB
build/scripts/editor/index.min.js 283 kB
build/scripts/element/index.min.js 5.19 kB
build/scripts/escape-html/index.min.js 586 B
build/scripts/format-library/index.min.js 10.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 8.62 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.81 kB
build/styles/block-editor/content.css 4.8 kB
build/styles/block-editor/default-editor-styles-rtl.css 224 B
build/styles/block-editor/default-editor-styles.css 224 B
build/styles/block-editor/style-rtl.css 16.1 kB
build/styles/block-editor/style.css 16.1 kB
build/styles/block-library/accordion-heading/style-rtl.css 340 B
build/styles/block-library/accordion-heading/style.css 340 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/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 188 B
build/styles/block-library/heading/style.css 188 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/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.85 kB
build/styles/edit-site/posts.css 9.84 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 kB
build/styles/editor/style.css 18 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 703 B
build/styles/patterns/style.css 703 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

@youknowriad
Copy link
Contributor

I think this feels a bit better to me. WDYT?

A few things:

  • Should the block be name "Stretchy text" instead of "Fit text"
  • I feel it should start as a "paragraph" by default.
  • The format toolbar is missing
  • I wonder if the "orientation" should be allowed, maybe that block support should be disabled to start with because vertically it's a bit weird to stretch
  • Padding left/right feels incorrect to me, the width of the block overflows its container.

@jorgefilipecosta
Copy link
Member Author

Hi @youknowriad,

Should the block be name "Stretchy text" instead of "Fit text"

I'm not sure both seem to be common, there are "Fit Text" libs in javascript and in some cases we also see Stretchy text. I don't have a big preference if you prefer "Stretchy text" I can change.

I feel it should start as a "paragraph" by default.

Done

The format toolbar is missing

It was added.

I wonder if the "orientation" should be allowed, maybe that block support should be disabled to start with because vertically it's a bit weird to stretch

It was fixed.

Padding left/right feels incorrect to me, the width of the block overflows its container.

Yes it is strange but it does not seems related to fit text, for example on the paragraph block I see the same behaviour.

@youknowriad
Copy link
Contributor

Would love more feedback here but this is working well. @mcsf @jasmussen

@talldan
Copy link
Contributor

talldan commented Nov 4, 2025

I personally prefer 'Stretchy text' - it has a bit more character.

'Fit text' doesn't read quite right to me grammatically as a noun. I think 'Fit' is being used as a verb in that context. 'Fitted text' might be a little better, but I'm probably not the best person for copy advice.

I think the block needs a new icon. At the moment it still shows the paragraph icon after switching it to a heading. Maybe an 'T' with some left/right arrows (<- T ->) could work? 😄

I see the same issue as Riad when testing with padding. This is what I see for a regular paragraph:
Screenshot 2025-11-04 at 4 21 08 pm

The new block overflows the right padding:
Screenshot 2025-11-04 at 4 21 57 pm

@talldan
Copy link
Contributor

talldan commented Nov 4, 2025

Just an extra thing - if this PR is merged, it'd be good to also consider the block for bindings and pattern overrides support now that it's not a regular paragraph/heading. I think that might be easy enough to do, but it might be a 7.0 consideration now so late in the 6.9 process. It's a shame as this will be a really cool block in patterns. Curious for thoughts (cc @ockham @cbravobernal).

@jasmussen
Copy link
Contributor

Honestly I could go both ways on this. I don't think the pro/con lists are really exhaustive or conclusive, have we thought through potential future edgecases? I'm making this up, but imagine we had responsive controls, perhaps I want it to be "fit text" on desktop, but just a paragraph on mobile. That would work better with the supports.

But perhaps it ultimately boils down to: "what feels better". I mean that both in the user experience and code-wise.

As a longshot, perhaps @beafialho has thoughts: paragraph extension or standalone block?

And yes I guess we need a new icon if we go this route.

@jasmussen
Copy link
Contributor

A fairly strong argument for keeping it a block-support just occured to me. I would like to use fit-text on the site title block, so that I can have the title always span the width of the site. I would have to hardcode the site title into a standalone block, whereas with a block supports, the site title could have it as a property of the typography panel.

I try to not have strong opinions, but I feel like this is a pretty solid reason to not convert it back to a block.

@henriqueiamarino
Copy link

Hey folks, a theme designer chimming in on this conversation 👋🏻

As a hard user of this kind of feature, I’d say I’m with @talldan on the naming and with @jasmussen on the format. Despite being minimal, Fit Text is somewhat vague when it is just a label on a list. Perhaps Stretch Text or a similar name better describes the feature. Regarding the format, I’m glad we now have this for paragraphs and headings. Looking ahead to future designs, I believe this should be expanded and made available for all elements with a line of text, such as the Site title previously mentioned.

@jorgefilipecosta
Copy link
Member Author

Hi @jasmussen, @henriqueiamarino thank you for the insights shared,

The reason why we went the block supports route was exactly what is being referred allow blocks even dynamic ones like site title or post title to use fit text. It is a more versatile solution.

But this is not something standard on the web it is not just some CSS it involves JavaScript with some loops, so I can also understand the argument that at least for now it should be contained in some specific, and we don't want to use widely in things like post title.

Maybe there is some middle ground like an experimental block support, and exposing it just in a specific (new block) or a variation of a block? Leaving the path open for future additions to other blocks.

I'm fine with either direction we choose and open to change paths if we decide to do so.

@jasmussen
Copy link
Contributor

Those are valid arguments too. So it really does boil a bit down to compartmentalizing the feature for discoverability, or making it widely available for utility. I'm increasingly in camp utility, and one reason why is because I love this theme, which ships with the feature. It uses the block from a previous iteration, to be clear, not a site title. But it is a testable, demoable, reason for why site title would benefit from the feature.

I'm also happy to support either direction.

@fabiankaegy
Copy link
Member

If the issue is discovery, I'm curious why we don't rethink using variations to make it appear in the block inserter?

We had that originally but then removed it in #72408

@t-hamano
Copy link
Contributor

t-hamano commented Nov 5, 2025

I believe we need to decide on a direction for this issue before the RC1 release, so I would like to gather more feedback. @WordPress/gutenberg-core

  • Poor Discoverability: Feature hidden in typography panel options menu (7 clicks to enable)
  • Workflow Friction: Multiple nested menu interactions required

Personally, I don't consider these to be problems. There are many block supports where the controls are hidden by default. I'm not sure why it's necessary to specifically highlight only the "fit text block support" feature.

@jasmussen
Copy link
Contributor

I think the UI concern with applying this is valid, and it's a very similar concern with how to apply the drop cap.

But that's a fixable UI aspect, and one that we should look at regardless.

@aaronrobertshaw
Copy link
Contributor

Just my two cents, but I'd lean towards the more versatile long-term solution, one that empowers third-party devs i.e. block supports.

Poor Discoverability: Feature hidden in typography panel options menu (7 clicks to enable)
Workflow Friction: Multiple nested menu interactions required

I'd also agree with @t-hamano here in that I'm not sold these are major issues.

Blocks that benefit from this feature having a higher profile could also display the control by default, increasing discoverability slightly while also reducing friction.

Additionally, the majority of the benefits listed for this being a standalone block are also provided by the block variation option.

Copy link
Member

@luisherranz luisherranz left a comment

Choose a reason for hiding this comment

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

Reviewing the Interactivity API part.

Comment on lines +61 to +63
"interactivity": {
"clientNavigation": true
},
Copy link
Member

Choose a reason for hiding this comment

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

This block is interactive.

Suggested change
"interactivity": {
"clientNavigation": true
},
"interactivity": true,

}

// Enqueue the frontend script module.
wp_enqueue_script_module( '@wordpress/block-library/fit-text/view' );
Copy link
Member

Choose a reason for hiding this comment

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

Replace with viewScriptModule field in block.json, like this.

Comment on lines +29 to +34
if ( ! $processor->get_attribute( 'data-wp-interactive' ) ) {
$processor->set_attribute( 'data-wp-interactive', true );
}
$processor->set_attribute( 'data-wp-context---core-fit-text', 'core/fit-text::{"fontSize":""}' );
$processor->set_attribute( 'data-wp-init---core-fit-text', 'core/fit-text::callbacks.init' );
$processor->set_attribute( 'data-wp-style--font-size', 'core/fit-text::context.fontSize' );
Copy link
Member

Choose a reason for hiding this comment

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

You don't need to use namespaces in the directives now, as this is an interactive block, and it's those who extend this block that should use their own namespaces.

Suggested change
if ( ! $processor->get_attribute( 'data-wp-interactive' ) ) {
$processor->set_attribute( 'data-wp-interactive', true );
}
$processor->set_attribute( 'data-wp-context---core-fit-text', 'core/fit-text::{"fontSize":""}' );
$processor->set_attribute( 'data-wp-init---core-fit-text', 'core/fit-text::callbacks.init' );
$processor->set_attribute( 'data-wp-style--font-size', 'core/fit-text::context.fontSize' );
$processor->set_attribute( 'data-wp-interactive', 'core/fit-text' );
$processor->set_attribute( 'data-wp-context', '{"fontSize":""}' );
$processor->set_attribute( 'data-wp-init', 'callbacks.init' );
$processor->set_attribute( 'data-wp-style', 'context.fontSize' );

import { optimizeFitText } from './utils';

// Initialize via Interactivity API for client-side navigation
store( 'core/fit-text', {
Copy link
Member

Choose a reason for hiding this comment

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

This store should be locked. Similar to this.

@scruffian
Copy link
Contributor

scruffian commented Nov 5, 2025

Would adding a block variation resolve the UX concerns? - i.e. undoing #72408

@jeryj
Copy link
Contributor

jeryj commented Nov 5, 2025

I'm in agreement with @jasmussen, @t-hamano, and @aaronrobertshaw - I don't think this should get set as its own block. I also agree with @fabiankaegy and @scruffian that if we want discoverability, exposing the block variation in the inserter by reverting #72408 seems like a better route.

@fabiankaegy
Copy link
Member

I think my vote right now would be:

  • Leave as is for 6.9
  • If we find that users have a hard time using it add a variation in 7.0

@youknowriad
Copy link
Contributor

I think a variation is the minimum and probably hiding the block support from all the non variation blocks (to avoid confusion with all the other font related changes you can make). I would love to see an alternative PR with the variations approach to make the right call.

@t-hamano
Copy link
Contributor

t-hamano commented Nov 5, 2025

I'm not opposed to adding variations themselves, but with the current inserter logic, variations are added next to the block. In this UI, the stretched variations are far too prominent:

502345871-01d8f305-fa17-4846-b02e-370aa3804805

I think we probably need a new option or logic to lower the priority of variations only.

I think my vote right now would be:

  • Leave as is for 6.9
  • If we find that users have a hard time using it add a variation in 7.0

+1

@youknowriad
Copy link
Contributor

I don't think we should leave things as is though. The experience is clunky and doesn't add value to the users. No one is going to find that toggle, people search for things like "stretchy text" or "fit text" in the inserter.

@ntsekouras
Copy link
Contributor

I think we probably need a new option or logic to lower the priority of variations only.

I looked a bit into the code where we show the inserter items and I think it will add more complexity than it worths it to handle some variations differently and add them later on the list and not next to the block they belong. We shouldn't do it for all variations, because besides this specific use case, it makes sense to show the variations as we do now.

@scruffian
Copy link
Contributor

No one is going to find that toggle, people search for things like "stretchy text" or "fit text" in the inserter.

I wonder how many users will be looking for these blocks at all - maybe we should expect them to find them via patterns and themes...

@t-hamano
Copy link
Contributor

t-hamano commented Nov 6, 2025

I wonder how many users will be looking for these blocks at all

I absolutely agree.

As an alternative idea, instead of adding block variations, we could publish a dev note. For example, something like this.


The fitText block support automatically scales text to fit the available width, making headings and key copy responsive without manual font-size tweaks.

Expose ready-to-use “stretchy” presets by registering variations that set fitText: true. These appear in the inserter for one-click insertion.

wp.blocks.registerBlockVariation(
	'core/heading',
	{
		name: 'stretchy-heading',
		title: 'Stretchy Heading',
		attributes: { fitText: true },
	}
);

@fcoveram
Copy link
Contributor

fcoveram commented Nov 6, 2025

The UX issues found are clear, but converting it into a block contradicts the concept of the feature. Fitting the container is a size property of any text. Making it a block doesn't solve the discoverability issue, unless it's shown at the top of the list. But with this logic in mind, the toggle could be visible below the font size by default as well.

…people search for things like "stretchy text" or "fit text" in the inserter.

Is this an assumption or do we have research data supporting it? Asking it because searching for a feature does not imply looking for a block.

The friction set can be more simple by placing the affordance in the custom font size, or visible by default below the font size. Here is a quick idea.

CleanShot 2025-11-06 at 12 23 21@2x

On the other hand, and not sure if this already exists, the "unclear differentiation" point can be addressed by replacing the block icon in list view, just like when changing from Group to Row or Stack. Although this distinction contradicts the recognition of whether it's a paragraph or a heading.

@youknowriad
Copy link
Contributor

A dev note targets developer, this feature targets users. We should make sure users that want stretchy text find the blocks in question.

@jorgefilipecosta
Copy link
Member Author

I think a variation is the minimum and probably hiding the block support from all the non variation blocks (to avoid confusion with all the other font related changes you can make). I would love to see an alternative PR with the variations approach to make the right call.

Hi @youknowriad, I proposed an alternative approach, following the variation path at #73056.

@t-hamano
Copy link
Contributor

Many folks seem to prefer the variation approach rather than the block approach. Let's close this PR and focus on #73056.

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

Labels

[Block] Stretchy Text [Package] Block library /packages/block-library [Type] Bug An existing feature does not function as intended

Projects

Development

Successfully merging this pull request may close these issues.

Convert Fit Text from to Standalone Block or block variation