@blocknote/core 0.41.1 → 0.42.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/BlockNoteSchema-Bi-eeHal.js +3288 -0
  2. package/dist/BlockNoteSchema-Bi-eeHal.js.map +1 -0
  3. package/dist/BlockNoteSchema-DjDaA2C3.cjs +6 -0
  4. package/dist/BlockNoteSchema-DjDaA2C3.cjs.map +1 -0
  5. package/dist/blockToNode-DIfPWLH8.js +1140 -0
  6. package/dist/blockToNode-DIfPWLH8.js.map +1 -0
  7. package/dist/blockToNode-w7H99R6p.cjs +7 -0
  8. package/dist/blockToNode-w7H99R6p.cjs.map +1 -0
  9. package/dist/blocknote.cjs +4 -4
  10. package/dist/blocknote.cjs.map +1 -1
  11. package/dist/blocknote.js +1413 -1366
  12. package/dist/blocknote.js.map +1 -1
  13. package/dist/blocks.cjs +1 -1
  14. package/dist/blocks.js +1 -1
  15. package/dist/comments.cjs +1 -1
  16. package/dist/comments.cjs.map +1 -1
  17. package/dist/comments.js +49 -49
  18. package/dist/comments.js.map +1 -1
  19. package/dist/en-Cl87Uuyf.cjs.map +1 -1
  20. package/dist/en-njEqD7AG.js.map +1 -1
  21. package/dist/locales.cjs.map +1 -1
  22. package/dist/locales.js.map +1 -1
  23. package/dist/tsconfig.tsbuildinfo +1 -0
  24. package/dist/webpack-stats.json +1 -1
  25. package/dist/yjs.cjs +2 -0
  26. package/dist/yjs.cjs.map +1 -0
  27. package/dist/yjs.js +44 -0
  28. package/dist/yjs.js.map +1 -0
  29. package/package.json +30 -25
  30. package/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.ts +19 -6
  31. package/src/api/blockManipulation/commands/replaceBlocks/util/fixColumnList.ts +173 -0
  32. package/src/api/nodeConversions/nodeToBlock.ts +17 -14
  33. package/src/blocks/Code/block.ts +1 -0
  34. package/src/blocks/ListItem/NumberedListItem/IndexingPlugin.ts +2 -1
  35. package/src/blocks/defaultBlockTypeGuards.ts +7 -18
  36. package/src/comments/threadstore/yjs/YjsThreadStoreBase.ts +3 -1
  37. package/src/editor/BlockNoteEditor.test.ts +70 -1
  38. package/src/editor/BlockNoteEditor.ts +55 -4
  39. package/src/editor/managers/ExportManager.ts +1 -1
  40. package/src/extensions/Collaboration/__snapshots__/fork-yjs-snap-editor-forked.json +2 -2
  41. package/src/extensions/Collaboration/__snapshots__/fork-yjs-snap-editor.json +2 -2
  42. package/src/extensions/Collaboration/__snapshots__/fork-yjs-snap-forked.html +1 -1
  43. package/src/extensions/Collaboration/__snapshots__/fork-yjs-snap.html +1 -1
  44. package/src/extensions/Collaboration/schemaMigration/SchemaMigrationPlugin.ts +10 -3
  45. package/src/extensions/Collaboration/schemaMigration/migrationRules/moveColorAttributes.test.ts +130 -0
  46. package/src/extensions/Collaboration/schemaMigration/migrationRules/moveColorAttributes.ts +34 -21
  47. package/src/extensions/Comments/CommentsPlugin.ts +37 -7
  48. package/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts +30 -128
  49. package/src/extensions/SideMenu/SideMenuPlugin.ts +2 -0
  50. package/src/index.ts +1 -0
  51. package/src/schema/inlineContent/createSpec.ts +3 -0
  52. package/src/schema/inlineContent/types.ts +1 -0
  53. package/src/schema/schema.ts +49 -6
  54. package/src/schema/styles/createSpec.ts +6 -0
  55. package/src/schema/styles/types.ts +1 -0
  56. package/src/yjs/index.ts +1 -0
  57. package/src/yjs/utils.test.ts +1023 -0
  58. package/src/yjs/utils.ts +150 -0
  59. package/types/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.d.ts +1 -1
  60. package/types/src/api/blockManipulation/commands/replaceBlocks/util/fixColumnList.d.ts +32 -0
  61. package/types/src/api/nodeConversions/nodeToBlock.d.ts +1 -1
  62. package/types/src/editor/BlockNoteEditor.d.ts +6 -1
  63. package/types/src/editor/managers/ExportManager.d.ts +1 -1
  64. package/types/src/extensions/Collaboration/schemaMigration/migrationRules/moveColorAttributes.test.d.ts +1 -0
  65. package/types/src/extensions/Comments/CommentsPlugin.d.ts +1 -1
  66. package/types/src/index.d.ts +1 -0
  67. package/types/src/schema/inlineContent/createSpec.d.ts +1 -0
  68. package/types/src/schema/inlineContent/types.d.ts +1 -0
  69. package/types/src/schema/styles/createSpec.d.ts +1 -0
  70. package/types/src/schema/styles/types.d.ts +1 -0
  71. package/types/src/yjs/index.d.ts +1 -0
  72. package/types/src/yjs/utils.d.ts +55 -0
  73. package/types/src/yjs/utils.test.d.ts +1 -0
  74. package/dist/BlockNoteSchema-COA0fsXW.cjs +0 -11
  75. package/dist/BlockNoteSchema-COA0fsXW.cjs.map +0 -1
  76. package/dist/BlockNoteSchema-CYRHak18.js +0 -4375
  77. package/dist/BlockNoteSchema-CYRHak18.js.map +0 -1
  78. package/src/extensions/BackgroundColor/BackgroundColorMark.ts +0 -46
  79. package/src/extensions/TextColor/TextColorMark.ts +0 -38
  80. package/types/src/extensions/BackgroundColor/BackgroundColorMark.d.ts +0 -10
  81. package/types/src/extensions/TextColor/TextColorMark.d.ts +0 -10
@@ -1 +1 @@
1
- {"version":3,"file":"comments.js","sources":["../src/comments/threadstore/ThreadStoreAuth.ts","../src/comments/threadstore/DefaultThreadStoreAuth.ts","../src/comments/threadstore/ThreadStore.ts","../src/comments/threadstore/TipTapThreadStore.ts","../src/comments/threadstore/yjs/yjsHelpers.ts","../src/comments/threadstore/yjs/YjsThreadStoreBase.ts","../src/comments/threadstore/yjs/RESTYjsThreadStore.ts","../src/comments/threadstore/yjs/YjsThreadStore.ts"],"sourcesContent":["import { CommentData, ThreadData } from \"../types.js\";\n\nexport abstract class ThreadStoreAuth {\n abstract canCreateThread(): boolean;\n abstract canAddComment(thread: ThreadData): boolean;\n abstract canUpdateComment(comment: CommentData): boolean;\n abstract canDeleteComment(comment: CommentData): boolean;\n abstract canDeleteThread(thread: ThreadData): boolean;\n abstract canResolveThread(thread: ThreadData): boolean;\n abstract canUnresolveThread(thread: ThreadData): boolean;\n abstract canAddReaction(comment: CommentData, emoji?: string): boolean;\n abstract canDeleteReaction(comment: CommentData, emoji?: string): boolean;\n}\n","import { CommentData, ThreadData } from \"../types.js\";\nimport { ThreadStoreAuth } from \"./ThreadStoreAuth.js\";\n\n/*\n * The DefaultThreadStoreAuth class defines the authorization rules for interacting with comments.\n * We take a role (\"comment\" or \"editor\") and implement the rules.\n *\n * This class is then used in the UI to show / hide specific interactions.\n *\n * Rules:\n * - View-only users should not be able to see any comments\n * - Comment-only users and editors can:\n * - - create new comments / replies / reactions\n * - - edit / delete their own comments / reactions\n * - - resolve / unresolve threads\n * - Editors can also delete any comment or thread\n */\nexport class DefaultThreadStoreAuth extends ThreadStoreAuth {\n constructor(\n private readonly userId: string,\n private readonly role: \"comment\" | \"editor\",\n ) {\n super();\n }\n\n /**\n * Auth: should be possible by anyone with comment access\n */\n canCreateThread(): boolean {\n return true;\n }\n\n /**\n * Auth: should be possible by anyone with comment access\n */\n canAddComment(_thread: ThreadData): boolean {\n return true;\n }\n\n /**\n * Auth: should only be possible by the comment author\n */\n canUpdateComment(comment: CommentData): boolean {\n return comment.userId === this.userId;\n }\n\n /**\n * Auth: should be possible by the comment author OR an editor of the document\n */\n canDeleteComment(comment: CommentData): boolean {\n return comment.userId === this.userId || this.role === \"editor\";\n }\n\n /**\n * Auth: should only be possible by an editor of the document\n */\n canDeleteThread(_thread: ThreadData): boolean {\n return this.role === \"editor\";\n }\n\n /**\n * Auth: should be possible by anyone with comment access\n */\n canResolveThread(_thread: ThreadData): boolean {\n return true;\n }\n\n /**\n * Auth: should be possible by anyone with comment access\n */\n canUnresolveThread(_thread: ThreadData): boolean {\n return true;\n }\n\n /**\n * Auth: should be possible by anyone with comment access\n *\n * Note: will also check if the user has already reacted with the same emoji. TBD: is that a nice design or should this responsibility be outside of auth?\n */\n canAddReaction(comment: CommentData, emoji?: string): boolean {\n if (!emoji) {\n return true;\n }\n\n return !comment.reactions.some(\n (reaction) =>\n reaction.emoji === emoji && reaction.userIds.includes(this.userId),\n );\n }\n\n /**\n * Auth: should be possible by anyone with comment access\n *\n * Note: will also check if the user has already reacted with the same emoji. TBD: is that a nice design or should this responsibility be outside of auth?\n */\n canDeleteReaction(comment: CommentData, emoji?: string): boolean {\n if (!emoji) {\n return true;\n }\n\n return comment.reactions.some(\n (reaction) =>\n reaction.emoji === emoji && reaction.userIds.includes(this.userId),\n );\n }\n}\n","import { CommentBody, CommentData, ThreadData } from \"../types.js\";\nimport { ThreadStoreAuth } from \"./ThreadStoreAuth.js\";\n\n/**\n * ThreadStore is an abstract class that defines the interface\n * to read / add / update / delete threads and comments.\n */\nexport abstract class ThreadStore {\n public readonly auth: ThreadStoreAuth;\n\n constructor(auth: ThreadStoreAuth) {\n this.auth = auth;\n }\n\n /**\n * A \"thread\" in the ThreadStore only contains information about the content\n * of the thread / comments. It does not contain information about the position.\n *\n * This function can be implemented to store the thread in the document (by creating a mark)\n * If not implemented, default behavior will apply (creating the mark via TipTap)\n * See CommentsPlugin.ts for more details.\n */\n abstract addThreadToDocument?(options: {\n threadId: string;\n selection: {\n prosemirror: {\n head: number;\n anchor: number;\n };\n yjs?: {\n head: any;\n anchor: any;\n };\n };\n }): Promise<void>;\n\n /**\n * Creates a new thread with an initial comment.\n */\n abstract createThread(options: {\n initialComment: {\n body: CommentBody;\n metadata?: any;\n };\n metadata?: any;\n }): Promise<ThreadData>;\n\n /**\n * Adds a comment to a thread.\n */\n abstract addComment(options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n }): Promise<CommentData>;\n\n /**\n * Updates a comment in a thread.\n */\n abstract updateComment(options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n commentId: string;\n }): Promise<void>;\n\n /**\n * Deletes a comment from a thread.\n */\n abstract deleteComment(options: {\n threadId: string;\n commentId: string;\n }): Promise<void>;\n\n /**\n * Deletes a thread.\n */\n abstract deleteThread(options: { threadId: string }): Promise<void>;\n\n /**\n * Marks a thread as resolved.\n */\n abstract resolveThread(options: { threadId: string }): Promise<void>;\n\n /**\n * Marks a thread as unresolved.\n */\n abstract unresolveThread(options: { threadId: string }): Promise<void>;\n\n /**\n * Adds a reaction to a comment.\n *\n * Auth: should be possible by anyone with comment access\n */\n abstract addReaction(options: {\n threadId: string;\n commentId: string;\n emoji: string;\n }): Promise<void>;\n\n /**\n * Deletes a reaction from a comment.\n *\n * Auth: should be possible by the reaction author\n */\n abstract deleteReaction(options: {\n threadId: string;\n commentId: string;\n emoji: string;\n }): Promise<void>;\n\n /**\n * Retrieve data for a specific thread.\n */\n abstract getThread(threadId: string): ThreadData;\n\n /**\n * Retrieve all threads.\n */\n abstract getThreads(): Map<string, ThreadData>;\n\n /**\n * Subscribe to changes in the thread store.\n *\n * @returns a function to unsubscribe from the thread store\n */\n abstract subscribe(\n cb: (threads: Map<string, ThreadData>) => void,\n ): () => void;\n}\n","import type {\n TCollabComment,\n TCollabThread,\n TiptapCollabProvider,\n} from \"@hocuspocus/provider\";\nimport {\n CommentBody,\n CommentData,\n CommentReactionData,\n ThreadData,\n} from \"../types.js\";\nimport { ThreadStore } from \"./ThreadStore.js\";\nimport { ThreadStoreAuth } from \"./ThreadStoreAuth.js\";\n\ntype ReactionAsTiptapData = {\n emoji: string;\n createdAt: number;\n userId: string;\n};\n\n/**\n * The `TiptapThreadStore` integrates with Tiptap's collaboration provider for comment management.\n * You can pass a `TiptapCollabProvider` to the constructor which takes care of storing the comments.\n *\n * Under the hood, this actually works similarly to the `YjsThreadStore` implementation. (comments are stored in the Yjs document)\n */\nexport class TiptapThreadStore extends ThreadStore {\n constructor(\n private readonly userId: string,\n private readonly provider: TiptapCollabProvider,\n auth: ThreadStoreAuth, // TODO: use?\n ) {\n super(auth);\n }\n\n /**\n * Creates a new thread with an initial comment.\n */\n public async createThread(options: {\n initialComment: {\n body: CommentBody;\n metadata?: any;\n };\n metadata?: any;\n }): Promise<ThreadData> {\n let thread = this.provider.createThread({\n data: options.metadata,\n });\n\n thread = this.provider.addComment(thread.id, {\n content: options.initialComment.body,\n data: {\n metadata: options.initialComment.metadata,\n userId: this.userId,\n },\n });\n\n return this.tiptapThreadToThreadData(thread);\n }\n\n // TipTapThreadStore does not support addThreadToDocument\n public addThreadToDocument = undefined;\n\n /**\n * Adds a comment to a thread.\n */\n public async addComment(options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n }): Promise<CommentBody> {\n const thread = this.provider.addComment(options.threadId, {\n content: options.comment.body,\n data: {\n metadata: options.comment.metadata,\n userId: this.userId,\n },\n });\n\n return this.tiptapCommentToCommentData(\n thread.comments[thread.comments.length - 1],\n );\n }\n\n /**\n * Updates a comment in a thread.\n */\n public async updateComment(options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n commentId: string;\n }) {\n const comment = this.provider.getThreadComment(\n options.threadId,\n options.commentId,\n true,\n );\n\n if (!comment) {\n throw new Error(\"Comment not found\");\n }\n\n this.provider.updateComment(options.threadId, options.commentId, {\n content: options.comment.body,\n data: {\n ...comment.data,\n metadata: options.comment.metadata,\n },\n });\n }\n\n private tiptapCommentToCommentData(comment: TCollabComment): CommentData {\n const reactions: CommentReactionData[] = [];\n\n for (const reaction of (comment.data?.reactions ||\n []) as ReactionAsTiptapData[]) {\n const existingReaction = reactions.find(\n (r) => r.emoji === reaction.emoji,\n );\n if (existingReaction) {\n existingReaction.userIds.push(reaction.userId);\n existingReaction.createdAt = new Date(\n Math.min(existingReaction.createdAt.getTime(), reaction.createdAt),\n );\n } else {\n reactions.push({\n emoji: reaction.emoji,\n createdAt: new Date(reaction.createdAt),\n userIds: [reaction.userId],\n });\n }\n }\n\n return {\n type: \"comment\",\n id: comment.id,\n body: comment.content,\n metadata: comment.data?.metadata,\n userId: comment.data?.userId,\n createdAt: new Date(comment.createdAt),\n updatedAt: new Date(comment.updatedAt),\n reactions,\n };\n }\n\n private tiptapThreadToThreadData(thread: TCollabThread): ThreadData {\n return {\n type: \"thread\",\n id: thread.id,\n comments: thread.comments.map((comment) =>\n this.tiptapCommentToCommentData(comment),\n ),\n resolved: !!thread.resolvedAt,\n metadata: thread.data?.metadata,\n createdAt: new Date(thread.createdAt),\n updatedAt: new Date(thread.updatedAt),\n };\n }\n\n /**\n * Deletes a comment from a thread.\n */\n public async deleteComment(options: { threadId: string; commentId: string }) {\n this.provider.deleteComment(options.threadId, options.commentId);\n }\n\n /**\n * Deletes a thread.\n */\n public async deleteThread(options: { threadId: string }) {\n this.provider.deleteThread(options.threadId);\n }\n\n /**\n * Marks a thread as resolved.\n */\n public async resolveThread(options: { threadId: string }) {\n this.provider.updateThread(options.threadId, {\n resolvedAt: new Date().toISOString(),\n });\n }\n\n /**\n * Marks a thread as unresolved.\n */\n public async unresolveThread(options: { threadId: string }) {\n this.provider.updateThread(options.threadId, {\n resolvedAt: null,\n });\n }\n\n /**\n * Adds a reaction to a comment.\n *\n * Auth: should be possible by anyone with comment access\n */\n public async addReaction(options: {\n threadId: string;\n commentId: string;\n emoji: string;\n }) {\n const comment = this.provider.getThreadComment(\n options.threadId,\n options.commentId,\n true,\n );\n\n if (!comment) {\n throw new Error(\"Comment not found\");\n }\n\n this.provider.updateComment(options.threadId, options.commentId, {\n data: {\n ...comment.data,\n reactions: [\n ...((comment.data?.reactions || []) as ReactionAsTiptapData[]),\n {\n emoji: options.emoji,\n createdAt: Date.now(),\n userId: this.userId,\n },\n ],\n },\n });\n }\n\n /**\n * Deletes a reaction from a comment.\n *\n * Auth: should be possible by the reaction author\n */\n public async deleteReaction(options: {\n threadId: string;\n commentId: string;\n emoji: string;\n }) {\n const comment = this.provider.getThreadComment(\n options.threadId,\n options.commentId,\n true,\n );\n\n if (!comment) {\n throw new Error(\"Comment not found\");\n }\n\n this.provider.updateComment(options.threadId, options.commentId, {\n data: {\n ...comment.data,\n reactions: (\n (comment.data?.reactions || []) as ReactionAsTiptapData[]\n ).filter(\n (reaction) =>\n reaction.emoji !== options.emoji && reaction.userId !== this.userId,\n ),\n },\n });\n }\n\n public getThread(threadId: string): ThreadData {\n const thread = this.provider.getThread(threadId);\n\n if (!thread) {\n throw new Error(\"Thread not found\");\n }\n\n return this.tiptapThreadToThreadData(thread);\n }\n\n public getThreads(): Map<string, ThreadData> {\n return new Map(\n this.provider\n .getThreads()\n .map((thread) => [thread.id, this.tiptapThreadToThreadData(thread)]),\n );\n }\n\n public subscribe(cb: (threads: Map<string, ThreadData>) => void): () => void {\n const newCb = () => {\n cb(this.getThreads());\n };\n this.provider.watchThreads(newCb);\n return () => {\n this.provider.unwatchThreads(newCb);\n };\n }\n}\n","import * as Y from \"yjs\";\nimport { CommentData, CommentReactionData, ThreadData } from \"../../types.js\";\n\nexport function commentToYMap(comment: CommentData) {\n const yMap = new Y.Map<any>();\n yMap.set(\"id\", comment.id);\n yMap.set(\"userId\", comment.userId);\n yMap.set(\"createdAt\", comment.createdAt.getTime());\n yMap.set(\"updatedAt\", comment.updatedAt.getTime());\n if (comment.deletedAt) {\n yMap.set(\"deletedAt\", comment.deletedAt.getTime());\n yMap.set(\"body\", undefined);\n } else {\n yMap.set(\"body\", comment.body);\n }\n if (comment.reactions.length > 0) {\n throw new Error(\"Reactions should be empty in commentToYMap\");\n }\n\n /**\n * Reactions are stored in a map keyed by {userId-emoji},\n * this makes it easy to add / remove reactions and in a way that works local-first.\n * The cost is that \"reading\" the reactions is a bit more complex (see yMapToReactions).\n */\n yMap.set(\"reactionsByUser\", new Y.Map());\n yMap.set(\"metadata\", comment.metadata);\n\n return yMap;\n}\n\nexport function threadToYMap(thread: ThreadData) {\n const yMap = new Y.Map();\n yMap.set(\"id\", thread.id);\n yMap.set(\"createdAt\", thread.createdAt.getTime());\n yMap.set(\"updatedAt\", thread.updatedAt.getTime());\n const commentsArray = new Y.Array<Y.Map<any>>();\n\n commentsArray.push(thread.comments.map((comment) => commentToYMap(comment)));\n\n yMap.set(\"comments\", commentsArray);\n yMap.set(\"resolved\", thread.resolved);\n yMap.set(\"resolvedUpdatedAt\", thread.resolvedUpdatedAt?.getTime());\n yMap.set(\"resolvedBy\", thread.resolvedBy);\n yMap.set(\"metadata\", thread.metadata);\n return yMap;\n}\n\ntype SingleUserCommentReactionData = {\n emoji: string;\n createdAt: Date;\n userId: string;\n};\n\nexport function yMapToReaction(\n yMap: Y.Map<any>,\n): SingleUserCommentReactionData {\n return {\n emoji: yMap.get(\"emoji\"),\n createdAt: new Date(yMap.get(\"createdAt\")),\n userId: yMap.get(\"userId\"),\n };\n}\n\nfunction yMapToReactions(yMap: Y.Map<any>): CommentReactionData[] {\n const flatReactions = [...yMap.values()].map((reaction: Y.Map<any>) =>\n yMapToReaction(reaction),\n );\n // combine reactions by the same emoji\n return flatReactions.reduce(\n (acc: CommentReactionData[], reaction: SingleUserCommentReactionData) => {\n const existingReaction = acc.find((r) => r.emoji === reaction.emoji);\n if (existingReaction) {\n existingReaction.userIds.push(reaction.userId);\n existingReaction.createdAt = new Date(\n Math.min(\n existingReaction.createdAt.getTime(),\n reaction.createdAt.getTime(),\n ),\n );\n } else {\n acc.push({\n emoji: reaction.emoji,\n createdAt: reaction.createdAt,\n userIds: [reaction.userId],\n });\n }\n return acc;\n },\n [] as CommentReactionData[],\n );\n}\n\nexport function yMapToComment(yMap: Y.Map<any>): CommentData {\n return {\n type: \"comment\",\n id: yMap.get(\"id\"),\n userId: yMap.get(\"userId\"),\n createdAt: new Date(yMap.get(\"createdAt\")),\n updatedAt: new Date(yMap.get(\"updatedAt\")),\n deletedAt: yMap.get(\"deletedAt\")\n ? new Date(yMap.get(\"deletedAt\"))\n : undefined,\n reactions: yMapToReactions(yMap.get(\"reactionsByUser\")),\n metadata: yMap.get(\"metadata\"),\n body: yMap.get(\"body\"),\n };\n}\n\nexport function yMapToThread(yMap: Y.Map<any>): ThreadData {\n return {\n type: \"thread\",\n id: yMap.get(\"id\"),\n createdAt: new Date(yMap.get(\"createdAt\")),\n updatedAt: new Date(yMap.get(\"updatedAt\")),\n comments: ((yMap.get(\"comments\") as Y.Array<Y.Map<any>>) || []).map(\n (comment) => yMapToComment(comment),\n ),\n resolved: yMap.get(\"resolved\"),\n resolvedUpdatedAt: new Date(yMap.get(\"resolvedUpdatedAt\")),\n resolvedBy: yMap.get(\"resolvedBy\"),\n metadata: yMap.get(\"metadata\"),\n };\n}\n","import * as Y from \"yjs\";\nimport { ThreadData } from \"../../types.js\";\nimport { ThreadStore } from \"../ThreadStore.js\";\nimport { ThreadStoreAuth } from \"../ThreadStoreAuth.js\";\nimport { yMapToThread } from \"./yjsHelpers.js\";\n\n/**\n * This is an abstract class that only implements the READ methods required by the ThreadStore interface.\n * The data is read from a Yjs Map.\n */\nexport abstract class YjsThreadStoreBase extends ThreadStore {\n constructor(\n protected readonly threadsYMap: Y.Map<any>,\n auth: ThreadStoreAuth,\n ) {\n super(auth);\n }\n\n // TODO: async / reactive interface?\n public getThread(threadId: string) {\n const yThread = this.threadsYMap.get(threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n const thread = yMapToThread(yThread);\n return thread;\n }\n\n public getThreads(): Map<string, ThreadData> {\n const threadMap = new Map<string, ThreadData>();\n this.threadsYMap.forEach((yThread, id) => {\n threadMap.set(id, yMapToThread(yThread));\n });\n return threadMap;\n }\n\n public subscribe(cb: (threads: Map<string, ThreadData>) => void) {\n const observer = () => {\n cb(this.getThreads());\n };\n\n this.threadsYMap.observeDeep(observer);\n\n return () => {\n this.threadsYMap.unobserveDeep(observer);\n };\n }\n}\n","import * as Y from \"yjs\";\nimport { CommentBody } from \"../../types.js\";\nimport { ThreadStoreAuth } from \"../ThreadStoreAuth.js\";\nimport { YjsThreadStoreBase } from \"./YjsThreadStoreBase.js\";\n\n/**\n * This is a REST-based implementation of the YjsThreadStoreBase.\n * It Reads data directly from the underlying document (same as YjsThreadStore),\n * but for Writes, it sends data to a REST API that should:\n * - check the user has the correct permissions to make the desired changes\n * - apply the updates to the underlying Yjs document\n *\n * (see https://github.com/TypeCellOS/BlockNote-demo-nextjs-hocuspocus)\n *\n * The reason we still use the Yjs document as underlying storage is that it makes it easy to\n * sync updates in real-time to other collaborators.\n * (but technically, you could also implement a different storage altogether\n * and not store the thread related data in the Yjs document)\n */\nexport class RESTYjsThreadStore extends YjsThreadStoreBase {\n constructor(\n private readonly BASE_URL: string,\n private readonly headers: Record<string, string>,\n threadsYMap: Y.Map<any>,\n auth: ThreadStoreAuth,\n ) {\n super(threadsYMap, auth);\n }\n\n private doRequest = async (path: string, method: string, body?: any) => {\n const response = await fetch(`${this.BASE_URL}${path}`, {\n method,\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n ...this.headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to ${method} ${path}: ${response.statusText}`);\n }\n\n return response.json();\n };\n\n public addThreadToDocument = async (options: {\n threadId: string;\n selection: {\n prosemirror: {\n head: number;\n anchor: number;\n };\n yjs: {\n head: any;\n anchor: any;\n };\n };\n }) => {\n const { threadId, ...rest } = options;\n return this.doRequest(`/${threadId}/addToDocument`, \"POST\", rest);\n };\n\n public createThread = async (options: {\n initialComment: {\n body: CommentBody;\n metadata?: any;\n };\n metadata?: any;\n }) => {\n return this.doRequest(\"\", \"POST\", options);\n };\n\n public addComment = (options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n }) => {\n const { threadId, ...rest } = options;\n return this.doRequest(`/${threadId}/comments`, \"POST\", rest);\n };\n\n public updateComment = (options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n commentId: string;\n }) => {\n const { threadId, commentId, ...rest } = options;\n return this.doRequest(`/${threadId}/comments/${commentId}`, \"PUT\", rest);\n };\n\n public deleteComment = (options: {\n threadId: string;\n commentId: string;\n softDelete?: boolean;\n }) => {\n const { threadId, commentId, ...rest } = options;\n return this.doRequest(\n `/${threadId}/comments/${commentId}?soft=${!!rest.softDelete}`,\n \"DELETE\",\n );\n };\n\n public deleteThread = (options: { threadId: string }) => {\n return this.doRequest(`/${options.threadId}`, \"DELETE\");\n };\n\n public resolveThread = (options: { threadId: string }) => {\n return this.doRequest(`/${options.threadId}/resolve`, \"POST\");\n };\n\n public unresolveThread = (options: { threadId: string }) => {\n return this.doRequest(`/${options.threadId}/unresolve`, \"POST\");\n };\n\n public addReaction = (options: {\n threadId: string;\n commentId: string;\n emoji: string;\n }) => {\n const { threadId, commentId, ...rest } = options;\n return this.doRequest(\n `/${threadId}/comments/${commentId}/reactions`,\n \"POST\",\n rest,\n );\n };\n\n public deleteReaction = (options: {\n threadId: string;\n commentId: string;\n emoji: string;\n }) => {\n return this.doRequest(\n `/${options.threadId}/comments/${options.commentId}/reactions/${options.emoji}`,\n \"DELETE\",\n );\n };\n}\n","import { v4 } from \"uuid\";\nimport * as Y from \"yjs\";\nimport { CommentBody, CommentData, ThreadData } from \"../../types.js\";\nimport { ThreadStoreAuth } from \"../ThreadStoreAuth.js\";\nimport { YjsThreadStoreBase } from \"./YjsThreadStoreBase.js\";\nimport {\n commentToYMap,\n threadToYMap,\n yMapToComment,\n yMapToThread,\n} from \"./yjsHelpers.js\";\n\n/**\n * This is a Yjs-based implementation of the ThreadStore interface.\n *\n * It reads and writes thread / comments information directly to the underlying Yjs Document.\n *\n * @important While this is the easiest to add to your app, there are two challenges:\n * - The user needs to be able to write to the Yjs document to store the information.\n * So a user without write access to the Yjs document cannot leave any comments.\n * - Even with write access, the operations are not secure. Unless your Yjs server\n * guards against malicious operations, it's technically possible for one user to make changes to another user's comments, etc.\n * (even though these options are not visible in the UI, a malicious user can make unauthorized changes to the underlying Yjs document)\n */\nexport class YjsThreadStore extends YjsThreadStoreBase {\n constructor(\n private readonly userId: string,\n threadsYMap: Y.Map<any>,\n auth: ThreadStoreAuth,\n ) {\n super(threadsYMap, auth);\n }\n\n private transact = <T, R>(\n fn: (options: T) => R,\n ): ((options: T) => Promise<R>) => {\n return async (options: T) => {\n return this.threadsYMap.doc!.transact(() => {\n return fn(options);\n });\n };\n };\n\n public createThread = this.transact(\n (options: {\n initialComment: {\n body: CommentBody;\n metadata?: any;\n };\n metadata?: any;\n }) => {\n if (!this.auth.canCreateThread()) {\n throw new Error(\"Not authorized\");\n }\n\n const date = new Date();\n\n const comment: CommentData = {\n type: \"comment\",\n id: v4(),\n userId: this.userId,\n createdAt: date,\n updatedAt: date,\n reactions: [],\n metadata: options.initialComment.metadata,\n body: options.initialComment.body,\n };\n\n const thread: ThreadData = {\n type: \"thread\",\n id: v4(),\n createdAt: date,\n updatedAt: date,\n comments: [comment],\n resolved: false,\n metadata: options.metadata,\n };\n\n this.threadsYMap.set(thread.id, threadToYMap(thread));\n\n return thread;\n },\n );\n\n // YjsThreadStore does not support addThreadToDocument\n public addThreadToDocument = undefined;\n\n public addComment = this.transact(\n (options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n if (!this.auth.canAddComment(yMapToThread(yThread))) {\n throw new Error(\"Not authorized\");\n }\n\n const date = new Date();\n const comment: CommentData = {\n type: \"comment\",\n id: v4(),\n userId: this.userId,\n createdAt: date,\n updatedAt: date,\n deletedAt: undefined,\n reactions: [],\n metadata: options.comment.metadata,\n body: options.comment.body,\n };\n\n (yThread.get(\"comments\") as Y.Array<Y.Map<any>>).push([\n commentToYMap(comment),\n ]);\n\n yThread.set(\"updatedAt\", new Date().getTime());\n return comment;\n },\n );\n\n public updateComment = this.transact(\n (options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n commentId: string;\n }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n const yCommentIndex = yArrayFindIndex(\n yThread.get(\"comments\"),\n (comment) => comment.get(\"id\") === options.commentId,\n );\n\n if (yCommentIndex === -1) {\n throw new Error(\"Comment not found\");\n }\n\n const yComment = yThread.get(\"comments\").get(yCommentIndex);\n\n if (!this.auth.canUpdateComment(yMapToComment(yComment))) {\n throw new Error(\"Not authorized\");\n }\n\n yComment.set(\"body\", options.comment.body);\n yComment.set(\"updatedAt\", new Date().getTime());\n yComment.set(\"metadata\", options.comment.metadata);\n },\n );\n\n public deleteComment = this.transact(\n (options: {\n threadId: string;\n commentId: string;\n softDelete?: boolean;\n }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n const yCommentIndex = yArrayFindIndex(\n yThread.get(\"comments\"),\n (comment) => comment.get(\"id\") === options.commentId,\n );\n\n if (yCommentIndex === -1) {\n throw new Error(\"Comment not found\");\n }\n\n const yComment = yThread.get(\"comments\").get(yCommentIndex);\n\n if (!this.auth.canDeleteComment(yMapToComment(yComment))) {\n throw new Error(\"Not authorized\");\n }\n\n if (yComment.get(\"deletedAt\")) {\n throw new Error(\"Comment already deleted\");\n }\n\n if (options.softDelete) {\n yComment.set(\"deletedAt\", new Date().getTime());\n yComment.set(\"body\", undefined);\n } else {\n yThread.get(\"comments\").delete(yCommentIndex);\n }\n\n if (\n (yThread.get(\"comments\") as Y.Array<any>)\n .toArray()\n .every((comment) => comment.get(\"deletedAt\"))\n ) {\n // all comments deleted\n if (options.softDelete) {\n yThread.set(\"deletedAt\", new Date().getTime());\n } else {\n this.threadsYMap.delete(options.threadId);\n }\n }\n\n yThread.set(\"updatedAt\", new Date().getTime());\n },\n );\n\n public deleteThread = this.transact((options: { threadId: string }) => {\n if (\n !this.auth.canDeleteThread(\n yMapToThread(this.threadsYMap.get(options.threadId)),\n )\n ) {\n throw new Error(\"Not authorized\");\n }\n\n this.threadsYMap.delete(options.threadId);\n });\n\n public resolveThread = this.transact((options: { threadId: string }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n if (!this.auth.canResolveThread(yMapToThread(yThread))) {\n throw new Error(\"Not authorized\");\n }\n\n yThread.set(\"resolved\", true);\n yThread.set(\"resolvedUpdatedAt\", new Date().getTime());\n yThread.set(\"resolvedBy\", this.userId);\n });\n\n public unresolveThread = this.transact((options: { threadId: string }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n if (!this.auth.canUnresolveThread(yMapToThread(yThread))) {\n throw new Error(\"Not authorized\");\n }\n\n yThread.set(\"resolved\", false);\n yThread.set(\"resolvedUpdatedAt\", new Date().getTime());\n });\n\n public addReaction = this.transact(\n (options: { threadId: string; commentId: string; emoji: string }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n const yCommentIndex = yArrayFindIndex(\n yThread.get(\"comments\"),\n (comment) => comment.get(\"id\") === options.commentId,\n );\n\n if (yCommentIndex === -1) {\n throw new Error(\"Comment not found\");\n }\n\n const yComment = yThread.get(\"comments\").get(yCommentIndex);\n\n if (!this.auth.canAddReaction(yMapToComment(yComment), options.emoji)) {\n throw new Error(\"Not authorized\");\n }\n\n const date = new Date();\n\n const key = `${this.userId}-${options.emoji}`;\n\n const reactionsByUser = yComment.get(\"reactionsByUser\");\n\n if (reactionsByUser.has(key)) {\n // already exists\n return;\n } else {\n const reaction = new Y.Map();\n reaction.set(\"emoji\", options.emoji);\n reaction.set(\"createdAt\", date.getTime());\n reaction.set(\"userId\", this.userId);\n reactionsByUser.set(key, reaction);\n }\n },\n );\n\n public deleteReaction = this.transact(\n (options: { threadId: string; commentId: string; emoji: string }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n const yCommentIndex = yArrayFindIndex(\n yThread.get(\"comments\"),\n (comment) => comment.get(\"id\") === options.commentId,\n );\n\n if (yCommentIndex === -1) {\n throw new Error(\"Comment not found\");\n }\n\n const yComment = yThread.get(\"comments\").get(yCommentIndex);\n\n if (\n !this.auth.canDeleteReaction(yMapToComment(yComment), options.emoji)\n ) {\n throw new Error(\"Not authorized\");\n }\n\n const key = `${this.userId}-${options.emoji}`;\n\n const reactionsByUser = yComment.get(\"reactionsByUser\");\n\n reactionsByUser.delete(key);\n },\n );\n}\n\nfunction yArrayFindIndex(\n yArray: Y.Array<any>,\n predicate: (item: any) => boolean,\n) {\n for (let i = 0; i < yArray.length; i++) {\n if (predicate(yArray.get(i))) {\n return i;\n }\n }\n return -1;\n}\n"],"names":["ThreadStoreAuth","DefaultThreadStoreAuth","userId","role","_thread","comment","emoji","reaction","ThreadStore","auth","__publicField","TiptapThreadStore","provider","options","thread","reactions","_a","existingReaction","r","_b","_c","threadId","cb","newCb","commentToYMap","yMap","Y","threadToYMap","commentsArray","yMapToReaction","yMapToReactions","acc","yMapToComment","yMapToThread","YjsThreadStoreBase","threadsYMap","yThread","threadMap","id","observer","RESTYjsThreadStore","BASE_URL","headers","path","method","body","response","rest","commentId","YjsThreadStore","fn","date","v4","yCommentIndex","yArrayFindIndex","yComment","key","reactionsByUser","yArray","predicate","i"],"mappings":"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"}
1
+ {"version":3,"file":"comments.js","sources":["../src/comments/threadstore/ThreadStoreAuth.ts","../src/comments/threadstore/DefaultThreadStoreAuth.ts","../src/comments/threadstore/ThreadStore.ts","../src/comments/threadstore/TipTapThreadStore.ts","../src/comments/threadstore/yjs/yjsHelpers.ts","../src/comments/threadstore/yjs/YjsThreadStoreBase.ts","../src/comments/threadstore/yjs/RESTYjsThreadStore.ts","../src/comments/threadstore/yjs/YjsThreadStore.ts"],"sourcesContent":["import { CommentData, ThreadData } from \"../types.js\";\n\nexport abstract class ThreadStoreAuth {\n abstract canCreateThread(): boolean;\n abstract canAddComment(thread: ThreadData): boolean;\n abstract canUpdateComment(comment: CommentData): boolean;\n abstract canDeleteComment(comment: CommentData): boolean;\n abstract canDeleteThread(thread: ThreadData): boolean;\n abstract canResolveThread(thread: ThreadData): boolean;\n abstract canUnresolveThread(thread: ThreadData): boolean;\n abstract canAddReaction(comment: CommentData, emoji?: string): boolean;\n abstract canDeleteReaction(comment: CommentData, emoji?: string): boolean;\n}\n","import { CommentData, ThreadData } from \"../types.js\";\nimport { ThreadStoreAuth } from \"./ThreadStoreAuth.js\";\n\n/*\n * The DefaultThreadStoreAuth class defines the authorization rules for interacting with comments.\n * We take a role (\"comment\" or \"editor\") and implement the rules.\n *\n * This class is then used in the UI to show / hide specific interactions.\n *\n * Rules:\n * - View-only users should not be able to see any comments\n * - Comment-only users and editors can:\n * - - create new comments / replies / reactions\n * - - edit / delete their own comments / reactions\n * - - resolve / unresolve threads\n * - Editors can also delete any comment or thread\n */\nexport class DefaultThreadStoreAuth extends ThreadStoreAuth {\n constructor(\n private readonly userId: string,\n private readonly role: \"comment\" | \"editor\",\n ) {\n super();\n }\n\n /**\n * Auth: should be possible by anyone with comment access\n */\n canCreateThread(): boolean {\n return true;\n }\n\n /**\n * Auth: should be possible by anyone with comment access\n */\n canAddComment(_thread: ThreadData): boolean {\n return true;\n }\n\n /**\n * Auth: should only be possible by the comment author\n */\n canUpdateComment(comment: CommentData): boolean {\n return comment.userId === this.userId;\n }\n\n /**\n * Auth: should be possible by the comment author OR an editor of the document\n */\n canDeleteComment(comment: CommentData): boolean {\n return comment.userId === this.userId || this.role === \"editor\";\n }\n\n /**\n * Auth: should only be possible by an editor of the document\n */\n canDeleteThread(_thread: ThreadData): boolean {\n return this.role === \"editor\";\n }\n\n /**\n * Auth: should be possible by anyone with comment access\n */\n canResolveThread(_thread: ThreadData): boolean {\n return true;\n }\n\n /**\n * Auth: should be possible by anyone with comment access\n */\n canUnresolveThread(_thread: ThreadData): boolean {\n return true;\n }\n\n /**\n * Auth: should be possible by anyone with comment access\n *\n * Note: will also check if the user has already reacted with the same emoji. TBD: is that a nice design or should this responsibility be outside of auth?\n */\n canAddReaction(comment: CommentData, emoji?: string): boolean {\n if (!emoji) {\n return true;\n }\n\n return !comment.reactions.some(\n (reaction) =>\n reaction.emoji === emoji && reaction.userIds.includes(this.userId),\n );\n }\n\n /**\n * Auth: should be possible by anyone with comment access\n *\n * Note: will also check if the user has already reacted with the same emoji. TBD: is that a nice design or should this responsibility be outside of auth?\n */\n canDeleteReaction(comment: CommentData, emoji?: string): boolean {\n if (!emoji) {\n return true;\n }\n\n return comment.reactions.some(\n (reaction) =>\n reaction.emoji === emoji && reaction.userIds.includes(this.userId),\n );\n }\n}\n","import { CommentBody, CommentData, ThreadData } from \"../types.js\";\nimport { ThreadStoreAuth } from \"./ThreadStoreAuth.js\";\n\n/**\n * ThreadStore is an abstract class that defines the interface\n * to read / add / update / delete threads and comments.\n */\nexport abstract class ThreadStore {\n public readonly auth: ThreadStoreAuth;\n\n constructor(auth: ThreadStoreAuth) {\n this.auth = auth;\n }\n\n /**\n * A \"thread\" in the ThreadStore only contains information about the content\n * of the thread / comments. It does not contain information about the position.\n *\n * This function can be implemented to store the thread in the document (by creating a mark)\n * If not implemented, default behavior will apply (creating the mark via TipTap)\n * See CommentsPlugin.ts for more details.\n */\n abstract addThreadToDocument?(options: {\n threadId: string;\n selection: {\n prosemirror: {\n head: number;\n anchor: number;\n };\n yjs?: {\n head: any;\n anchor: any;\n };\n };\n }): Promise<void>;\n\n /**\n * Creates a new thread with an initial comment.\n */\n abstract createThread(options: {\n initialComment: {\n body: CommentBody;\n metadata?: any;\n };\n metadata?: any;\n }): Promise<ThreadData>;\n\n /**\n * Adds a comment to a thread.\n */\n abstract addComment(options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n }): Promise<CommentData>;\n\n /**\n * Updates a comment in a thread.\n */\n abstract updateComment(options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n commentId: string;\n }): Promise<void>;\n\n /**\n * Deletes a comment from a thread.\n */\n abstract deleteComment(options: {\n threadId: string;\n commentId: string;\n }): Promise<void>;\n\n /**\n * Deletes a thread.\n */\n abstract deleteThread(options: { threadId: string }): Promise<void>;\n\n /**\n * Marks a thread as resolved.\n */\n abstract resolveThread(options: { threadId: string }): Promise<void>;\n\n /**\n * Marks a thread as unresolved.\n */\n abstract unresolveThread(options: { threadId: string }): Promise<void>;\n\n /**\n * Adds a reaction to a comment.\n *\n * Auth: should be possible by anyone with comment access\n */\n abstract addReaction(options: {\n threadId: string;\n commentId: string;\n emoji: string;\n }): Promise<void>;\n\n /**\n * Deletes a reaction from a comment.\n *\n * Auth: should be possible by the reaction author\n */\n abstract deleteReaction(options: {\n threadId: string;\n commentId: string;\n emoji: string;\n }): Promise<void>;\n\n /**\n * Retrieve data for a specific thread.\n */\n abstract getThread(threadId: string): ThreadData;\n\n /**\n * Retrieve all threads.\n */\n abstract getThreads(): Map<string, ThreadData>;\n\n /**\n * Subscribe to changes in the thread store.\n *\n * @returns a function to unsubscribe from the thread store\n */\n abstract subscribe(\n cb: (threads: Map<string, ThreadData>) => void,\n ): () => void;\n}\n","import type {\n TCollabComment,\n TCollabThread,\n TiptapCollabProvider,\n} from \"@hocuspocus/provider\";\nimport {\n CommentBody,\n CommentData,\n CommentReactionData,\n ThreadData,\n} from \"../types.js\";\nimport { ThreadStore } from \"./ThreadStore.js\";\nimport { ThreadStoreAuth } from \"./ThreadStoreAuth.js\";\n\ntype ReactionAsTiptapData = {\n emoji: string;\n createdAt: number;\n userId: string;\n};\n\n/**\n * The `TiptapThreadStore` integrates with Tiptap's collaboration provider for comment management.\n * You can pass a `TiptapCollabProvider` to the constructor which takes care of storing the comments.\n *\n * Under the hood, this actually works similarly to the `YjsThreadStore` implementation. (comments are stored in the Yjs document)\n */\nexport class TiptapThreadStore extends ThreadStore {\n constructor(\n private readonly userId: string,\n private readonly provider: TiptapCollabProvider,\n auth: ThreadStoreAuth, // TODO: use?\n ) {\n super(auth);\n }\n\n /**\n * Creates a new thread with an initial comment.\n */\n public async createThread(options: {\n initialComment: {\n body: CommentBody;\n metadata?: any;\n };\n metadata?: any;\n }): Promise<ThreadData> {\n let thread = this.provider.createThread({\n data: options.metadata,\n });\n\n thread = this.provider.addComment(thread.id, {\n content: options.initialComment.body,\n data: {\n metadata: options.initialComment.metadata,\n userId: this.userId,\n },\n });\n\n return this.tiptapThreadToThreadData(thread);\n }\n\n // TipTapThreadStore does not support addThreadToDocument\n public addThreadToDocument = undefined;\n\n /**\n * Adds a comment to a thread.\n */\n public async addComment(options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n }): Promise<CommentBody> {\n const thread = this.provider.addComment(options.threadId, {\n content: options.comment.body,\n data: {\n metadata: options.comment.metadata,\n userId: this.userId,\n },\n });\n\n return this.tiptapCommentToCommentData(\n thread.comments[thread.comments.length - 1],\n );\n }\n\n /**\n * Updates a comment in a thread.\n */\n public async updateComment(options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n commentId: string;\n }) {\n const comment = this.provider.getThreadComment(\n options.threadId,\n options.commentId,\n true,\n );\n\n if (!comment) {\n throw new Error(\"Comment not found\");\n }\n\n this.provider.updateComment(options.threadId, options.commentId, {\n content: options.comment.body,\n data: {\n ...comment.data,\n metadata: options.comment.metadata,\n },\n });\n }\n\n private tiptapCommentToCommentData(comment: TCollabComment): CommentData {\n const reactions: CommentReactionData[] = [];\n\n for (const reaction of (comment.data?.reactions ||\n []) as ReactionAsTiptapData[]) {\n const existingReaction = reactions.find(\n (r) => r.emoji === reaction.emoji,\n );\n if (existingReaction) {\n existingReaction.userIds.push(reaction.userId);\n existingReaction.createdAt = new Date(\n Math.min(existingReaction.createdAt.getTime(), reaction.createdAt),\n );\n } else {\n reactions.push({\n emoji: reaction.emoji,\n createdAt: new Date(reaction.createdAt),\n userIds: [reaction.userId],\n });\n }\n }\n\n return {\n type: \"comment\",\n id: comment.id,\n body: comment.content,\n metadata: comment.data?.metadata,\n userId: comment.data?.userId,\n createdAt: new Date(comment.createdAt),\n updatedAt: new Date(comment.updatedAt),\n reactions,\n };\n }\n\n private tiptapThreadToThreadData(thread: TCollabThread): ThreadData {\n return {\n type: \"thread\",\n id: thread.id,\n comments: thread.comments.map((comment) =>\n this.tiptapCommentToCommentData(comment),\n ),\n resolved: !!thread.resolvedAt,\n metadata: thread.data?.metadata,\n createdAt: new Date(thread.createdAt),\n updatedAt: new Date(thread.updatedAt),\n };\n }\n\n /**\n * Deletes a comment from a thread.\n */\n public async deleteComment(options: { threadId: string; commentId: string }) {\n this.provider.deleteComment(options.threadId, options.commentId);\n }\n\n /**\n * Deletes a thread.\n */\n public async deleteThread(options: { threadId: string }) {\n this.provider.deleteThread(options.threadId);\n }\n\n /**\n * Marks a thread as resolved.\n */\n public async resolveThread(options: { threadId: string }) {\n this.provider.updateThread(options.threadId, {\n resolvedAt: new Date().toISOString(),\n });\n }\n\n /**\n * Marks a thread as unresolved.\n */\n public async unresolveThread(options: { threadId: string }) {\n this.provider.updateThread(options.threadId, {\n resolvedAt: null,\n });\n }\n\n /**\n * Adds a reaction to a comment.\n *\n * Auth: should be possible by anyone with comment access\n */\n public async addReaction(options: {\n threadId: string;\n commentId: string;\n emoji: string;\n }) {\n const comment = this.provider.getThreadComment(\n options.threadId,\n options.commentId,\n true,\n );\n\n if (!comment) {\n throw new Error(\"Comment not found\");\n }\n\n this.provider.updateComment(options.threadId, options.commentId, {\n data: {\n ...comment.data,\n reactions: [\n ...((comment.data?.reactions || []) as ReactionAsTiptapData[]),\n {\n emoji: options.emoji,\n createdAt: Date.now(),\n userId: this.userId,\n },\n ],\n },\n });\n }\n\n /**\n * Deletes a reaction from a comment.\n *\n * Auth: should be possible by the reaction author\n */\n public async deleteReaction(options: {\n threadId: string;\n commentId: string;\n emoji: string;\n }) {\n const comment = this.provider.getThreadComment(\n options.threadId,\n options.commentId,\n true,\n );\n\n if (!comment) {\n throw new Error(\"Comment not found\");\n }\n\n this.provider.updateComment(options.threadId, options.commentId, {\n data: {\n ...comment.data,\n reactions: (\n (comment.data?.reactions || []) as ReactionAsTiptapData[]\n ).filter(\n (reaction) =>\n reaction.emoji !== options.emoji && reaction.userId !== this.userId,\n ),\n },\n });\n }\n\n public getThread(threadId: string): ThreadData {\n const thread = this.provider.getThread(threadId);\n\n if (!thread) {\n throw new Error(\"Thread not found\");\n }\n\n return this.tiptapThreadToThreadData(thread);\n }\n\n public getThreads(): Map<string, ThreadData> {\n return new Map(\n this.provider\n .getThreads()\n .map((thread) => [thread.id, this.tiptapThreadToThreadData(thread)]),\n );\n }\n\n public subscribe(cb: (threads: Map<string, ThreadData>) => void): () => void {\n const newCb = () => {\n cb(this.getThreads());\n };\n this.provider.watchThreads(newCb);\n return () => {\n this.provider.unwatchThreads(newCb);\n };\n }\n}\n","import * as Y from \"yjs\";\nimport { CommentData, CommentReactionData, ThreadData } from \"../../types.js\";\n\nexport function commentToYMap(comment: CommentData) {\n const yMap = new Y.Map<any>();\n yMap.set(\"id\", comment.id);\n yMap.set(\"userId\", comment.userId);\n yMap.set(\"createdAt\", comment.createdAt.getTime());\n yMap.set(\"updatedAt\", comment.updatedAt.getTime());\n if (comment.deletedAt) {\n yMap.set(\"deletedAt\", comment.deletedAt.getTime());\n yMap.set(\"body\", undefined);\n } else {\n yMap.set(\"body\", comment.body);\n }\n if (comment.reactions.length > 0) {\n throw new Error(\"Reactions should be empty in commentToYMap\");\n }\n\n /**\n * Reactions are stored in a map keyed by {userId-emoji},\n * this makes it easy to add / remove reactions and in a way that works local-first.\n * The cost is that \"reading\" the reactions is a bit more complex (see yMapToReactions).\n */\n yMap.set(\"reactionsByUser\", new Y.Map());\n yMap.set(\"metadata\", comment.metadata);\n\n return yMap;\n}\n\nexport function threadToYMap(thread: ThreadData) {\n const yMap = new Y.Map();\n yMap.set(\"id\", thread.id);\n yMap.set(\"createdAt\", thread.createdAt.getTime());\n yMap.set(\"updatedAt\", thread.updatedAt.getTime());\n const commentsArray = new Y.Array<Y.Map<any>>();\n\n commentsArray.push(thread.comments.map((comment) => commentToYMap(comment)));\n\n yMap.set(\"comments\", commentsArray);\n yMap.set(\"resolved\", thread.resolved);\n yMap.set(\"resolvedUpdatedAt\", thread.resolvedUpdatedAt?.getTime());\n yMap.set(\"resolvedBy\", thread.resolvedBy);\n yMap.set(\"metadata\", thread.metadata);\n return yMap;\n}\n\ntype SingleUserCommentReactionData = {\n emoji: string;\n createdAt: Date;\n userId: string;\n};\n\nexport function yMapToReaction(\n yMap: Y.Map<any>,\n): SingleUserCommentReactionData {\n return {\n emoji: yMap.get(\"emoji\"),\n createdAt: new Date(yMap.get(\"createdAt\")),\n userId: yMap.get(\"userId\"),\n };\n}\n\nfunction yMapToReactions(yMap: Y.Map<any>): CommentReactionData[] {\n const flatReactions = [...yMap.values()].map((reaction: Y.Map<any>) =>\n yMapToReaction(reaction),\n );\n // combine reactions by the same emoji\n return flatReactions.reduce(\n (acc: CommentReactionData[], reaction: SingleUserCommentReactionData) => {\n const existingReaction = acc.find((r) => r.emoji === reaction.emoji);\n if (existingReaction) {\n existingReaction.userIds.push(reaction.userId);\n existingReaction.createdAt = new Date(\n Math.min(\n existingReaction.createdAt.getTime(),\n reaction.createdAt.getTime(),\n ),\n );\n } else {\n acc.push({\n emoji: reaction.emoji,\n createdAt: reaction.createdAt,\n userIds: [reaction.userId],\n });\n }\n return acc;\n },\n [] as CommentReactionData[],\n );\n}\n\nexport function yMapToComment(yMap: Y.Map<any>): CommentData {\n return {\n type: \"comment\",\n id: yMap.get(\"id\"),\n userId: yMap.get(\"userId\"),\n createdAt: new Date(yMap.get(\"createdAt\")),\n updatedAt: new Date(yMap.get(\"updatedAt\")),\n deletedAt: yMap.get(\"deletedAt\")\n ? new Date(yMap.get(\"deletedAt\"))\n : undefined,\n reactions: yMapToReactions(yMap.get(\"reactionsByUser\")),\n metadata: yMap.get(\"metadata\"),\n body: yMap.get(\"body\"),\n };\n}\n\nexport function yMapToThread(yMap: Y.Map<any>): ThreadData {\n return {\n type: \"thread\",\n id: yMap.get(\"id\"),\n createdAt: new Date(yMap.get(\"createdAt\")),\n updatedAt: new Date(yMap.get(\"updatedAt\")),\n comments: ((yMap.get(\"comments\") as Y.Array<Y.Map<any>>) || []).map(\n (comment) => yMapToComment(comment),\n ),\n resolved: yMap.get(\"resolved\"),\n resolvedUpdatedAt: new Date(yMap.get(\"resolvedUpdatedAt\")),\n resolvedBy: yMap.get(\"resolvedBy\"),\n metadata: yMap.get(\"metadata\"),\n };\n}\n","import * as Y from \"yjs\";\nimport { ThreadData } from \"../../types.js\";\nimport { ThreadStore } from \"../ThreadStore.js\";\nimport { ThreadStoreAuth } from \"../ThreadStoreAuth.js\";\nimport { yMapToThread } from \"./yjsHelpers.js\";\n\n/**\n * This is an abstract class that only implements the READ methods required by the ThreadStore interface.\n * The data is read from a Yjs Map.\n */\nexport abstract class YjsThreadStoreBase extends ThreadStore {\n constructor(\n protected readonly threadsYMap: Y.Map<any>,\n auth: ThreadStoreAuth,\n ) {\n super(auth);\n }\n\n // TODO: async / reactive interface?\n public getThread(threadId: string) {\n const yThread = this.threadsYMap.get(threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n const thread = yMapToThread(yThread);\n return thread;\n }\n\n public getThreads(): Map<string, ThreadData> {\n const threadMap = new Map<string, ThreadData>();\n this.threadsYMap.forEach((yThread, id) => {\n if (yThread instanceof Y.Map) {\n threadMap.set(id, yMapToThread(yThread));\n }\n });\n return threadMap;\n }\n\n public subscribe(cb: (threads: Map<string, ThreadData>) => void) {\n const observer = () => {\n cb(this.getThreads());\n };\n\n this.threadsYMap.observeDeep(observer);\n\n return () => {\n this.threadsYMap.unobserveDeep(observer);\n };\n }\n}\n","import * as Y from \"yjs\";\nimport { CommentBody } from \"../../types.js\";\nimport { ThreadStoreAuth } from \"../ThreadStoreAuth.js\";\nimport { YjsThreadStoreBase } from \"./YjsThreadStoreBase.js\";\n\n/**\n * This is a REST-based implementation of the YjsThreadStoreBase.\n * It Reads data directly from the underlying document (same as YjsThreadStore),\n * but for Writes, it sends data to a REST API that should:\n * - check the user has the correct permissions to make the desired changes\n * - apply the updates to the underlying Yjs document\n *\n * (see https://github.com/TypeCellOS/BlockNote-demo-nextjs-hocuspocus)\n *\n * The reason we still use the Yjs document as underlying storage is that it makes it easy to\n * sync updates in real-time to other collaborators.\n * (but technically, you could also implement a different storage altogether\n * and not store the thread related data in the Yjs document)\n */\nexport class RESTYjsThreadStore extends YjsThreadStoreBase {\n constructor(\n private readonly BASE_URL: string,\n private readonly headers: Record<string, string>,\n threadsYMap: Y.Map<any>,\n auth: ThreadStoreAuth,\n ) {\n super(threadsYMap, auth);\n }\n\n private doRequest = async (path: string, method: string, body?: any) => {\n const response = await fetch(`${this.BASE_URL}${path}`, {\n method,\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n ...this.headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to ${method} ${path}: ${response.statusText}`);\n }\n\n return response.json();\n };\n\n public addThreadToDocument = async (options: {\n threadId: string;\n selection: {\n prosemirror: {\n head: number;\n anchor: number;\n };\n yjs: {\n head: any;\n anchor: any;\n };\n };\n }) => {\n const { threadId, ...rest } = options;\n return this.doRequest(`/${threadId}/addToDocument`, \"POST\", rest);\n };\n\n public createThread = async (options: {\n initialComment: {\n body: CommentBody;\n metadata?: any;\n };\n metadata?: any;\n }) => {\n return this.doRequest(\"\", \"POST\", options);\n };\n\n public addComment = (options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n }) => {\n const { threadId, ...rest } = options;\n return this.doRequest(`/${threadId}/comments`, \"POST\", rest);\n };\n\n public updateComment = (options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n commentId: string;\n }) => {\n const { threadId, commentId, ...rest } = options;\n return this.doRequest(`/${threadId}/comments/${commentId}`, \"PUT\", rest);\n };\n\n public deleteComment = (options: {\n threadId: string;\n commentId: string;\n softDelete?: boolean;\n }) => {\n const { threadId, commentId, ...rest } = options;\n return this.doRequest(\n `/${threadId}/comments/${commentId}?soft=${!!rest.softDelete}`,\n \"DELETE\",\n );\n };\n\n public deleteThread = (options: { threadId: string }) => {\n return this.doRequest(`/${options.threadId}`, \"DELETE\");\n };\n\n public resolveThread = (options: { threadId: string }) => {\n return this.doRequest(`/${options.threadId}/resolve`, \"POST\");\n };\n\n public unresolveThread = (options: { threadId: string }) => {\n return this.doRequest(`/${options.threadId}/unresolve`, \"POST\");\n };\n\n public addReaction = (options: {\n threadId: string;\n commentId: string;\n emoji: string;\n }) => {\n const { threadId, commentId, ...rest } = options;\n return this.doRequest(\n `/${threadId}/comments/${commentId}/reactions`,\n \"POST\",\n rest,\n );\n };\n\n public deleteReaction = (options: {\n threadId: string;\n commentId: string;\n emoji: string;\n }) => {\n return this.doRequest(\n `/${options.threadId}/comments/${options.commentId}/reactions/${options.emoji}`,\n \"DELETE\",\n );\n };\n}\n","import { v4 } from \"uuid\";\nimport * as Y from \"yjs\";\nimport { CommentBody, CommentData, ThreadData } from \"../../types.js\";\nimport { ThreadStoreAuth } from \"../ThreadStoreAuth.js\";\nimport { YjsThreadStoreBase } from \"./YjsThreadStoreBase.js\";\nimport {\n commentToYMap,\n threadToYMap,\n yMapToComment,\n yMapToThread,\n} from \"./yjsHelpers.js\";\n\n/**\n * This is a Yjs-based implementation of the ThreadStore interface.\n *\n * It reads and writes thread / comments information directly to the underlying Yjs Document.\n *\n * @important While this is the easiest to add to your app, there are two challenges:\n * - The user needs to be able to write to the Yjs document to store the information.\n * So a user without write access to the Yjs document cannot leave any comments.\n * - Even with write access, the operations are not secure. Unless your Yjs server\n * guards against malicious operations, it's technically possible for one user to make changes to another user's comments, etc.\n * (even though these options are not visible in the UI, a malicious user can make unauthorized changes to the underlying Yjs document)\n */\nexport class YjsThreadStore extends YjsThreadStoreBase {\n constructor(\n private readonly userId: string,\n threadsYMap: Y.Map<any>,\n auth: ThreadStoreAuth,\n ) {\n super(threadsYMap, auth);\n }\n\n private transact = <T, R>(\n fn: (options: T) => R,\n ): ((options: T) => Promise<R>) => {\n return async (options: T) => {\n return this.threadsYMap.doc!.transact(() => {\n return fn(options);\n });\n };\n };\n\n public createThread = this.transact(\n (options: {\n initialComment: {\n body: CommentBody;\n metadata?: any;\n };\n metadata?: any;\n }) => {\n if (!this.auth.canCreateThread()) {\n throw new Error(\"Not authorized\");\n }\n\n const date = new Date();\n\n const comment: CommentData = {\n type: \"comment\",\n id: v4(),\n userId: this.userId,\n createdAt: date,\n updatedAt: date,\n reactions: [],\n metadata: options.initialComment.metadata,\n body: options.initialComment.body,\n };\n\n const thread: ThreadData = {\n type: \"thread\",\n id: v4(),\n createdAt: date,\n updatedAt: date,\n comments: [comment],\n resolved: false,\n metadata: options.metadata,\n };\n\n this.threadsYMap.set(thread.id, threadToYMap(thread));\n\n return thread;\n },\n );\n\n // YjsThreadStore does not support addThreadToDocument\n public addThreadToDocument = undefined;\n\n public addComment = this.transact(\n (options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n if (!this.auth.canAddComment(yMapToThread(yThread))) {\n throw new Error(\"Not authorized\");\n }\n\n const date = new Date();\n const comment: CommentData = {\n type: \"comment\",\n id: v4(),\n userId: this.userId,\n createdAt: date,\n updatedAt: date,\n deletedAt: undefined,\n reactions: [],\n metadata: options.comment.metadata,\n body: options.comment.body,\n };\n\n (yThread.get(\"comments\") as Y.Array<Y.Map<any>>).push([\n commentToYMap(comment),\n ]);\n\n yThread.set(\"updatedAt\", new Date().getTime());\n return comment;\n },\n );\n\n public updateComment = this.transact(\n (options: {\n comment: {\n body: CommentBody;\n metadata?: any;\n };\n threadId: string;\n commentId: string;\n }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n const yCommentIndex = yArrayFindIndex(\n yThread.get(\"comments\"),\n (comment) => comment.get(\"id\") === options.commentId,\n );\n\n if (yCommentIndex === -1) {\n throw new Error(\"Comment not found\");\n }\n\n const yComment = yThread.get(\"comments\").get(yCommentIndex);\n\n if (!this.auth.canUpdateComment(yMapToComment(yComment))) {\n throw new Error(\"Not authorized\");\n }\n\n yComment.set(\"body\", options.comment.body);\n yComment.set(\"updatedAt\", new Date().getTime());\n yComment.set(\"metadata\", options.comment.metadata);\n },\n );\n\n public deleteComment = this.transact(\n (options: {\n threadId: string;\n commentId: string;\n softDelete?: boolean;\n }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n const yCommentIndex = yArrayFindIndex(\n yThread.get(\"comments\"),\n (comment) => comment.get(\"id\") === options.commentId,\n );\n\n if (yCommentIndex === -1) {\n throw new Error(\"Comment not found\");\n }\n\n const yComment = yThread.get(\"comments\").get(yCommentIndex);\n\n if (!this.auth.canDeleteComment(yMapToComment(yComment))) {\n throw new Error(\"Not authorized\");\n }\n\n if (yComment.get(\"deletedAt\")) {\n throw new Error(\"Comment already deleted\");\n }\n\n if (options.softDelete) {\n yComment.set(\"deletedAt\", new Date().getTime());\n yComment.set(\"body\", undefined);\n } else {\n yThread.get(\"comments\").delete(yCommentIndex);\n }\n\n if (\n (yThread.get(\"comments\") as Y.Array<any>)\n .toArray()\n .every((comment) => comment.get(\"deletedAt\"))\n ) {\n // all comments deleted\n if (options.softDelete) {\n yThread.set(\"deletedAt\", new Date().getTime());\n } else {\n this.threadsYMap.delete(options.threadId);\n }\n }\n\n yThread.set(\"updatedAt\", new Date().getTime());\n },\n );\n\n public deleteThread = this.transact((options: { threadId: string }) => {\n if (\n !this.auth.canDeleteThread(\n yMapToThread(this.threadsYMap.get(options.threadId)),\n )\n ) {\n throw new Error(\"Not authorized\");\n }\n\n this.threadsYMap.delete(options.threadId);\n });\n\n public resolveThread = this.transact((options: { threadId: string }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n if (!this.auth.canResolveThread(yMapToThread(yThread))) {\n throw new Error(\"Not authorized\");\n }\n\n yThread.set(\"resolved\", true);\n yThread.set(\"resolvedUpdatedAt\", new Date().getTime());\n yThread.set(\"resolvedBy\", this.userId);\n });\n\n public unresolveThread = this.transact((options: { threadId: string }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n if (!this.auth.canUnresolveThread(yMapToThread(yThread))) {\n throw new Error(\"Not authorized\");\n }\n\n yThread.set(\"resolved\", false);\n yThread.set(\"resolvedUpdatedAt\", new Date().getTime());\n });\n\n public addReaction = this.transact(\n (options: { threadId: string; commentId: string; emoji: string }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n const yCommentIndex = yArrayFindIndex(\n yThread.get(\"comments\"),\n (comment) => comment.get(\"id\") === options.commentId,\n );\n\n if (yCommentIndex === -1) {\n throw new Error(\"Comment not found\");\n }\n\n const yComment = yThread.get(\"comments\").get(yCommentIndex);\n\n if (!this.auth.canAddReaction(yMapToComment(yComment), options.emoji)) {\n throw new Error(\"Not authorized\");\n }\n\n const date = new Date();\n\n const key = `${this.userId}-${options.emoji}`;\n\n const reactionsByUser = yComment.get(\"reactionsByUser\");\n\n if (reactionsByUser.has(key)) {\n // already exists\n return;\n } else {\n const reaction = new Y.Map();\n reaction.set(\"emoji\", options.emoji);\n reaction.set(\"createdAt\", date.getTime());\n reaction.set(\"userId\", this.userId);\n reactionsByUser.set(key, reaction);\n }\n },\n );\n\n public deleteReaction = this.transact(\n (options: { threadId: string; commentId: string; emoji: string }) => {\n const yThread = this.threadsYMap.get(options.threadId);\n if (!yThread) {\n throw new Error(\"Thread not found\");\n }\n\n const yCommentIndex = yArrayFindIndex(\n yThread.get(\"comments\"),\n (comment) => comment.get(\"id\") === options.commentId,\n );\n\n if (yCommentIndex === -1) {\n throw new Error(\"Comment not found\");\n }\n\n const yComment = yThread.get(\"comments\").get(yCommentIndex);\n\n if (\n !this.auth.canDeleteReaction(yMapToComment(yComment), options.emoji)\n ) {\n throw new Error(\"Not authorized\");\n }\n\n const key = `${this.userId}-${options.emoji}`;\n\n const reactionsByUser = yComment.get(\"reactionsByUser\");\n\n reactionsByUser.delete(key);\n },\n );\n}\n\nfunction yArrayFindIndex(\n yArray: Y.Array<any>,\n predicate: (item: any) => boolean,\n) {\n for (let i = 0; i < yArray.length; i++) {\n if (predicate(yArray.get(i))) {\n return i;\n }\n }\n return -1;\n}\n"],"names":["ThreadStoreAuth","DefaultThreadStoreAuth","userId","role","_thread","comment","emoji","reaction","ThreadStore","auth","__publicField","TiptapThreadStore","provider","options","thread","reactions","_a","existingReaction","r","_b","_c","threadId","cb","newCb","commentToYMap","yMap","Y","threadToYMap","commentsArray","yMapToReaction","yMapToReactions","acc","yMapToComment","yMapToThread","YjsThreadStoreBase","threadsYMap","yThread","threadMap","id","observer","RESTYjsThreadStore","BASE_URL","headers","path","method","body","response","rest","commentId","YjsThreadStore","fn","date","v4","yCommentIndex","yArrayFindIndex","yComment","key","reactionsByUser","yArray","predicate","i"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"en-Cl87Uuyf.cjs","sources":["../src/i18n/locales/en.ts"],"sourcesContent":["export const en = {\n slash_menu: {\n heading: {\n title: \"Heading 1\",\n subtext: \"Top-level heading\",\n aliases: [\"h\", \"heading1\", \"h1\"],\n group: \"Headings\",\n },\n heading_2: {\n title: \"Heading 2\",\n subtext: \"Key section heading\",\n aliases: [\"h2\", \"heading2\", \"subheading\"],\n group: \"Headings\",\n },\n heading_3: {\n title: \"Heading 3\",\n subtext: \"Subsection and group heading\",\n aliases: [\"h3\", \"heading3\", \"subheading\"],\n group: \"Headings\",\n },\n heading_4: {\n title: \"Heading 4\",\n subtext: \"Minor subsection heading\",\n aliases: [\"h4\", \"heading4\", \"subheading4\"],\n group: \"Subheadings\",\n },\n heading_5: {\n title: \"Heading 5\",\n subtext: \"Small subsection heading\",\n aliases: [\"h5\", \"heading5\", \"subheading5\"],\n group: \"Subheadings\",\n },\n heading_6: {\n title: \"Heading 6\",\n subtext: \"Lowest-level heading\",\n aliases: [\"h6\", \"heading6\", \"subheading6\"],\n group: \"Subheadings\",\n },\n toggle_heading: {\n title: \"Toggle Heading 1\",\n subtext: \"Toggleable top-level heading\",\n aliases: [\"h\", \"heading1\", \"h1\", \"collapsable\"],\n group: \"Subheadings\",\n },\n toggle_heading_2: {\n title: \"Toggle Heading 2\",\n subtext: \"Toggleable key section heading\",\n aliases: [\"h2\", \"heading2\", \"subheading\", \"collapsable\"],\n group: \"Subheadings\",\n },\n toggle_heading_3: {\n title: \"Toggle Heading 3\",\n subtext: \"Toggleable subsection and group heading\",\n aliases: [\"h3\", \"heading3\", \"subheading\", \"collapsable\"],\n group: \"Subheadings\",\n },\n quote: {\n title: \"Quote\",\n subtext: \"Quote or excerpt\",\n aliases: [\"quotation\", \"blockquote\", \"bq\"],\n group: \"Basic blocks\",\n },\n toggle_list: {\n title: \"Toggle List\",\n subtext: \"List with hideable sub-items\",\n aliases: [\"li\", \"list\", \"toggleList\", \"toggle list\", \"collapsable list\"],\n group: \"Basic blocks\",\n },\n numbered_list: {\n title: \"Numbered List\",\n subtext: \"List with ordered items\",\n aliases: [\"ol\", \"li\", \"list\", \"numberedlist\", \"numbered list\"],\n group: \"Basic blocks\",\n },\n bullet_list: {\n title: \"Bullet List\",\n subtext: \"List with unordered items\",\n aliases: [\"ul\", \"li\", \"list\", \"bulletlist\", \"bullet list\"],\n group: \"Basic blocks\",\n },\n check_list: {\n title: \"Check List\",\n subtext: \"List with checkboxes\",\n aliases: [\n \"ul\",\n \"li\",\n \"list\",\n \"checklist\",\n \"check list\",\n \"checked list\",\n \"checkbox\",\n ],\n group: \"Basic blocks\",\n },\n paragraph: {\n title: \"Paragraph\",\n subtext: \"The body of your document\",\n aliases: [\"p\", \"paragraph\"],\n group: \"Basic blocks\",\n },\n code_block: {\n title: \"Code Block\",\n subtext: \"Code block with syntax highlighting\",\n aliases: [\"code\", \"pre\"],\n group: \"Basic blocks\",\n },\n page_break: {\n title: \"Page Break\",\n subtext: \"Page separator\",\n aliases: [\"page\", \"break\", \"separator\"],\n group: \"Basic blocks\",\n },\n table: {\n title: \"Table\",\n subtext: \"Table with editable cells\",\n aliases: [\"table\"],\n group: \"Advanced\",\n },\n image: {\n title: \"Image\",\n subtext: \"Resizable image with caption\",\n aliases: [\n \"image\",\n \"imageUpload\",\n \"upload\",\n \"img\",\n \"picture\",\n \"media\",\n \"url\",\n ],\n group: \"Media\",\n },\n video: {\n title: \"Video\",\n subtext: \"Resizable video with caption\",\n aliases: [\n \"video\",\n \"videoUpload\",\n \"upload\",\n \"mp4\",\n \"film\",\n \"media\",\n \"url\",\n ],\n group: \"Media\",\n },\n audio: {\n title: \"Audio\",\n subtext: \"Embedded audio with caption\",\n aliases: [\n \"audio\",\n \"audioUpload\",\n \"upload\",\n \"mp3\",\n \"sound\",\n \"media\",\n \"url\",\n ],\n group: \"Media\",\n },\n file: {\n title: \"File\",\n subtext: \"Embedded file\",\n aliases: [\"file\", \"upload\", \"embed\", \"media\", \"url\"],\n group: \"Media\",\n },\n emoji: {\n title: \"Emoji\",\n subtext: \"Search for and insert an emoji\",\n aliases: [\"emoji\", \"emote\", \"emotion\", \"face\"],\n group: \"Others\",\n },\n divider: {\n title: \"Divider\",\n subtext: \"Visually divide blocks\",\n aliases: [\"divider\", \"hr\", \"line\", \"horizontal rule\"],\n group: \"Basic blocks\",\n },\n },\n placeholders: {\n default: \"Enter text or type '/' for commands\",\n heading: \"Heading\",\n toggleListItem: \"Toggle\",\n bulletListItem: \"List\",\n numberedListItem: \"List\",\n checkListItem: \"List\",\n emptyDocument: undefined,\n new_comment: \"Write a comment...\",\n edit_comment: \"Edit comment...\",\n comment_reply: \"Add comment...\",\n } as Record<string | \"default\" | \"emptyDocument\", string | undefined>,\n file_blocks: {\n add_button_text: {\n image: \"Add image\",\n video: \"Add video\",\n audio: \"Add audio\",\n file: \"Add file\",\n } as Record<string, string>,\n },\n toggle_blocks: {\n add_block_button: \"Empty toggle. Click to add a block.\",\n },\n // from react package:\n side_menu: {\n add_block_label: \"Add block\",\n drag_handle_label: \"Open block menu\",\n },\n drag_handle: {\n delete_menuitem: \"Delete\",\n colors_menuitem: \"Colors\",\n header_row_menuitem: \"Header row\",\n header_column_menuitem: \"Header column\",\n },\n table_handle: {\n delete_column_menuitem: \"Delete column\",\n delete_row_menuitem: \"Delete row\",\n add_left_menuitem: \"Add column left\",\n add_right_menuitem: \"Add column right\",\n add_above_menuitem: \"Add row above\",\n add_below_menuitem: \"Add row below\",\n split_cell_menuitem: \"Split cell\",\n merge_cells_menuitem: \"Merge cells\",\n background_color_menuitem: \"Background color\",\n },\n suggestion_menu: {\n no_items_title: \"No items found\",\n },\n color_picker: {\n text_title: \"Text\",\n background_title: \"Background\",\n colors: {\n default: \"Default\",\n gray: \"Gray\",\n brown: \"Brown\",\n red: \"Red\",\n orange: \"Orange\",\n yellow: \"Yellow\",\n green: \"Green\",\n blue: \"Blue\",\n purple: \"Purple\",\n pink: \"Pink\",\n },\n },\n\n formatting_toolbar: {\n bold: {\n tooltip: \"Bold\",\n secondary_tooltip: \"Mod+B\",\n },\n italic: {\n tooltip: \"Italic\",\n secondary_tooltip: \"Mod+I\",\n },\n underline: {\n tooltip: \"Underline\",\n secondary_tooltip: \"Mod+U\",\n },\n strike: {\n tooltip: \"Strike\",\n secondary_tooltip: \"Mod+Shift+S\",\n },\n code: {\n tooltip: \"Code\",\n secondary_tooltip: \"\",\n },\n colors: {\n tooltip: \"Colors\",\n },\n link: {\n tooltip: \"Create link\",\n secondary_tooltip: \"Mod+K\",\n },\n file_caption: {\n tooltip: \"Edit caption\",\n input_placeholder: \"Edit caption\",\n },\n file_replace: {\n tooltip: {\n image: \"Replace image\",\n video: \"Replace video\",\n audio: \"Replace audio\",\n file: \"Replace file\",\n } as Record<string, string>,\n },\n file_rename: {\n tooltip: {\n image: \"Rename image\",\n video: \"Rename video\",\n audio: \"Rename audio\",\n file: \"Rename file\",\n } as Record<string, string>,\n input_placeholder: {\n image: \"Rename image\",\n video: \"Rename video\",\n audio: \"Rename audio\",\n file: \"Rename file\",\n } as Record<string, string>,\n },\n file_download: {\n tooltip: {\n image: \"Download image\",\n video: \"Download video\",\n audio: \"Download audio\",\n file: \"Download file\",\n } as Record<string, string>,\n },\n file_delete: {\n tooltip: {\n image: \"Delete image\",\n video: \"Delete video\",\n audio: \"Delete audio\",\n file: \"Delete file\",\n } as Record<string, string>,\n },\n file_preview_toggle: {\n tooltip: \"Toggle preview\",\n },\n nest: {\n tooltip: \"Nest block\",\n secondary_tooltip: \"Tab\",\n },\n unnest: {\n tooltip: \"Unnest block\",\n secondary_tooltip: \"Shift+Tab\",\n },\n align_left: {\n tooltip: \"Align text left\",\n },\n align_center: {\n tooltip: \"Align text center\",\n },\n align_right: {\n tooltip: \"Align text right\",\n },\n align_justify: {\n tooltip: \"Justify text\",\n },\n table_cell_merge: {\n tooltip: \"Merge cells\",\n },\n comment: {\n tooltip: \"Add comment\",\n },\n },\n file_panel: {\n upload: {\n title: \"Upload\",\n file_placeholder: {\n image: \"Upload image\",\n video: \"Upload video\",\n audio: \"Upload audio\",\n file: \"Upload file\",\n } as Record<string, string>,\n upload_error: \"Error: Upload failed\",\n },\n embed: {\n title: \"Embed\",\n embed_button: {\n image: \"Embed image\",\n video: \"Embed video\",\n audio: \"Embed audio\",\n file: \"Embed file\",\n } as Record<string, string>,\n url_placeholder: \"Enter URL\",\n },\n },\n link_toolbar: {\n delete: {\n tooltip: \"Remove link\",\n },\n edit: {\n text: \"Edit link\",\n tooltip: \"Edit\",\n },\n open: {\n tooltip: \"Open in new tab\",\n },\n form: {\n title_placeholder: \"Edit title\",\n url_placeholder: \"Edit URL\",\n },\n },\n comments: {\n edited: \"edited\",\n save_button_text: \"Save\",\n cancel_button_text: \"Cancel\",\n actions: {\n add_reaction: \"Add reaction\",\n resolve: \"Resolve\",\n edit_comment: \"Edit comment\",\n delete_comment: \"Delete comment\",\n more_actions: \"More actions\",\n },\n reactions: {\n reacted_by: \"Reacted by\",\n },\n sidebar: {\n marked_as_resolved: \"Marked as resolved\",\n more_replies: (count: number) => `${count} more replies`,\n },\n },\n generic: {\n ctrl_shortcut: \"Ctrl\",\n },\n};\n"],"names":["en","count"],"mappings":"aAAO,MAAMA,EAAK,CAChB,WAAY,CACV,QAAS,CACP,MAAO,YACP,QAAS,oBACT,QAAS,CAAC,IAAK,WAAY,IAAI,EAC/B,MAAO,UACT,EACA,UAAW,CACT,MAAO,YACP,QAAS,sBACT,QAAS,CAAC,KAAM,WAAY,YAAY,EACxC,MAAO,UACT,EACA,UAAW,CACT,MAAO,YACP,QAAS,+BACT,QAAS,CAAC,KAAM,WAAY,YAAY,EACxC,MAAO,UACT,EACA,UAAW,CACT,MAAO,YACP,QAAS,2BACT,QAAS,CAAC,KAAM,WAAY,aAAa,EACzC,MAAO,aACT,EACA,UAAW,CACT,MAAO,YACP,QAAS,2BACT,QAAS,CAAC,KAAM,WAAY,aAAa,EACzC,MAAO,aACT,EACA,UAAW,CACT,MAAO,YACP,QAAS,uBACT,QAAS,CAAC,KAAM,WAAY,aAAa,EACzC,MAAO,aACT,EACA,eAAgB,CACd,MAAO,mBACP,QAAS,+BACT,QAAS,CAAC,IAAK,WAAY,KAAM,aAAa,EAC9C,MAAO,aACT,EACA,iBAAkB,CAChB,MAAO,mBACP,QAAS,iCACT,QAAS,CAAC,KAAM,WAAY,aAAc,aAAa,EACvD,MAAO,aACT,EACA,iBAAkB,CAChB,MAAO,mBACP,QAAS,0CACT,QAAS,CAAC,KAAM,WAAY,aAAc,aAAa,EACvD,MAAO,aACT,EACA,MAAO,CACL,MAAO,QACP,QAAS,mBACT,QAAS,CAAC,YAAa,aAAc,IAAI,EACzC,MAAO,cACT,EACA,YAAa,CACX,MAAO,cACP,QAAS,+BACT,QAAS,CAAC,KAAM,OAAQ,aAAc,cAAe,kBAAkB,EACvE,MAAO,cACT,EACA,cAAe,CACb,MAAO,gBACP,QAAS,0BACT,QAAS,CAAC,KAAM,KAAM,OAAQ,eAAgB,eAAe,EAC7D,MAAO,cACT,EACA,YAAa,CACX,MAAO,cACP,QAAS,4BACT,QAAS,CAAC,KAAM,KAAM,OAAQ,aAAc,aAAa,EACzD,MAAO,cACT,EACA,WAAY,CACV,MAAO,aACP,QAAS,uBACT,QAAS,CACP,KACA,KACA,OACA,YACA,aACA,eACA,UACF,EACA,MAAO,cACT,EACA,UAAW,CACT,MAAO,YACP,QAAS,4BACT,QAAS,CAAC,IAAK,WAAW,EAC1B,MAAO,cACT,EACA,WAAY,CACV,MAAO,aACP,QAAS,sCACT,QAAS,CAAC,OAAQ,KAAK,EACvB,MAAO,cACT,EACA,WAAY,CACV,MAAO,aACP,QAAS,iBACT,QAAS,CAAC,OAAQ,QAAS,WAAW,EACtC,MAAO,cACT,EACA,MAAO,CACL,MAAO,QACP,QAAS,4BACT,QAAS,CAAC,OAAO,EACjB,MAAO,UACT,EACA,MAAO,CACL,MAAO,QACP,QAAS,+BACT,QAAS,CACP,QACA,cACA,SACA,MACA,UACA,QACA,KACF,EACA,MAAO,OACT,EACA,MAAO,CACL,MAAO,QACP,QAAS,+BACT,QAAS,CACP,QACA,cACA,SACA,MACA,OACA,QACA,KACF,EACA,MAAO,OACT,EACA,MAAO,CACL,MAAO,QACP,QAAS,8BACT,QAAS,CACP,QACA,cACA,SACA,MACA,QACA,QACA,KACF,EACA,MAAO,OACT,EACA,KAAM,CACJ,MAAO,OACP,QAAS,gBACT,QAAS,CAAC,OAAQ,SAAU,QAAS,QAAS,KAAK,EACnD,MAAO,OACT,EACA,MAAO,CACL,MAAO,QACP,QAAS,iCACT,QAAS,CAAC,QAAS,QAAS,UAAW,MAAM,EAC7C,MAAO,QACT,EACA,QAAS,CACP,MAAO,UACP,QAAS,yBACT,QAAS,CAAC,UAAW,KAAM,OAAQ,iBAAiB,EACpD,MAAO,cAAA,CAEX,EACA,aAAc,CACZ,QAAS,sCACT,QAAS,UACT,eAAgB,SAChB,eAAgB,OAChB,iBAAkB,OAClB,cAAe,OACf,cAAe,OACf,YAAa,qBACb,aAAc,kBACd,cAAe,gBACjB,EACA,YAAa,CACX,gBAAiB,CACf,MAAO,YACP,MAAO,YACP,MAAO,YACP,KAAM,UAAA,CAEV,EACA,cAAe,CACb,iBAAkB,qCACpB,EAEA,UAAW,CACT,gBAAiB,YACjB,kBAAmB,iBACrB,EACA,YAAa,CACX,gBAAiB,SACjB,gBAAiB,SACjB,oBAAqB,aACrB,uBAAwB,eAC1B,EACA,aAAc,CACZ,uBAAwB,gBACxB,oBAAqB,aACrB,kBAAmB,kBACnB,mBAAoB,mBACpB,mBAAoB,gBACpB,mBAAoB,gBACpB,oBAAqB,aACrB,qBAAsB,cACtB,0BAA2B,kBAC7B,EACA,gBAAiB,CACf,eAAgB,gBAClB,EACA,aAAc,CACZ,WAAY,OACZ,iBAAkB,aAClB,OAAQ,CACN,QAAS,UACT,KAAM,OACN,MAAO,QACP,IAAK,MACL,OAAQ,SACR,OAAQ,SACR,MAAO,QACP,KAAM,OACN,OAAQ,SACR,KAAM,MAAA,CAEV,EAEA,mBAAoB,CAClB,KAAM,CACJ,QAAS,OACT,kBAAmB,OACrB,EACA,OAAQ,CACN,QAAS,SACT,kBAAmB,OACrB,EACA,UAAW,CACT,QAAS,YACT,kBAAmB,OACrB,EACA,OAAQ,CACN,QAAS,SACT,kBAAmB,aACrB,EACA,KAAM,CACJ,QAAS,OACT,kBAAmB,EACrB,EACA,OAAQ,CACN,QAAS,QACX,EACA,KAAM,CACJ,QAAS,cACT,kBAAmB,OACrB,EACA,aAAc,CACZ,QAAS,eACT,kBAAmB,cACrB,EACA,aAAc,CACZ,QAAS,CACP,MAAO,gBACP,MAAO,gBACP,MAAO,gBACP,KAAM,cAAA,CAEV,EACA,YAAa,CACX,QAAS,CACP,MAAO,eACP,MAAO,eACP,MAAO,eACP,KAAM,aACR,EACA,kBAAmB,CACjB,MAAO,eACP,MAAO,eACP,MAAO,eACP,KAAM,aAAA,CAEV,EACA,cAAe,CACb,QAAS,CACP,MAAO,iBACP,MAAO,iBACP,MAAO,iBACP,KAAM,eAAA,CAEV,EACA,YAAa,CACX,QAAS,CACP,MAAO,eACP,MAAO,eACP,MAAO,eACP,KAAM,aAAA,CAEV,EACA,oBAAqB,CACnB,QAAS,gBACX,EACA,KAAM,CACJ,QAAS,aACT,kBAAmB,KACrB,EACA,OAAQ,CACN,QAAS,eACT,kBAAmB,WACrB,EACA,WAAY,CACV,QAAS,iBACX,EACA,aAAc,CACZ,QAAS,mBACX,EACA,YAAa,CACX,QAAS,kBACX,EACA,cAAe,CACb,QAAS,cACX,EACA,iBAAkB,CAChB,QAAS,aACX,EACA,QAAS,CACP,QAAS,aAAA,CAEb,EACA,WAAY,CACV,OAAQ,CACN,MAAO,SACP,iBAAkB,CAChB,MAAO,eACP,MAAO,eACP,MAAO,eACP,KAAM,aACR,EACA,aAAc,sBAChB,EACA,MAAO,CACL,MAAO,QACP,aAAc,CACZ,MAAO,cACP,MAAO,cACP,MAAO,cACP,KAAM,YACR,EACA,gBAAiB,WAAA,CAErB,EACA,aAAc,CACZ,OAAQ,CACN,QAAS,aACX,EACA,KAAM,CACJ,KAAM,YACN,QAAS,MACX,EACA,KAAM,CACJ,QAAS,iBACX,EACA,KAAM,CACJ,kBAAmB,aACnB,gBAAiB,UAAA,CAErB,EACA,SAAU,CACR,OAAQ,SACR,iBAAkB,OAClB,mBAAoB,SACpB,QAAS,CACP,aAAc,eACd,QAAS,UACT,aAAc,eACd,eAAgB,iBAChB,aAAc,cAChB,EACA,UAAW,CACT,WAAY,YACd,EACA,QAAS,CACP,mBAAoB,qBACpB,aAAeC,GAAkB,GAAGA,CAAK,eAAA,CAE7C,EACA,QAAS,CACP,cAAe,MAAA,CAEnB"}
1
+ {"version":3,"file":"en-Cl87Uuyf.cjs","sources":["../src/i18n/locales/en.ts"],"sourcesContent":["export const en = {\n slash_menu: {\n heading: {\n title: \"Heading 1\",\n subtext: \"Top-level heading\",\n aliases: [\"h\", \"heading1\", \"h1\"],\n group: \"Headings\",\n },\n heading_2: {\n title: \"Heading 2\",\n subtext: \"Key section heading\",\n aliases: [\"h2\", \"heading2\", \"subheading\"],\n group: \"Headings\",\n },\n heading_3: {\n title: \"Heading 3\",\n subtext: \"Subsection and group heading\",\n aliases: [\"h3\", \"heading3\", \"subheading\"],\n group: \"Headings\",\n },\n heading_4: {\n title: \"Heading 4\",\n subtext: \"Minor subsection heading\",\n aliases: [\"h4\", \"heading4\", \"subheading4\"],\n group: \"Subheadings\",\n },\n heading_5: {\n title: \"Heading 5\",\n subtext: \"Small subsection heading\",\n aliases: [\"h5\", \"heading5\", \"subheading5\"],\n group: \"Subheadings\",\n },\n heading_6: {\n title: \"Heading 6\",\n subtext: \"Lowest-level heading\",\n aliases: [\"h6\", \"heading6\", \"subheading6\"],\n group: \"Subheadings\",\n },\n toggle_heading: {\n title: \"Toggle Heading 1\",\n subtext: \"Toggleable top-level heading\",\n aliases: [\"h\", \"heading1\", \"h1\", \"collapsable\"],\n group: \"Subheadings\",\n },\n toggle_heading_2: {\n title: \"Toggle Heading 2\",\n subtext: \"Toggleable key section heading\",\n aliases: [\"h2\", \"heading2\", \"subheading\", \"collapsable\"],\n group: \"Subheadings\",\n },\n toggle_heading_3: {\n title: \"Toggle Heading 3\",\n subtext: \"Toggleable subsection and group heading\",\n aliases: [\"h3\", \"heading3\", \"subheading\", \"collapsable\"],\n group: \"Subheadings\",\n },\n quote: {\n title: \"Quote\",\n subtext: \"Quote or excerpt\",\n aliases: [\"quotation\", \"blockquote\", \"bq\"],\n group: \"Basic blocks\",\n },\n toggle_list: {\n title: \"Toggle List\",\n subtext: \"List with hideable sub-items\",\n aliases: [\"li\", \"list\", \"toggleList\", \"toggle list\", \"collapsable list\"],\n group: \"Basic blocks\",\n },\n numbered_list: {\n title: \"Numbered List\",\n subtext: \"List with ordered items\",\n aliases: [\"ol\", \"li\", \"list\", \"numberedlist\", \"numbered list\"],\n group: \"Basic blocks\",\n },\n bullet_list: {\n title: \"Bullet List\",\n subtext: \"List with unordered items\",\n aliases: [\"ul\", \"li\", \"list\", \"bulletlist\", \"bullet list\"],\n group: \"Basic blocks\",\n },\n check_list: {\n title: \"Check List\",\n subtext: \"List with checkboxes\",\n aliases: [\n \"ul\",\n \"li\",\n \"list\",\n \"checklist\",\n \"check list\",\n \"checked list\",\n \"checkbox\",\n ],\n group: \"Basic blocks\",\n },\n paragraph: {\n title: \"Paragraph\",\n subtext: \"The body of your document\",\n aliases: [\"p\", \"paragraph\"],\n group: \"Basic blocks\",\n },\n code_block: {\n title: \"Code Block\",\n subtext: \"Code block with syntax highlighting\",\n aliases: [\"code\", \"pre\"],\n group: \"Basic blocks\",\n },\n page_break: {\n title: \"Page Break\",\n subtext: \"Page separator\",\n aliases: [\"page\", \"break\", \"separator\"],\n group: \"Basic blocks\",\n },\n table: {\n title: \"Table\",\n subtext: \"Table with editable cells\",\n aliases: [\"table\"],\n group: \"Advanced\",\n },\n image: {\n title: \"Image\",\n subtext: \"Resizable image with caption\",\n aliases: [\n \"image\",\n \"imageUpload\",\n \"upload\",\n \"img\",\n \"picture\",\n \"media\",\n \"url\",\n ],\n group: \"Media\",\n },\n video: {\n title: \"Video\",\n subtext: \"Resizable video with caption\",\n aliases: [\n \"video\",\n \"videoUpload\",\n \"upload\",\n \"mp4\",\n \"film\",\n \"media\",\n \"url\",\n ],\n group: \"Media\",\n },\n audio: {\n title: \"Audio\",\n subtext: \"Embedded audio with caption\",\n aliases: [\n \"audio\",\n \"audioUpload\",\n \"upload\",\n \"mp3\",\n \"sound\",\n \"media\",\n \"url\",\n ],\n group: \"Media\",\n },\n file: {\n title: \"File\",\n subtext: \"Embedded file\",\n aliases: [\"file\", \"upload\", \"embed\", \"media\", \"url\"],\n group: \"Media\",\n },\n emoji: {\n title: \"Emoji\",\n subtext: \"Search for and insert an emoji\",\n aliases: [\"emoji\", \"emote\", \"emotion\", \"face\"],\n group: \"Others\",\n },\n divider: {\n title: \"Divider\",\n subtext: \"Visually divide blocks\",\n aliases: [\"divider\", \"hr\", \"line\", \"horizontal rule\"],\n group: \"Basic blocks\",\n },\n },\n placeholders: {\n default: \"Enter text or type '/' for commands\",\n heading: \"Heading\",\n toggleListItem: \"Toggle\",\n bulletListItem: \"List\",\n numberedListItem: \"List\",\n checkListItem: \"List\",\n emptyDocument: undefined,\n new_comment: \"Write a comment...\",\n edit_comment: \"Edit comment...\",\n comment_reply: \"Add comment...\",\n } as Record<string | \"default\" | \"emptyDocument\", string | undefined>,\n file_blocks: {\n add_button_text: {\n image: \"Add image\",\n video: \"Add video\",\n audio: \"Add audio\",\n file: \"Add file\",\n } as Record<string, string>,\n },\n toggle_blocks: {\n add_block_button: \"Empty toggle. Click to add a block.\",\n },\n // from react package:\n side_menu: {\n add_block_label: \"Add block\",\n drag_handle_label: \"Open block menu\",\n },\n drag_handle: {\n delete_menuitem: \"Delete\",\n colors_menuitem: \"Colors\",\n header_row_menuitem: \"Header row\",\n header_column_menuitem: \"Header column\",\n },\n table_handle: {\n delete_column_menuitem: \"Delete column\",\n delete_row_menuitem: \"Delete row\",\n add_left_menuitem: \"Add column left\",\n add_right_menuitem: \"Add column right\",\n add_above_menuitem: \"Add row above\",\n add_below_menuitem: \"Add row below\",\n split_cell_menuitem: \"Split cell\",\n merge_cells_menuitem: \"Merge cells\",\n background_color_menuitem: \"Background color\",\n },\n suggestion_menu: {\n no_items_title: \"No items found\",\n },\n color_picker: {\n text_title: \"Text\",\n background_title: \"Background\",\n colors: {\n default: \"Default\",\n gray: \"Gray\",\n brown: \"Brown\",\n red: \"Red\",\n orange: \"Orange\",\n yellow: \"Yellow\",\n green: \"Green\",\n blue: \"Blue\",\n purple: \"Purple\",\n pink: \"Pink\",\n },\n },\n\n formatting_toolbar: {\n bold: {\n tooltip: \"Bold\",\n secondary_tooltip: \"Mod+B\",\n },\n italic: {\n tooltip: \"Italic\",\n secondary_tooltip: \"Mod+I\",\n },\n underline: {\n tooltip: \"Underline\",\n secondary_tooltip: \"Mod+U\",\n },\n strike: {\n tooltip: \"Strike\",\n secondary_tooltip: \"Mod+Shift+S\",\n },\n code: {\n tooltip: \"Code\",\n secondary_tooltip: \"\",\n },\n colors: {\n tooltip: \"Colors\",\n },\n link: {\n tooltip: \"Create link\",\n secondary_tooltip: \"Mod+K\",\n },\n file_caption: {\n tooltip: \"Edit caption\",\n input_placeholder: \"Edit caption\",\n },\n file_replace: {\n tooltip: {\n image: \"Replace image\",\n video: \"Replace video\",\n audio: \"Replace audio\",\n file: \"Replace file\",\n } as Record<string, string>,\n },\n file_rename: {\n tooltip: {\n image: \"Rename image\",\n video: \"Rename video\",\n audio: \"Rename audio\",\n file: \"Rename file\",\n } as Record<string, string>,\n input_placeholder: {\n image: \"Rename image\",\n video: \"Rename video\",\n audio: \"Rename audio\",\n file: \"Rename file\",\n } as Record<string, string>,\n },\n file_download: {\n tooltip: {\n image: \"Download image\",\n video: \"Download video\",\n audio: \"Download audio\",\n file: \"Download file\",\n } as Record<string, string>,\n },\n file_delete: {\n tooltip: {\n image: \"Delete image\",\n video: \"Delete video\",\n audio: \"Delete audio\",\n file: \"Delete file\",\n } as Record<string, string>,\n },\n file_preview_toggle: {\n tooltip: \"Toggle preview\",\n },\n nest: {\n tooltip: \"Nest block\",\n secondary_tooltip: \"Tab\",\n },\n unnest: {\n tooltip: \"Unnest block\",\n secondary_tooltip: \"Shift+Tab\",\n },\n align_left: {\n tooltip: \"Align text left\",\n },\n align_center: {\n tooltip: \"Align text center\",\n },\n align_right: {\n tooltip: \"Align text right\",\n },\n align_justify: {\n tooltip: \"Justify text\",\n },\n table_cell_merge: {\n tooltip: \"Merge cells\",\n },\n comment: {\n tooltip: \"Add comment\",\n },\n },\n file_panel: {\n upload: {\n title: \"Upload\",\n file_placeholder: {\n image: \"Upload image\",\n video: \"Upload video\",\n audio: \"Upload audio\",\n file: \"Upload file\",\n } as Record<string, string>,\n upload_error: \"Error: Upload failed\",\n },\n embed: {\n title: \"Embed\",\n embed_button: {\n image: \"Embed image\",\n video: \"Embed video\",\n audio: \"Embed audio\",\n file: \"Embed file\",\n } as Record<string, string>,\n url_placeholder: \"Enter URL\",\n },\n },\n link_toolbar: {\n delete: {\n tooltip: \"Remove link\",\n },\n edit: {\n text: \"Edit link\",\n tooltip: \"Edit\",\n },\n open: {\n tooltip: \"Open in new tab\",\n },\n form: {\n title_placeholder: \"Edit title\",\n url_placeholder: \"Edit URL\",\n },\n },\n comments: {\n edited: \"edited\",\n save_button_text: \"Save\",\n cancel_button_text: \"Cancel\",\n actions: {\n add_reaction: \"Add reaction\",\n resolve: \"Resolve\",\n edit_comment: \"Edit comment\",\n delete_comment: \"Delete comment\",\n more_actions: \"More actions\",\n },\n reactions: {\n reacted_by: \"Reacted by\",\n },\n sidebar: {\n marked_as_resolved: \"Marked as resolved\",\n more_replies: (count: number) => `${count} more replies`,\n },\n },\n generic: {\n ctrl_shortcut: \"Ctrl\",\n },\n};\n"],"names":["en","count"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"en-njEqD7AG.js","sources":["../src/i18n/locales/en.ts"],"sourcesContent":["export const en = {\n slash_menu: {\n heading: {\n title: \"Heading 1\",\n subtext: \"Top-level heading\",\n aliases: [\"h\", \"heading1\", \"h1\"],\n group: \"Headings\",\n },\n heading_2: {\n title: \"Heading 2\",\n subtext: \"Key section heading\",\n aliases: [\"h2\", \"heading2\", \"subheading\"],\n group: \"Headings\",\n },\n heading_3: {\n title: \"Heading 3\",\n subtext: \"Subsection and group heading\",\n aliases: [\"h3\", \"heading3\", \"subheading\"],\n group: \"Headings\",\n },\n heading_4: {\n title: \"Heading 4\",\n subtext: \"Minor subsection heading\",\n aliases: [\"h4\", \"heading4\", \"subheading4\"],\n group: \"Subheadings\",\n },\n heading_5: {\n title: \"Heading 5\",\n subtext: \"Small subsection heading\",\n aliases: [\"h5\", \"heading5\", \"subheading5\"],\n group: \"Subheadings\",\n },\n heading_6: {\n title: \"Heading 6\",\n subtext: \"Lowest-level heading\",\n aliases: [\"h6\", \"heading6\", \"subheading6\"],\n group: \"Subheadings\",\n },\n toggle_heading: {\n title: \"Toggle Heading 1\",\n subtext: \"Toggleable top-level heading\",\n aliases: [\"h\", \"heading1\", \"h1\", \"collapsable\"],\n group: \"Subheadings\",\n },\n toggle_heading_2: {\n title: \"Toggle Heading 2\",\n subtext: \"Toggleable key section heading\",\n aliases: [\"h2\", \"heading2\", \"subheading\", \"collapsable\"],\n group: \"Subheadings\",\n },\n toggle_heading_3: {\n title: \"Toggle Heading 3\",\n subtext: \"Toggleable subsection and group heading\",\n aliases: [\"h3\", \"heading3\", \"subheading\", \"collapsable\"],\n group: \"Subheadings\",\n },\n quote: {\n title: \"Quote\",\n subtext: \"Quote or excerpt\",\n aliases: [\"quotation\", \"blockquote\", \"bq\"],\n group: \"Basic blocks\",\n },\n toggle_list: {\n title: \"Toggle List\",\n subtext: \"List with hideable sub-items\",\n aliases: [\"li\", \"list\", \"toggleList\", \"toggle list\", \"collapsable list\"],\n group: \"Basic blocks\",\n },\n numbered_list: {\n title: \"Numbered List\",\n subtext: \"List with ordered items\",\n aliases: [\"ol\", \"li\", \"list\", \"numberedlist\", \"numbered list\"],\n group: \"Basic blocks\",\n },\n bullet_list: {\n title: \"Bullet List\",\n subtext: \"List with unordered items\",\n aliases: [\"ul\", \"li\", \"list\", \"bulletlist\", \"bullet list\"],\n group: \"Basic blocks\",\n },\n check_list: {\n title: \"Check List\",\n subtext: \"List with checkboxes\",\n aliases: [\n \"ul\",\n \"li\",\n \"list\",\n \"checklist\",\n \"check list\",\n \"checked list\",\n \"checkbox\",\n ],\n group: \"Basic blocks\",\n },\n paragraph: {\n title: \"Paragraph\",\n subtext: \"The body of your document\",\n aliases: [\"p\", \"paragraph\"],\n group: \"Basic blocks\",\n },\n code_block: {\n title: \"Code Block\",\n subtext: \"Code block with syntax highlighting\",\n aliases: [\"code\", \"pre\"],\n group: \"Basic blocks\",\n },\n page_break: {\n title: \"Page Break\",\n subtext: \"Page separator\",\n aliases: [\"page\", \"break\", \"separator\"],\n group: \"Basic blocks\",\n },\n table: {\n title: \"Table\",\n subtext: \"Table with editable cells\",\n aliases: [\"table\"],\n group: \"Advanced\",\n },\n image: {\n title: \"Image\",\n subtext: \"Resizable image with caption\",\n aliases: [\n \"image\",\n \"imageUpload\",\n \"upload\",\n \"img\",\n \"picture\",\n \"media\",\n \"url\",\n ],\n group: \"Media\",\n },\n video: {\n title: \"Video\",\n subtext: \"Resizable video with caption\",\n aliases: [\n \"video\",\n \"videoUpload\",\n \"upload\",\n \"mp4\",\n \"film\",\n \"media\",\n \"url\",\n ],\n group: \"Media\",\n },\n audio: {\n title: \"Audio\",\n subtext: \"Embedded audio with caption\",\n aliases: [\n \"audio\",\n \"audioUpload\",\n \"upload\",\n \"mp3\",\n \"sound\",\n \"media\",\n \"url\",\n ],\n group: \"Media\",\n },\n file: {\n title: \"File\",\n subtext: \"Embedded file\",\n aliases: [\"file\", \"upload\", \"embed\", \"media\", \"url\"],\n group: \"Media\",\n },\n emoji: {\n title: \"Emoji\",\n subtext: \"Search for and insert an emoji\",\n aliases: [\"emoji\", \"emote\", \"emotion\", \"face\"],\n group: \"Others\",\n },\n divider: {\n title: \"Divider\",\n subtext: \"Visually divide blocks\",\n aliases: [\"divider\", \"hr\", \"line\", \"horizontal rule\"],\n group: \"Basic blocks\",\n },\n },\n placeholders: {\n default: \"Enter text or type '/' for commands\",\n heading: \"Heading\",\n toggleListItem: \"Toggle\",\n bulletListItem: \"List\",\n numberedListItem: \"List\",\n checkListItem: \"List\",\n emptyDocument: undefined,\n new_comment: \"Write a comment...\",\n edit_comment: \"Edit comment...\",\n comment_reply: \"Add comment...\",\n } as Record<string | \"default\" | \"emptyDocument\", string | undefined>,\n file_blocks: {\n add_button_text: {\n image: \"Add image\",\n video: \"Add video\",\n audio: \"Add audio\",\n file: \"Add file\",\n } as Record<string, string>,\n },\n toggle_blocks: {\n add_block_button: \"Empty toggle. Click to add a block.\",\n },\n // from react package:\n side_menu: {\n add_block_label: \"Add block\",\n drag_handle_label: \"Open block menu\",\n },\n drag_handle: {\n delete_menuitem: \"Delete\",\n colors_menuitem: \"Colors\",\n header_row_menuitem: \"Header row\",\n header_column_menuitem: \"Header column\",\n },\n table_handle: {\n delete_column_menuitem: \"Delete column\",\n delete_row_menuitem: \"Delete row\",\n add_left_menuitem: \"Add column left\",\n add_right_menuitem: \"Add column right\",\n add_above_menuitem: \"Add row above\",\n add_below_menuitem: \"Add row below\",\n split_cell_menuitem: \"Split cell\",\n merge_cells_menuitem: \"Merge cells\",\n background_color_menuitem: \"Background color\",\n },\n suggestion_menu: {\n no_items_title: \"No items found\",\n },\n color_picker: {\n text_title: \"Text\",\n background_title: \"Background\",\n colors: {\n default: \"Default\",\n gray: \"Gray\",\n brown: \"Brown\",\n red: \"Red\",\n orange: \"Orange\",\n yellow: \"Yellow\",\n green: \"Green\",\n blue: \"Blue\",\n purple: \"Purple\",\n pink: \"Pink\",\n },\n },\n\n formatting_toolbar: {\n bold: {\n tooltip: \"Bold\",\n secondary_tooltip: \"Mod+B\",\n },\n italic: {\n tooltip: \"Italic\",\n secondary_tooltip: \"Mod+I\",\n },\n underline: {\n tooltip: \"Underline\",\n secondary_tooltip: \"Mod+U\",\n },\n strike: {\n tooltip: \"Strike\",\n secondary_tooltip: \"Mod+Shift+S\",\n },\n code: {\n tooltip: \"Code\",\n secondary_tooltip: \"\",\n },\n colors: {\n tooltip: \"Colors\",\n },\n link: {\n tooltip: \"Create link\",\n secondary_tooltip: \"Mod+K\",\n },\n file_caption: {\n tooltip: \"Edit caption\",\n input_placeholder: \"Edit caption\",\n },\n file_replace: {\n tooltip: {\n image: \"Replace image\",\n video: \"Replace video\",\n audio: \"Replace audio\",\n file: \"Replace file\",\n } as Record<string, string>,\n },\n file_rename: {\n tooltip: {\n image: \"Rename image\",\n video: \"Rename video\",\n audio: \"Rename audio\",\n file: \"Rename file\",\n } as Record<string, string>,\n input_placeholder: {\n image: \"Rename image\",\n video: \"Rename video\",\n audio: \"Rename audio\",\n file: \"Rename file\",\n } as Record<string, string>,\n },\n file_download: {\n tooltip: {\n image: \"Download image\",\n video: \"Download video\",\n audio: \"Download audio\",\n file: \"Download file\",\n } as Record<string, string>,\n },\n file_delete: {\n tooltip: {\n image: \"Delete image\",\n video: \"Delete video\",\n audio: \"Delete audio\",\n file: \"Delete file\",\n } as Record<string, string>,\n },\n file_preview_toggle: {\n tooltip: \"Toggle preview\",\n },\n nest: {\n tooltip: \"Nest block\",\n secondary_tooltip: \"Tab\",\n },\n unnest: {\n tooltip: \"Unnest block\",\n secondary_tooltip: \"Shift+Tab\",\n },\n align_left: {\n tooltip: \"Align text left\",\n },\n align_center: {\n tooltip: \"Align text center\",\n },\n align_right: {\n tooltip: \"Align text right\",\n },\n align_justify: {\n tooltip: \"Justify text\",\n },\n table_cell_merge: {\n tooltip: \"Merge cells\",\n },\n comment: {\n tooltip: \"Add comment\",\n },\n },\n file_panel: {\n upload: {\n title: \"Upload\",\n file_placeholder: {\n image: \"Upload image\",\n video: \"Upload video\",\n audio: \"Upload audio\",\n file: \"Upload file\",\n } as Record<string, string>,\n upload_error: \"Error: Upload failed\",\n },\n embed: {\n title: \"Embed\",\n embed_button: {\n image: \"Embed image\",\n video: \"Embed video\",\n audio: \"Embed audio\",\n file: \"Embed file\",\n } as Record<string, string>,\n url_placeholder: \"Enter URL\",\n },\n },\n link_toolbar: {\n delete: {\n tooltip: \"Remove link\",\n },\n edit: {\n text: \"Edit link\",\n tooltip: \"Edit\",\n },\n open: {\n tooltip: \"Open in new tab\",\n },\n form: {\n title_placeholder: \"Edit title\",\n url_placeholder: \"Edit URL\",\n },\n },\n comments: {\n edited: \"edited\",\n save_button_text: \"Save\",\n cancel_button_text: \"Cancel\",\n actions: {\n add_reaction: \"Add reaction\",\n resolve: \"Resolve\",\n edit_comment: \"Edit comment\",\n delete_comment: \"Delete comment\",\n more_actions: \"More actions\",\n },\n reactions: {\n reacted_by: \"Reacted by\",\n },\n sidebar: {\n marked_as_resolved: \"Marked as resolved\",\n more_replies: (count: number) => `${count} more replies`,\n },\n },\n generic: {\n ctrl_shortcut: \"Ctrl\",\n },\n};\n"],"names":["en","count"],"mappings":"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"}
1
+ {"version":3,"file":"en-njEqD7AG.js","sources":["../src/i18n/locales/en.ts"],"sourcesContent":["export const en = {\n slash_menu: {\n heading: {\n title: \"Heading 1\",\n subtext: \"Top-level heading\",\n aliases: [\"h\", \"heading1\", \"h1\"],\n group: \"Headings\",\n },\n heading_2: {\n title: \"Heading 2\",\n subtext: \"Key section heading\",\n aliases: [\"h2\", \"heading2\", \"subheading\"],\n group: \"Headings\",\n },\n heading_3: {\n title: \"Heading 3\",\n subtext: \"Subsection and group heading\",\n aliases: [\"h3\", \"heading3\", \"subheading\"],\n group: \"Headings\",\n },\n heading_4: {\n title: \"Heading 4\",\n subtext: \"Minor subsection heading\",\n aliases: [\"h4\", \"heading4\", \"subheading4\"],\n group: \"Subheadings\",\n },\n heading_5: {\n title: \"Heading 5\",\n subtext: \"Small subsection heading\",\n aliases: [\"h5\", \"heading5\", \"subheading5\"],\n group: \"Subheadings\",\n },\n heading_6: {\n title: \"Heading 6\",\n subtext: \"Lowest-level heading\",\n aliases: [\"h6\", \"heading6\", \"subheading6\"],\n group: \"Subheadings\",\n },\n toggle_heading: {\n title: \"Toggle Heading 1\",\n subtext: \"Toggleable top-level heading\",\n aliases: [\"h\", \"heading1\", \"h1\", \"collapsable\"],\n group: \"Subheadings\",\n },\n toggle_heading_2: {\n title: \"Toggle Heading 2\",\n subtext: \"Toggleable key section heading\",\n aliases: [\"h2\", \"heading2\", \"subheading\", \"collapsable\"],\n group: \"Subheadings\",\n },\n toggle_heading_3: {\n title: \"Toggle Heading 3\",\n subtext: \"Toggleable subsection and group heading\",\n aliases: [\"h3\", \"heading3\", \"subheading\", \"collapsable\"],\n group: \"Subheadings\",\n },\n quote: {\n title: \"Quote\",\n subtext: \"Quote or excerpt\",\n aliases: [\"quotation\", \"blockquote\", \"bq\"],\n group: \"Basic blocks\",\n },\n toggle_list: {\n title: \"Toggle List\",\n subtext: \"List with hideable sub-items\",\n aliases: [\"li\", \"list\", \"toggleList\", \"toggle list\", \"collapsable list\"],\n group: \"Basic blocks\",\n },\n numbered_list: {\n title: \"Numbered List\",\n subtext: \"List with ordered items\",\n aliases: [\"ol\", \"li\", \"list\", \"numberedlist\", \"numbered list\"],\n group: \"Basic blocks\",\n },\n bullet_list: {\n title: \"Bullet List\",\n subtext: \"List with unordered items\",\n aliases: [\"ul\", \"li\", \"list\", \"bulletlist\", \"bullet list\"],\n group: \"Basic blocks\",\n },\n check_list: {\n title: \"Check List\",\n subtext: \"List with checkboxes\",\n aliases: [\n \"ul\",\n \"li\",\n \"list\",\n \"checklist\",\n \"check list\",\n \"checked list\",\n \"checkbox\",\n ],\n group: \"Basic blocks\",\n },\n paragraph: {\n title: \"Paragraph\",\n subtext: \"The body of your document\",\n aliases: [\"p\", \"paragraph\"],\n group: \"Basic blocks\",\n },\n code_block: {\n title: \"Code Block\",\n subtext: \"Code block with syntax highlighting\",\n aliases: [\"code\", \"pre\"],\n group: \"Basic blocks\",\n },\n page_break: {\n title: \"Page Break\",\n subtext: \"Page separator\",\n aliases: [\"page\", \"break\", \"separator\"],\n group: \"Basic blocks\",\n },\n table: {\n title: \"Table\",\n subtext: \"Table with editable cells\",\n aliases: [\"table\"],\n group: \"Advanced\",\n },\n image: {\n title: \"Image\",\n subtext: \"Resizable image with caption\",\n aliases: [\n \"image\",\n \"imageUpload\",\n \"upload\",\n \"img\",\n \"picture\",\n \"media\",\n \"url\",\n ],\n group: \"Media\",\n },\n video: {\n title: \"Video\",\n subtext: \"Resizable video with caption\",\n aliases: [\n \"video\",\n \"videoUpload\",\n \"upload\",\n \"mp4\",\n \"film\",\n \"media\",\n \"url\",\n ],\n group: \"Media\",\n },\n audio: {\n title: \"Audio\",\n subtext: \"Embedded audio with caption\",\n aliases: [\n \"audio\",\n \"audioUpload\",\n \"upload\",\n \"mp3\",\n \"sound\",\n \"media\",\n \"url\",\n ],\n group: \"Media\",\n },\n file: {\n title: \"File\",\n subtext: \"Embedded file\",\n aliases: [\"file\", \"upload\", \"embed\", \"media\", \"url\"],\n group: \"Media\",\n },\n emoji: {\n title: \"Emoji\",\n subtext: \"Search for and insert an emoji\",\n aliases: [\"emoji\", \"emote\", \"emotion\", \"face\"],\n group: \"Others\",\n },\n divider: {\n title: \"Divider\",\n subtext: \"Visually divide blocks\",\n aliases: [\"divider\", \"hr\", \"line\", \"horizontal rule\"],\n group: \"Basic blocks\",\n },\n },\n placeholders: {\n default: \"Enter text or type '/' for commands\",\n heading: \"Heading\",\n toggleListItem: \"Toggle\",\n bulletListItem: \"List\",\n numberedListItem: \"List\",\n checkListItem: \"List\",\n emptyDocument: undefined,\n new_comment: \"Write a comment...\",\n edit_comment: \"Edit comment...\",\n comment_reply: \"Add comment...\",\n } as Record<string | \"default\" | \"emptyDocument\", string | undefined>,\n file_blocks: {\n add_button_text: {\n image: \"Add image\",\n video: \"Add video\",\n audio: \"Add audio\",\n file: \"Add file\",\n } as Record<string, string>,\n },\n toggle_blocks: {\n add_block_button: \"Empty toggle. Click to add a block.\",\n },\n // from react package:\n side_menu: {\n add_block_label: \"Add block\",\n drag_handle_label: \"Open block menu\",\n },\n drag_handle: {\n delete_menuitem: \"Delete\",\n colors_menuitem: \"Colors\",\n header_row_menuitem: \"Header row\",\n header_column_menuitem: \"Header column\",\n },\n table_handle: {\n delete_column_menuitem: \"Delete column\",\n delete_row_menuitem: \"Delete row\",\n add_left_menuitem: \"Add column left\",\n add_right_menuitem: \"Add column right\",\n add_above_menuitem: \"Add row above\",\n add_below_menuitem: \"Add row below\",\n split_cell_menuitem: \"Split cell\",\n merge_cells_menuitem: \"Merge cells\",\n background_color_menuitem: \"Background color\",\n },\n suggestion_menu: {\n no_items_title: \"No items found\",\n },\n color_picker: {\n text_title: \"Text\",\n background_title: \"Background\",\n colors: {\n default: \"Default\",\n gray: \"Gray\",\n brown: \"Brown\",\n red: \"Red\",\n orange: \"Orange\",\n yellow: \"Yellow\",\n green: \"Green\",\n blue: \"Blue\",\n purple: \"Purple\",\n pink: \"Pink\",\n },\n },\n\n formatting_toolbar: {\n bold: {\n tooltip: \"Bold\",\n secondary_tooltip: \"Mod+B\",\n },\n italic: {\n tooltip: \"Italic\",\n secondary_tooltip: \"Mod+I\",\n },\n underline: {\n tooltip: \"Underline\",\n secondary_tooltip: \"Mod+U\",\n },\n strike: {\n tooltip: \"Strike\",\n secondary_tooltip: \"Mod+Shift+S\",\n },\n code: {\n tooltip: \"Code\",\n secondary_tooltip: \"\",\n },\n colors: {\n tooltip: \"Colors\",\n },\n link: {\n tooltip: \"Create link\",\n secondary_tooltip: \"Mod+K\",\n },\n file_caption: {\n tooltip: \"Edit caption\",\n input_placeholder: \"Edit caption\",\n },\n file_replace: {\n tooltip: {\n image: \"Replace image\",\n video: \"Replace video\",\n audio: \"Replace audio\",\n file: \"Replace file\",\n } as Record<string, string>,\n },\n file_rename: {\n tooltip: {\n image: \"Rename image\",\n video: \"Rename video\",\n audio: \"Rename audio\",\n file: \"Rename file\",\n } as Record<string, string>,\n input_placeholder: {\n image: \"Rename image\",\n video: \"Rename video\",\n audio: \"Rename audio\",\n file: \"Rename file\",\n } as Record<string, string>,\n },\n file_download: {\n tooltip: {\n image: \"Download image\",\n video: \"Download video\",\n audio: \"Download audio\",\n file: \"Download file\",\n } as Record<string, string>,\n },\n file_delete: {\n tooltip: {\n image: \"Delete image\",\n video: \"Delete video\",\n audio: \"Delete audio\",\n file: \"Delete file\",\n } as Record<string, string>,\n },\n file_preview_toggle: {\n tooltip: \"Toggle preview\",\n },\n nest: {\n tooltip: \"Nest block\",\n secondary_tooltip: \"Tab\",\n },\n unnest: {\n tooltip: \"Unnest block\",\n secondary_tooltip: \"Shift+Tab\",\n },\n align_left: {\n tooltip: \"Align text left\",\n },\n align_center: {\n tooltip: \"Align text center\",\n },\n align_right: {\n tooltip: \"Align text right\",\n },\n align_justify: {\n tooltip: \"Justify text\",\n },\n table_cell_merge: {\n tooltip: \"Merge cells\",\n },\n comment: {\n tooltip: \"Add comment\",\n },\n },\n file_panel: {\n upload: {\n title: \"Upload\",\n file_placeholder: {\n image: \"Upload image\",\n video: \"Upload video\",\n audio: \"Upload audio\",\n file: \"Upload file\",\n } as Record<string, string>,\n upload_error: \"Error: Upload failed\",\n },\n embed: {\n title: \"Embed\",\n embed_button: {\n image: \"Embed image\",\n video: \"Embed video\",\n audio: \"Embed audio\",\n file: \"Embed file\",\n } as Record<string, string>,\n url_placeholder: \"Enter URL\",\n },\n },\n link_toolbar: {\n delete: {\n tooltip: \"Remove link\",\n },\n edit: {\n text: \"Edit link\",\n tooltip: \"Edit\",\n },\n open: {\n tooltip: \"Open in new tab\",\n },\n form: {\n title_placeholder: \"Edit title\",\n url_placeholder: \"Edit URL\",\n },\n },\n comments: {\n edited: \"edited\",\n save_button_text: \"Save\",\n cancel_button_text: \"Cancel\",\n actions: {\n add_reaction: \"Add reaction\",\n resolve: \"Resolve\",\n edit_comment: \"Edit comment\",\n delete_comment: \"Delete comment\",\n more_actions: \"More actions\",\n },\n reactions: {\n reacted_by: \"Reacted by\",\n },\n sidebar: {\n marked_as_resolved: \"Marked as resolved\",\n more_replies: (count: number) => `${count} more replies`,\n },\n },\n generic: {\n ctrl_shortcut: \"Ctrl\",\n },\n};\n"],"names":["en","count"],"mappings":"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"}