From db3ff54da1b0c670c521650307c5b70ad950dcc3 Mon Sep 17 00:00:00 2001
From: Philipinho <16838612+Philipinho@users.noreply.github.com>
Date: Wed, 12 Aug 2026 16:47:32 +0100
Subject: [PATCH 1/3] fix base node
---
apps/server/src/ee | 2 +-
packages/editor-ext/src/lib/prosemirror-docx/schema.ts | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/apps/server/src/ee b/apps/server/src/ee
index c0f9440de..b38dc5ecd 160000
--- a/apps/server/src/ee
+++ b/apps/server/src/ee
@@ -1 +1 @@
-Subproject commit c0f9440de97b91475d924a677073b97ec1b58527
+Subproject commit b38dc5ecd10118b687e6cb073cf7202e8c2fe914
diff --git a/packages/editor-ext/src/lib/prosemirror-docx/schema.ts b/packages/editor-ext/src/lib/prosemirror-docx/schema.ts
index df89cf1d7..235d796bb 100644
--- a/packages/editor-ext/src/lib/prosemirror-docx/schema.ts
+++ b/packages/editor-ext/src/lib/prosemirror-docx/schema.ts
@@ -192,6 +192,7 @@ export const defaultAsyncNodes: NodeSerializerAsync = {
// No usable static export representation: skip without failing.
subpages() {},
transclusionReference() {},
+ base() {},
};
export const defaultMarks: MarkSerializer = {
From ea59912c7ef99569817204f07e7b57056f5d751c Mon Sep 17 00:00:00 2001
From: Philip Okugbe <16838612+Philipinho@users.noreply.github.com>
Date: Wed, 12 Aug 2026 23:48:03 +0100
Subject: [PATCH 2/3] feat(editor): auto-detect text direction for RTL support
(#2389)
---
apps/client/src/ee/ai-chat/components/chat-input.tsx | 1 +
.../ee/template/components/readonly-template-editor.tsx | 1 +
apps/client/src/ee/template/pages/template-editor.tsx | 1 +
.../src/features/comment/components/comment-editor.tsx | 1 +
.../components/transclusion/transclusion-content.tsx | 1 +
apps/client/src/features/editor/page-editor.tsx | 2 ++
apps/client/src/features/editor/readonly-page-editor.tsx | 2 ++
apps/client/src/features/editor/styles/table.css | 2 +-
apps/client/src/features/editor/title-editor.tsx | 1 +
.../features/page-history/components/history-editor.tsx | 1 +
apps/server/src/collaboration/collaboration.util.ts | 8 +++++++-
11 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/apps/client/src/ee/ai-chat/components/chat-input.tsx b/apps/client/src/ee/ai-chat/components/chat-input.tsx
index d01381874..d99479d0d 100644
--- a/apps/client/src/ee/ai-chat/components/chat-input.tsx
+++ b/apps/client/src/ee/ai-chat/components/chat-input.tsx
@@ -255,6 +255,7 @@ export default function ChatInput({
},
content: "",
editable: true,
+ textDirection: "auto",
immediatelyRender: true,
shouldRerenderOnTransaction: false,
autofocus: autofocus ? "end" : false,
diff --git a/apps/client/src/ee/template/components/readonly-template-editor.tsx b/apps/client/src/ee/template/components/readonly-template-editor.tsx
index ca3c4b2ce..6088cb866 100644
--- a/apps/client/src/ee/template/components/readonly-template-editor.tsx
+++ b/apps/client/src/ee/template/components/readonly-template-editor.tsx
@@ -41,6 +41,7 @@ export default function ReadonlyTemplateEditor({
diff --git a/apps/client/src/ee/template/pages/template-editor.tsx b/apps/client/src/ee/template/pages/template-editor.tsx
index 7fadf05c8..1c8810ce2 100644
--- a/apps/client/src/ee/template/pages/template-editor.tsx
+++ b/apps/client/src/ee/template/pages/template-editor.tsx
@@ -87,6 +87,7 @@ export default function TemplateEditor() {
const editor = useEditor({
extensions: templateExtensions,
content: "",
+ textDirection: "auto",
editorProps: {
scrollThreshold: 80,
scrollMargin: 80,
diff --git a/apps/client/src/features/comment/components/comment-editor.tsx b/apps/client/src/features/comment/components/comment-editor.tsx
index eeb0983a0..520877c85 100644
--- a/apps/client/src/features/comment/components/comment-editor.tsx
+++ b/apps/client/src/features/comment/components/comment-editor.tsx
@@ -103,6 +103,7 @@ const CommentEditor = forwardRef(
},
content: defaultContent,
editable,
+ textDirection: "auto",
immediatelyRender: true,
shouldRerenderOnTransaction: false,
autofocus: (autofocus && "end") || false,
diff --git a/apps/client/src/features/editor/components/transclusion/transclusion-content.tsx b/apps/client/src/features/editor/components/transclusion/transclusion-content.tsx
index 946291225..828c42bbc 100644
--- a/apps/client/src/features/editor/components/transclusion/transclusion-content.tsx
+++ b/apps/client/src/features/editor/components/transclusion/transclusion-content.tsx
@@ -40,6 +40,7 @@ export default function TransclusionContent({ content }: Props) {
diff --git a/apps/client/src/features/editor/page-editor.tsx b/apps/client/src/features/editor/page-editor.tsx
index 7149e7938..77233f34f 100644
--- a/apps/client/src/features/editor/page-editor.tsx
+++ b/apps/client/src/features/editor/page-editor.tsx
@@ -249,6 +249,7 @@ function CollabPageEditor({
{
extensions,
editable,
+ textDirection: "auto",
immediatelyRender: true,
shouldRerenderOnTransaction: false,
editorProps: {
@@ -484,6 +485,7 @@ function StaticPageEditor({
@@ -93,6 +94,7 @@ export default function ReadonlyPageEditor({
{
diff --git a/apps/client/src/features/editor/styles/table.css b/apps/client/src/features/editor/styles/table.css
index 32a427936..7d9018a12 100644
--- a/apps/client/src/features/editor/styles/table.css
+++ b/apps/client/src/features/editor/styles/table.css
@@ -54,7 +54,7 @@
var(--mantine-color-dark-5)
);
font-weight: bold;
- text-align: left;
+ text-align: start;
}
.column-resize-handle {
diff --git a/apps/client/src/features/editor/title-editor.tsx b/apps/client/src/features/editor/title-editor.tsx
index 04317099d..26925b154 100644
--- a/apps/client/src/features/editor/title-editor.tsx
+++ b/apps/client/src/features/editor/title-editor.tsx
@@ -86,6 +86,7 @@ export function TitleEditor({
},
editable: editable,
content: title,
+ textDirection: "auto",
immediatelyRender: true,
shouldRerenderOnTransaction: false,
editorProps: {
diff --git a/apps/client/src/features/page-history/components/history-editor.tsx b/apps/client/src/features/page-history/components/history-editor.tsx
index 3773f6bcf..18a7dfda3 100644
--- a/apps/client/src/features/page-history/components/history-editor.tsx
+++ b/apps/client/src/features/page-history/components/history-editor.tsx
@@ -31,6 +31,7 @@ export function HistoryEditor({
const editor = useEditor({
extensions: mainExtensions,
editable: false,
+ textDirection: "auto",
});
useEffect(() => {
diff --git a/apps/server/src/collaboration/collaboration.util.ts b/apps/server/src/collaboration/collaboration.util.ts
index 7ee5ba4aa..ed182cf7f 100644
--- a/apps/server/src/collaboration/collaboration.util.ts
+++ b/apps/server/src/collaboration/collaboration.util.ts
@@ -50,7 +50,12 @@ import {
Footnote,
FootnoteReference,
} from '@docmost/editor-ext';
-import { generateText, getSchema, JSONContent } from '@tiptap/core';
+import {
+ extensions as coreExtensions,
+ generateText,
+ getSchema,
+ JSONContent,
+} from '@tiptap/core';
import { generateHTML, generateJSON } from '../common/helpers/prosemirror/html';
// @tiptap/html library works best for generating prosemirror json state but not HTML
// see: https://github.com/ueberdosis/tiptap/issues/5352
@@ -61,6 +66,7 @@ import * as Y from 'yjs';
import { Logger } from '@nestjs/common';
export const tiptapExtensions = [
+ coreExtensions.TextDirection.configure({ direction: 'auto' }),
StarterKit.configure({
document: false,
codeBlock: false,
From c093c18bf30852dad8d18fb9bce040b2aa98832a Mon Sep 17 00:00:00 2001
From: Philip Okugbe <16838612+Philipinho@users.noreply.github.com>
Date: Fri, 14 Aug 2026 02:08:28 +0100
Subject: [PATCH 3/3] fix(client): keep space switcher dropdown inside its
popover (#2392)
---
.../space/components/sidebar/space-select.tsx | 21 ++++++++++++++-----
.../space/components/sidebar/switch-space.tsx | 1 +
2 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/apps/client/src/features/space/components/sidebar/space-select.tsx b/apps/client/src/features/space/components/sidebar/space-select.tsx
index dab784103..47c499757 100644
--- a/apps/client/src/features/space/components/sidebar/space-select.tsx
+++ b/apps/client/src/features/space/components/sidebar/space-select.tsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useState } from "react";
+import React, { useEffect, useRef, useState } from "react";
import { useDebouncedValue } from "@mantine/hooks";
import { Group, Select, SelectProps, Text } from "@mantine/core";
import { useGetSpacesQuery } from "@/features/space/queries/space-query.ts";
@@ -14,6 +14,7 @@ interface SpaceSelectProps {
width?: number;
opened?: boolean;
clearable?: boolean;
+ withinPortal?: boolean;
}
const renderSelectOption: SelectProps["renderOption"] = ({ option }) => (
@@ -41,6 +42,7 @@ export function SpaceSelect({
width,
opened,
clearable,
+ withinPortal = true,
}: SpaceSelectProps) {
const { t } = useTranslation();
const [searchValue, setSearchValue] = useState("");
@@ -50,9 +52,13 @@ export function SpaceSelect({
limit: 50,
});
const [data, setData] = useState([]);
+ const fetchedSpaces = useRef(new Map());
useEffect(() => {
if (spaces) {
+ spaces.items.forEach((space: ISpace) =>
+ fetchedSpaces.current.set(space.slug, space),
+ );
const spaceData = spaces?.items
.filter((space: ISpace) => space.slug !== value)
.map((space: ISpace) => {
@@ -83,14 +89,19 @@ export function SpaceSelect({
onSearchChange={setSearchValue}
clearable={clearable}
variant="filled"
- onChange={(slug) =>
- onChange(spaces.items?.find((item) => item.slug === slug))
- }
+ onChange={(slug) => {
+ // options accumulate across fetches; resolve against everything
+ // fetched, not just the latest query result
+ const space = slug && fetchedSpaces.current.get(slug);
+ if (space) {
+ onChange(space);
+ }
+ }}
onClick={(e) => e.stopPropagation()}
nothingFoundMessage={t("No space found")}
limit={50}
checkIconPosition="right"
- comboboxProps={{ width, withinPortal: true, position: "bottom", keepMounted: false, dropdownPadding: 0 }}
+ comboboxProps={{ width, withinPortal, position: "bottom", keepMounted: false, dropdownPadding: 0 }}
dropdownOpened={opened}
/>
);
diff --git a/apps/client/src/features/space/components/sidebar/switch-space.tsx b/apps/client/src/features/space/components/sidebar/switch-space.tsx
index 7531a5926..ff07572fd 100644
--- a/apps/client/src/features/space/components/sidebar/switch-space.tsx
+++ b/apps/client/src/features/space/components/sidebar/switch-space.tsx
@@ -70,6 +70,7 @@ export function SwitchSpace({
onChange={(space) => handleSelect(space.slug)}
width={300}
opened={true}
+ withinPortal={false}
/>