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 ee4009b6e..132eb1562 100644
--- a/apps/client/src/features/comment/components/comment-editor.tsx
+++ b/apps/client/src/features/comment/components/comment-editor.tsx
@@ -113,6 +113,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 f0286cf5a..a52c90f68 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/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}
/>
diff --git a/apps/server/src/collaboration/collaboration.util.ts b/apps/server/src/collaboration/collaboration.util.ts
index 6646802d4..e0fdfa972 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,
diff --git a/apps/server/src/ee b/apps/server/src/ee
index 91762fa90..3a5ead292 160000
--- a/apps/server/src/ee
+++ b/apps/server/src/ee
@@ -1 +1 @@
-Subproject commit 91762fa902cdfd53ecf8186ceef246d5fd1f7451
+Subproject commit 3a5ead292eb30c400b7a3b9bcd85901bfde8ddb6
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 = {