diff --git a/apps/desktop/src/components/assistant-ui/user-message-text.tsx b/apps/desktop/src/components/assistant-ui/user-message-text.tsx index 9e0da646f29..4235f94bf69 100644 --- a/apps/desktop/src/components/assistant-ui/user-message-text.tsx +++ b/apps/desktop/src/components/assistant-ui/user-message-text.tsx @@ -127,7 +127,9 @@ const InlineSegmentView: FC<{ text: string }> = ({ text }) => { const nodes = useMemo(() => splitInlineCode(text), [text]) return ( - + // styles.css bidi hook (#44150); whitespace-pre-line makes each line its own + // UAX#9 paragraph so it resolves direction independently. + {nodes.map((node, nodeIndex) => node.kind === 'inline-code' ? ( code), +[data-slot='aui_user-inline-code'], +[data-slot='aui_assistant-message-content'] .aui-md .katex { + direction: ltr; + unicode-bidi: isolate; +} + +/* Fenced code stays LTR even inside an RTL list item/blockquote — never mirrors. */ +[data-slot='aui_assistant-message-content'] .aui-md [data-slot='code-card'], +[data-slot='aui_user-fence'] { + direction: ltr; + text-align: left; +} + [data-slot='aui_user-message-root'] { top: var(--sticky-human-top); }