Skip to content

Fields package: Add RichText field#75275

Open
talldan wants to merge 18 commits into
trunkfrom
move/rich-text-to-fields-package
Open

Fields package: Add RichText field#75275
talldan wants to merge 18 commits into
trunkfrom
move/rich-text-to-fields-package

Conversation

@talldan

@talldan talldan commented Feb 6, 2026

Copy link
Copy Markdown
Contributor

See #73180

What?

Adds a RichText field to the @wordpress/fields package, backed by a new private RichTextControl in @wordpress/block-editor. The control is the standalone, form-field counterpart to the in-canvas RichText component: it exposes a plain value / onChange interface and renders a contenteditable area with the registered formatting types wired up. The new field is then used to power the existing title field so titles edit as rich text.

Why?

DataForm currently has text and textarea controls for textual content, but no first-class control for rich text. Several emerging use cases - Media titles/captions, sidebar editable fields, and post/page metadata - need an inline-editable field that participates in DataForms while still allowing formatting (bold, italic, links, autocompleters like @-mentions, etc.).

Until now, rich-text editing has been tightly coupled to the canvas, which makes it awkward to reuse outside the block tree. By extracting a standalone RichTextControl and exposing it as a field, DataForm consumers can opt into rich text the same way they opt into any other field type, with consistent label/visually-hidden-label/keyboard behavior provided by BaseControl.

How?

  • Adds RichTextControl in packages/block-editor/src/components/rich-text/control/:
    • Wraps the existing useRichText hook (from @wordpress/rich-text) and renders a BaseControl-labeled contenteditable element.
    • Wires FormatEdit so registered format types (bold, italic, link, custom formats, etc.) are active when the control is focused.
    • Supports allowedFormats, disableFormats, withoutInteractiveFormatting, preserveWhiteSpace, disableLineBreaks, and autocompleters so consumers can scope what's available per field (e.g. mentions in comments, no line breaks in titles).
    • Reflects disableLineBreaks via aria-multiline and supports hideLabelFromVision for compact inspector layouts.
    • Exported via private-apis.js as a private API for internal Gutenberg packages — not part of the public surface yet.
  • Adds the field in packages/fields/src/fields/rich-text/:
    • edit.tsx adapts DataForm's DataFormControlProps to RichTextControl and forwards an optional config object (clientId, className, placeholder, allowedFormats, disableFormats, withoutInteractiveFormatting, preserveWhiteSpace, disableLineBreaks, autocompleters).
    • index.tsx exports the Field definition (id: 'rich-text', type: 'text').
  • Updates packages/fields/src/fields/title/index.tsx to use the new RichTextEdit for the title field's Edit so titles now edit as rich text, and declares @wordpress/block-editor as a fields package dependency.
  • Adds a style.scss for the control (input-style border, padding, placeholder color) and registers it from the package stylesheet.
  • Adds unit tests covering label wiring, hideLabelFromVision, aria-multiline from disableLineBreaks, className merging, and the DataForm Edit wrapper.

Testing Instructions

This component is used in #78242 and can be tested there.

  1. Pull this branch and run npm install && npm run build.
  2. Start the dev environment (npm run wp-env start) and open the post/page editor or a DataViews-driven screen (e.g. Pages list → click a page to open the edit pane).
  3. Edit a post or page title via a DataForm-rendered title field (for example, the title field in the sidebar/document panel where it uses DataForm).
  4. Verify the title now renders as a rich text field:
    • You can type, edit, and delete characters.
    • You can select text and apply formatting (e.g. bold via the inline toolbar, or Cmd/Ctrl+B); registered format types are active when the field is focused.
    • Placeholder text shows when the field is empty.
    • Saving the post persists the title correctly.
  5. Run the unit tests:
    npm run test:unit -- packages/block-editor/src/components/rich-text/control
    npm run test:unit -- packages/fields/src/fields/rich-text
    
    All tests should pass.

Testing Instructions for Keyboard

  1. Tab to the rich text field - focus should land on the contenteditable region and the field should appear focused (visible focus ring).
  2. Type text and verify caret movement with arrow keys, Home/End, and Cmd/Ctrl+Left/Right word jumps.
  3. Select text with Shift+Arrow / Shift+Cmd+Left/Right and apply formatting with standard shortcuts:
    • Cmd/Ctrl+B for bold, Cmd/Ctrl+I for italic, Cmd/Ctrl+K for link.
  4. With the field focused, verify the label is announced by your screen reader (when not visually hidden) and that the field is announced as a multi-line textbox (or single-line when disableLineBreaks is set).
  5. Shift+Tab away from the field - focus should leave the control cleanly and the inline format UI should detach.

Screenshots or screencast

Before After

@github-actions github-actions Bot added [Package] Block editor /packages/block-editor [Package] Fields /packages/fields labels Feb 6, 2026
adamsilverstein added a commit that referenced this pull request May 14, 2026
Per review feedback on #78242, replace the block-editor RichText
component with RichTextControl introduced in #75275. RichText is
intended for use inside blocks and pulls in editor state (selection
store, format toolbar wiring, etc.) that the note form does not need.
RichTextControl wraps useRichText directly and exposes the smaller
surface the note form actually uses, which mirrors the approach
DataForms takes for its rich-text field.

The form keeps the same allowed-formats list (bold, italic, link,
code), the same keyboard shortcuts (Cmd+B / Cmd+I / Cmd+K), and the
same empty-state submit guard. The Cmd+Enter / Escape handling moves
up to the form element because RichTextControl does not expose an
onKeyDown prop; the events still reach it via bubbling from the
contenteditable.

Note styles are rescoped to the form-level container (the input now
carries the .block-editor-rich-text-control class) and the explicit
VisuallyHidden label is replaced by RichTextControl's built-in
hideLabelFromVision option.

Refs #75275
Refs #73413
adamsilverstein added a commit that referenced this pull request May 14, 2026
Mock @wordpress/block-editor's privateApis and the editor lock-unlock
module so the test substitutes a lightweight RichTextControl for the
real one. The mock keeps the same data-testid the suite already uses
so the existing assertions about format allowlist and keyboard
handling continue to work unchanged.

Refs #75275
@adamsilverstein

Copy link
Copy Markdown
Member

Hi @talldan I'd like to work on landing this so we can use it for rich formatting in Notes. Do you have any tips about what remains? Would you be available to review any fixes I push to the branch?

@adamsilverstein

adamsilverstein commented May 14, 2026

Copy link
Copy Markdown
Member

In the meantime I'm going to add tests/update the pr and review.

…ers/className

The trunk `useRichText` now consumes `allowedFormats`,
`withoutInteractiveFormatting`, and a format-type handler context directly,
returning `formatTypes` alongside the editor state. Lean on that and drop the
duplicated `useFormatTypes` / editor-only-format wrappers.

Add `autocompleters` (forwarded to `useBlockEditorAutocompleteProps`) and
`className` props so callers like the Notes inline form can wire `@`-mention
completers and customize the contenteditable styling. Route the stylesheet
through the block-editor entry instead of importing the SCSS from JS.
Add `@wordpress/block-editor` to the fields package's dependencies — the new
`RichTextControl` is imported via private APIs and the dependency was missing,
tripping `import/no-extraneous-dependencies`.

In `fields/rich-text/edit.tsx`, forward the new `className` and
`autocompleters` config to `RichTextControl` and make `config` itself
optional (consumers like the title field do not pass one). Drop the commented
placeholder `ConfiguredRichTextEdit` in the title field.
Add focused unit tests covering:

- `RichTextControl`: labeled-textbox markup, `hideLabelFromVision`,
  `disableLineBreaks`/`aria-multiline` toggling, and consumer-supplied
  `className` merging.
- `fields/rich-text/edit`: that the wrapper forwards field label/value/id to
  the underlying control, that change events flow through `field.setValue`
  back to the consumer's `onChange`, that optional config props
  (`clientId`, `placeholder`, `allowedFormats`, etc.) are passed through,
  and that a missing config object does not crash.
@adamsilverstein adamsilverstein force-pushed the move/rich-text-to-fields-package branch from af5710c to 520950d Compare May 14, 2026 14:51
@adamsilverstein

adamsilverstein commented May 14, 2026

Copy link
Copy Markdown
Member

@talldan - I picked this up since you mentioned not having time — pushed three commits on top of yours to address review findings and unblock #78242 (Notes inline rich text):

  1. RichTextControl: align with current rich-text API and add autocompleters/className — the rich-text package moved useFormatTypes inside useRichText (RichText: move useFormatTypes to rich-text package #75387), so the branch's local format-type wiring no longer matches trunk. Switched to the new private useRichText and dropped the duplicated addEditorOnlyFormats / removeEditorOnlyFormats / addInvisibleFormats helpers. Added autocompleters (forwarded to useBlockEditorAutocompleteProps) so callers can wire @-mention completers, and a className pass-through. Moved the SCSS into the block-editor stylesheet entry instead of importing it from JS (the JS import was tripping @wordpress/no-non-module-stylesheet-imports).

  2. fields: declare block-editor dependency and clean up title field@wordpress/block-editor wasn't in the fields package's deps, so the new unlock( blockEditorPrivateApis ) import was flagging import/no-extraneous-dependencies. Made config optional (the title field doesn't pass one), forwarded the new className/autocompleters config, and dropped the commented ConfiguredRichTextEdit placeholder.

  3. RichTextControl: add unit tests for new control and fields wrapper — smoke coverage for the control (labeled textbox markup, hideLabelFromVision, aria-multiline, className merging) plus a wrapper test that mocks RichTextControl to verify field label/value/id forwarding, that change events flow through field.setValue, and that the optional config props are passed through.

Rebased onto current trunk along the way (only private-apis.js conflicted).

Notes for follow-up

  • There's still a near-identical RichTextControl at packages/block-editor/src/hooks/block-fields/rich-text/index.js. Once this lands, block-fields/index.js can switch to the new private API and that file (and its sibling stylesheet) can go away.
  • For Notes: Support inline rich text (bold, italic, link, code) #78242 the current surface is enough: id, label, hideLabelFromVision, value, onChange, allowedFormats, placeholder. core/link (⌘K) already works through the registered format types. Future @-mentions for notes can be added by passing an autocompleters array — no further changes to the control needed.

adamsilverstein added a commit that referenced this pull request May 14, 2026
Per review feedback on #78242, replace the block-editor RichText
component with RichTextControl introduced in #75275. RichText is
intended for use inside blocks and pulls in editor state (selection
store, format toolbar wiring, etc.) that the note form does not need.
RichTextControl wraps useRichText directly and exposes the smaller
surface the note form actually uses, which mirrors the approach
DataForms takes for its rich-text field.

The form keeps the same allowed-formats list (bold, italic, link,
code), the same keyboard shortcuts (Cmd+B / Cmd+I / Cmd+K), and the
same empty-state submit guard. The Cmd+Enter / Escape handling moves
up to the form element because RichTextControl does not expose an
onKeyDown prop; the events still reach it via bubbling from the
contenteditable.

Note styles are rescoped to the form-level container (the input now
carries the .block-editor-rich-text-control class) and the explicit
VisuallyHidden label is replaced by RichTextControl's built-in
hideLabelFromVision option.

Refs #75275
Refs #73413
adamsilverstein added a commit that referenced this pull request May 14, 2026
Mock @wordpress/block-editor's privateApis and the editor lock-unlock
module so the test substitutes a lightweight RichTextControl for the
real one. The mock keeps the same data-testid the suite already uses
so the existing assertions about format allowlist and keyboard
handling continue to work unchanged.

Refs #75275
A `<label for>` only contributes an accessible name to native form
controls, not to a `<div role="textbox">`. Mirroring `label` onto
`aria-label` gives the contenteditable a stable accessible name so
assistive tech and Playwright `getByRole('textbox', { name })` lookups
resolve consistently regardless of `hideLabelFromVision`.
The wrapper's prop type was `Pick<DataFormControlProps, ...> & { config: RichTextFieldConfig }`,
which is not contravariantly assignable to `ComponentType<DataFormControlProps<Item>>`
because the rich-text `config` shape diverges from the generic one. Accepting the
standard `DataFormControlProps` and narrowing `config` at the call site keeps the
wrapper usable as a `Field.Edit` and drops the now-unneeded `@ts-expect-error`.
adamsilverstein added a commit that referenced this pull request May 14, 2026
Per review feedback on #78242, replace the block-editor RichText
component with RichTextControl introduced in #75275. RichText is
intended for use inside blocks and pulls in editor state (selection
store, format toolbar wiring, etc.) that the note form does not need.
RichTextControl wraps useRichText directly and exposes the smaller
surface the note form actually uses, which mirrors the approach
DataForms takes for its rich-text field.

The form keeps the same allowed-formats list (bold, italic, link,
code), the same keyboard shortcuts (Cmd+B / Cmd+I / Cmd+K), and the
same empty-state submit guard. The Cmd+Enter / Escape handling moves
up to the form element because RichTextControl does not expose an
onKeyDown prop; the events still reach it via bubbling from the
contenteditable.

Note styles are rescoped to the form-level container (the input now
carries the .block-editor-rich-text-control class) and the explicit
VisuallyHidden label is replaced by RichTextControl's built-in
hideLabelFromVision option.

Refs #75275
Refs #73413
adamsilverstein added a commit that referenced this pull request May 14, 2026
Mock @wordpress/block-editor's privateApis and the editor lock-unlock
module so the test substitutes a lightweight RichTextControl for the
real one. The mock keeps the same data-testid the suite already uses
so the existing assertions about format allowlist and keyboard
handling continue to work unchanged.

Refs #75275
`@wordpress/block-editor` ships no `.d.ts` files, so the type-declaration
build (`tsgo --build`) fails to resolve the import even though the package
is declared as a runtime dependency. Use `@ts-ignore` (rather than the
`@ts-expect-error` that was dropped earlier) so the directive does not
flip to "unused" under per-package `tsc` checks that happen to resolve
the source successfully.
adamsilverstein added a commit that referenced this pull request May 14, 2026
Per review feedback on #78242, replace the block-editor RichText
component with RichTextControl introduced in #75275. RichText is
intended for use inside blocks and pulls in editor state (selection
store, format toolbar wiring, etc.) that the note form does not need.
RichTextControl wraps useRichText directly and exposes the smaller
surface the note form actually uses, which mirrors the approach
DataForms takes for its rich-text field.

The form keeps the same allowed-formats list (bold, italic, link,
code), the same keyboard shortcuts (Cmd+B / Cmd+I / Cmd+K), and the
same empty-state submit guard. The Cmd+Enter / Escape handling moves
up to the form element because RichTextControl does not expose an
onKeyDown prop; the events still reach it via bubbling from the
contenteditable.

Note styles are rescoped to the form-level container (the input now
carries the .block-editor-rich-text-control class) and the explicit
VisuallyHidden label is replaced by RichTextControl's built-in
hideLabelFromVision option.

Refs #75275
Refs #73413
adamsilverstein added a commit that referenced this pull request May 14, 2026
Mock @wordpress/block-editor's privateApis and the editor lock-unlock
module so the test substitutes a lightweight RichTextControl for the
real one. The mock keeps the same data-testid the suite already uses
so the existing assertions about format allowlist and keyboard
handling continue to work unchanged.

Refs #75275
@github-actions

github-actions Bot commented May 14, 2026

Copy link
Copy Markdown

Size Change: +1.35 kB (+0.02%)

Total Size: 7.97 MB

📦 View Changed
Filename Size Change
build/scripts/block-editor/index.min.js 347 kB +896 B (+0.26%)
build/scripts/editor/index.min.js 430 kB +213 B (+0.05%)
build/scripts/format-library/index.min.js 13.1 kB +1 B (+0.01%)
build/styles/block-editor/style-rtl.css 18.8 kB +65 B (+0.35%)
build/styles/block-editor/style-rtl.min.css 16 kB +54 B (+0.34%)
build/styles/block-editor/style.css 18.8 kB +65 B (+0.35%)
build/styles/block-editor/style.min.css 16 kB +54 B (+0.34%)
ℹ️ View Unchanged
Filename Size
build/modules/a11y/index.min.js 355 B
build/modules/abilities/index.min.js 42.3 kB
build/modules/block-editor/utils/fit-text-frontend.min.js 617 B
build/modules/block-library/accordion/view.min.js 595 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 2.64 kB
build/modules/block-library/navigation/view.min.js 1.14 kB
build/modules/block-library/playlist/view.min.js 10.9 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 946 B
build/modules/boot/index.min.js 19.3 kB
build/modules/connectors/index.min.js 2.05 kB
build/modules/content-types/index.min.js 156 kB
build/modules/core-abilities/index.min.js 926 B
build/modules/edit-site-init/index.min.js 1.4 kB
build/modules/interactivity-router/full-page.min.js 451 B
build/modules/interactivity-router/index.min.js 11.6 kB
build/modules/interactivity/index.min.js 15.3 kB
build/modules/latex-to-mathml/index.min.js 56.5 kB
build/modules/latex-to-mathml/loader.min.js 131 B
build/modules/lazy-editor/index.min.js 14.1 kB
build/modules/route/index.min.js 25.2 kB
build/modules/vips/loader.min.js 127 B
build/modules/vips/worker.min.js 4.56 MB
build/modules/workflow/index.min.js 19.9 kB
build/scripts/a11y/index.min.js 1.1 kB
build/scripts/annotations/index.min.js 2.53 kB
build/scripts/api-fetch/index.min.js 2.86 kB
build/scripts/autop/index.min.js 2.21 kB
build/scripts/base-styles/index.min.js 146 B
build/scripts/blob/index.min.js 665 B
build/scripts/block-directory/index.min.js 10.3 kB
build/scripts/block-library/index.min.js 323 kB
build/scripts/block-serialization-default-parser/index.min.js 1.2 kB
build/scripts/block-serialization-spec-parser/index.min.js 3.12 kB
build/scripts/blocks/index.min.js 57.1 kB
build/scripts/commands/index.min.js 21 kB
build/scripts/components/index.min.js 267 kB
build/scripts/compose/index.min.js 11.1 kB
build/scripts/core-commands/index.min.js 4.37 kB
build/scripts/core-data/index.min.js 31.3 kB
build/scripts/customize-widgets/index.min.js 14.6 kB
build/scripts/data-controls/index.min.js 832 B
build/scripts/data/index.min.js 9.72 kB
build/scripts/date/index.min.js 23.7 kB
build/scripts/deprecated/index.min.js 784 B
build/scripts/dom-ready/index.min.js 502 B
build/scripts/dom/index.min.js 5.04 kB
build/scripts/edit-post/index.min.js 18.8 kB
build/scripts/edit-site/index.min.js 265 kB
build/scripts/edit-widgets/index.min.js 22.2 kB
build/scripts/element/index.min.js 5.2 kB
build/scripts/escape-html/index.min.js 622 B
build/scripts/hooks/index.min.js 1.86 kB
build/scripts/html-entities/index.min.js 529 B
build/scripts/i18n/index.min.js 2.5 kB
build/scripts/is-shallow-equal/index.min.js 607 B
build/scripts/keyboard-shortcuts/index.min.js 1.65 kB
build/scripts/keycodes/index.min.js 1.6 kB
build/scripts/list-reusable-blocks/index.min.js 2.53 kB
build/scripts/media-utils/index.min.js 79.9 kB
build/scripts/notices/index.min.js 1.89 kB
build/scripts/nux/index.min.js 1.92 kB
build/scripts/patterns/index.min.js 8 kB
build/scripts/plugins/index.min.js 2.18 kB
build/scripts/preferences-persistence/index.min.js 2.19 kB
build/scripts/preferences/index.min.js 3.33 kB
build/scripts/primitives/index.min.js 1.05 kB
build/scripts/priority-queue/index.min.js 1.65 kB
build/scripts/private-apis/index.min.js 1.14 kB
build/scripts/react-i18n/index.min.js 868 B
build/scripts/redux-routine/index.min.js 3.4 kB
build/scripts/reusable-blocks/index.min.js 3.14 kB
build/scripts/rich-text/index.min.js 14 kB
build/scripts/router/index.min.js 5.99 kB
build/scripts/server-side-render/index.min.js 1.94 kB
build/scripts/shortcode/index.min.js 1.62 kB
build/scripts/style-engine/index.min.js 2.45 kB
build/scripts/sync/index.min.js 39.3 kB
build/scripts/theme/index.min.js 22.3 kB
build/scripts/token-list/index.min.js 767 B
build/scripts/undo-manager/index.min.js 954 B
build/scripts/upload-media/index.min.js 11.2 kB
build/scripts/url/index.min.js 4.02 kB
build/scripts/vendors/react-dom.min.js 43.3 kB
build/scripts/vendors/react-jsx-runtime.min.js 667 B
build/scripts/vendors/react.min.js 2.77 kB
build/scripts/viewport/index.min.js 1.25 kB
build/scripts/warning/index.min.js 482 B
build/scripts/widgets/index.min.js 7.84 kB
build/scripts/wordcount/index.min.js 1.07 kB
build/styles/base-styles/admin-schemes-rtl.css 1.71 kB
build/styles/base-styles/admin-schemes-rtl.min.css 775 B
build/styles/base-styles/admin-schemes.css 1.71 kB
build/styles/base-styles/admin-schemes.min.css 775 B
build/styles/block-directory/style-rtl.css 1.97 kB
build/styles/block-directory/style-rtl.min.css 1.06 kB
build/styles/block-directory/style.css 1.98 kB
build/styles/block-directory/style.min.css 1.06 kB
build/styles/block-editor/content-rtl.css 5.44 kB
build/styles/block-editor/content-rtl.min.css 4.01 kB
build/styles/block-editor/content.css 5.44 kB
build/styles/block-editor/content.min.css 4.01 kB
build/styles/block-editor/default-editor-styles-rtl.css 697 B
build/styles/block-editor/default-editor-styles-rtl.min.css 224 B
build/styles/block-editor/default-editor-styles.css 697 B
build/styles/block-editor/default-editor-styles.min.css 224 B
build/styles/block-library/accordion-heading/style-rtl.css 346 B
build/styles/block-library/accordion-heading/style-rtl.min.css 325 B
build/styles/block-library/accordion-heading/style.css 346 B
build/styles/block-library/accordion-heading/style.min.css 325 B
build/styles/block-library/accordion-item/style-rtl.css 239 B
build/styles/block-library/accordion-item/style-rtl.min.css 180 B
build/styles/block-library/accordion-item/style.css 238 B
build/styles/block-library/accordion-item/style.min.css 180 B
build/styles/block-library/accordion-panel/style-rtl.css 110 B
build/styles/block-library/accordion-panel/style-rtl.min.css 99 B
build/styles/block-library/accordion-panel/style.css 110 B
build/styles/block-library/accordion-panel/style.min.css 99 B
build/styles/block-library/accordion/style-rtl.css 69 B
build/styles/block-library/accordion/style-rtl.min.css 62 B
build/styles/block-library/accordion/style.css 69 B
build/styles/block-library/accordion/style.min.css 62 B
build/styles/block-library/archives/style-rtl.css 101 B
build/styles/block-library/archives/style-rtl.min.css 90 B
build/styles/block-library/archives/style.css 101 B
build/styles/block-library/archives/style.min.css 90 B
build/styles/block-library/audio/editor-rtl.css 166 B
build/styles/block-library/audio/editor-rtl.min.css 149 B
build/styles/block-library/audio/editor.css 166 B
build/styles/block-library/audio/editor.min.css 151 B
build/styles/block-library/audio/style-rtl.css 945 B
build/styles/block-library/audio/style-rtl.min.css 132 B
build/styles/block-library/audio/style.css 945 B
build/styles/block-library/audio/style.min.css 132 B
build/styles/block-library/audio/theme-rtl.css 967 B
build/styles/block-library/audio/theme-rtl.min.css 134 B
build/styles/block-library/audio/theme.css 967 B
build/styles/block-library/audio/theme.min.css 134 B
build/styles/block-library/avatar/editor-rtl.css 127 B
build/styles/block-library/avatar/editor-rtl.min.css 115 B
build/styles/block-library/avatar/editor.css 127 B
build/styles/block-library/avatar/editor.min.css 115 B
build/styles/block-library/avatar/style-rtl.css 117 B
build/styles/block-library/avatar/style-rtl.min.css 104 B
build/styles/block-library/avatar/style.css 117 B
build/styles/block-library/avatar/style.min.css 104 B
build/styles/block-library/breadcrumbs/style-rtl.css 233 B
build/styles/block-library/breadcrumbs/style-rtl.min.css 203 B
build/styles/block-library/breadcrumbs/style.css 233 B
build/styles/block-library/breadcrumbs/style.min.css 203 B
build/styles/block-library/button/editor-rtl.css 306 B
build/styles/block-library/button/editor-rtl.min.css 265 B
build/styles/block-library/button/editor.css 317 B
build/styles/block-library/button/editor.min.css 265 B
build/styles/block-library/button/style-rtl.css 651 B
build/styles/block-library/button/style-rtl.min.css 596 B
build/styles/block-library/button/style.css 662 B
build/styles/block-library/button/style.min.css 596 B
build/styles/block-library/buttons/editor-rtl.css 391 B
build/styles/block-library/buttons/editor-rtl.min.css 291 B
build/styles/block-library/buttons/editor.css 391 B
build/styles/block-library/buttons/editor.min.css 291 B
build/styles/block-library/buttons/style-rtl.css 452 B
build/styles/block-library/buttons/style-rtl.min.css 349 B
build/styles/block-library/buttons/style.css 453 B
build/styles/block-library/buttons/style.min.css 349 B
build/styles/block-library/calendar/style-rtl.css 271 B
build/styles/block-library/calendar/style-rtl.min.css 239 B
build/styles/block-library/calendar/style.css 271 B
build/styles/block-library/calendar/style.min.css 239 B
build/styles/block-library/categories/editor-rtl.css 171 B
build/styles/block-library/categories/editor-rtl.min.css 132 B
build/styles/block-library/categories/editor.css 170 B
build/styles/block-library/categories/editor.min.css 131 B
build/styles/block-library/categories/style-rtl.css 226 B
build/styles/block-library/categories/style-rtl.min.css 169 B
build/styles/block-library/categories/style.css 235 B
build/styles/block-library/categories/style.min.css 169 B
build/styles/block-library/classic-rtl.css 402 B
build/styles/block-library/classic-rtl.min.css 358 B
build/styles/block-library/classic.css 402 B
build/styles/block-library/classic.min.css 358 B
build/styles/block-library/code/editor-rtl.css 59 B
build/styles/block-library/code/editor-rtl.min.css 53 B
build/styles/block-library/code/editor.css 59 B
build/styles/block-library/code/editor.min.css 53 B
build/styles/block-library/code/style-rtl.css 158 B
build/styles/block-library/code/style-rtl.min.css 140 B
build/styles/block-library/code/style.css 178 B
build/styles/block-library/code/style.min.css 140 B
build/styles/block-library/code/theme-rtl.css 135 B
build/styles/block-library/code/theme-rtl.min.css 122 B
build/styles/block-library/code/theme.css 135 B
build/styles/block-library/code/theme.min.css 122 B
build/styles/block-library/columns/editor-rtl.css 119 B
build/styles/block-library/columns/editor-rtl.min.css 108 B
build/styles/block-library/columns/editor.css 119 B
build/styles/block-library/columns/editor.min.css 108 B
build/styles/block-library/columns/style-rtl.css 1.3 kB
build/styles/block-library/columns/style-rtl.min.css 421 B
build/styles/block-library/columns/style.css 1.3 kB
build/styles/block-library/columns/style.min.css 421 B
build/styles/block-library/comment-author-avatar/editor-rtl.css 136 B
build/styles/block-library/comment-author-avatar/editor-rtl.min.css 124 B
build/styles/block-library/comment-author-avatar/editor.css 136 B
build/styles/block-library/comment-author-avatar/editor.min.css 124 B
build/styles/block-library/comment-author-name/style-rtl.css 79 B
build/styles/block-library/comment-author-name/style-rtl.min.css 72 B
build/styles/block-library/comment-author-name/style.css 79 B
build/styles/block-library/comment-author-name/style.min.css 72 B
build/styles/block-library/comment-content/style-rtl.css 137 B
build/styles/block-library/comment-content/style-rtl.min.css 120 B
build/styles/block-library/comment-content/style.css 137 B
build/styles/block-library/comment-content/style.min.css 120 B
build/styles/block-library/comment-date/style-rtl.css 72 B
build/styles/block-library/comment-date/style-rtl.min.css 65 B
build/styles/block-library/comment-date/style.css 72 B
build/styles/block-library/comment-date/style.min.css 65 B
build/styles/block-library/comment-edit-link/style-rtl.css 77 B
build/styles/block-library/comment-edit-link/style-rtl.min.css 70 B
build/styles/block-library/comment-edit-link/style.css 77 B
build/styles/block-library/comment-edit-link/style.min.css 70 B
build/styles/block-library/comment-reply-link/style-rtl.css 78 B
build/styles/block-library/comment-reply-link/style-rtl.min.css 71 B
build/styles/block-library/comment-reply-link/style.css 78 B
build/styles/block-library/comment-reply-link/style.min.css 71 B
build/styles/block-library/comment-template/style-rtl.css 213 B
build/styles/block-library/comment-template/style-rtl.min.css 191 B
build/styles/block-library/comment-template/style.css 213 B
build/styles/block-library/comment-template/style.min.css 191 B
build/styles/block-library/comments-pagination-numbers/editor-rtl.css 135 B
build/styles/block-library/comments-pagination-numbers/editor-rtl.min.css 122 B
build/styles/block-library/comments-pagination-numbers/editor.css 144 B
build/styles/block-library/comments-pagination-numbers/editor.min.css 121 B
build/styles/block-library/comments-pagination/editor-rtl.css 184 B
build/styles/block-library/comments-pagination/editor-rtl.min.css 168 B
build/styles/block-library/comments-pagination/editor.css 184 B
build/styles/block-library/comments-pagination/editor.min.css 168 B
build/styles/block-library/comments-pagination/style-rtl.css 224 B
build/styles/block-library/comments-pagination/style-rtl.min.css 201 B
build/styles/block-library/comments-pagination/style.css 236 B
build/styles/block-library/comments-pagination/style.min.css 201 B
build/styles/block-library/comments-title/editor-rtl.css 83 B
build/styles/block-library/comments-title/editor-rtl.min.css 75 B
build/styles/block-library/comments-title/editor.css 83 B
build/styles/block-library/comments-title/editor.min.css 75 B
build/styles/block-library/comments/editor-rtl.css 968 B
build/styles/block-library/comments/editor-rtl.min.css 842 B
build/styles/block-library/comments/editor.css 968 B
build/styles/block-library/comments/editor.min.css 842 B
build/styles/block-library/comments/style-rtl.css 754 B
build/styles/block-library/comments/style-rtl.min.css 637 B
build/styles/block-library/comments/style.css 752 B
build/styles/block-library/comments/style.min.css 637 B
build/styles/block-library/common-rtl.css 2.48 kB
build/styles/block-library/common-rtl.min.css 1.12 kB
build/styles/block-library/common.css 2.5 kB
build/styles/block-library/common.min.css 1.12 kB
build/styles/block-library/cover/editor-rtl.css 1.05 kB
build/styles/block-library/cover/editor-rtl.min.css 631 B
build/styles/block-library/cover/editor.css 1.05 kB
build/styles/block-library/cover/editor.min.css 631 B
build/styles/block-library/cover/style-rtl.css 2.5 kB
build/styles/block-library/cover/style-rtl.min.css 1.82 kB
build/styles/block-library/cover/style.css 2.51 kB
build/styles/block-library/cover/style.min.css 1.81 kB
build/styles/block-library/details/editor-rtl.css 72 B
build/styles/block-library/details/editor-rtl.min.css 65 B
build/styles/block-library/details/editor.css 72 B
build/styles/block-library/details/editor.min.css 65 B
build/styles/block-library/details/style-rtl.css 97 B
build/styles/block-library/details/style-rtl.min.css 86 B
build/styles/block-library/details/style.css 97 B
build/styles/block-library/details/style.min.css 86 B
build/styles/block-library/editor-elements-rtl.css 117 B
build/styles/block-library/editor-elements-rtl.min.css 75 B
build/styles/block-library/editor-elements.css 117 B
build/styles/block-library/editor-elements.min.css 75 B
build/styles/block-library/editor-rtl.css 12.5 kB
build/styles/block-library/editor-rtl.min.css 10.3 kB
build/styles/block-library/editor.css 12.5 kB
build/styles/block-library/editor.min.css 10.3 kB
build/styles/block-library/elements-rtl.css 84 B
build/styles/block-library/elements-rtl.min.css 54 B
build/styles/block-library/elements.css 84 B
build/styles/block-library/elements.min.css 54 B
build/styles/block-library/embed/editor-rtl.css 391 B
build/styles/block-library/embed/editor-rtl.min.css 331 B
build/styles/block-library/embed/editor.css 390 B
build/styles/block-library/embed/editor.min.css 331 B
build/styles/block-library/embed/style-rtl.css 1.29 kB
build/styles/block-library/embed/style-rtl.min.css 448 B
build/styles/block-library/embed/style.css 1.29 kB
build/styles/block-library/embed/style.min.css 448 B
build/styles/block-library/embed/theme-rtl.css 967 B
build/styles/block-library/embed/theme-rtl.min.css 133 B
build/styles/block-library/embed/theme.css 967 B
build/styles/block-library/embed/theme.min.css 133 B
build/styles/block-library/file/editor-rtl.css 352 B
build/styles/block-library/file/editor-rtl.min.css 324 B
build/styles/block-library/file/editor.css 353 B
build/styles/block-library/file/editor.min.css 324 B
build/styles/block-library/file/style-rtl.css 318 B
build/styles/block-library/file/style-rtl.min.css 278 B
build/styles/block-library/file/style.css 331 B
build/styles/block-library/file/style.min.css 278 B
build/styles/block-library/footnotes/style-rtl.css 220 B
build/styles/block-library/footnotes/style-rtl.min.css 198 B
build/styles/block-library/footnotes/style.css 219 B
build/styles/block-library/footnotes/style.min.css 197 B
build/styles/block-library/form-input/editor-rtl.css 286 B
build/styles/block-library/form-input/editor-rtl.min.css 265 B
build/styles/block-library/form-input/editor.css 285 B
build/styles/block-library/form-input/editor.min.css 264 B
build/styles/block-library/form-input/style-rtl.css 467 B
build/styles/block-library/form-input/style-rtl.min.css 366 B
build/styles/block-library/form-input/style.css 467 B
build/styles/block-library/form-input/style.min.css 366 B
build/styles/block-library/form-submission-notification/editor-rtl.css 368 B
build/styles/block-library/form-submission-notification/editor-rtl.min.css 344 B
build/styles/block-library/form-submission-notification/editor.css 368 B
build/styles/block-library/form-submission-notification/editor.min.css 341 B
build/styles/block-library/form-submit-button/style-rtl.css 77 B
build/styles/block-library/form-submit-button/style-rtl.min.css 69 B
build/styles/block-library/form-submit-button/style.css 77 B
build/styles/block-library/form-submit-button/style.min.css 69 B
build/styles/block-library/freeform/editor-rtl.css 1.12 kB
build/styles/block-library/freeform/editor-rtl.min.css 288 B
build/styles/block-library/freeform/editor.css 1.12 kB
build/styles/block-library/freeform/editor.min.css 288 B
build/styles/block-library/gallery/editor-rtl.css 1.52 kB
build/styles/block-library/gallery/editor-rtl.min.css 615 B
build/styles/block-library/gallery/editor.css 1.52 kB
build/styles/block-library/gallery/editor.min.css 616 B
build/styles/block-library/gallery/style-rtl.css 2.84 kB
build/styles/block-library/gallery/style-rtl.min.css 1.84 kB
build/styles/block-library/gallery/style.css 2.84 kB
build/styles/block-library/gallery/style.min.css 1.84 kB
build/styles/block-library/gallery/theme-rtl.css 941 B
build/styles/block-library/gallery/theme-rtl.min.css 108 B
build/styles/block-library/gallery/theme.css 941 B
build/styles/block-library/gallery/theme.min.css 108 B
build/styles/block-library/group/editor-rtl.css 772 B
build/styles/block-library/group/editor-rtl.min.css 335 B
build/styles/block-library/group/editor.css 772 B
build/styles/block-library/group/editor.min.css 335 B
build/styles/block-library/group/style-rtl.css 120 B
build/styles/block-library/group/style-rtl.min.css 103 B
build/styles/block-library/group/style.css 120 B
build/styles/block-library/group/style.min.css 103 B
build/styles/block-library/group/theme-rtl.css 468 B
build/styles/block-library/group/theme-rtl.min.css 79 B
build/styles/block-library/group/theme.css 468 B
build/styles/block-library/group/theme.min.css 79 B
build/styles/block-library/heading/style-rtl.css 604 B
build/styles/block-library/heading/style-rtl.min.css 205 B
build/styles/block-library/heading/style.css 604 B
build/styles/block-library/heading/style.min.css 205 B
build/styles/block-library/html/editor-rtl.css 1.29 kB
build/styles/block-library/html/editor-rtl.min.css 464 B
build/styles/block-library/html/editor.css 1.3 kB
build/styles/block-library/html/editor.min.css 464 B
build/styles/block-library/icon/editor-rtl.css 776 B
build/styles/block-library/icon/editor-rtl.min.css 377 B
build/styles/block-library/icon/editor.css 776 B
build/styles/block-library/icon/editor.min.css 377 B
build/styles/block-library/icon/style-rtl.css 218 B
build/styles/block-library/icon/style-rtl.min.css 154 B
build/styles/block-library/icon/style.css 218 B
build/styles/block-library/icon/style.min.css 154 B
build/styles/block-library/image/editor-rtl.css 1.64 kB
build/styles/block-library/image/editor-rtl.min.css 782 B
build/styles/block-library/image/editor.css 1.64 kB
build/styles/block-library/image/editor.min.css 780 B
build/styles/block-library/image/style-rtl.css 2.92 kB
build/styles/block-library/image/style-rtl.min.css 1.86 kB
build/styles/block-library/image/style.css 2.92 kB
build/styles/block-library/image/style.min.css 1.85 kB
build/styles/block-library/image/theme-rtl.css 971 B
build/styles/block-library/image/theme-rtl.min.css 137 B
build/styles/block-library/image/theme.css 971 B
build/styles/block-library/image/theme.min.css 137 B
build/styles/block-library/latest-comments/style-rtl.css 392 B
build/styles/block-library/latest-comments/style-rtl.min.css 352 B
build/styles/block-library/latest-comments/style.css 390 B
build/styles/block-library/latest-comments/style.min.css 352 B
build/styles/block-library/latest-posts/editor-rtl.css 154 B
build/styles/block-library/latest-posts/editor-rtl.min.css 139 B
build/styles/block-library/latest-posts/editor.css 153 B
build/styles/block-library/latest-posts/editor.min.css 138 B
build/styles/block-library/latest-posts/style-rtl.css 1.36 kB
build/styles/block-library/latest-posts/style-rtl.min.css 520 B
build/styles/block-library/latest-posts/style.css 1.37 kB
build/styles/block-library/latest-posts/style.min.css 520 B
build/styles/block-library/list/style-rtl.css 498 B
build/styles/block-library/list/style-rtl.min.css 107 B
build/styles/block-library/list/style.css 498 B
build/styles/block-library/list/style.min.css 107 B
build/styles/block-library/loginout/style-rtl.css 68 B
build/styles/block-library/loginout/style-rtl.min.css 61 B
build/styles/block-library/loginout/style.css 68 B
build/styles/block-library/loginout/style.min.css 61 B
build/styles/block-library/math/editor-rtl.css 491 B
build/styles/block-library/math/editor-rtl.min.css 105 B
build/styles/block-library/math/editor.css 502 B
build/styles/block-library/math/editor.min.css 105 B
build/styles/block-library/math/style-rtl.css 70 B
build/styles/block-library/math/style-rtl.min.css 61 B
build/styles/block-library/math/style.css 70 B
build/styles/block-library/math/style.min.css 61 B
build/styles/block-library/media-text/editor-rtl.css 389 B
build/styles/block-library/media-text/editor-rtl.min.css 321 B
build/styles/block-library/media-text/editor.css 389 B
build/styles/block-library/media-text/editor.min.css 320 B
build/styles/block-library/media-text/style-rtl.css 873 B
build/styles/block-library/media-text/style-rtl.min.css 552 B
build/styles/block-library/media-text/style.css 901 B
build/styles/block-library/media-text/style.min.css 550 B
build/styles/block-library/more/editor-rtl.css 796 B
build/styles/block-library/more/editor-rtl.min.css 393 B
build/styles/block-library/more/editor.css 798 B
build/styles/block-library/more/editor.min.css 393 B
build/styles/block-library/navigation-link/editor-rtl.css 1.28 kB
build/styles/block-library/navigation-link/editor-rtl.min.css 710 B
build/styles/block-library/navigation-link/editor.css 1.27 kB
build/styles/block-library/navigation-link/editor.min.css 713 B
build/styles/block-library/navigation-link/style-rtl.css 579 B
build/styles/block-library/navigation-link/style-rtl.min.css 190 B
build/styles/block-library/navigation-link/style.css 579 B
build/styles/block-library/navigation-link/style.min.css 188 B
build/styles/block-library/navigation-overlay-close/style-rtl.css 260 B
build/styles/block-library/navigation-overlay-close/style-rtl.min.css 237 B
build/styles/block-library/navigation-overlay-close/style.css 260 B
build/styles/block-library/navigation-overlay-close/style.min.css 237 B
build/styles/block-library/navigation-submenu/editor-rtl.css 1.12 kB
build/styles/block-library/navigation-submenu/editor-rtl.min.css 295 B
build/styles/block-library/navigation-submenu/editor.css 1.12 kB
build/styles/block-library/navigation-submenu/editor.min.css 294 B
build/styles/block-library/navigation/editor-rtl.css 3.28 kB
build/styles/block-library/navigation/editor-rtl.min.css 2.28 kB
build/styles/block-library/navigation/editor.css 3.29 kB
build/styles/block-library/navigation/editor.min.css 2.28 kB
build/styles/block-library/navigation/style-rtl.css 3.59 kB
build/styles/block-library/navigation/style-rtl.min.css 2.52 kB
build/styles/block-library/navigation/style.css 3.59 kB
build/styles/block-library/navigation/style.min.css 2.5 kB
build/styles/block-library/nextpage/editor-rtl.css 799 B
build/styles/block-library/nextpage/editor-rtl.min.css 392 B
build/styles/block-library/nextpage/editor.css 800 B
build/styles/block-library/nextpage/editor.min.css 392 B
build/styles/block-library/page-list/editor-rtl.css 1.18 kB
build/styles/block-library/page-list/editor-rtl.min.css 356 B
build/styles/block-library/page-list/editor.css 1.18 kB
build/styles/block-library/page-list/editor.min.css 356 B
build/styles/block-library/page-list/style-rtl.css 207 B
build/styles/block-library/page-list/style-rtl.min.css 192 B
build/styles/block-library/page-list/style.css 207 B
build/styles/block-library/page-list/style.min.css 192 B
build/styles/block-library/paragraph/editor-rtl.css 315 B
build/styles/block-library/paragraph/editor-rtl.min.css 292 B
build/styles/block-library/paragraph/editor.css 314 B
build/styles/block-library/paragraph/editor.min.css 292 B
build/styles/block-library/paragraph/style-rtl.css 746 B
build/styles/block-library/paragraph/style-rtl.min.css 341 B
build/styles/block-library/paragraph/style.css 752 B
build/styles/block-library/paragraph/style.min.css 340 B
build/styles/block-library/playlist-track/style-rtl.css 453 B
build/styles/block-library/playlist-track/style-rtl.min.css 420 B
build/styles/block-library/playlist-track/style.css 453 B
build/styles/block-library/playlist-track/style.min.css 420 B
build/styles/block-library/playlist/editor-rtl.css 120 B
build/styles/block-library/playlist/editor-rtl.min.css 112 B
build/styles/block-library/playlist/editor.css 120 B
build/styles/block-library/playlist/editor.min.css 112 B
build/styles/block-library/playlist/style-rtl.css 1.52 kB
build/styles/block-library/playlist/style-rtl.min.css 1.42 kB
build/styles/block-library/playlist/style.css 1.52 kB
build/styles/block-library/playlist/style.min.css 1.42 kB
build/styles/block-library/post-author-biography/style-rtl.css 96 B
build/styles/block-library/post-author-biography/style-rtl.min.css 86 B
build/styles/block-library/post-author-biography/style.css 96 B
build/styles/block-library/post-author-biography/style.min.css 86 B
build/styles/block-library/post-author-name/style-rtl.css 76 B
build/styles/block-library/post-author-name/style-rtl.min.css 69 B
build/styles/block-library/post-author-name/style.css 76 B
build/styles/block-library/post-author-name/style.min.css 69 B
build/styles/block-library/post-author/editor-rtl.css 490 B
build/styles/block-library/post-author/editor-rtl.min.css 104 B
build/styles/block-library/post-author/editor.css 490 B
build/styles/block-library/post-author/editor.min.css 104 B
build/styles/block-library/post-author/style-rtl.css 213 B
build/styles/block-library/post-author/style-rtl.min.css 188 B
build/styles/block-library/post-author/style.css 214 B
build/styles/block-library/post-author/style.min.css 189 B
build/styles/block-library/post-comments-count/style-rtl.css 79 B
build/styles/block-library/post-comments-count/style-rtl.min.css 72 B
build/styles/block-library/post-comments-count/style.css 79 B
build/styles/block-library/post-comments-count/style.min.css 72 B
build/styles/block-library/post-comments-form/editor-rtl.css 104 B
build/styles/block-library/post-comments-form/editor-rtl.min.css 96 B
build/styles/block-library/post-comments-form/editor.css 104 B
build/styles/block-library/post-comments-form/editor.min.css 96 B
build/styles/block-library/post-comments-form/style-rtl.css 585 B
build/styles/block-library/post-comments-form/style-rtl.min.css 525 B
build/styles/block-library/post-comments-form/style.css 584 B
build/styles/block-library/post-comments-form/style.min.css 525 B
build/styles/block-library/post-comments-link/style-rtl.css 78 B
build/styles/block-library/post-comments-link/style-rtl.min.css 71 B
build/styles/block-library/post-comments-link/style.css 78 B
build/styles/block-library/post-comments-link/style.min.css 71 B
build/styles/block-library/post-content/style-rtl.css 68 B
build/styles/block-library/post-content/style-rtl.min.css 61 B
build/styles/block-library/post-content/style.css 68 B
build/styles/block-library/post-content/style.min.css 61 B
build/styles/block-library/post-date/style-rtl.css 69 B
build/styles/block-library/post-date/style-rtl.min.css 62 B
build/styles/block-library/post-date/style.css 69 B
build/styles/block-library/post-date/style.min.css 62 B
build/styles/block-library/post-excerpt/editor-rtl.css 78 B
build/styles/block-library/post-excerpt/editor-rtl.min.css 71 B
build/styles/block-library/post-excerpt/editor.css 78 B
build/styles/block-library/post-excerpt/editor.min.css 71 B
build/styles/block-library/post-excerpt/style-rtl.css 171 B
build/styles/block-library/post-excerpt/style-rtl.min.css 155 B
build/styles/block-library/post-excerpt/style.css 171 B
build/styles/block-library/post-excerpt/style.min.css 155 B
build/styles/block-library/post-featured-image/editor-rtl.css 1.14 kB
build/styles/block-library/post-featured-image/editor-rtl.min.css 719 B
build/styles/block-library/post-featured-image/editor.css 1.14 kB
build/styles/block-library/post-featured-image/editor.min.css 717 B
build/styles/block-library/post-featured-image/style-rtl.css 392 B
build/styles/block-library/post-featured-image/style-rtl.min.css 347 B
build/styles/block-library/post-featured-image/style.css 392 B
build/styles/block-library/post-featured-image/style.min.css 347 B
build/styles/block-library/post-navigation-link/style-rtl.css 234 B
build/styles/block-library/post-navigation-link/style-rtl.min.css 215 B
build/styles/block-library/post-navigation-link/style.css 245 B
build/styles/block-library/post-navigation-link/style.min.css 214 B
build/styles/block-library/post-template/style-rtl.css 1.27 kB
build/styles/block-library/post-template/style-rtl.min.css 441 B
build/styles/block-library/post-template/style.css 1.27 kB
build/styles/block-library/post-template/style.min.css 441 B
build/styles/block-library/post-terms/style-rtl.css 108 B
build/styles/block-library/post-terms/style-rtl.min.css 96 B
build/styles/block-library/post-terms/style.css 108 B
build/styles/block-library/post-terms/style.min.css 96 B
build/styles/block-library/post-time-to-read/style-rtl.css 77 B
build/styles/block-library/post-time-to-read/style-rtl.min.css 70 B
build/styles/block-library/post-time-to-read/style.css 77 B
build/styles/block-library/post-time-to-read/style.min.css 70 B
build/styles/block-library/post-title/style-rtl.css 175 B
build/styles/block-library/post-title/style-rtl.min.css 162 B
build/styles/block-library/post-title/style.css 175 B
build/styles/block-library/post-title/style.min.css 162 B
build/styles/block-library/preformatted/style-rtl.css 511 B
build/styles/block-library/preformatted/style-rtl.min.css 125 B
build/styles/block-library/preformatted/style.css 511 B
build/styles/block-library/preformatted/style.min.css 125 B
build/styles/block-library/pullquote/editor-rtl.css 146 B
build/styles/block-library/pullquote/editor-rtl.min.css 133 B
build/styles/block-library/pullquote/editor.css 146 B
build/styles/block-library/pullquote/editor.min.css 133 B
build/styles/block-library/pullquote/style-rtl.css 765 B
build/styles/block-library/pullquote/style-rtl.min.css 365 B
build/styles/block-library/pullquote/style.css 764 B
build/styles/block-library/pullquote/style.min.css 365 B
build/styles/block-library/pullquote/theme-rtl.css 195 B
build/styles/block-library/pullquote/theme-rtl.min.css 176 B
build/styles/block-library/pullquote/theme.css 195 B
build/styles/block-library/pullquote/theme.min.css 176 B
build/styles/block-library/query-pagination-numbers/editor-rtl.css 134 B
build/styles/block-library/query-pagination-numbers/editor-rtl.min.css 121 B
build/styles/block-library/query-pagination-numbers/editor.css 144 B
build/styles/block-library/query-pagination-numbers/editor.min.css 118 B
build/styles/block-library/query-pagination/editor-rtl.css 168 B
build/styles/block-library/query-pagination/editor-rtl.min.css 154 B
build/styles/block-library/query-pagination/editor.css 168 B
build/styles/block-library/query-pagination/editor.min.css 154 B
build/styles/block-library/query-pagination/style-rtl.css 254 B
build/styles/block-library/query-pagination/style-rtl.min.css 237 B
build/styles/block-library/query-pagination/style.css 265 B
build/styles/block-library/query-pagination/style.min.css 237 B
build/styles/block-library/query-title/style-rtl.css 71 B
build/styles/block-library/query-title/style-rtl.min.css 64 B
build/styles/block-library/query-title/style.css 71 B
build/styles/block-library/query-title/style.min.css 64 B
build/styles/block-library/query-total/style-rtl.css 71 B
build/styles/block-library/query-total/style-rtl.min.css 64 B
build/styles/block-library/query-total/style.css 71 B
build/styles/block-library/query-total/style.min.css 64 B
build/styles/block-library/query/editor-rtl.css 1.28 kB
build/styles/block-library/query/editor-rtl.min.css 438 B
build/styles/block-library/query/editor.css 1.28 kB
build/styles/block-library/query/editor.min.css 438 B
build/styles/block-library/quote/style-rtl.css 255 B
build/styles/block-library/quote/style-rtl.min.css 238 B
build/styles/block-library/quote/style.css 256 B
build/styles/block-library/quote/style.min.css 238 B
build/styles/block-library/quote/theme-rtl.css 253 B
build/styles/block-library/quote/theme-rtl.min.css 233 B
build/styles/block-library/quote/theme.css 254 B
build/styles/block-library/quote/theme.min.css 236 B
build/styles/block-library/read-more/style-rtl.css 146 B
build/styles/block-library/read-more/style-rtl.min.css 131 B
build/styles/block-library/read-more/style.css 146 B
build/styles/block-library/read-more/style.min.css 131 B
build/styles/block-library/reset-rtl.css 936 B
build/styles/block-library/reset-rtl.min.css 467 B
build/styles/block-library/reset.css 936 B
build/styles/block-library/reset.min.css 467 B
build/styles/block-library/rss/editor-rtl.css 144 B
build/styles/block-library/rss/editor-rtl.min.css 126 B
build/styles/block-library/rss/editor.css 144 B
build/styles/block-library/rss/editor.min.css 126 B
build/styles/block-library/rss/style-rtl.css 1.11 kB
build/styles/block-library/rss/style-rtl.min.css 284 B
build/styles/block-library/rss/style.css 1.12 kB
build/styles/block-library/rss/style.min.css 283 B
build/styles/block-library/search/editor-rtl.css 217 B
build/styles/block-library/search/editor-rtl.min.css 199 B
build/styles/block-library/search/editor.css 217 B
build/styles/block-library/search/editor.min.css 199 B
build/styles/block-library/search/style-rtl.css 1.1 kB
build/styles/block-library/search/style-rtl.min.css 665 B
build/styles/block-library/search/style.css 1.1 kB
build/styles/block-library/search/style.min.css 666 B
build/styles/block-library/search/theme-rtl.css 130 B
build/styles/block-library/search/theme-rtl.min.css 113 B
build/styles/block-library/search/theme.css 130 B
build/styles/block-library/search/theme.min.css 113 B
build/styles/block-library/separator/editor-rtl.css 106 B
build/styles/block-library/separator/editor-rtl.min.css 100 B
build/styles/block-library/separator/editor.css 106 B
build/styles/block-library/separator/editor.min.css 100 B
build/styles/block-library/separator/style-rtl.css 284 B
build/styles/block-library/separator/style-rtl.min.css 248 B
build/styles/block-library/separator/style.css 297 B
build/styles/block-library/separator/style.min.css 248 B
build/styles/block-library/separator/theme-rtl.css 226 B
build/styles/block-library/separator/theme-rtl.min.css 195 B
build/styles/block-library/separator/theme.css 226 B
build/styles/block-library/separator/theme.min.css 195 B
build/styles/block-library/shortcode/editor-rtl.css 1.1 kB
build/styles/block-library/shortcode/editor-rtl.min.css 286 B
build/styles/block-library/shortcode/editor.css 1.1 kB
build/styles/block-library/shortcode/editor.min.css 286 B
build/styles/block-library/site-logo/editor-rtl.css 1.12 kB
build/styles/block-library/site-logo/editor-rtl.min.css 696 B
build/styles/block-library/site-logo/editor.css 1.12 kB
build/styles/block-library/site-logo/editor.min.css 692 B
build/styles/block-library/site-logo/style-rtl.css 239 B
build/styles/block-library/site-logo/style-rtl.min.css 218 B
build/styles/block-library/site-logo/style.css 238 B
build/styles/block-library/site-logo/style.min.css 218 B
build/styles/block-library/site-tagline/editor-rtl.css 94 B
build/styles/block-library/site-tagline/editor-rtl.min.css 87 B
build/styles/block-library/site-tagline/editor.css 94 B
build/styles/block-library/site-tagline/editor.min.css 87 B
build/styles/block-library/site-tagline/style-rtl.css 72 B
build/styles/block-library/site-tagline/style-rtl.min.css 65 B
build/styles/block-library/site-tagline/style.css 72 B
build/styles/block-library/site-tagline/style.min.css 65 B
build/styles/block-library/site-title/editor-rtl.css 93 B
build/styles/block-library/site-title/editor-rtl.min.css 85 B
build/styles/block-library/site-title/editor.css 93 B
build/styles/block-library/site-title/editor.min.css 85 B
build/styles/block-library/site-title/style-rtl.css 153 B
build/styles/block-library/site-title/style-rtl.min.css 143 B
build/styles/block-library/site-title/style.css 153 B
build/styles/block-library/site-title/style.min.css 143 B
build/styles/block-library/social-link/editor-rtl.css 346 B
build/styles/block-library/social-link/editor-rtl.min.css 314 B
build/styles/block-library/social-link/editor.css 348 B
build/styles/block-library/social-link/editor.min.css 314 B
build/styles/block-library/social-links/editor-rtl.css 737 B
build/styles/block-library/social-links/editor-rtl.min.css 339 B
build/styles/block-library/social-links/editor.css 738 B
build/styles/block-library/social-links/editor.min.css 338 B
build/styles/block-library/social-links/style-rtl.css 1.57 kB
build/styles/block-library/social-links/style-rtl.min.css 1.51 kB
build/styles/block-library/social-links/style.css 1.57 kB
build/styles/block-library/social-links/style.min.css 1.51 kB
build/styles/block-library/spacer/editor-rtl.css 774 B
build/styles/block-library/spacer/editor-rtl.min.css 346 B
build/styles/block-library/spacer/editor.css 774 B
build/styles/block-library/spacer/editor.min.css 346 B
build/styles/block-library/spacer/style-rtl.css 55 B
build/styles/block-library/spacer/style-rtl.min.css 48 B
build/styles/block-library/spacer/style.css 55 B
build/styles/block-library/spacer/style.min.css 48 B
build/styles/block-library/style-rtl.css 21.5 kB
build/styles/block-library/style-rtl.min.css 18 kB
build/styles/block-library/style.css 21.6 kB
build/styles/block-library/style.min.css 18 kB
build/styles/block-library/tab-list/editor-rtl.css 107 B
build/styles/block-library/tab-list/editor-rtl.min.css 97 B
build/styles/block-library/tab-list/editor.css 107 B
build/styles/block-library/tab-list/editor.min.css 97 B
build/styles/block-library/tab-panel/style-rtl.css 238 B
build/styles/block-library/tab-panel/style-rtl.min.css 215 B
build/styles/block-library/tab-panel/style.css 238 B
build/styles/block-library/tab-panel/style.min.css 215 B
build/styles/block-library/tab-panels/style-rtl.css 76 B
build/styles/block-library/tab-panels/style-rtl.min.css 65 B
build/styles/block-library/tab-panels/style.css 76 B
build/styles/block-library/tab-panels/style.min.css 65 B
build/styles/block-library/tab/editor-rtl.css 160 B
build/styles/block-library/tab/editor-rtl.min.css 148 B
build/styles/block-library/tab/editor.css 160 B
build/styles/block-library/tab/editor.min.css 148 B
build/styles/block-library/tab/style-rtl.css 397 B
build/styles/block-library/tab/style-rtl.min.css 352 B
build/styles/block-library/tab/style.css 398 B
build/styles/block-library/tab/style.min.css 356 B
build/styles/block-library/table-of-contents/style-rtl.css 89 B
build/styles/block-library/table-of-contents/style-rtl.min.css 83 B
build/styles/block-library/table-of-contents/style.css 89 B
build/styles/block-library/table-of-contents/style.min.css 83 B
build/styles/block-library/table/editor-rtl.css 1.25 kB
build/styles/block-library/table/editor-rtl.min.css 394 B
build/styles/block-library/table/editor.css 1.25 kB
build/styles/block-library/table/editor.min.css 394 B
build/styles/block-library/table/style-rtl.css 1.06 kB
build/styles/block-library/table/style-rtl.min.css 641 B
build/styles/block-library/table/style.css 1.06 kB
build/styles/block-library/table/style.min.css 640 B
build/styles/block-library/table/theme-rtl.css 985 B
build/styles/block-library/table/theme-rtl.min.css 152 B
build/styles/block-library/table/theme.css 985 B
build/styles/block-library/table/theme.min.css 152 B
build/styles/block-library/tabs/style-rtl.css 64 B
build/styles/block-library/tabs/style-rtl.min.css 57 B
build/styles/block-library/tabs/style.css 64 B
build/styles/block-library/tabs/style.min.css 57 B
build/styles/block-library/tag-cloud/style-rtl.css 283 B
build/styles/block-library/tag-cloud/style-rtl.min.css 248 B
build/styles/block-library/tag-cloud/style.css 283 B
build/styles/block-library/tag-cloud/style.min.css 248 B
build/styles/block-library/template-part/editor-rtl.css 1.2 kB
build/styles/block-library/template-part/editor-rtl.min.css 368 B
build/styles/block-library/template-part/editor.css 1.2 kB
build/styles/block-library/template-part/editor.min.css 368 B
build/styles/block-library/template-part/theme-rtl.css 492 B
build/styles/block-library/template-part/theme-rtl.min.css 113 B
build/styles/block-library/template-part/theme.css 492 B
build/styles/block-library/template-part/theme.min.css 113 B
build/styles/block-library/term-count/style-rtl.css 70 B
build/styles/block-library/term-count/style-rtl.min.css 63 B
build/styles/block-library/term-count/style.css 70 B
build/styles/block-library/term-count/style.min.css 63 B
build/styles/block-library/term-description/style-rtl.css 138 B
build/styles/block-library/term-description/style-rtl.min.css 126 B
build/styles/block-library/term-description/style.css 138 B
build/styles/block-library/term-description/style.min.css 126 B
build/styles/block-library/term-name/style-rtl.css 69 B
build/styles/block-library/term-name/style-rtl.min.css 62 B
build/styles/block-library/term-name/style.css 69 B
build/styles/block-library/term-name/style.min.css 62 B
build/styles/block-library/term-template/editor-rtl.css 267 B
build/styles/block-library/term-template/editor-rtl.min.css 225 B
build/styles/block-library/term-template/editor.css 267 B
build/styles/block-library/term-template/editor.min.css 225 B
build/styles/block-library/term-template/style-rtl.css 124 B
build/styles/block-library/term-template/style-rtl.min.css 114 B
build/styles/block-library/term-template/style.css 124 B
build/styles/block-library/term-template/style.min.css 114 B
build/styles/block-library/text-columns/editor-rtl.css 481 B
build/styles/block-library/text-columns/editor-rtl.min.css 95 B
build/styles/block-library/text-columns/editor.css 481 B
build/styles/block-library/text-columns/editor.min.css 95 B
build/styles/block-library/text-columns/style-rtl.css 177 B
build/styles/block-library/text-columns/style-rtl.min.css 165 B
build/styles/block-library/text-columns/style.css 177 B
build/styles/block-library/text-columns/style.min.css 165 B
build/styles/block-library/theme-rtl.css 1.59 kB
build/styles/block-library/theme-rtl.min.css 715 B
build/styles/block-library/theme.css 1.6 kB
build/styles/block-library/theme.min.css 719 B
build/styles/block-library/verse/style-rtl.css 155 B
build/styles/block-library/verse/style-rtl.min.css 137 B
build/styles/block-library/verse/style.css 155 B
build/styles/block-library/verse/style.min.css 137 B
build/styles/block-library/video/editor-rtl.css 839 B
build/styles/block-library/video/editor-rtl.min.css 428 B
build/styles/block-library/video/editor.css 840 B
build/styles/block-library/video/editor.min.css 428 B
build/styles/block-library/video/style-rtl.css 1.02 kB
build/styles/block-library/video/style-rtl.min.css 202 B
build/styles/block-library/video/style.css 1.02 kB
build/styles/block-library/video/style.min.css 202 B
build/styles/block-library/video/theme-rtl.css 967 B
build/styles/block-library/video/theme-rtl.min.css 134 B
build/styles/block-library/video/theme.css 967 B
build/styles/block-library/video/theme.min.css 134 B
build/styles/commands/style-rtl.css 2.07 kB
build/styles/commands/style-rtl.min.css 1.17 kB
build/styles/commands/style.css 2.06 kB
build/styles/commands/style.min.css 1.17 kB
build/styles/components/style-rtl.css 17.5 kB
build/styles/components/style-rtl.min.css 14.3 kB
build/styles/components/style.css 17.6 kB
build/styles/components/style.min.css 14.3 kB
build/styles/customize-widgets/style-rtl.css 2.35 kB
build/styles/customize-widgets/style-rtl.min.css 1.44 kB
build/styles/customize-widgets/style.css 2.35 kB
build/styles/customize-widgets/style.min.css 1.44 kB
build/styles/edit-post/classic-rtl.css 1.29 kB
build/styles/edit-post/classic-rtl.min.css 425 B
build/styles/edit-post/classic.css 1.31 kB
build/styles/edit-post/classic.min.css 428 B
build/styles/edit-post/style-rtl.css 3.51 kB
build/styles/edit-post/style-rtl.min.css 2.21 kB
build/styles/edit-post/style.css 3.52 kB
build/styles/edit-post/style.min.css 2.21 kB
build/styles/edit-site/style-rtl.css 21.1 kB
build/styles/edit-site/style-rtl.min.css 17.2 kB
build/styles/edit-site/style.css 21.1 kB
build/styles/edit-site/style.min.css 17.2 kB
build/styles/edit-widgets/style-rtl.css 4.85 kB
build/styles/edit-widgets/style-rtl.min.css 3.52 kB
build/styles/edit-widgets/style.css 4.85 kB
build/styles/edit-widgets/style.min.css 3.52 kB
build/styles/editor/style-rtl.css 29.4 kB
build/styles/editor/style-rtl.min.css 24.8 kB
build/styles/editor/style.css 29.4 kB
build/styles/editor/style.min.css 24.8 kB
build/styles/format-library/style-rtl.css 735 B
build/styles/format-library/style-rtl.min.css 326 B
build/styles/format-library/style.css 746 B
build/styles/format-library/style.min.css 326 B
build/styles/list-reusable-blocks/style-rtl.css 1.07 kB
build/styles/list-reusable-blocks/style-rtl.min.css 250 B
build/styles/list-reusable-blocks/style.css 1.07 kB
build/styles/list-reusable-blocks/style.min.css 249 B
build/styles/media-utils/style-rtl.css 2.08 kB
build/styles/media-utils/style-rtl.min.css 1.17 kB
build/styles/media-utils/style.css 2.08 kB
build/styles/media-utils/style.min.css 1.17 kB
build/styles/nux/style-rtl.css 1.48 kB
build/styles/nux/style-rtl.min.css 622 B
build/styles/nux/style.css 1.5 kB
build/styles/nux/style.min.css 618 B
build/styles/patterns/style-rtl.css 1.46 kB
build/styles/patterns/style-rtl.min.css 611 B
build/styles/patterns/style.css 1.46 kB
build/styles/patterns/style.min.css 611 B
build/styles/preferences/style-rtl.css 1.26 kB
build/styles/preferences/style-rtl.min.css 415 B
build/styles/preferences/style.css 1.26 kB
build/styles/preferences/style.min.css 415 B
build/styles/reusable-blocks/style-rtl.css 1.11 kB
build/styles/reusable-blocks/style-rtl.min.css 275 B
build/styles/reusable-blocks/style.css 1.11 kB
build/styles/reusable-blocks/style.min.css 275 B
build/styles/widgets/style-rtl.css 2.05 kB
build/styles/widgets/style-rtl.min.css 1.16 kB
build/styles/widgets/style.css 2.06 kB
build/styles/widgets/style.min.css 1.16 kB

compressed-size-action

@adamsilverstein adamsilverstein changed the title WIP - Fields package: Add RichText field Fields package: Add RichText field May 14, 2026
adamsilverstein added a commit that referenced this pull request May 14, 2026
Per review feedback on #78242, replace the block-editor RichText
component with RichTextControl introduced in #75275. RichText is
intended for use inside blocks and pulls in editor state (selection
store, format toolbar wiring, etc.) that the note form does not need.
RichTextControl wraps useRichText directly and exposes the smaller
surface the note form actually uses, which mirrors the approach
DataForms takes for its rich-text field.

The form keeps the same allowed-formats list (bold, italic, link,
code), the same keyboard shortcuts (Cmd+B / Cmd+I / Cmd+K), and the
same empty-state submit guard. The Cmd+Enter / Escape handling moves
up to the form element because RichTextControl does not expose an
onKeyDown prop; the events still reach it via bubbling from the
contenteditable.

Note styles are rescoped to the form-level container (the input now
carries the .block-editor-rich-text-control class) and the explicit
VisuallyHidden label is replaced by RichTextControl's built-in
hideLabelFromVision option.

Refs #75275
Refs #73413
adamsilverstein added a commit that referenced this pull request May 14, 2026
Mock @wordpress/block-editor's privateApis and the editor lock-unlock
module so the test substitutes a lightweight RichTextControl for the
real one. The mock keeps the same data-testid the suite already uses
so the existing assertions about format allowlist and keyboard
handling continue to work unchanged.

Refs #75275
@adamsilverstein adamsilverstein added the [Type] Enhancement A suggestion for improvement. label May 14, 2026
@adamsilverstein adamsilverstein self-assigned this May 14, 2026
`FormatEdit` populates `keyboardShortcuts` and `inputEvents` Sets via
context, but `RichTextControl` never attached a `keydown` or `input`
listener to the contenteditable, so registered shortcuts (Cmd+B, Cmd+I,
Cmd+K, etc.) and native InputEvents (formatBold/formatItalic) never
fired. Cmd+K also bubbled past the control to open the WordPress
command palette because no shortcut consumed it.

Attach the existing `shortcuts` and `input-events` listeners while the
control is focused, mirroring the in-canvas `RichText` wiring. The
link format's `RichTextShortcut` now calls `preventDefault()` on
Cmd+K, which causes the command palette's global handler (which bails
on `defaultPrevented`) to skip opening.

Add unit tests covering shortcut dispatch on focus, no dispatch when
unfocused, and listener teardown on blur.
@westonruter

Copy link
Copy Markdown
Member

I don't have any experience with this codebase to really be able to review it authoritatively, but I think in general core needs to be using rich text in many more places than we currently are using it. See #73180 (comment).

@github-actions

github-actions Bot commented May 14, 2026

Copy link
Copy Markdown

Flaky tests detected in 55a4cfe.
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/25998302682
📝 Reported issues:

`RichTextControl` now invokes each format type's `__unstableInputRule`
on `input`/`compositionend` events, so e.g. typing `` `code` `` in a
notes field auto-applies `core/code`'s inline-code format the same way
it does in the canvas.

The block-editor's existing `input-rules.js` listener handles three
distinct concerns (block prefix transforms, block input transforms,
format input rules), and pulls in `@wordpress/blocks`, block-editor
store actions, and `onReplace`/`selectionChange` callbacks. None of
those apply to a standalone field control — so wire a focused handler
that only runs the format-rule reduce, mirroring the same branch
inline.

Also set `suppressContentEditableWarning` on the contenteditable so
React doesn't warn when `useRichText` writes value into the DOM
directly (matching in-canvas `RichText`).
`isVisible` controls whether a format's toolbar button is shown — it's
how a format hides its toolbar surface in contexts that don't have a
toolbar (e.g., the standalone `RichTextControl` used in DataForm
fields). It should not gate the link popover itself: the popover is
triggered by `Cmd+K` (or the toolbar button) and represents the link
editing UI, not a toolbar element.

Before this change, `RichTextControl` consumers that hid format
toolbars (`isVisible={false}`) could press `Cmd+K` on a selection and
nothing visible would happen — the shortcut fired, `addingLink`
flipped true, but `InlineLinkUI` was suppressed by the same flag that
hid the toolbar button.
@github-actions github-actions Bot added the [Package] Format library /packages/format-library label May 14, 2026
When a format type opens a popover from inside `RichTextControl` (the
inline link UI on Cmd+K, or any similar format-spawned UI), focus
moves out of the contenteditable to the popover's first focusable
element. That fired the textbox's onBlur, which flipped `isSelected`
to false, unmounted `FormatEdit`, and tore the popover down before it
ever rendered.

Defer the `isSelected = false` flip via a 0ms `setTimeout` so the new
focus target has a chance to land. If the active element is inside
`.components-popover`, leave the control selected — it's a format
popover keeping the user in this control's interaction scope.

Verified with a new unit test covering the popover-focus case in
addition to the existing focus/blur shortcut tests.
@adamsilverstein adamsilverstein requested a review from t-hamano May 15, 2026 14:30
adamsilverstein added a commit that referenced this pull request May 15, 2026
- Revert the format-library/link change: restoring the `isVisible &&`
  guard on `InlineLinkUI` here. Making the link popover appear inside
  RichTextControl is the upstream component's responsibility and
  belongs in #75275.

- AddNote: hoist the `!clientId` early return up to the parent so
  AddNoteInner only mounts once we have a clientId snapshot. This
  removes the two `@wordpress/no-unused-vars-before-return`
  suppressions around `useDispatch` calls and a now-unreachable
  inner guard.

- hooks.js: clarify in-place that the `blockClientId` snapshot
  parameter is a workaround for selection drift caused by
  RichTextControl focus, with a pointer to #75275 so the param can be
  removed once that lands.
@adamsilverstein

adamsilverstein commented May 15, 2026

Copy link
Copy Markdown
Member

While stacking #78242 (Notes rich-text input) on top of RichTextControl, I hit two papercuts that I think belong upstream here so other consumers don't trip over them. I had a temporary fix for one of these in #78242 but have now reverted it so it can land here instead.

1. InlineLinkUI is gated by isVisible. When a RichTextControl consumer hides the format toolbar surface (e.g., a DataForms-style field with isVisible={false} on the link button), Cmd+K fires and addingLink flips true, but the link popover never appears because packages/format-library/src/link/index.js renders InlineLinkUI only when isVisible && addingLink. isVisible is the right gate for the toolbar button, not the popover, which is the actual edit UI. A one-line change there (previous attempt) makes the link popover usable from RichTextControl.

2. Focusing the rich-text field shifts block-editor selection. When RichTextControl is used outside a block context (e.g., the Notes form in #78242, or DataForms fields), focusing the contenteditable seems to clear/move the canvas block selection in the block-editor selection store. In #78242 I had to work around this by snapshotting getSelectedBlockClientId() on mount in the parent so the form doesn't unmount mid-edit (and threading that snapshot through onCreate). If useRichText/RichTextControl can avoid touching the selection store when it's running standalone, those workarounds can come back out - I left a code pointer at #78242 in the relevant comment.

adamsilverstein added a commit that referenced this pull request May 15, 2026
The earlier eslint-disable cleanup hoisted the `!clientId` guard
from AddNoteInner up to the AddNote parent. That made the parent
re-check *live* block selection every render, so when focusing the
note form cleared the canvas selection the form unmounted mid-edit
— regressing the trunk-passing 'should move focus to add a new
note form' e2e test. Restore the snapshot + inner-guard structure;
the two eslint-disables are ugly but load-bearing.

Mark 'Cmd+K opens the inline link popover' as test.fixme: it
asserts the link popover renders inside a toolbar-less
RichTextControl, which depends on the format-library link-gate
relaxation that is intentionally being moved to the upstream
RichTextControl PR (#75275) rather than shipped here.
adamsilverstein added a commit that referenced this pull request May 16, 2026
The note form now uses RichTextControl, which does not reliably
take/hold focus in a standalone, toolbar-less context. This
regresses several trunk-passing e2e tests (focus-to-form, reply,
reopen-and-reply, keyboard nav, multiple notes, and collaboration
reply-sync) — all failing on toBeFocused()/reply-button timeouts
with the same root cause.

The fix belongs in the upstream RichTextControl PR (#75275), not
here. Mark the affected tests test.fixme with explicit comments so
the regression is visible to reviewers and the tests are re-enabled
when #75275 lands. This is a known, documented scope gap, not a
silent skip.
RichTextControl deliberately drops the block-editor selection
coupling that focuses the in-canvas RichText, so a standalone
consumer (e.g. a note form) has no way to place the caret in the
field when it opens — regressing focus-on-open behavior the old
RichText got for free.

Add an opt-in focusOnMount prop that focuses the contenteditable on
mount via useRefEffect (mirroring the existing eventListenersRef
pattern in this file). Off by default so DataForms and other
consumers are unaffected. Named focusOnMount rather than autoFocus
to match @wordpress/compose's useFocusOnMount and to avoid the
jsx-a11y/no-autofocus rule, since this is not the browser autofocus
attribute. Covered by unit tests for both the default-off and
opt-in cases.
adamsilverstein added a commit that referenced this pull request May 18, 2026
Per review feedback on #78242, replace the block-editor RichText
component with RichTextControl introduced in #75275. RichText is
intended for use inside blocks and pulls in editor state (selection
store, format toolbar wiring, etc.) that the note form does not need.
RichTextControl wraps useRichText directly and exposes the smaller
surface the note form actually uses, which mirrors the approach
DataForms takes for its rich-text field.

The form keeps the same allowed-formats list (bold, italic, link,
code), the same keyboard shortcuts (Cmd+B / Cmd+I / Cmd+K), and the
same empty-state submit guard. The Cmd+Enter / Escape handling moves
up to the form element because RichTextControl does not expose an
onKeyDown prop; the events still reach it via bubbling from the
contenteditable.

Note styles are rescoped to the form-level container (the input now
carries the .block-editor-rich-text-control class) and the explicit
VisuallyHidden label is replaced by RichTextControl's built-in
hideLabelFromVision option.

Refs #75275
Refs #73413
adamsilverstein added a commit that referenced this pull request May 18, 2026
Mock @wordpress/block-editor's privateApis and the editor lock-unlock
module so the test substitutes a lightweight RichTextControl for the
real one. The mock keeps the same data-testid the suite already uses
so the existing assertions about format allowlist and keyboard
handling continue to work unchanged.

Refs #75275
adamsilverstein added a commit that referenced this pull request May 18, 2026
- Revert the format-library/link change: restoring the `isVisible &&`
  guard on `InlineLinkUI` here. Making the link popover appear inside
  RichTextControl is the upstream component's responsibility and
  belongs in #75275.

- AddNote: hoist the `!clientId` early return up to the parent so
  AddNoteInner only mounts once we have a clientId snapshot. This
  removes the two `@wordpress/no-unused-vars-before-return`
  suppressions around `useDispatch` calls and a now-unreachable
  inner guard.

- hooks.js: clarify in-place that the `blockClientId` snapshot
  parameter is a workaround for selection drift caused by
  RichTextControl focus, with a pointer to #75275 so the param can be
  removed once that lands.
adamsilverstein added a commit that referenced this pull request May 18, 2026
The earlier eslint-disable cleanup hoisted the `!clientId` guard
from AddNoteInner up to the AddNote parent. That made the parent
re-check *live* block selection every render, so when focusing the
note form cleared the canvas selection the form unmounted mid-edit
— regressing the trunk-passing 'should move focus to add a new
note form' e2e test. Restore the snapshot + inner-guard structure;
the two eslint-disables are ugly but load-bearing.

Mark 'Cmd+K opens the inline link popover' as test.fixme: it
asserts the link popover renders inside a toolbar-less
RichTextControl, which depends on the format-library link-gate
relaxation that is intentionally being moved to the upstream
RichTextControl PR (#75275) rather than shipped here.
adamsilverstein added a commit that referenced this pull request May 18, 2026
The note form now uses RichTextControl, which does not reliably
take/hold focus in a standalone, toolbar-less context. This
regresses several trunk-passing e2e tests (focus-to-form, reply,
reopen-and-reply, keyboard nav, multiple notes, and collaboration
reply-sync) — all failing on toBeFocused()/reply-button timeouts
with the same root cause.

The fix belongs in the upstream RichTextControl PR (#75275), not
here. Mark the affected tests test.fixme with explicit comments so
the regression is visible to reviewers and the tests are re-enabled
when #75275 lands. This is a known, documented scope gap, not a
silent skip.
adamsilverstein added a commit that referenced this pull request May 18, 2026
- Revert the format-library/link change: restoring the `isVisible &&`
  guard on `InlineLinkUI` here. Making the link popover appear inside
  RichTextControl is the upstream component's responsibility and
  belongs in #75275.

- AddNote: hoist the `!clientId` early return up to the parent so
  AddNoteInner only mounts once we have a clientId snapshot. This
  removes the two `@wordpress/no-unused-vars-before-return`
  suppressions around `useDispatch` calls and a now-unreachable
  inner guard.

- hooks.js: clarify in-place that the `blockClientId` snapshot
  parameter is a workaround for selection drift caused by
  RichTextControl focus, with a pointer to #75275 so the param can be
  removed once that lands.
adamsilverstein added a commit that referenced this pull request May 18, 2026
The earlier eslint-disable cleanup hoisted the `!clientId` guard
from AddNoteInner up to the AddNote parent. That made the parent
re-check *live* block selection every render, so when focusing the
note form cleared the canvas selection the form unmounted mid-edit
— regressing the trunk-passing 'should move focus to add a new
note form' e2e test. Restore the snapshot + inner-guard structure;
the two eslint-disables are ugly but load-bearing.

Mark 'Cmd+K opens the inline link popover' as test.fixme: it
asserts the link popover renders inside a toolbar-less
RichTextControl, which depends on the format-library link-gate
relaxation that is intentionally being moved to the upstream
RichTextControl PR (#75275) rather than shipped here.
adamsilverstein added a commit that referenced this pull request May 18, 2026
The note form now uses RichTextControl, which does not reliably
take/hold focus in a standalone, toolbar-less context. This
regresses several trunk-passing e2e tests (focus-to-form, reply,
reopen-and-reply, keyboard nav, multiple notes, and collaboration
reply-sync) — all failing on toBeFocused()/reply-button timeouts
with the same root cause.

The fix belongs in the upstream RichTextControl PR (#75275), not
here. Mark the affected tests test.fixme with explicit comments so
the regression is visible to reviewers and the tests are re-enabled
when #75275 lands. This is a known, documented scope gap, not a
silent skip.
@adamsilverstein

Copy link
Copy Markdown
Member

Opened #78471 as an architectural alternative: same end result (RichText field in @wordpress/fields, title field uses it), but RichTextControl lives in a new lower-level @wordpress/rich-text-control package instead of as a private API of @wordpress/block-editor. That lets @wordpress/fields drop its @wordpress/block-editor dependency entirely.

If you prefer the simpler diff here, this PR works as-is — fields is already on the private-apis allowlist. The other PR exists to address the transitive block-editor coupling for npm consumers.

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

Labels

[Package] Block editor /packages/block-editor [Package] Fields /packages/fields [Package] Format library /packages/format-library [Type] Enhancement A suggestion for improvement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants