
❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.

Overview
The TipTap editor resolves the page direction four different ways, so an RTL fix applied to one control does not carry to the others. Reduce them to a single source.
Complexity: Low
Target branch: unstable
Context
TipTapEditor/composables/useRovingTabIndex.js reads window.isRTL.
TipTapEditor/components/toolbar/ToolbarButton.vue reads document.dir or <html dir>.
TipTapEditor/composables/useLinkHandling.js reads document.dir.
TipTapEditor/components/image/ImageNodeView.vue walks up from the editor DOM to the nearest [dir="rtl"].
- Studio sets
window.isRTL in templates/base.html and re-exposes it as Vue.prototype.$isRTL in shared/i18n/setup.js.
The Change
- Every JavaScript RTL check under
shared/views/TipTapEditor/ should resolve from one source.
ImageNodeView's ancestor walk is the only one that can report a direction differing from the page's; whether that difference is worth keeping is part of this task.
Out of Scope
- RTL reads elsewhere in Studio.
[dir='rtl'] CSS selectors, which RTLCSS handles.
Acceptance Criteria
References
AI usage
Claude Code drafted this issue from a review comment on #6108. It grepped shared/views/TipTapEditor/ for the direction checks and listed the four call sites it found; the acceptance criteria were reviewed against those call sites before filing.
❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.
Overview
The TipTap editor resolves the page direction four different ways, so an RTL fix applied to one control does not carry to the others. Reduce them to a single source.
Complexity: Low
Target branch: unstable
Context
TipTapEditor/composables/useRovingTabIndex.jsreadswindow.isRTL.TipTapEditor/components/toolbar/ToolbarButton.vuereadsdocument.diror<html dir>.TipTapEditor/composables/useLinkHandling.jsreadsdocument.dir.TipTapEditor/components/image/ImageNodeView.vuewalks up from the editor DOM to the nearest[dir="rtl"].window.isRTLintemplates/base.htmland re-exposes it asVue.prototype.$isRTLinshared/i18n/setup.js.The Change
shared/views/TipTapEditor/should resolve from one source.ImageNodeView's ancestor walk is the only one that can report a direction differing from the page's; whether that difference is worth keeping is part of this task.Out of Scope
[dir='rtl']CSS selectors, which RTLCSS handles.Acceptance Criteria
shared/views/TipTapEditor/reads from one sourceReferences
AI usage
Claude Code drafted this issue from a review comment on #6108. It grepped
shared/views/TipTapEditor/for the direction checks and listed the four call sites it found; the acceptance criteria were reviewed against those call sites before filing.