diff --git a/examples/07-collaboration/02-liveblocks/.bnexample.json b/examples/07-collaboration/02-liveblocks/.bnexample.json index 37800784c0..9c7a2e3999 100644 --- a/examples/07-collaboration/02-liveblocks/.bnexample.json +++ b/examples/07-collaboration/02-liveblocks/.bnexample.json @@ -4,11 +4,11 @@ "author": "yousefed", "tags": ["Advanced", "Saving/Loading", "Collaboration"], "dependencies": { - "@liveblocks/client": "^2.23.1", - "@liveblocks/react": "^2.23.1", - "@liveblocks/react-blocknote": "^2.23.1", - "@liveblocks/react-tiptap": "^2.23.1", - "@liveblocks/react-ui": "^2.23.1", + "@liveblocks/client": "^3.1.3", + "@liveblocks/react": "^3.1.3", + "@liveblocks/react-blocknote": "^3.1.3", + "@liveblocks/react-tiptap": "^3.1.3", + "@liveblocks/react-ui": "^3.1.3", "yjs": "^13.6.15" } } diff --git a/examples/07-collaboration/02-liveblocks/package.json b/examples/07-collaboration/02-liveblocks/package.json index 30f23c9c55..b9bdcdcd89 100644 --- a/examples/07-collaboration/02-liveblocks/package.json +++ b/examples/07-collaboration/02-liveblocks/package.json @@ -17,11 +17,11 @@ "@blocknote/shadcn": "latest", "react": "^19.1.0", "react-dom": "^19.1.0", - "@liveblocks/client": "^2.23.1", - "@liveblocks/react": "^2.23.1", - "@liveblocks/react-blocknote": "^2.23.1", - "@liveblocks/react-tiptap": "^2.23.1", - "@liveblocks/react-ui": "^2.23.1", + "@liveblocks/client": "^3.1.3", + "@liveblocks/react": "^3.1.3", + "@liveblocks/react-blocknote": "^3.1.3", + "@liveblocks/react-tiptap": "^3.1.3", + "@liveblocks/react-ui": "^3.1.3", "yjs": "^13.6.15" }, "devDependencies": { diff --git a/packages/core/package.json b/packages/core/package.json index 802cd130ff..43d56f9ab6 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -110,7 +110,7 @@ "remark-stringify": "^11.0.0", "unified": "^11.0.5", "uuid": "^8.3.2", - "y-prosemirror": "^1.3.4", + "y-prosemirror": "^1.3.7", "y-protocols": "^1.0.6", "yjs": "^13.6.15" }, diff --git a/packages/core/src/editor/BlockNoteEditor.ts b/packages/core/src/editor/BlockNoteEditor.ts index fe68128033..7e89755c17 100644 --- a/packages/core/src/editor/BlockNoteEditor.ts +++ b/packages/core/src/editor/BlockNoteEditor.ts @@ -3,50 +3,10 @@ import { EditorOptions, Extension, getSchema, - isNodeSelection, Mark, - posToDOMRect, Node as TipTapNode, } from "@tiptap/core"; import { Node, Schema } from "prosemirror-model"; -// import "./blocknote.css"; -import * as Y from "yjs"; -import { insertBlocks } from "../api/blockManipulation/commands/insertBlocks/insertBlocks.js"; -import { - moveBlocksDown, - moveBlocksUp, -} from "../api/blockManipulation/commands/moveBlocks/moveBlocks.js"; -import { - canNestBlock, - canUnnestBlock, - nestBlock, - unnestBlock, -} from "../api/blockManipulation/commands/nestBlock/nestBlock.js"; -import { removeAndInsertBlocks } from "../api/blockManipulation/commands/replaceBlocks/replaceBlocks.js"; -import { updateBlock } from "../api/blockManipulation/commands/updateBlock/updateBlock.js"; -import { - getBlock, - getNextBlock, - getParentBlock, - getPrevBlock, -} from "../api/blockManipulation/getBlock/getBlock.js"; -import { insertContentAt } from "../api/blockManipulation/insertContentAt.js"; -import { - getSelection, - getSelectionCutBlocks, - setSelection, -} from "../api/blockManipulation/selections/selection.js"; -import { - getTextCursorPosition, - setTextCursorPosition, -} from "../api/blockManipulation/selections/textCursorPosition.js"; -import { createExternalHTMLExporter } from "../api/exporters/html/externalHTMLExporter.js"; -import { blocksToMarkdown } from "../api/exporters/markdown/markdownExporter.js"; -import { HTMLToBlocks } from "../api/parsers/html/parseHTML.js"; -import { - markdownToBlocks, - markdownToHTML, -} from "../api/parsers/markdown/parseMarkdown.js"; import { Block, DefaultBlockSchema, @@ -76,7 +36,7 @@ import { StyleSpecs, } from "../schema/index.js"; import { mergeCSSClasses } from "../util/browser.js"; -import { NoInfer, UnreachableCaseError } from "../util/typescript.js"; +import { NoInfer } from "../util/typescript.js"; import { getBlockNoteExtensions } from "./BlockNoteExtensions.js"; import { TextCursorPosition } from "./cursorPositionTypes.js"; @@ -93,31 +53,27 @@ import { import { Dictionary } from "../i18n/dictionary.js"; import { en } from "../i18n/locales/index.js"; +import type { User, ThreadStore } from "../comments/index.js"; +import { EventEmitter } from "../util/EventEmitter.js"; +import * as Y from "yjs"; -import { redo, undo } from "@tiptap/pm/history"; -import { - TextSelection, - type Command, - type Plugin, - type Transaction, -} from "@tiptap/pm/state"; +import { type Command, type Plugin, type Transaction } from "@tiptap/pm/state"; import { dropCursor } from "prosemirror-dropcursor"; import { EditorView } from "prosemirror-view"; -import { redoCommand, undoCommand, ySyncPluginKey } from "y-prosemirror"; -import { createInternalHTMLSerializer } from "../api/exporters/html/internalHTMLSerializer.js"; -import { inlineContentToNodes } from "../api/nodeConversions/blockToNode.js"; -import { docToBlocks } from "../api/nodeConversions/nodeToBlock.js"; -import { - BlocksChanged, - getBlocksChangedByTransaction, -} from "../api/nodeUtil.js"; -import { nestedListsToBlockNoteStructure } from "../api/parsers/html/util/nestedLists.js"; +import { BlocksChanged } from "../api/nodeUtil.js"; import { CodeBlockOptions } from "../blocks/CodeBlockContent/CodeBlockContent.js"; -import type { ThreadStore, User } from "../comments/index.js"; -import type { CursorPlugin } from "../extensions/Collaboration/CursorPlugin.js"; -import type { ForkYDocPlugin } from "../extensions/Collaboration/ForkYDocPlugin.js"; -import { EventEmitter } from "../util/EventEmitter.js"; import { BlockNoteExtension } from "./BlockNoteExtension.js"; +import { + BlockManager, + CollaborationManager, + type CollaborationOptions, + EventManager, + ExportManager, + ExtensionManager, + SelectionManager, + StateManager, + StyleManager, +} from "./managers/index.js"; import "../style.css"; @@ -156,44 +112,25 @@ export type BlockNoteEditorOptions< /** * When enabled, allows for collaboration between multiple users. */ - collaboration: { - /** - * The Yjs XML fragment that's used for collaboration. - */ - fragment: Y.XmlFragment; - /** - * The user info for the current user that's shown to other collaborators. - */ - user: { - name: string; - color: string; - }; - /** - * A Yjs provider (used for awareness / cursor information) - */ - provider: any; - /** - * Optional function to customize how cursors of users are rendered - */ - renderCursor?: (user: any) => HTMLElement; - /** - * Optional flag to set when the user label should be shown with the default - * collaboration cursor. Setting to "always" will always show the label, - * while "activity" will only show the label when the user moves the cursor - * or types. Defaults to "activity". - */ - showCursorLabels?: "always" | "activity"; + collaboration?: CollaborationOptions; + + /** + * Comments configuration - can be used with or without collaboration + */ + comments?: { + threadStore: ThreadStore; }; + /** + * Function to resolve user IDs to user objects - required for comments + */ + resolveUsers?: (userIds: string[]) => Promise; + /** * Options for code blocks. */ codeBlock?: CodeBlockOptions; - comments: { - threadStore: ThreadStore; - }; - /** * Use default BlockNote font and reset the styles of

  • elements etc., that are used in BlockNote. * @@ -298,8 +235,6 @@ export type BlockNoteEditorOptions< */ resolveFileUrl: (url: string) => Promise; - resolveUsers: (userIds: string[]) => Promise; - schema: BlockNoteSchema; /** @@ -481,35 +416,56 @@ export class BlockNoteEditor< public readonly inlineContentImplementations: InlineContentSpecs; public readonly styleImplementations: StyleSpecs; - public readonly formattingToolbar: FormattingToolbarProsemirrorPlugin; - public readonly linkToolbar: LinkToolbarProsemirrorPlugin< - BSchema, - ISchema, - SSchema - >; - public readonly sideMenu: SideMenuProsemirrorPlugin< + public get formattingToolbar(): FormattingToolbarProsemirrorPlugin { + return this._extensionManager.formattingToolbar; + } + + public get linkToolbar(): LinkToolbarProsemirrorPlugin< BSchema, ISchema, SSchema - >; - public readonly suggestionMenus: SuggestionMenuProseMirrorPlugin< + > { + return this._extensionManager.linkToolbar; + } + + public get sideMenu(): SideMenuProsemirrorPlugin { + return this._extensionManager.sideMenu; + } + + public get suggestionMenus(): SuggestionMenuProseMirrorPlugin< BSchema, ISchema, SSchema - >; - public readonly filePanel?: FilePanelProsemirrorPlugin; - public readonly tableHandles?: TableHandlesProsemirrorPlugin< - ISchema, - SSchema - >; - public readonly comments?: CommentsPlugin; + > { + return this._extensionManager.suggestionMenus; + } + + public get filePanel(): + | FilePanelProsemirrorPlugin + | undefined { + return this._extensionManager.filePanel; + } - private readonly showSelectionPlugin: ShowSelectionPlugin; + public get tableHandles(): + | TableHandlesProsemirrorPlugin + | undefined { + return this._extensionManager.tableHandles; + } + + public get comments(): CommentsPlugin | undefined { + return this._collaborationManager?.comments; + } + + public get showSelectionPlugin(): ShowSelectionPlugin { + return this._extensionManager.showSelectionPlugin; + } /** * The plugin for forking a document, only defined if in collaboration mode */ - public readonly forkYDocPlugin?: ForkYDocPlugin; + public get forkYDocPlugin() { + return this._collaborationManager?.forkYDocPlugin; + } /** * The `uploadFile` method is what the editor uses when files need to be uploaded (for example when selecting an image to upload). * This method should set when creating the editor as this is application-specific. @@ -527,7 +483,6 @@ export class BlockNoteEditor< private onUploadEndCallbacks: ((blockId?: string) => void)[] = []; public readonly resolveFileUrl?: (url: string) => Promise; - public readonly resolveUsers?: (userIds: string[]) => Promise; /** * Editor settings */ @@ -612,37 +567,64 @@ export class BlockNoteEditor< }, }; + // Initialize CollaborationManager if collaboration is enabled or if comments are configured + if (newOptions.collaboration || newOptions.comments) { + const collaborationOptions: CollaborationOptions = { + // Use collaboration options if available, otherwise provide defaults + fragment: newOptions.collaboration?.fragment || new Y.XmlFragment(), + user: newOptions.collaboration?.user || { + name: "User", + color: "#FF0000", + }, + provider: newOptions.collaboration?.provider || null, + renderCursor: newOptions.collaboration?.renderCursor, + showCursorLabels: newOptions.collaboration?.showCursorLabels, + // If comments are configured separately, use those instead of collaboration.comments + comments: newOptions.comments || newOptions.collaboration?.comments, + // If resolveUsers is configured separately, use that instead of collaboration.resolveUsers + resolveUsers: + newOptions.resolveUsers || newOptions.collaboration?.resolveUsers, + }; + this._collaborationManager = new CollaborationManager( + this as any, + collaborationOptions, + ); + } else { + this._collaborationManager = undefined; + } + if (newOptions.comments && !newOptions.resolveUsers) { throw new Error("resolveUsers is required when using comments"); } - this.resolveUsers = newOptions.resolveUsers; - // @ts-ignore this.schema = newOptions.schema; this.blockImplementations = newOptions.schema.blockSpecs; this.inlineContentImplementations = newOptions.schema.inlineContentSpecs; this.styleImplementations = newOptions.schema.styleSpecs; - this.extensions = getBlockNoteExtensions({ - editor: this, - domAttributes: newOptions.domAttributes || {}, - blockSpecs: this.schema.blockSpecs, - styleSpecs: this.schema.styleSpecs, - inlineContentSpecs: this.schema.inlineContentSpecs, - collaboration: newOptions.collaboration, - trailingBlock: newOptions.trailingBlock, - disableExtensions: newOptions.disableExtensions, - setIdAttribute: newOptions.setIdAttribute, - animations: newOptions.animations ?? true, - tableHandles: checkDefaultBlockTypeInSchema("table", this), - dropCursor: this.options.dropCursor ?? dropCursor, - placeholders: newOptions.placeholders, - tabBehavior: newOptions.tabBehavior, - sideMenuDetection: newOptions.sideMenuDetection || "viewport", - comments: newOptions.comments, - pasteHandler: newOptions.pasteHandler, - }); + this.extensions = { + ...getBlockNoteExtensions({ + editor: this, + domAttributes: newOptions.domAttributes || {}, + blockSpecs: this.schema.blockSpecs, + styleSpecs: this.schema.styleSpecs, + inlineContentSpecs: this.schema.inlineContentSpecs, + collaboration: newOptions.collaboration, + trailingBlock: newOptions.trailingBlock, + disableExtensions: newOptions.disableExtensions, + setIdAttribute: newOptions.setIdAttribute, + animations: newOptions.animations ?? true, + tableHandles: checkDefaultBlockTypeInSchema("table", this), + dropCursor: this.options.dropCursor ?? dropCursor, + placeholders: newOptions.placeholders, + tabBehavior: newOptions.tabBehavior, + sideMenuDetection: newOptions.sideMenuDetection || "viewport", + // Comments are now handled by CollaborationManager + pasteHandler: newOptions.pasteHandler, + }), + ...this._collaborationManager?.initExtensions(), + } as any; // add extensions from _tiptapOptions (newOptions._tiptapOptions?.extensions || []).forEach((ext) => { @@ -695,16 +677,6 @@ export class BlockNoteEditor< })(); }); - this.formattingToolbar = this.extensions["formattingToolbar"] as any; - this.linkToolbar = this.extensions["linkToolbar"] as any; - this.sideMenu = this.extensions["sideMenu"] as any; - this.suggestionMenus = this.extensions["suggestionMenus"] as any; - this.filePanel = this.extensions["filePanel"] as any; - this.tableHandles = this.extensions["tableHandles"] as any; - this.comments = this.extensions["comments"] as any; - this.showSelectionPlugin = this.extensions["showSelection"] as any; - this.forkYDocPlugin = this.extensions["forkYDocPlugin"] as any; - if (newOptions.uploadFile) { const uploadFile = newOptions.uploadFile; this.uploadFile = async (file, blockId) => { @@ -821,13 +793,37 @@ export class BlockNoteEditor< this.pmSchema = getSchema(tiptapOptions.extensions!); } this.pmSchema.cached.blockNoteEditor = this; + + // Initialize managers + this._blockManager = new BlockManager(this as any); + + this._eventManager = new EventManager(this as any); + this._exportManager = new ExportManager(this as any); + this._extensionManager = new ExtensionManager(this as any); + this._selectionManager = new SelectionManager(this as any); + this._stateManager = new StateManager( + this as any, + collaborationEnabled + ? { + undo: this._collaborationManager?.getUndoCommand(), + redo: this._collaborationManager?.getRedoCommand(), + } + : undefined, + ); + this._styleManager = new StyleManager(this as any); + this.emit("create"); } - /** - * Stores the currently active transaction, which is the accumulated transaction from all {@link dispatch} calls during a {@link transact} calls - */ - private activeTransaction: Transaction | null = null; + // Manager instances + private readonly _blockManager: BlockManager; + private readonly _collaborationManager?: CollaborationManager; + private readonly _eventManager: EventManager; + private readonly _exportManager: ExportManager; + private readonly _extensionManager: ExtensionManager; + private readonly _selectionManager: SelectionManager; + private readonly _stateManager: StateManager; + private readonly _styleManager: StyleManager; /** * Execute a prosemirror command. This is mostly for backwards compatibility with older code. @@ -842,16 +838,7 @@ export class BlockNoteEditor< * ``` */ public exec(command: Command) { - if (this.activeTransaction) { - throw new Error( - "`exec` should not be called within a `transact` call, move the `exec` call outside of the `transact` call", - ); - } - const state = this._tiptapEditor.state; - const view = this._tiptapEditor.view; - const dispatch = (tr: Transaction) => this._tiptapEditor.dispatch(tr); - - return command(state, dispatch, view); + return this._stateManager.exec(command); } /** @@ -867,15 +854,7 @@ export class BlockNoteEditor< * ``` */ public canExec(command: Command): boolean { - if (this.activeTransaction) { - throw new Error( - "`canExec` should not be called within a `transact` call, move the `canExec` call outside of the `transact` call", - ); - } - const state = this._tiptapEditor.state; - const view = this._tiptapEditor.view; - - return command(state, undefined, view); + return this._stateManager.canExec(command); } /** @@ -906,40 +885,7 @@ export class BlockNoteEditor< tr: Transaction, ) => T, ): T { - if (this.activeTransaction) { - // Already in a transaction, so we can just callback immediately - return callback(this.activeTransaction); - } - - try { - // Enter transaction mode, by setting a starting transaction - this.activeTransaction = this._tiptapEditor.state.tr; - - // Capture all dispatch'd transactions - const result = callback(this.activeTransaction); - - // Any transactions captured by the `dispatch` call will be stored in `this.activeTransaction` - const activeTr = this.activeTransaction; - - this.activeTransaction = null; - if ( - activeTr && - // Only dispatch if the transaction was actually modified in some way - (activeTr.docChanged || - activeTr.selectionSet || - activeTr.scrolledIntoView || - activeTr.storedMarksSet || - !activeTr.isGeneric) - ) { - // Dispatch the transaction if it was modified - this._tiptapEditor.dispatch(activeTr); - } - - return result; - } finally { - // We wrap this in a finally block to ensure we don't disable future transactions just because of an error in the callback - this.activeTransaction = null; - } + return this._stateManager.transact(callback); } // TO DISCUSS @@ -955,11 +901,7 @@ export class BlockNoteEditor< ext: { new (...args: any[]): T } & typeof BlockNoteExtension, key = ext.key(), ): T { - const extension = this.extensions[key] as T; - if (!extension) { - throw new Error(`Extension ${key} not found`); - } - return extension; + return this._extensionManager.extension(ext, key); } /** @@ -980,12 +922,7 @@ export class BlockNoteEditor< * @see https://prosemirror.net/docs/ref/#state.EditorState */ public get prosemirrorState() { - if (this.activeTransaction) { - throw new Error( - "`prosemirrorState` should not be called within a `transact` call, move the `prosemirrorState` call outside of the `transact` call or use `editor.transact` to read the current editor state", - ); - } - return this._tiptapEditor.state; + return this._stateManager.prosemirrorState; } /** @@ -993,7 +930,7 @@ export class BlockNoteEditor< * @see https://prosemirror.net/docs/ref/#view.EditorView */ public get prosemirrorView() { - return this._tiptapEditor.view; + return this._stateManager.prosemirrorView; } public get domElement() { @@ -1042,9 +979,7 @@ export class BlockNoteEditor< * @returns A snapshot of all top-level (non-nested) blocks in the editor. */ public get document(): Block[] { - return this.transact((tr) => { - return docToBlocks(tr.doc, this.pmSchema); - }); + return this._blockManager.document; } /** @@ -1057,7 +992,7 @@ export class BlockNoteEditor< public getBlock( blockIdentifier: BlockIdentifier, ): Block | undefined { - return this.transact((tr) => getBlock(tr.doc, blockIdentifier)); + return this._blockManager.getBlock(blockIdentifier); } /** @@ -1072,7 +1007,7 @@ export class BlockNoteEditor< public getPrevBlock( blockIdentifier: BlockIdentifier, ): Block | undefined { - return this.transact((tr) => getPrevBlock(tr.doc, blockIdentifier)); + return this._blockManager.getPrevBlock(blockIdentifier); } /** @@ -1086,7 +1021,7 @@ export class BlockNoteEditor< public getNextBlock( blockIdentifier: BlockIdentifier, ): Block | undefined { - return this.transact((tr) => getNextBlock(tr.doc, blockIdentifier)); + return this._blockManager.getNextBlock(blockIdentifier); } /** @@ -1099,7 +1034,7 @@ export class BlockNoteEditor< public getParentBlock( blockIdentifier: BlockIdentifier, ): Block | undefined { - return this.transact((tr) => getParentBlock(tr.doc, blockIdentifier)); + return this._blockManager.getParentBlock(blockIdentifier); } /** @@ -1111,33 +1046,7 @@ export class BlockNoteEditor< callback: (block: Block) => boolean, reverse = false, ): void { - const blocks = this.document.slice(); - - if (reverse) { - blocks.reverse(); - } - - function traverseBlockArray( - blockArray: Block[], - ): boolean { - for (const block of blockArray) { - if (callback(block) === false) { - return false; - } - - const children = reverse - ? block.children.slice().reverse() - : block.children; - - if (!traverseBlockArray(children)) { - return false; - } - } - - return true; - } - - traverseBlockArray(blocks); + this._blockManager.forEachBlock(callback, reverse); } /** @@ -1169,7 +1078,7 @@ export class BlockNoteEditor< ISchema, SSchema > { - return this.transact((tr) => getTextCursorPosition(tr)); + return this._selectionManager.getTextCursorPosition(); } /** @@ -1182,9 +1091,7 @@ export class BlockNoteEditor< targetBlock: BlockIdentifier, placement: "start" | "end" = "start", ) { - return this.transact((tr) => - setTextCursorPosition(tr, targetBlock, placement), - ); + return this._selectionManager.setTextCursorPosition(targetBlock, placement); } /** @@ -1194,7 +1101,7 @@ export class BlockNoteEditor< * If the selection starts / ends halfway through a block, the returned data will contain the entire block. */ public getSelection(): Selection | undefined { - return this.transact((tr) => getSelection(tr)); + return this._selectionManager.getSelection(); } /** @@ -1205,7 +1112,7 @@ export class BlockNoteEditor< * only the part of the block that is included in the selection. */ public getSelectionCutBlocks() { - return this.transact((tr) => getSelectionCutBlocks(tr)); + return this._selectionManager.getSelectionCutBlocks(); } /** @@ -1214,7 +1121,7 @@ export class BlockNoteEditor< * @param endBlock The identifier of the block that should be the end of the selection. */ public setSelection(startBlock: BlockIdentifier, endBlock: BlockIdentifier) { - return this.transact((tr) => setSelection(tr, startBlock, endBlock)); + return this._selectionManager.setSelection(startBlock, endBlock); } /** @@ -1222,15 +1129,7 @@ export class BlockNoteEditor< * @returns True if the editor is editable, false otherwise. */ public get isEditable(): boolean { - if (!this._tiptapEditor) { - if (!this.headless) { - throw new Error("no editor, but also not headless?"); - } - return false; - } - return this._tiptapEditor.isEditable === undefined - ? true - : this._tiptapEditor.isEditable; + return this._stateManager.isEditable; } /** @@ -1238,16 +1137,7 @@ export class BlockNoteEditor< * @param editable True to make the editor editable, or false to lock it. */ public set isEditable(editable: boolean) { - if (!this._tiptapEditor) { - if (!this.headless) { - throw new Error("no editor, but also not headless?"); - } - // not relevant on headless - return; - } - if (this._tiptapEditor.options.editable !== editable) { - this._tiptapEditor.setEditable(editable); - } + this._stateManager.isEditable = editable; } /** @@ -1263,8 +1153,10 @@ export class BlockNoteEditor< referenceBlock: BlockIdentifier, placement: "before" | "after" = "before", ) { - return this.transact((tr) => - insertBlocks(tr, blocksToInsert, referenceBlock, placement), + return this._blockManager.insertBlocks( + blocksToInsert, + referenceBlock, + placement, ); } @@ -1279,7 +1171,7 @@ export class BlockNoteEditor< blockToUpdate: BlockIdentifier, update: PartialBlock, ) { - return this.transact((tr) => updateBlock(tr, blockToUpdate, update)); + return this._blockManager.updateBlock(blockToUpdate, update); } /** @@ -1287,9 +1179,7 @@ export class BlockNoteEditor< * @param blocksToRemove An array of identifiers for existing blocks that should be removed. */ public removeBlocks(blocksToRemove: BlockIdentifier[]) { - return this.transact( - (tr) => removeAndInsertBlocks(tr, blocksToRemove, []).removedBlocks, - ); + return this._blockManager.removeBlocks(blocksToRemove); } /** @@ -1303,30 +1193,21 @@ export class BlockNoteEditor< blocksToRemove: BlockIdentifier[], blocksToInsert: PartialBlock[], ) { - return this.transact((tr) => - removeAndInsertBlocks(tr, blocksToRemove, blocksToInsert), - ); + return this._blockManager.replaceBlocks(blocksToRemove, blocksToInsert); } /** * Undo the last action. */ public undo() { - if (this.options.collaboration) { - return this.exec(undoCommand); - } - - return this.exec(undo); + return this._stateManager.undo(); } /** * Redo the last action. */ public redo() { - if (this.options.collaboration) { - return this.exec(redoCommand); - } - return this.exec(redo); + return this._stateManager.redo(); } /** @@ -1338,55 +1219,14 @@ export class BlockNoteEditor< content: PartialInlineContent, { updateSelection = false }: { updateSelection?: boolean } = {}, ) { - const nodes = inlineContentToNodes(content, this.pmSchema); - - this.transact((tr) => { - insertContentAt( - tr, - { - from: tr.selection.from, - to: tr.selection.to, - }, - nodes, - { - updateSelection, - }, - ); - }); + this._styleManager.insertInlineContent(content, { updateSelection }); } /** * Gets the active text styles at the text cursor position or at the end of the current selection if it's active. */ - public getActiveStyles() { - return this.transact((tr) => { - const styles: Styles = {}; - const marks = tr.selection.$to.marks(); - - for (const mark of marks) { - const config = this.schema.styleSchema[mark.type.name]; - if (!config) { - if ( - // Links are not considered styles in blocknote - mark.type.name !== "link" && - // "blocknoteIgnore" tagged marks (such as comments) are also not considered BlockNote "styles" - !mark.type.spec.blocknoteIgnore - ) { - // eslint-disable-next-line no-console - console.warn("mark not found in styleschema", mark.type.name); - } - - continue; - } - if (config.propSchema === "boolean") { - (styles as any)[config.type] = true; - } else { - (styles as any)[config.type] = mark.attrs.stringValue; - } - } - - return styles; - }); + public getActiveStyles(): Styles { + return this._styleManager.getActiveStyles(); } /** @@ -1394,19 +1234,7 @@ export class BlockNoteEditor< * @param styles The styles to add. */ public addStyles(styles: Styles) { - for (const [style, value] of Object.entries(styles)) { - const config = this.schema.styleSchema[style]; - if (!config) { - throw new Error(`style ${style} not found in styleSchema`); - } - if (config.propSchema === "boolean") { - this._tiptapEditor.commands.setMark(style); - } else if (config.propSchema === "string") { - this._tiptapEditor.commands.setMark(style, { stringValue: value }); - } else { - throw new UnreachableCaseError(config.propSchema); - } - } + this._styleManager.addStyles(styles); } /** @@ -1414,9 +1242,7 @@ export class BlockNoteEditor< * @param styles The styles to remove. */ public removeStyles(styles: Styles) { - for (const style of Object.keys(styles)) { - this._tiptapEditor.commands.unsetMark(style); - } + this._styleManager.removeStyles(styles); } /** @@ -1424,35 +1250,21 @@ export class BlockNoteEditor< * @param styles The styles to toggle. */ public toggleStyles(styles: Styles) { - for (const [style, value] of Object.entries(styles)) { - const config = this.schema.styleSchema[style]; - if (!config) { - throw new Error(`style ${style} not found in styleSchema`); - } - if (config.propSchema === "boolean") { - this._tiptapEditor.commands.toggleMark(style); - } else if (config.propSchema === "string") { - this._tiptapEditor.commands.toggleMark(style, { stringValue: value }); - } else { - throw new UnreachableCaseError(config.propSchema); - } - } + this._styleManager.toggleStyles(styles); } /** * Gets the currently selected text. */ public getSelectedText() { - return this.transact((tr) => { - return tr.doc.textBetween(tr.selection.from, tr.selection.to); - }); + return this._styleManager.getSelectedText(); } /** * Gets the URL of the last link in the current selection, or `undefined` if there are no links in the selection. */ public getSelectedLinkUrl() { - return this._tiptapEditor.getAttributes("link").href as string | undefined; + return this._styleManager.getSelectedLinkUrl(); } /** @@ -1461,51 +1273,35 @@ export class BlockNoteEditor< * @param text The text to display the link with. */ public createLink(url: string, text?: string) { - if (url === "") { - return; - } - const mark = this.pmSchema.mark("link", { href: url }); - this.transact((tr) => { - const { from, to } = tr.selection; - - if (text) { - tr.insertText(text, from, to).addMark(from, from + text.length, mark); - } else { - tr.setSelection(TextSelection.create(tr.doc, to)).addMark( - from, - to, - mark, - ); - } - }); + this._styleManager.createLink(url, text); } /** * Checks if the block containing the text cursor can be nested. */ public canNestBlock() { - return canNestBlock(this); + return this._blockManager.canNestBlock(); } /** * Nests the block containing the text cursor into the block above it. */ public nestBlock() { - nestBlock(this); + this._blockManager.nestBlock(); } /** * Checks if the block containing the text cursor is nested. */ public canUnnestBlock() { - return canUnnestBlock(this); + return this._blockManager.canUnnestBlock(); } /** * Lifts the block containing the text cursor out of its parent. */ public unnestBlock() { - unnestBlock(this); + this._blockManager.unnestBlock(); } /** @@ -1514,7 +1310,7 @@ export class BlockNoteEditor< * current blocks share a common parent, moves them out of & before it. */ public moveBlocksUp() { - return moveBlocksUp(this); + return this._blockManager.moveBlocksUp(); } /** @@ -1523,7 +1319,7 @@ export class BlockNoteEditor< * current blocks share a common parent, moves them out of & after it. */ public moveBlocksDown() { - return moveBlocksDown(this); + return this._blockManager.moveBlocksDown(); } /** @@ -1536,8 +1332,7 @@ export class BlockNoteEditor< public async blocksToHTMLLossy( blocks: PartialBlock[] = this.document, ): Promise { - const exporter = createExternalHTMLExporter(this.pmSchema, this); - return exporter.exportBlocks(blocks, {}); + return this._exportManager.blocksToHTMLLossy(blocks); } /** @@ -1552,8 +1347,7 @@ export class BlockNoteEditor< public async blocksToFullHTML( blocks: PartialBlock[], ): Promise { - const exporter = createInternalHTMLSerializer(this.pmSchema, this); - return exporter.serializeBlocks(blocks, {}); + return this._exportManager.blocksToFullHTML(blocks); } /** * Parses blocks from an HTML string. Tries to create `Block` objects out of any HTML block-level elements, and @@ -1565,7 +1359,7 @@ export class BlockNoteEditor< public async tryParseHTMLToBlocks( html: string, ): Promise[]> { - return HTMLToBlocks(html, this.pmSchema); + return this._exportManager.tryParseHTMLToBlocks(html); } /** @@ -1577,7 +1371,7 @@ export class BlockNoteEditor< public async blocksToMarkdownLossy( blocks: PartialBlock[] = this.document, ): Promise { - return blocksToMarkdown(blocks, this.pmSchema, this, {}); + return this._exportManager.blocksToMarkdownLossy(blocks); } /** @@ -1590,20 +1384,20 @@ export class BlockNoteEditor< public async tryParseMarkdownToBlocks( markdown: string, ): Promise[]> { - return markdownToBlocks(markdown, this.pmSchema); + return this._exportManager.tryParseMarkdownToBlocks(markdown); } /** * Updates the user info for the current user that's shown to other collaborators. */ public updateCollaborationUserInfo(user: { name: string; color: string }) { - if (!this.options.collaboration) { + if (!this._collaborationManager) { throw new Error( "Cannot update collaboration user info when collaboration is disabled.", ); } - (this.extensions["yCursorPlugin"] as CursorPlugin).updateUser(user); + this._collaborationManager.updateUserInfo(user); } /** @@ -1623,29 +1417,12 @@ export class BlockNoteEditor< }, ) => void, ) { - if (this.headless) { - // Note: would be nice if this is possible in headless mode as well - return; - } - - const cb = ({ - transaction, - appendedTransactions, - }: { - transaction: Transaction; - appendedTransactions: Transaction[]; - }) => { - callback(this, { + return this._eventManager.onChange(({ editor, changes }) => { + callback(editor, { getChanges: () => - getBlocksChangedByTransaction(transaction, appendedTransactions), + changes as unknown as BlocksChanged, }); - }; - - this._tiptapEditor.on("v3-update", cb); - - return () => { - this._tiptapEditor.off("v3-update", cb); - }; + }); } /** @@ -1658,27 +1435,9 @@ export class BlockNoteEditor< callback: (editor: BlockNoteEditor) => void, includeSelectionChangedByRemote?: boolean, ) { - if (this.headless) { - return; - } - - const cb = (e: { transaction: Transaction }) => { - if ( - e.transaction.getMeta(ySyncPluginKey) && - !includeSelectionChangedByRemote - ) { - // selection changed because of a yjs sync (i.e.: other user was typing) - // we don't want to trigger the callback in this case - return; - } - callback(this); - }; - - this._tiptapEditor.on("selectionUpdate", cb); - - return () => { - this._tiptapEditor.off("selectionUpdate", cb); - }; + return this._eventManager.onSelectionChange(({ editor }) => { + callback(editor); + }, includeSelectionChangedByRemote); } /** @@ -1695,25 +1454,7 @@ export class BlockNoteEditor< } public getSelectionBoundingBox() { - if (!this.prosemirrorView) { - return undefined; - } - - const { selection } = this.prosemirrorState; - - // support for CellSelections - const { ranges } = selection; - const from = Math.min(...ranges.map((range) => range.$from.pos)); - const to = Math.max(...ranges.map((range) => range.$to.pos)); - - if (isNodeSelection(selection)) { - const node = this.prosemirrorView.nodeDOM(from) as HTMLElement; - if (node) { - return node.getBoundingClientRect(); - } - } - - return posToDOMRect(this.prosemirrorView, from, to); + return this._selectionManager.getSelectionBoundingBox(); } public get isEmpty() { @@ -1765,28 +1506,13 @@ export class BlockNoteEditor< this.showSelectionPlugin.setEnabled(forceSelectionVisible); } - /** - * This will convert HTML into a format that is compatible with BlockNote. - */ - private convertHtmlToBlockNoteHtml(html: string) { - const htmlNode = nestedListsToBlockNoteStructure(html.trim()); - return htmlNode.innerHTML; - } - /** * Paste HTML into the editor. Defaults to converting HTML to BlockNote HTML. * @param html The HTML to paste. * @param raw Whether to paste the HTML as is, or to convert it to BlockNote HTML. */ public pasteHTML(html: string, raw = false) { - let htmlToPaste = html; - if (!raw) { - htmlToPaste = this.convertHtmlToBlockNoteHtml(html); - } - if (!htmlToPaste) { - return; - } - this.prosemirrorView?.pasteHTML(htmlToPaste); + this._exportManager.pasteHTML(html, raw); } /** @@ -1794,7 +1520,7 @@ export class BlockNoteEditor< * @param text The text to paste. */ public pasteText(text: string) { - return this.prosemirrorView?.pasteText(text); + return this._exportManager.pasteText(text); } /** @@ -1802,6 +1528,6 @@ export class BlockNoteEditor< * @param markdown The markdown to paste. */ public async pasteMarkdown(markdown: string) { - return this.pasteHTML(await markdownToHTML(markdown)); + return this._exportManager.pasteMarkdown(markdown); } } diff --git a/packages/core/src/editor/BlockNoteExtensions.ts b/packages/core/src/editor/BlockNoteExtensions.ts index 1ae4c4101a..53fabda9c9 100644 --- a/packages/core/src/editor/BlockNoteExtensions.ts +++ b/packages/core/src/editor/BlockNoteExtensions.ts @@ -9,22 +9,12 @@ import * as Y from "yjs"; import { createDropFileExtension } from "../api/clipboard/fromClipboard/fileDropExtension.js"; import { createPasteFromClipboardExtension } from "../api/clipboard/fromClipboard/pasteExtension.js"; import { createCopyToClipboardExtension } from "../api/clipboard/toClipboard/copyExtension.js"; -import type { ThreadStore } from "../comments/index.js"; import { BackgroundColorExtension } from "../extensions/BackgroundColor/BackgroundColorExtension.js"; -import { CursorPlugin } from "../extensions/Collaboration/CursorPlugin.js"; -import { SyncPlugin } from "../extensions/Collaboration/SyncPlugin.js"; -import { UndoPlugin } from "../extensions/Collaboration/UndoPlugin.js"; -import { CommentMark } from "../extensions/Comments/CommentMark.js"; -import { CommentsPlugin } from "../extensions/Comments/CommentsPlugin.js"; import { FilePanelProsemirrorPlugin } from "../extensions/FilePanel/FilePanelPlugin.js"; import { FormattingToolbarProsemirrorPlugin } from "../extensions/FormattingToolbar/FormattingToolbarPlugin.js"; import { HardBreak } from "../extensions/HardBreak/HardBreak.js"; import { KeyboardShortcutsExtension } from "../extensions/KeyboardShortcuts/KeyboardShortcutsExtension.js"; import { LinkToolbarProsemirrorPlugin } from "../extensions/LinkToolbar/LinkToolbarPlugin.js"; -import { - DEFAULT_LINK_PROTOCOL, - VALID_LINK_PROTOCOLS, -} from "../extensions/LinkToolbar/protocols.js"; import { NodeSelectionKeyboardPlugin } from "../extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.js"; import { PlaceholderPlugin } from "../extensions/Placeholder/PlaceholderPlugin.js"; import { PreviousBlockTypePlugin } from "../extensions/PreviousBlockType/PreviousBlockTypePlugin.js"; @@ -40,9 +30,13 @@ import { TableHandlesProsemirrorPlugin } from "../extensions/TableHandles/TableH import { TextAlignmentExtension } from "../extensions/TextAlignment/TextAlignmentExtension.js"; import { TextColorExtension } from "../extensions/TextColor/TextColorExtension.js"; import { TrailingNode } from "../extensions/TrailingNode/TrailingNodeExtension.js"; -import UniqueID from "../extensions/UniqueID/UniqueID.js"; +import { UniqueID } from "../extensions/UniqueID/UniqueID.js"; import { BlockContainer, BlockGroup, Doc } from "../pm-nodes/index.js"; import { + DEFAULT_LINK_PROTOCOL, + VALID_LINK_PROTOCOLS, +} from "../extensions/LinkToolbar/protocols.js"; +import type { BlockNoteDOMAttributes, BlockSchema, BlockSpecs, @@ -56,7 +50,6 @@ import type { BlockNoteEditorOptions, SupportedExtension, } from "./BlockNoteEditor.js"; -import { ForkYDocPlugin } from "../extensions/Collaboration/ForkYDocPlugin.js"; type ExtensionOptions< BSchema extends BlockSchema, @@ -91,9 +84,6 @@ type ExtensionOptions< >; tabBehavior?: "prefer-navigate-ui" | "prefer-indent"; sideMenuDetection: "viewport" | "editor"; - comments?: { - threadStore: ThreadStore; - }; pasteHandler: BlockNoteEditorOptions["pasteHandler"]; }; @@ -114,19 +104,6 @@ export const getBlockNoteExtensions = < ret[ext.name] = ext; } - if (opts.collaboration) { - ret["ySyncPlugin"] = new SyncPlugin(opts.collaboration.fragment); - ret["yUndoPlugin"] = new UndoPlugin({ editor: opts.editor }); - - if (opts.collaboration.provider?.awareness) { - ret["yCursorPlugin"] = new CursorPlugin(opts.collaboration); - } - ret["forkYDocPlugin"] = new ForkYDocPlugin({ - editor: opts.editor, - collaboration: opts.collaboration, - }); - } - // Note: this is pretty hardcoded and will break when user provides plugins with same keys. // Define name on plugins instead and not make this a map? ret["formattingToolbar"] = new FormattingToolbarProsemirrorPlugin( @@ -153,14 +130,6 @@ export const getBlockNoteExtensions = < ret["showSelection"] = new ShowSelectionPlugin(opts.editor); - if (opts.comments) { - ret["comments"] = new CommentsPlugin( - opts.editor, - opts.comments.threadStore, - CommentMark.name, - ); - } - const disableExtensions: string[] = opts.disableExtensions || []; for (const ext of disableExtensions) { delete ret[ext]; @@ -307,7 +276,6 @@ const getTipTapExtensions = < ...(opts.trailingBlock === undefined || opts.trailingBlock ? [TrailingNode] : []), - ...(opts.comments ? [CommentMark] : []), ]; LINKIFY_INITIALIZED = true; diff --git a/packages/core/src/editor/BlockNoteTipTapEditor.ts b/packages/core/src/editor/BlockNoteTipTapEditor.ts index 011d2d0e27..8de8d1eaa8 100644 --- a/packages/core/src/editor/BlockNoteTipTapEditor.ts +++ b/packages/core/src/editor/BlockNoteTipTapEditor.ts @@ -303,9 +303,11 @@ export class BlockNoteTipTapEditor extends TiptapEditor { if (!element) { this.destroy(); this.isInitialized = false; + this.emit("unmount", { editor: this }); } else { this.options.element = element; this.createViewAlternative(blockNoteEditor, contentComponent); + this.emit("mount", { editor: this }); } }; } @@ -331,5 +333,13 @@ declare module "@tiptap/core" { transaction: Transaction; appendedTransactions: Transaction[]; }; + + mount: { + editor: Editor; + }; + + unmount: { + editor: Editor; + }; } } diff --git a/packages/core/src/editor/managers/BlockManager.ts b/packages/core/src/editor/managers/BlockManager.ts new file mode 100644 index 0000000000..2ea90ae984 --- /dev/null +++ b/packages/core/src/editor/managers/BlockManager.ts @@ -0,0 +1,251 @@ +import { insertBlocks } from "../../api/blockManipulation/commands/insertBlocks/insertBlocks.js"; +import { + moveBlocksDown, + moveBlocksUp, +} from "../../api/blockManipulation/commands/moveBlocks/moveBlocks.js"; +import { + canNestBlock, + canUnnestBlock, + nestBlock, + unnestBlock, +} from "../../api/blockManipulation/commands/nestBlock/nestBlock.js"; +import { removeAndInsertBlocks } from "../../api/blockManipulation/commands/replaceBlocks/replaceBlocks.js"; +import { updateBlock } from "../../api/blockManipulation/commands/updateBlock/updateBlock.js"; +import { + getBlock, + getNextBlock, + getParentBlock, + getPrevBlock, +} from "../../api/blockManipulation/getBlock/getBlock.js"; +import { docToBlocks } from "../../api/nodeConversions/nodeToBlock.js"; +import { + Block, + DefaultBlockSchema, + DefaultInlineContentSchema, + DefaultStyleSchema, + PartialBlock, +} from "../../blocks/defaultBlocks.js"; +import { + BlockIdentifier, + BlockSchema, + InlineContentSchema, + StyleSchema, +} from "../../schema/index.js"; +import { BlockNoteEditor } from "../BlockNoteEditor.js"; + +export class BlockManager< + BSchema extends BlockSchema = DefaultBlockSchema, + ISchema extends InlineContentSchema = DefaultInlineContentSchema, + SSchema extends StyleSchema = DefaultStyleSchema, +> { + constructor(private editor: BlockNoteEditor) {} + + /** + * Gets a snapshot of all top-level (non-nested) blocks in the editor. + * @returns A snapshot of all top-level (non-nested) blocks in the editor. + */ + public get document(): Block[] { + return this.editor.transact((tr) => { + return docToBlocks(tr.doc, this.editor.pmSchema); + }); + } + + /** + * Gets a snapshot of an existing block from the editor. + * @param blockIdentifier The identifier of an existing block that should be + * retrieved. + * @returns The block that matches the identifier, or `undefined` if no + * matching block was found. + */ + public getBlock( + blockIdentifier: BlockIdentifier, + ): Block | undefined { + return this.editor.transact((tr) => getBlock(tr.doc, blockIdentifier)); + } + + /** + * Gets a snapshot of the previous sibling of an existing block from the + * editor. + * @param blockIdentifier The identifier of an existing block for which the + * previous sibling should be retrieved. + * @returns The previous sibling of the block that matches the identifier. + * `undefined` if no matching block was found, or it's the first child/block + * in the document. + */ + public getPrevBlock( + blockIdentifier: BlockIdentifier, + ): Block | undefined { + return this.editor.transact((tr) => getPrevBlock(tr.doc, blockIdentifier)); + } + + /** + * Gets a snapshot of the next sibling of an existing block from the editor. + * @param blockIdentifier The identifier of an existing block for which the + * next sibling should be retrieved. + * @returns The next sibling of the block that matches the identifier. + * `undefined` if no matching block was found, or it's the last child/block in + * the document. + */ + public getNextBlock( + blockIdentifier: BlockIdentifier, + ): Block | undefined { + return this.editor.transact((tr) => getNextBlock(tr.doc, blockIdentifier)); + } + + /** + * Gets a snapshot of the parent of an existing block from the editor. + * @param blockIdentifier The identifier of an existing block for which the + * parent should be retrieved. + * @returns The parent of the block that matches the identifier. `undefined` + * if no matching block was found, or the block isn't nested. + */ + public getParentBlock( + blockIdentifier: BlockIdentifier, + ): Block | undefined { + return this.editor.transact((tr) => + getParentBlock(tr.doc, blockIdentifier), + ); + } + + /** + * Traverses all blocks in the editor depth-first, and executes a callback for each. + * @param callback The callback to execute for each block. Returning `false` stops the traversal. + * @param reverse Whether the blocks should be traversed in reverse order. + */ + public forEachBlock( + callback: (block: Block) => boolean, + reverse = false, + ): void { + const blocks = this.document.slice(); + + if (reverse) { + blocks.reverse(); + } + + function traverseBlockArray( + blockArray: Block[], + ): boolean { + for (const block of blockArray) { + if (callback(block) === false) { + return false; + } + + const children = reverse + ? block.children.slice().reverse() + : block.children; + + if (!traverseBlockArray(children)) { + return false; + } + } + + return true; + } + + traverseBlockArray(blocks); + } + + /** + * Inserts new blocks into the editor. If a block's `id` is undefined, BlockNote generates one automatically. Throws an + * error if the reference block could not be found. + * @param blocksToInsert An array of partial blocks that should be inserted. + * @param referenceBlock An identifier for an existing block, at which the new blocks should be inserted. + * @param placement Whether the blocks should be inserted just before, just after, or nested inside the + * `referenceBlock`. + */ + public insertBlocks( + blocksToInsert: PartialBlock[], + referenceBlock: BlockIdentifier, + placement: "before" | "after" = "before", + ) { + return this.editor.transact((tr) => + insertBlocks(tr, blocksToInsert, referenceBlock, placement), + ); + } + + /** + * Updates an existing block in the editor. Since updatedBlock is a PartialBlock object, some fields might not be + * defined. These undefined fields are kept as-is from the existing block. Throws an error if the block to update could + * not be found. + * @param blockToUpdate The block that should be updated. + * @param update A partial block which defines how the existing block should be changed. + */ + public updateBlock( + blockToUpdate: BlockIdentifier, + update: PartialBlock, + ) { + return this.editor.transact((tr) => updateBlock(tr, blockToUpdate, update)); + } + + /** + * Removes existing blocks from the editor. Throws an error if any of the blocks could not be found. + * @param blocksToRemove An array of identifiers for existing blocks that should be removed. + */ + public removeBlocks(blocksToRemove: BlockIdentifier[]) { + return this.editor.transact( + (tr) => removeAndInsertBlocks(tr, blocksToRemove, []).removedBlocks, + ); + } + + /** + * Replaces existing blocks in the editor with new blocks. If the blocks that should be removed are not adjacent or + * are at different nesting levels, `blocksToInsert` will be inserted at the position of the first block in + * `blocksToRemove`. Throws an error if any of the blocks to remove could not be found. + * @param blocksToRemove An array of blocks that should be replaced. + * @param blocksToInsert An array of partial blocks to replace the old ones with. + */ + public replaceBlocks( + blocksToRemove: BlockIdentifier[], + blocksToInsert: PartialBlock[], + ) { + return this.editor.transact((tr) => + removeAndInsertBlocks(tr, blocksToRemove, blocksToInsert), + ); + } + + /** + * Checks if the block containing the text cursor can be nested. + */ + public canNestBlock() { + return canNestBlock(this.editor); + } + + /** + * Nests the block containing the text cursor into the block above it. + */ + public nestBlock() { + nestBlock(this.editor); + } + + /** + * Checks if the block containing the text cursor is nested. + */ + public canUnnestBlock() { + return canUnnestBlock(this.editor); + } + + /** + * Lifts the block containing the text cursor out of its parent. + */ + public unnestBlock() { + unnestBlock(this.editor); + } + + /** + * Moves the selected blocks up. If the previous block has children, moves + * them to the end of its children. If there is no previous block, but the + * current blocks share a common parent, moves them out of & before it. + */ + public moveBlocksUp() { + return moveBlocksUp(this.editor); + } + + /** + * Moves the selected blocks down. If the next block has children, moves + * them to the start of its children. If there is no next block, but the + * current blocks share a common parent, moves them out of & after it. + */ + public moveBlocksDown() { + return moveBlocksDown(this.editor); + } +} diff --git a/packages/core/src/editor/managers/CollaborationManager.ts b/packages/core/src/editor/managers/CollaborationManager.ts new file mode 100644 index 0000000000..b530cebfe5 --- /dev/null +++ b/packages/core/src/editor/managers/CollaborationManager.ts @@ -0,0 +1,209 @@ +import * as Y from "yjs"; +import { redoCommand, undoCommand } from "y-prosemirror"; +import { CommentsPlugin } from "../../extensions/Comments/CommentsPlugin.js"; +import { CommentMark } from "../../extensions/Comments/CommentMark.js"; +import { ForkYDocPlugin } from "../../extensions/Collaboration/ForkYDocPlugin.js"; +import { SyncPlugin } from "../../extensions/Collaboration/SyncPlugin.js"; +import { UndoPlugin } from "../../extensions/Collaboration/UndoPlugin.js"; +import { CursorPlugin } from "../../extensions/Collaboration/CursorPlugin.js"; +import type { ThreadStore, User } from "../../comments/index.js"; +import type { BlockNoteEditor } from "../BlockNoteEditor.js"; + +export interface CollaborationOptions { + /** + * The Yjs XML fragment that's used for collaboration. + */ + fragment: Y.XmlFragment; + /** + * The user info for the current user that's shown to other collaborators. + */ + user: { + name: string; + color: string; + }; + /** + * A Yjs provider (used for awareness / cursor information) + * Can be null for comments-only mode + */ + provider: any; + /** + * Optional function to customize how cursors of users are rendered + */ + renderCursor?: (user: any) => HTMLElement; + /** + * Optional flag to set when the user label should be shown with the default + * collaboration cursor. Setting to "always" will always show the label, + * while "activity" will only show the label when the user moves the cursor + * or types. Defaults to "activity". + */ + showCursorLabels?: "always" | "activity"; + /** + * Comments configuration - can be used with or without collaboration + */ + comments?: { + threadStore: ThreadStore; + }; + /** + * Function to resolve user IDs to user objects - required for comments + */ + resolveUsers?: (userIds: string[]) => Promise; +} + +/** + * CollaborationManager handles all collaboration-related functionality + * This manager is completely optional and can be tree-shaken if not used + */ +export class CollaborationManager { + private editor: BlockNoteEditor; + private options: CollaborationOptions; + private _commentsPlugin?: CommentsPlugin; + private _forkYDocPlugin?: ForkYDocPlugin; + private _syncPlugin?: SyncPlugin; + private _undoPlugin?: UndoPlugin; + private _cursorPlugin?: CursorPlugin; + + constructor(editor: BlockNoteEditor, options: CollaborationOptions) { + this.editor = editor; + this.options = options; + } + + /** + * Get the sync plugin instance + */ + public get syncPlugin(): SyncPlugin | undefined { + return this._syncPlugin; + } + + /** + * Get the undo plugin instance + */ + public get undoPlugin(): UndoPlugin | undefined { + return this._undoPlugin; + } + + /** + * Get the cursor plugin instance + */ + public get cursorPlugin(): CursorPlugin | undefined { + return this._cursorPlugin; + } + + /** + * Get the fork YDoc plugin instance + */ + public get forkYDocPlugin(): ForkYDocPlugin | undefined { + return this._forkYDocPlugin; + } + + // Initialize collaboration plugins + public initExtensions(): Record { + // Only create collaboration plugins when real-time collaboration is enabled + const extensions: Record = {}; + + // Initialize sync plugin + this._syncPlugin = new SyncPlugin(this.options.fragment); + extensions.ySyncPlugin = this._syncPlugin; + + // Initialize undo plugin + this._undoPlugin = new UndoPlugin({ editor: this.editor }); + extensions.yUndoPlugin = this._undoPlugin; + + // Initialize cursor plugin if provider has awareness + if (this.options.provider?.awareness) { + this._cursorPlugin = new CursorPlugin(this.options); + extensions.yCursorPlugin = this._cursorPlugin; + } + + // Initialize fork YDoc plugin + this._forkYDocPlugin = new ForkYDocPlugin({ + editor: this.editor, + collaboration: this.options, + }); + extensions.forkYDocPlugin = this._forkYDocPlugin; + + if (this.options.comments) { + if (!this.options.resolveUsers) { + throw new Error("resolveUsers is required when using comments"); + } + + // Create CommentsPlugin instance and add it to editor extensions + this._commentsPlugin = new CommentsPlugin( + this.editor, + this.options.comments.threadStore, + CommentMark.name, + this.options.resolveUsers, + ); + + // Add the comments plugin to the editor's extensions + extensions.comments = this._commentsPlugin; + extensions.commentMark = CommentMark; + } + return extensions; + } + + /** + * Update the user info for the current user that's shown to other collaborators + */ + public updateUserInfo(user: { name: string; color: string }) { + const cursor = this.cursorPlugin; + if (!cursor) { + throw new Error( + "Cannot update collaboration user info when collaboration is disabled.", + ); + } + cursor.updateUser(user); + } + + /** + * Get the collaboration undo command + */ + public getUndoCommand() { + return undoCommand; + } + + /** + * Get the collaboration redo command + */ + public getRedoCommand() { + return redoCommand; + } + + /** + * Check if initial content should be avoided due to collaboration + */ + public shouldAvoidInitialContent(): boolean { + // Only avoid initial content when real-time collaboration is enabled + // (i.e., when we have a provider) + return !!this.options.provider; + } + + /** + * Get the collaboration options + */ + public getOptions(): CollaborationOptions { + return this.options; + } + + /** + * Get the comments plugin if available + */ + public get comments(): CommentsPlugin | undefined { + return this._commentsPlugin; + } + + /** + * Check if comments are enabled + */ + public get hasComments(): boolean { + return !!this.options.comments; + } + + /** + * Get the resolveUsers function + */ + public get resolveUsers(): + | ((userIds: string[]) => Promise) + | undefined { + return this.options.resolveUsers; + } +} diff --git a/packages/core/src/editor/managers/EventManager.ts b/packages/core/src/editor/managers/EventManager.ts new file mode 100644 index 0000000000..90f7a49c6a --- /dev/null +++ b/packages/core/src/editor/managers/EventManager.ts @@ -0,0 +1,139 @@ +import type { BlockNoteEditor } from "../BlockNoteEditor.js"; +import { + getBlocksChangedByTransaction, + type BlocksChanged, +} from "../../api/nodeUtil.js"; +import { Transaction } from "prosemirror-state"; + +/** + * A function that can be used to unsubscribe from an event. + */ +export type Unsubscribe = () => void; + +/** + * EventManager is a class which manages the events of the editor + */ +export class EventManager { + constructor(private editor: Editor) {} + + /** + * Register a callback that will be called when the editor changes. + */ + public onChange( + callback: (ctx: { editor: Editor; get changes(): BlocksChanged }) => void, + ): Unsubscribe { + if (this.editor.headless) { + // Note: would be nice if this is possible in headless mode as well + return () => { + // noop + }; + } + + const cb = ({ + transaction, + appendedTransactions, + }: { + transaction: Transaction; + appendedTransactions: Transaction[]; + }) => { + callback({ + editor: this.editor, + get changes(): BlocksChanged { + return getBlocksChangedByTransaction( + transaction, + appendedTransactions, + ); + }, + }); + }; + + this.editor._tiptapEditor.on("v3-update", cb); + + return () => { + this.editor._tiptapEditor.off("v3-update", cb); + }; + } + + /** + * Register a callback that will be called when the selection changes. + */ + public onSelectionChange( + callback: (ctx: { + editor: Editor; + // get selection(): Location; + }) => void, + /** + * If true, the callback will be triggered when the selection changes due to a yjs sync (i.e.: other user was typing) + */ + includeSelectionChangedByRemote = false, + ): Unsubscribe { + if (this.editor.headless) { + // Note: would be nice if this is possible in headless mode as well + return () => { + // noop + }; + } + + const cb = (e: { transaction: Transaction }) => { + if ( + e.transaction.getMeta("$y-sync") && + !includeSelectionChangedByRemote + ) { + // selection changed because of a yjs sync (i.e.: other user was typing) + // we don't want to trigger the callback in this case + return; + } + callback({ editor: this.editor }); + }; + + this.editor._tiptapEditor.on("selectionUpdate", cb); + + return () => { + this.editor._tiptapEditor.off("selectionUpdate", cb); + }; + } + + /** + * Register a callback that will be called when the editor is mounted. + */ + public onMount(callback: (ctx: { editor: Editor }) => void): Unsubscribe { + if (this.editor.headless) { + // Note: would be nice if this is possible in headless mode as well + return () => { + // noop + }; + } + + const cb = () => { + callback({ editor: this.editor }); + }; + + this.editor._tiptapEditor.on("mount", cb); + + return () => { + this.editor._tiptapEditor.off("mount", cb); + }; + } + + /** + * Register a callback that will be called when the editor is unmounted. + */ + public onUnmount(callback: (ctx: { editor: Editor }) => void): Unsubscribe { + if (this.editor.headless) { + // Note: would be nice if this is possible in headless mode as well + return () => { + // noop + }; + } + + const cb = () => { + callback({ editor: this.editor }); + }; + + this.editor._tiptapEditor.on("unmount", cb); + + return () => { + this.editor._tiptapEditor.off("unmount", cb); + }; + } +} diff --git a/packages/core/src/editor/managers/ExportManager.ts b/packages/core/src/editor/managers/ExportManager.ts new file mode 100644 index 0000000000..7c7dcf067f --- /dev/null +++ b/packages/core/src/editor/managers/ExportManager.ts @@ -0,0 +1,144 @@ +import { createExternalHTMLExporter } from "../../api/exporters/html/externalHTMLExporter.js"; +import { createInternalHTMLSerializer } from "../../api/exporters/html/internalHTMLSerializer.js"; +import { blocksToMarkdown } from "../../api/exporters/markdown/markdownExporter.js"; +import { HTMLToBlocks } from "../../api/parsers/html/parseHTML.js"; +import { + markdownToBlocks, + markdownToHTML, +} from "../../api/parsers/markdown/parseMarkdown.js"; +import { nestedListsToBlockNoteStructure } from "../../api/parsers/html/util/nestedLists.js"; +import { + Block, + DefaultBlockSchema, + DefaultInlineContentSchema, + DefaultStyleSchema, + PartialBlock, +} from "../../blocks/defaultBlocks.js"; +import { + BlockSchema, + InlineContentSchema, + StyleSchema, +} from "../../schema/index.js"; +import { BlockNoteEditor } from "../BlockNoteEditor.js"; + +export class ExportManager< + BSchema extends BlockSchema = DefaultBlockSchema, + ISchema extends InlineContentSchema = DefaultInlineContentSchema, + SSchema extends StyleSchema = DefaultStyleSchema, +> { + constructor(private editor: BlockNoteEditor) {} + + /** + * Exports blocks into a simplified HTML string. To better conform to HTML standards, children of blocks which aren't list + * items are un-nested in the output HTML. + * + * @param blocks An array of blocks that should be serialized into HTML. + * @returns The blocks, serialized as an HTML string. + */ + public async blocksToHTMLLossy( + blocks: PartialBlock[] = this.editor.document, + ): Promise { + const exporter = createExternalHTMLExporter( + this.editor.pmSchema, + this.editor, + ); + return exporter.exportBlocks(blocks, {}); + } + + /** + * Serializes blocks into an HTML string in the format that would normally be rendered by the editor. + * + * Use this method if you want to server-side render HTML (for example, a blog post that has been edited in BlockNote) + * and serve it to users without loading the editor on the client (i.e.: displaying the blog post) + * + * @param blocks An array of blocks that should be serialized into HTML. + * @returns The blocks, serialized as an HTML string. + */ + public async blocksToFullHTML( + blocks: PartialBlock[], + ): Promise { + const exporter = createInternalHTMLSerializer( + this.editor.pmSchema, + this.editor, + ); + return exporter.serializeBlocks(blocks, {}); + } + + /** + * Parses blocks from an HTML string. Tries to create `Block` objects out of any HTML block-level elements, and + * `InlineNode` objects from any HTML inline elements, though not all element types are recognized. If BlockNote + * doesn't recognize an HTML element's tag, it will parse it as a paragraph or plain text. + * @param html The HTML string to parse blocks from. + * @returns The blocks parsed from the HTML string. + */ + public async tryParseHTMLToBlocks( + html: string, + ): Promise[]> { + return HTMLToBlocks(html, this.editor.pmSchema); + } + + /** + * Serializes blocks into a Markdown string. The output is simplified as Markdown does not support all features of + * BlockNote - children of blocks which aren't list items are un-nested and certain styles are removed. + * @param blocks An array of blocks that should be serialized into Markdown. + * @returns The blocks, serialized as a Markdown string. + */ + public async blocksToMarkdownLossy( + blocks: PartialBlock[] = this.editor.document, + ): Promise { + return blocksToMarkdown(blocks, this.editor.pmSchema, this.editor, {}); + } + + /** + * Creates a list of blocks from a Markdown string. Tries to create `Block` and `InlineNode` objects based on + * Markdown syntax, though not all symbols are recognized. If BlockNote doesn't recognize a symbol, it will parse it + * as text. + * @param markdown The Markdown string to parse blocks from. + * @returns The blocks parsed from the Markdown string. + */ + public async tryParseMarkdownToBlocks( + markdown: string, + ): Promise[]> { + return markdownToBlocks(markdown, this.editor.pmSchema); + } + + /** + * This will convert HTML into a format that is compatible with BlockNote. + */ + private convertHtmlToBlockNoteHtml(html: string) { + const htmlNode = nestedListsToBlockNoteStructure(html.trim()); + return htmlNode.innerHTML; + } + + /** + * Paste HTML into the editor. Defaults to converting HTML to BlockNote HTML. + * @param html The HTML to paste. + * @param raw Whether to paste the HTML as is, or to convert it to BlockNote HTML. + */ + public pasteHTML(html: string, raw = false) { + let htmlToPaste = html; + if (!raw) { + htmlToPaste = this.convertHtmlToBlockNoteHtml(html); + } + if (!htmlToPaste) { + return; + } + this.editor.prosemirrorView?.pasteHTML(htmlToPaste); + } + + /** + * Paste text into the editor. Defaults to interpreting text as markdown. + * @param text The text to paste. + */ + public pasteText(text: string) { + return this.editor.prosemirrorView?.pasteText(text); + } + + /** + * Paste markdown into the editor. + * @param markdown The markdown to paste. + */ + public async pasteMarkdown(markdown: string) { + return this.pasteHTML(await markdownToHTML(markdown)); + } +} diff --git a/packages/core/src/editor/managers/ExtensionManager.ts b/packages/core/src/editor/managers/ExtensionManager.ts new file mode 100644 index 0000000000..4d35b68c17 --- /dev/null +++ b/packages/core/src/editor/managers/ExtensionManager.ts @@ -0,0 +1,130 @@ +import { FilePanelProsemirrorPlugin } from "../../extensions/FilePanel/FilePanelPlugin.js"; +import { FormattingToolbarProsemirrorPlugin } from "../../extensions/FormattingToolbar/FormattingToolbarPlugin.js"; +import { LinkToolbarProsemirrorPlugin } from "../../extensions/LinkToolbar/LinkToolbarPlugin.js"; +import { ShowSelectionPlugin } from "../../extensions/ShowSelection/ShowSelectionPlugin.js"; +import { SideMenuProsemirrorPlugin } from "../../extensions/SideMenu/SideMenuPlugin.js"; +import { SuggestionMenuProseMirrorPlugin } from "../../extensions/SuggestionMenu/SuggestionPlugin.js"; +import { TableHandlesProsemirrorPlugin } from "../../extensions/TableHandles/TableHandlesPlugin.js"; +import { BlockNoteExtension } from "../BlockNoteExtension.js"; +import { BlockNoteEditor } from "../BlockNoteEditor.js"; + +export class ExtensionManager { + constructor(private editor: BlockNoteEditor) {} + + /** + * Shorthand to get a typed extension from the editor, by + * just passing in the extension class. + * + * @param ext - The extension class to get + * @param key - optional, the key of the extension in the extensions object (defaults to the extension name) + * @returns The extension instance + */ + public extension( + ext: { new (...args: any[]): T } & typeof BlockNoteExtension, + key = ext.key(), + ): T { + const extension = this.editor.extensions[key] as T; + if (!extension) { + throw new Error(`Extension ${key} not found`); + } + return extension; + } + + /** + * Get all extensions + */ + public getExtensions() { + return this.editor.extensions; + } + + /** + * Get a specific extension by key + */ + public getExtension(key: string) { + return this.editor.extensions[key]; + } + + /** + * Check if an extension exists + */ + public hasExtension(key: string): boolean { + return key in this.editor.extensions; + } + + // Plugin getters - these provide access to the core BlockNote plugins + + /** + * Get the formatting toolbar plugin + */ + public get formattingToolbar(): FormattingToolbarProsemirrorPlugin { + return this.editor.extensions[ + "formattingToolbar" + ] as FormattingToolbarProsemirrorPlugin; + } + + /** + * Get the link toolbar plugin + */ + public get linkToolbar(): LinkToolbarProsemirrorPlugin { + return this.editor.extensions[ + "linkToolbar" + ] as LinkToolbarProsemirrorPlugin; + } + + /** + * Get the side menu plugin + */ + public get sideMenu(): SideMenuProsemirrorPlugin { + return this.editor.extensions["sideMenu"] as SideMenuProsemirrorPlugin< + any, + any, + any + >; + } + + /** + * Get the suggestion menus plugin + */ + public get suggestionMenus(): SuggestionMenuProseMirrorPlugin { + return this.editor.extensions[ + "suggestionMenus" + ] as SuggestionMenuProseMirrorPlugin; + } + + /** + * Get the file panel plugin (if available) + */ + public get filePanel(): FilePanelProsemirrorPlugin | undefined { + return this.editor.extensions["filePanel"] as + | FilePanelProsemirrorPlugin + | undefined; + } + + /** + * Get the table handles plugin (if available) + */ + public get tableHandles(): + | TableHandlesProsemirrorPlugin + | undefined { + return this.editor.extensions["tableHandles"] as + | TableHandlesProsemirrorPlugin + | undefined; + } + + /** + * Get the show selection plugin + */ + public get showSelectionPlugin(): ShowSelectionPlugin { + return this.editor.extensions["showSelection"] as ShowSelectionPlugin; + } + + /** + * Check if collaboration is enabled (Yjs or Liveblocks) + */ + public get isCollaborationEnabled(): boolean { + return ( + this.hasExtension("ySyncPlugin") || + this.hasExtension("liveblocksExtension") + ); + } +} diff --git a/packages/core/src/editor/managers/Location.ts b/packages/core/src/editor/managers/Location.ts new file mode 100644 index 0000000000..ac29b226db --- /dev/null +++ b/packages/core/src/editor/managers/Location.ts @@ -0,0 +1,96 @@ +/** + * A block id is a unique identifier for a block, it is a string. + */ +export type BlockId = string; + +/** + * A block identifier is a unique identifier for a block, it is either a string, or can be object with an id property (out of convenience). + */ +export type BlockIdentifier = { id: BlockId } | BlockId; + +/** + * A point is a path with an offset, it is used to identify a specific position within a block. + */ +export type Point = { + id: BlockId; + /** + * The number of characters from the start of the block. + */ + offset: number; +}; + +/** + * A range is a pair of points, it is used to identify a range of blocks within a document. + */ +export type Range = { + anchor: Point; + head: Point; +}; + +/** + * A block range is a pair of block ids, it is used to identify a range of blocks within a document. + */ +export type BlockRange = [BlockId, BlockId]; + +/** + * A location is a path, point, or range, it is used to identify positions within a document. + */ +export type Location = BlockIdentifier | Point | Range; + +export function toId(id: BlockIdentifier): BlockId { + return typeof id === "string" ? id : id.id; +} + +export function isBlockId(id: unknown): id is BlockId { + return typeof id === "string"; +} + +export function isBlockIdentifier(id: unknown): id is BlockIdentifier { + return !!id && typeof id === "object" && "id" in id; +} + +export function isPoint(location: unknown): location is Point { + return ( + !!location && + typeof location === "object" && + "offset" in location && + typeof location.offset === "number" && + "id" in location && + isBlockId(location.id) + ); +} + +export function isRange(location: unknown): location is Range { + return ( + !!location && + typeof location === "object" && + "anchor" in location && + isPoint(location.anchor) && + "head" in location && + isPoint(location.head) + ); +} + +export function isLocation(location: unknown): location is Location { + return isBlockId(location) || isPoint(location) || isRange(location); +} + +export function getBlockRange(location: Location): [BlockId, BlockId] { + if (isBlockId(location)) { + return [location, location]; + } + + if (isBlockIdentifier(location)) { + return [location.id, location.id]; + } + + if (isPoint(location)) { + return [location.id, location.id]; + } + + if (isRange(location)) { + return [location.anchor.id, location.head.id]; + } + + throw new Error("Invalid location", { cause: { location } }); +} diff --git a/packages/core/src/editor/managers/LocationManager.ts b/packages/core/src/editor/managers/LocationManager.ts new file mode 100644 index 0000000000..73b02a3c0c --- /dev/null +++ b/packages/core/src/editor/managers/LocationManager.ts @@ -0,0 +1,113 @@ +import { + Block, + DefaultBlockSchema, + DefaultInlineContentSchema, + DefaultStyleSchema, +} from "../../blocks/defaultBlocks.js"; +import { + BlockSchema, + InlineContentSchema, + StyleSchema, +} from "../../schema/index.js"; +import { BlockId, getBlockRange, Location } from "./Location.js"; + +export class LocationManager< + BSchema extends BlockSchema = DefaultBlockSchema, + ISchema extends InlineContentSchema = DefaultInlineContentSchema, + SSchema extends StyleSchema = DefaultStyleSchema, +> { + constructor(private opts: { document: Block[] }) {} + + public get document(): Block[] { + return this.opts.document; + } + + private depthTreeCache: WeakMap< + Block[], + Map< + BlockId, + { + block: Block; + depth: number; + parentId: BlockId | undefined; + children: BlockId[]; + rootId: BlockId; + } + > + > = new WeakMap(); + + public get depthTree(): Map< + BlockId, + { + block: Block; + depth: number; + parentId: BlockId | undefined; + children: BlockId[]; + rootId: BlockId; + } + > { + if (this.depthTreeCache.has(this.document)) { + return this.depthTreeCache.get(this.document)!; + } + + const depthTree = new Map< + BlockId, + { + block: Block; + depth: number; + parentId: BlockId | undefined; + children: BlockId[]; + rootId: BlockId; + } + >(); + + const addBlockToTree = ( + block: Block, + depth: number, + parentId: BlockId | undefined, + rootId: BlockId, + ) => { + depthTree.set(block.id, { + block, + depth, + parentId, + children: block.children?.map((b) => b.id) ?? [], + rootId, + }); + + if (block.children) { + block.children.forEach((child) => { + addBlockToTree(child, depth + 1, block.id, rootId); + }); + } + }; + + this.document.forEach((block) => { + addBlockToTree(block, 0, undefined, block.id); + }); + + return depthTree; + } + + /** + * Returns all blocks that are included in the location (inclusive) only at the top level. + */ + public getBlocks(location: Location): Block[] { + const [startId, endId] = getBlockRange(location); + const startBlock = this.depthTree.get( + this.depthTree.get(startId)?.rootId || "", + ); + const endBlock = this.depthTree.get( + this.depthTree.get(endId)?.rootId || "", + ); + + if (!startBlock || !endBlock) { + return []; + } + + const startIndex = this.document.findIndex((block) => block.id === startId); + const endIndex = this.document.findIndex((block) => block.id === endId); + + return this.document.slice(startIndex, endIndex + 1); + } +} diff --git a/packages/core/src/editor/managers/SelectionManager.ts b/packages/core/src/editor/managers/SelectionManager.ts new file mode 100644 index 0000000000..a91487251c --- /dev/null +++ b/packages/core/src/editor/managers/SelectionManager.ts @@ -0,0 +1,114 @@ +import { + getSelection, + getSelectionCutBlocks, + setSelection, +} from "../../api/blockManipulation/selections/selection.js"; +import { + getTextCursorPosition, + setTextCursorPosition, +} from "../../api/blockManipulation/selections/textCursorPosition.js"; +import { isNodeSelection, posToDOMRect } from "@tiptap/core"; +import { + BlockIdentifier, + BlockSchema, + InlineContentSchema, + StyleSchema, +} from "../../schema/index.js"; +import { + DefaultBlockSchema, + DefaultInlineContentSchema, + DefaultStyleSchema, +} from "../../blocks/defaultBlocks.js"; +import { Selection } from "../selectionTypes.js"; +import { TextCursorPosition } from "../cursorPositionTypes.js"; +import { BlockNoteEditor } from "../BlockNoteEditor.js"; + +export class SelectionManager< + BSchema extends BlockSchema = DefaultBlockSchema, + ISchema extends InlineContentSchema = DefaultInlineContentSchema, + SSchema extends StyleSchema = DefaultStyleSchema, +> { + constructor(private editor: BlockNoteEditor) {} + + /** + * Gets a snapshot of the current selection. This contains all blocks (included nested blocks) + * that the selection spans across. + * + * If the selection starts / ends halfway through a block, the returned data will contain the entire block. + */ + public getSelection(): Selection | undefined { + return this.editor.transact((tr) => getSelection(tr)); + } + + /** + * Gets a snapshot of the current selection. This contains all blocks (included nested blocks) + * that the selection spans across. + * + * If the selection starts / ends halfway through a block, the returned block will be + * only the part of the block that is included in the selection. + */ + public getSelectionCutBlocks() { + return this.editor.transact((tr) => getSelectionCutBlocks(tr)); + } + + /** + * Sets the selection to a range of blocks. + * @param startBlock The identifier of the block that should be the start of the selection. + * @param endBlock The identifier of the block that should be the end of the selection. + */ + public setSelection(startBlock: BlockIdentifier, endBlock: BlockIdentifier) { + return this.editor.transact((tr) => setSelection(tr, startBlock, endBlock)); + } + + /** + * Gets a snapshot of the current text cursor position. + * @returns A snapshot of the current text cursor position. + */ + public getTextCursorPosition(): TextCursorPosition< + BSchema, + ISchema, + SSchema + > { + return this.editor.transact((tr) => getTextCursorPosition(tr)); + } + + /** + * Sets the text cursor position to the start or end of an existing block. Throws an error if the target block could + * not be found. + * @param targetBlock The identifier of an existing block that the text cursor should be moved to. + * @param placement Whether the text cursor should be placed at the start or end of the block. + */ + public setTextCursorPosition( + targetBlock: BlockIdentifier, + placement: "start" | "end" = "start", + ) { + return this.editor.transact((tr) => + setTextCursorPosition(tr, targetBlock, placement), + ); + } + + /** + * Gets the bounding box of the current selection. + */ + public getSelectionBoundingBox() { + if (!this.editor.prosemirrorView) { + return undefined; + } + + const { selection } = this.editor.prosemirrorState; + + // support for CellSelections + const { ranges } = selection; + const from = Math.min(...ranges.map((range) => range.$from.pos)); + const to = Math.max(...ranges.map((range) => range.$to.pos)); + + if (isNodeSelection(selection)) { + const node = this.editor.prosemirrorView.nodeDOM(from) as HTMLElement; + if (node) { + return node.getBoundingClientRect(); + } + } + + return posToDOMRect(this.editor.prosemirrorView, from, to); + } +} diff --git a/packages/core/src/editor/managers/StateManager.ts b/packages/core/src/editor/managers/StateManager.ts new file mode 100644 index 0000000000..19ae0e5f73 --- /dev/null +++ b/packages/core/src/editor/managers/StateManager.ts @@ -0,0 +1,239 @@ +import { redo, undo } from "@tiptap/pm/history"; +import { Command, Transaction } from "prosemirror-state"; +import { BlockNoteEditor } from "../BlockNoteEditor.js"; + +export class StateManager { + constructor( + private editor: BlockNoteEditor, + private options?: { + /** + * Swap the default undo command with a custom command. + */ + undo?: typeof undo; + /** + * Swap the default redo command with a custom command. + */ + redo?: typeof redo; + }, + ) {} + + /** + * Stores the currently active transaction, which is the accumulated transaction from all {@link dispatch} calls during a {@link transact} calls + */ + private activeTransaction: Transaction | null = null; + + /** + * For any command that can be executed, you can check if it can be executed by calling `editor.can(command)`. + * @example + * ```ts + * if (editor.can(editor.undo)) { + * // show button + * } else { + * // hide button + * } + */ + public can(cb: () => boolean) { + try { + this.isInCan = true; + return cb(); + } finally { + this.isInCan = false; + } + } + + // Flag to indicate if we're in a `can` call + private isInCan = false; + + /** + * Execute a prosemirror command. This is mostly for backwards compatibility with older code. + * + * @note You should prefer the {@link transact} method when possible, as it will automatically handle the dispatching of the transaction and work across blocknote transactions. + * + * @example + * ```ts + * editor.exec((state, dispatch, view) => { + * dispatch(state.tr.insertText("Hello, world!")); + * }); + * ``` + */ + public exec(command: Command) { + if (this.activeTransaction) { + throw new Error( + "`exec` should not be called within a `transact` call, move the `exec` call outside of the `transact` call", + ); + } + if (this.isInCan) { + return this.canExec(command); + } + const state = this.editor._tiptapEditor.state; + const view = this.editor._tiptapEditor.view; + const dispatch = (tr: Transaction) => + this.editor._tiptapEditor.dispatch(tr); + + return command(state, dispatch, view); + } + + /** + * Check if a command can be executed. A command should return `false` if it is not valid in the current state. + * + * @example + * ```ts + * if (editor.canExec(command)) { + * // show button + * } else { + * // hide button + * } + * ``` + */ + public canExec(command: Command): boolean { + if (this.activeTransaction) { + throw new Error( + "`canExec` should not be called within a `transact` call, move the `canExec` call outside of the `transact` call", + ); + } + const state = this.editor._tiptapEditor.state; + const view = this.editor._tiptapEditor.view; + + return command(state, undefined, view); + } + + /** + * Execute a function within a "blocknote transaction". + * All changes to the editor within the transaction will be grouped together, so that + * we can dispatch them as a single operation (thus creating only a single undo step) + * + * @note There is no need to dispatch the transaction, as it will be automatically dispatched when the callback is complete. + * + * @example + * ```ts + * // All changes to the editor will be grouped together + * editor.transact((tr) => { + * tr.insertText("Hello, world!"); + * // These two operations will be grouped together in a single undo step + * editor.transact((tr) => { + * tr.insertText("Hello, world!"); + * }); + * }); + * ``` + */ + public transact( + callback: ( + /** + * The current active transaction, this will automatically be dispatched to the editor when the callback is complete + * If another `transact` call is made within the callback, it will be passed the same transaction as the parent call. + */ + tr: Transaction, + ) => T, + ): T { + if (this.activeTransaction) { + // Already in a transaction, so we can just callback immediately + return callback(this.activeTransaction); + } + + try { + // Enter transaction mode, by setting a starting transaction + this.activeTransaction = this.editor._tiptapEditor.state.tr; + + // Capture all dispatch'd transactions + const result = callback(this.activeTransaction); + + // Any transactions captured by the `dispatch` call will be stored in `this.activeTransaction` + const activeTr = this.activeTransaction; + + this.activeTransaction = null; + if ( + activeTr && + // Only dispatch if the transaction was actually modified in some way + (activeTr.docChanged || + activeTr.selectionSet || + activeTr.scrolledIntoView || + activeTr.storedMarksSet || + !activeTr.isGeneric) + ) { + // Dispatch the transaction if it was modified + this.editor._tiptapEditor.dispatch(activeTr); + } + + return result; + } finally { + // We wrap this in a finally block to ensure we don't disable future transactions just because of an error in the callback + this.activeTransaction = null; + } + } + /** + * Get the underlying prosemirror state + * @note Prefer using `editor.transact` to read the current editor state, as that will ensure the state is up to date + * @see https://prosemirror.net/docs/ref/#state.EditorState + */ + public get prosemirrorState() { + if (this.activeTransaction) { + throw new Error( + "`prosemirrorState` should not be called within a `transact` call, move the `prosemirrorState` call outside of the `transact` call or use `editor.transact` to read the current editor state", + ); + } + return this.editor._tiptapEditor.state; + } + + /** + * Get the underlying prosemirror view + * @see https://prosemirror.net/docs/ref/#view.EditorView + */ + public get prosemirrorView() { + return this.editor._tiptapEditor.view; + } + + public isFocused() { + return this.prosemirrorView?.hasFocus() || false; + } + + public focus() { + this.prosemirrorView?.focus(); + } + + /** + * Checks if the editor is currently editable, or if it's locked. + * @returns True if the editor is editable, false otherwise. + */ + public get isEditable(): boolean { + if (!this.editor._tiptapEditor) { + if (!this.editor.headless) { + throw new Error("no editor, but also not headless?"); + } + return false; + } + return this.editor._tiptapEditor.isEditable === undefined + ? true + : this.editor._tiptapEditor.isEditable; + } + + /** + * Makes the editor editable or locks it, depending on the argument passed. + * @param editable True to make the editor editable, or false to lock it. + */ + public set isEditable(editable: boolean) { + if (!this.editor._tiptapEditor) { + if (!this.editor.headless) { + throw new Error("no editor, but also not headless?"); + } + // not relevant on headless + return; + } + if (this.editor._tiptapEditor.options.editable !== editable) { + this.editor._tiptapEditor.setEditable(editable); + } + } + + /** + * Undo the last action. + */ + public undo() { + return this.exec(this.options?.undo ?? undo); + } + + /** + * Redo the last action. + */ + public redo() { + return this.exec(this.options?.redo ?? redo); + } +} diff --git a/packages/core/src/editor/managers/StyleManager.ts b/packages/core/src/editor/managers/StyleManager.ts new file mode 100644 index 0000000000..e03c46a6d1 --- /dev/null +++ b/packages/core/src/editor/managers/StyleManager.ts @@ -0,0 +1,182 @@ +import { insertContentAt } from "../../api/blockManipulation/insertContentAt.js"; +import { inlineContentToNodes } from "../../api/nodeConversions/blockToNode.js"; +import { + BlockSchema, + InlineContentSchema, + PartialInlineContent, + StyleSchema, + Styles, +} from "../../schema/index.js"; +import { + DefaultBlockSchema, + DefaultInlineContentSchema, + DefaultStyleSchema, +} from "../../blocks/defaultBlocks.js"; +import { TextSelection } from "@tiptap/pm/state"; +import { UnreachableCaseError } from "../../util/typescript.js"; +import { BlockNoteEditor } from "../BlockNoteEditor.js"; + +export class StyleManager< + BSchema extends BlockSchema = DefaultBlockSchema, + ISchema extends InlineContentSchema = DefaultInlineContentSchema, + SSchema extends StyleSchema = DefaultStyleSchema, +> { + constructor(private editor: BlockNoteEditor) {} + + /** + * Insert a piece of content at the current cursor position. + * + * @param content can be a string, or array of partial inline content elements + */ + public insertInlineContent( + content: PartialInlineContent, + { updateSelection = false }: { updateSelection?: boolean } = {}, + ) { + const nodes = inlineContentToNodes(content, this.editor.pmSchema); + + this.editor.transact((tr) => { + insertContentAt( + tr, + { + from: tr.selection.from, + to: tr.selection.to, + }, + nodes, + { + updateSelection, + }, + ); + }); + } + + /** + * Gets the active text styles at the text cursor position or at the end of the current selection if it's active. + */ + public getActiveStyles() { + return this.editor.transact((tr) => { + const styles: Styles = {}; + const marks = tr.selection.$to.marks(); + + for (const mark of marks) { + const config = this.editor.schema.styleSchema[mark.type.name]; + if (!config) { + if ( + // Links are not considered styles in blocknote + mark.type.name !== "link" && + // "blocknoteIgnore" tagged marks (such as comments) are also not considered BlockNote "styles" + !mark.type.spec.blocknoteIgnore + ) { + // eslint-disable-next-line no-console + console.warn("mark not found in styleschema", mark.type.name); + } + + continue; + } + if (config.propSchema === "boolean") { + (styles as any)[config.type] = true; + } else { + (styles as any)[config.type] = mark.attrs.stringValue; + } + } + + return styles; + }); + } + + /** + * Adds styles to the currently selected content. + * @param styles The styles to add. + */ + public addStyles(styles: Styles) { + for (const [style, value] of Object.entries(styles)) { + const config = this.editor.schema.styleSchema[style]; + if (!config) { + throw new Error(`style ${style} not found in styleSchema`); + } + if (config.propSchema === "boolean") { + this.editor._tiptapEditor.commands.setMark(style); + } else if (config.propSchema === "string") { + this.editor._tiptapEditor.commands.setMark(style, { + stringValue: value, + }); + } else { + throw new UnreachableCaseError(config.propSchema); + } + } + } + + /** + * Removes styles from the currently selected content. + * @param styles The styles to remove. + */ + public removeStyles(styles: Styles) { + for (const style of Object.keys(styles)) { + this.editor._tiptapEditor.commands.unsetMark(style); + } + } + + /** + * Toggles styles on the currently selected content. + * @param styles The styles to toggle. + */ + public toggleStyles(styles: Styles) { + for (const [style, value] of Object.entries(styles)) { + const config = this.editor.schema.styleSchema[style]; + if (!config) { + throw new Error(`style ${style} not found in styleSchema`); + } + if (config.propSchema === "boolean") { + this.editor._tiptapEditor.commands.toggleMark(style); + } else if (config.propSchema === "string") { + this.editor._tiptapEditor.commands.toggleMark(style, { + stringValue: value, + }); + } else { + throw new UnreachableCaseError(config.propSchema); + } + } + } + + /** + * Gets the currently selected text. + */ + public getSelectedText() { + return this.editor.transact((tr) => { + return tr.doc.textBetween(tr.selection.from, tr.selection.to); + }); + } + + /** + * Gets the URL of the last link in the current selection, or `undefined` if there are no links in the selection. + */ + public getSelectedLinkUrl() { + return this.editor._tiptapEditor.getAttributes("link").href as + | string + | undefined; + } + + /** + * Creates a new link to replace the selected content. + * @param url The link URL. + * @param text The text to display the link with. + */ + public createLink(url: string, text?: string) { + if (url === "") { + return; + } + const mark = this.editor.pmSchema.mark("link", { href: url }); + this.editor.transact((tr) => { + const { from, to } = tr.selection; + + if (text) { + tr.insertText(text, from, to).addMark(from, from + text.length, mark); + } else { + tr.setSelection(TextSelection.create(tr.doc, to)).addMark( + from, + to, + mark, + ); + } + }); + } +} diff --git a/packages/core/src/editor/managers/index.ts b/packages/core/src/editor/managers/index.ts new file mode 100644 index 0000000000..a1ec272169 --- /dev/null +++ b/packages/core/src/editor/managers/index.ts @@ -0,0 +1,8 @@ +export { BlockManager } from "./BlockManager.js"; +export { CollaborationManager, type CollaborationOptions } from "./CollaborationManager.js"; +export { EventManager } from "./EventManager.js"; +export { ExportManager } from "./ExportManager.js"; +export { ExtensionManager } from "./ExtensionManager.js"; +export { SelectionManager } from "./SelectionManager.js"; +export { StateManager } from "./StateManager.js"; +export { StyleManager } from "./StyleManager.js"; diff --git a/packages/core/src/extensions/Collaboration/ForkYDocPlugin.ts b/packages/core/src/extensions/Collaboration/ForkYDocPlugin.ts index 4ada2df1ae..c6361557e7 100644 --- a/packages/core/src/extensions/Collaboration/ForkYDocPlugin.ts +++ b/packages/core/src/extensions/Collaboration/ForkYDocPlugin.ts @@ -101,7 +101,7 @@ export class ForkYDocPlugin extends BlockNoteExtension<{ return; } - const originalFragment = this.collaboration.fragment; + const originalFragment = this.collaboration?.fragment; if (!originalFragment) { throw new Error("No fragment to fork from"); diff --git a/packages/core/src/extensions/Comments/CommentsPlugin.ts b/packages/core/src/extensions/Comments/CommentsPlugin.ts index c070fe0032..b2b0bd4828 100644 --- a/packages/core/src/extensions/Comments/CommentsPlugin.ts +++ b/packages/core/src/extensions/Comments/CommentsPlugin.ts @@ -134,13 +134,14 @@ export class CommentsPlugin extends BlockNoteExtension { private readonly editor: BlockNoteEditor, public readonly threadStore: ThreadStore, private readonly markType: string, + public readonly resolveUsers: (userIds: string[]) => Promise, ) { super(); - if (!editor.resolveUsers) { + if (!resolveUsers) { throw new Error("resolveUsers is required for comments"); } - this.userStore = new UserStore(editor.resolveUsers); + this.userStore = new UserStore(resolveUsers); // Note: Plugins are currently not destroyed when the editor is destroyed. // We should unsubscribe from the threadStore when the editor is destroyed. diff --git a/packages/server-util/package.json b/packages/server-util/package.json index 54364e0501..3c6f3243e8 100644 --- a/packages/server-util/package.json +++ b/packages/server-util/package.json @@ -61,7 +61,7 @@ "@tiptap/core": "^2.12.0", "@tiptap/pm": "^2.12.0", "jsdom": "^25.0.1", - "y-prosemirror": "^1.3.4", + "y-prosemirror": "^1.3.7", "y-protocols": "^1.0.6", "yjs": "^13.6.15" }, diff --git a/packages/xl-ai/package.json b/packages/xl-ai/package.json index bdc582e624..7a8e3ba30f 100644 --- a/packages/xl-ai/package.json +++ b/packages/xl-ai/package.json @@ -84,16 +84,16 @@ "remark-parse": "^10.0.1", "remark-stringify": "^10.0.2", "unified": "^10.1.2", - "y-prosemirror": "^1.3.4", + "y-prosemirror": "^1.3.7", "zustand": "^5.0.3" }, "devDependencies": { + "@ai-sdk/anthropic": "^1.2.12", + "@ai-sdk/google": "^1.2.20", "@ai-sdk/groq": "^1.2.9", "@ai-sdk/mistral": "^1.2.8", "@ai-sdk/openai": "^1.3.22", "@ai-sdk/openai-compatible": "^0.2.14", - "@ai-sdk/anthropic": "^1.2.12", - "@ai-sdk/google": "^1.2.20", "@mswjs/interceptors": "^0.37.5", "@types/diff": "^6.0.0", "@types/json-diff": "^1.0.3", diff --git a/playground/package.json b/playground/package.json index 46cb280dad..4f3334e49e 100644 --- a/playground/package.json +++ b/playground/package.json @@ -28,17 +28,17 @@ "@blocknote/shadcn": "workspace:^", "@blocknote/xl-ai": "workspace:^", "@blocknote/xl-docx-exporter": "workspace:^", + "@blocknote/xl-email-exporter": "workspace:^", "@blocknote/xl-multi-column": "workspace:^", "@blocknote/xl-odt-exporter": "workspace:^", "@blocknote/xl-pdf-exporter": "workspace:^", - "@blocknote/xl-email-exporter": "workspace:^", "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.5", "@liveblocks/core": "^2.23.1", - "@liveblocks/react": "^2.23.1", - "@liveblocks/react-blocknote": "^2.23.1", - "@liveblocks/react-tiptap": "^2.23.1", - "@liveblocks/react-ui": "^2.23.1", + "@liveblocks/react": "^3.1.3", + "@liveblocks/react-blocknote": "^3.1.3", + "@liveblocks/react-tiptap": "^3.1.3", + "@liveblocks/react-ui": "^3.1.3", "@mantine/core": "^7.17.3", "@mui/icons-material": "^5.16.1", "@mui/material": "^5.16.1", diff --git a/playground/src/examples.gen.tsx b/playground/src/examples.gen.tsx index 30d5a22347..24d40c1ede 100644 --- a/playground/src/examples.gen.tsx +++ b/playground/src/examples.gen.tsx @@ -1286,11 +1286,11 @@ "Collaboration" ], "dependencies": { - "@liveblocks/client": "^2.23.1", - "@liveblocks/react": "^2.23.1", - "@liveblocks/react-blocknote": "^2.23.1", - "@liveblocks/react-tiptap": "^2.23.1", - "@liveblocks/react-ui": "^2.23.1", + "@liveblocks/client": "^3.1.3", + "@liveblocks/react": "^3.1.3", + "@liveblocks/react-blocknote": "^3.1.3", + "@liveblocks/react-tiptap": "^3.1.3", + "@liveblocks/react-ui": "^3.1.3", "yjs": "^13.6.15" } as any }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f30381547..2cf2e9172a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,7 +49,7 @@ importers: version: 5.8.2 vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) wait-on: specifier: 8.0.3 version: 8.0.3 @@ -249,10 +249,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/02-block-objects: dependencies: @@ -286,10 +286,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/03-multi-column: dependencies: @@ -326,10 +326,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/04-default-blocks: dependencies: @@ -363,10 +363,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/05-removing-default-blocks: dependencies: @@ -400,10 +400,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/06-block-manipulation: dependencies: @@ -437,10 +437,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/07-selection-blocks: dependencies: @@ -474,10 +474,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/08-ariakit: dependencies: @@ -511,10 +511,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/09-shadcn: dependencies: @@ -548,10 +548,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/10-localization: dependencies: @@ -585,10 +585,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/11-custom-placeholder: dependencies: @@ -622,10 +622,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/12-multi-editor: dependencies: @@ -659,10 +659,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/13-custom-paste-handler: dependencies: @@ -696,10 +696,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/01-basic/testing: dependencies: @@ -733,10 +733,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/02-backend/01-file-uploading: dependencies: @@ -770,10 +770,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/02-backend/02-saving-loading: dependencies: @@ -807,10 +807,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/02-backend/03-s3: dependencies: @@ -850,10 +850,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/02-backend/04-rendering-static-documents: dependencies: @@ -890,10 +890,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/01-ui-elements-remove: dependencies: @@ -927,10 +927,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/02-formatting-toolbar-buttons: dependencies: @@ -964,10 +964,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/03-formatting-toolbar-block-type-items: dependencies: @@ -1007,10 +1007,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/04-side-menu-buttons: dependencies: @@ -1047,10 +1047,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/05-side-menu-drag-handle-items: dependencies: @@ -1087,10 +1087,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/06-suggestion-menus-slash-menu-items: dependencies: @@ -1127,10 +1127,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/07-suggestion-menus-slash-menu-component: dependencies: @@ -1164,10 +1164,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/08-suggestion-menus-emoji-picker-columns: dependencies: @@ -1201,10 +1201,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/09-suggestion-menus-emoji-picker-component: dependencies: @@ -1238,10 +1238,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/10-suggestion-menus-grid-mentions: dependencies: @@ -1275,10 +1275,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/11-uppy-file-panel: dependencies: @@ -1348,10 +1348,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/12-static-formatting-toolbar: dependencies: @@ -1385,10 +1385,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/13-custom-ui: dependencies: @@ -1434,10 +1434,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/14-experimental-mobile-formatting-toolbar: dependencies: @@ -1471,10 +1471,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/15-advanced-tables: dependencies: @@ -1508,10 +1508,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/03-ui-components/link-toolbar-buttons: dependencies: @@ -1545,10 +1545,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/04-theming/01-theming-dom-attributes: dependencies: @@ -1582,10 +1582,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/04-theming/02-changing-font: dependencies: @@ -1619,10 +1619,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/04-theming/03-theming-css: dependencies: @@ -1656,10 +1656,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/04-theming/04-theming-css-variables: dependencies: @@ -1693,10 +1693,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/04-theming/05-theming-css-variables-code: dependencies: @@ -1730,10 +1730,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/04-theming/06-code-block: dependencies: @@ -1770,10 +1770,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/04-theming/07-custom-code-block: dependencies: @@ -1825,10 +1825,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/05-interoperability/01-converting-blocks-to-html: dependencies: @@ -1862,10 +1862,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/05-interoperability/02-converting-blocks-from-html: dependencies: @@ -1899,10 +1899,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/05-interoperability/03-converting-blocks-to-md: dependencies: @@ -1936,10 +1936,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/05-interoperability/04-converting-blocks-from-md: dependencies: @@ -1973,10 +1973,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/05-interoperability/05-converting-blocks-to-pdf: dependencies: @@ -2019,10 +2019,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/05-interoperability/06-converting-blocks-to-docx: dependencies: @@ -2065,10 +2065,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/05-interoperability/07-converting-blocks-to-odt: dependencies: @@ -2108,10 +2108,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/05-interoperability/08-converting-blocks-to-react-email: dependencies: @@ -2151,10 +2151,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.4.1(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.4.1(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/06-custom-schema/01-alert-block: dependencies: @@ -2194,10 +2194,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/06-custom-schema/02-suggestion-menus-mentions: dependencies: @@ -2231,10 +2231,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/06-custom-schema/03-font-style: dependencies: @@ -2271,10 +2271,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/06-custom-schema/04-pdf-file-block: dependencies: @@ -2314,10 +2314,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/06-custom-schema/05-alert-block-full-ux: dependencies: @@ -2357,10 +2357,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/06-custom-schema/06-toggleable-blocks: dependencies: @@ -2394,10 +2394,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.4.1(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.4.1(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/06-custom-schema/react-custom-blocks: dependencies: @@ -2431,10 +2431,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/06-custom-schema/react-custom-inline-content: dependencies: @@ -2468,10 +2468,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/06-custom-schema/react-custom-styles: dependencies: @@ -2505,10 +2505,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/07-collaboration/01-partykit: dependencies: @@ -2548,10 +2548,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/07-collaboration/02-liveblocks: dependencies: @@ -2571,20 +2571,20 @@ importers: specifier: latest version: link:../../../packages/shadcn '@liveblocks/client': - specifier: ^2.23.1 - version: 2.23.1 + specifier: ^3.1.3 + version: 3.1.3(@types/json-schema@7.0.15) '@liveblocks/react': - specifier: ^2.23.1 - version: 2.23.1(react@19.1.0) + specifier: ^3.1.3 + version: 3.1.3(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react@19.1.0) '@liveblocks/react-blocknote': - specifier: ^2.23.1 - version: 2.23.1(95fe79c49000286f0c51c46c50c9b46e) + specifier: ^3.1.3 + version: 3.1.3(1a54bc53a7594da4c7116e5cbe2cf372) '@liveblocks/react-tiptap': - specifier: ^2.23.1 - version: 2.23.1(@tiptap/extension-collaboration-cursor@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/extension-collaboration@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/pm@2.12.0)(@tiptap/react@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tiptap/suggestion@2.11.7(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(y-protocols@1.0.6(yjs@13.6.24)) + specifier: ^3.1.3 + version: 3.1.3(@tiptap/extension-collaboration-cursor@2.11.5(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/extension-collaboration@2.11.5(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/pm@2.12.0)(@tiptap/react@2.12.0(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tiptap/suggestion@2.11.7(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(y-protocols@1.0.6(yjs@13.6.24)) '@liveblocks/react-ui': - specifier: ^2.23.1 - version: 2.23.1(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^3.1.3 + version: 3.1.3(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: specifier: ^19.1.0 version: 19.1.0 @@ -2603,10 +2603,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/07-collaboration/03-y-sweet: dependencies: @@ -2643,10 +2643,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/07-collaboration/04-comments: dependencies: @@ -2686,10 +2686,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/07-collaboration/05-comments-with-sidebar: dependencies: @@ -2729,10 +2729,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/07-collaboration/06-ghost-writer: dependencies: @@ -2772,10 +2772,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/07-collaboration/07-forking: dependencies: @@ -2815,10 +2815,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/08-extensions/01-tiptap-arrow-conversion: dependencies: @@ -2855,10 +2855,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/09-ai/01-minimal: dependencies: @@ -2907,10 +2907,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/09-ai/02-playground: dependencies: @@ -2974,10 +2974,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/09-ai/03-custom-ai-menu-items: dependencies: @@ -3032,10 +3032,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/09-ai/04-with-collaboration: dependencies: @@ -3090,10 +3090,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/vanilla-js/react-vanilla-custom-blocks: dependencies: @@ -3127,10 +3127,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/vanilla-js/react-vanilla-custom-inline-content: dependencies: @@ -3164,10 +3164,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) examples/vanilla-js/react-vanilla-custom-styles: dependencies: @@ -3201,10 +3201,10 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) packages/ariakit: dependencies: @@ -3226,7 +3226,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) eslint: specifier: ^8.10.0 version: 8.57.1 @@ -3247,13 +3247,13 @@ importers: version: 5.8.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite-plugin-externalize-deps: specifier: ^0.8.0 - version: 0.8.0(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 0.8.0(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) packages/code-block: dependencies: @@ -3290,13 +3290,13 @@ importers: version: 5.8.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) packages/core: dependencies: @@ -3412,8 +3412,8 @@ importers: specifier: ^8.3.2 version: 8.3.2 y-prosemirror: - specifier: ^1.3.4 - version: 1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24) + specifier: ^1.3.7 + version: 1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24) y-protocols: specifier: ^1.0.6 version: 1.0.6(yjs@13.6.24) @@ -3447,13 +3447,13 @@ importers: version: 5.8.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) packages/dev-scripts: dependencies: @@ -3518,7 +3518,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) eslint: specifier: ^8.10.0 version: 8.57.1 @@ -3539,13 +3539,13 @@ importers: version: 5.8.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite-plugin-externalize-deps: specifier: ^0.8.0 - version: 0.8.0(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 0.8.0(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) packages/react: dependencies: @@ -3597,7 +3597,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) eslint: specifier: ^8.10.0 version: 8.57.1 @@ -3618,16 +3618,16 @@ importers: version: 5.8.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite-plugin-externalize-deps: specifier: ^0.8.0 - version: 0.8.0(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 0.8.0(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) packages/server-util: dependencies: @@ -3647,8 +3647,8 @@ importers: specifier: ^25.0.1 version: 25.0.1(canvas@2.11.2(encoding@0.1.13)) y-prosemirror: - specifier: ^1.3.4 - version: 1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24) + specifier: ^1.3.7 + version: 1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24) y-protocols: specifier: ^1.0.6 version: 1.0.6(yjs@13.6.24) @@ -3682,13 +3682,13 @@ importers: version: 5.8.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) packages/shadcn: dependencies: @@ -3773,7 +3773,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1)) eslint: specifier: ^8.10.0 version: 8.57.1 @@ -3794,13 +3794,13 @@ importers: version: 5.8.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1)) vite-plugin-externalize-deps: specifier: ^0.8.0 - version: 0.8.0(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2)) + version: 0.8.0(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1)) packages/xl-ai: dependencies: @@ -3865,8 +3865,8 @@ importers: specifier: ^10.1.2 version: 10.1.2 y-prosemirror: - specifier: ^1.3.4 - version: 1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24) + specifier: ^1.3.7 + version: 1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24) zustand: specifier: ^5.0.3 version: 5.0.3(@types/react@19.1.8)(immer@10.1.1)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) @@ -3912,7 +3912,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) '@vitest/runner': specifier: ^2.0.3 version: 2.1.9 @@ -3945,16 +3945,16 @@ importers: version: 6.21.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite-plugin-externalize-deps: specifier: ^0.8.0 - version: 0.8.0(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 0.8.0(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) packages/xl-ai-server: dependencies: @@ -3982,19 +3982,19 @@ importers: version: 6.21.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-node: specifier: ^2.1.6 - version: 2.1.9(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vite-plugin-externalize-deps: specifier: ^0.8.0 - version: 0.8.0(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 0.8.0(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) packages/xl-docx-exporter: dependencies: @@ -4040,13 +4040,13 @@ importers: version: 5.8.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) xml-formatter: specifier: ^3.6.3 version: 3.6.5 @@ -4098,13 +4098,13 @@ importers: version: 5.8.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) packages/xl-multi-column: dependencies: @@ -4168,13 +4168,13 @@ importers: version: 5.8.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@21.1.2(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@21.1.2(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) packages/xl-odt-exporter: dependencies: @@ -4217,13 +4217,13 @@ importers: version: 5.8.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) xml-formatter: specifier: ^3.6.3 version: 3.6.5 @@ -4290,13 +4290,13 @@ importers: version: 5.8.2 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) playground: dependencies: @@ -4373,17 +4373,17 @@ importers: specifier: ^2.23.1 version: 2.23.1 '@liveblocks/react': - specifier: ^2.23.1 - version: 2.23.1(react@19.1.0) + specifier: ^3.1.3 + version: 3.1.3(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react@19.1.0) '@liveblocks/react-blocknote': - specifier: ^2.23.1 - version: 2.23.1(95fe79c49000286f0c51c46c50c9b46e) + specifier: ^3.1.3 + version: 3.1.3(1a54bc53a7594da4c7116e5cbe2cf372) '@liveblocks/react-tiptap': - specifier: ^2.23.1 - version: 2.23.1(@tiptap/extension-collaboration-cursor@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/extension-collaboration@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/pm@2.12.0)(@tiptap/react@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tiptap/suggestion@2.11.7(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(y-protocols@1.0.6(yjs@13.6.24)) + specifier: ^3.1.3 + version: 3.1.3(@tiptap/extension-collaboration-cursor@2.11.5(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/extension-collaboration@2.11.5(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/pm@2.12.0)(@tiptap/react@2.12.0(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tiptap/suggestion@2.11.7(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(y-protocols@1.0.6(yjs@13.6.24)) '@liveblocks/react-ui': - specifier: ^2.23.1 - version: 2.23.1(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^3.1.3 + version: 3.1.3(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/core': specifier: ^7.17.3 version: 7.17.3(@mantine/hooks@7.17.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -4468,7 +4468,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.4.1(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0)) + version: 4.4.1(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0)) eslint: specifier: ^8.10.0 version: 8.57.1 @@ -4486,13 +4486,13 @@ importers: version: 1.0.7(tailwindcss@3.4.17) vite: specifier: ^6 - version: 6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0) + version: 6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0)) + version: 1.8.1(eslint@8.57.1)(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0)) vite-plugin-inspect: specifier: 11.1.0 - version: 11.1.0(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0)) + version: 11.1.0(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0)) shared: dependencies: @@ -4529,7 +4529,7 @@ importers: version: link:../packages/shadcn '@playwright/experimental-ct-react': specifier: 1.51.1 - version: 1.51.1(@types/node@20.17.28)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2))(yaml@2.7.0) + version: 1.51.1(@types/node@20.17.28)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1))(yaml@2.7.0) '@playwright/test': specifier: 1.51.1 version: 1.51.1 @@ -4565,13 +4565,13 @@ importers: version: 5.0.10 vite: specifier: ^5.3.4 - version: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2) + version: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2)) + version: 1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1)) vitest: specifier: ^2.0.3 - version: 2.1.9(@types/node@20.17.28)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@20.17.28)(typescript@5.8.2))(terser@5.39.2) + version: 2.1.9(@types/node@20.17.28)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@20.17.28)(typescript@5.8.2))(terser@5.43.1) packages: @@ -5480,8 +5480,8 @@ packages: resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.27.1': - resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} + '@babel/runtime@7.27.6': + resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} '@babel/template@7.27.0': @@ -6277,21 +6277,36 @@ packages: '@floating-ui/core@1.6.9': resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + '@floating-ui/core@1.7.2': + resolution: {integrity: sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==} + '@floating-ui/dom@1.6.13': resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + '@floating-ui/dom@1.7.2': + resolution: {integrity: sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==} + '@floating-ui/react-dom@2.1.2': resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' + '@floating-ui/react-dom@2.1.4': + resolution: {integrity: sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + '@floating-ui/react@0.26.28': resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} peerDependencies: 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.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} @@ -6619,6 +6634,9 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -6631,15 +6649,21 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/source-map@0.3.10': + resolution: {integrity: sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==} '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -6652,44 +6676,78 @@ packages: '@lifeomic/attempt@3.1.0': resolution: {integrity: sha512-QZqem4QuAnAyzfz+Gj5/+SLxqwCAw2qmt7732ZXodr6VDWGeYLG6w1i/vYLa55JQM9wRuBKLmXmiZ2P0LtE5rw==} - '@liveblocks/client@2.23.1': - resolution: {integrity: sha512-/Hk1RKqEiSae6uhod/suT1nZ75/i35vk2wqU1nudMeLfWvRL7yM5j+Zz6o0PgA5B/o6ns7BloA81fjZL+6IahQ==} + '@liveblocks/client@3.1.3': + resolution: {integrity: sha512-VXEp1M0YXGYRwYBs1JlCnX/grYJJhqWiecz56RtguuMsYilHPnpIw8LM7mBrmzJCU0CwtB88TFMYBg0/0EJGOw==} '@liveblocks/core@2.23.1': resolution: {integrity: sha512-LnVMqqPlLeSrqO9XpUDgrFbxUf+lIS3Q9L3YClRxqf+q7qbr98G78onYG1QEw770czlEIfhwA8+haYai/LwdPQ==} - '@liveblocks/react-blocknote@2.23.1': - resolution: {integrity: sha512-IETmiIoXzi2164ooIdgHN7yMrhr+d6T/9eNs4lBipuDi9w2VRk/jQboGSnM8H1Y+B9eM4cMquH8txfbOFg8CAw==} + '@liveblocks/core@3.1.3': + resolution: {integrity: sha512-0qAYYXbVpCd86E8kFUHY3vrwWqXZD6OY/NvvNeXv9zlQvq3szHgnzFMo5tBP4n12Nkl4n01nkGfvAB3YkvNoCg==} + peerDependencies: + '@types/json-schema': ^7 + + '@liveblocks/react-blocknote@3.1.3': + resolution: {integrity: sha512-qg721isT4+dxqhGjjSlSVZDXOaPYJk4Ke4wfhIJN0FSeBSiwKW3oLufSdeCkTtoIR+KdV5f4Xc3AzAmLzwQCgA==} peerDependencies: '@blocknote/core': 0.25.1 - 1.0.0 '@blocknote/react': 0.25.1 - 1.0.0 '@tiptap/core': ^2.7.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@liveblocks/react-tiptap@2.23.1': - resolution: {integrity: sha512-QPdDsmk0DygoqYHkf3xh/iQdUbVaDIlRO52GIJqf8nhCnkoCOGR/isCwPAPUrq0lvRJDRoPK4VlF/88pdayM5g==} + '@liveblocks/react-tiptap@3.1.3': + resolution: {integrity: sha512-kiXrHFdGYRh2wxtBeamEhtTXnGd1/6jwbX0+0mK2b9F3wngr2oS6fKq1nMF1BzUS1RtMbFjTWRjTpE2hcc4gAA==} peerDependencies: '@tiptap/extension-collaboration': ^2.7.2 '@tiptap/extension-collaboration-cursor': ^2.7.2 '@tiptap/pm': ^2.7.2 '@tiptap/react': ^2.7.2 '@tiptap/suggestion': ^2.7.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@liveblocks/react-ui@2.23.1': - resolution: {integrity: sha512-tfKHI7MMyMZiLj+tYai7WPlQt5VrVg8bepR5n/xDfYB7vIOoLbBDHAaWS826F6D24Q2pkB0F0nyXxdOgY6Lvbw==} + '@liveblocks/react-ui@3.1.3': + resolution: {integrity: sha512-QQiADA3uK4M9wewxOHil9YsttIZIGS/0ZURmAaFzj1gEzRhaL46/10AomojachNBGalgHwQ8wMge4grS5JcDIw==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@liveblocks/react@2.23.1': - resolution: {integrity: sha512-T7dPyDWnOEaZk67DMoZdeTtGqvuEDUW82P+oFBGtpwFbyF9VMgiK2YbLCrWp+1al1/UwTphwreblRXhXSljwFQ==} + '@liveblocks/react@3.1.3': + resolution: {integrity: sha512-swobwmsdGtlGGchZdfx3L86p0RQ8y/bTZv6cLggNKXi8WGuNKrL8NtHKtW86aRdTKMhW/ewUq689Zaou4k/PRQ==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^18 || ^19 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@liveblocks/yjs@2.23.1': - resolution: {integrity: sha512-fGSWQ+SD7b0B/aY5rcqunH5MAudsxCtf+IXdIW9OR4czOcHLFeB9kJEgg1WcU8erfqevlEcIv3+VMjEn2dAiKA==} + '@liveblocks/yjs@3.1.3': + resolution: {integrity: sha512-wDQXJcoqjTxiJ8ov5UDeo0UQy5QYZq4y7Px/tueBW26rn2tSUrTCz4a/65JXSdmk+eM4GqUIW7BbCMKgIFCV7Q==} peerDependencies: yjs: ^13.6.1 @@ -7397,9 +7455,15 @@ packages: '@radix-ui/number@1.1.0': resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + '@radix-ui/primitive@1.1.1': resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} + '@radix-ui/primitive@1.1.2': + resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} + '@radix-ui/react-arrow@1.1.2': resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==} peerDependencies: @@ -7413,6 +7477,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-avatar@1.1.3': resolution: {integrity: sha512-Paen00T4P8L8gd9bNsRMw7Cbaz85oxiv+hzomsRZgFm2byltPFDtfcoqlWJ8GyZlIBWgLssJlzLCnKU0G0302g==} peerDependencies: @@ -7439,6 +7516,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-compose-refs@1.1.1': resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} peerDependencies: @@ -7448,6 +7538,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-context@1.1.1': resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} peerDependencies: @@ -7457,8 +7556,17 @@ packages: '@types/react': optional: true - '@radix-ui/react-dialog@1.1.6': - resolution: {integrity: sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==} + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dialog@1.1.14': + resolution: {integrity: sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -7479,6 +7587,28 @@ packages: '@types/react': optional: true + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.10': + resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-dismissable-layer@1.1.5': resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==} peerDependencies: @@ -7492,6 +7622,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dropdown-menu@2.1.15': + resolution: {integrity: sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-dropdown-menu@2.1.6': resolution: {integrity: sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA==} peerDependencies: @@ -7514,6 +7657,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-focus-guards@1.1.2': + resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-focus-scope@1.1.2': resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==} peerDependencies: @@ -7527,6 +7679,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-id@1.1.0': resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} peerDependencies: @@ -7536,6 +7701,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-label@2.1.2': resolution: {integrity: sha512-zo1uGMTaNlHehDyFQcDZXRJhUPDuukcnHz0/jnrup0JA6qL+AFpAnty+7VKa9esuU5xTblAZzTGYJKSKaBxBhw==} peerDependencies: @@ -7549,6 +7723,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-menu@2.1.15': + resolution: {integrity: sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-menu@2.1.6': resolution: {integrity: sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==} peerDependencies: @@ -7562,6 +7749,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-popover@1.1.14': + resolution: {integrity: sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-popover@1.1.6': resolution: {integrity: sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==} peerDependencies: @@ -7588,6 +7788,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-popper@1.2.7': + resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-portal@1.1.4': resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==} peerDependencies: @@ -7601,6 +7814,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-presence@1.1.2': resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==} peerDependencies: @@ -7614,6 +7840,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-presence@1.1.4': + resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-primitive@2.0.2': resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} peerDependencies: @@ -7627,6 +7866,32 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.10': + resolution: {integrity: sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-roving-focus@1.1.2': resolution: {integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==} peerDependencies: @@ -7653,6 +7918,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-select@2.2.5': + resolution: {integrity: sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-slot@1.1.2': resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} peerDependencies: @@ -7662,6 +7940,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-tabs@1.1.3': resolution: {integrity: sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==} peerDependencies: @@ -7688,6 +7975,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-toggle@1.1.9': + resolution: {integrity: sha512-ZoFkBBz9zv9GWer7wIjvdRxmh2wyc2oKWw6C6CseWd6/yq1DK/l5lJ+wnsmFwJZbBYqr02mrf8A2q/CVCuM3ZA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-tooltip@1.1.8': resolution: {integrity: sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==} peerDependencies: @@ -7701,6 +8001,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-tooltip@1.2.7': + resolution: {integrity: sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-use-callback-ref@1.1.0': resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} peerDependencies: @@ -7710,6 +8023,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-controllable-state@1.1.0': resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} peerDependencies: @@ -7719,6 +8041,24 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-escape-keydown@1.1.0': resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} peerDependencies: @@ -7728,6 +8068,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-layout-effect@1.1.0': resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} peerDependencies: @@ -7737,6 +8086,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-previous@1.1.0': resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==} peerDependencies: @@ -7746,6 +8104,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-rect@1.1.0': resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} peerDependencies: @@ -7755,6 +8122,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-size@1.1.0': resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} peerDependencies: @@ -7764,6 +8140,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-visually-hidden@1.1.2': resolution: {integrity: sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==} peerDependencies: @@ -7777,9 +8162,25 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@react-email/body@0.0.11': resolution: {integrity: sha512-ZSD2SxVSgUjHGrB0Wi+4tu3MEpB4fYSbezsFNEJk2xCWDBkFiOeEsjTmR5dvi+CxTK691hQTQlHv0XWuP7ENTg==} peerDependencies: @@ -8565,6 +8966,11 @@ packages: peerDependencies: '@tiptap/pm': ^2.7.0 + '@tiptap/core@2.26.1': + resolution: {integrity: sha512-fymyd/XZvYiHjBoLt1gxs024xP/LY26d43R1vluYq7AHBL/7DE3ywzy+1GEsGyAv5Je2L0KBhNIR/izbq3Kaqg==} + peerDependencies: + '@tiptap/pm': ^2.7.0 + '@tiptap/extension-bold@2.11.5': resolution: {integrity: sha512-OAq03MHEbl7MtYCUzGuwb0VpOPnM0k5ekMbEaRILFU5ZC7cEAQ36XmPIw1dQayrcuE8GZL35BKub2qtRxyC9iA==} peerDependencies: @@ -8755,6 +9161,9 @@ packages: '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/hast@2.3.10': resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} @@ -8842,6 +9251,9 @@ packages: '@types/node@20.17.50': resolution: {integrity: sha512-Mxiq0ULv/zo1OzOhwPqOA13I81CV/W3nvd3ChtQZRT5Cwz3cr0FKo/wMSsbTqL3EXpaBAEQhva2B8ByRkOIh9A==} + '@types/node@20.19.8': + resolution: {integrity: sha512-HzbgCY53T6bfu4tT7Aq3TvViJyHjLjPNaAS3HOuMc9pw97KHsUtXNX4L+wu59g1WnjsZSko35MbEqnO58rihhw==} + '@types/node@22.13.13': resolution: {integrity: sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==} @@ -9354,6 +9766,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} @@ -9479,6 +9896,10 @@ packages: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} engines: {node: '>=10'} + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} @@ -9684,8 +10105,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - browserslist@4.24.5: - resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} + browserslist@4.25.1: + resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -9744,8 +10165,8 @@ packages: caniuse-lite@1.0.30001707: resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} - caniuse-lite@1.0.30001718: - resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} + caniuse-lite@1.0.30001727: + resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} @@ -10479,8 +10900,8 @@ packages: electron-to-chromium@1.5.126: resolution: {integrity: sha512-AtH1uLcTC72LA4vfYcEJJkrMk/MY/X0ub8Hv7QGAePW2JkeUFHEL/QfS4J77R6M87Sss8O0OcqReSaN1bpyA+Q==} - electron-to-chromium@1.5.155: - resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} + electron-to-chromium@1.5.186: + resolution: {integrity: sha512-lur7L4BFklgepaJxj4DqPk7vKbTEl0pajNlg2QjE5shefmlmBLm2HvQ7PMf1R/GvlevT/581cop33/quQcfX3A==} elkjs@0.9.3: resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} @@ -10518,8 +10939,8 @@ packages: resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + enhanced-resolve@5.18.2: + resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} engines: {node: '>=10.13.0'} enquirer@2.3.6: @@ -11884,6 +12305,11 @@ packages: engines: {node: '>=16'} hasBin: true + lib0@0.2.114: + resolution: {integrity: sha512-gcxmNFzA4hv8UYi8j43uPlQ7CGcyMJ2KQb5kZASw6SnAKAf10hK12i2fjrS3Cl/ugZa5Ui6WwIu1/6MIXiHttQ==} + engines: {node: '>=16'} + hasBin: true + lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} @@ -12069,6 +12495,11 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + marked@15.0.12: + resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} + engines: {node: '>= 18'} + hasBin: true + marked@7.0.4: resolution: {integrity: sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==} engines: {node: '>= 16'} @@ -13509,6 +13940,16 @@ packages: '@types/react': optional: true + react-remove-scroll@2.7.1: + resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + react-router-dom@6.30.0: resolution: {integrity: sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA==} engines: {node: '>=14.0.0'} @@ -14305,8 +14746,8 @@ packages: uglify-js: optional: true - terser@5.39.2: - resolution: {integrity: sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==} + terser@5.43.1: + resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} engines: {node: '>=10'} hasBin: true @@ -14926,6 +15367,10 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} + webpack-sources@3.3.3: + resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} + engines: {node: '>=10.13.0'} + webpack-virtual-modules@0.5.0: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} @@ -15105,8 +15550,8 @@ packages: y-partykit@0.0.25: resolution: {integrity: sha512-/EIL73TuYX6lYnxM4mb/kTTKllS1vNjBXk9KJXFwTXFrUqMo8hbJMqnE+glvBG2EDejEI06rk3jR50lpDB8Dqg==} - y-prosemirror@1.3.4: - resolution: {integrity: sha512-fvklwVnjowbrtmM5PkyIrHNoqe7Bt1KEtBvucsJNCSZwOQYNR5UcKwJmhUOaEHUAyYPg7RrVqnMK/3DvMBU8dA==} + y-prosemirror@1.3.7: + resolution: {integrity: sha512-NpM99WSdD4Fx4if5xOMDpPtU3oAmTSjlzh5U4353ABbRHl1HtAFUx6HlebLZfyFxXN9jzKMDkVbcRjqOZVkYQg==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} peerDependencies: prosemirror-model: ^1.7.1 @@ -16607,7 +17052,7 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/runtime@7.27.1': {} + '@babel/runtime@7.27.6': {} '@babel/template@7.27.0': dependencies: @@ -17148,17 +17593,32 @@ snapshots: dependencies: '@floating-ui/utils': 0.2.9 + '@floating-ui/core@1.7.2': + dependencies: + '@floating-ui/utils': 0.2.10 + '@floating-ui/dom@1.6.13': dependencies: '@floating-ui/core': 1.6.9 '@floating-ui/utils': 0.2.9 + '@floating-ui/dom@1.7.2': + dependencies: + '@floating-ui/core': 1.7.2 + '@floating-ui/utils': 0.2.10 + '@floating-ui/react-dom@2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@floating-ui/dom': 1.6.13 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) + '@floating-ui/react-dom@2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/dom': 1.7.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + '@floating-ui/react@0.26.28(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -17167,6 +17627,8 @@ snapshots: react-dom: 19.1.0(react@19.1.0) tabbable: 6.2.0 + '@floating-ui/utils@0.2.10': {} + '@floating-ui/utils@0.2.9': {} '@hapi/hoek@9.3.0': {} @@ -17462,6 +17924,11 @@ snapshots: '@types/yargs': 17.0.33 chalk: 4.1.2 + '@jridgewell/gen-mapping@0.3.12': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -17472,18 +17939,25 @@ snapshots: '@jridgewell/set-array@1.2.1': {} - '@jridgewell/source-map@0.3.6': + '@jridgewell/source-map@0.3.10': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.4': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.29': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -17495,34 +17969,42 @@ snapshots: '@lifeomic/attempt@3.1.0': {} - '@liveblocks/client@2.23.1': + '@liveblocks/client@3.1.3(@types/json-schema@7.0.15)': dependencies: - '@liveblocks/core': 2.23.1 + '@liveblocks/core': 3.1.3(@types/json-schema@7.0.15) + transitivePeerDependencies: + - '@types/json-schema' '@liveblocks/core@2.23.1': {} - '@liveblocks/react-blocknote@2.23.1(95fe79c49000286f0c51c46c50c9b46e)': + '@liveblocks/core@3.1.3(@types/json-schema@7.0.15)': + dependencies: + '@types/json-schema': 7.0.15 + + '@liveblocks/react-blocknote@3.1.3(1a54bc53a7594da4c7116e5cbe2cf372)': dependencies: '@blocknote/core': link:packages/core '@blocknote/react': link:packages/react - '@liveblocks/client': 2.23.1 - '@liveblocks/core': 2.23.1 - '@liveblocks/react': 2.23.1(react@19.1.0) - '@liveblocks/react-tiptap': 2.23.1(@tiptap/extension-collaboration-cursor@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/extension-collaboration@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/pm@2.12.0)(@tiptap/react@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tiptap/suggestion@2.11.7(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(y-protocols@1.0.6(yjs@13.6.24)) - '@liveblocks/react-ui': 2.23.1(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@liveblocks/yjs': 2.23.1(yjs@13.6.24) - '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) + '@liveblocks/client': 3.1.3(@types/json-schema@7.0.15) + '@liveblocks/core': 3.1.3(@types/json-schema@7.0.15) + '@liveblocks/react': 3.1.3(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react@19.1.0) + '@liveblocks/react-tiptap': 3.1.3(@tiptap/extension-collaboration-cursor@2.11.5(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/extension-collaboration@2.11.5(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/pm@2.12.0)(@tiptap/react@2.12.0(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tiptap/suggestion@2.11.7(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(y-protocols@1.0.6(yjs@13.6.24)) + '@liveblocks/react-ui': 3.1.3(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@liveblocks/yjs': 3.1.3(@types/json-schema@7.0.15)(yjs@13.6.24) + '@tiptap/core': 2.26.1(@tiptap/pm@2.12.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) vitest-tsconfig-paths: 3.4.1 + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) transitivePeerDependencies: - '@tiptap/extension-collaboration' - '@tiptap/extension-collaboration-cursor' - '@tiptap/pm' - '@tiptap/react' - '@tiptap/suggestion' - - '@types/react' - - '@types/react-dom' + - '@types/json-schema' - prosemirror-model - prosemirror-state - prosemirror-view @@ -17530,70 +18012,82 @@ snapshots: - y-protocols - yjs - '@liveblocks/react-tiptap@2.23.1(@tiptap/extension-collaboration-cursor@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/extension-collaboration@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/pm@2.12.0)(@tiptap/react@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tiptap/suggestion@2.11.7(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(y-protocols@1.0.6(yjs@13.6.24))': - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@liveblocks/client': 2.23.1 - '@liveblocks/core': 2.23.1 - '@liveblocks/react': 2.23.1(react@19.1.0) - '@liveblocks/react-ui': 2.23.1(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@liveblocks/yjs': 2.23.1(yjs@13.6.24) - '@radix-ui/react-select': 2.1.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle': 1.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) - '@tiptap/extension-collaboration': 2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)) - '@tiptap/extension-collaboration-cursor': 2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)) + '@liveblocks/react-tiptap@3.1.3(@tiptap/extension-collaboration-cursor@2.11.5(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/extension-collaboration@2.11.5(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)))(@tiptap/pm@2.12.0)(@tiptap/react@2.12.0(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tiptap/suggestion@2.11.7(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(y-protocols@1.0.6(yjs@13.6.24))': + dependencies: + '@floating-ui/react-dom': 2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@liveblocks/client': 3.1.3(@types/json-schema@7.0.15) + '@liveblocks/core': 3.1.3(@types/json-schema@7.0.15) + '@liveblocks/react': 3.1.3(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react@19.1.0) + '@liveblocks/react-ui': 3.1.3(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@liveblocks/yjs': 3.1.3(@types/json-schema@7.0.15)(yjs@13.6.24) + '@radix-ui/react-select': 2.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-toggle': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tiptap/core': 2.26.1(@tiptap/pm@2.12.0) + '@tiptap/extension-collaboration': 2.11.5(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)) + '@tiptap/extension-collaboration-cursor': 2.11.5(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24)) '@tiptap/pm': 2.12.0 - '@tiptap/react': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tiptap/suggestion': 2.11.7(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0) + '@tiptap/react': 2.12.0(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tiptap/suggestion': 2.11.7(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0) cmdk: 1.1.1(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - y-prosemirror: 1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24) + y-prosemirror: 1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24) yjs: 13.6.24 + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' + - '@types/json-schema' - prosemirror-model - prosemirror-state - prosemirror-view - y-protocols - '@liveblocks/react-ui@2.23.1(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@liveblocks/client': 2.23.1 - '@liveblocks/core': 2.23.1 - '@liveblocks/react': 2.23.1(react@19.1.0) - '@radix-ui/react-dropdown-menu': 2.1.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popover': 1.1.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-toggle': 1.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-tooltip': 1.1.8(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@liveblocks/react-ui@3.1.3(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/react-dom': 2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@liveblocks/client': 3.1.3(@types/json-schema@7.0.15) + '@liveblocks/core': 3.1.3(@types/json-schema@7.0.15) + '@liveblocks/react': 3.1.3(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-dropdown-menu': 2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popover': 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-toggle': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-tooltip': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) frimousse: 0.2.0(react@19.1.0) + marked: 15.0.12 react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) slate: 0.110.2 slate-history: 0.110.3(slate@0.110.2) slate-hyperscript: 0.100.0(slate@0.110.2) slate-react: 0.110.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(slate@0.110.2) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom + - '@types/json-schema' - '@liveblocks/react@2.23.1(react@19.1.0)': + '@liveblocks/react@3.1.3(@types/json-schema@7.0.15)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react@19.1.0)': dependencies: - '@liveblocks/client': 2.23.1 - '@liveblocks/core': 2.23.1 + '@liveblocks/client': 3.1.3(@types/json-schema@7.0.15) + '@liveblocks/core': 3.1.3(@types/json-schema@7.0.15) react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + transitivePeerDependencies: + - '@types/json-schema' - '@liveblocks/yjs@2.23.1(yjs@13.6.24)': + '@liveblocks/yjs@3.1.3(@types/json-schema@7.0.15)(yjs@13.6.24)': dependencies: - '@liveblocks/client': 2.23.1 - '@liveblocks/core': 2.23.1 + '@liveblocks/client': 3.1.3(@types/json-schema@7.0.15) + '@liveblocks/core': 3.1.3(@types/json-schema@7.0.15) js-base64: 3.7.7 y-indexeddb: 9.0.12(yjs@13.6.24) yjs: 13.6.24 + transitivePeerDependencies: + - '@types/json-schema' '@mantine/core@7.17.3(@mantine/hooks@7.17.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: @@ -18302,11 +18796,11 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/experimental-ct-core@1.51.1(@types/node@20.17.28)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0)': + '@playwright/experimental-ct-core@1.51.1(@types/node@20.17.28)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0)': dependencies: playwright: 1.51.1 playwright-core: 1.51.1 - vite: 6.3.5(@types/node@20.17.28)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@20.17.28)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -18320,10 +18814,10 @@ snapshots: - tsx - yaml - '@playwright/experimental-ct-react@1.51.1(@types/node@20.17.28)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2))(yaml@2.7.0)': + '@playwright/experimental-ct-react@1.51.1(@types/node@20.17.28)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1))(yaml@2.7.0)': dependencies: - '@playwright/experimental-ct-core': 1.51.1(@types/node@20.17.28)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0) - '@vitejs/plugin-react': 4.4.1(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2)) + '@playwright/experimental-ct-core': 1.51.1(@types/node@20.17.28)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0) + '@vitejs/plugin-react': 4.4.1(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1)) transitivePeerDependencies: - '@types/node' - jiti @@ -18385,8 +18879,12 @@ snapshots: '@radix-ui/number@1.1.0': {} + '@radix-ui/number@1.1.1': {} + '@radix-ui/primitive@1.1.1': {} + '@radix-ui/primitive@1.1.2': {} + '@radix-ui/react-arrow@1.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -18396,6 +18894,15 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-avatar@1.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-context': 1.1.1(@types/react@19.1.8)(react@19.1.0) @@ -18420,36 +18927,60 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.1.8)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.8)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-context@1.1.1(@types/react@19.1.8)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: '@types/react': 19.1.8 - '@radix-ui/react-dialog@1.1.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-context@1.1.2(@types/react@19.1.8)(react@19.1.0)': dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.1.8)(react@19.1.0) - aria-hidden: 1.2.4 + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + + '@radix-ui/react-dialog@1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + aria-hidden: 1.2.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.8)(react@19.1.0) + react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) optionalDependencies: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) @@ -18460,6 +18991,25 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-direction@1.1.1(@types/react@19.1.8)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + + '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -18473,6 +19023,21 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-dropdown-menu@2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -18494,6 +19059,12 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.8)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.8)(react@19.1.0) @@ -18505,6 +19076,17 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-id@1.1.0(@types/react@19.1.8)(react@19.1.0)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.8)(react@19.1.0) @@ -18512,6 +19094,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-id@1.1.1(@types/react@19.1.8)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-label@2.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -18521,6 +19110,32 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-menu@2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + aria-hidden: 1.2.6 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-menu@2.1.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -18547,6 +19162,29 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-popover@1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + aria-hidden: 1.2.6 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-popover@1.1.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -18588,6 +19226,24 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/react-dom': 2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-portal@1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -18598,6 +19254,16 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-presence@1.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.8)(react@19.1.0) @@ -18608,6 +19274,16 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-primitive@2.0.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-slot': 1.1.2(@types/react@19.1.8)(react@19.1.0) @@ -18617,6 +19293,32 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + + '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -18663,6 +19365,35 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-select@2.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + aria-hidden: 1.2.6 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-slot@1.1.2(@types/react@19.1.8)(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.8)(react@19.1.0) @@ -18670,6 +19401,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-slot@1.2.3(@types/react@19.1.8)(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-tabs@1.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -18697,6 +19435,17 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-toggle@1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-tooltip@1.1.8(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -18717,12 +19466,38 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-tooltip@1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.1.8)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.8)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.1.8)(react@19.1.0)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.8)(react@19.1.0) @@ -18730,6 +19505,21 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.8)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.8)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.1.8)(react@19.1.0)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.8)(react@19.1.0) @@ -18737,18 +19527,37 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.8)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.1.8)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.8)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-use-previous@1.1.0(@types/react@19.1.8)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.8)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-use-rect@1.1.0(@types/react@19.1.8)(react@19.1.0)': dependencies: '@radix-ui/rect': 1.1.0 @@ -18756,6 +19565,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.8)(react@19.1.0)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-use-size@1.1.0(@types/react@19.1.8)(react@19.1.0)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.8)(react@19.1.0) @@ -18763,6 +19579,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.8)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -18772,8 +19595,19 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/rect@1.1.0': {} + '@radix-ui/rect@1.1.1': {} + '@react-email/body@0.0.11(react@19.1.0)': dependencies: react: 19.1.0 @@ -19741,7 +20575,7 @@ snapshots: '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.27.6 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -19776,6 +20610,10 @@ snapshots: dependencies: '@tiptap/pm': 2.12.0 + '@tiptap/core@2.26.1(@tiptap/pm@2.12.0)': + dependencies: + '@tiptap/pm': 2.12.0 + '@tiptap/extension-bold@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': dependencies: '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) @@ -19786,20 +20624,26 @@ snapshots: '@tiptap/pm': 2.12.0 tippy.js: 6.3.7 + '@tiptap/extension-bubble-menu@2.12.0(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': + dependencies: + '@tiptap/core': 2.26.1(@tiptap/pm@2.12.0) + '@tiptap/pm': 2.12.0 + tippy.js: 6.3.7 + '@tiptap/extension-code@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': dependencies: '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) - '@tiptap/extension-collaboration-cursor@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24))': + '@tiptap/extension-collaboration-cursor@2.11.5(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24))': dependencies: - '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) - y-prosemirror: 1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24) + '@tiptap/core': 2.26.1(@tiptap/pm@2.12.0) + y-prosemirror: 1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24) - '@tiptap/extension-collaboration@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24))': + '@tiptap/extension-collaboration@2.11.5(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24))': dependencies: - '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) + '@tiptap/core': 2.26.1(@tiptap/pm@2.12.0) '@tiptap/pm': 2.12.0 - y-prosemirror: 1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24) + y-prosemirror: 1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24) '@tiptap/extension-floating-menu@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': dependencies: @@ -19807,6 +20651,12 @@ snapshots: '@tiptap/pm': 2.12.0 tippy.js: 6.3.7 + '@tiptap/extension-floating-menu@2.12.0(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': + dependencies: + '@tiptap/core': 2.26.1(@tiptap/pm@2.12.0) + '@tiptap/pm': 2.12.0 + tippy.js: 6.3.7 + '@tiptap/extension-gapcursor@2.11.5(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': dependencies: '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) @@ -19889,9 +20739,21 @@ snapshots: react-dom: 19.1.0(react@19.1.0) use-sync-external-store: 1.4.0(react@19.1.0) - '@tiptap/suggestion@2.11.7(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': + '@tiptap/react@2.12.0(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) + '@tiptap/core': 2.26.1(@tiptap/pm@2.12.0) + '@tiptap/extension-bubble-menu': 2.12.0(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0) + '@tiptap/extension-floating-menu': 2.12.0(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0) + '@tiptap/pm': 2.12.0 + '@types/use-sync-external-store': 0.0.6 + fast-deep-equal: 3.1.3 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + use-sync-external-store: 1.4.0(react@19.1.0) + + '@tiptap/suggestion@2.11.7(@tiptap/core@2.26.1(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': + dependencies: + '@tiptap/core': 2.26.1(@tiptap/pm@2.12.0) '@tiptap/pm': 2.12.0 '@tootallnate/once@2.0.0': {} @@ -19966,7 +20828,7 @@ snapshots: '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/eslint@8.56.12': dependencies: @@ -19975,7 +20837,7 @@ snapshots: '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 '@types/estree-jsx@1.0.5': @@ -19986,6 +20848,8 @@ snapshots: '@types/estree@1.0.7': {} + '@types/estree@1.0.8': {} + '@types/hast@2.3.10': dependencies: '@types/unist': 2.0.11 @@ -20086,6 +20950,10 @@ snapshots: dependencies: undici-types: 6.19.8 + '@types/node@20.19.8': + dependencies: + undici-types: 6.21.0 + '@types/node@22.13.13': dependencies: undici-types: 6.20.0 @@ -20444,58 +21312,58 @@ snapshots: satori: 0.12.1 yoga-wasm-web: 0.3.3 - '@vitejs/plugin-react@4.3.4(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2))': + '@vitejs/plugin-react@4.3.4(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2))': + '@vitejs/plugin-react@4.3.4(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.4.1(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2))': + '@vitejs/plugin-react@4.4.1(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.4.1(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2))': + '@vitejs/plugin-react@4.4.1(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -20506,23 +21374,23 @@ snapshots: chai: 5.2.0 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.9(msw@2.7.3(@types/node@20.17.28)(typescript@5.8.2))(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2))': + '@vitest/mocker@2.1.9(msw@2.7.3(@types/node@20.17.28)(typescript@5.8.2))(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1))': dependencies: '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: msw: 2.7.3(@types/node@20.17.28)(typescript@5.8.2) - vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1) - '@vitest/mocker@2.1.9(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2))': + '@vitest/mocker@2.1.9(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1))': dependencies: '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: msw: 2.7.3(@types/node@22.14.1)(typescript@5.8.2) - vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) '@vitest/pretty-format@2.1.9': dependencies: @@ -20552,7 +21420,7 @@ snapshots: sirv: 3.0.1 tinyglobby: 0.2.12 tinyrainbow: 1.2.0 - vitest: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2) + vitest: 2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1) '@vitest/utils@2.1.9': dependencies: @@ -20704,6 +21572,8 @@ snapshots: acorn@8.14.1: {} + acorn@8.15.0: {} + address@1.2.2: {} agent-base@6.0.2: @@ -20822,6 +21692,10 @@ snapshots: dependencies: tslib: 2.8.1 + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + aria-query@5.3.0: dependencies: dequal: 2.0.3 @@ -21111,12 +21985,12 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.4) - browserslist@4.24.5: + browserslist@4.25.1: dependencies: - caniuse-lite: 1.0.30001718 - electron-to-chromium: 1.5.155 + caniuse-lite: 1.0.30001727 + electron-to-chromium: 1.5.186 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.5) + update-browserslist-db: 1.1.3(browserslist@4.25.1) buffer-from@1.1.2: {} @@ -21169,7 +22043,7 @@ snapshots: caniuse-lite@1.0.30001707: {} - caniuse-lite@1.0.30001718: {} + caniuse-lite@1.0.30001727: {} canvas@2.11.2(encoding@0.1.13): dependencies: @@ -21319,10 +22193,10 @@ snapshots: cmdk@1.1.1(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -21898,7 +22772,7 @@ snapshots: electron-to-chromium@1.5.126: {} - electron-to-chromium@1.5.155: {} + electron-to-chromium@1.5.186: {} elkjs@0.9.3: {} @@ -21941,7 +22815,7 @@ snapshots: - supports-color - utf-8-validate - enhanced-resolve@5.18.1: + enhanced-resolve@5.18.2: dependencies: graceful-fs: 4.2.11 tapable: 2.2.2 @@ -23536,7 +24410,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.17.50 + '@types/node': 20.19.8 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -23714,6 +24588,10 @@ snapshots: dependencies: isomorphic.js: 0.2.5 + lib0@0.2.114: + dependencies: + isomorphic.js: 0.2.5 + lie@3.3.0: dependencies: immediate: 3.0.6 @@ -23873,6 +24751,8 @@ snapshots: markdown-table@3.0.4: {} + marked@15.0.12: {} + marked@7.0.4: {} match-sorter@6.3.4: @@ -25896,6 +26776,17 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + react-remove-scroll@2.7.1(@types/react@19.1.8)(react@19.1.0): + dependencies: + react: 19.1.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.8)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.8)(react@19.1.0) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.1.8)(react@19.1.0) + use-sidecar: 1.1.3(@types/react@19.1.8)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@remix-run/router': 1.23.0 @@ -26946,17 +27837,17 @@ snapshots: terser-webpack-plugin@5.3.14(webpack@5.98.0): dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.29 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.39.2 + terser: 5.43.1 webpack: 5.98.0 - terser@5.39.2: + terser@5.43.1: dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.14.1 + '@jridgewell/source-map': 0.3.10 + acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -27157,8 +28048,7 @@ snapshots: undici-types@6.20.0: {} - undici-types@6.21.0: - optional: true + undici-types@6.21.0: {} undici@5.29.0: dependencies: @@ -27329,9 +28219,9 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - update-browserslist-db@1.1.3(browserslist@4.24.5): + update-browserslist-db@1.1.3(browserslist@4.25.1): dependencies: - browserslist: 4.24.5 + browserslist: 4.25.1 escalade: 3.2.0 picocolors: 1.1.1 @@ -27443,23 +28333,23 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - vite-dev-rpc@1.0.7(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0)): + vite-dev-rpc@1.0.7(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0)): dependencies: birpc: 2.3.0 - vite: 6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0) - vite-hot-client: 2.0.4(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0)) + vite: 6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0) + vite-hot-client: 2.0.4(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0)) - vite-hot-client@2.0.4(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0)): + vite-hot-client@2.0.4(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0)): dependencies: - vite: 6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0) - vite-node@2.1.9(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2): + vite-node@2.1.9(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.7.0 pathe: 1.1.2 - vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1) transitivePeerDependencies: - '@types/node' - less @@ -27471,13 +28361,13 @@ snapshots: - supports-color - terser - vite-node@2.1.9(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2): + vite-node@2.1.9(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.7.0 pathe: 1.1.2 - vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) transitivePeerDependencies: - '@types/node' - less @@ -27489,39 +28379,39 @@ snapshots: - supports-color - terser - vite-plugin-eslint@1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2)): + vite-plugin-eslint@1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1)): dependencies: '@rollup/pluginutils': 4.2.1 '@types/eslint': 8.56.12 eslint: 8.57.1 rollup: 2.79.2 - vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1) - vite-plugin-eslint@1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)): + vite-plugin-eslint@1.8.1(eslint@8.57.1)(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)): dependencies: '@rollup/pluginutils': 4.2.1 '@types/eslint': 8.56.12 eslint: 8.57.1 rollup: 2.79.2 - vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) - vite-plugin-eslint@1.8.1(eslint@8.57.1)(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0)): + vite-plugin-eslint@1.8.1(eslint@8.57.1)(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0)): dependencies: '@rollup/pluginutils': 4.2.1 '@types/eslint': 8.56.12 eslint: 8.57.1 rollup: 2.79.2 - vite: 6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0) - vite-plugin-externalize-deps@0.8.0(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2)): + vite-plugin-externalize-deps@0.8.0(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1)): dependencies: - vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1) - vite-plugin-externalize-deps@0.8.0(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)): + vite-plugin-externalize-deps@0.8.0(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)): dependencies: - vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) - vite-plugin-inspect@11.1.0(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0)): + vite-plugin-inspect@11.1.0(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0)): dependencies: ansis: 3.17.0 debug: 4.4.1 @@ -27531,12 +28421,12 @@ snapshots: perfect-debounce: 1.0.0 sirv: 3.0.1 unplugin-utils: 0.2.4 - vite: 6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0) - vite-dev-rpc: 1.0.7(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0)) + vite: 6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0) + vite-dev-rpc: 1.0.7(vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0)) transitivePeerDependencies: - supports-color - vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2): + vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1): dependencies: esbuild: 0.21.5 postcss: 8.5.3 @@ -27545,9 +28435,9 @@ snapshots: '@types/node': 20.17.28 fsevents: 2.3.3 lightningcss: 1.30.1 - terser: 5.39.2 + terser: 5.43.1 - vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2): + vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1): dependencies: esbuild: 0.21.5 postcss: 8.5.3 @@ -27556,9 +28446,9 @@ snapshots: '@types/node': 22.14.1 fsevents: 2.3.3 lightningcss: 1.30.1 - terser: 5.39.2 + terser: 5.43.1 - vite@6.3.5(@types/node@20.17.28)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0): + vite@6.3.5(@types/node@20.17.28)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: esbuild: 0.25.1 fdir: 6.4.4(picomatch@4.0.2) @@ -27571,11 +28461,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 - terser: 5.39.2 + terser: 5.43.1 tsx: 4.19.3 yaml: 2.7.0 - vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.3)(yaml@2.7.0): + vite@6.3.5(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.3)(yaml@2.7.0): dependencies: esbuild: 0.25.1 fdir: 6.4.4(picomatch@4.0.2) @@ -27588,23 +28478,23 @@ snapshots: fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 - terser: 5.39.2 + terser: 5.43.1 tsx: 4.19.3 yaml: 2.7.0 vitest-tsconfig-paths@3.4.1: dependencies: - debug: 4.4.0 + debug: 4.4.1 globrex: 0.1.2 recrawl-sync: 2.2.3 tsconfig-paths: 3.15.0 transitivePeerDependencies: - supports-color - vitest@2.1.9(@types/node@20.17.28)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@20.17.28)(typescript@5.8.2))(terser@5.39.2): + vitest@2.1.9(@types/node@20.17.28)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@20.17.28)(typescript@5.8.2))(terser@5.43.1): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(msw@2.7.3(@types/node@20.17.28)(typescript@5.8.2))(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2)) + '@vitest/mocker': 2.1.9(msw@2.7.3(@types/node@20.17.28)(typescript@5.8.2))(vite@5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -27620,8 +28510,8 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2) - vite-node: 2.1.9(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1) + vite-node: 2.1.9(@types/node@20.17.28)(lightningcss@1.30.1)(terser@5.43.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.17.28 @@ -27638,10 +28528,10 @@ snapshots: - supports-color - terser - vitest@2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@21.1.2(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2): + vitest@2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@21.1.2(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + '@vitest/mocker': 2.1.9(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -27657,8 +28547,8 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) - vite-node: 2.1.9(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) + vite-node: 2.1.9(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.14.1 @@ -27675,10 +28565,10 @@ snapshots: - supports-color - terser - vitest@2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.39.2): + vitest@2.1.9(@types/node@22.14.1)(@vitest/ui@2.1.9)(jsdom@25.0.1(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(terser@5.43.1): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2)) + '@vitest/mocker': 2.1.9(msw@2.7.3(@types/node@22.14.1)(typescript@5.8.2))(vite@5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -27694,8 +28584,8 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) - vite-node: 2.1.9(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.39.2) + vite: 5.4.15(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) + vite-node: 2.1.9(@types/node@22.14.1)(lightningcss@1.30.1)(terser@5.43.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.14.1 @@ -27774,19 +28664,21 @@ snapshots: webpack-sources@3.2.3: {} + webpack-sources@3.3.3: {} + webpack-virtual-modules@0.5.0: {} webpack@5.98.0: dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.1 - browserslist: 4.24.5 + acorn: 8.15.0 + browserslist: 4.25.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.1 + enhanced-resolve: 5.18.2 es-module-lexer: 1.7.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -27800,7 +28692,7 @@ snapshots: tapable: 2.2.2 terser-webpack-plugin: 5.3.14(webpack@5.98.0) watchpack: 2.4.4 - webpack-sources: 3.2.3 + webpack-sources: 3.3.3 transitivePeerDependencies: - '@swc/core' - esbuild @@ -27956,7 +28848,7 @@ snapshots: y-indexeddb@9.0.12(yjs@13.6.24): dependencies: - lib0: 0.2.101 + lib0: 0.2.114 yjs: 13.6.24 y-partykit@0.0.25: @@ -27967,9 +28859,9 @@ snapshots: y-protocols: 1.0.6(yjs@13.6.24) yjs: 13.6.24 - y-prosemirror@1.3.4(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24): + y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.24))(yjs@13.6.24): dependencies: - lib0: 0.2.101 + lib0: 0.2.114 prosemirror-model: 1.25.1 prosemirror-state: 1.4.3 prosemirror-view: 1.38.1