Skip to content

Web UI: RTL messages and composer inherit LTR direction #259

Description

@mortyge

What happens

Arabic, Hebrew, and other right-to-left text in the Web UI composer and chat transcript inherits the page's left-to-right direction. Mixed text containing punctuation, times, URLs, or Latin identifiers is laid out in the wrong direction and is difficult to read or edit.

This is separate from UI translation/localization work such as #255: user-authored and agent-authored content needs its own direction regardless of the language used by the surrounding interface.

Steps to reproduce

  1. Open the Web UI and start a conversation.
  2. Enter a mixed RTL message such as: مرحبا، موعد الاجتماع 10:30 في room-42.
  3. Observe the text while editing and after it appears in the transcript.

Expected

The composer and each user/assistant text block should infer direction from their own content. RTL messages should render and edit right-to-left while English and other LTR messages remain left-to-right.

Actual

The composer and rendered Markdown inherit the document's LTR direction. Mixed RTL content has incorrect alignment and confusing punctuation/number ordering.

Source evidence

  • plugins/web-ui/src/composer.ts:436 renders the composer <textarea> without dir=auto.
  • plugins/web-ui/src/chat.ts:1191 renders the user message bubble without a content direction.
  • plugins/web-ui/src/chat.ts:1362 renders assistant text without a content direction.
  • plugins/web-ui/src/chat.ts:1387 creates every <markdown-block> without dir=auto.
  • No direction, unicode-bidi, or RTL handling exists in the Web UI source or tests.

Suggested direction

Apply content-level automatic direction to editable and rendered user/agent text, rather than changing the direction of the whole application shell. Add regression coverage for both pure RTL and mixed RTL/LTR content so normal English messages remain unchanged.

Environment: current main at 0f0e0ad.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions