mirror of
https://github.com/Shadowfita/docmost.git
synced 2025-11-10 04:22:00 +10:00
181 lines
4.8 KiB
TypeScript
181 lines
4.8 KiB
TypeScript
import { StarterKit } from "@tiptap/starter-kit";
|
|
import { Placeholder } from "@tiptap/extension-placeholder";
|
|
import { TextAlign } from "@tiptap/extension-text-align";
|
|
import { TaskList } from "@tiptap/extension-task-list";
|
|
import { TaskItem } from "@tiptap/extension-task-item";
|
|
import { Underline } from "@tiptap/extension-underline";
|
|
import { Superscript } from "@tiptap/extension-superscript";
|
|
import SubScript from "@tiptap/extension-subscript";
|
|
import { Highlight } from "@tiptap/extension-highlight";
|
|
import { Typography } from "@tiptap/extension-typography";
|
|
import { TextStyle } from "@tiptap/extension-text-style";
|
|
import { Color } from "@tiptap/extension-color";
|
|
import Table from "@tiptap/extension-table";
|
|
import TableHeader from "@tiptap/extension-table-header";
|
|
import SlashCommand from "@/features/editor/extensions/slash-command";
|
|
import { Collaboration } from "@tiptap/extension-collaboration";
|
|
import { CollaborationCursor } from "@tiptap/extension-collaboration-cursor";
|
|
import { HocuspocusProvider } from "@hocuspocus/provider";
|
|
import {
|
|
Comment,
|
|
Details,
|
|
DetailsContent,
|
|
DetailsSummary,
|
|
MathBlock,
|
|
MathInline,
|
|
TableCell,
|
|
TableRow,
|
|
TrailingNode,
|
|
TiptapImage,
|
|
Callout,
|
|
TiptapVideo,
|
|
LinkExtension,
|
|
Selection,
|
|
Attachment,
|
|
CustomCodeBlock,
|
|
Drawio,
|
|
Excalidraw,
|
|
} from "@docmost/editor-ext";
|
|
import {
|
|
randomElement,
|
|
userColors,
|
|
} from "@/features/editor/extensions/utils.ts";
|
|
import { IUser } from "@/features/user/types/user.types.ts";
|
|
import MathInlineView from "@/features/editor/components/math/math-inline.tsx";
|
|
import MathBlockView from "@/features/editor/components/math/math-block.tsx";
|
|
import GlobalDragHandle from "tiptap-extension-global-drag-handle";
|
|
import { Youtube } from "@tiptap/extension-youtube";
|
|
import ImageView from "@/features/editor/components/image/image-view.tsx";
|
|
import CalloutView from "@/features/editor/components/callout/callout-view.tsx";
|
|
import { common, createLowlight } from "lowlight";
|
|
import VideoView from "@/features/editor/components/video/video-view.tsx";
|
|
import AttachmentView from "@/features/editor/components/attachment/attachment-view.tsx";
|
|
import CodeBlockView from "@/features/editor/components/code-block/code-block-view.tsx";
|
|
import DrawioView from "../components/drawio/drawio-view";
|
|
import ExcalidrawView from "@/features/editor/components/excalidraw/excalidraw-view.tsx";
|
|
import plaintext from "highlight.js/lib/languages/plaintext";
|
|
|
|
const lowlight = createLowlight(common);
|
|
lowlight.register("mermaid", plaintext);
|
|
|
|
export const mainExtensions = [
|
|
StarterKit.configure({
|
|
history: false,
|
|
dropcursor: {
|
|
width: 3,
|
|
color: "#70CFF8",
|
|
},
|
|
codeBlock: false,
|
|
code: {
|
|
HTMLAttributes: {
|
|
spellcheck: false,
|
|
},
|
|
},
|
|
}),
|
|
Placeholder.configure({
|
|
placeholder: ({ node }) => {
|
|
if (node.type.name === "heading") {
|
|
return `Heading ${node.attrs.level}`;
|
|
}
|
|
if (node.type.name === "detailsSummary") {
|
|
return "Toggle title";
|
|
}
|
|
if (node.type.name === "paragraph") {
|
|
return 'Write anything. Enter "/" for commands';
|
|
}
|
|
},
|
|
includeChildren: true,
|
|
showOnlyWhenEditable: true,
|
|
}),
|
|
TextAlign.configure({ types: ["heading", "paragraph"] }),
|
|
TaskList,
|
|
TaskItem.configure({
|
|
nested: true,
|
|
}),
|
|
Underline,
|
|
LinkExtension.configure({
|
|
openOnClick: false,
|
|
}),
|
|
Superscript,
|
|
SubScript,
|
|
Highlight.configure({
|
|
multicolor: true,
|
|
}),
|
|
Typography,
|
|
TrailingNode,
|
|
GlobalDragHandle,
|
|
TextStyle,
|
|
Color,
|
|
SlashCommand,
|
|
Comment.configure({
|
|
HTMLAttributes: {
|
|
class: "comment-mark",
|
|
},
|
|
}),
|
|
|
|
Table.configure({
|
|
resizable: true,
|
|
lastColumnResizable: false,
|
|
allowTableNodeSelection: true,
|
|
}),
|
|
TableRow,
|
|
TableCell,
|
|
TableHeader,
|
|
|
|
MathInline.configure({
|
|
view: MathInlineView,
|
|
}),
|
|
MathBlock.configure({
|
|
view: MathBlockView,
|
|
}),
|
|
Details,
|
|
DetailsSummary,
|
|
DetailsContent,
|
|
Youtube.configure({
|
|
controls: true,
|
|
nocookie: true,
|
|
}),
|
|
TiptapImage.configure({
|
|
view: ImageView,
|
|
allowBase64: false,
|
|
}),
|
|
TiptapVideo.configure({
|
|
view: VideoView,
|
|
}),
|
|
Callout.configure({
|
|
view: CalloutView,
|
|
}),
|
|
CustomCodeBlock.configure({
|
|
view: CodeBlockView,
|
|
lowlight,
|
|
HTMLAttributes: {
|
|
spellcheck: false,
|
|
},
|
|
}),
|
|
Selection,
|
|
Attachment.configure({
|
|
view: AttachmentView,
|
|
}),
|
|
Drawio.configure({
|
|
view: DrawioView,
|
|
}),
|
|
Excalidraw.configure({
|
|
view: ExcalidrawView,
|
|
}),
|
|
] as any;
|
|
|
|
type CollabExtensions = (provider: HocuspocusProvider, user: IUser) => any[];
|
|
|
|
export const collabExtensions: CollabExtensions = (provider, user) => [
|
|
Collaboration.configure({
|
|
document: provider.document,
|
|
}),
|
|
CollaborationCursor.configure({
|
|
provider,
|
|
user: {
|
|
name: user.name,
|
|
color: randomElement(userColors),
|
|
},
|
|
}),
|
|
];
|