diff --git a/apps/client/src/features/editor/components/bubble-menu/bubble-menu.tsx b/apps/client/src/features/editor/components/bubble-menu/bubble-menu.tsx index 3b7692f4..67cae1a7 100644 --- a/apps/client/src/features/editor/components/bubble-menu/bubble-menu.tsx +++ b/apps/client/src/features/editor/components/bubble-menu/bubble-menu.tsx @@ -1,9 +1,5 @@ -import { - BubbleMenu, - BubbleMenuProps, - isNodeSelection, - useEditor, -} from "@tiptap/react"; +import { BubbleMenu, BubbleMenuProps } from "@tiptap/react/menus"; +import { isNodeSelection, useEditor } from "@tiptap/react"; import { FC, useEffect, useRef, useState } from "react"; import { IconBold, @@ -114,14 +110,9 @@ export const EditorBubbleMenu: FC = (props) => { } return isTextSelected(editor); }, - tippyOptions: { - moveTransition: "transform 0.15s ease-out", - onCreate: (instance) => { - instance.popper.firstChild?.addEventListener("blur", (event) => { - event.preventDefault(); - event.stopImmediatePropagation(); - }); - }, + options: { + placement: "top", + offset: 8, onHide: () => { setIsNodeSelectorOpen(false); setIsTextAlignmentOpen(false); diff --git a/apps/client/src/features/editor/components/callout/callout-menu.tsx b/apps/client/src/features/editor/components/callout/callout-menu.tsx index 56dea233..843afbd8 100644 --- a/apps/client/src/features/editor/components/callout/callout-menu.tsx +++ b/apps/client/src/features/editor/components/callout/callout-menu.tsx @@ -1,8 +1,5 @@ -import { - BubbleMenu as BaseBubbleMenu, - findParentNode, - posToDOMRect, -} from "@tiptap/react"; +import { BubbleMenu as BaseBubbleMenu } from "@tiptap/react/menus"; +import { findParentNode, posToDOMRect } from "@tiptap/react"; import React, { useCallback } from "react"; import { Node as PMNode } from "prosemirror-model"; import { @@ -55,20 +52,17 @@ export function CalloutMenu({ editor }: EditorMenuProps) { }, [editor], ); - return ( diff --git a/apps/client/src/features/editor/components/code-block/code-block-view.tsx b/apps/client/src/features/editor/components/code-block/code-block-view.tsx index 07ad2ad0..130016a3 100644 --- a/apps/client/src/features/editor/components/code-block/code-block-view.tsx +++ b/apps/client/src/features/editor/components/code-block/code-block-view.tsx @@ -90,6 +90,7 @@ export default function CodeBlockView(props: NodeViewProps) { node.textContent.length > 0 } > + {/* @ts-ignore */} diff --git a/apps/client/src/features/editor/components/drawio/drawio-menu.tsx b/apps/client/src/features/editor/components/drawio/drawio-menu.tsx index 76771b10..afa7dd58 100644 --- a/apps/client/src/features/editor/components/drawio/drawio-menu.tsx +++ b/apps/client/src/features/editor/components/drawio/drawio-menu.tsx @@ -1,16 +1,12 @@ -import { - BubbleMenu as BaseBubbleMenu, - findParentNode, - posToDOMRect, -} from '@tiptap/react'; -import { useCallback } from 'react'; -import { sticky } from 'tippy.js'; -import { Node as PMNode } from 'prosemirror-model'; +import { BubbleMenu as BaseBubbleMenu } from "@tiptap/react/menus"; +import { findParentNode, posToDOMRect } from "@tiptap/react"; +import { useCallback } from "react"; +import { Node as PMNode } from "prosemirror-model"; import { EditorMenuProps, ShouldShowProps, -} from '@/features/editor/components/table/types/types.ts'; -import { NodeWidthResize } from '@/features/editor/components/common/node-width-resize.tsx'; +} from "@/features/editor/components/table/types/types.ts"; +import { NodeWidthResize } from "@/features/editor/components/common/node-width-resize.tsx"; export function DrawioMenu({ editor }: EditorMenuProps) { const shouldShow = useCallback( @@ -19,14 +15,14 @@ export function DrawioMenu({ editor }: EditorMenuProps) { return false; } - return editor.isActive('drawio') && editor.getAttributes('drawio')?.src; + return editor.isActive("drawio") && editor.getAttributes("drawio")?.src; }, - [editor] + [editor], ); const getReferenceClientRect = useCallback(() => { const { selection } = editor.state; - const predicate = (node: PMNode) => node.type.name === 'drawio'; + const predicate = (node: PMNode) => node.type.name === "drawio"; const parent = findParentNode(predicate)(selection); if (parent) { @@ -39,9 +35,9 @@ export function DrawioMenu({ editor }: EditorMenuProps) { const onWidthChange = useCallback( (value: number) => { - editor.commands.updateAttributes('drawio', { width: `${value}%` }); + editor.commands.updateAttributes("drawio", { width: `${value}%` }); }, - [editor] + [editor], ); return ( @@ -49,29 +45,26 @@ export function DrawioMenu({ editor }: EditorMenuProps) { editor={editor} pluginKey={`drawio-menu}`} updateDelay={0} - tippyOptions={{ - getReferenceClientRect, - offset: [0, 8], - zIndex: 99, - popperOptions: { - modifiers: [{ name: 'flip', enabled: false }], - }, - plugins: [sticky], - sticky: 'popper', + options={{ + //getReferenceClientRect, + placement: "bottom", + offset: 8, + // zIndex: 99, + flip: false, }} shouldShow={shouldShow} >
- {editor.getAttributes('drawio')?.width && ( + {editor.getAttributes("drawio")?.width && ( )}
diff --git a/apps/client/src/features/editor/components/drawio/drawio-view.tsx b/apps/client/src/features/editor/components/drawio/drawio-view.tsx index 468e26a0..ce61b9e2 100644 --- a/apps/client/src/features/editor/components/drawio/drawio-view.tsx +++ b/apps/client/src/features/editor/components/drawio/drawio-view.tsx @@ -66,6 +66,7 @@ export default function DrawioView(props: NodeViewProps) { const fileName = "diagram.drawio.svg"; const drawioSVGFile = await svgStringToFile(svgString, fileName); + //@ts-ignore const pageId = editor.storage?.pageId; let attachment: IAttachment = null; diff --git a/apps/client/src/features/editor/components/excalidraw/excalidraw-menu.tsx b/apps/client/src/features/editor/components/excalidraw/excalidraw-menu.tsx index 5672e4f8..0e82e86d 100644 --- a/apps/client/src/features/editor/components/excalidraw/excalidraw-menu.tsx +++ b/apps/client/src/features/editor/components/excalidraw/excalidraw-menu.tsx @@ -1,16 +1,12 @@ -import { - BubbleMenu as BaseBubbleMenu, - findParentNode, - posToDOMRect, -} from '@tiptap/react'; -import { useCallback } from 'react'; -import { sticky } from 'tippy.js'; -import { Node as PMNode } from 'prosemirror-model'; +import { BubbleMenu as BaseBubbleMenu } from "@tiptap/react/menus"; +import { findParentNode, posToDOMRect } from "@tiptap/react"; +import { useCallback } from "react"; +import { Node as PMNode } from "prosemirror-model"; import { EditorMenuProps, ShouldShowProps, -} from '@/features/editor/components/table/types/types.ts'; -import { NodeWidthResize } from '@/features/editor/components/common/node-width-resize.tsx'; +} from "@/features/editor/components/table/types/types.ts"; +import { NodeWidthResize } from "@/features/editor/components/common/node-width-resize.tsx"; export function ExcalidrawMenu({ editor }: EditorMenuProps) { const shouldShow = useCallback( @@ -19,14 +15,16 @@ export function ExcalidrawMenu({ editor }: EditorMenuProps) { return false; } - return editor.isActive('excalidraw') && editor.getAttributes('excalidraw')?.src; + return ( + editor.isActive("excalidraw") && editor.getAttributes("excalidraw")?.src + ); }, - [editor] + [editor], ); const getReferenceClientRect = useCallback(() => { const { selection } = editor.state; - const predicate = (node: PMNode) => node.type.name === 'excalidraw'; + const predicate = (node: PMNode) => node.type.name === "excalidraw"; const parent = findParentNode(predicate)(selection); if (parent) { @@ -39,9 +37,9 @@ export function ExcalidrawMenu({ editor }: EditorMenuProps) { const onWidthChange = useCallback( (value: number) => { - editor.commands.updateAttributes('excalidraw', { width: `${value}%` }); + editor.commands.updateAttributes("excalidraw", { width: `${value}%` }); }, - [editor] + [editor], ); return ( @@ -49,29 +47,26 @@ export function ExcalidrawMenu({ editor }: EditorMenuProps) { editor={editor} pluginKey={`excalidraw-menu}`} updateDelay={0} - tippyOptions={{ - getReferenceClientRect, - offset: [0, 8], - zIndex: 99, - popperOptions: { - modifiers: [{ name: 'flip', enabled: false }], - }, - plugins: [sticky], - sticky: 'popper', + options={{ + //getReferenceClientRect, + placement: "bottom", + offset: 8, + // zIndex: 99, + flip: false, }} shouldShow={shouldShow} >
- {editor.getAttributes('excalidraw')?.width && ( + {editor.getAttributes("excalidraw")?.width && ( )}
diff --git a/apps/client/src/features/editor/components/excalidraw/excalidraw-view.tsx b/apps/client/src/features/editor/components/excalidraw/excalidraw-view.tsx index d898e5a2..0f48b0bb 100644 --- a/apps/client/src/features/editor/components/excalidraw/excalidraw-view.tsx +++ b/apps/client/src/features/editor/components/excalidraw/excalidraw-view.tsx @@ -98,6 +98,7 @@ export default function ExcalidrawView(props: NodeViewProps) { const fileName = "diagram.excalidraw.svg"; const excalidrawSvgFile = await svgStringToFile(svgString, fileName); + // @ts-ignore const pageId = editor.storage?.pageId; let attachment: IAttachment = null; diff --git a/apps/client/src/features/editor/components/image/image-menu.tsx b/apps/client/src/features/editor/components/image/image-menu.tsx index abb1c1ca..59599b79 100644 --- a/apps/client/src/features/editor/components/image/image-menu.tsx +++ b/apps/client/src/features/editor/components/image/image-menu.tsx @@ -1,10 +1,6 @@ -import { - BubbleMenu as BaseBubbleMenu, - findParentNode, - posToDOMRect, -} from "@tiptap/react"; +import { BubbleMenu as BaseBubbleMenu } from "@tiptap/react/menus"; +import { findParentNode, posToDOMRect } from "@tiptap/react"; import React, { useCallback } from "react"; -import { sticky } from "tippy.js"; import { Node as PMNode } from "prosemirror-model"; import { EditorMenuProps, @@ -85,15 +81,12 @@ export function ImageMenu({ editor }: EditorMenuProps) { editor={editor} pluginKey={`image-menu}`} updateDelay={0} - tippyOptions={{ - getReferenceClientRect, - offset: [0, 8], - zIndex: 99, - popperOptions: { - modifiers: [{ name: "flip", enabled: false }], - }, - plugins: [sticky], - sticky: "popper", + options={{ + // getReferenceClientRect, + placement: "bottom", + offset: 8, + //zIndex: 99, + flip: false, }} shouldShow={shouldShow} > diff --git a/apps/client/src/features/editor/components/link/link-menu.tsx b/apps/client/src/features/editor/components/link/link-menu.tsx index 7cdd2f0f..041e5c3d 100644 --- a/apps/client/src/features/editor/components/link/link-menu.tsx +++ b/apps/client/src/features/editor/components/link/link-menu.tsx @@ -1,4 +1,5 @@ -import { BubbleMenu as BaseBubbleMenu } from "@tiptap/react"; +import { BubbleMenu as BaseBubbleMenu } from "@tiptap/react/menus"; +import { offset } from "@floating-ui/dom"; import React, { useCallback, useState } from "react"; import { EditorMenuProps } from "@/features/editor/components/table/types/types.ts"; import { LinkEditorPanel } from "@/features/editor/components/link/link-editor-panel.tsx"; @@ -50,16 +51,13 @@ export function LinkMenu({ editor, appendTo }: EditorMenuProps) { editor={editor} pluginKey={`link-menu}`} updateDelay={0} - tippyOptions={{ - appendTo: () => { - return appendTo?.current; - }, - onHidden: () => { + options={{ + onHide: () => { setShowEdit(false); }, placement: "bottom", - offset: [0, 5], - zIndex: 101, + offset: 5, + // zIndex: 101, }} shouldShow={shouldShow} > diff --git a/apps/client/src/features/editor/components/mention/mention-list.tsx b/apps/client/src/features/editor/components/mention/mention-list.tsx index 389c2ce5..0bd95597 100644 --- a/apps/client/src/features/editor/components/mention/mention-list.tsx +++ b/apps/client/src/features/editor/components/mention/mention-list.tsx @@ -106,6 +106,7 @@ const MentionList = forwardRef((props, ref) => { setRenderItems(items); // update editor storage + //@ts-ignore props.editor.storage.mentionItems = items; } }, [suggestion, isLoading]); diff --git a/apps/client/src/features/editor/components/mention/mention-suggestion.ts b/apps/client/src/features/editor/components/mention/mention-suggestion.ts index 11710639..fe2adf26 100644 --- a/apps/client/src/features/editor/components/mention/mention-suggestion.ts +++ b/apps/client/src/features/editor/components/mention/mention-suggestion.ts @@ -73,6 +73,7 @@ const mentionRenderItems = () => { // destroy component if space is greater 3 without a match if ( whitespaceCount > 3 && + //@ts-ignore props.editor.storage.mentionItems.length === 0 ) { popup?.[0]?.destroy(); diff --git a/apps/client/src/features/editor/components/search-and-replace/search-and-replace-dialog.tsx b/apps/client/src/features/editor/components/search-and-replace/search-and-replace-dialog.tsx index df6f0031..f5c17661 100644 --- a/apps/client/src/features/editor/components/search-and-replace/search-and-replace-dialog.tsx +++ b/apps/client/src/features/editor/components/search-and-replace/search-and-replace-dialog.tsx @@ -73,6 +73,8 @@ function SearchAndReplaceDialog({ editor, editable = true }: PageFindDialogDialo if (!editor) return; const { results, resultIndex } = editor.storage.searchAndReplace; + //TODO: check type error + //@ts-ignore const position: Range = results[resultIndex]; if (!position) return; diff --git a/apps/client/src/features/editor/components/slash-menu/menu-items.ts b/apps/client/src/features/editor/components/slash-menu/menu-items.ts index 42bed5c1..6e6d5c33 100644 --- a/apps/client/src/features/editor/components/slash-menu/menu-items.ts +++ b/apps/client/src/features/editor/components/slash-menu/menu-items.ts @@ -159,6 +159,7 @@ const CommandGroups: SlashMenuGroupedItemsType = { command: ({ editor, range }) => { editor.chain().focus().deleteRange(range).run(); + // @ts-ignore const pageId = editor.storage?.pageId; if (!pageId) return; @@ -186,6 +187,7 @@ const CommandGroups: SlashMenuGroupedItemsType = { command: ({ editor, range }) => { editor.chain().focus().deleteRange(range).run(); + // @ts-ignore const pageId = editor.storage?.pageId; if (!pageId) return; @@ -211,6 +213,7 @@ const CommandGroups: SlashMenuGroupedItemsType = { command: ({ editor, range }) => { editor.chain().focus().deleteRange(range).run(); + // @ts-ignore const pageId = editor.storage?.pageId; if (!pageId) return; diff --git a/apps/client/src/features/editor/components/table/table-cell-menu.tsx b/apps/client/src/features/editor/components/table/table-cell-menu.tsx index 2ea2e8dd..593f76b1 100644 --- a/apps/client/src/features/editor/components/table/table-cell-menu.tsx +++ b/apps/client/src/features/editor/components/table/table-cell-menu.tsx @@ -1,4 +1,4 @@ -import { BubbleMenu as BaseBubbleMenu } from "@tiptap/react"; +import { BubbleMenu as BaseBubbleMenu } from "@tiptap/react/menus"; import React, { useCallback } from "react"; import { @@ -57,19 +57,20 @@ export const TableCellMenu = React.memo( editor={editor} pluginKey="table-cell-menu" updateDelay={0} - tippyOptions={{ - appendTo: () => { - return appendTo?.current; - }, - offset: [0, 15], - zIndex: 99, + options={{ + //appendTo: () => { + // return appendTo?.current; + // }, + placement: "bottom", + offset: 15, + //zIndex: 99, }} shouldShow={shouldShow} > - + - + - + - + diff --git a/apps/client/src/features/editor/extensions/extensions.ts b/apps/client/src/features/editor/extensions/extensions.ts index 922bcd59..09430ce8 100644 --- a/apps/client/src/features/editor/extensions/extensions.ts +++ b/apps/client/src/features/editor/extensions/extensions.ts @@ -1,9 +1,13 @@ 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 { + TaskList, + TaskItem, +} from "@tiptap/extension-list"; +import { + Placeholder, + CharacterCount, +} from "@tiptap/extensions"; import { Superscript } from "@tiptap/extension-superscript"; import SubScript from "@tiptap/extension-subscript"; import { Highlight } from "@tiptap/extension-highlight"; @@ -12,7 +16,7 @@ import { TextStyle } from "@tiptap/extension-text-style"; import { Color } from "@tiptap/extension-color"; import SlashCommand from "@/features/editor/extensions/slash-command"; import { Collaboration } from "@tiptap/extension-collaboration"; -import { CollaborationCursor } from "@tiptap/extension-collaboration-cursor"; +import { CollaborationCaret } from "@tiptap/extension-collaboration-caret"; import { HocuspocusProvider } from "@hocuspocus/provider"; import { Comment, @@ -73,7 +77,6 @@ import MentionView from "@/features/editor/components/mention/mention-view.tsx"; import i18n from "@/i18n.ts"; import { MarkdownClipboard } from "@/features/editor/extensions/markdown-clipboard.ts"; import EmojiCommand from "./emoji-command"; -import { CharacterCount } from "@tiptap/extension-character-count"; import { countWords } from "alfaaz"; const lowlight = createLowlight(common); @@ -90,7 +93,7 @@ lowlight.register("scala", scala); export const mainExtensions = [ StarterKit.configure({ - history: false, + undoRedo: false, dropcursor: { width: 3, color: "#70CFF8", @@ -101,6 +104,8 @@ export const mainExtensions = [ spellcheck: false, }, }, + link: false, + trailingNode: false, }), Placeholder.configure({ placeholder: ({ node }) => { @@ -122,7 +127,6 @@ export const mainExtensions = [ TaskItem.configure({ nested: true, }), - Underline, LinkExtension.configure({ openOnClick: false, }), @@ -221,17 +225,17 @@ export const mainExtensions = [ SearchAndReplace.extend({ addKeyboardShortcuts() { return { - 'Mod-f': () => { + "Mod-f": () => { const event = new CustomEvent("openFindDialogFromEditor", {}); document.dispatchEvent(event); return true; }, - 'Escape': () => { + Escape: () => { const event = new CustomEvent("closeFindDialogFromEditor", {}); document.dispatchEvent(event); return true; }, - } + }; }, }).configure(), ] as any; @@ -242,7 +246,7 @@ export const collabExtensions: CollabExtensions = (provider, user) => [ Collaboration.configure({ document: provider.document, }), - CollaborationCursor.configure({ + CollaborationCaret.configure({ provider, user: { name: user.name, diff --git a/apps/client/src/features/editor/page-editor.tsx b/apps/client/src/features/editor/page-editor.tsx index 5d88b208..d8036333 100644 --- a/apps/client/src/features/editor/page-editor.tsx +++ b/apps/client/src/features/editor/page-editor.tsx @@ -75,7 +75,7 @@ export default function PageEditor({ const [isLocalSynced, setLocalSynced] = useState(false); const [isRemoteSynced, setRemoteSynced] = useState(false); const [yjsConnectionStatus, setYjsConnectionStatus] = useAtom( - yjsConnectionStatusAtom + yjsConnectionStatusAtom, ); const menuContainerRef = useRef(null); const documentName = `page.${pageId}`; @@ -100,6 +100,7 @@ export default function PageEditor({ // Track when collaborative provider is ready and synced const [collabReady, setCollabReady] = useState(false); + /* useEffect(() => { if ( remoteProvider?.status === WebSocketStatus.Connected && @@ -109,6 +110,7 @@ export default function PageEditor({ setCollabReady(true); } }, [remoteProvider?.status, isLocalSynced, isRemoteSynced]); + */ useEffect(() => { if (!providersRef.current) { @@ -119,8 +121,8 @@ export default function PageEditor({ url: collaborationURL, document: ydoc, token: collabQuery?.token, - connect: true, - preserveConnection: false, + //connect: true, + //preserveConnection: false, onAuthenticationFailed: (auth: onAuthenticationFailedParameters) => { const payload = jwtDecode(collabQuery?.token); const now = Date.now().valueOf() / 1000; @@ -137,11 +139,11 @@ export default function PageEditor({ }); } }, - onStatus: (status) => { - if (status.status === "connected") { - setYjsConnectionStatus(status.status); - } - }, + //onStatus: (status) => { + // if (status.status === "connected") { + // setYjsConnectionStatus(status.status); + // } + // }, }); remote.on("synced", () => setRemoteSynced(true)); remote.on("disconnect", () => { @@ -176,13 +178,14 @@ export default function PageEditor({ */ // Only connect/disconnect on tab/idle, not destroy + /* useEffect(() => { if (!providersReady || !providersRef.current) return; const remoteProvider = providersRef.current.remote; if ( isIdle && documentState === "hidden" && - remoteProvider.status === WebSocketStatus.Connected + remoteProvider === WebSocketStatus.Connected ) { remoteProvider.disconnect(); setIsCollabReady(false); @@ -197,6 +200,7 @@ export default function PageEditor({ setTimeout(() => setIsCollabReady(true), 500); } }, [isIdle, documentState, providersReady, resetIdle]); + */ const extensions = useMemo(() => { if (!remoteProvider || !currentUser?.user) return mainExtensions; @@ -217,7 +221,7 @@ export default function PageEditor({ scrollMargin: 80, handleDOMEvents: { keydown: (_view, event) => { - if ((event.ctrlKey || event.metaKey) && event.code === 'KeyS') { + if ((event.ctrlKey || event.metaKey) && event.code === "KeyS") { event.preventDefault(); return true; } @@ -252,6 +256,7 @@ export default function PageEditor({ if (editor) { // @ts-ignore setEditor(editor); + // @ts-ignore editor.storage.pageId = pageId; } }, @@ -262,7 +267,7 @@ export default function PageEditor({ debouncedUpdateContent(editorJson); }, }, - [pageId, editable, remoteProvider] + [pageId, editable, remoteProvider], ); const debouncedUpdateContent = useDebouncedCallback((newContent: any) => { @@ -300,7 +305,7 @@ export default function PageEditor({ return () => { document.removeEventListener( "ACTIVE_COMMENT_EVENT", - handleActiveCommentEvent + handleActiveCommentEvent, ); }; }, []); @@ -311,6 +316,7 @@ export default function PageEditor({ setAsideState({ tab: "", isAsideOpen: false }); }, [pageId]); + /* useEffect(() => { if (remoteProvider?.status === WebSocketStatus.Connecting) { const timeout = setTimeout(() => { @@ -319,9 +325,10 @@ export default function PageEditor({ return () => clearTimeout(timeout); } }, [remoteProvider?.status]); - +*/ const isSynced = isLocalSynced && isRemoteSynced; + /* useEffect(() => { const collabReadyTimeout = setTimeout(() => { if ( @@ -334,6 +341,7 @@ export default function PageEditor({ }, 500); return () => clearTimeout(collabReadyTimeout); }, [isRemoteSynced, isLocalSynced, remoteProvider?.status]); + */ useEffect(() => { // Only honor user default page edit mode preference and permissions @@ -351,8 +359,9 @@ export default function PageEditor({ }, [userPageEditMode, editor, editable]); const hasConnectedOnceRef = useRef(false); - const [showStatic, setShowStatic] = useState(true); + const [showStatic, setShowStatic] = useState(false); + /* useEffect(() => { if ( !hasConnectedOnceRef.current && @@ -361,7 +370,7 @@ export default function PageEditor({ hasConnectedOnceRef.current = true; setShowStatic(false); } - }, [remoteProvider?.status]); + }, [remoteProvider?.status]);*/ if (showStatic) { return ( diff --git a/apps/client/src/features/page-history/components/history-list.tsx b/apps/client/src/features/page-history/components/history-list.tsx index af178eac..7b0d9ea2 100644 --- a/apps/client/src/features/page-history/components/history-list.tsx +++ b/apps/client/src/features/page-history/components/history-list.tsx @@ -67,7 +67,7 @@ function HistoryList({ pageId }: Props) { mainEditorTitle .chain() .clearContent() - .setContent(activeHistoryData.title, true) + .setContent(activeHistoryData.title, { emitUpdate: true }) .run(); mainEditor .chain() diff --git a/apps/server/src/collaboration/collaboration.gateway.ts b/apps/server/src/collaboration/collaboration.gateway.ts index 3f894572..f1d50671 100644 --- a/apps/server/src/collaboration/collaboration.gateway.ts +++ b/apps/server/src/collaboration/collaboration.gateway.ts @@ -26,7 +26,7 @@ export class CollaborationGateway { ) { this.redisConfig = parseRedisUrl(this.environmentService.getRedisUrl()); - this.hocuspocus = HocuspocusServer.configure({ + this.hocuspocus = new Hocuspocus({ debounce: 10000, maxDebounce: 45000, unloadImmediately: false, @@ -65,6 +65,6 @@ export class CollaborationGateway { } async destroy(): Promise { - await this.hocuspocus.destroy(); + //await this.hocuspocus.destroy(); } } diff --git a/apps/server/src/collaboration/collaboration.util.ts b/apps/server/src/collaboration/collaboration.util.ts index 099d615e..9fff8cf1 100644 --- a/apps/server/src/collaboration/collaboration.util.ts +++ b/apps/server/src/collaboration/collaboration.util.ts @@ -1,8 +1,5 @@ import { StarterKit } from '@tiptap/starter-kit'; 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'; @@ -10,6 +7,7 @@ import { Typography } from '@tiptap/extension-typography'; import { TextStyle } from '@tiptap/extension-text-style'; import { Color } from '@tiptap/extension-color'; import { Youtube } from '@tiptap/extension-youtube'; +import { TaskList, TaskItem } from '@tiptap/extension-list'; import { Callout, Comment, @@ -51,7 +49,6 @@ export const tiptapExtensions = [ TaskItem.configure({ nested: true, }), - Underline, LinkExtension, Superscript, SubScript, diff --git a/apps/server/src/collaboration/extensions/authentication.extension.ts b/apps/server/src/collaboration/extensions/authentication.extension.ts index 1a42bd97..04a360f7 100644 --- a/apps/server/src/collaboration/extensions/authentication.extension.ts +++ b/apps/server/src/collaboration/extensions/authentication.extension.ts @@ -69,7 +69,7 @@ export class AuthenticationExtension implements Extension { } if (userSpaceRole === SpaceRole.READER) { - data.connection.readOnly = true; + data.connectionConfig.readOnly = true; this.logger.debug(`User granted readonly access to page: ${pageId}`); } diff --git a/package.json b/package.json index 4b14083e..0653a1b7 100644 --- a/package.json +++ b/package.json @@ -20,53 +20,50 @@ "dependencies": { "@braintree/sanitize-url": "^7.1.0", "@docmost/editor-ext": "workspace:*", - "@hocuspocus/extension-redis": "^2.15.2", - "@hocuspocus/provider": "^2.15.2", - "@hocuspocus/server": "^2.15.2", - "@hocuspocus/transformer": "^2.15.2", + "@floating-ui/dom": "^1.7.3", + "@hocuspocus/extension-redis": "^3.2.2", + "@hocuspocus/provider": "^3.2.2", + "@hocuspocus/server": "^3.2.2", + "@hocuspocus/transformer": "^3.2.2", "@joplin/turndown": "^4.0.74", "@joplin/turndown-plugin-gfm": "^1.0.56", "@sindresorhus/slugify": "1.1.0", - "@tiptap/core": "^2.10.3", - "@tiptap/extension-code-block": "^2.10.3", - "@tiptap/extension-code-block-lowlight": "^2.10.3", - "@tiptap/extension-collaboration": "^2.10.3", - "@tiptap/extension-collaboration-cursor": "^2.10.3", - "@tiptap/extension-color": "^2.10.3", - "@tiptap/extension-document": "^2.10.3", - "@tiptap/extension-heading": "^2.10.3", - "@tiptap/extension-highlight": "^2.10.3", - "@tiptap/extension-history": "^2.10.3", - "@tiptap/extension-image": "^2.10.3", - "@tiptap/extension-link": "^2.10.3", - "@tiptap/extension-list-item": "^2.10.3", - "@tiptap/extension-list-keymap": "^2.10.3", - "@tiptap/extension-placeholder": "^2.10.3", - "@tiptap/extension-subscript": "^2.10.3", - "@tiptap/extension-superscript": "^2.10.3", - "@tiptap/extension-table": "^2.10.3", - "@tiptap/extension-table-cell": "^2.10.3", - "@tiptap/extension-table-header": "^2.10.3", - "@tiptap/extension-table-row": "^2.10.3", - "@tiptap/extension-task-item": "^2.10.3", - "@tiptap/extension-task-list": "^2.10.3", - "@tiptap/extension-text": "^2.10.3", - "@tiptap/extension-text-align": "^2.10.3", - "@tiptap/extension-text-style": "^2.10.3", - "@tiptap/extension-typography": "^2.10.3", - "@tiptap/extension-underline": "^2.10.3", - "@tiptap/extension-youtube": "^2.10.3", - "@tiptap/html": "^2.10.3", - "@tiptap/pm": "^2.10.3", - "@tiptap/react": "^2.10.3", - "@tiptap/starter-kit": "^2.10.3", - "@tiptap/suggestion": "^2.10.3", + "@tiptap/core": "^3.0.9", + "@tiptap/extension-code-block": "^3.0.9", + "@tiptap/extension-collaboration": "^3.0.9", + "@tiptap/extension-collaboration-caret": "^3.0.9", + "@tiptap/extension-color": "^3.0.9", + "@tiptap/extension-document": "^3.0.9", + "@tiptap/extension-heading": "^3.0.9", + "@tiptap/extension-highlight": "^3.0.9", + "@tiptap/extension-history": "^3.0.9", + "@tiptap/extension-image": "^3.0.9", + "@tiptap/extension-link": "^3.0.9", + "@tiptap/extension-list": "^3.0.9", + "@tiptap/extension-list-item": "^3.0.9", + "@tiptap/extension-list-keymap": "^3.0.9", + "@tiptap/extension-placeholder": "^3.0.9", + "@tiptap/extension-subscript": "^3.0.9", + "@tiptap/extension-superscript": "^3.0.9", + "@tiptap/extension-table": "^3.0.9", + "@tiptap/extension-text": "^3.0.9", + "@tiptap/extension-text-align": "^3.0.9", + "@tiptap/extension-text-style": "^3.0.9", + "@tiptap/extension-typography": "^3.0.9", + "@tiptap/extension-youtube": "^3.0.9", + "@tiptap/html": "^3.0.9", + "@tiptap/pm": "^3.0.9", + "@tiptap/react": "^3.0.9", + "@tiptap/starter-kit": "^3.0.9", + "@tiptap/suggestion": "^3.0.9", "@types/qrcode": "^1.5.5", "bytes": "^3.1.2", + "core": "link:highlight.js/lib/core", "cross-env": "^7.0.3", "date-fns": "^4.1.0", "dompurify": "^3.2.6", "fractional-indexing-jittered": "^1.0.0", + "highlight.js": "^11.11.1", "ioredis": "^5.4.1", "jszip": "^3.10.1", "linkifyjs": "^4.3.2", diff --git a/packages/editor-ext/src/lib/custom-code-block.ts b/packages/editor-ext/src/lib/custom-code-block.ts deleted file mode 100644 index 702e98a9..00000000 --- a/packages/editor-ext/src/lib/custom-code-block.ts +++ /dev/null @@ -1,81 +0,0 @@ -import CodeBlockLowlight, { - CodeBlockLowlightOptions, -} from "@tiptap/extension-code-block-lowlight"; -import { ReactNodeViewRenderer } from "@tiptap/react"; - -export interface CustomCodeBlockOptions extends CodeBlockLowlightOptions { - view: any; -} - -const TAB_CHAR = "\u00A0\u00A0"; - -export const CustomCodeBlock = CodeBlockLowlight.extend( - { - selectable: true, - - addOptions() { - return { - ...this.parent?.(), - view: null, - }; - }, - - addKeyboardShortcuts() { - return { - ...this.parent?.(), - Tab: () => { - if (this.editor.isActive("codeBlock")) { - this.editor - .chain() - .command(({ tr }) => { - tr.insertText(TAB_CHAR); - return true; - }) - .run(); - return true; - } - }, - "Mod-a": () => { - if (this.editor.isActive("codeBlock")) { - const { state } = this.editor; - const { $from } = state.selection; - - let codeBlockNode = null; - let codeBlockPos = null; - let depth = 0; - - for (depth = $from.depth; depth > 0; depth--) { - const node = $from.node(depth); - if (node.type.name === "codeBlock") { - codeBlockNode = node; - codeBlockPos = $from.start(depth) - 1; - break; - } - } - - if (codeBlockNode && codeBlockPos !== null) { - const codeBlockStart = codeBlockPos; - const codeBlockEnd = codeBlockPos + codeBlockNode.nodeSize; - - const contentStart = codeBlockStart + 1; - const contentEnd = codeBlockEnd - 1; - - this.editor.commands.setTextSelection({ - from: contentStart, - to: contentEnd, - }); - - return true; - } - } - - return false; - }, - }; - }, - - addNodeView() { - return ReactNodeViewRenderer(this.options.view); - }, - } -); diff --git a/packages/editor-ext/src/lib/custom-code-block/custom-code-block.ts b/packages/editor-ext/src/lib/custom-code-block/custom-code-block.ts new file mode 100644 index 00000000..12f25989 --- /dev/null +++ b/packages/editor-ext/src/lib/custom-code-block/custom-code-block.ts @@ -0,0 +1,106 @@ +import type { CodeBlockOptions } from '@tiptap/extension-code-block' +import CodeBlock from '@tiptap/extension-code-block' + +import { LowlightPlugin } from './lowlight-plugin.js' +import { ReactNodeViewRenderer } from '@tiptap/react'; + +export interface CodeBlockLowlightOptions extends CodeBlockOptions { + /** + * The lowlight instance. + */ + lowlight: any, + view: any; +} + +const TAB_CHAR = "\u00A0\u00A0"; + +/** + * This extension allows you to highlight code blocks with lowlight. + * @see https://tiptap.dev/api/nodes/code-block-lowlight + */ +export const CustomCodeBlock = CodeBlock.extend({ + selectable: true, + + addOptions() { + return { + ...this.parent?.(), + lowlight: {}, + languageClassPrefix: 'language-', + exitOnTripleEnter: true, + exitOnArrowDown: true, + defaultLanguage: null, + HTMLAttributes: {}, + view: null, + } + }, + + addKeyboardShortcuts() { + return { + ...this.parent?.(), + Tab: () => { + if (this.editor.isActive("codeBlock")) { + this.editor + .chain() + .command(({ tr }) => { + tr.insertText(TAB_CHAR); + return true; + }) + .run(); + return true; + } + }, + "Mod-a": () => { + if (this.editor.isActive("codeBlock")) { + const { state } = this.editor; + const { $from } = state.selection; + + let codeBlockNode = null; + let codeBlockPos = null; + let depth = 0; + + for (depth = $from.depth; depth > 0; depth--) { + const node = $from.node(depth); + if (node.type.name === "codeBlock") { + codeBlockNode = node; + codeBlockPos = $from.start(depth) - 1; + break; + } + } + + if (codeBlockNode && codeBlockPos !== null) { + const codeBlockStart = codeBlockPos; + const codeBlockEnd = codeBlockPos + codeBlockNode.nodeSize; + + const contentStart = codeBlockStart + 1; + const contentEnd = codeBlockEnd - 1; + + this.editor.commands.setTextSelection({ + from: contentStart, + to: contentEnd, + }); + + return true; + } + } + + return false; + }, + }; + }, + + + addNodeView() { + return ReactNodeViewRenderer(this.options.view); + }, + + addProseMirrorPlugins() { + return [ + ...(this.parent?.() || []), + LowlightPlugin({ + name: this.name, + lowlight: this.options.lowlight, + defaultLanguage: this.options.defaultLanguage, + }), + ] + }, +}) \ No newline at end of file diff --git a/packages/editor-ext/src/lib/custom-code-block/index.ts b/packages/editor-ext/src/lib/custom-code-block/index.ts new file mode 100644 index 00000000..f6e3470f --- /dev/null +++ b/packages/editor-ext/src/lib/custom-code-block/index.ts @@ -0,0 +1 @@ +export { CustomCodeBlock } from "./custom-code-block"; diff --git a/packages/editor-ext/src/lib/custom-code-block/lowlight-plugin.ts b/packages/editor-ext/src/lib/custom-code-block/lowlight-plugin.ts new file mode 100644 index 00000000..505b8f20 --- /dev/null +++ b/packages/editor-ext/src/lib/custom-code-block/lowlight-plugin.ts @@ -0,0 +1,159 @@ +import { findChildren } from '@tiptap/core' +import type { Node as ProsemirrorNode } from '@tiptap/pm/model' +import { Plugin, PluginKey } from '@tiptap/pm/state' +import { Decoration, DecorationSet } from '@tiptap/pm/view' +// @ts-ignore +import highlight from 'highlight.js/lib/core' + +function parseNodes(nodes: any[], className: string[] = []): { text: string; classes: string[] }[] { + return nodes + .map(node => { + const classes = [...className, ...(node.properties ? node.properties.className : [])] + + if (node.children) { + return parseNodes(node.children, classes) + } + + return { + text: node.value, + classes, + } + }) + .flat() +} + +function getHighlightNodes(result: any) { + // `.value` for lowlight v1, `.children` for lowlight v2 + return result.value || result.children || [] +} + +function registered(aliasOrLanguage: string) { + return Boolean(highlight.getLanguage(aliasOrLanguage)) +} + +function getDecorations({ + doc, + name, + lowlight, + defaultLanguage, +}: { + doc: ProsemirrorNode + name: string + lowlight: any + defaultLanguage: string | null | undefined +}) { + const decorations: Decoration[] = [] + + findChildren(doc, node => node.type.name === name).forEach(block => { + let from = block.pos + 1 + const language = block.node.attrs.language || defaultLanguage + const languages = lowlight.listLanguages() + + const nodes = + language && (languages.includes(language) || registered(language) || lowlight.registered?.(language)) + ? getHighlightNodes(lowlight.highlight(language, block.node.textContent)) + : getHighlightNodes(lowlight.highlightAuto(block.node.textContent)) + + parseNodes(nodes).forEach(node => { + const to = from + node.text.length + + if (node.classes.length) { + const decoration = Decoration.inline(from, to, { + class: node.classes.join(' '), + }) + + decorations.push(decoration) + } + + from = to + }) + }) + + return DecorationSet.create(doc, decorations) +} + +// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type +function isFunction(param: any): param is Function { + return typeof param === 'function' +} + +export function LowlightPlugin({ + name, + lowlight, + defaultLanguage, +}: { + name: string + lowlight: any + defaultLanguage: string | null | undefined +}) { + if (!['highlight', 'highlightAuto', 'listLanguages'].every(api => isFunction(lowlight[api]))) { + throw Error('You should provide an instance of lowlight to use the code-block-lowlight extension') + } + + const lowlightPlugin: Plugin = new Plugin({ + key: new PluginKey('lowlight'), + + state: { + init: (_, { doc }) => + getDecorations({ + doc, + name, + lowlight, + defaultLanguage, + }), + apply: (transaction, decorationSet, oldState, newState) => { + const oldNodeName = oldState.selection.$head.parent.type.name + const newNodeName = newState.selection.$head.parent.type.name + const oldNodes = findChildren(oldState.doc, node => node.type.name === name) + const newNodes = findChildren(newState.doc, node => node.type.name === name) + + if ( + transaction.docChanged && + // Apply decorations if: + // selection includes named node, + ([oldNodeName, newNodeName].includes(name) || + // OR transaction adds/removes named node, + newNodes.length !== oldNodes.length || + // OR transaction has changes that completely encapsulte a node + // (for example, a transaction that affects the entire document). + // Such transactions can happen during collab syncing via y-prosemirror, for example. + transaction.steps.some(step => { + // @ts-ignore + return ( + // @ts-ignore + step.from !== undefined && + // @ts-ignore + step.to !== undefined && + oldNodes.some(node => { + // @ts-ignore + return ( + // @ts-ignore + node.pos >= step.from && + // @ts-ignore + node.pos + node.node.nodeSize <= step.to + ) + }) + ) + })) + ) { + return getDecorations({ + doc: transaction.doc, + name, + lowlight, + defaultLanguage, + }) + } + + return decorationSet.map(transaction.mapping, transaction.doc) + }, + }, + + props: { + decorations(state) { + return lowlightPlugin.getState(state) + }, + }, + }) + + return lowlightPlugin +} \ No newline at end of file diff --git a/packages/editor-ext/src/lib/details/details.ts b/packages/editor-ext/src/lib/details/details.ts index b28c4de7..41c66dca 100644 --- a/packages/editor-ext/src/lib/details/details.ts +++ b/packages/editor-ext/src/lib/details/details.ts @@ -27,6 +27,7 @@ export const Details = Node.create({ content: "detailsSummary detailsContent", defining: true, isolating: true, + // @ts-ignore allowGapCursor: false, addOptions() { return { diff --git a/packages/editor-ext/src/lib/search-and-replace/search-and-replace.ts b/packages/editor-ext/src/lib/search-and-replace/search-and-replace.ts index ca66958f..1ed7632d 100644 --- a/packages/editor-ext/src/lib/search-and-replace/search-and-replace.ts +++ b/packages/editor-ext/src/lib/search-and-replace/search-and-replace.ts @@ -31,6 +31,9 @@ import { import { Node as PMNode, Mark } from "@tiptap/pm/model"; declare module "@tiptap/core" { + interface Storage { + searchAndReplace: SearchAndReplaceStorage; + } interface Commands { search: { /** @@ -184,21 +187,21 @@ const replace = ( if (dispatch) { const tr = state.tr; - + // Get all marks that span the text being replaced const marksSet = new Set(); state.doc.nodesBetween(from, to, (node) => { if (node.isText && node.marks) { - node.marks.forEach(mark => marksSet.add(mark)); + node.marks.forEach((mark) => marksSet.add(mark)); } }); - + const marks = Array.from(marksSet); - + // Delete the old text and insert new text with preserved marks tr.delete(from, to); tr.insert(from, state.schema.text(replaceTerm, marks)); - + dispatch(tr); } }; @@ -215,17 +218,17 @@ const replaceAll = ( // Process replacements in reverse order to avoid position shifting issues for (let i = resultsCopy.length - 1; i >= 0; i -= 1) { const { from, to } = resultsCopy[i]; - + // Get all marks that span the text being replaced const marksSet = new Set(); tr.doc.nodesBetween(from, to, (node) => { if (node.isText && node.marks) { - node.marks.forEach(mark => marksSet.add(mark)); + node.marks.forEach((mark) => marksSet.add(mark)); } }); - + const marks = Array.from(marksSet); - + // Delete and insert with preserved marks tr.delete(from, to); tr.insert(from, tr.doc.type.schema.text(replaceTerm, marks)); @@ -352,10 +355,17 @@ export const SearchAndReplace = Extension.create< // The results will be recalculated by the plugin, but we need to ensure // the index doesn't exceed the new bounds setTimeout(() => { - const newResultsLength = editor.storage.searchAndReplace.results.length; - if (newResultsLength > 0 && editor.storage.searchAndReplace.resultIndex >= newResultsLength) { + const newResultsLength = + editor.storage.searchAndReplace.results.length; + if ( + newResultsLength > 0 && + editor.storage.searchAndReplace.resultIndex >= newResultsLength + ) { // Keep the same position if possible, otherwise go to the last result - editor.storage.searchAndReplace.resultIndex = Math.min(resultIndex, newResultsLength - 1); + editor.storage.searchAndReplace.resultIndex = Math.min( + resultIndex, + newResultsLength - 1, + ); } }, 0); diff --git a/packages/editor-ext/src/lib/table/cell.ts b/packages/editor-ext/src/lib/table/cell.ts index 25a311b9..a96bc7b0 100644 --- a/packages/editor-ext/src/lib/table/cell.ts +++ b/packages/editor-ext/src/lib/table/cell.ts @@ -1,9 +1,10 @@ -import { TableCell as TiptapTableCell } from "@tiptap/extension-table-cell"; +import { TableCell as TiptapTableCell } from "@tiptap/extension-table"; export const TableCell = TiptapTableCell.extend({ name: "tableCell", - content: "(paragraph | heading | bulletList | orderedList | taskList | blockquote | callout | image | video | attachment | mathBlock | details | codeBlock)+", - + content: + "(paragraph | heading | bulletList | orderedList | taskList | blockquote | callout | image | video | attachment | mathBlock | details | codeBlock)+", + addAttributes() { return { ...this.parent?.(), @@ -16,19 +17,21 @@ export const TableCell = TiptapTableCell.extend({ } return { style: `background-color: ${attributes.backgroundColor}`, - 'data-background-color': attributes.backgroundColor, + "data-background-color": attributes.backgroundColor, }; }, }, backgroundColorName: { default: null, - parseHTML: (element) => element.getAttribute('data-background-color-name') || null, + parseHTML: (element) => + element.getAttribute("data-background-color-name") || null, renderHTML: (attributes) => { if (!attributes.backgroundColorName) { return {}; } return { - 'data-background-color-name': attributes.backgroundColorName.toLowerCase(), + "data-background-color-name": + attributes.backgroundColorName.toLowerCase(), }; }, }, diff --git a/packages/editor-ext/src/lib/table/header.ts b/packages/editor-ext/src/lib/table/header.ts index 399a8cf0..6f338be0 100644 --- a/packages/editor-ext/src/lib/table/header.ts +++ b/packages/editor-ext/src/lib/table/header.ts @@ -1,4 +1,4 @@ -import { TableHeader as TiptapTableHeader } from "@tiptap/extension-table-header"; +import { TableHeader as TiptapTableHeader } from "@tiptap/extension-table"; export const TableHeader = TiptapTableHeader.extend({ name: "tableHeader", diff --git a/packages/editor-ext/src/lib/table/row.ts b/packages/editor-ext/src/lib/table/row.ts index 3aa67dcd..c01866e7 100644 --- a/packages/editor-ext/src/lib/table/row.ts +++ b/packages/editor-ext/src/lib/table/row.ts @@ -1,4 +1,4 @@ -import TiptapTableRow from "@tiptap/extension-table-row"; +import { TableRow as TiptapTableRow } from "@tiptap/extension-table"; export const TableRow = TiptapTableRow.extend({ allowGapCursor: false, diff --git a/packages/editor-ext/src/lib/table/table.ts b/packages/editor-ext/src/lib/table/table.ts index 549847b8..19e39977 100644 --- a/packages/editor-ext/src/lib/table/table.ts +++ b/packages/editor-ext/src/lib/table/table.ts @@ -1,29 +1,33 @@ -import Table from "@tiptap/extension-table"; +import { Table } from "@tiptap/extension-table"; import { Editor } from "@tiptap/core"; const LIST_TYPES = ["bulletList", "orderedList", "taskList"]; function isInList(editor: Editor): boolean { const { $from } = editor.state.selection; - + for (let depth = $from.depth; depth > 0; depth--) { const node = $from.node(depth); if (LIST_TYPES.includes(node.type.name)) { return true; } } - + return false; } function handleListIndent(editor: Editor): boolean { - return editor.commands.sinkListItem("listItem") || - editor.commands.sinkListItem("taskItem"); + return ( + editor.commands.sinkListItem("listItem") || + editor.commands.sinkListItem("taskItem") + ); } function handleListOutdent(editor: Editor): boolean { - return editor.commands.liftListItem("listItem") || - editor.commands.liftListItem("taskItem"); + return ( + editor.commands.liftListItem("listItem") || + editor.commands.liftListItem("taskItem") + ); } export const CustomTable = Table.extend({ @@ -62,4 +66,4 @@ export const CustomTable = Table.extend({ }, }; }, -}); \ No newline at end of file +}); diff --git a/packages/editor-ext/src/lib/utils.ts b/packages/editor-ext/src/lib/utils.ts index 31cccc64..27ba8ede 100644 --- a/packages/editor-ext/src/lib/utils.ts +++ b/packages/editor-ext/src/lib/utils.ts @@ -1,10 +1,10 @@ -// @ts-nocheck import { Editor, findParentNode, isTextSelection } from "@tiptap/core"; -import { Selection, Transaction } from "@tiptap/pm/state"; +import { EditorState, Selection, Transaction } from '@tiptap/pm/state'; import { CellSelection, TableMap } from "@tiptap/pm/tables"; import { Node, ResolvedPos } from "@tiptap/pm/model"; -import Table from "@tiptap/extension-table"; +import { Table } from "@tiptap/extension-table"; import { sanitizeUrl as braintreeSanitizeUrl } from "@braintree/sanitize-url"; +import { EditorView } from '@tiptap/pm/view'; export const isRectSelected = (rect: any) => (selection: CellSelection) => { const map = TableMap.get(selection.$anchorCell.node(-1)); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9fdc892..b78ab192 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,18 +22,21 @@ importers: '@docmost/editor-ext': specifier: workspace:* version: link:packages/editor-ext + '@floating-ui/dom': + specifier: ^1.7.3 + version: 1.7.3 '@hocuspocus/extension-redis': - specifier: ^2.15.2 - version: 2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) + specifier: ^3.2.2 + version: 3.2.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) '@hocuspocus/provider': - specifier: ^2.15.2 - version: 2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) + specifier: ^3.2.2 + version: 3.2.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) '@hocuspocus/server': - specifier: ^2.15.2 - version: 2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) + specifier: ^3.2.2 + version: 3.2.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) '@hocuspocus/transformer': - specifier: ^2.15.2 - version: 2.15.2(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)(y-prosemirror@1.2.3(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(yjs@13.6.27) + specifier: ^3.2.2 + version: 3.2.2(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(y-prosemirror@1.2.3(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(yjs@13.6.27) '@joplin/turndown': specifier: ^4.0.74 version: 4.0.74 @@ -44,113 +47,98 @@ importers: specifier: 1.1.0 version: 1.1.0 '@tiptap/core': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/pm@2.14.0) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/pm@3.0.9) '@tiptap/extension-code-block': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) - '@tiptap/extension-code-block-lowlight': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/extension-code-block@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)(highlight.js@11.11.1)(lowlight@3.3.0) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) '@tiptap/extension-collaboration': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)(y-prosemirror@1.2.3(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27)) - '@tiptap/extension-collaboration-cursor': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(y-prosemirror@1.2.3(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(@tiptap/y-tiptap@3.0.0(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(yjs@13.6.27) + '@tiptap/extension-collaboration-caret': + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(@tiptap/y-tiptap@3.0.0(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27)) '@tiptap/extension-color': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/extension-text-style@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/extension-text-style@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))) '@tiptap/extension-document': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) '@tiptap/extension-heading': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) '@tiptap/extension-highlight': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) '@tiptap/extension-history': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/extensions@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)) '@tiptap/extension-image': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) '@tiptap/extension-link': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) + '@tiptap/extension-list': + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) '@tiptap/extension-list-item': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)) '@tiptap/extension-list-keymap': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)) '@tiptap/extension-placeholder': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/extensions@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)) '@tiptap/extension-subscript': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) '@tiptap/extension-superscript': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) '@tiptap/extension-table': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) - '@tiptap/extension-table-cell': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-table-header': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-table-row': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-task-item': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) - '@tiptap/extension-task-list': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) '@tiptap/extension-text': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) '@tiptap/extension-text-align': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) '@tiptap/extension-text-style': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) '@tiptap/extension-typography': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-underline': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) '@tiptap/extension-youtube': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) '@tiptap/html': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(happy-dom@15.11.7) '@tiptap/pm': - specifier: ^2.10.3 - version: 2.14.0 + specifier: ^3.0.9 + version: 3.0.9 '@tiptap/react': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^3.0.9 + version: 3.0.9(@floating-ui/dom@1.7.3)(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tiptap/starter-kit': - specifier: ^2.10.3 - version: 2.14.0 + specifier: ^3.0.9 + version: 3.0.9 '@tiptap/suggestion': - specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) '@types/qrcode': specifier: ^1.5.5 version: 1.5.5 bytes: specifier: ^3.1.2 version: 3.1.2 + core: + specifier: link:highlight.js/lib/core + version: link:highlight.js/lib/core cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -163,6 +151,9 @@ importers: fractional-indexing-jittered: specifier: ^1.0.0 version: 1.0.0 + highlight.js: + specifier: ^11.11.1 + version: 11.11.1 ioredis: specifier: ^5.4.1 version: 5.4.1 @@ -256,7 +247,7 @@ importers: version: 5.80.6(react@18.3.1) '@tiptap/extension-character-count': specifier: ^2.10.3 - version: 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) + version: 2.14.0(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) alfaaz: specifier: ^1.1.0 version: 1.1.0 @@ -692,7 +683,11 @@ importers: specifier: ^8.24.1 version: 8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3) - packages/editor-ext: {} + packages/editor-ext: + dependencies: + '@tiptap/extension-code-block': + specifier: ^3.0.9 + version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) packages: @@ -2186,11 +2181,11 @@ packages: '@fastify/static@8.2.0': resolution: {integrity: sha512-PejC/DtT7p1yo3p+W7LiUtLMsV8fEvxAK15sozHy9t8kwo5r0uLYmhV/inURmGz1SkHZFz/8CNtHLPyhKcx4SQ==} - '@floating-ui/core@1.5.3': - resolution: {integrity: sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==} + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} - '@floating-ui/dom@1.6.3': - resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==} + '@floating-ui/dom@1.7.3': + resolution: {integrity: sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==} '@floating-ui/react-dom@2.1.2': resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} @@ -2204,35 +2199,38 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@floating-ui/utils@0.2.8': resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} - '@hocuspocus/common@2.15.2': - resolution: {integrity: sha512-wU1wxXNnQQMXyeL3mdSDYiQsm/r/QyJVjjQhF7sUBrLnjdsN7bA1cvfcSvJBr1ymrMSeYRmUL3UlQmEHEOaP7w==} + '@hocuspocus/common@3.2.2': + resolution: {integrity: sha512-zOyjooBM9H+mIY6JpvK2eFdY1HAv/CQFO4N+t6ozlDxSHOsQfYSkmqPfv8PqtVC11BVBMLtp6yB6ssp56Dz6Sw==} - '@hocuspocus/extension-redis@2.15.2': - resolution: {integrity: sha512-2BNBLnDEQq2v3uQSidBSdUOIbHhH383SGxn+hmy6tDQfrt2hLE4MwilgDdcCO0FKOCYaJrV7HyKu6/WyzLbAOg==} + '@hocuspocus/extension-redis@3.2.2': + resolution: {integrity: sha512-fcOBBA6Y72KShsmknwZH/IsnV3nLuEpLae3lb/P+mlMYtkXfdWRvfO/BrLkdwaKUrWg0JkVWkAfURTwh3B4pcg==} peerDependencies: y-protocols: ^1.0.6 yjs: ^13.6.8 - '@hocuspocus/provider@2.15.2': - resolution: {integrity: sha512-mdBurviyaUd7bQx4vMIE39WqRJDTpfFelHOVXr7w/jA8G1E7K7lxQ9/DacSrbg+9o8s+1z1+SerZiUjaToaBJg==} + '@hocuspocus/provider@3.2.2': + resolution: {integrity: sha512-Msa3ZFQZ4hAhBX/iMjTMKU7ogCODzB53dLm26OVmIM01iwkIibU11TUEOfV0qSN8g1xvbIFU8yxSrC/Tx/JMBQ==} peerDependencies: y-protocols: ^1.0.6 yjs: ^13.6.8 - '@hocuspocus/server@2.15.2': - resolution: {integrity: sha512-+fLRVswg+bkgfHqJ+wFgywivw3H08WMOtVvJF7dJzWT2ZR/Sc3nDMFh2KqMF6Ygh4z6mt23xr7SKIm3eP1zoLA==} + '@hocuspocus/server@3.2.2': + resolution: {integrity: sha512-uPVyaewsJYYp/U9Zt42Hh3CZsoNtji6Q809jFQQlrYXTOlFNwshErBxpi8hjChla2BvIZn129PgICZeoPdYBbQ==} peerDependencies: y-protocols: ^1.0.6 yjs: ^13.6.8 - '@hocuspocus/transformer@2.15.2': - resolution: {integrity: sha512-FAo/rt0kch+YeBBp/iit74q+4RV6YRjdZXmvE0/Aw+n/nSW1W0ZNGXnhncfm8qP0CuXnss/Aw8dpfEPZKUWDJw==} + '@hocuspocus/transformer@3.2.2': + resolution: {integrity: sha512-HcCLasMbBOU/MaWfb+PCcCKwROj6Zpy2xLbiwqoAJ4tyQvuN5rinWGbXIhevtz7RjfTGMk4L2McCSYVxfjxB7A==} peerDependencies: - '@tiptap/core': ^2.6.4 - '@tiptap/pm': ^2.6.4 + '@tiptap/core': ^3.0.1 + '@tiptap/pm': ^3.0.1 y-prosemirror: ^1.2.1 yjs: ^13.6.8 @@ -2392,6 +2390,9 @@ packages: '@ioredis/commands@1.2.0': resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} + '@ioredis/commands@1.3.0': + resolution: {integrity: sha512-M/T6Zewn7sDaBQEqIZ8Rb+i9y8qfGmq+5SDFSf9sA2lUZTmdDLVdOiQaeDp+Q4wElZ9HG1GAX5KhDaidp6LQsQ==} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -3477,6 +3478,12 @@ packages: '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + '@sesamecare-oss/redlock@1.4.0': + resolution: {integrity: sha512-2z589R+yxKLN4CgKxP1oN4dsg6Y548SE4bVYam/R0kHk7Q9VrQ9l66q+k1ehhSLLY4or9hcchuF9/MhuuZdjJg==} + engines: {node: '>=16'} + peerDependencies: + ioredis: '>=5' + '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -3809,31 +3816,31 @@ packages: peerDependencies: react: ^18 || ^19 - '@tiptap/core@2.14.0': - resolution: {integrity: sha512-MBSMzGYRFlwYCocvx3dU7zpCBSDQ0qWByNtStaEzuBUgzCJ6wn2DP/xG0cMcLmE3Ia0VLM4nwbLOAAvBXOtylA==} + '@tiptap/core@3.0.9': + resolution: {integrity: sha512-1zdDyILerBcD3P0fu8kCtPLOFj0R5utjexCQ2CZ46pckn/Wk4V+WUBARzhG5Yz2JDkmJIUIcmLBVrL6G1rjJWg==} peerDependencies: - '@tiptap/pm': ^2.7.0 + '@tiptap/pm': ^3.0.9 - '@tiptap/extension-blockquote@2.14.0': - resolution: {integrity: sha512-AwqPP0jLYNioKxakiVw0vlfH/ceGFbV+SGoqBbPSGFPRdSbHhxHDNBlTtiThmT3N2PiVwXAD9xislJV+WY4GUA==} + '@tiptap/extension-blockquote@3.0.9': + resolution: {integrity: sha512-dGhMWb6GIjgIUuLQDhSlHT6yB4YvnYqe01nHzEvcbSii75KOcLwboVnqxw4p+gsDZLvZRGv/6bZBJh7GKZa8OQ==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-bold@2.14.0': - resolution: {integrity: sha512-8DWwelH55H8KtLECSIv0wh8x/F/6lpagV/pMvT+Azujad0oqK+1iAPKU/kLgjXbFSkisrpV6KSwQts5neCtfRQ==} + '@tiptap/extension-bold@3.0.9': + resolution: {integrity: sha512-rVULIFt9ZO+fO5ty9zuC3HwY3knxUw7q9JBztpKPfQQCuIJ+iQnOfB8NtI3L8hxVSxhIR1pqr8B3S/8vlpXbVg==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-bubble-menu@2.14.0': - resolution: {integrity: sha512-sN15n0RjPh+2Asvxs7l47hVEvX6c0aPempU8QQWcPUlHoGf1D/XkyHXy6GWVPSxZ5Rj5uAwgKvhHsG/FJ/YGKQ==} + '@tiptap/extension-bubble-menu@3.0.9': + resolution: {integrity: sha512-fZQfdSbKJl3J+Yi+s8NrcLBgXHOaGVD4g+vn+orTPUlZdG9FWvEoon8DexOdK9OvYnW6QMM7kS8whOgpogVyUQ==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 - '@tiptap/extension-bullet-list@2.14.0': - resolution: {integrity: sha512-SWnL4bP8Mm/mWN42AMQNoqYE0V6LgSBTVsHwwAki2wIUQdr9HyoAnohvHy3IME56NMwoyZyo+Mzl45wOqUxziA==} + '@tiptap/extension-bullet-list@3.0.9': + resolution: {integrity: sha512-Aob5TVfrtoEzfTm3wl7lognmWia6EEilOxLihSGISCvI4FTndJg+mwhumduQeYCLWkF9i/DR87m2/3EbjR3R4Q==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/extension-list': ^3.0.9 '@tiptap/extension-character-count@2.14.0': resolution: {integrity: sha512-aTCobbF9yIXOntVTdjzJ4G5V0TJKeeIDW8RFMdTVr5o0R/woSZ27cXiPGdS7XxpN6gY9vlNzYe79CcNBDTzLfA==} @@ -3841,239 +3848,227 @@ packages: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-code-block-lowlight@2.14.0': - resolution: {integrity: sha512-jGcVOkcThwzLdXf56zYkmB0tcB8Xy3S+ImS3kDzaccdem6qCG05JeE33K8bfPqh99OU1QqO9XdHNO9x77A2jug==} + '@tiptap/extension-code-block@3.0.9': + resolution: {integrity: sha512-H692k9sHIE3rR3S+BIknQXsLb8HSojk+7gQ5DV0hYajSzpJ02OUL4AnNlpMuSgZuaq+ljpN4sT8kCIzIE1kQxw==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/extension-code-block': ^2.7.0 - '@tiptap/pm': ^2.7.0 - highlight.js: ^11 - lowlight: ^2 || ^3 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 - '@tiptap/extension-code-block@2.14.0': - resolution: {integrity: sha512-LRYYZeh8U2XgfTsJ4houB9s9cVRt7PRfVa4MaCeOYKfowVOKQh67yV5oom8Azk9XrMPkPxDmMmdPAEPxeVYFvw==} + '@tiptap/extension-code@3.0.9': + resolution: {integrity: sha512-jMo7crwLIefwy13WI2FzxlyJN9AbLNsESFbJuv/KPzjpN7uzPKYsE33Uy2IZD5hPoHtA5UmAUfbz0HzWtWy5Yw==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-code@2.14.0': - resolution: {integrity: sha512-kyo02mnzqgwXayMcyRA/fHQgb+nMmQQpIt1irZwjtEoFZshA7NnY/6b5SJmRcxQ4/X4r2Y2Ha2sWmOcEkLmt4A==} + '@tiptap/extension-collaboration-caret@3.0.9': + resolution: {integrity: sha512-TkCikMZq1bV0NasT5tWl6IwPHYCvriaL8luGH9QQwWOTOgEJ07TxhXwWBCo7mybwu2FRuqiY8X2QDzDe7hiIbQ==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 + '@tiptap/y-tiptap': ^3.0.0-beta.3 - '@tiptap/extension-collaboration-cursor@2.14.0': - resolution: {integrity: sha512-TfdHPW/npLSsu9AMSyPhA9I084jNhou/Xph0HgzlibEOeeGZP9EAmozAceTv8YdFytoUqW/T7YKeoMEkVSJwqA==} + '@tiptap/extension-collaboration@3.0.9': + resolution: {integrity: sha512-zACNmSFuEMp1G89mFs18wuQzfk769HJMFr1z/SiPw1/yM2By8uy7UKgMqVmmQ7OYTIIvCE8zq0whyBrOUpnOJg==} peerDependencies: - '@tiptap/core': ^2.7.0 - y-prosemirror: ^1.2.11 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 + '@tiptap/y-tiptap': ^3.0.0-beta.3 + yjs: ^13 - '@tiptap/extension-collaboration@2.14.0': - resolution: {integrity: sha512-eYErqs/YwS5yifyPg511Tx8Qy7AOJTqzVpS0RXVKFWTJvwK2dRc77LqThdpouO6j2utjFf44vf80ti1+9wetZA==} + '@tiptap/extension-color@3.0.9': + resolution: {integrity: sha512-cA68vy5lZwBVqBLMEDL6rjKIBPXRV+sUjmV+UokJcguAUTerHLK0dAHcbKRp9hJ6KF6z1KAOC7u3ZBhyjibC1w==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - y-prosemirror: ^1.2.11 + '@tiptap/extension-text-style': ^3.0.9 - '@tiptap/extension-color@2.14.0': - resolution: {integrity: sha512-sY+eWIbkCMAwOGH7pQ1ZuNqkqMaaHE+TsJwA7bQ6VhI2gGhhqGjT/DfmJMUen8FSdzuPoWlgtuXXCeOO6FOduw==} + '@tiptap/extension-document@3.0.9': + resolution: {integrity: sha512-DB/R5e6QvuGhY8EhCkfNjR2xQfz/TOWoxfQGhDuy5U+oK3WBwCcHq9t5+nbSCMHtKfi/i49aHKDvv7TQCpuP0w==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/extension-text-style': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-document@2.14.0': - resolution: {integrity: sha512-qwEgpPIJ3AgXdEtRTr88hODbXRdt14VAwLj27PTSqexB5V7Ra1Jy7iQDhqRwBCoUomVywBsWYxkSuDisSRG+9w==} + '@tiptap/extension-dropcursor@3.0.9': + resolution: {integrity: sha512-+P+1nfeCtPLj3OHNiATOL3UyM2omZ8+ac6MKm+FxunRAZZsHzbEFUYYdLF7prEmaf0z0c1k4LKSWpbrIX92pKA==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/extensions': ^3.0.9 - '@tiptap/extension-dropcursor@2.14.0': - resolution: {integrity: sha512-FIh5cdPuoPKvZ0GqSKhzMZGixm05ac3hSgqhMNCBZmXX459qBUI9CvDl/uzSnY9koBDeLVV3HYMthWQQLSXl9A==} + '@tiptap/extension-floating-menu@3.0.9': + resolution: {integrity: sha512-WYQ3mW6G0zxoni6TegpQ46a1Qe1zj8Ev5sBH79H4Mbf0qsc7MOq07jLjipv9M0EJJPUi0cfkQlwfV41nH1ue/g==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@floating-ui/dom': ^1.0.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 - '@tiptap/extension-floating-menu@2.14.0': - resolution: {integrity: sha512-Khx7M7RfZlD1/T/PUlpJmao6FtEBa2L6td2hhaW1USflwGJGk0U/ud4UEqh+aZoJZrkot/EMhEvzmORF3nq+xw==} + '@tiptap/extension-gapcursor@3.0.9': + resolution: {integrity: sha512-+jy7Z/V6nOtvWin+zJYYoRwEYDOHDlF34Ey1T7A8aRcJlPeAQhoB1Ek7R3Rd3nsuByz70IfQapDvkbhY1nkNvQ==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@tiptap/extensions': ^3.0.9 - '@tiptap/extension-gapcursor@2.14.0': - resolution: {integrity: sha512-as+SqC39FRshw4Fm1XVlrdSXveiusf5xiC4nuefLmXsUxO7Yx67x8jS0/VQbxWTLHZ6R1YEW8prLtnxGmVLCAQ==} + '@tiptap/extension-hard-break@3.0.9': + resolution: {integrity: sha512-PWNYsUwVsMWt/R5/OWjfGb+7DQT0DvH+1owBimRq0pWZepg8qkz1jdPGgsRmUFyERRsXeEpgj3VaQfrgbyUfrA==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-hard-break@2.14.0': - resolution: {integrity: sha512-A8c8n8881iBq3AusNqibh6Hloybr+FgYdg4Lg4jNxbbEaL0WhyLFge1bWlGVpbHXFqdv5YldMUAu6Rop3FhNvw==} + '@tiptap/extension-heading@3.0.9': + resolution: {integrity: sha512-LRLCIt87fvDZ5CdkinzhkCwRz5ax6FlsjJzG32MJ3wXyvVslqeLXBvH28JFUZEyzgcd/SnYmYxnef5+yvAX61g==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-heading@2.14.0': - resolution: {integrity: sha512-vM//6G3Ox3mxPv9eilhrDqylELCc8kEP1aQ4xUuOw7vCidjNtGggOa1ERnnpV2dCa2A9E8y4FHtN4Xh29stXQg==} + '@tiptap/extension-highlight@3.0.9': + resolution: {integrity: sha512-22cCRUMRCLYiGMw1boLGygAghtMs/QjC7Y4HLfwFurJ4d8S8FDD1YU6Iz6mzINIfhqEvke2u+9Wi3AydM/SIow==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-highlight@2.14.0': - resolution: {integrity: sha512-21eouZEuCBFrpGeefnnU9yJ1SH32L9gSlT9MOJXBSXCX5HFskNLdN8Q4cQSyRXSt6r5kEz1GG5a4I805/U2TMQ==} + '@tiptap/extension-history@3.0.9': + resolution: {integrity: sha512-wTSNy85Kla77y9zSUrNEGUVkqCWK9fU+Dsq8wH1A7Xrgi7vBPGkzhy8jpA8+CYtd6xI6c9IiuZrX+x44vjBlSw==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/extensions': ^3.0.9 - '@tiptap/extension-history@2.14.0': - resolution: {integrity: sha512-/qnOHQFCEPfkb3caykqd+sqzEC2gx30EQB/mM7+5kIG7CQy7XXaGjFAEaqzE1xJ783Q2E7GVk4JxWM+3NhYSLw==} + '@tiptap/extension-horizontal-rule@3.0.9': + resolution: {integrity: sha512-jPNCOte0y9R3Y4PiEA/CRGgRk8WoL700Mnn8NPVHa4juUjvMl1qxL8hdnW/k8cxhrBA8tV0qcq82+/Vqq6jSfA==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 - '@tiptap/extension-horizontal-rule@2.14.0': - resolution: {integrity: sha512-OrKWgHOhmJtVHjPYaEJetNLiNEvrI85lTrGxzeQa+a8ACb93h4svyHe9J+LHs5pKkXDQFcpYEXJntu0LVLLiDw==} + '@tiptap/extension-image@3.0.9': + resolution: {integrity: sha512-/2igN/oIF58zqX5fcg00bf6qGLcQyXHysl5I8GiurkvO95d+SQTlYbJneSRUpt6CgrUKbhRnMBPVubmapgg+Zw==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-image@2.14.0': - resolution: {integrity: sha512-pYCUzZBgsxIvVGTzuW03cPz6PIrAo26xpoxqq4W090uMVoK0SgY5W5y0IqCdw4QyLkJ2/oNSFNc2EP9jVi1CcQ==} + '@tiptap/extension-italic@3.0.9': + resolution: {integrity: sha512-Gt4FbMtZerzKpit8+FvIjIQ3CBD559/FFC+kOT9y8JHlINeqWyh/bgHuaA/9/XtHphOQiA7NDwOiuPh4KIKpqA==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-italic@2.14.0': - resolution: {integrity: sha512-yEw2S+smoVR8DMYQMAWckVW2Sstf7z5+GBZ8zm8NMGhMKb1JFCPZUv5KTTIPnq7ZrKuuZHvjN9+Ef1dRYD8T2A==} + '@tiptap/extension-link@3.0.9': + resolution: {integrity: sha512-cOsG3vpct7/JuenxCePDj5dlaSUEe2eK/g/jlRixgW4Llx5DvG2yj8+gha4MHdCUp/MrUBR4M+NJk1dOOSKXGw==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 - '@tiptap/extension-link@2.14.0': - resolution: {integrity: sha512-fsqW7eRD2xoD6xy7eFrNPAdIuZ3eicA4jKC45Vcft/Xky0DJoIehlVBLxsPbfmv3f27EBrtPkg5+msLXkLyzJA==} + '@tiptap/extension-list-item@3.0.9': + resolution: {integrity: sha512-K+ogk1BH/eYhsK9nSTXNdIXlxQcXzty6h1QFiZNr9XmaLk+q4NZFHR5FVz3EJ7QXyw+Gv/2FQn+T2Q/GpbMxZQ==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@tiptap/extension-list': ^3.0.9 - '@tiptap/extension-list-item@2.14.0': - resolution: {integrity: sha512-t1jXDPEd82sC6vZVE/12/CB52uuiydCIcRfwdh21xNgBMckToKO9S0K6XEp4ROtrKQdlIH2JDVPfpUBvVrYN8Q==} + '@tiptap/extension-list-keymap@3.0.9': + resolution: {integrity: sha512-naz4+EFzLN695f53GATiglPOc5SOLBm1DNhhUHZNlrUVfDtKmrdbo8t9a/NhAE6Ne/pfg5tbuS+OKuvbJaJcAg==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/extension-list': ^3.0.9 - '@tiptap/extension-list-keymap@2.14.0': - resolution: {integrity: sha512-1M+MyX7yELwdzPgkeQ2Mx2+BImi5I9sKRaAsPthjVNVcH7W6QNCFUPQA0y18Bq6LhqthzD3lhd4G52ABLR+UgA==} + '@tiptap/extension-list@3.0.9': + resolution: {integrity: sha512-y5JQoFmVR+6FhDdEz2oFIMkURSRSDhCtsrlNWdUpSTGnTAa2WZT7nEhHcIMSGvYU3t0fkfLQ9yTMSaQZFa5GLA==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 - '@tiptap/extension-ordered-list@2.14.0': - resolution: {integrity: sha512-QUZcyuW9AKvSfpFHcGmbyRCqxcpY0VNf0xipEtogxbA+JDDw3ZSPqU1dUgz9wk00RahPTwNDdY5aVjdQ5N4N9Q==} + '@tiptap/extension-ordered-list@3.0.9': + resolution: {integrity: sha512-ACubdGc/y/rKPEgHTO7hDSg547wRRA+Es7c/rQgjrkpI///LBJQfixyUvNg2UNNPttNsavF/CUwhshCeo9MeBA==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/extension-list': ^3.0.9 - '@tiptap/extension-paragraph@2.14.0': - resolution: {integrity: sha512-bsQesVpgvDS2e+wr2fp59QO7rWRp2FqcJvBafwXS3Br9U5Mx3eFYryx4wC7cUnhlhUwX5pmaoA7zISgV9dZDgg==} + '@tiptap/extension-paragraph@3.0.9': + resolution: {integrity: sha512-K5zGg4zLxxqAG0BgtRpLvKclYSGoSSuU1Fza0M5MwUgrFA0S2q4JnLB1czQ77S4pfb3hpScIe50fwJzZmIUEQw==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-placeholder@2.14.0': - resolution: {integrity: sha512-xzfjHvuukbch4i5O/5uyS2K2QgNEaMKi6e6GExTTgVwnFjKfJmgTqee33tt5JCqSItBvtSZlU3SX/vpiaIof+w==} + '@tiptap/extension-placeholder@3.0.9': + resolution: {integrity: sha512-OgDVijDrNFDJpe/1/yMx6VFEmGBt0vE6ZWw5kGkM4NVfOxhRvv6mSZXio269dc9oBSjmyTISKaI1JAYVCfyJIw==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@tiptap/extensions': ^3.0.9 - '@tiptap/extension-strike@2.14.0': - resolution: {integrity: sha512-rD5d/IL3XPfBOrHRHxt+b+0X1jbIbWONGiad/3sX0ZYQD3PandtCWboH40r/J5tFksebuY12dVYyYQKgLpDBOQ==} + '@tiptap/extension-strike@3.0.9': + resolution: {integrity: sha512-2TBQ9P/FGe+/34ckfwP+eCdb4vbxDVZ5qD0piDIR9Ws5QI5IdtW90pNO4roxiPeRdVFrhTbFPEIuL0tg4NQRmg==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-subscript@2.14.0': - resolution: {integrity: sha512-1gQucSZ6WqhKukc8YA7ZfQzBYaVY00F6G7+trD2iWSm6EpiabaUVP0vMjuonIiujTioEwe04KmZuC9ZLbEU9dQ==} + '@tiptap/extension-subscript@3.0.9': + resolution: {integrity: sha512-FJi6TH5VnAGtqD7c8TX0JJGkabVTC69lEoSel8RUbK9P+NHk0hh1PEyCjHSNhGinepoB6GIi6+skvXHIkJb5xw==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 - '@tiptap/extension-superscript@2.14.0': - resolution: {integrity: sha512-BnsqY9TxN15KxxoX1rulL0sV0Wu3umD4Un0E90LZ5G/QRrVUeohAuOiraqRJ4GnJPVJBR2H0+7Sg5sKqYuIpnQ==} + '@tiptap/extension-superscript@3.0.9': + resolution: {integrity: sha512-an3ZLXkgO9eLxRDeWelxlzCSdGlVptPMfcg/d315SnjBKRhXJbBirLxQsYfb5CF/cGJ56Qj3TvewfKPITP5POw==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 - '@tiptap/extension-table-cell@2.14.0': - resolution: {integrity: sha512-DkSNAAkMI/ymPgO8y8Gv0MDVcbd2gk7xrSyicIDNoDFFXp15VasInGW8mvyM+CgvlurGB2N+PkYncPtfb4XNuQ==} + '@tiptap/extension-table@3.0.9': + resolution: {integrity: sha512-jygDvj9MIwMlzs2c+4MZwXCXI6sc7LcKgPFoJ93qiCn6CZrDwaX3XzxXi0VAg7MexsUi1nVaGZQk/gv+Pf3rKw==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 - '@tiptap/extension-table-header@2.14.0': - resolution: {integrity: sha512-wX6/+t0iCo3KrqK2OjK0vbFeL76Pq+VpobGt+oM8lcxsENnsa6a0s3wdd1QEVLVPlj+WMFQggAG80Rf17+iDxA==} + '@tiptap/extension-text-align@3.0.9': + resolution: {integrity: sha512-QQBk8orIdntL3tPzGkKIqEogqArvO/x4dfvbAA2K0DqvS9uGJ3Qp4X6Twv+BIHLjeyhZl/z48vEMB+bjwvqg+w==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-table-row@2.14.0': - resolution: {integrity: sha512-a1GvCIju9xETIQu664lVQNftHqpPdRmwYp+1QzY82v3zHClso+tTLPeBSlbDdUscSmv3yZXgGML20IiOoR2l2Q==} + '@tiptap/extension-text-style@3.0.9': + resolution: {integrity: sha512-x7SZLS537c7w789n8re0IktmkBZqz98dux/hwpFAcC4oL06YPjFG7Dy9mAiKcsKqKWI0eAyTQvMybz+TJusBbw==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-table@2.14.0': - resolution: {integrity: sha512-X/wH3XKxi5+G7cB+lHt3fPMWIJ30IBkzrJZYapJ8d4p2JxMNIU1Nyu+8K6204d0hF6SVWY8hvb/Jq/WgHtoCFA==} + '@tiptap/extension-text@3.0.9': + resolution: {integrity: sha512-yWdz4aW1nu5YGcinxfu3FXiwMnP/7jp+s7dFXhq9m/6zhDUD2+qyUwhJfIU4Tcz+BGdVHqoNgOA3QXLMA6jyFA==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-task-item@2.14.0': - resolution: {integrity: sha512-MFE928s1J2ACyjOlkx52D/+r6aqz6c516C0tvnP2vzrkijFaSMNY4Xg7L1wTinzIdijh184AYQpyw7LezJa1ug==} + '@tiptap/extension-typography@3.0.9': + resolution: {integrity: sha512-vlOdZidm05AJJ2tMJXVh9ICtlutbvs+2+A7nmsGAnAqbErcleFYimaLFaWucCPsPnUz04pa4qMtW8jF2WIJQYg==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-task-list@2.14.0': - resolution: {integrity: sha512-o2VELXgkDIHS15pnF1W2OFfxZGvo9V6RcwjzCYUS0mqMF9TTbfHwddRcv4t3pifpMO3sWhspVARavJAGaP5zdQ==} + '@tiptap/extension-underline@3.0.9': + resolution: {integrity: sha512-xLR5NbnxlEJmvfb4Aj8wCbTmh/ycnPsSDeP8+TAsdAYxypSA6BP6G0t4d4NWreqAq+tq6QV6Eh0+YDN0G1VZxw==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-text-align@2.14.0': - resolution: {integrity: sha512-9Wth4sAq2lYVWvQA0Qy095fsnPEavBv1FKWzVEyurwEQB7ZQsf/MRGmCNFnUXXy12w1G9UOanS4KkJ4C64+Ccw==} + '@tiptap/extension-youtube@3.0.9': + resolution: {integrity: sha512-9buHygO7zPOCzuR65FgenKwwk2BrcBRelin5xtC+TweugKDXY9+XmvKnGrY6Lz12dxbFh+G4RAhWMZHFt+gBIQ==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 - '@tiptap/extension-text-style@2.14.0': - resolution: {integrity: sha512-dl0oi2i0rjLpBqTf4wGy6SLidvPpjxLcmX727pwJlCklkFJVDf8wSFeD4ddxJXiD2Rwef0D/lkcwXSY73CoDcA==} + '@tiptap/extensions@3.0.9': + resolution: {integrity: sha512-IyTcPnZXUf0nxDkC+CCWh10vzn81Kq50euV/ivk8IyPr15hxPiT3Zk1LmCI10Pqf4Bwgz38XUIWtToDfIeEgpg==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 - '@tiptap/extension-text@2.14.0': - resolution: {integrity: sha512-rHny566nGZHq61zRLwQ9BPG55W/O+eDKwUJl+LhrLiVWwzpvAl9QQYixtoxJKOY48VK41PKwxe3bgDYgNs/Fhg==} + '@tiptap/html@3.0.9': + resolution: {integrity: sha512-DJotl3aHrfxoOlyNsOhBPuSMsghm1pv/vgHQvo1MxgP0+sBpx7zjxMuydMU87ywGcgaEpUSbE52NJQLgtbXJ5A==} peerDependencies: - '@tiptap/core': ^2.7.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 + happy-dom: ^18.0.1 - '@tiptap/extension-typography@2.14.0': - resolution: {integrity: sha512-1pokT94zu1ogJEmGNR+LwjR08iUbO9NZvm3SfPyXc5S1uoQgX3BE5LEwCRtu0Uu528CL9/Pq27wyYkYiSVM8FQ==} + '@tiptap/pm@3.0.9': + resolution: {integrity: sha512-cJdnpGyirRxwi6M4IkyapEK/jhcjFXdfX3uhJp/4uVH1dynNXalV0gE/YnH/yt55kzwvG9OUrwOQt+t1iXgNog==} + + '@tiptap/react@3.0.9': + resolution: {integrity: sha512-BbvWPSgYGvd9m8fPXKI81gf9KP+1SMCPpscbtbbhPyxiW2ziY+jwo+i7MwVI73P89hWAJCy/43UnOde438HmOA==} peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-underline@2.14.0': - resolution: {integrity: sha512-rlBasbwElFikaL5qPyp3OeoEBH2p9Dve0K6liqIWF4i9cECH2Bm53y2S0enVEe01hmgQEWmoYK+fq67rxr3XsQ==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-youtube@2.14.0': - resolution: {integrity: sha512-kryHjsjlIV2B6rS0Mnv9AqAyCCaeNWE1XDAWyYfhWQSmQkfaxSZU3rMnh3BMvSsVsdv5mtyxyBqBTrQA2sBSaw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/html@2.14.0': - resolution: {integrity: sha512-Lw6mb3yJTsGd+q23KLKVJRpsT/0BEcKsUxzaEKimunKrZknZLsHVbZNa2hxS0IzaJqDogG2+NRutpD/E2NJGDg==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/pm@2.14.0': - resolution: {integrity: sha512-cnsfaIlvTFCDtLP/A2Fd3LmpttgY0O/tuTM2fC71vetONz83wUTYT+aD9uvxdX0GkSocoh840b0TsEazbBxhpA==} - - '@tiptap/react@2.14.0': - resolution: {integrity: sha512-6mtksbT2+EWXFLdHVFag9PSoh0GXPmL97Cm+4sJoyECUmBkAyoErapAccmZIljyMaVIHBYpYkNdp9Pw1B73ezw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tiptap/starter-kit@2.14.0': - resolution: {integrity: sha512-Z1bKAfHl14quRI3McmdU+bs675jp6/iexEQTI9M9oHa6l3McFF38g9N3xRpPPX02MX83DghsUPupndUW/yJvEQ==} + '@tiptap/starter-kit@3.0.9': + resolution: {integrity: sha512-CYg6tV5fYOvkP1gyATkJJj+nFYmwjDKLipQc/r0D/tHKypxefENrm4G7mf4B78zsB/izfk5mW3iujvyeod6EcQ==} - '@tiptap/suggestion@2.14.0': - resolution: {integrity: sha512-AXzEw0KYIyg5id8gz5geIffnBtkZqan5MWe29rGo3gXTfKH+Ik8tWbZdnlMVheycsUCllrymDRei4zw9DqVqkQ==} + '@tiptap/suggestion@3.0.9': + resolution: {integrity: sha512-irthqfUybezo3IwR6AXvyyTOtkzwfvvst58VXZtTnR1nN6NEcrs3TQoY3bGKGbN83bdiquKh6aU2nLnZfAhoXg==} peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 + '@tiptap/core': ^3.0.9 + '@tiptap/pm': ^3.0.9 + + '@tiptap/y-tiptap@3.0.0': + resolution: {integrity: sha512-HIeJZCj+KYJde2x6fONzo4o6kd7gW7eonwhQsv2p2VQnUgwNXMVhN+D6Z3AH/2i541Sq33y1PO4U/1ThCPjqbA==} + engines: {node: '>=16.0.0', npm: '>=8.0.0'} + peerDependencies: + prosemirror-model: ^1.7.1 + prosemirror-state: ^1.2.3 + prosemirror-view: ^1.9.10 + y-protocols: ^1.0.1 + yjs: ^13.5.38 '@tokenizer/inflate@0.2.7': resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} @@ -4927,9 +4922,6 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -5602,10 +5594,6 @@ packages: delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - denque@1.5.1: - resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==} - engines: {node: '>=0.10'} - denque@2.1.0: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} @@ -5770,10 +5758,6 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@5.0.0: - resolution: {integrity: sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==} - engines: {node: '>=0.12'} - entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -6456,14 +6440,14 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ioredis@4.28.5: - resolution: {integrity: sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==} - engines: {node: '>=6'} - ioredis@5.4.1: resolution: {integrity: sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==} engines: {node: '>=12.22.0'} + ioredis@5.7.0: + resolution: {integrity: sha512-NUcA93i1lukyXU+riqEyPtSEkyFq8tX90uL659J+qpCZ3rEdViB/APC58oAhIh3+bJln2hzdlZbBZsGNrlsR8g==} + engines: {node: '>=12.22.0'} + ipaddr.js@2.2.0: resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} engines: {node: '>= 10'} @@ -7046,11 +7030,6 @@ packages: engines: {node: '>=16'} hasBin: true - lib0@0.2.98: - resolution: {integrity: sha512-XteTiNO0qEXqqweWx+b21p/fBnNHUA1NwAtJNJek1oPrewEZs2uiT4gWivHKr9GqCjDPAhchz0UQO8NwU3bBNA==} - engines: {node: '>=16'} - hasBin: true - libphonenumber-js@1.10.58: resolution: {integrity: sha512-53A0IpJFL9LdHbpeatwizf8KSwPICrqn9H0g3Y7WQ+Jgeu9cQ4Ew3WrRtrLBu/CX2lXd5+rgT01/tGlkbkzOjw==} @@ -7105,9 +7084,6 @@ packages: lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - lodash.flatten@4.4.0: - resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} - lodash.includes@4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} @@ -7703,10 +7679,6 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -8128,8 +8100,8 @@ packages: prosemirror-schema-basic@1.2.3: resolution: {integrity: sha512-h+H0OQwZVqMon1PNn0AG9cTfx513zgIG2DY00eJ00Yvgb3UD+GQ/VlWW5rcaxacpCGT1Yx8nuhwXk4+QbXUfJA==} - prosemirror-schema-list@1.4.1: - resolution: {integrity: sha512-jbDyaP/6AFfDfu70VzySsD75Om2t3sXTOdl5+31Wlxlg62td1haUpty/ybajSfJ1pkGadlOfwQq9kgW5IMo1Rg==} + prosemirror-schema-list@1.5.1: + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} @@ -8382,9 +8354,6 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} - redis-commands@1.7.0: - resolution: {integrity: sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==} - redis-errors@1.2.0: resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} engines: {node: '>=4'} @@ -8393,10 +8362,6 @@ packages: resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} engines: {node: '>=4'} - redlock@4.2.0: - resolution: {integrity: sha512-j+oQlG+dOwcetUt2WJWttu4CZVeRzUrcVcISFmEmfyuwCVSJ93rDT7YSgg7H7rnxwoRyk/jU46kycVka5tW7jA==} - engines: {node: '>=8.0.0'} - redux@4.2.1: resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} @@ -9267,6 +9232,11 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 + use-sync-external-store@1.5.0: + resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + utf8-byte-length@1.0.4: resolution: {integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==} @@ -9659,10 +9629,6 @@ packages: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} - zeed-dom@0.15.1: - resolution: {integrity: sha512-dtZ0aQSFyZmoJS0m06/xBN1SazUBPL5HpzlAcs/KcRW0rzadYw12deQBjeMhGKMMeGEp7bA9vmikMLaO4exBcg==} - engines: {node: '>=14.13.1'} - zod@3.25.56: resolution: {integrity: sha512-rd6eEF3BTNvQnR2e2wwolfTmUTnp70aUTqr0oaGbHifzC3BKJsoV+Gat8vxUMR1hwOKBs6El+qWehrHbCpW6SQ==} @@ -11844,18 +11810,18 @@ snapshots: fastq: 1.17.1 glob: 11.0.1 - '@floating-ui/core@1.5.3': + '@floating-ui/core@1.7.3': dependencies: - '@floating-ui/utils': 0.2.8 + '@floating-ui/utils': 0.2.10 - '@floating-ui/dom@1.6.3': + '@floating-ui/dom@1.7.3': dependencies: - '@floating-ui/core': 1.5.3 - '@floating-ui/utils': 0.2.8 + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.6.3 + '@floating-ui/dom': 1.7.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -11867,19 +11833,21 @@ snapshots: react-dom: 18.3.1(react@18.3.1) tabbable: 6.2.0 + '@floating-ui/utils@0.2.10': {} + '@floating-ui/utils@0.2.8': {} - '@hocuspocus/common@2.15.2': + '@hocuspocus/common@3.2.2': dependencies: - lib0: 0.2.98 + lib0: 0.2.108 - '@hocuspocus/extension-redis@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27)': + '@hocuspocus/extension-redis@3.2.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27)': dependencies: - '@hocuspocus/server': 2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) - ioredis: 4.28.5 + '@hocuspocus/server': 3.2.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) + '@sesamecare-oss/redlock': 1.4.0(ioredis@5.7.0) + ioredis: 5.7.0 kleur: 4.1.5 lodash.debounce: 4.0.8 - redlock: 4.2.0 uuid: 11.1.0 y-protocols: 1.0.6(yjs@13.6.27) yjs: 13.6.27 @@ -11888,11 +11856,11 @@ snapshots: - supports-color - utf-8-validate - '@hocuspocus/provider@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27)': + '@hocuspocus/provider@3.2.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27)': dependencies: - '@hocuspocus/common': 2.15.2 + '@hocuspocus/common': 3.2.2 '@lifeomic/attempt': 3.0.3 - lib0: 0.2.98 + lib0: 0.2.108 ws: 8.18.2 y-protocols: 1.0.6(yjs@13.6.27) yjs: 13.6.27 @@ -11900,12 +11868,12 @@ snapshots: - bufferutil - utf-8-validate - '@hocuspocus/server@2.15.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27)': + '@hocuspocus/server@3.2.2(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27)': dependencies: - '@hocuspocus/common': 2.15.2 + '@hocuspocus/common': 3.2.2 async-lock: 1.4.1 kleur: 4.1.5 - lib0: 0.2.98 + lib0: 0.2.108 uuid: 11.1.0 ws: 8.18.2 y-protocols: 1.0.6(yjs@13.6.27) @@ -11914,11 +11882,11 @@ snapshots: - bufferutil - utf-8-validate - '@hocuspocus/transformer@2.15.2(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)(y-prosemirror@1.2.3(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(yjs@13.6.27)': + '@hocuspocus/transformer@3.2.2(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(y-prosemirror@1.2.3(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(yjs@13.6.27)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 - '@tiptap/starter-kit': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 + '@tiptap/starter-kit': 3.0.9 y-prosemirror: 1.2.3(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) yjs: 13.6.27 @@ -12081,6 +12049,8 @@ snapshots: '@ioredis/commands@1.2.0': {} + '@ioredis/commands@1.3.0': {} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -13185,6 +13155,10 @@ snapshots: domhandler: 5.0.3 selderee: 0.11.0 + '@sesamecare-oss/redlock@1.4.0(ioredis@5.7.0)': + dependencies: + ioredis: 5.7.0 + '@sinclair/typebox@0.27.8': {} '@sindresorhus/slugify@1.1.0': @@ -13633,212 +13607,194 @@ snapshots: '@tanstack/query-core': 5.80.6 react: 18.3.1 - '@tiptap/core@2.14.0(@tiptap/pm@2.14.0)': + '@tiptap/core@3.0.9(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/pm': 2.14.0 + '@tiptap/pm': 3.0.9 - '@tiptap/extension-blockquote@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-blockquote@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-bold@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-bold@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-bubble-menu@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': + '@tiptap/extension-bubble-menu@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 - tippy.js: 6.3.7 + '@floating-ui/dom': 1.7.3 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 + optional: true - '@tiptap/extension-bullet-list@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-bullet-list@3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/extension-list': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) - '@tiptap/extension-character-count@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': + '@tiptap/extension-character-count@2.14.0(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 - '@tiptap/extension-code-block-lowlight@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/extension-code-block@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)(highlight.js@11.11.1)(lowlight@3.3.0)': + '@tiptap/extension-code-block@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/extension-code-block': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 - highlight.js: 11.11.1 - lowlight: 3.3.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 - '@tiptap/extension-code-block@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': + '@tiptap/extension-code@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-code@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-collaboration-caret@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(@tiptap/y-tiptap@3.0.0(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 + '@tiptap/y-tiptap': 3.0.0(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) - '@tiptap/extension-collaboration-cursor@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(y-prosemirror@1.2.3(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))': + '@tiptap/extension-collaboration@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(@tiptap/y-tiptap@3.0.0(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))(yjs@13.6.27)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - y-prosemirror: 1.2.3(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 + '@tiptap/y-tiptap': 3.0.0(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) + yjs: 13.6.27 - '@tiptap/extension-collaboration@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)(y-prosemirror@1.2.3(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27))': + '@tiptap/extension-color@3.0.9(@tiptap/extension-text-style@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 - y-prosemirror: 1.2.3(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27) + '@tiptap/extension-text-style': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) - '@tiptap/extension-color@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/extension-text-style@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)))': + '@tiptap/extension-document@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/extension-text-style': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-document@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-dropcursor@3.0.9(@tiptap/extensions@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/extensions': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) - '@tiptap/extension-dropcursor@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': + '@tiptap/extension-floating-menu@3.0.9(@floating-ui/dom@1.7.3)(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 + '@floating-ui/dom': 1.7.3 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 + optional: true - '@tiptap/extension-floating-menu@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': + '@tiptap/extension-gapcursor@3.0.9(@tiptap/extensions@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 - tippy.js: 6.3.7 + '@tiptap/extensions': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) - '@tiptap/extension-gapcursor@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': + '@tiptap/extension-hard-break@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-hard-break@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-heading@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-heading@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-highlight@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-highlight@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-history@3.0.9(@tiptap/extensions@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/extensions': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) - '@tiptap/extension-history@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': + '@tiptap/extension-horizontal-rule@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 - '@tiptap/extension-horizontal-rule@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': + '@tiptap/extension-image@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-image@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-italic@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-italic@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-link@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - - '@tiptap/extension-link@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': - dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 linkifyjs: 4.3.2 - '@tiptap/extension-list-item@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-list-item@3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/extension-list': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) - '@tiptap/extension-list-keymap@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-list-keymap@3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/extension-list': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) - '@tiptap/extension-ordered-list@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-list@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 - '@tiptap/extension-paragraph@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-ordered-list@3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/extension-list': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) - '@tiptap/extension-placeholder@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': + '@tiptap/extension-paragraph@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-strike@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-placeholder@3.0.9(@tiptap/extensions@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/extensions': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) - '@tiptap/extension-subscript@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-strike@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-superscript@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-subscript@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 - '@tiptap/extension-table-cell@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-superscript@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 - '@tiptap/extension-table-header@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-table@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 - '@tiptap/extension-table-row@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-text-align@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-table@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': + '@tiptap/extension-text-style@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-task-item@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': + '@tiptap/extension-text@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-task-list@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-typography@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-text-align@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-underline@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-text-style@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extension-youtube@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) - '@tiptap/extension-text@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/extensions@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 - '@tiptap/extension-typography@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': + '@tiptap/html@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(happy-dom@15.11.7)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 + happy-dom: 15.11.7 - '@tiptap/extension-underline@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': - dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - - '@tiptap/extension-youtube@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))': - dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - - '@tiptap/html@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': - dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 - zeed-dom: 0.15.1 - - '@tiptap/pm@2.14.0': + '@tiptap/pm@3.0.9': dependencies: prosemirror-changeset: 2.3.1 prosemirror-collab: 1.3.1 @@ -13852,53 +13808,68 @@ snapshots: prosemirror-menu: 1.2.4 prosemirror-model: 1.25.1 prosemirror-schema-basic: 1.2.3 - prosemirror-schema-list: 1.4.1 + prosemirror-schema-list: 1.5.1 prosemirror-state: 1.4.3 prosemirror-tables: 1.7.1 prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0) prosemirror-transform: 1.10.4 prosemirror-view: 1.40.0 - '@tiptap/react@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tiptap/react@3.0.9(@floating-ui/dom@1.7.3)(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/extension-bubble-menu': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) - '@tiptap/extension-floating-menu': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 '@types/use-sync-external-store': 0.0.6 fast-deep-equal: 3.1.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - use-sync-external-store: 1.2.2(react@18.3.1) + use-sync-external-store: 1.5.0(react@18.3.1) + optionalDependencies: + '@tiptap/extension-bubble-menu': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) + '@tiptap/extension-floating-menu': 3.0.9(@floating-ui/dom@1.7.3)(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) + transitivePeerDependencies: + - '@floating-ui/dom' - '@tiptap/starter-kit@2.14.0': + '@tiptap/starter-kit@3.0.9': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/extension-blockquote': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-bold': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-bullet-list': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-code': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-code-block': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) - '@tiptap/extension-document': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-dropcursor': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) - '@tiptap/extension-gapcursor': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) - '@tiptap/extension-hard-break': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-heading': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-history': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) - '@tiptap/extension-horizontal-rule': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0) - '@tiptap/extension-italic': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-list-item': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-ordered-list': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-paragraph': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-strike': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-text': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/extension-text-style': 2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0)) - '@tiptap/pm': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/extension-blockquote': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) + '@tiptap/extension-bold': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) + '@tiptap/extension-bullet-list': 3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)) + '@tiptap/extension-code': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) + '@tiptap/extension-code-block': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) + '@tiptap/extension-document': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) + '@tiptap/extension-dropcursor': 3.0.9(@tiptap/extensions@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)) + '@tiptap/extension-gapcursor': 3.0.9(@tiptap/extensions@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)) + '@tiptap/extension-hard-break': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) + '@tiptap/extension-heading': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) + '@tiptap/extension-horizontal-rule': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) + '@tiptap/extension-italic': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) + '@tiptap/extension-link': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) + '@tiptap/extension-list': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) + '@tiptap/extension-list-item': 3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)) + '@tiptap/extension-list-keymap': 3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)) + '@tiptap/extension-ordered-list': 3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)) + '@tiptap/extension-paragraph': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) + '@tiptap/extension-strike': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) + '@tiptap/extension-text': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) + '@tiptap/extension-underline': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9)) + '@tiptap/extensions': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 - '@tiptap/suggestion@2.14.0(@tiptap/core@2.14.0(@tiptap/pm@2.14.0))(@tiptap/pm@2.14.0)': + '@tiptap/suggestion@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)': dependencies: - '@tiptap/core': 2.14.0(@tiptap/pm@2.14.0) - '@tiptap/pm': 2.14.0 + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 + + '@tiptap/y-tiptap@3.0.0(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.27))(yjs@13.6.27)': + dependencies: + lib0: 0.2.108 + prosemirror-model: 1.25.1 + prosemirror-state: 1.4.3 + prosemirror-view: 1.40.0 + y-protocols: 1.0.6(yjs@13.6.27) + yjs: 13.6.27 '@tokenizer/inflate@0.2.7': dependencies: @@ -14994,8 +14965,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - bluebird@3.7.2: {} - boolbase@1.0.0: {} bowser@2.11.0: {} @@ -15710,8 +15679,6 @@ snapshots: delegates@1.0.0: {} - denque@1.5.1: {} - denque@2.1.0: {} depd@2.0.0: {} @@ -15887,8 +15854,6 @@ snapshots: entities@4.5.0: {} - entities@5.0.0: {} - entities@6.0.1: {} errno@0.1.8: @@ -16769,27 +16734,25 @@ snapshots: dependencies: loose-envify: 1.4.0 - ioredis@4.28.5: + ioredis@5.4.1: dependencies: + '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.3.7 - denque: 1.5.1 + debug: 4.3.4 + denque: 2.1.0 lodash.defaults: 4.2.0 - lodash.flatten: 4.4.0 lodash.isarguments: 3.1.0 - p-map: 2.1.0 - redis-commands: 1.7.0 redis-errors: 1.2.0 redis-parser: 3.0.0 standard-as-callback: 2.1.0 transitivePeerDependencies: - supports-color - ioredis@5.4.1: + ioredis@5.7.0: dependencies: - '@ioredis/commands': 1.2.0 + '@ioredis/commands': 1.3.0 cluster-key-slot: 1.1.2 - debug: 4.3.4 + debug: 4.4.0 denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -17553,10 +17516,6 @@ snapshots: dependencies: isomorphic.js: 0.2.5 - lib0@0.2.98: - dependencies: - isomorphic.js: 0.2.5 - libphonenumber-js@1.10.58: {} lie@3.3.0: @@ -17604,8 +17563,6 @@ snapshots: lodash.defaults@4.2.0: {} - lodash.flatten@4.4.0: {} - lodash.includes@4.3.0: {} lodash.isarguments@3.1.0: {} @@ -18331,8 +18288,6 @@ snapshots: dependencies: p-limit: 3.1.0 - p-map@2.1.0: {} - p-try@2.2.0: {} package-json-from-dist@1.0.0: {} @@ -18761,7 +18716,7 @@ snapshots: dependencies: prosemirror-model: 1.25.1 - prosemirror-schema-list@1.4.1: + prosemirror-schema-list@1.5.1: dependencies: prosemirror-model: 1.25.1 prosemirror-state: 1.4.3 @@ -19052,18 +19007,12 @@ snapshots: dependencies: resolve: 1.22.8 - redis-commands@1.7.0: {} - redis-errors@1.2.0: {} redis-parser@3.0.0: dependencies: redis-errors: 1.2.0 - redlock@4.2.0: - dependencies: - bluebird: 3.7.2 - redux@4.2.1: dependencies: '@babel/runtime': 7.25.6 @@ -20000,6 +19949,10 @@ snapshots: dependencies: react: 18.3.1 + use-sync-external-store@1.5.0(react@18.3.1): + dependencies: + react: 18.3.1 + utf8-byte-length@1.0.4: {} util-deprecate@1.0.2: {} @@ -20350,11 +20303,6 @@ snapshots: yoctocolors-cjs@2.1.2: {} - zeed-dom@0.15.1: - dependencies: - css-what: 6.1.0 - entities: 5.0.0 - zod@3.25.56: {} zustand@4.5.6(@types/react@18.3.12)(react@18.3.1):