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 = {