@blade-hq/agent-react 2612.0.0-beta.2 → 2612.0.0-beta.20

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 (1163) hide show
  1. package/README.md +22 -0
  2. package/dist/chat/ChatLoadingIndicator.d.ts +7 -0
  3. package/dist/chat/ChatPanel.d.ts +1 -3
  4. package/dist/chat/ContextAttachmentPills.d.ts +4 -0
  5. package/dist/chat/LightComposer.d.ts +1 -1
  6. package/dist/chat/LiteMessageList.d.ts +1 -1
  7. package/dist/chat/MessageList.d.ts +1 -0
  8. package/dist/chat/WorkflowRunBlock.d.ts +19 -3
  9. package/dist/chat/ai-elements/reasoning.d.ts +4 -4
  10. package/dist/chat/customization.d.ts +1 -5
  11. package/dist/chat/index.d.ts +1 -4
  12. package/dist/chat/lib/citations.d.ts +5 -22
  13. package/dist/chat/markdown/MarkdownContent.d.ts +3 -0
  14. package/dist/chat/runtime/actions.d.ts +3 -1
  15. package/dist/chat/runtime/composer-channels.d.ts +4 -0
  16. package/dist/chat/runtime/input-cache-reset.d.ts +1 -1
  17. package/dist/chat/runtime/input-history-storage.d.ts +2 -0
  18. package/dist/chat/runtime/input-services.d.ts +0 -6
  19. package/dist/{chunk-FQQJP2GJ.js → chunk-C4FUFBG4.js} +781 -819
  20. package/dist/chunk-C4FUFBG4.js.map +1 -0
  21. package/dist/{chunk-6ZDOQEWK.js → chunk-KSVVYASW.js} +1706 -1358
  22. package/dist/chunk-KSVVYASW.js.map +1 -0
  23. package/dist/{chunk-WCMGQJLE.js → chunk-TY7DRU2R.js} +2 -2
  24. package/dist/components/ChatInput.d.ts +3 -1
  25. package/dist/components/TopicAssetSubmitDialog.d.ts +14 -0
  26. package/dist/components/plugin-connector.d.ts +1 -0
  27. package/dist/embed/entry.d.ts +5 -3
  28. package/dist/host.d.ts +0 -4
  29. package/dist/index.d.ts +2 -0
  30. package/dist/index.js +8 -4
  31. package/dist/internal.d.ts +4 -2
  32. package/dist/internal.js +13 -48
  33. package/dist/internal.js.map +1 -1
  34. package/dist/rich-input/ChatInput.d.ts +1 -1
  35. package/dist/rich-input/FileCompletionMenu.d.ts +6 -9
  36. package/dist/rich-input/SkillStatusBar.d.ts +2 -4
  37. package/dist/rich-input/extensions/plugin-mention.d.ts +15 -0
  38. package/dist/rich-input/extensions/skill-mention.d.ts +3 -21
  39. package/dist/rich-input/extensions/topic-asset-mention.d.ts +13 -0
  40. package/dist/rich-input/index.d.ts +6 -3
  41. package/dist/rich-input/lib/composer-content.d.ts +15 -21
  42. package/dist/rich-input/lib/input-history-document.d.ts +3 -0
  43. package/dist/rich-input/lib/plugin-suggestions.d.ts +7 -0
  44. package/dist/rich-input/lib/reference-candidates.d.ts +27 -0
  45. package/dist/rich-input/lib/skill-suggestions.d.ts +1 -1
  46. package/dist/rich-input/lib/topic-asset-suggestions.d.ts +6 -0
  47. package/dist/rich-input/services.d.ts +2 -3
  48. package/dist/rich-input/use-input-history.d.ts +8 -8
  49. package/dist/rich-input/use-reference-candidates.d.ts +8 -0
  50. package/dist/rich-input.js +6434 -6358
  51. package/dist/rich-input.js.map +1 -1
  52. package/dist/style.full.css +1 -1
  53. package/node_modules/@floating-ui/core/LICENSE +20 -0
  54. package/node_modules/@floating-ui/core/README.md +4 -0
  55. package/node_modules/@floating-ui/core/dist/floating-ui.core.browser.min.mjs +1 -0
  56. package/node_modules/@floating-ui/core/dist/floating-ui.core.browser.mjs +1184 -0
  57. package/node_modules/@floating-ui/core/dist/floating-ui.core.d.mts +531 -0
  58. package/node_modules/@floating-ui/core/dist/floating-ui.core.d.ts +531 -0
  59. package/node_modules/@floating-ui/core/dist/floating-ui.core.esm.js +1058 -0
  60. package/node_modules/@floating-ui/core/dist/floating-ui.core.mjs +1058 -0
  61. package/node_modules/@floating-ui/core/dist/floating-ui.core.umd.js +1203 -0
  62. package/node_modules/@floating-ui/core/dist/floating-ui.core.umd.min.js +1 -0
  63. package/node_modules/@floating-ui/core/package.json +63 -0
  64. package/node_modules/@floating-ui/dom/LICENSE +20 -0
  65. package/node_modules/@floating-ui/dom/README.md +4 -0
  66. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.min.mjs +1 -0
  67. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.mjs +956 -0
  68. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts +358 -0
  69. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.ts +358 -0
  70. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js +781 -0
  71. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs +781 -0
  72. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.umd.js +975 -0
  73. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.umd.min.js +1 -0
  74. package/node_modules/@floating-ui/dom/package.json +71 -0
  75. package/node_modules/@floating-ui/utils/LICENSE +20 -0
  76. package/node_modules/@floating-ui/utils/README.md +4 -0
  77. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts +103 -0
  78. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.ts +103 -0
  79. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts +47 -0
  80. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.ts +47 -0
  81. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.esm.js +165 -0
  82. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs +165 -0
  83. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.umd.js +192 -0
  84. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.umd.min.js +1 -0
  85. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.esm.js +136 -0
  86. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs +136 -0
  87. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.umd.js +167 -0
  88. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.umd.min.js +1 -0
  89. package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.d.ts +47 -0
  90. package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.esm.js +165 -0
  91. package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.umd.js +192 -0
  92. package/node_modules/@floating-ui/utils/dom/package.json +6 -0
  93. package/node_modules/@floating-ui/utils/package.json +70 -0
  94. package/node_modules/@radix-ui/primitive/LICENSE +21 -0
  95. package/node_modules/@radix-ui/primitive/README.md +3 -0
  96. package/node_modules/@radix-ui/primitive/dist/index.d.mts +20 -0
  97. package/node_modules/@radix-ui/primitive/dist/index.d.ts +20 -0
  98. package/node_modules/@radix-ui/primitive/dist/index.js +76 -0
  99. package/node_modules/@radix-ui/primitive/dist/index.js.map +7 -0
  100. package/node_modules/@radix-ui/primitive/dist/index.mjs +53 -0
  101. package/node_modules/@radix-ui/primitive/dist/index.mjs.map +7 -0
  102. package/node_modules/@radix-ui/primitive/package.json +47 -0
  103. package/node_modules/@radix-ui/react-collapsible/LICENSE +21 -0
  104. package/node_modules/@radix-ui/react-collapsible/README.md +3 -0
  105. package/node_modules/@radix-ui/react-collapsible/dist/index.d.mts +33 -0
  106. package/node_modules/@radix-ui/react-collapsible/dist/index.d.ts +33 -0
  107. package/node_modules/@radix-ui/react-collapsible/dist/index.js +187 -0
  108. package/node_modules/@radix-ui/react-collapsible/dist/index.js.map +7 -0
  109. package/node_modules/@radix-ui/react-collapsible/dist/index.mjs +155 -0
  110. package/node_modules/@radix-ui/react-collapsible/dist/index.mjs.map +7 -0
  111. package/node_modules/@radix-ui/react-collapsible/package.json +75 -0
  112. package/node_modules/@radix-ui/react-compose-refs/README.md +13 -0
  113. package/node_modules/@radix-ui/react-compose-refs/dist/index.d.mts +15 -0
  114. package/node_modules/@radix-ui/react-compose-refs/dist/index.d.ts +15 -0
  115. package/node_modules/@radix-ui/react-compose-refs/dist/index.js +74 -0
  116. package/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +7 -0
  117. package/node_modules/@radix-ui/react-compose-refs/dist/index.mjs +41 -0
  118. package/node_modules/@radix-ui/react-compose-refs/dist/index.mjs.map +7 -0
  119. package/node_modules/@radix-ui/react-compose-refs/package.json +75 -0
  120. package/node_modules/@radix-ui/react-context/README.md +13 -0
  121. package/node_modules/@radix-ui/react-context/dist/index.d.mts +21 -0
  122. package/node_modules/@radix-ui/react-context/dist/index.d.ts +21 -0
  123. package/node_modules/@radix-ui/react-context/dist/index.js +114 -0
  124. package/node_modules/@radix-ui/react-context/dist/index.js.map +7 -0
  125. package/node_modules/@radix-ui/react-context/dist/index.mjs +81 -0
  126. package/node_modules/@radix-ui/react-context/dist/index.mjs.map +7 -0
  127. package/node_modules/@radix-ui/react-context/package.json +75 -0
  128. package/node_modules/@radix-ui/react-id/README.md +13 -0
  129. package/node_modules/@radix-ui/react-id/dist/index.d.mts +3 -0
  130. package/node_modules/@radix-ui/react-id/dist/index.d.ts +3 -0
  131. package/node_modules/@radix-ui/react-id/dist/index.js +49 -0
  132. package/node_modules/@radix-ui/react-id/dist/index.js.map +7 -0
  133. package/node_modules/@radix-ui/react-id/dist/index.mjs +16 -0
  134. package/node_modules/@radix-ui/react-id/dist/index.mjs.map +7 -0
  135. package/node_modules/@radix-ui/react-id/package.json +78 -0
  136. package/node_modules/@radix-ui/react-presence/LICENSE +21 -0
  137. package/node_modules/@radix-ui/react-presence/README.md +3 -0
  138. package/node_modules/@radix-ui/react-presence/dist/index.d.mts +12 -0
  139. package/node_modules/@radix-ui/react-presence/dist/index.d.ts +12 -0
  140. package/node_modules/@radix-ui/react-presence/dist/index.js +171 -0
  141. package/node_modules/@radix-ui/react-presence/dist/index.js.map +7 -0
  142. package/node_modules/@radix-ui/react-presence/dist/index.mjs +139 -0
  143. package/node_modules/@radix-ui/react-presence/dist/index.mjs.map +7 -0
  144. package/node_modules/@radix-ui/react-presence/package.json +69 -0
  145. package/node_modules/@radix-ui/react-primitive/LICENSE +21 -0
  146. package/node_modules/@radix-ui/react-primitive/README.md +3 -0
  147. package/node_modules/@radix-ui/react-primitive/dist/index.d.mts +52 -0
  148. package/node_modules/@radix-ui/react-primitive/dist/index.d.ts +52 -0
  149. package/node_modules/@radix-ui/react-primitive/dist/index.js +80 -0
  150. package/node_modules/@radix-ui/react-primitive/dist/index.js.map +7 -0
  151. package/node_modules/@radix-ui/react-primitive/dist/index.mjs +47 -0
  152. package/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +7 -0
  153. package/node_modules/@radix-ui/react-primitive/package.json +68 -0
  154. package/node_modules/@radix-ui/react-slot/LICENSE +21 -0
  155. package/node_modules/@radix-ui/react-slot/README.md +3 -0
  156. package/node_modules/@radix-ui/react-slot/dist/index.d.mts +17 -0
  157. package/node_modules/@radix-ui/react-slot/dist/index.d.ts +17 -0
  158. package/node_modules/@radix-ui/react-slot/dist/index.js +138 -0
  159. package/node_modules/@radix-ui/react-slot/dist/index.js.map +7 -0
  160. package/node_modules/@radix-ui/react-slot/dist/index.mjs +105 -0
  161. package/node_modules/@radix-ui/react-slot/dist/index.mjs.map +7 -0
  162. package/node_modules/@radix-ui/react-slot/package.json +63 -0
  163. package/node_modules/@radix-ui/react-use-controllable-state/LICENSE +21 -0
  164. package/node_modules/@radix-ui/react-use-controllable-state/README.md +3 -0
  165. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.mts +40 -0
  166. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.ts +40 -0
  167. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +169 -0
  168. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.js.map +7 -0
  169. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs +136 -0
  170. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs.map +7 -0
  171. package/node_modules/@radix-ui/react-use-controllable-state/package.json +64 -0
  172. package/node_modules/@radix-ui/react-use-effect-event/LICENSE +21 -0
  173. package/node_modules/@radix-ui/react-use-effect-event/README.md +5 -0
  174. package/node_modules/@radix-ui/react-use-effect-event/dist/index.d.mts +8 -0
  175. package/node_modules/@radix-ui/react-use-effect-event/dist/index.d.ts +8 -0
  176. package/node_modules/@radix-ui/react-use-effect-event/dist/index.js +60 -0
  177. package/node_modules/@radix-ui/react-use-effect-event/dist/index.js.map +7 -0
  178. package/node_modules/@radix-ui/react-use-effect-event/dist/index.mjs +27 -0
  179. package/node_modules/@radix-ui/react-use-effect-event/dist/index.mjs.map +7 -0
  180. package/node_modules/@radix-ui/react-use-effect-event/package.json +65 -0
  181. package/node_modules/@radix-ui/react-use-effect-event/src/index.ts +1 -0
  182. package/node_modules/@radix-ui/react-use-effect-event/src/use-effect-event.tsx +36 -0
  183. package/node_modules/@radix-ui/react-use-layout-effect/README.md +13 -0
  184. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.mts +12 -0
  185. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.ts +12 -0
  186. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +41 -0
  187. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.js.map +7 -0
  188. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs +8 -0
  189. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs.map +7 -0
  190. package/node_modules/@radix-ui/react-use-layout-effect/package.json +75 -0
  191. package/node_modules/@remirror/core-constants/LICENSE +21 -0
  192. package/node_modules/@remirror/core-constants/dist/_tsup-dts-rollup.d.cts +612 -0
  193. package/node_modules/@remirror/core-constants/dist/_tsup-dts-rollup.d.ts +612 -0
  194. package/node_modules/@remirror/core-constants/dist/remirror-core-constants.cjs +314 -0
  195. package/node_modules/@remirror/core-constants/dist/remirror-core-constants.d.cts +20 -0
  196. package/node_modules/@remirror/core-constants/dist/remirror-core-constants.d.ts +20 -0
  197. package/node_modules/@remirror/core-constants/dist/remirror-core-constants.js +269 -0
  198. package/node_modules/@remirror/core-constants/dist-types/core-constants.d.ts +431 -0
  199. package/node_modules/@remirror/core-constants/dist-types/error-constants.d.ts +119 -0
  200. package/node_modules/@remirror/core-constants/dist-types/index.d.ts +2 -0
  201. package/node_modules/@remirror/core-constants/dist-types/tsconfig.tsbuildinfo +1 -0
  202. package/node_modules/@remirror/core-constants/package.json +45 -0
  203. package/node_modules/@remirror/core-constants/readme.md +17 -0
  204. package/node_modules/@tiptap/core/LICENSE.md +21 -0
  205. package/node_modules/@tiptap/core/README.md +18 -0
  206. package/node_modules/@tiptap/core/dist/index.cjs +7126 -0
  207. package/node_modules/@tiptap/core/dist/index.cjs.map +1 -0
  208. package/node_modules/@tiptap/core/dist/index.d.cts +4954 -0
  209. package/node_modules/@tiptap/core/dist/index.d.ts +4954 -0
  210. package/node_modules/@tiptap/core/dist/index.js +6992 -0
  211. package/node_modules/@tiptap/core/dist/index.js.map +1 -0
  212. package/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.cjs +56 -0
  213. package/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.cjs.map +1 -0
  214. package/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.d.cts +23 -0
  215. package/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.d.ts +23 -0
  216. package/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js +26 -0
  217. package/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js.map +1 -0
  218. package/node_modules/@tiptap/core/jsx-dev-runtime/index.cjs +1 -0
  219. package/node_modules/@tiptap/core/jsx-dev-runtime/index.d.cts +1 -0
  220. package/node_modules/@tiptap/core/jsx-dev-runtime/index.d.ts +1 -0
  221. package/node_modules/@tiptap/core/jsx-dev-runtime/index.js +1 -0
  222. package/node_modules/@tiptap/core/jsx-runtime/index.cjs +1 -0
  223. package/node_modules/@tiptap/core/jsx-runtime/index.d.cts +1 -0
  224. package/node_modules/@tiptap/core/jsx-runtime/index.d.ts +1 -0
  225. package/node_modules/@tiptap/core/jsx-runtime/index.js +1 -0
  226. package/node_modules/@tiptap/core/package.json +70 -0
  227. package/node_modules/@tiptap/core/src/CommandManager.ts +138 -0
  228. package/node_modules/@tiptap/core/src/Editor.ts +806 -0
  229. package/node_modules/@tiptap/core/src/EventEmitter.ts +58 -0
  230. package/node_modules/@tiptap/core/src/Extendable.ts +602 -0
  231. package/node_modules/@tiptap/core/src/Extension.ts +55 -0
  232. package/node_modules/@tiptap/core/src/ExtensionManager.ts +440 -0
  233. package/node_modules/@tiptap/core/src/InputRule.ts +290 -0
  234. package/node_modules/@tiptap/core/src/Mark.ts +211 -0
  235. package/node_modules/@tiptap/core/src/MarkView.ts +122 -0
  236. package/node_modules/@tiptap/core/src/Node.ts +377 -0
  237. package/node_modules/@tiptap/core/src/NodePos.ts +257 -0
  238. package/node_modules/@tiptap/core/src/NodeView.ts +339 -0
  239. package/node_modules/@tiptap/core/src/PasteRule.ts +373 -0
  240. package/node_modules/@tiptap/core/src/Tracker.ts +36 -0
  241. package/node_modules/@tiptap/core/src/__tests__/transformPastedHTML.test.ts +575 -0
  242. package/node_modules/@tiptap/core/src/commands/blur.ts +29 -0
  243. package/node_modules/@tiptap/core/src/commands/clearContent.ts +25 -0
  244. package/node_modules/@tiptap/core/src/commands/clearNodes.ts +57 -0
  245. package/node_modules/@tiptap/core/src/commands/command.ts +22 -0
  246. package/node_modules/@tiptap/core/src/commands/createParagraphNear.ts +21 -0
  247. package/node_modules/@tiptap/core/src/commands/cut.ts +36 -0
  248. package/node_modules/@tiptap/core/src/commands/deleteCurrentNode.ts +44 -0
  249. package/node_modules/@tiptap/core/src/commands/deleteNode.ts +41 -0
  250. package/node_modules/@tiptap/core/src/commands/deleteRange.ts +26 -0
  251. package/node_modules/@tiptap/core/src/commands/deleteSelection.ts +21 -0
  252. package/node_modules/@tiptap/core/src/commands/enter.ts +19 -0
  253. package/node_modules/@tiptap/core/src/commands/exitCode.ts +21 -0
  254. package/node_modules/@tiptap/core/src/commands/extendMarkRange.ts +51 -0
  255. package/node_modules/@tiptap/core/src/commands/first.ts +26 -0
  256. package/node_modules/@tiptap/core/src/commands/focus.ts +108 -0
  257. package/node_modules/@tiptap/core/src/commands/forEach.ts +24 -0
  258. package/node_modules/@tiptap/core/src/commands/index.ts +57 -0
  259. package/node_modules/@tiptap/core/src/commands/insertContent.ts +46 -0
  260. package/node_modules/@tiptap/core/src/commands/insertContentAt.ts +212 -0
  261. package/node_modules/@tiptap/core/src/commands/join.ts +69 -0
  262. package/node_modules/@tiptap/core/src/commands/joinItemBackward.ts +37 -0
  263. package/node_modules/@tiptap/core/src/commands/joinItemForward.ts +37 -0
  264. package/node_modules/@tiptap/core/src/commands/joinTextblockBackward.ts +20 -0
  265. package/node_modules/@tiptap/core/src/commands/joinTextblockForward.ts +20 -0
  266. package/node_modules/@tiptap/core/src/commands/keyboardShortcut.ts +100 -0
  267. package/node_modules/@tiptap/core/src/commands/lift.ts +34 -0
  268. package/node_modules/@tiptap/core/src/commands/liftEmptyBlock.ts +21 -0
  269. package/node_modules/@tiptap/core/src/commands/liftListItem.ts +26 -0
  270. package/node_modules/@tiptap/core/src/commands/newlineInCode.ts +21 -0
  271. package/node_modules/@tiptap/core/src/commands/resetAttributes.ts +73 -0
  272. package/node_modules/@tiptap/core/src/commands/scrollIntoView.ts +23 -0
  273. package/node_modules/@tiptap/core/src/commands/selectAll.ts +27 -0
  274. package/node_modules/@tiptap/core/src/commands/selectNodeBackward.ts +21 -0
  275. package/node_modules/@tiptap/core/src/commands/selectNodeForward.ts +21 -0
  276. package/node_modules/@tiptap/core/src/commands/selectParentNode.ts +21 -0
  277. package/node_modules/@tiptap/core/src/commands/selectTextblockEnd.ts +23 -0
  278. package/node_modules/@tiptap/core/src/commands/selectTextblockStart.ts +23 -0
  279. package/node_modules/@tiptap/core/src/commands/setContent.ts +76 -0
  280. package/node_modules/@tiptap/core/src/commands/setMark.ts +118 -0
  281. package/node_modules/@tiptap/core/src/commands/setMeta.ts +25 -0
  282. package/node_modules/@tiptap/core/src/commands/setNode.ts +57 -0
  283. package/node_modules/@tiptap/core/src/commands/setNodeSelection.ts +31 -0
  284. package/node_modules/@tiptap/core/src/commands/setTextDirection.ts +51 -0
  285. package/node_modules/@tiptap/core/src/commands/setTextSelection.ts +35 -0
  286. package/node_modules/@tiptap/core/src/commands/sinkListItem.ts +26 -0
  287. package/node_modules/@tiptap/core/src/commands/splitBlock.ts +115 -0
  288. package/node_modules/@tiptap/core/src/commands/splitListItem.ts +149 -0
  289. package/node_modules/@tiptap/core/src/commands/toggleList.ts +159 -0
  290. package/node_modules/@tiptap/core/src/commands/toggleMark.ts +51 -0
  291. package/node_modules/@tiptap/core/src/commands/toggleNode.ts +47 -0
  292. package/node_modules/@tiptap/core/src/commands/toggleWrap.ts +32 -0
  293. package/node_modules/@tiptap/core/src/commands/undoInputRule.ts +49 -0
  294. package/node_modules/@tiptap/core/src/commands/unsetAllMarks.ts +32 -0
  295. package/node_modules/@tiptap/core/src/commands/unsetMark.ts +65 -0
  296. package/node_modules/@tiptap/core/src/commands/unsetTextDirection.ts +51 -0
  297. package/node_modules/@tiptap/core/src/commands/updateAttributes.ts +150 -0
  298. package/node_modules/@tiptap/core/src/commands/wrapIn.ts +27 -0
  299. package/node_modules/@tiptap/core/src/commands/wrapInList.ts +27 -0
  300. package/node_modules/@tiptap/core/src/extensions/clipboardTextSerializer.ts +44 -0
  301. package/node_modules/@tiptap/core/src/extensions/commands.ts +14 -0
  302. package/node_modules/@tiptap/core/src/extensions/delete.ts +89 -0
  303. package/node_modules/@tiptap/core/src/extensions/drop.ts +26 -0
  304. package/node_modules/@tiptap/core/src/extensions/editable.ts +18 -0
  305. package/node_modules/@tiptap/core/src/extensions/focusEvents.ts +41 -0
  306. package/node_modules/@tiptap/core/src/extensions/index.ts +10 -0
  307. package/node_modules/@tiptap/core/src/extensions/keymap.ts +160 -0
  308. package/node_modules/@tiptap/core/src/extensions/paste.ts +25 -0
  309. package/node_modules/@tiptap/core/src/extensions/tabindex.ts +18 -0
  310. package/node_modules/@tiptap/core/src/extensions/textDirection.ts +86 -0
  311. package/node_modules/@tiptap/core/src/helpers/MappablePosition.ts +66 -0
  312. package/node_modules/@tiptap/core/src/helpers/combineTransactionSteps.ts +21 -0
  313. package/node_modules/@tiptap/core/src/helpers/createChainableState.ts +39 -0
  314. package/node_modules/@tiptap/core/src/helpers/createDocument.ts +24 -0
  315. package/node_modules/@tiptap/core/src/helpers/createNodeFromContent.ts +119 -0
  316. package/node_modules/@tiptap/core/src/helpers/defaultBlockAt.ts +18 -0
  317. package/node_modules/@tiptap/core/src/helpers/findChildren.ts +24 -0
  318. package/node_modules/@tiptap/core/src/helpers/findChildrenInRange.ts +36 -0
  319. package/node_modules/@tiptap/core/src/helpers/findParentNode.ts +18 -0
  320. package/node_modules/@tiptap/core/src/helpers/findParentNodeClosestToPos.ts +37 -0
  321. package/node_modules/@tiptap/core/src/helpers/flattenExtensions.ts +30 -0
  322. package/node_modules/@tiptap/core/src/helpers/generateHTML.ts +18 -0
  323. package/node_modules/@tiptap/core/src/helpers/generateJSON.ts +18 -0
  324. package/node_modules/@tiptap/core/src/helpers/generateText.ts +34 -0
  325. package/node_modules/@tiptap/core/src/helpers/getAttributes.ts +29 -0
  326. package/node_modules/@tiptap/core/src/helpers/getAttributesFromExtensions.ts +122 -0
  327. package/node_modules/@tiptap/core/src/helpers/getChangedRanges.ts +85 -0
  328. package/node_modules/@tiptap/core/src/helpers/getDebugJSON.ts +54 -0
  329. package/node_modules/@tiptap/core/src/helpers/getExtensionField.ts +32 -0
  330. package/node_modules/@tiptap/core/src/helpers/getHTMLFromFragment.ts +13 -0
  331. package/node_modules/@tiptap/core/src/helpers/getMarkAttributes.ts +30 -0
  332. package/node_modules/@tiptap/core/src/helpers/getMarkRange.ts +90 -0
  333. package/node_modules/@tiptap/core/src/helpers/getMarkType.ts +13 -0
  334. package/node_modules/@tiptap/core/src/helpers/getMarksBetween.ts +44 -0
  335. package/node_modules/@tiptap/core/src/helpers/getNodeAtPosition.ts +29 -0
  336. package/node_modules/@tiptap/core/src/helpers/getNodeAttributes.ts +22 -0
  337. package/node_modules/@tiptap/core/src/helpers/getNodeType.ts +13 -0
  338. package/node_modules/@tiptap/core/src/helpers/getRenderedAttributes.ts +23 -0
  339. package/node_modules/@tiptap/core/src/helpers/getSchema.ts +12 -0
  340. package/node_modules/@tiptap/core/src/helpers/getSchemaByResolvedExtensions.ts +183 -0
  341. package/node_modules/@tiptap/core/src/helpers/getSchemaTypeByName.ts +11 -0
  342. package/node_modules/@tiptap/core/src/helpers/getSchemaTypeNameByName.ts +19 -0
  343. package/node_modules/@tiptap/core/src/helpers/getSplittedAttributes.ts +28 -0
  344. package/node_modules/@tiptap/core/src/helpers/getText.ts +28 -0
  345. package/node_modules/@tiptap/core/src/helpers/getTextBetween.ts +52 -0
  346. package/node_modules/@tiptap/core/src/helpers/getTextContentFromNodes.ts +29 -0
  347. package/node_modules/@tiptap/core/src/helpers/getTextSerializersFromSchema.ts +16 -0
  348. package/node_modules/@tiptap/core/src/helpers/index.ts +55 -0
  349. package/node_modules/@tiptap/core/src/helpers/injectExtensionAttributesToParseRule.ts +47 -0
  350. package/node_modules/@tiptap/core/src/helpers/isActive.ts +23 -0
  351. package/node_modules/@tiptap/core/src/helpers/isAtEndOfNode.ts +29 -0
  352. package/node_modules/@tiptap/core/src/helpers/isAtStartOfNode.ts +11 -0
  353. package/node_modules/@tiptap/core/src/helpers/isExtensionRulesEnabled.ts +13 -0
  354. package/node_modules/@tiptap/core/src/helpers/isList.ts +27 -0
  355. package/node_modules/@tiptap/core/src/helpers/isMarkActive.ts +94 -0
  356. package/node_modules/@tiptap/core/src/helpers/isNodeActive.ts +51 -0
  357. package/node_modules/@tiptap/core/src/helpers/isNodeEmpty.ts +62 -0
  358. package/node_modules/@tiptap/core/src/helpers/isNodeSelection.ts +5 -0
  359. package/node_modules/@tiptap/core/src/helpers/isTextSelection.ts +5 -0
  360. package/node_modules/@tiptap/core/src/helpers/posToDOMRect.ts +35 -0
  361. package/node_modules/@tiptap/core/src/helpers/resolveExtensions.ts +25 -0
  362. package/node_modules/@tiptap/core/src/helpers/resolveFocusPosition.ts +31 -0
  363. package/node_modules/@tiptap/core/src/helpers/rewriteUnknownContent.ts +149 -0
  364. package/node_modules/@tiptap/core/src/helpers/selectionToInsertionEnd.ts +29 -0
  365. package/node_modules/@tiptap/core/src/helpers/sortExtensions.ts +26 -0
  366. package/node_modules/@tiptap/core/src/helpers/splitExtensions.ts +16 -0
  367. package/node_modules/@tiptap/core/src/index.ts +28 -0
  368. package/node_modules/@tiptap/core/src/inputRules/index.ts +5 -0
  369. package/node_modules/@tiptap/core/src/inputRules/markInputRule.ts +68 -0
  370. package/node_modules/@tiptap/core/src/inputRules/nodeInputRule.ts +73 -0
  371. package/node_modules/@tiptap/core/src/inputRules/textInputRule.ts +35 -0
  372. package/node_modules/@tiptap/core/src/inputRules/textblockTypeInputRule.ts +35 -0
  373. package/node_modules/@tiptap/core/src/inputRules/wrappingInputRule.ts +82 -0
  374. package/node_modules/@tiptap/core/src/jsx-runtime.ts +65 -0
  375. package/node_modules/@tiptap/core/src/lib/ResizableNodeView.ts +1060 -0
  376. package/node_modules/@tiptap/core/src/lib/index.ts +1 -0
  377. package/node_modules/@tiptap/core/src/pasteRules/index.ts +3 -0
  378. package/node_modules/@tiptap/core/src/pasteRules/markPasteRule.ts +71 -0
  379. package/node_modules/@tiptap/core/src/pasteRules/nodePasteRule.ts +44 -0
  380. package/node_modules/@tiptap/core/src/pasteRules/textPasteRule.ts +34 -0
  381. package/node_modules/@tiptap/core/src/style.ts +71 -0
  382. package/node_modules/@tiptap/core/src/types.ts +1058 -0
  383. package/node_modules/@tiptap/core/src/utilities/callOrReturn.ts +21 -0
  384. package/node_modules/@tiptap/core/src/utilities/canInsertNode.ts +30 -0
  385. package/node_modules/@tiptap/core/src/utilities/createStyleTag.ts +21 -0
  386. package/node_modules/@tiptap/core/src/utilities/deleteProps.ts +16 -0
  387. package/node_modules/@tiptap/core/src/utilities/elementFromString.ts +27 -0
  388. package/node_modules/@tiptap/core/src/utilities/escapeForRegEx.ts +4 -0
  389. package/node_modules/@tiptap/core/src/utilities/findDuplicates.ts +8 -0
  390. package/node_modules/@tiptap/core/src/utilities/fromString.ts +19 -0
  391. package/node_modules/@tiptap/core/src/utilities/index.ts +26 -0
  392. package/node_modules/@tiptap/core/src/utilities/isAndroid.ts +3 -0
  393. package/node_modules/@tiptap/core/src/utilities/isEmptyObject.ts +3 -0
  394. package/node_modules/@tiptap/core/src/utilities/isFirefox.ts +11 -0
  395. package/node_modules/@tiptap/core/src/utilities/isFunction.ts +4 -0
  396. package/node_modules/@tiptap/core/src/utilities/isMacOS.ts +3 -0
  397. package/node_modules/@tiptap/core/src/utilities/isNumber.ts +3 -0
  398. package/node_modules/@tiptap/core/src/utilities/isPlainObject.ts +13 -0
  399. package/node_modules/@tiptap/core/src/utilities/isRegExp.ts +3 -0
  400. package/node_modules/@tiptap/core/src/utilities/isSafari.ts +11 -0
  401. package/node_modules/@tiptap/core/src/utilities/isString.ts +3 -0
  402. package/node_modules/@tiptap/core/src/utilities/isiOS.ts +7 -0
  403. package/node_modules/@tiptap/core/src/utilities/markdown/attributeUtils.ts +130 -0
  404. package/node_modules/@tiptap/core/src/utilities/markdown/createAtomBlockMarkdownSpec.ts +141 -0
  405. package/node_modules/@tiptap/core/src/utilities/markdown/createBlockMarkdownSpec.ts +225 -0
  406. package/node_modules/@tiptap/core/src/utilities/markdown/createInlineMarkdownSpec.ts +282 -0
  407. package/node_modules/@tiptap/core/src/utilities/markdown/index.ts +13 -0
  408. package/node_modules/@tiptap/core/src/utilities/markdown/parseIndentedBlocks.ts +194 -0
  409. package/node_modules/@tiptap/core/src/utilities/markdown/renderNestedMarkdownContent.ts +96 -0
  410. package/node_modules/@tiptap/core/src/utilities/mergeAttributes.ts +109 -0
  411. package/node_modules/@tiptap/core/src/utilities/mergeDeep.ts +17 -0
  412. package/node_modules/@tiptap/core/src/utilities/minMax.ts +3 -0
  413. package/node_modules/@tiptap/core/src/utilities/objectIncludes.ts +30 -0
  414. package/node_modules/@tiptap/core/src/utilities/removeDuplicates.ts +13 -0
  415. package/node_modules/@tiptap/extension-bubble-menu/LICENSE.md +21 -0
  416. package/node_modules/@tiptap/extension-bubble-menu/README.md +18 -0
  417. package/node_modules/@tiptap/extension-bubble-menu/dist/index.cjs +462 -0
  418. package/node_modules/@tiptap/extension-bubble-menu/dist/index.cjs.map +1 -0
  419. package/node_modules/@tiptap/extension-bubble-menu/dist/index.d.cts +169 -0
  420. package/node_modules/@tiptap/extension-bubble-menu/dist/index.d.ts +169 -0
  421. package/node_modules/@tiptap/extension-bubble-menu/dist/index.js +443 -0
  422. package/node_modules/@tiptap/extension-bubble-menu/dist/index.js.map +1 -0
  423. package/node_modules/@tiptap/extension-bubble-menu/package.json +54 -0
  424. package/node_modules/@tiptap/extension-bubble-menu/src/bubble-menu-plugin.ts +650 -0
  425. package/node_modules/@tiptap/extension-bubble-menu/src/bubble-menu.ts +50 -0
  426. package/node_modules/@tiptap/extension-bubble-menu/src/index.ts +6 -0
  427. package/node_modules/@tiptap/extension-floating-menu/LICENSE.md +21 -0
  428. package/node_modules/@tiptap/extension-floating-menu/README.md +18 -0
  429. package/node_modules/@tiptap/extension-floating-menu/dist/index.cjs +380 -0
  430. package/node_modules/@tiptap/extension-floating-menu/dist/index.cjs.map +1 -0
  431. package/node_modules/@tiptap/extension-floating-menu/dist/index.d.cts +179 -0
  432. package/node_modules/@tiptap/extension-floating-menu/dist/index.d.ts +179 -0
  433. package/node_modules/@tiptap/extension-floating-menu/dist/index.js +361 -0
  434. package/node_modules/@tiptap/extension-floating-menu/dist/index.js.map +1 -0
  435. package/node_modules/@tiptap/extension-floating-menu/package.json +53 -0
  436. package/node_modules/@tiptap/extension-floating-menu/src/floating-menu-plugin.ts +525 -0
  437. package/node_modules/@tiptap/extension-floating-menu/src/floating-menu.ts +77 -0
  438. package/node_modules/@tiptap/extension-floating-menu/src/index.ts +6 -0
  439. package/node_modules/@tiptap/extension-mention/LICENSE.md +21 -0
  440. package/node_modules/@tiptap/extension-mention/README.md +18 -0
  441. package/node_modules/@tiptap/extension-mention/dist/index.cjs +277 -0
  442. package/node_modules/@tiptap/extension-mention/dist/index.cjs.map +1 -0
  443. package/node_modules/@tiptap/extension-mention/dist/index.d.cts +93 -0
  444. package/node_modules/@tiptap/extension-mention/dist/index.d.ts +93 -0
  445. package/node_modules/@tiptap/extension-mention/dist/index.js +250 -0
  446. package/node_modules/@tiptap/extension-mention/dist/index.js.map +1 -0
  447. package/node_modules/@tiptap/extension-mention/package.json +52 -0
  448. package/node_modules/@tiptap/extension-mention/src/index.ts +5 -0
  449. package/node_modules/@tiptap/extension-mention/src/mention.ts +357 -0
  450. package/node_modules/@tiptap/extension-mention/src/utils/get-default-suggestion-attributes.ts +89 -0
  451. package/node_modules/@tiptap/pm/LICENSE.md +21 -0
  452. package/node_modules/@tiptap/pm/README.md +22 -0
  453. package/node_modules/@tiptap/pm/changeset/index.ts +1 -0
  454. package/node_modules/@tiptap/pm/collab/index.ts +1 -0
  455. package/node_modules/@tiptap/pm/commands/index.ts +1 -0
  456. package/node_modules/@tiptap/pm/dist/changeset/index.cjs +2 -0
  457. package/node_modules/@tiptap/pm/dist/changeset/index.d.cts +18 -0
  458. package/node_modules/@tiptap/pm/dist/changeset/index.d.ts +18 -0
  459. package/node_modules/@tiptap/pm/dist/changeset/index.js +2 -0
  460. package/node_modules/@tiptap/pm/dist/collab/index.cjs +2 -0
  461. package/node_modules/@tiptap/pm/dist/collab/index.d.cts +1 -0
  462. package/node_modules/@tiptap/pm/dist/collab/index.d.ts +1 -0
  463. package/node_modules/@tiptap/pm/dist/collab/index.js +2 -0
  464. package/node_modules/@tiptap/pm/dist/commands/index.cjs +2 -0
  465. package/node_modules/@tiptap/pm/dist/commands/index.d.cts +1 -0
  466. package/node_modules/@tiptap/pm/dist/commands/index.d.ts +1 -0
  467. package/node_modules/@tiptap/pm/dist/commands/index.js +2 -0
  468. package/node_modules/@tiptap/pm/dist/dropcursor/index.cjs +2 -0
  469. package/node_modules/@tiptap/pm/dist/dropcursor/index.d.cts +1 -0
  470. package/node_modules/@tiptap/pm/dist/dropcursor/index.d.ts +1 -0
  471. package/node_modules/@tiptap/pm/dist/dropcursor/index.js +2 -0
  472. package/node_modules/@tiptap/pm/dist/gapcursor/index.cjs +2 -0
  473. package/node_modules/@tiptap/pm/dist/gapcursor/index.d.cts +1 -0
  474. package/node_modules/@tiptap/pm/dist/gapcursor/index.d.ts +1 -0
  475. package/node_modules/@tiptap/pm/dist/gapcursor/index.js +2 -0
  476. package/node_modules/@tiptap/pm/dist/history/index.cjs +2 -0
  477. package/node_modules/@tiptap/pm/dist/history/index.d.cts +1 -0
  478. package/node_modules/@tiptap/pm/dist/history/index.d.ts +1 -0
  479. package/node_modules/@tiptap/pm/dist/history/index.js +2 -0
  480. package/node_modules/@tiptap/pm/dist/inputrules/index.cjs +2 -0
  481. package/node_modules/@tiptap/pm/dist/inputrules/index.d.cts +1 -0
  482. package/node_modules/@tiptap/pm/dist/inputrules/index.d.ts +1 -0
  483. package/node_modules/@tiptap/pm/dist/inputrules/index.js +2 -0
  484. package/node_modules/@tiptap/pm/dist/keymap/index.cjs +2 -0
  485. package/node_modules/@tiptap/pm/dist/keymap/index.d.cts +1 -0
  486. package/node_modules/@tiptap/pm/dist/keymap/index.d.ts +1 -0
  487. package/node_modules/@tiptap/pm/dist/keymap/index.js +2 -0
  488. package/node_modules/@tiptap/pm/dist/markdown/index.cjs +2 -0
  489. package/node_modules/@tiptap/pm/dist/markdown/index.d.cts +1 -0
  490. package/node_modules/@tiptap/pm/dist/markdown/index.d.ts +1 -0
  491. package/node_modules/@tiptap/pm/dist/markdown/index.js +2 -0
  492. package/node_modules/@tiptap/pm/dist/menu/index.cjs +2 -0
  493. package/node_modules/@tiptap/pm/dist/menu/index.d.cts +1 -0
  494. package/node_modules/@tiptap/pm/dist/menu/index.d.ts +1 -0
  495. package/node_modules/@tiptap/pm/dist/menu/index.js +2 -0
  496. package/node_modules/@tiptap/pm/dist/model/index.cjs +2 -0
  497. package/node_modules/@tiptap/pm/dist/model/index.d.cts +1 -0
  498. package/node_modules/@tiptap/pm/dist/model/index.d.ts +1 -0
  499. package/node_modules/@tiptap/pm/dist/model/index.js +2 -0
  500. package/node_modules/@tiptap/pm/dist/schema-basic/index.cjs +2 -0
  501. package/node_modules/@tiptap/pm/dist/schema-basic/index.d.cts +1 -0
  502. package/node_modules/@tiptap/pm/dist/schema-basic/index.d.ts +1 -0
  503. package/node_modules/@tiptap/pm/dist/schema-basic/index.js +2 -0
  504. package/node_modules/@tiptap/pm/dist/schema-list/index.cjs +2 -0
  505. package/node_modules/@tiptap/pm/dist/schema-list/index.d.cts +1 -0
  506. package/node_modules/@tiptap/pm/dist/schema-list/index.d.ts +1 -0
  507. package/node_modules/@tiptap/pm/dist/schema-list/index.js +2 -0
  508. package/node_modules/@tiptap/pm/dist/state/index.cjs +2 -0
  509. package/node_modules/@tiptap/pm/dist/state/index.d.cts +1 -0
  510. package/node_modules/@tiptap/pm/dist/state/index.d.ts +1 -0
  511. package/node_modules/@tiptap/pm/dist/state/index.js +2 -0
  512. package/node_modules/@tiptap/pm/dist/tables/index.cjs +2 -0
  513. package/node_modules/@tiptap/pm/dist/tables/index.d.cts +1 -0
  514. package/node_modules/@tiptap/pm/dist/tables/index.d.ts +1 -0
  515. package/node_modules/@tiptap/pm/dist/tables/index.js +2 -0
  516. package/node_modules/@tiptap/pm/dist/trailing-node/index.cjs +2 -0
  517. package/node_modules/@tiptap/pm/dist/trailing-node/index.d.cts +1 -0
  518. package/node_modules/@tiptap/pm/dist/trailing-node/index.d.ts +1 -0
  519. package/node_modules/@tiptap/pm/dist/trailing-node/index.js +2 -0
  520. package/node_modules/@tiptap/pm/dist/transform/index.cjs +2 -0
  521. package/node_modules/@tiptap/pm/dist/transform/index.d.cts +1 -0
  522. package/node_modules/@tiptap/pm/dist/transform/index.d.ts +1 -0
  523. package/node_modules/@tiptap/pm/dist/transform/index.js +2 -0
  524. package/node_modules/@tiptap/pm/dist/view/index.cjs +2 -0
  525. package/node_modules/@tiptap/pm/dist/view/index.d.cts +1 -0
  526. package/node_modules/@tiptap/pm/dist/view/index.d.ts +1 -0
  527. package/node_modules/@tiptap/pm/dist/view/index.js +2 -0
  528. package/node_modules/@tiptap/pm/dropcursor/index.ts +1 -0
  529. package/node_modules/@tiptap/pm/gapcursor/index.ts +1 -0
  530. package/node_modules/@tiptap/pm/history/index.ts +1 -0
  531. package/node_modules/@tiptap/pm/inputrules/index.ts +1 -0
  532. package/node_modules/@tiptap/pm/keymap/index.ts +1 -0
  533. package/node_modules/@tiptap/pm/markdown/index.ts +1 -0
  534. package/node_modules/@tiptap/pm/menu/index.ts +1 -0
  535. package/node_modules/@tiptap/pm/model/index.ts +1 -0
  536. package/node_modules/@tiptap/pm/package.json +211 -0
  537. package/node_modules/@tiptap/pm/schema-basic/index.ts +1 -0
  538. package/node_modules/@tiptap/pm/schema-list/index.ts +1 -0
  539. package/node_modules/@tiptap/pm/state/index.ts +1 -0
  540. package/node_modules/@tiptap/pm/tables/index.ts +1 -0
  541. package/node_modules/@tiptap/pm/trailing-node/index.ts +1 -0
  542. package/node_modules/@tiptap/pm/transform/index.ts +1 -0
  543. package/node_modules/@tiptap/pm/view/index.ts +1 -0
  544. package/node_modules/@tiptap/react/LICENSE.md +21 -0
  545. package/node_modules/@tiptap/react/README.md +18 -0
  546. package/node_modules/@tiptap/react/dist/index.cjs +1195 -0
  547. package/node_modules/@tiptap/react/dist/index.cjs.map +1 -0
  548. package/node_modules/@tiptap/react/dist/index.d.cts +534 -0
  549. package/node_modules/@tiptap/react/dist/index.d.ts +534 -0
  550. package/node_modules/@tiptap/react/dist/index.js +1131 -0
  551. package/node_modules/@tiptap/react/dist/index.js.map +1 -0
  552. package/node_modules/@tiptap/react/dist/menus/index.cjs +499 -0
  553. package/node_modules/@tiptap/react/dist/menus/index.cjs.map +1 -0
  554. package/node_modules/@tiptap/react/dist/menus/index.d.cts +19 -0
  555. package/node_modules/@tiptap/react/dist/menus/index.d.ts +19 -0
  556. package/node_modules/@tiptap/react/dist/menus/index.js +461 -0
  557. package/node_modules/@tiptap/react/dist/menus/index.js.map +1 -0
  558. package/node_modules/@tiptap/react/package.json +76 -0
  559. package/node_modules/@tiptap/react/src/Context.tsx +60 -0
  560. package/node_modules/@tiptap/react/src/Editor.ts +13 -0
  561. package/node_modules/@tiptap/react/src/EditorContent.tsx +229 -0
  562. package/node_modules/@tiptap/react/src/NodeViewContent.tsx +30 -0
  563. package/node_modules/@tiptap/react/src/NodeViewWrapper.tsx +27 -0
  564. package/node_modules/@tiptap/react/src/ReactMarkViewRenderer.tsx +106 -0
  565. package/node_modules/@tiptap/react/src/ReactNodeViewRenderer.tsx +387 -0
  566. package/node_modules/@tiptap/react/src/ReactRenderer.tsx +282 -0
  567. package/node_modules/@tiptap/react/src/Tiptap.tsx +224 -0
  568. package/node_modules/@tiptap/react/src/index.ts +13 -0
  569. package/node_modules/@tiptap/react/src/menus/BubbleMenu.spec.ts +174 -0
  570. package/node_modules/@tiptap/react/src/menus/BubbleMenu.tsx +153 -0
  571. package/node_modules/@tiptap/react/src/menus/FloatingMenu.spec.ts +164 -0
  572. package/node_modules/@tiptap/react/src/menus/FloatingMenu.tsx +137 -0
  573. package/node_modules/@tiptap/react/src/menus/getAutoPluginKey.ts +5 -0
  574. package/node_modules/@tiptap/react/src/menus/index.ts +2 -0
  575. package/node_modules/@tiptap/react/src/menus/useMenuElementProps.ts +354 -0
  576. package/node_modules/@tiptap/react/src/types.ts +6 -0
  577. package/node_modules/@tiptap/react/src/useEditor.ts +382 -0
  578. package/node_modules/@tiptap/react/src/useEditorState.ts +173 -0
  579. package/node_modules/@tiptap/react/src/useReactNodeView.ts +28 -0
  580. package/node_modules/@tiptap/suggestion/LICENSE.md +21 -0
  581. package/node_modules/@tiptap/suggestion/README.md +18 -0
  582. package/node_modules/@tiptap/suggestion/dist/index.cjs +369 -0
  583. package/node_modules/@tiptap/suggestion/dist/index.cjs.map +1 -0
  584. package/node_modules/@tiptap/suggestion/dist/index.d.cts +213 -0
  585. package/node_modules/@tiptap/suggestion/dist/index.d.ts +213 -0
  586. package/node_modules/@tiptap/suggestion/dist/index.js +339 -0
  587. package/node_modules/@tiptap/suggestion/dist/index.js.map +1 -0
  588. package/node_modules/@tiptap/suggestion/package.json +50 -0
  589. package/node_modules/@tiptap/suggestion/src/__tests__/suggestion.test.ts +127 -0
  590. package/node_modules/@tiptap/suggestion/src/findSuggestionMatch.ts +79 -0
  591. package/node_modules/@tiptap/suggestion/src/index.ts +8 -0
  592. package/node_modules/@tiptap/suggestion/src/suggestion.ts +585 -0
  593. package/node_modules/@types/linkify-it/LICENSE +21 -0
  594. package/node_modules/@types/linkify-it/README.md +15 -0
  595. package/node_modules/@types/linkify-it/build/index.cjs.d.ts +178 -0
  596. package/node_modules/@types/linkify-it/index.d.mts +174 -0
  597. package/node_modules/@types/linkify-it/index.d.ts +3 -0
  598. package/node_modules/@types/linkify-it/package.json +50 -0
  599. package/node_modules/@types/markdown-it/LICENSE +21 -0
  600. package/node_modules/@types/markdown-it/README.md +15 -0
  601. package/node_modules/@types/markdown-it/dist/index.cjs.d.ts +1236 -0
  602. package/node_modules/@types/markdown-it/dist/markdown-it.d.ts +5 -0
  603. package/node_modules/@types/markdown-it/dist/markdown-it.min.d.ts +5 -0
  604. package/node_modules/@types/markdown-it/index.d.mts +1 -0
  605. package/node_modules/@types/markdown-it/index.d.ts +3 -0
  606. package/node_modules/@types/markdown-it/lib/common/html_blocks.d.mts +7 -0
  607. package/node_modules/@types/markdown-it/lib/common/html_re.d.mts +2 -0
  608. package/node_modules/@types/markdown-it/lib/common/utils.d.mts +62 -0
  609. package/node_modules/@types/markdown-it/lib/helpers/index.d.mts +5 -0
  610. package/node_modules/@types/markdown-it/lib/helpers/parse_link_destination.d.mts +7 -0
  611. package/node_modules/@types/markdown-it/lib/helpers/parse_link_label.d.mts +3 -0
  612. package/node_modules/@types/markdown-it/lib/helpers/parse_link_title.d.mts +29 -0
  613. package/node_modules/@types/markdown-it/lib/index.d.mts +404 -0
  614. package/node_modules/@types/markdown-it/lib/parser_block.d.mts +25 -0
  615. package/node_modules/@types/markdown-it/lib/parser_core.d.mts +18 -0
  616. package/node_modules/@types/markdown-it/lib/parser_inline.d.mts +38 -0
  617. package/node_modules/@types/markdown-it/lib/renderer.d.mts +96 -0
  618. package/node_modules/@types/markdown-it/lib/ruler.d.mts +158 -0
  619. package/node_modules/@types/markdown-it/lib/rules_block/state_block.d.mts +124 -0
  620. package/node_modules/@types/markdown-it/lib/rules_core/state_core.d.mts +18 -0
  621. package/node_modules/@types/markdown-it/lib/rules_inline/state_inline.d.mts +73 -0
  622. package/node_modules/@types/markdown-it/lib/token.d.mts +108 -0
  623. package/node_modules/@types/markdown-it/package.json +54 -0
  624. package/node_modules/@types/mdurl/LICENSE +21 -0
  625. package/node_modules/@types/mdurl/README.md +15 -0
  626. package/node_modules/@types/mdurl/build/index.cjs.d.ts +52 -0
  627. package/node_modules/@types/mdurl/index.d.mts +6 -0
  628. package/node_modules/@types/mdurl/index.d.ts +3 -0
  629. package/node_modules/@types/mdurl/lib/decode.d.mts +10 -0
  630. package/node_modules/@types/mdurl/lib/encode.d.mts +15 -0
  631. package/node_modules/@types/mdurl/lib/format.d.mts +3 -0
  632. package/node_modules/@types/mdurl/lib/parse.d.mts +18 -0
  633. package/node_modules/@types/mdurl/package.json +36 -0
  634. package/node_modules/@types/use-sync-external-store/LICENSE +21 -0
  635. package/node_modules/@types/use-sync-external-store/README.md +15 -0
  636. package/node_modules/@types/use-sync-external-store/index.d.ts +5 -0
  637. package/node_modules/@types/use-sync-external-store/package.json +30 -0
  638. package/node_modules/@types/use-sync-external-store/shim/index.d.ts +1 -0
  639. package/node_modules/@types/use-sync-external-store/shim/with-selector.d.ts +1 -0
  640. package/node_modules/@types/use-sync-external-store/with-selector.d.ts +7 -0
  641. package/node_modules/argparse/LICENSE +254 -0
  642. package/node_modules/argparse/README.md +84 -0
  643. package/node_modules/argparse/argparse.js +3707 -0
  644. package/node_modules/argparse/lib/sub.js +67 -0
  645. package/node_modules/argparse/lib/textwrap.js +440 -0
  646. package/node_modules/argparse/package.json +31 -0
  647. package/node_modules/crelt/LICENSE +19 -0
  648. package/node_modules/crelt/README.md +23 -0
  649. package/node_modules/crelt/dist/index.cjs +31 -0
  650. package/node_modules/crelt/dist/index.d.cts +4 -0
  651. package/node_modules/crelt/index.d.ts +4 -0
  652. package/node_modules/crelt/index.js +28 -0
  653. package/node_modules/crelt/package.json +35 -0
  654. package/node_modules/crelt/rollup.config.js +13 -0
  655. package/node_modules/entities/LICENSE +11 -0
  656. package/node_modules/entities/lib/decode.d.ts +211 -0
  657. package/node_modules/entities/lib/decode.d.ts.map +1 -0
  658. package/node_modules/entities/lib/decode.js +536 -0
  659. package/node_modules/entities/lib/decode.js.map +1 -0
  660. package/node_modules/entities/lib/decode_codepoint.d.ts +19 -0
  661. package/node_modules/entities/lib/decode_codepoint.d.ts.map +1 -0
  662. package/node_modules/entities/lib/decode_codepoint.js +76 -0
  663. package/node_modules/entities/lib/decode_codepoint.js.map +1 -0
  664. package/node_modules/entities/lib/encode.d.ts +22 -0
  665. package/node_modules/entities/lib/encode.d.ts.map +1 -0
  666. package/node_modules/entities/lib/encode.js +77 -0
  667. package/node_modules/entities/lib/encode.js.map +1 -0
  668. package/node_modules/entities/lib/escape.d.ts +43 -0
  669. package/node_modules/entities/lib/escape.d.ts.map +1 -0
  670. package/node_modules/entities/lib/escape.js +122 -0
  671. package/node_modules/entities/lib/escape.js.map +1 -0
  672. package/node_modules/entities/lib/esm/decode.d.ts +211 -0
  673. package/node_modules/entities/lib/esm/decode.d.ts.map +1 -0
  674. package/node_modules/entities/lib/esm/decode.js +496 -0
  675. package/node_modules/entities/lib/esm/decode.js.map +1 -0
  676. package/node_modules/entities/lib/esm/decode_codepoint.d.ts +19 -0
  677. package/node_modules/entities/lib/esm/decode_codepoint.d.ts.map +1 -0
  678. package/node_modules/entities/lib/esm/decode_codepoint.js +71 -0
  679. package/node_modules/entities/lib/esm/decode_codepoint.js.map +1 -0
  680. package/node_modules/entities/lib/esm/encode.d.ts +22 -0
  681. package/node_modules/entities/lib/esm/encode.d.ts.map +1 -0
  682. package/node_modules/entities/lib/esm/encode.js +69 -0
  683. package/node_modules/entities/lib/esm/encode.js.map +1 -0
  684. package/node_modules/entities/lib/esm/escape.d.ts +43 -0
  685. package/node_modules/entities/lib/esm/escape.d.ts.map +1 -0
  686. package/node_modules/entities/lib/esm/escape.js +116 -0
  687. package/node_modules/entities/lib/esm/escape.js.map +1 -0
  688. package/node_modules/entities/lib/esm/generated/decode-data-html.d.ts +3 -0
  689. package/node_modules/entities/lib/esm/generated/decode-data-html.d.ts.map +1 -0
  690. package/node_modules/entities/lib/esm/generated/decode-data-html.js +7 -0
  691. package/node_modules/entities/lib/esm/generated/decode-data-html.js.map +1 -0
  692. package/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts +3 -0
  693. package/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts.map +1 -0
  694. package/node_modules/entities/lib/esm/generated/decode-data-xml.js +7 -0
  695. package/node_modules/entities/lib/esm/generated/decode-data-xml.js.map +1 -0
  696. package/node_modules/entities/lib/esm/generated/encode-html.d.ts +8 -0
  697. package/node_modules/entities/lib/esm/generated/encode-html.d.ts.map +1 -0
  698. package/node_modules/entities/lib/esm/generated/encode-html.js +10 -0
  699. package/node_modules/entities/lib/esm/generated/encode-html.js.map +1 -0
  700. package/node_modules/entities/lib/esm/index.d.ts +96 -0
  701. package/node_modules/entities/lib/esm/index.d.ts.map +1 -0
  702. package/node_modules/entities/lib/esm/index.js +99 -0
  703. package/node_modules/entities/lib/esm/index.js.map +1 -0
  704. package/node_modules/entities/lib/esm/package.json +1 -0
  705. package/node_modules/entities/lib/generated/decode-data-html.d.ts +3 -0
  706. package/node_modules/entities/lib/generated/decode-data-html.d.ts.map +1 -0
  707. package/node_modules/entities/lib/generated/decode-data-html.js +9 -0
  708. package/node_modules/entities/lib/generated/decode-data-html.js.map +1 -0
  709. package/node_modules/entities/lib/generated/decode-data-xml.d.ts +3 -0
  710. package/node_modules/entities/lib/generated/decode-data-xml.d.ts.map +1 -0
  711. package/node_modules/entities/lib/generated/decode-data-xml.js +9 -0
  712. package/node_modules/entities/lib/generated/decode-data-xml.js.map +1 -0
  713. package/node_modules/entities/lib/generated/encode-html.d.ts +8 -0
  714. package/node_modules/entities/lib/generated/encode-html.d.ts.map +1 -0
  715. package/node_modules/entities/lib/generated/encode-html.js +12 -0
  716. package/node_modules/entities/lib/generated/encode-html.js.map +1 -0
  717. package/node_modules/entities/lib/index.d.ts +96 -0
  718. package/node_modules/entities/lib/index.d.ts.map +1 -0
  719. package/node_modules/entities/lib/index.js +126 -0
  720. package/node_modules/entities/lib/index.js.map +1 -0
  721. package/node_modules/entities/package.json +90 -0
  722. package/node_modules/entities/readme.md +122 -0
  723. package/node_modules/escape-string-regexp/index.d.ts +18 -0
  724. package/node_modules/escape-string-regexp/index.js +13 -0
  725. package/node_modules/escape-string-regexp/license +9 -0
  726. package/node_modules/escape-string-regexp/package.json +38 -0
  727. package/node_modules/escape-string-regexp/readme.md +34 -0
  728. package/node_modules/fast-equals/LICENSE +21 -0
  729. package/node_modules/fast-equals/README.md +477 -0
  730. package/node_modules/fast-equals/dist/cjs/comparator.d.cts +60 -0
  731. package/node_modules/fast-equals/dist/cjs/equals.d.cts +62 -0
  732. package/node_modules/fast-equals/dist/cjs/index.cjs +653 -0
  733. package/node_modules/fast-equals/dist/cjs/index.cjs.map +1 -0
  734. package/node_modules/fast-equals/dist/cjs/index.d.cts +66 -0
  735. package/node_modules/fast-equals/dist/cjs/internalTypes.d.cts +178 -0
  736. package/node_modules/fast-equals/dist/cjs/utils.d.cts +33 -0
  737. package/node_modules/fast-equals/dist/es/comparator.d.mts +60 -0
  738. package/node_modules/fast-equals/dist/es/equals.d.mts +62 -0
  739. package/node_modules/fast-equals/dist/es/index.d.mts +66 -0
  740. package/node_modules/fast-equals/dist/es/index.mjs +642 -0
  741. package/node_modules/fast-equals/dist/es/index.mjs.map +1 -0
  742. package/node_modules/fast-equals/dist/es/internalTypes.d.mts +178 -0
  743. package/node_modules/fast-equals/dist/es/utils.d.mts +33 -0
  744. package/node_modules/fast-equals/dist/umd/comparator.d.ts +26 -0
  745. package/node_modules/fast-equals/dist/umd/equals.d.ts +62 -0
  746. package/node_modules/fast-equals/dist/umd/index.d.ts +47 -0
  747. package/node_modules/fast-equals/dist/umd/index.js +659 -0
  748. package/node_modules/fast-equals/dist/umd/index.js.map +1 -0
  749. package/node_modules/fast-equals/dist/umd/internalTypes.d.ts +159 -0
  750. package/node_modules/fast-equals/dist/umd/utils.d.ts +28 -0
  751. package/node_modules/fast-equals/index.d.ts +260 -0
  752. package/node_modules/fast-equals/package.json +113 -0
  753. package/node_modules/linkify-it/LICENSE +22 -0
  754. package/node_modules/linkify-it/README.md +196 -0
  755. package/node_modules/linkify-it/build/index.cjs.js +832 -0
  756. package/node_modules/linkify-it/index.mjs +642 -0
  757. package/node_modules/linkify-it/lib/re.mjs +189 -0
  758. package/node_modules/linkify-it/package.json +58 -0
  759. package/node_modules/markdown-it/LICENSE +22 -0
  760. package/node_modules/markdown-it/README.md +324 -0
  761. package/node_modules/markdown-it/bin/markdown-it.mjs +107 -0
  762. package/node_modules/markdown-it/dist/index.cjs.js +5547 -0
  763. package/node_modules/markdown-it/dist/markdown-it.js +6969 -0
  764. package/node_modules/markdown-it/dist/markdown-it.min.js +2 -0
  765. package/node_modules/markdown-it/index.mjs +1 -0
  766. package/node_modules/markdown-it/lib/common/html_blocks.mjs +67 -0
  767. package/node_modules/markdown-it/lib/common/html_re.mjs +25 -0
  768. package/node_modules/markdown-it/lib/common/utils.mjs +304 -0
  769. package/node_modules/markdown-it/lib/helpers/index.mjs +11 -0
  770. package/node_modules/markdown-it/lib/helpers/parse_link_destination.mjs +77 -0
  771. package/node_modules/markdown-it/lib/helpers/parse_link_label.mjs +49 -0
  772. package/node_modules/markdown-it/lib/helpers/parse_link_title.mjs +66 -0
  773. package/node_modules/markdown-it/lib/index.mjs +565 -0
  774. package/node_modules/markdown-it/lib/parser_block.mjs +134 -0
  775. package/node_modules/markdown-it/lib/parser_core.mjs +62 -0
  776. package/node_modules/markdown-it/lib/parser_inline.mjs +197 -0
  777. package/node_modules/markdown-it/lib/presets/commonmark.mjs +88 -0
  778. package/node_modules/markdown-it/lib/presets/default.mjs +47 -0
  779. package/node_modules/markdown-it/lib/presets/zero.mjs +70 -0
  780. package/node_modules/markdown-it/lib/renderer.mjs +322 -0
  781. package/node_modules/markdown-it/lib/ruler.mjs +340 -0
  782. package/node_modules/markdown-it/lib/rules_block/blockquote.mjs +209 -0
  783. package/node_modules/markdown-it/lib/rules_block/code.mjs +30 -0
  784. package/node_modules/markdown-it/lib/rules_block/fence.mjs +94 -0
  785. package/node_modules/markdown-it/lib/rules_block/heading.mjs +51 -0
  786. package/node_modules/markdown-it/lib/rules_block/hr.mjs +40 -0
  787. package/node_modules/markdown-it/lib/rules_block/html_block.mjs +69 -0
  788. package/node_modules/markdown-it/lib/rules_block/lheading.mjs +82 -0
  789. package/node_modules/markdown-it/lib/rules_block/list.mjs +331 -0
  790. package/node_modules/markdown-it/lib/rules_block/paragraph.mjs +46 -0
  791. package/node_modules/markdown-it/lib/rules_block/reference.mjs +212 -0
  792. package/node_modules/markdown-it/lib/rules_block/state_block.mjs +220 -0
  793. package/node_modules/markdown-it/lib/rules_block/table.mjs +228 -0
  794. package/node_modules/markdown-it/lib/rules_core/block.mjs +13 -0
  795. package/node_modules/markdown-it/lib/rules_core/inline.mjs +11 -0
  796. package/node_modules/markdown-it/lib/rules_core/linkify.mjs +134 -0
  797. package/node_modules/markdown-it/lib/rules_core/normalize.mjs +17 -0
  798. package/node_modules/markdown-it/lib/rules_core/replacements.mjs +101 -0
  799. package/node_modules/markdown-it/lib/rules_core/smartquotes.mjs +193 -0
  800. package/node_modules/markdown-it/lib/rules_core/state_core.mjs +17 -0
  801. package/node_modules/markdown-it/lib/rules_core/text_join.mjs +43 -0
  802. package/node_modules/markdown-it/lib/rules_inline/autolink.mjs +72 -0
  803. package/node_modules/markdown-it/lib/rules_inline/backticks.mjs +60 -0
  804. package/node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs +124 -0
  805. package/node_modules/markdown-it/lib/rules_inline/emphasis.mjs +123 -0
  806. package/node_modules/markdown-it/lib/rules_inline/entity.mjs +51 -0
  807. package/node_modules/markdown-it/lib/rules_inline/escape.mjs +69 -0
  808. package/node_modules/markdown-it/lib/rules_inline/fragments_join.mjs +38 -0
  809. package/node_modules/markdown-it/lib/rules_inline/html_inline.mjs +50 -0
  810. package/node_modules/markdown-it/lib/rules_inline/image.mjs +138 -0
  811. package/node_modules/markdown-it/lib/rules_inline/link.mjs +139 -0
  812. package/node_modules/markdown-it/lib/rules_inline/linkify.mjs +63 -0
  813. package/node_modules/markdown-it/lib/rules_inline/newline.mjs +42 -0
  814. package/node_modules/markdown-it/lib/rules_inline/state_inline.mjs +123 -0
  815. package/node_modules/markdown-it/lib/rules_inline/strikethrough.mjs +127 -0
  816. package/node_modules/markdown-it/lib/rules_inline/text.mjs +86 -0
  817. package/node_modules/markdown-it/lib/token.mjs +191 -0
  818. package/node_modules/markdown-it/package.json +92 -0
  819. package/node_modules/mdurl/LICENSE +45 -0
  820. package/node_modules/mdurl/README.md +102 -0
  821. package/node_modules/mdurl/build/index.cjs.js +534 -0
  822. package/node_modules/mdurl/index.mjs +11 -0
  823. package/node_modules/mdurl/lib/decode.mjs +112 -0
  824. package/node_modules/mdurl/lib/encode.mjs +89 -0
  825. package/node_modules/mdurl/lib/format.mjs +21 -0
  826. package/node_modules/mdurl/lib/parse.mjs +308 -0
  827. package/node_modules/mdurl/package.json +37 -0
  828. package/node_modules/orderedmap/LICENSE +19 -0
  829. package/node_modules/orderedmap/README.md +69 -0
  830. package/node_modules/orderedmap/dist/index.cjs +139 -0
  831. package/node_modules/orderedmap/dist/index.d.cts +33 -0
  832. package/node_modules/orderedmap/dist/index.d.ts +33 -0
  833. package/node_modules/orderedmap/dist/index.js +137 -0
  834. package/node_modules/orderedmap/package.json +39 -0
  835. package/node_modules/prosemirror-changeset/CHANGELOG.md +147 -0
  836. package/node_modules/prosemirror-changeset/LICENSE +19 -0
  837. package/node_modules/prosemirror-changeset/README.md +175 -0
  838. package/node_modules/prosemirror-changeset/dist/index.cjs +585 -0
  839. package/node_modules/prosemirror-changeset/dist/index.d.cts +186 -0
  840. package/node_modules/prosemirror-changeset/dist/index.d.ts +186 -0
  841. package/node_modules/prosemirror-changeset/dist/index.js +715 -0
  842. package/node_modules/prosemirror-changeset/package.json +40 -0
  843. package/node_modules/prosemirror-changeset/src/README.md +32 -0
  844. package/node_modules/prosemirror-changeset/src/change.ts +189 -0
  845. package/node_modules/prosemirror-changeset/src/changeset.ts +212 -0
  846. package/node_modules/prosemirror-changeset/src/diff.ts +151 -0
  847. package/node_modules/prosemirror-changeset/src/simplify.ts +132 -0
  848. package/node_modules/prosemirror-changeset/test/test-changed-range.ts +48 -0
  849. package/node_modules/prosemirror-changeset/test/test-changes.ts +211 -0
  850. package/node_modules/prosemirror-changeset/test/test-diff.ts +69 -0
  851. package/node_modules/prosemirror-changeset/test/test-merge.ts +56 -0
  852. package/node_modules/prosemirror-changeset/test/test-simplify.ts +71 -0
  853. package/node_modules/prosemirror-collab/.tern-project +8 -0
  854. package/node_modules/prosemirror-collab/CHANGELOG.md +77 -0
  855. package/node_modules/prosemirror-collab/CONTRIBUTING.md +104 -0
  856. package/node_modules/prosemirror-collab/LICENSE +19 -0
  857. package/node_modules/prosemirror-collab/README.md +28 -0
  858. package/node_modules/prosemirror-collab/dist/index.cjs +155 -0
  859. package/node_modules/prosemirror-collab/dist/index.d.cts +60 -0
  860. package/node_modules/prosemirror-collab/dist/index.d.ts +60 -0
  861. package/node_modules/prosemirror-collab/dist/index.js +156 -0
  862. package/node_modules/prosemirror-collab/package.json +40 -0
  863. package/node_modules/prosemirror-collab/src/README.md +11 -0
  864. package/node_modules/prosemirror-collab/src/collab.ts +184 -0
  865. package/node_modules/prosemirror-commands/.tern-project +8 -0
  866. package/node_modules/prosemirror-commands/CHANGELOG.md +322 -0
  867. package/node_modules/prosemirror-commands/CONTRIBUTING.md +104 -0
  868. package/node_modules/prosemirror-commands/LICENSE +19 -0
  869. package/node_modules/prosemirror-commands/README.md +28 -0
  870. package/node_modules/prosemirror-commands/dist/index.cjs +687 -0
  871. package/node_modules/prosemirror-commands/dist/index.d.cts +215 -0
  872. package/node_modules/prosemirror-commands/dist/index.d.ts +215 -0
  873. package/node_modules/prosemirror-commands/dist/index.js +850 -0
  874. package/node_modules/prosemirror-commands/package.json +39 -0
  875. package/node_modules/prosemirror-commands/src/README.md +40 -0
  876. package/node_modules/prosemirror-commands/src/commands.ts +783 -0
  877. package/node_modules/prosemirror-dropcursor/CHANGELOG.md +137 -0
  878. package/node_modules/prosemirror-dropcursor/CONTRIBUTING.md +100 -0
  879. package/node_modules/prosemirror-dropcursor/LICENSE +19 -0
  880. package/node_modules/prosemirror-dropcursor/README.md +50 -0
  881. package/node_modules/prosemirror-dropcursor/dist/index.cjs +185 -0
  882. package/node_modules/prosemirror-dropcursor/dist/index.d.cts +38 -0
  883. package/node_modules/prosemirror-dropcursor/dist/index.d.ts +38 -0
  884. package/node_modules/prosemirror-dropcursor/dist/index.js +146 -0
  885. package/node_modules/prosemirror-dropcursor/package.json +38 -0
  886. package/node_modules/prosemirror-dropcursor/src/dropcursor.ts +170 -0
  887. package/node_modules/prosemirror-gapcursor/CHANGELOG.md +122 -0
  888. package/node_modules/prosemirror-gapcursor/CONTRIBUTING.md +104 -0
  889. package/node_modules/prosemirror-gapcursor/LICENSE +19 -0
  890. package/node_modules/prosemirror-gapcursor/README.md +31 -0
  891. package/node_modules/prosemirror-gapcursor/dist/index.cjs +239 -0
  892. package/node_modules/prosemirror-gapcursor/dist/index.d.cts +31 -0
  893. package/node_modules/prosemirror-gapcursor/dist/index.d.ts +31 -0
  894. package/node_modules/prosemirror-gapcursor/dist/index.js +239 -0
  895. package/node_modules/prosemirror-gapcursor/package.json +43 -0
  896. package/node_modules/prosemirror-gapcursor/src/README.md +21 -0
  897. package/node_modules/prosemirror-gapcursor/src/gapcursor.ts +141 -0
  898. package/node_modules/prosemirror-gapcursor/src/index.ts +91 -0
  899. package/node_modules/prosemirror-gapcursor/style/gapcursor.css +25 -0
  900. package/node_modules/prosemirror-history/.tern-project +8 -0
  901. package/node_modules/prosemirror-history/CHANGELOG.md +170 -0
  902. package/node_modules/prosemirror-history/CONTRIBUTING.md +104 -0
  903. package/node_modules/prosemirror-history/LICENSE +19 -0
  904. package/node_modules/prosemirror-history/README.md +27 -0
  905. package/node_modules/prosemirror-history/dist/index.cjs +382 -0
  906. package/node_modules/prosemirror-history/dist/index.d.cts +64 -0
  907. package/node_modules/prosemirror-history/dist/index.d.ts +64 -0
  908. package/node_modules/prosemirror-history/dist/index.js +453 -0
  909. package/node_modules/prosemirror-history/package.json +40 -0
  910. package/node_modules/prosemirror-history/src/README.md +23 -0
  911. package/node_modules/prosemirror-history/src/history.ts +465 -0
  912. package/node_modules/prosemirror-inputrules/.tern-project +8 -0
  913. package/node_modules/prosemirror-inputrules/CHANGELOG.md +127 -0
  914. package/node_modules/prosemirror-inputrules/CONTRIBUTING.md +104 -0
  915. package/node_modules/prosemirror-inputrules/LICENSE +19 -0
  916. package/node_modules/prosemirror-inputrules/README.md +29 -0
  917. package/node_modules/prosemirror-inputrules/dist/index.cjs +194 -0
  918. package/node_modules/prosemirror-inputrules/dist/index.d.cts +131 -0
  919. package/node_modules/prosemirror-inputrules/dist/index.d.ts +131 -0
  920. package/node_modules/prosemirror-inputrules/dist/index.js +239 -0
  921. package/node_modules/prosemirror-inputrules/package.json +36 -0
  922. package/node_modules/prosemirror-inputrules/src/README.md +23 -0
  923. package/node_modules/prosemirror-inputrules/src/index.ts +4 -0
  924. package/node_modules/prosemirror-inputrules/src/inputrules.ts +167 -0
  925. package/node_modules/prosemirror-inputrules/src/rulebuilders.ts +59 -0
  926. package/node_modules/prosemirror-inputrules/src/rules.ts +17 -0
  927. package/node_modules/prosemirror-keymap/.tern-project +8 -0
  928. package/node_modules/prosemirror-keymap/CHANGELOG.md +104 -0
  929. package/node_modules/prosemirror-keymap/CONTRIBUTING.md +104 -0
  930. package/node_modules/prosemirror-keymap/LICENSE +19 -0
  931. package/node_modules/prosemirror-keymap/README.md +27 -0
  932. package/node_modules/prosemirror-keymap/dist/index.cjs +65 -0
  933. package/node_modules/prosemirror-keymap/dist/index.d.cts +47 -0
  934. package/node_modules/prosemirror-keymap/dist/index.d.ts +47 -0
  935. package/node_modules/prosemirror-keymap/dist/index.js +128 -0
  936. package/node_modules/prosemirror-keymap/package.json +38 -0
  937. package/node_modules/prosemirror-keymap/src/README.md +5 -0
  938. package/node_modules/prosemirror-keymap/src/keymap.ts +105 -0
  939. package/node_modules/prosemirror-markdown/.tern-project +8 -0
  940. package/node_modules/prosemirror-markdown/CHANGELOG.md +311 -0
  941. package/node_modules/prosemirror-markdown/CONTRIBUTING.md +100 -0
  942. package/node_modules/prosemirror-markdown/LICENSE +19 -0
  943. package/node_modules/prosemirror-markdown/README.md +276 -0
  944. package/node_modules/prosemirror-markdown/dist/index.cjs +966 -0
  945. package/node_modules/prosemirror-markdown/dist/index.d.cts +335 -0
  946. package/node_modules/prosemirror-markdown/dist/index.d.ts +335 -0
  947. package/node_modules/prosemirror-markdown/dist/index.js +878 -0
  948. package/node_modules/prosemirror-markdown/package.json +40 -0
  949. package/node_modules/prosemirror-markdown/src/README.md +42 -0
  950. package/node_modules/prosemirror-markdown/src/from_markdown.ts +272 -0
  951. package/node_modules/prosemirror-markdown/src/index.ts +5 -0
  952. package/node_modules/prosemirror-markdown/src/schema.ts +156 -0
  953. package/node_modules/prosemirror-markdown/src/to_markdown.ts +483 -0
  954. package/node_modules/prosemirror-menu/.tern-project +8 -0
  955. package/node_modules/prosemirror-menu/CHANGELOG.md +107 -0
  956. package/node_modules/prosemirror-menu/CONTRIBUTING.md +100 -0
  957. package/node_modules/prosemirror-menu/LICENSE +19 -0
  958. package/node_modules/prosemirror-menu/README.md +235 -0
  959. package/node_modules/prosemirror-menu/dist/index.cjs +798 -0
  960. package/node_modules/prosemirror-menu/dist/index.d.cts +281 -0
  961. package/node_modules/prosemirror-menu/dist/index.d.ts +281 -0
  962. package/node_modules/prosemirror-menu/dist/index.js +795 -0
  963. package/node_modules/prosemirror-menu/package.json +42 -0
  964. package/node_modules/prosemirror-menu/src/README.md +60 -0
  965. package/node_modules/prosemirror-menu/src/icons.ts +53 -0
  966. package/node_modules/prosemirror-menu/src/index.ts +4 -0
  967. package/node_modules/prosemirror-menu/src/menu.ts +628 -0
  968. package/node_modules/prosemirror-menu/src/menubar.ts +210 -0
  969. package/node_modules/prosemirror-menu/style/menu.css +169 -0
  970. package/node_modules/prosemirror-model/.tern-project +8 -0
  971. package/node_modules/prosemirror-model/CHANGELOG.md +730 -0
  972. package/node_modules/prosemirror-model/CONTRIBUTING.md +104 -0
  973. package/node_modules/prosemirror-model/LICENSE +19 -0
  974. package/node_modules/prosemirror-model/README.md +29 -0
  975. package/node_modules/prosemirror-model/dist/index.cjs +2898 -0
  976. package/node_modules/prosemirror-model/dist/index.d.cts +1679 -0
  977. package/node_modules/prosemirror-model/dist/index.d.ts +1679 -0
  978. package/node_modules/prosemirror-model/dist/index.js +3464 -0
  979. package/node_modules/prosemirror-model/package.json +38 -0
  980. package/node_modules/prosemirror-model/src/README.md +62 -0
  981. package/node_modules/prosemirror-model/src/comparedeep.ts +15 -0
  982. package/node_modules/prosemirror-model/src/content.ts +413 -0
  983. package/node_modules/prosemirror-model/src/diff.ts +52 -0
  984. package/node_modules/prosemirror-model/src/dom.ts +1 -0
  985. package/node_modules/prosemirror-model/src/fragment.ts +268 -0
  986. package/node_modules/prosemirror-model/src/from_dom.ts +848 -0
  987. package/node_modules/prosemirror-model/src/index.ts +11 -0
  988. package/node_modules/prosemirror-model/src/mark.ts +111 -0
  989. package/node_modules/prosemirror-model/src/node.ts +402 -0
  990. package/node_modules/prosemirror-model/src/replace.ts +225 -0
  991. package/node_modules/prosemirror-model/src/resolvedpos.ts +289 -0
  992. package/node_modules/prosemirror-model/src/schema.ts +705 -0
  993. package/node_modules/prosemirror-model/src/to_dom.ts +238 -0
  994. package/node_modules/prosemirror-schema-basic/.tern-project +8 -0
  995. package/node_modules/prosemirror-schema-basic/CHANGELOG.md +81 -0
  996. package/node_modules/prosemirror-schema-basic/CONTRIBUTING.md +100 -0
  997. package/node_modules/prosemirror-schema-basic/LICENSE +19 -0
  998. package/node_modules/prosemirror-schema-basic/README.md +28 -0
  999. package/node_modules/prosemirror-schema-basic/dist/index.cjs +246 -0
  1000. package/node_modules/prosemirror-schema-basic/dist/index.d.cts +87 -0
  1001. package/node_modules/prosemirror-schema-basic/dist/index.d.ts +87 -0
  1002. package/node_modules/prosemirror-schema-basic/dist/index.js +183 -0
  1003. package/node_modules/prosemirror-schema-basic/package.json +37 -0
  1004. package/node_modules/prosemirror-schema-basic/src/README.md +8 -0
  1005. package/node_modules/prosemirror-schema-basic/src/schema-basic.ts +166 -0
  1006. package/node_modules/prosemirror-schema-list/.tern-project +8 -0
  1007. package/node_modules/prosemirror-schema-list/CHANGELOG.md +140 -0
  1008. package/node_modules/prosemirror-schema-list/CONTRIBUTING.md +100 -0
  1009. package/node_modules/prosemirror-schema-list/LICENSE +19 -0
  1010. package/node_modules/prosemirror-schema-list/README.md +28 -0
  1011. package/node_modules/prosemirror-schema-list/dist/index.cjs +253 -0
  1012. package/node_modules/prosemirror-schema-list/dist/index.d.cts +71 -0
  1013. package/node_modules/prosemirror-schema-list/dist/index.d.ts +71 -0
  1014. package/node_modules/prosemirror-schema-list/dist/index.js +289 -0
  1015. package/node_modules/prosemirror-schema-list/package.json +40 -0
  1016. package/node_modules/prosemirror-schema-list/src/README.md +29 -0
  1017. package/node_modules/prosemirror-schema-list/src/schema-list.ts +267 -0
  1018. package/node_modules/prosemirror-state/.tern-project +8 -0
  1019. package/node_modules/prosemirror-state/CHANGELOG.md +296 -0
  1020. package/node_modules/prosemirror-state/CONTRIBUTING.md +104 -0
  1021. package/node_modules/prosemirror-state/LICENSE +19 -0
  1022. package/node_modules/prosemirror-state/README.md +28 -0
  1023. package/node_modules/prosemirror-state/dist/index.cjs +884 -0
  1024. package/node_modules/prosemirror-state/dist/index.d.cts +709 -0
  1025. package/node_modules/prosemirror-state/dist/index.d.ts +709 -0
  1026. package/node_modules/prosemirror-state/dist/index.js +1002 -0
  1027. package/node_modules/prosemirror-state/package.json +39 -0
  1028. package/node_modules/prosemirror-state/src/README.md +42 -0
  1029. package/node_modules/prosemirror-state/src/index.ts +7 -0
  1030. package/node_modules/prosemirror-state/src/plugin.ts +142 -0
  1031. package/node_modules/prosemirror-state/src/selection.ts +462 -0
  1032. package/node_modules/prosemirror-state/src/state.ts +266 -0
  1033. package/node_modules/prosemirror-state/src/transaction.ts +215 -0
  1034. package/node_modules/prosemirror-tables/LICENSE +19 -0
  1035. package/node_modules/prosemirror-tables/README.md +254 -0
  1036. package/node_modules/prosemirror-tables/dist/index.cjs +2683 -0
  1037. package/node_modules/prosemirror-tables/dist/index.d.cts +751 -0
  1038. package/node_modules/prosemirror-tables/dist/index.d.cts.map +1 -0
  1039. package/node_modules/prosemirror-tables/dist/index.d.ts +751 -0
  1040. package/node_modules/prosemirror-tables/dist/index.d.ts.map +1 -0
  1041. package/node_modules/prosemirror-tables/dist/index.js +2626 -0
  1042. package/node_modules/prosemirror-tables/dist/index.js.map +1 -0
  1043. package/node_modules/prosemirror-tables/package.json +80 -0
  1044. package/node_modules/prosemirror-tables/style/tables.css +48 -0
  1045. package/node_modules/prosemirror-trailing-node/LICENSE +21 -0
  1046. package/node_modules/prosemirror-trailing-node/dist/_tsup-dts-rollup.d.cts +41 -0
  1047. package/node_modules/prosemirror-trailing-node/dist/_tsup-dts-rollup.d.ts +41 -0
  1048. package/node_modules/prosemirror-trailing-node/dist/prosemirror-trailing-node.cjs +70 -0
  1049. package/node_modules/prosemirror-trailing-node/dist/prosemirror-trailing-node.d.cts +2 -0
  1050. package/node_modules/prosemirror-trailing-node/dist/prosemirror-trailing-node.d.ts +2 -0
  1051. package/node_modules/prosemirror-trailing-node/dist/prosemirror-trailing-node.js +43 -0
  1052. package/node_modules/prosemirror-trailing-node/dist-types/index.d.ts +2 -0
  1053. package/node_modules/prosemirror-trailing-node/dist-types/trailing-node-plugin.d.ts +33 -0
  1054. package/node_modules/prosemirror-trailing-node/dist-types/tsconfig.tsbuildinfo +1 -0
  1055. package/node_modules/prosemirror-trailing-node/package.json +57 -0
  1056. package/node_modules/prosemirror-trailing-node/readme.md +55 -0
  1057. package/node_modules/prosemirror-transform/.tern-project +8 -0
  1058. package/node_modules/prosemirror-transform/CHANGELOG.md +502 -0
  1059. package/node_modules/prosemirror-transform/CONTRIBUTING.md +104 -0
  1060. package/node_modules/prosemirror-transform/LICENSE +19 -0
  1061. package/node_modules/prosemirror-transform/README.md +29 -0
  1062. package/node_modules/prosemirror-transform/dist/index.cjs +1888 -0
  1063. package/node_modules/prosemirror-transform/dist/index.d.cts +847 -0
  1064. package/node_modules/prosemirror-transform/dist/index.d.ts +847 -0
  1065. package/node_modules/prosemirror-transform/dist/index.js +2181 -0
  1066. package/node_modules/prosemirror-transform/package.json +37 -0
  1067. package/node_modules/prosemirror-transform/src/README.md +59 -0
  1068. package/node_modules/prosemirror-transform/src/attr_step.ts +98 -0
  1069. package/node_modules/prosemirror-transform/src/index.ts +11 -0
  1070. package/node_modules/prosemirror-transform/src/map.ts +284 -0
  1071. package/node_modules/prosemirror-transform/src/mark.ts +106 -0
  1072. package/node_modules/prosemirror-transform/src/mark_step.ts +224 -0
  1073. package/node_modules/prosemirror-transform/src/replace.ts +460 -0
  1074. package/node_modules/prosemirror-transform/src/replace_step.ts +178 -0
  1075. package/node_modules/prosemirror-transform/src/step.ts +97 -0
  1076. package/node_modules/prosemirror-transform/src/structure.ts +349 -0
  1077. package/node_modules/prosemirror-transform/src/transform.ts +271 -0
  1078. package/node_modules/prosemirror-view/.tern-project +8 -0
  1079. package/node_modules/prosemirror-view/CHANGELOG.md +2447 -0
  1080. package/node_modules/prosemirror-view/CONTRIBUTING.md +104 -0
  1081. package/node_modules/prosemirror-view/LICENSE +19 -0
  1082. package/node_modules/prosemirror-view/README.md +28 -0
  1083. package/node_modules/prosemirror-view/dist/index.cjs +5381 -0
  1084. package/node_modules/prosemirror-view/dist/index.d.cts +904 -0
  1085. package/node_modules/prosemirror-view/dist/index.d.ts +904 -0
  1086. package/node_modules/prosemirror-view/dist/index.js +5900 -0
  1087. package/node_modules/prosemirror-view/package.json +43 -0
  1088. package/node_modules/prosemirror-view/src/README.md +38 -0
  1089. package/node_modules/prosemirror-view/src/browser.ts +24 -0
  1090. package/node_modules/prosemirror-view/src/capturekeys.ts +345 -0
  1091. package/node_modules/prosemirror-view/src/clipboard.ts +263 -0
  1092. package/node_modules/prosemirror-view/src/decoration.ts +793 -0
  1093. package/node_modules/prosemirror-view/src/dom.ts +159 -0
  1094. package/node_modules/prosemirror-view/src/domchange.ts +383 -0
  1095. package/node_modules/prosemirror-view/src/domcoords.ts +515 -0
  1096. package/node_modules/prosemirror-view/src/domobserver.ts +392 -0
  1097. package/node_modules/prosemirror-view/src/index.ts +825 -0
  1098. package/node_modules/prosemirror-view/src/input.ts +830 -0
  1099. package/node_modules/prosemirror-view/src/selection.ts +216 -0
  1100. package/node_modules/prosemirror-view/src/viewdesc.ts +1590 -0
  1101. package/node_modules/prosemirror-view/style/prosemirror.css +54 -0
  1102. package/node_modules/punycode.js/LICENSE-MIT.txt +20 -0
  1103. package/node_modules/punycode.js/README.md +148 -0
  1104. package/node_modules/punycode.js/package.json +58 -0
  1105. package/node_modules/punycode.js/punycode.es6.js +444 -0
  1106. package/node_modules/punycode.js/punycode.js +443 -0
  1107. package/node_modules/rope-sequence/LICENSE +19 -0
  1108. package/node_modules/rope-sequence/README.md +63 -0
  1109. package/node_modules/rope-sequence/dist/index.cjs +209 -0
  1110. package/node_modules/rope-sequence/dist/index.d.cts +11 -0
  1111. package/node_modules/rope-sequence/dist/index.d.ts +11 -0
  1112. package/node_modules/rope-sequence/dist/index.js +207 -0
  1113. package/node_modules/rope-sequence/index.js +190 -0
  1114. package/node_modules/rope-sequence/package.json +34 -0
  1115. package/node_modules/rope-sequence/test.js +78 -0
  1116. package/node_modules/uc.micro/LICENSE.txt +20 -0
  1117. package/node_modules/uc.micro/README.md +14 -0
  1118. package/node_modules/uc.micro/build/index.cjs.js +20 -0
  1119. package/node_modules/uc.micro/categories/Cc/regex.mjs +1 -0
  1120. package/node_modules/uc.micro/categories/Cf/regex.mjs +1 -0
  1121. package/node_modules/uc.micro/categories/P/regex.mjs +1 -0
  1122. package/node_modules/uc.micro/categories/S/regex.mjs +1 -0
  1123. package/node_modules/uc.micro/categories/Z/regex.mjs +1 -0
  1124. package/node_modules/uc.micro/index.mjs +8 -0
  1125. package/node_modules/uc.micro/package.json +37 -0
  1126. package/node_modules/uc.micro/properties/Any/regex.mjs +1 -0
  1127. package/node_modules/use-sync-external-store/LICENSE +21 -0
  1128. package/node_modules/use-sync-external-store/README.md +5 -0
  1129. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +97 -0
  1130. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js +85 -0
  1131. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +95 -0
  1132. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.native.development.js +88 -0
  1133. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.native.production.js +59 -0
  1134. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +66 -0
  1135. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.development.js +96 -0
  1136. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js +84 -0
  1137. package/node_modules/use-sync-external-store/cjs/use-sync-external-store.development.js +27 -0
  1138. package/node_modules/use-sync-external-store/cjs/use-sync-external-store.production.js +13 -0
  1139. package/node_modules/use-sync-external-store/index.js +7 -0
  1140. package/node_modules/use-sync-external-store/package.json +43 -0
  1141. package/node_modules/use-sync-external-store/shim/index.js +7 -0
  1142. package/node_modules/use-sync-external-store/shim/index.native.js +7 -0
  1143. package/node_modules/use-sync-external-store/shim/with-selector.js +7 -0
  1144. package/node_modules/use-sync-external-store/with-selector.js +7 -0
  1145. package/node_modules/w3c-keyname/.tern-port +1 -0
  1146. package/node_modules/w3c-keyname/LICENSE +19 -0
  1147. package/node_modules/w3c-keyname/README.md +18 -0
  1148. package/node_modules/w3c-keyname/index.cjs +127 -0
  1149. package/node_modules/w3c-keyname/index.d.cts +5 -0
  1150. package/node_modules/w3c-keyname/index.d.ts +5 -0
  1151. package/node_modules/w3c-keyname/index.js +119 -0
  1152. package/node_modules/w3c-keyname/package.json +37 -0
  1153. package/package.json +120 -3
  1154. package/public-api.md +23 -2
  1155. package/dist/chat/tool-renderers/KbSearchRenderer.d.ts +0 -2
  1156. package/dist/chat/tool-renderers/kb-search-result.d.ts +0 -19
  1157. package/dist/chunk-6ZDOQEWK.js.map +0 -1
  1158. package/dist/chunk-FQQJP2GJ.js.map +0 -1
  1159. package/dist/lib/agent-computer-command.d.ts +0 -34
  1160. package/dist/rich-input/extensions/kb-mention.d.ts +0 -18
  1161. package/dist/rich-input/extensions/workflow-mention.d.ts +0 -10
  1162. package/dist/rich-input/lib/kb-suggestions.d.ts +0 -37
  1163. /package/dist/{chunk-WCMGQJLE.js.map → chunk-TY7DRU2R.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["readFromCache: (key: Node) => TableMap | undefined","addToCache: (key: Node, value: TableMap) => TableMap","cache: (Node | TableMap)[]","width: number","height: number","map: number[]","problems: Problem[] | null","result: number[]","seen: Record<number, boolean>","colWidths: ColWidths","result: ColWidths","result: MutableAttrs","attrs: MutableAttrs","cellAttrs: Record<string, AttributeSpec>","result: CellAttrs","seen: Record<number, boolean>","anchor: number","head: number","cells: Decoration[]","fromCellBoundaryNode: Node | undefined","toCellBoundaryNode: Node | undefined","normalize: Selection | undefined","role: string | undefined","tr: Transaction | undefined","mustAdd: number[]","role: TableRole","nodes: Node[]","rows: (Node | null)[][]","colCount","row: (Node | null)[]","newRows: Node[]","oldRow: Node","newCells: Node[]","target: number","anchor: number","head: number","moveTableColumn","moveTableRow","refColumn: number | null","refRow: number | null","seen: Record<number, boolean>","mergedPos: number | undefined","mergedCell: Node | undefined","cellNode: Node | null | undefined","cellPos: number | undefined","toggleHeaderRow: Command","toggleHeaderColumn: Command","toggleHeaderCell: Command","widths: ColWidths","added: number[]","newRows: Fragment[]","cells: Node[]","add: Node","start","cellSel: CellSelection","handleMouseDown","$anchor","dirStr: 'up' | 'down' | 'left' | 'right'","node: Node","defaultCellMinWidth: number","col","activeHandle: number","dragging: Dragging | false","pluginState","event","dom: Node | null","handleMouseDown"],"sources":["../src/tablemap.ts","../src/schema.ts","../src/util.ts","../src/cellselection.ts","../src/fixtables.ts","../src/utils/convert.ts","../src/utils/move-row-in-array-of-rows.ts","../src/utils/query.ts","../src/utils/get-cells.ts","../src/utils/selection-range.ts","../src/utils/transpose.ts","../src/utils/move-column.ts","../src/utils/move-row.ts","../src/commands.ts","../src/copypaste.ts","../src/input.ts","../src/tableview.ts","../src/columnresizing.ts","../src/index.ts"],"sourcesContent":["// Because working with row and column-spanning cells is not quite\n// trivial, this code builds up a descriptive structure for a given\n// table node. The structures are cached with the (persistent) table\n// nodes as key, so that they only have to be recomputed when the\n// content of the table changes.\n//\n// This does mean that they have to store table-relative, not\n// document-relative positions. So code that uses them will typically\n// compute the start position of the table and offset positions passed\n// to or gotten from this structure by that amount.\nimport type { Attrs, Node } from 'prosemirror-model';\n\nimport type { CellAttrs } from './util';\n\n/**\n * @public\n */\nexport type ColWidths = number[];\n\n/**\n * @public\n */\nexport type Problem =\n | {\n type: 'colwidth mismatch';\n pos: number;\n colwidth: ColWidths;\n }\n | {\n type: 'collision';\n pos: number;\n row: number;\n n: number;\n }\n | {\n type: 'missing';\n row: number;\n n: number;\n }\n | {\n type: 'overlong_rowspan';\n pos: number;\n n: number;\n }\n | {\n type: 'zero_sized';\n };\n\nlet readFromCache: (key: Node) => TableMap | undefined;\nlet addToCache: (key: Node, value: TableMap) => TableMap;\n\n// Prefer using a weak map to cache table maps. Fall back on a\n// fixed-size cache if that's not supported.\nif (typeof WeakMap != 'undefined') {\n let cache = new WeakMap<Node, TableMap>();\n readFromCache = (key) => cache.get(key);\n addToCache = (key, value) => {\n cache.set(key, value);\n return value;\n };\n} else {\n const cache: (Node | TableMap)[] = [];\n const cacheSize = 10;\n let cachePos = 0;\n readFromCache = (key) => {\n for (let i = 0; i < cache.length; i += 2)\n if (cache[i] == key) return cache[i + 1] as TableMap;\n };\n addToCache = (key, value) => {\n if (cachePos == cacheSize) cachePos = 0;\n cache[cachePos++] = key;\n return (cache[cachePos++] = value);\n };\n}\n\n/**\n * @public\n */\nexport interface Rect {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\n/**\n * A table map describes the structure of a given table. To avoid\n * recomputing them all the time, they are cached per table node. To\n * be able to do that, positions saved in the map are relative to the\n * start of the table, rather than the start of the document.\n *\n * @public\n */\nexport class TableMap {\n constructor(\n /**\n * The number of columns\n */\n public width: number,\n /**\n * The number of rows\n */\n public height: number,\n /**\n * A width * height array with the start position of\n * the cell covering that part of the table in each slot\n */\n public map: number[],\n /**\n * An optional array of problems (cell overlap or non-rectangular\n * shape) for the table, used by the table normalizer.\n */\n public problems: Problem[] | null,\n ) {}\n\n // Find the dimensions of the cell at the given position.\n findCell(pos: number): Rect {\n for (let i = 0; i < this.map.length; i++) {\n const curPos = this.map[i];\n if (curPos != pos) continue;\n\n const left = i % this.width;\n const top = (i / this.width) | 0;\n let right = left + 1;\n let bottom = top + 1;\n\n for (let j = 1; right < this.width && this.map[i + j] == curPos; j++) {\n right++;\n }\n for (\n let j = 1;\n bottom < this.height && this.map[i + this.width * j] == curPos;\n j++\n ) {\n bottom++;\n }\n\n return { left, top, right, bottom };\n }\n throw new RangeError(`No cell with offset ${pos} found`);\n }\n\n // Find the left side of the cell at the given position.\n colCount(pos: number): number {\n for (let i = 0; i < this.map.length; i++) {\n if (this.map[i] == pos) {\n return i % this.width;\n }\n }\n throw new RangeError(`No cell with offset ${pos} found`);\n }\n\n // Find the next cell in the given direction, starting from the cell\n // at `pos`, if any.\n nextCell(pos: number, axis: 'horiz' | 'vert', dir: number): null | number {\n const { left, right, top, bottom } = this.findCell(pos);\n if (axis == 'horiz') {\n if (dir < 0 ? left == 0 : right == this.width) return null;\n return this.map[top * this.width + (dir < 0 ? left - 1 : right)];\n } else {\n if (dir < 0 ? top == 0 : bottom == this.height) return null;\n return this.map[left + this.width * (dir < 0 ? top - 1 : bottom)];\n }\n }\n\n // Get the rectangle spanning the two given cells.\n rectBetween(a: number, b: number): Rect {\n const {\n left: leftA,\n right: rightA,\n top: topA,\n bottom: bottomA,\n } = this.findCell(a);\n const {\n left: leftB,\n right: rightB,\n top: topB,\n bottom: bottomB,\n } = this.findCell(b);\n return {\n left: Math.min(leftA, leftB),\n top: Math.min(topA, topB),\n right: Math.max(rightA, rightB),\n bottom: Math.max(bottomA, bottomB),\n };\n }\n\n // Return the position of all cells that have the top left corner in\n // the given rectangle.\n cellsInRect(rect: Rect): number[] {\n const result: number[] = [];\n const seen: Record<number, boolean> = {};\n for (let row = rect.top; row < rect.bottom; row++) {\n for (let col = rect.left; col < rect.right; col++) {\n const index = row * this.width + col;\n const pos = this.map[index];\n\n if (seen[pos]) continue;\n seen[pos] = true;\n\n if (\n (col == rect.left && col && this.map[index - 1] == pos) ||\n (row == rect.top && row && this.map[index - this.width] == pos)\n ) {\n continue;\n }\n result.push(pos);\n }\n }\n return result;\n }\n\n // Return the position at which the cell at the given row and column\n // starts, or would start, if a cell started there.\n positionAt(row: number, col: number, table: Node): number {\n for (let i = 0, rowStart = 0; ; i++) {\n const rowEnd = rowStart + table.child(i).nodeSize;\n if (i == row) {\n let index = col + row * this.width;\n const rowEndIndex = (row + 1) * this.width;\n // Skip past cells from previous rows (via rowspan)\n while (index < rowEndIndex && this.map[index] < rowStart) index++;\n return index == rowEndIndex ? rowEnd - 1 : this.map[index];\n }\n rowStart = rowEnd;\n }\n }\n\n // Find the table map for the given table node.\n static get(table: Node): TableMap {\n return readFromCache(table) || addToCache(table, computeMap(table));\n }\n}\n\n// Compute a table map.\nfunction computeMap(table: Node): TableMap {\n if (table.type.spec.tableRole != 'table')\n throw new RangeError('Not a table node: ' + table.type.name);\n const width = findWidth(table),\n height = table.childCount;\n const map = [];\n let mapPos = 0;\n let problems: Problem[] | null = null;\n const colWidths: ColWidths = [];\n for (let i = 0, e = width * height; i < e; i++) map[i] = 0;\n\n for (let row = 0, pos = 0; row < height; row++) {\n const rowNode = table.child(row);\n pos++;\n for (let i = 0; ; i++) {\n while (mapPos < map.length && map[mapPos] != 0) mapPos++;\n if (i == rowNode.childCount) break;\n const cellNode = rowNode.child(i);\n const { colspan, rowspan, colwidth } = cellNode.attrs;\n for (let h = 0; h < rowspan; h++) {\n if (h + row >= height) {\n (problems || (problems = [])).push({\n type: 'overlong_rowspan',\n pos,\n n: rowspan - h,\n });\n break;\n }\n const start = mapPos + h * width;\n for (let w = 0; w < colspan; w++) {\n if (map[start + w] == 0) map[start + w] = pos;\n else\n (problems || (problems = [])).push({\n type: 'collision',\n row,\n pos,\n n: colspan - w,\n });\n const colW = colwidth && colwidth[w];\n if (colW) {\n const widthIndex = ((start + w) % width) * 2,\n prev = colWidths[widthIndex];\n if (\n prev == null ||\n (prev != colW && colWidths[widthIndex + 1] == 1)\n ) {\n colWidths[widthIndex] = colW;\n colWidths[widthIndex + 1] = 1;\n } else if (prev == colW) {\n colWidths[widthIndex + 1]++;\n }\n }\n }\n }\n mapPos += colspan;\n pos += cellNode.nodeSize;\n }\n const expectedPos = (row + 1) * width;\n let missing = 0;\n while (mapPos < expectedPos) if (map[mapPos++] == 0) missing++;\n if (missing)\n (problems || (problems = [])).push({ type: 'missing', row, n: missing });\n pos++;\n }\n\n if (width === 0 || height === 0)\n (problems || (problems = [])).push({ type: 'zero_sized' });\n\n const tableMap = new TableMap(width, height, map, problems);\n let badWidths = false;\n\n // For columns that have defined widths, but whose widths disagree\n // between rows, fix up the cells whose width doesn't match the\n // computed one.\n for (let i = 0; !badWidths && i < colWidths.length; i += 2)\n if (colWidths[i] != null && colWidths[i + 1] < height) badWidths = true;\n if (badWidths) findBadColWidths(tableMap, colWidths, table);\n\n return tableMap;\n}\n\nfunction findWidth(table: Node): number {\n let width = -1;\n let hasRowSpan = false;\n for (let row = 0; row < table.childCount; row++) {\n const rowNode = table.child(row);\n let rowWidth = 0;\n if (hasRowSpan)\n for (let j = 0; j < row; j++) {\n const prevRow = table.child(j);\n for (let i = 0; i < prevRow.childCount; i++) {\n const cell = prevRow.child(i);\n if (j + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan;\n }\n }\n for (let i = 0; i < rowNode.childCount; i++) {\n const cell = rowNode.child(i);\n rowWidth += cell.attrs.colspan;\n if (cell.attrs.rowspan > 1) hasRowSpan = true;\n }\n if (width == -1) width = rowWidth;\n else if (width != rowWidth) width = Math.max(width, rowWidth);\n }\n return width;\n}\n\nfunction findBadColWidths(\n map: TableMap,\n colWidths: ColWidths,\n table: Node,\n): void {\n if (!map.problems) map.problems = [];\n const seen: Record<number, boolean> = {};\n for (let i = 0; i < map.map.length; i++) {\n const pos = map.map[i];\n if (seen[pos]) continue;\n seen[pos] = true;\n const node = table.nodeAt(pos);\n if (!node) {\n throw new RangeError(`No cell with offset ${pos} found`);\n }\n\n let updated = null;\n const attrs = node.attrs as CellAttrs;\n for (let j = 0; j < attrs.colspan; j++) {\n const col = (i + j) % map.width;\n const colWidth = colWidths[col * 2];\n if (\n colWidth != null &&\n (!attrs.colwidth || attrs.colwidth[j] != colWidth)\n )\n (updated || (updated = freshColWidth(attrs)))[j] = colWidth;\n }\n if (updated)\n map.problems.unshift({\n type: 'colwidth mismatch',\n pos,\n colwidth: updated,\n });\n }\n}\n\nfunction freshColWidth(attrs: Attrs): ColWidths {\n if (attrs.colwidth) return attrs.colwidth.slice();\n const result: ColWidths = [];\n for (let i = 0; i < attrs.colspan; i++) result.push(0);\n return result;\n}\n","// Helper for creating a schema that supports tables.\n\nimport type {\n AttributeSpec,\n Attrs,\n Node,\n NodeSpec,\n NodeType,\n Schema,\n} from 'prosemirror-model';\n\nimport type { CellAttrs, MutableAttrs } from './util';\n\nfunction getCellAttrs(dom: HTMLElement | string, extraAttrs: Attrs): Attrs {\n if (typeof dom === 'string') {\n return {};\n }\n\n const widthAttr = dom.getAttribute('data-colwidth');\n const widths =\n widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr)\n ? widthAttr.split(',').map((s) => Number(s))\n : null;\n const colspan = Number(dom.getAttribute('colspan') || 1);\n const result: MutableAttrs = {\n colspan,\n rowspan: Number(dom.getAttribute('rowspan') || 1),\n colwidth: widths && widths.length == colspan ? widths : null,\n } satisfies CellAttrs;\n for (const prop in extraAttrs) {\n const getter = extraAttrs[prop].getFromDOM;\n const value = getter && getter(dom);\n if (value != null) {\n result[prop] = value;\n }\n }\n return result;\n}\n\nfunction setCellAttrs(node: Node, extraAttrs: Attrs): Attrs {\n const attrs: MutableAttrs = {};\n if (node.attrs.colspan != 1) attrs.colspan = node.attrs.colspan;\n if (node.attrs.rowspan != 1) attrs.rowspan = node.attrs.rowspan;\n if (node.attrs.colwidth)\n attrs['data-colwidth'] = node.attrs.colwidth.join(',');\n for (const prop in extraAttrs) {\n const setter = extraAttrs[prop].setDOMAttr;\n if (setter) setter(node.attrs[prop], attrs);\n }\n return attrs;\n}\n\n/**\n * @public\n */\nexport type getFromDOM = (dom: HTMLElement) => unknown;\n\n/**\n * @public\n */\nexport type setDOMAttr = (value: unknown, attrs: MutableAttrs) => void;\n\n/**\n * @public\n */\nexport interface CellAttributes {\n /**\n * The attribute's default value.\n */\n default: unknown;\n\n /**\n * A function or type name used to validate values of this attribute.\n *\n * See [validate](https://prosemirror.net/docs/ref/#model.AttributeSpec.validate).\n */\n validate?: string | ((value: unknown) => void);\n\n /**\n * A function to read the attribute's value from a DOM node.\n */\n getFromDOM?: getFromDOM;\n\n /**\n * A function to add the attribute's value to an attribute\n * object that's used to render the cell's DOM.\n */\n setDOMAttr?: setDOMAttr;\n}\n\n/**\n * @public\n */\nexport interface TableNodesOptions {\n /**\n * A group name (something like `\"block\"`) to add to the table\n * node type.\n */\n tableGroup?: string;\n\n /**\n * The content expression for table cells.\n */\n cellContent: string;\n\n /**\n * Additional attributes to add to cells. Maps attribute names to\n * objects with the following properties:\n */\n cellAttributes: { [key: string]: CellAttributes };\n}\n\n/**\n * @public\n */\nexport type TableNodes = Record<\n 'table' | 'table_row' | 'table_cell' | 'table_header',\n NodeSpec\n>;\n\nfunction validateColwidth(value: unknown) {\n if (value === null) {\n return;\n }\n if (!Array.isArray(value)) {\n throw new TypeError('colwidth must be null or an array');\n }\n for (const item of value) {\n if (typeof item !== 'number') {\n throw new TypeError('colwidth must be null or an array of numbers');\n }\n }\n}\n\n/**\n * This function creates a set of [node\n * specs](http://prosemirror.net/docs/ref/#model.SchemaSpec.nodes) for\n * `table`, `table_row`, and `table_cell` nodes types as used by this\n * module. The result can then be added to the set of nodes when\n * creating a schema.\n *\n * @public\n */\nexport function tableNodes(options: TableNodesOptions): TableNodes {\n const extraAttrs = options.cellAttributes || {};\n const cellAttrs: Record<string, AttributeSpec> = {\n colspan: { default: 1, validate: 'number' },\n rowspan: { default: 1, validate: 'number' },\n colwidth: { default: null, validate: validateColwidth },\n };\n for (const prop in extraAttrs)\n cellAttrs[prop] = {\n default: extraAttrs[prop].default,\n validate: extraAttrs[prop].validate,\n };\n\n return {\n table: {\n content: 'table_row+',\n tableRole: 'table',\n isolating: true,\n group: options.tableGroup,\n parseDOM: [{ tag: 'table' }],\n toDOM() {\n return ['table', ['tbody', 0]];\n },\n },\n table_row: {\n content: '(table_cell | table_header)*',\n tableRole: 'row',\n parseDOM: [{ tag: 'tr' }],\n toDOM() {\n return ['tr', 0];\n },\n },\n table_cell: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: 'cell',\n isolating: true,\n parseDOM: [\n { tag: 'td', getAttrs: (dom) => getCellAttrs(dom, extraAttrs) },\n ],\n toDOM(node) {\n return ['td', setCellAttrs(node, extraAttrs), 0];\n },\n },\n table_header: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: 'header_cell',\n isolating: true,\n parseDOM: [\n { tag: 'th', getAttrs: (dom) => getCellAttrs(dom, extraAttrs) },\n ],\n toDOM(node) {\n return ['th', setCellAttrs(node, extraAttrs), 0];\n },\n },\n };\n}\n\n/**\n * @public\n */\nexport type TableRole = 'table' | 'row' | 'cell' | 'header_cell';\n\n/**\n * @public\n */\nexport function tableNodeTypes(schema: Schema): Record<TableRole, NodeType> {\n let result = schema.cached.tableNodeTypes;\n if (!result) {\n result = schema.cached.tableNodeTypes = {};\n for (const name in schema.nodes) {\n const type = schema.nodes[name],\n role = type.spec.tableRole;\n if (role) result[role] = type;\n }\n }\n return result;\n}\n","// Various helper function for working with tables\n\nimport type { Attrs, Node, ResolvedPos } from 'prosemirror-model';\nimport type { EditorState, NodeSelection } from 'prosemirror-state';\nimport { PluginKey } from 'prosemirror-state';\n\nimport type { CellSelection } from './cellselection';\nimport { tableNodeTypes } from './schema';\nimport type { Rect } from './tablemap';\nimport { TableMap } from './tablemap';\n\n/**\n * @public\n */\nexport type MutableAttrs = Record<string, unknown>;\n\n/**\n * @public\n */\nexport interface CellAttrs {\n colspan: number;\n rowspan: number;\n colwidth: number[] | null;\n}\n\n/**\n * @public\n */\nexport const tableEditingKey = new PluginKey<number>('selectingCells');\n\n/**\n * @public\n */\nexport function cellAround($pos: ResolvedPos): ResolvedPos | null {\n for (let d = $pos.depth - 1; d > 0; d--)\n if ($pos.node(d).type.spec.tableRole == 'row')\n return $pos.node(0).resolve($pos.before(d + 1));\n return null;\n}\n\nexport function cellWrapping($pos: ResolvedPos): null | Node {\n for (let d = $pos.depth; d > 0; d--) {\n // Sometimes the cell can be in the same depth.\n const role = $pos.node(d).type.spec.tableRole;\n if (role === 'cell' || role === 'header_cell') return $pos.node(d);\n }\n return null;\n}\n\n/**\n * @public\n */\nexport function isInTable(state: EditorState): boolean {\n const $head = state.selection.$head;\n for (let d = $head.depth; d > 0; d--)\n if ($head.node(d).type.spec.tableRole == 'row') return true;\n return false;\n}\n\n/**\n * @internal\n */\nexport function selectionCell(state: EditorState): ResolvedPos {\n const sel = state.selection as CellSelection | NodeSelection;\n if ('$anchorCell' in sel && sel.$anchorCell) {\n return sel.$anchorCell.pos > sel.$headCell.pos\n ? sel.$anchorCell\n : sel.$headCell;\n } else if (\n 'node' in sel &&\n sel.node &&\n sel.node.type.spec.tableRole == 'cell'\n ) {\n return sel.$anchor;\n }\n const $cell = cellAround(sel.$head) || cellNear(sel.$head);\n if ($cell) {\n return $cell;\n }\n throw new RangeError(`No cell found around position ${sel.head}`);\n}\n\n/**\n * @public\n */\nexport function cellNear($pos: ResolvedPos): ResolvedPos | undefined {\n for (\n let after = $pos.nodeAfter, pos = $pos.pos;\n after;\n after = after.firstChild, pos++\n ) {\n const role = after.type.spec.tableRole;\n if (role == 'cell' || role == 'header_cell') return $pos.doc.resolve(pos);\n }\n for (\n let before = $pos.nodeBefore, pos = $pos.pos;\n before;\n before = before.lastChild, pos--\n ) {\n const role = before.type.spec.tableRole;\n if (role == 'cell' || role == 'header_cell')\n return $pos.doc.resolve(pos - before.nodeSize);\n }\n}\n\n/**\n * @public\n */\nexport function pointsAtCell($pos: ResolvedPos): boolean {\n return $pos.parent.type.spec.tableRole == 'row' && !!$pos.nodeAfter;\n}\n\n/**\n * @public\n */\nexport function moveCellForward($pos: ResolvedPos): ResolvedPos {\n return $pos.node(0).resolve($pos.pos + $pos.nodeAfter!.nodeSize);\n}\n\n/**\n * @internal\n */\nexport function inSameTable($cellA: ResolvedPos, $cellB: ResolvedPos): boolean {\n return (\n $cellA.depth == $cellB.depth &&\n $cellA.pos >= $cellB.start(-1) &&\n $cellA.pos <= $cellB.end(-1)\n );\n}\n\n/**\n * @public\n */\nexport function findCell($pos: ResolvedPos): Rect {\n return TableMap.get($pos.node(-1)).findCell($pos.pos - $pos.start(-1));\n}\n\n/**\n * @public\n */\nexport function colCount($pos: ResolvedPos): number {\n return TableMap.get($pos.node(-1)).colCount($pos.pos - $pos.start(-1));\n}\n\n/**\n * @public\n */\nexport function nextCell(\n $pos: ResolvedPos,\n axis: 'horiz' | 'vert',\n dir: number,\n): ResolvedPos | null {\n const table = $pos.node(-1);\n const map = TableMap.get(table);\n const tableStart = $pos.start(-1);\n\n const moved = map.nextCell($pos.pos - tableStart, axis, dir);\n return moved == null ? null : $pos.node(0).resolve(tableStart + moved);\n}\n\n/**\n * @public\n */\nexport function removeColSpan(attrs: CellAttrs, pos: number, n = 1): CellAttrs {\n const result: CellAttrs = { ...attrs, colspan: attrs.colspan - n };\n\n if (result.colwidth) {\n result.colwidth = result.colwidth.slice();\n result.colwidth.splice(pos, n);\n if (!result.colwidth.some((w) => w > 0)) result.colwidth = null;\n }\n return result;\n}\n\n/**\n * @public\n */\nexport function addColSpan(attrs: CellAttrs, pos: number, n = 1): Attrs {\n const result = { ...attrs, colspan: attrs.colspan + n };\n if (result.colwidth) {\n result.colwidth = result.colwidth.slice();\n for (let i = 0; i < n; i++) result.colwidth.splice(pos, 0, 0);\n }\n return result;\n}\n\n/**\n * @public\n */\nexport function columnIsHeader(\n map: TableMap,\n table: Node,\n col: number,\n): boolean {\n const headerCell = tableNodeTypes(table.type.schema).header_cell;\n for (let row = 0; row < map.height; row++)\n if (table.nodeAt(map.map[col + row * map.width])!.type != headerCell)\n return false;\n return true;\n}\n","// This file defines a ProseMirror selection subclass that models\n// table cell selections. The table plugin needs to be active to wire\n// in the user interaction part of table selections (so that you\n// actually get such selections when you select across cells).\n\nimport type { Node, ResolvedPos } from 'prosemirror-model';\nimport { Fragment, Slice } from 'prosemirror-model';\nimport type { EditorState, Transaction } from 'prosemirror-state';\nimport {\n NodeSelection,\n Selection,\n SelectionRange,\n TextSelection,\n} from 'prosemirror-state';\nimport type { Mappable } from 'prosemirror-transform';\nimport type { DecorationSource } from 'prosemirror-view';\nimport { Decoration, DecorationSet } from 'prosemirror-view';\n\nimport { TableMap } from './tablemap';\nimport type { CellAttrs } from './util';\nimport { inSameTable, pointsAtCell, removeColSpan } from './util';\n\n/**\n * @public\n */\nexport interface CellSelectionJSON {\n type: string;\n anchor: number;\n head: number;\n}\n\n/**\n * A [`Selection`](http://prosemirror.net/docs/ref/#state.Selection)\n * subclass that represents a cell selection spanning part of a table.\n * With the plugin enabled, these will be created when the user\n * selects across cells, and will be drawn by giving selected cells a\n * `selectedCell` CSS class.\n *\n * @public\n */\nexport class CellSelection extends Selection {\n // A resolved position pointing _in front of_ the anchor cell (the one\n // that doesn't move when extending the selection).\n public $anchorCell: ResolvedPos;\n\n // A resolved position pointing in front of the head cell (the one\n // moves when extending the selection).\n public $headCell: ResolvedPos;\n\n // A table selection is identified by its anchor and head cells. The\n // positions given to this constructor should point _before_ two\n // cells in the same table. They may be the same, to select a single\n // cell.\n constructor($anchorCell: ResolvedPos, $headCell: ResolvedPos = $anchorCell) {\n const table = $anchorCell.node(-1);\n const map = TableMap.get(table);\n const tableStart = $anchorCell.start(-1);\n const rect = map.rectBetween(\n $anchorCell.pos - tableStart,\n $headCell.pos - tableStart,\n );\n\n const doc = $anchorCell.node(0);\n const cells = map\n .cellsInRect(rect)\n .filter((p) => p != $headCell.pos - tableStart);\n // Make the head cell the first range, so that it counts as the\n // primary part of the selection\n cells.unshift($headCell.pos - tableStart);\n const ranges = cells.map((pos) => {\n const cell = table.nodeAt(pos);\n if (!cell) {\n throw new RangeError(`No cell with offset ${pos} found`);\n }\n const from = tableStart + pos + 1;\n return new SelectionRange(\n doc.resolve(from),\n doc.resolve(from + cell.content.size),\n );\n });\n super(ranges[0].$from, ranges[0].$to, ranges);\n this.$anchorCell = $anchorCell;\n this.$headCell = $headCell;\n }\n\n public map(doc: Node, mapping: Mappable): CellSelection | Selection {\n const $anchorCell = doc.resolve(mapping.map(this.$anchorCell.pos));\n const $headCell = doc.resolve(mapping.map(this.$headCell.pos));\n if (\n pointsAtCell($anchorCell) &&\n pointsAtCell($headCell) &&\n inSameTable($anchorCell, $headCell)\n ) {\n const tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1);\n if (tableChanged && this.isRowSelection())\n return CellSelection.rowSelection($anchorCell, $headCell);\n else if (tableChanged && this.isColSelection())\n return CellSelection.colSelection($anchorCell, $headCell);\n else return new CellSelection($anchorCell, $headCell);\n }\n return TextSelection.between($anchorCell, $headCell);\n }\n\n // Returns a rectangular slice of table rows containing the selected\n // cells.\n public override content(): Slice {\n const table = this.$anchorCell.node(-1);\n const map = TableMap.get(table);\n const tableStart = this.$anchorCell.start(-1);\n\n const rect = map.rectBetween(\n this.$anchorCell.pos - tableStart,\n this.$headCell.pos - tableStart,\n );\n const seen: Record<number, boolean> = {};\n const rows = [];\n for (let row = rect.top; row < rect.bottom; row++) {\n const rowContent = [];\n for (\n let index = row * map.width + rect.left, col = rect.left;\n col < rect.right;\n col++, index++\n ) {\n const pos = map.map[index];\n if (seen[pos]) continue;\n seen[pos] = true;\n\n const cellRect = map.findCell(pos);\n let cell = table.nodeAt(pos);\n if (!cell) {\n throw new RangeError(`No cell with offset ${pos} found`);\n }\n\n const extraLeft = rect.left - cellRect.left;\n const extraRight = cellRect.right - rect.right;\n\n if (extraLeft > 0 || extraRight > 0) {\n let attrs = cell.attrs as CellAttrs;\n if (extraLeft > 0) {\n attrs = removeColSpan(attrs, 0, extraLeft);\n }\n if (extraRight > 0) {\n attrs = removeColSpan(\n attrs,\n attrs.colspan - extraRight,\n extraRight,\n );\n }\n if (cellRect.left < rect.left) {\n cell = cell.type.createAndFill(attrs);\n if (!cell) {\n throw new RangeError(\n `Could not create cell with attrs ${JSON.stringify(attrs)}`,\n );\n }\n } else {\n cell = cell.type.create(attrs, cell.content);\n }\n }\n if (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {\n const attrs = {\n ...cell.attrs,\n rowspan:\n Math.min(cellRect.bottom, rect.bottom) -\n Math.max(cellRect.top, rect.top),\n };\n if (cellRect.top < rect.top) {\n cell = cell.type.createAndFill(attrs)!;\n } else {\n cell = cell.type.create(attrs, cell.content);\n }\n }\n rowContent.push(cell);\n }\n rows.push(table.child(row).copy(Fragment.from(rowContent)));\n }\n\n const fragment =\n this.isColSelection() && this.isRowSelection() ? table : rows;\n return new Slice(Fragment.from(fragment), 1, 1);\n }\n\n public override replace(tr: Transaction, content: Slice = Slice.empty): void {\n const mapFrom = tr.steps.length,\n ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n const { $from, $to } = ranges[i],\n mapping = tr.mapping.slice(mapFrom);\n tr.replace(\n mapping.map($from.pos),\n mapping.map($to.pos),\n i ? Slice.empty : content,\n );\n }\n const sel = Selection.findFrom(\n tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)),\n -1,\n );\n if (sel) tr.setSelection(sel);\n }\n\n public override replaceWith(tr: Transaction, node: Node): void {\n this.replace(tr, new Slice(Fragment.from(node), 0, 0));\n }\n\n public forEachCell(f: (node: Node, pos: number) => void): void {\n const table = this.$anchorCell.node(-1);\n const map = TableMap.get(table);\n const tableStart = this.$anchorCell.start(-1);\n\n const cells = map.cellsInRect(\n map.rectBetween(\n this.$anchorCell.pos - tableStart,\n this.$headCell.pos - tableStart,\n ),\n );\n for (let i = 0; i < cells.length; i++) {\n f(table.nodeAt(cells[i])!, tableStart + cells[i]);\n }\n }\n\n // True if this selection goes all the way from the top to the\n // bottom of the table.\n public isColSelection(): boolean {\n const anchorTop = this.$anchorCell.index(-1);\n const headTop = this.$headCell.index(-1);\n if (Math.min(anchorTop, headTop) > 0) return false;\n\n const anchorBottom = anchorTop + this.$anchorCell.nodeAfter!.attrs.rowspan;\n const headBottom = headTop + this.$headCell.nodeAfter!.attrs.rowspan;\n\n return (\n Math.max(anchorBottom, headBottom) == this.$headCell.node(-1).childCount\n );\n }\n\n // Returns the smallest column selection that covers the given anchor\n // and head cell.\n public static colSelection(\n $anchorCell: ResolvedPos,\n $headCell: ResolvedPos = $anchorCell,\n ): CellSelection {\n const table = $anchorCell.node(-1);\n const map = TableMap.get(table);\n const tableStart = $anchorCell.start(-1);\n\n const anchorRect = map.findCell($anchorCell.pos - tableStart);\n const headRect = map.findCell($headCell.pos - tableStart);\n const doc = $anchorCell.node(0);\n\n if (anchorRect.top <= headRect.top) {\n if (anchorRect.top > 0)\n $anchorCell = doc.resolve(tableStart + map.map[anchorRect.left]);\n if (headRect.bottom < map.height)\n $headCell = doc.resolve(\n tableStart +\n map.map[map.width * (map.height - 1) + headRect.right - 1],\n );\n } else {\n if (headRect.top > 0)\n $headCell = doc.resolve(tableStart + map.map[headRect.left]);\n if (anchorRect.bottom < map.height)\n $anchorCell = doc.resolve(\n tableStart +\n map.map[map.width * (map.height - 1) + anchorRect.right - 1],\n );\n }\n return new CellSelection($anchorCell, $headCell);\n }\n\n // True if this selection goes all the way from the left to the\n // right of the table.\n public isRowSelection(): boolean {\n const table = this.$anchorCell.node(-1);\n const map = TableMap.get(table);\n const tableStart = this.$anchorCell.start(-1);\n\n const anchorLeft = map.colCount(this.$anchorCell.pos - tableStart);\n const headLeft = map.colCount(this.$headCell.pos - tableStart);\n if (Math.min(anchorLeft, headLeft) > 0) return false;\n\n const anchorRight = anchorLeft + this.$anchorCell.nodeAfter!.attrs.colspan;\n const headRight = headLeft + this.$headCell.nodeAfter!.attrs.colspan;\n return Math.max(anchorRight, headRight) == map.width;\n }\n\n public eq(other: unknown): boolean {\n return (\n other instanceof CellSelection &&\n other.$anchorCell.pos == this.$anchorCell.pos &&\n other.$headCell.pos == this.$headCell.pos\n );\n }\n\n // Returns the smallest row selection that covers the given anchor\n // and head cell.\n public static rowSelection(\n $anchorCell: ResolvedPos,\n $headCell: ResolvedPos = $anchorCell,\n ): CellSelection {\n const table = $anchorCell.node(-1);\n const map = TableMap.get(table);\n const tableStart = $anchorCell.start(-1);\n\n const anchorRect = map.findCell($anchorCell.pos - tableStart);\n const headRect = map.findCell($headCell.pos - tableStart);\n const doc = $anchorCell.node(0);\n\n if (anchorRect.left <= headRect.left) {\n if (anchorRect.left > 0)\n $anchorCell = doc.resolve(\n tableStart + map.map[anchorRect.top * map.width],\n );\n if (headRect.right < map.width)\n $headCell = doc.resolve(\n tableStart + map.map[map.width * (headRect.top + 1) - 1],\n );\n } else {\n if (headRect.left > 0)\n $headCell = doc.resolve(tableStart + map.map[headRect.top * map.width]);\n if (anchorRect.right < map.width)\n $anchorCell = doc.resolve(\n tableStart + map.map[map.width * (anchorRect.top + 1) - 1],\n );\n }\n return new CellSelection($anchorCell, $headCell);\n }\n\n public toJSON(): CellSelectionJSON {\n return {\n type: 'cell',\n anchor: this.$anchorCell.pos,\n head: this.$headCell.pos,\n };\n }\n\n public static override fromJSON(\n doc: Node,\n json: CellSelectionJSON,\n ): CellSelection {\n return new CellSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n }\n\n static create(\n doc: Node,\n anchorCell: number,\n headCell: number = anchorCell,\n ): CellSelection {\n return new CellSelection(doc.resolve(anchorCell), doc.resolve(headCell));\n }\n\n public override getBookmark(): CellBookmark {\n return new CellBookmark(this.$anchorCell.pos, this.$headCell.pos);\n }\n}\n\nCellSelection.prototype.visible = false;\n\nSelection.jsonID('cell', CellSelection);\n\n/**\n * @public\n */\nexport class CellBookmark {\n constructor(\n public anchor: number,\n public head: number,\n ) {}\n\n map(mapping: Mappable): CellBookmark {\n return new CellBookmark(mapping.map(this.anchor), mapping.map(this.head));\n }\n\n resolve(doc: Node): CellSelection | Selection {\n const $anchorCell = doc.resolve(this.anchor),\n $headCell = doc.resolve(this.head);\n if (\n $anchorCell.parent.type.spec.tableRole == 'row' &&\n $headCell.parent.type.spec.tableRole == 'row' &&\n $anchorCell.index() < $anchorCell.parent.childCount &&\n $headCell.index() < $headCell.parent.childCount &&\n inSameTable($anchorCell, $headCell)\n )\n return new CellSelection($anchorCell, $headCell);\n else return Selection.near($headCell, 1);\n }\n}\n\nexport function drawCellSelection(state: EditorState): DecorationSource | null {\n if (!(state.selection instanceof CellSelection)) return null;\n const cells: Decoration[] = [];\n state.selection.forEachCell((node, pos) => {\n cells.push(\n Decoration.node(pos, pos + node.nodeSize, { class: 'selectedCell' }),\n );\n });\n return DecorationSet.create(state.doc, cells);\n}\n\nfunction isCellBoundarySelection({ $from, $to }: TextSelection) {\n if ($from.pos == $to.pos || $from.pos < $to.pos - 6) return false; // Cheap elimination\n let afterFrom = $from.pos;\n let beforeTo = $to.pos;\n let depth = $from.depth;\n for (; depth >= 0; depth--, afterFrom++)\n if ($from.after(depth + 1) < $from.end(depth)) break;\n for (let d = $to.depth; d >= 0; d--, beforeTo--)\n if ($to.before(d + 1) > $to.start(d)) break;\n return (\n afterFrom == beforeTo &&\n /row|table/.test($from.node(depth).type.spec.tableRole)\n );\n}\n\nfunction isTextSelectionAcrossCells({ $from, $to }: TextSelection) {\n let fromCellBoundaryNode: Node | undefined;\n let toCellBoundaryNode: Node | undefined;\n\n for (let i = $from.depth; i > 0; i--) {\n const node = $from.node(i);\n if (\n node.type.spec.tableRole === 'cell' ||\n node.type.spec.tableRole === 'header_cell'\n ) {\n fromCellBoundaryNode = node;\n break;\n }\n }\n\n for (let i = $to.depth; i > 0; i--) {\n const node = $to.node(i);\n if (\n node.type.spec.tableRole === 'cell' ||\n node.type.spec.tableRole === 'header_cell'\n ) {\n toCellBoundaryNode = node;\n break;\n }\n }\n\n return fromCellBoundaryNode !== toCellBoundaryNode && $to.parentOffset === 0;\n}\n\nexport function normalizeSelection(\n state: EditorState,\n tr: Transaction | undefined,\n allowTableNodeSelection: boolean,\n): Transaction | undefined {\n const sel = (tr || state).selection;\n const doc = (tr || state).doc;\n let normalize: Selection | undefined;\n let role: string | undefined;\n if (sel instanceof NodeSelection && (role = sel.node.type.spec.tableRole)) {\n if (role == 'cell' || role == 'header_cell') {\n normalize = CellSelection.create(doc, sel.from);\n } else if (role == 'row') {\n const $cell = doc.resolve(sel.from + 1);\n normalize = CellSelection.rowSelection($cell, $cell);\n } else if (!allowTableNodeSelection) {\n const map = TableMap.get(sel.node);\n const start = sel.from + 1;\n const lastCell = start + map.map[map.width * map.height - 1];\n normalize = CellSelection.create(doc, start + 1, lastCell);\n }\n } else if (sel instanceof TextSelection && isCellBoundarySelection(sel)) {\n normalize = TextSelection.create(doc, sel.from);\n } else if (sel instanceof TextSelection && isTextSelectionAcrossCells(sel)) {\n normalize = TextSelection.create(doc, sel.$from.start(), sel.$from.end());\n }\n if (normalize) (tr || (tr = state.tr)).setSelection(normalize);\n return tr;\n}\n","// This file defines helpers for normalizing tables, making sure no\n// cells overlap (which can happen, if you have the wrong col- and\n// rowspans) and that each row has the same width. Uses the problems\n// reported by `TableMap`.\n\nimport type { Node } from 'prosemirror-model';\nimport type { EditorState, Transaction } from 'prosemirror-state';\nimport { PluginKey } from 'prosemirror-state';\n\nimport type { TableRole } from './schema';\nimport { tableNodeTypes } from './schema';\nimport { TableMap } from './tablemap';\nimport type { CellAttrs } from './util';\nimport { removeColSpan } from './util';\n\n/**\n * @public\n */\nexport const fixTablesKey = new PluginKey<{ fixTables: boolean }>('fix-tables');\n\n/**\n * Helper for iterating through the nodes in a document that changed\n * compared to the given previous document. Useful for avoiding\n * duplicate work on each transaction.\n *\n * @public\n */\nfunction changedDescendants(\n old: Node,\n cur: Node,\n offset: number,\n f: (node: Node, pos: number) => void,\n): void {\n const oldSize = old.childCount,\n curSize = cur.childCount;\n outer: for (let i = 0, j = 0; i < curSize; i++) {\n const child = cur.child(i);\n for (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) {\n if (old.child(scan) == child) {\n j = scan + 1;\n offset += child.nodeSize;\n continue outer;\n }\n }\n f(child, offset);\n if (j < oldSize && old.child(j).sameMarkup(child))\n changedDescendants(old.child(j), child, offset + 1, f);\n else child.nodesBetween(0, child.content.size, f, offset + 1);\n offset += child.nodeSize;\n }\n}\n\n/**\n * Inspect all tables in the given state's document and return a\n * transaction that fixes them, if necessary. If `oldState` was\n * provided, that is assumed to hold a previous, known-good state,\n * which will be used to avoid re-scanning unchanged parts of the\n * document.\n *\n * @public\n */\nexport function fixTables(\n state: EditorState,\n oldState?: EditorState,\n): Transaction | undefined {\n let tr: Transaction | undefined;\n const check = (node: Node, pos: number) => {\n if (node.type.spec.tableRole == 'table')\n tr = fixTable(state, node, pos, tr);\n };\n if (!oldState) state.doc.descendants(check);\n else if (oldState.doc != state.doc)\n changedDescendants(oldState.doc, state.doc, 0, check);\n return tr;\n}\n\n// Fix the given table, if necessary. Will append to the transaction\n// it was given, if non-null, or create a new one if necessary.\nexport function fixTable(\n state: EditorState,\n table: Node,\n tablePos: number,\n tr: Transaction | undefined,\n): Transaction | undefined {\n const map = TableMap.get(table);\n if (!map.problems) return tr;\n if (!tr) tr = state.tr;\n\n // Track which rows we must add cells to, so that we can adjust that\n // when fixing collisions.\n const mustAdd: number[] = [];\n for (let i = 0; i < map.height; i++) mustAdd.push(0);\n for (let i = 0; i < map.problems.length; i++) {\n const prob = map.problems[i];\n if (prob.type == 'collision') {\n const cell = table.nodeAt(prob.pos);\n if (!cell) continue;\n const attrs = cell.attrs as CellAttrs;\n for (let j = 0; j < attrs.rowspan; j++) mustAdd[prob.row + j] += prob.n;\n tr.setNodeMarkup(\n tr.mapping.map(tablePos + 1 + prob.pos),\n null,\n removeColSpan(attrs, attrs.colspan - prob.n, prob.n),\n );\n } else if (prob.type == 'missing') {\n mustAdd[prob.row] += prob.n;\n } else if (prob.type == 'overlong_rowspan') {\n const cell = table.nodeAt(prob.pos);\n if (!cell) continue;\n tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n ...cell.attrs,\n rowspan: cell.attrs.rowspan - prob.n,\n });\n } else if (prob.type == 'colwidth mismatch') {\n const cell = table.nodeAt(prob.pos);\n if (!cell) continue;\n tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n ...cell.attrs,\n colwidth: prob.colwidth,\n });\n } else if (prob.type == 'zero_sized') {\n const pos = tr.mapping.map(tablePos);\n tr.delete(pos, pos + table.nodeSize);\n }\n }\n let first, last;\n for (let i = 0; i < mustAdd.length; i++)\n if (mustAdd[i]) {\n if (first == null) first = i;\n last = i;\n }\n // Add the necessary cells, using a heuristic for whether to add the\n // cells at the start or end of the rows (if it looks like a 'bite'\n // was taken out of the table, add cells at the start of the row\n // after the bite. Otherwise add them at the end).\n for (let i = 0, pos = tablePos + 1; i < map.height; i++) {\n const row = table.child(i);\n const end = pos + row.nodeSize;\n const add = mustAdd[i];\n if (add > 0) {\n let role: TableRole = 'cell';\n if (row.firstChild) {\n role = row.firstChild.type.spec.tableRole;\n }\n const nodes: Node[] = [];\n for (let j = 0; j < add; j++) {\n const node = tableNodeTypes(state.schema)[role].createAndFill();\n\n if (node) nodes.push(node);\n }\n const side = (i == 0 || first == i - 1) && last == i ? pos + 1 : end - 1;\n tr.insert(tr.mapping.map(side), nodes);\n }\n pos = end;\n }\n return tr.setMeta(fixTablesKey, { fixTables: true });\n}\n","import type { Node } from 'prosemirror-model';\n\nimport { TableMap } from '../tablemap';\n\n/**\n * This function will transform the table node into a matrix of rows and columns\n * respecting merged cells, for example this table:\n *\n * ```\n * ┌──────┬──────┬─────────────┐\n * │ A1 │ B1 │ C1 │\n * ├──────┼──────┴──────┬──────┤\n * │ A2 │ B2 │ │\n * ├──────┼─────────────┤ D1 │\n * │ A3 │ B3 │ C3 │ │\n * └──────┴──────┴──────┴──────┘\n * ```\n *\n * will be converted to the below:\n *\n * ```javascript\n * [\n * [A1, B1, C1, null],\n * [A2, B2, null, D1],\n * [A3, B3, C3, null],\n * ]\n * ```\n * @internal\n */\nexport function convertTableNodeToArrayOfRows(\n tableNode: Node,\n): (Node | null)[][] {\n const map = TableMap.get(tableNode);\n const rows: (Node | null)[][] = [];\n const rowCount = map.height;\n const colCount = map.width;\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n const row: (Node | null)[] = [];\n for (let colIndex = 0; colIndex < colCount; colIndex++) {\n const cellIndex = rowIndex * colCount + colIndex;\n const cellPos = map.map[cellIndex];\n if (rowIndex > 0) {\n const topCellIndex = cellIndex - colCount;\n const topCellPos = map.map[topCellIndex];\n if (cellPos === topCellPos) {\n row.push(null);\n continue;\n }\n }\n if (colIndex > 0) {\n const leftCellIndex = cellIndex - 1;\n const leftCellPos = map.map[leftCellIndex];\n if (cellPos === leftCellPos) {\n row.push(null);\n continue;\n }\n }\n row.push(tableNode.nodeAt(cellPos));\n }\n rows.push(row);\n }\n\n return rows;\n}\n\n/**\n * Convert an array of rows to a table node.\n *\n * @internal\n */\nexport function convertArrayOfRowsToTableNode(\n tableNode: Node,\n arrayOfNodes: (Node | null)[][],\n): Node {\n const newRows: Node[] = [];\n const map = TableMap.get(tableNode);\n const rowCount = map.height;\n const colCount = map.width;\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n const oldRow: Node = tableNode.child(rowIndex);\n const newCells: Node[] = [];\n\n for (let colIndex = 0; colIndex < colCount; colIndex++) {\n const cell = arrayOfNodes[rowIndex][colIndex];\n if (!cell) {\n continue;\n }\n\n const cellPos = map.map[rowIndex * map.width + colIndex];\n const oldCell = tableNode.nodeAt(cellPos);\n if (!oldCell) {\n continue;\n }\n\n const newCell = oldCell.type.createChecked(\n cell.attrs,\n cell.content,\n cell.marks,\n );\n newCells.push(newCell);\n }\n\n const newRow = oldRow.type.createChecked(\n oldRow.attrs,\n newCells,\n oldRow.marks,\n );\n newRows.push(newRow);\n }\n\n const newTable = tableNode.type.createChecked(\n tableNode.attrs,\n newRows,\n tableNode.marks,\n );\n return newTable;\n}\n","/**\n * Move a row in an array of rows.\n *\n * @internal\n */\nexport function moveRowInArrayOfRows<T>(\n rows: T[],\n indexesOrigin: number[],\n indexesTarget: number[],\n directionOverride: -1 | 1 | 0,\n): T[] {\n const direction = indexesOrigin[0] > indexesTarget[0] ? -1 : 1;\n\n const rowsExtracted = rows.splice(indexesOrigin[0], indexesOrigin.length);\n const positionOffset = rowsExtracted.length % 2 === 0 ? 1 : 0;\n let target: number;\n\n if (directionOverride === -1 && direction === 1) {\n target = indexesTarget[0] - 1;\n } else if (directionOverride === 1 && direction === -1) {\n target = indexesTarget[indexesTarget.length - 1] - positionOffset + 1;\n } else {\n target =\n direction === -1\n ? indexesTarget[0]\n : indexesTarget[indexesTarget.length - 1] - positionOffset;\n }\n\n rows.splice(target, 0, ...rowsExtracted);\n return rows;\n}\n","import type { Node, ResolvedPos } from 'prosemirror-model';\nimport type { Selection } from 'prosemirror-state';\n\nimport { CellSelection } from '../cellselection';\nimport { cellAround, cellNear, inSameTable } from '../util';\n\n/**\n * Checks if the given object is a `CellSelection` instance.\n *\n * @internal\n */\nfunction isCellSelection(value: unknown): value is CellSelection {\n return value instanceof CellSelection;\n}\n\n/**\n * Find the closest table node for a given position.\n *\n * @public\n */\nexport function findTable($pos: ResolvedPos): FindNodeResult | null {\n return findParentNode((node) => node.type.spec.tableRole === 'table', $pos);\n}\n\n/**\n * Try to find the anchor and head cell in the same table by using the given\n * anchor and head as hit points, or fallback to the selection's anchor and\n * head.\n *\n * @public\n */\nexport function findCellRange(\n selection: Selection,\n anchorHit?: number,\n headHit?: number,\n): [ResolvedPos, ResolvedPos] | null {\n if (anchorHit == null && headHit == null && isCellSelection(selection)) {\n return [selection.$anchorCell, selection.$headCell];\n }\n\n const anchor: number = anchorHit ?? headHit ?? selection.anchor;\n const head: number = headHit ?? anchorHit ?? selection.head;\n\n const doc = selection.$head.doc;\n\n const $anchorCell = findCellPos(doc, anchor);\n const $headCell = findCellPos(doc, head);\n\n if ($anchorCell && $headCell && inSameTable($anchorCell, $headCell)) {\n return [$anchorCell, $headCell];\n }\n return null;\n}\n\n/**\n * Try to find a resolved pos of a cell by using the given pos as a hit point.\n *\n * @public\n */\nexport function findCellPos(doc: Node, pos: number): ResolvedPos | undefined {\n const $pos = doc.resolve(pos);\n return cellAround($pos) || cellNear($pos);\n}\n\n/**\n * Result of finding a parent node.\n *\n * @public\n */\nexport interface FindNodeResult {\n /**\n * The closest parent node that satisfies the predicate.\n */\n node: Node;\n\n /**\n * The position directly before the node.\n */\n pos: number;\n\n /**\n * The position at the start of the node.\n */\n start: number;\n\n /**\n * The depth of the node.\n */\n depth: number;\n}\n\n/**\n * Find the closest parent node that satisfies the predicate.\n *\n * @internal\n */\nfunction findParentNode(\n /**\n * The predicate to test the parent node.\n */\n predicate: (node: Node) => boolean,\n /**\n * The position to start searching from.\n */\n $pos: ResolvedPos,\n): FindNodeResult | null {\n for (let depth = $pos.depth; depth >= 0; depth -= 1) {\n const node = $pos.node(depth);\n\n if (predicate(node)) {\n const pos = depth === 0 ? 0 : $pos.before(depth);\n const start = $pos.start(depth);\n return { node, pos, start, depth };\n }\n }\n\n return null;\n}\n","import type { Selection } from 'prosemirror-state';\n\nimport { TableMap } from '../tablemap';\n\nimport type { FindNodeResult } from './query';\nimport { findTable } from './query';\n\n/**\n * Returns an array of cells in a column at the specified column index.\n *\n * @internal\n */\nexport function getCellsInColumn(\n columnIndex: number,\n selection: Selection,\n): FindNodeResult[] | undefined {\n const table = findTable(selection.$from);\n if (!table) {\n return;\n }\n\n const map = TableMap.get(table.node);\n\n if (columnIndex < 0 || columnIndex > map.width - 1) {\n return;\n }\n\n const cells = map.cellsInRect({\n left: columnIndex,\n right: columnIndex + 1,\n top: 0,\n bottom: map.height,\n });\n\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos)!;\n const pos = nodePos + table.start;\n return { pos, start: pos + 1, node, depth: table.depth + 2 };\n });\n}\n\n/**\n * Returns an array of cells in a row at the specified row index.\n *\n * @internal\n */\nexport function getCellsInRow(\n rowIndex: number,\n selection: Selection,\n): FindNodeResult[] | undefined {\n const table = findTable(selection.$from);\n if (!table) {\n return;\n }\n\n const map = TableMap.get(table.node);\n\n if (rowIndex < 0 || rowIndex > map.height - 1) {\n return;\n }\n\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: rowIndex,\n bottom: rowIndex + 1,\n });\n\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos)!;\n const pos = nodePos + table.start;\n return { pos, start: pos + 1, node, depth: table.depth + 2 };\n });\n}\n","import type { ResolvedPos } from 'prosemirror-model';\nimport type { Transaction } from 'prosemirror-state';\n\nimport { getCellsInColumn, getCellsInRow } from './get-cells';\n\nexport type CellSelectionRange = {\n $anchor: ResolvedPos;\n $head: ResolvedPos;\n // an array of column/row indexes\n indexes: number[];\n};\n\n/**\n * Returns a range of rectangular selection spanning all merged cells around a\n * column at index `columnIndex`.\n *\n * Original implementation from Atlassian (Apache License 2.0)\n *\n * https://bitbucket.org/atlassian/atlassian-frontend-mirror/src/5f91cb871e8248bc3bae5ddc30bb9fd9200fadbb/editor/editor-tables/src/utils/get-selection-range-in-column.ts#editor/editor-tables/src/utils/get-selection-range-in-column.ts\n *\n * @internal\n */\nexport function getSelectionRangeInColumn(\n tr: Transaction,\n startColIndex: number,\n endColIndex: number = startColIndex,\n): CellSelectionRange | undefined {\n let startIndex = startColIndex;\n let endIndex = endColIndex;\n\n // looking for selection start column (startIndex)\n for (let i = startColIndex; i >= 0; i--) {\n const cells = getCellsInColumn(i, tr.selection);\n if (cells) {\n cells.forEach((cell) => {\n const maybeEndIndex = cell.node.attrs.colspan + i - 1;\n if (maybeEndIndex >= startIndex) {\n startIndex = i;\n }\n if (maybeEndIndex > endIndex) {\n endIndex = maybeEndIndex;\n }\n });\n }\n }\n // looking for selection end column (endIndex)\n for (let i = startColIndex; i <= endIndex; i++) {\n const cells = getCellsInColumn(i, tr.selection);\n if (cells) {\n cells.forEach((cell) => {\n const maybeEndIndex = cell.node.attrs.colspan + i - 1;\n if (cell.node.attrs.colspan > 1 && maybeEndIndex > endIndex) {\n endIndex = maybeEndIndex;\n }\n });\n }\n }\n\n // filter out columns without cells (where all rows have colspan > 1 in the same column)\n const indexes = [];\n for (let i = startIndex; i <= endIndex; i++) {\n const maybeCells = getCellsInColumn(i, tr.selection);\n if (maybeCells && maybeCells.length > 0) {\n indexes.push(i);\n }\n }\n startIndex = indexes[0];\n endIndex = indexes[indexes.length - 1];\n\n const firstSelectedColumnCells = getCellsInColumn(startIndex, tr.selection);\n const firstRowCells = getCellsInRow(0, tr.selection);\n if (!firstSelectedColumnCells || !firstRowCells) {\n return;\n }\n\n const $anchor = tr.doc.resolve(\n firstSelectedColumnCells[firstSelectedColumnCells.length - 1].pos,\n );\n\n let headCell;\n for (let i = endIndex; i >= startIndex; i--) {\n const columnCells = getCellsInColumn(i, tr.selection);\n if (columnCells && columnCells.length > 0) {\n for (let j = firstRowCells.length - 1; j >= 0; j--) {\n if (firstRowCells[j].pos === columnCells[0].pos) {\n headCell = columnCells[0];\n break;\n }\n }\n if (headCell) {\n break;\n }\n }\n }\n if (!headCell) {\n return;\n }\n\n const $head = tr.doc.resolve(headCell.pos);\n return { $anchor, $head, indexes };\n}\n\n/**\n * Returns a range of rectangular selection spanning all merged cells around a\n * row at index `rowIndex`.\n *\n * Original implementation from Atlassian (Apache License 2.0)\n *\n * https://bitbucket.org/atlassian/atlassian-frontend-mirror/src/5f91cb871e8248bc3bae5ddc30bb9fd9200fadbb/editor/editor-tables/src/utils/get-selection-range-in-row.ts#editor/editor-tables/src/utils/get-selection-range-in-row.ts\n *\n * @internal\n */\nexport function getSelectionRangeInRow(\n tr: Transaction,\n startRowIndex: number,\n endRowIndex: number = startRowIndex,\n): CellSelectionRange | undefined {\n let startIndex = startRowIndex;\n let endIndex = endRowIndex;\n\n // looking for selection start row (startIndex)\n for (let i = startRowIndex; i >= 0; i--) {\n const cells = getCellsInRow(i, tr.selection);\n if (cells) {\n cells.forEach((cell) => {\n const maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n if (maybeEndIndex >= startIndex) {\n startIndex = i;\n }\n if (maybeEndIndex > endIndex) {\n endIndex = maybeEndIndex;\n }\n });\n }\n }\n // looking for selection end row (endIndex)\n for (let i = startRowIndex; i <= endIndex; i++) {\n const cells = getCellsInRow(i, tr.selection);\n if (cells) {\n cells.forEach((cell) => {\n const maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n if (cell.node.attrs.rowspan > 1 && maybeEndIndex > endIndex) {\n endIndex = maybeEndIndex;\n }\n });\n }\n }\n\n // filter out rows without cells (where all columns have rowspan > 1 in the same row)\n const indexes = [];\n for (let i = startIndex; i <= endIndex; i++) {\n const maybeCells = getCellsInRow(i, tr.selection);\n if (maybeCells && maybeCells.length > 0) {\n indexes.push(i);\n }\n }\n startIndex = indexes[0];\n endIndex = indexes[indexes.length - 1];\n\n const firstSelectedRowCells = getCellsInRow(startIndex, tr.selection);\n const firstColumnCells = getCellsInColumn(0, tr.selection);\n if (!firstSelectedRowCells || !firstColumnCells) {\n return;\n }\n\n const $anchor = tr.doc.resolve(\n firstSelectedRowCells[firstSelectedRowCells.length - 1].pos,\n );\n\n let headCell;\n for (let i = endIndex; i >= startIndex; i--) {\n const rowCells = getCellsInRow(i, tr.selection);\n if (rowCells && rowCells.length > 0) {\n for (let j = firstColumnCells.length - 1; j >= 0; j--) {\n if (firstColumnCells[j].pos === rowCells[0].pos) {\n headCell = rowCells[0];\n break;\n }\n }\n if (headCell) {\n break;\n }\n }\n }\n if (!headCell) {\n return;\n }\n\n const $head = tr.doc.resolve(headCell.pos);\n return { $anchor, $head, indexes };\n}\n","/**\n * Transposes a 2D array by flipping columns to rows.\n *\n * Transposition is a familiar algebra concept where the matrix is flipped\n * along its diagonal. For more details, see:\n * https://en.wikipedia.org/wiki/Transpose\n *\n * @example\n * ```javascript\n * const arr = [\n * ['a1', 'a2', 'a3'],\n * ['b1', 'b2', 'b3'],\n * ['c1', 'c2', 'c3'],\n * ['d1', 'd2', 'd3'],\n * ];\n *\n * const result = transpose(arr);\n * result === [\n * ['a1', 'b1', 'c1', 'd1'],\n * ['a2', 'b2', 'c2', 'd2'],\n * ['a3', 'b3', 'c3', 'd3'],\n * ]\n * ```\n */\nexport function transpose<T>(array: T[][]): T[][] {\n return array[0].map((_, i) => {\n return array.map((column) => column[i]);\n });\n}\n","import type { Node } from 'prosemirror-model';\nimport type { Transaction } from 'prosemirror-state';\n\nimport { CellSelection } from '../cellselection';\nimport { TableMap } from '../tablemap';\n\nimport {\n convertArrayOfRowsToTableNode,\n convertTableNodeToArrayOfRows,\n} from './convert';\nimport { moveRowInArrayOfRows } from './move-row-in-array-of-rows';\nimport { findTable } from './query';\nimport { getSelectionRangeInColumn } from './selection-range';\nimport { transpose } from './transpose';\n\n/**\n * Parameters for moving a column in a table.\n *\n * @internal\n */\nexport interface MoveColumnParams {\n tr: Transaction;\n originIndex: number;\n targetIndex: number;\n select: boolean;\n pos: number;\n}\n\n/**\n * Move a column from index `origin` to index `target`.\n *\n * @internal\n */\nexport function moveColumn(moveColParams: MoveColumnParams): boolean {\n const { tr, originIndex, targetIndex, select, pos } = moveColParams;\n const $pos = tr.doc.resolve(pos);\n const table = findTable($pos);\n if (!table) return false;\n\n const indexesOriginColumn = getSelectionRangeInColumn(\n tr,\n originIndex,\n )?.indexes;\n const indexesTargetColumn = getSelectionRangeInColumn(\n tr,\n targetIndex,\n )?.indexes;\n\n if (!indexesOriginColumn || !indexesTargetColumn) return false;\n\n if (indexesOriginColumn.includes(targetIndex)) return false;\n\n const newTable = moveTableColumn(\n table.node,\n indexesOriginColumn,\n indexesTargetColumn,\n 0,\n );\n\n tr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n\n if (!select) return true;\n\n const map = TableMap.get(newTable);\n const start = table.start;\n const index = targetIndex;\n const lastCell = map.positionAt(map.height - 1, index, newTable);\n const $lastCell = tr.doc.resolve(start + lastCell);\n\n const firstCell = map.positionAt(0, index, newTable);\n const $firstCell = tr.doc.resolve(start + firstCell);\n\n tr.setSelection(CellSelection.colSelection($lastCell, $firstCell));\n return true;\n}\n\nfunction moveTableColumn(\n table: Node,\n indexesOrigin: number[],\n indexesTarget: number[],\n direction: -1 | 1 | 0,\n) {\n let rows = transpose(convertTableNodeToArrayOfRows(table));\n\n rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n rows = transpose(rows);\n\n return convertArrayOfRowsToTableNode(table, rows);\n}\n","import type { Node } from 'prosemirror-model';\nimport type { Transaction } from 'prosemirror-state';\n\nimport { CellSelection } from '../cellselection';\nimport { TableMap } from '../tablemap';\n\nimport {\n convertArrayOfRowsToTableNode,\n convertTableNodeToArrayOfRows,\n} from './convert';\nimport { moveRowInArrayOfRows } from './move-row-in-array-of-rows';\nimport { findTable } from './query';\nimport { getSelectionRangeInRow } from './selection-range';\n\n/**\n * Parameters for moving a row in a table.\n *\n * @internal\n */\nexport interface MoveRowParams {\n tr: Transaction;\n originIndex: number;\n targetIndex: number;\n select: boolean;\n pos: number;\n}\n\n/**\n * Move a row from index `origin` to index `target`.\n *\n * @internal\n */\nexport function moveRow(moveRowParams: MoveRowParams): boolean {\n const { tr, originIndex, targetIndex, select, pos } = moveRowParams;\n const $pos = tr.doc.resolve(pos);\n const table = findTable($pos);\n if (!table) return false;\n\n const indexesOriginRow = getSelectionRangeInRow(tr, originIndex)?.indexes;\n const indexesTargetRow = getSelectionRangeInRow(tr, targetIndex)?.indexes;\n\n if (!indexesOriginRow || !indexesTargetRow) return false;\n\n if (indexesOriginRow.includes(targetIndex)) return false;\n\n const newTable = moveTableRow(\n table.node,\n indexesOriginRow,\n indexesTargetRow,\n 0,\n );\n\n tr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n\n if (!select) return true;\n\n const map = TableMap.get(newTable);\n const start = table.start;\n const index = targetIndex;\n const lastCell = map.positionAt(index, map.width - 1, newTable);\n const $lastCell = tr.doc.resolve(start + lastCell);\n\n const firstCell = map.positionAt(index, 0, newTable);\n const $firstCell = tr.doc.resolve(start + firstCell);\n\n tr.setSelection(CellSelection.rowSelection($lastCell, $firstCell));\n return true;\n}\n\nfunction moveTableRow(\n table: Node,\n indexesOrigin: number[],\n indexesTarget: number[],\n direction: -1 | 1 | 0,\n) {\n let rows = convertTableNodeToArrayOfRows(table);\n\n rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\n return convertArrayOfRowsToTableNode(table, rows);\n}\n","// This file defines a number of table-related commands.\n\nimport type { Node, NodeType, ResolvedPos } from 'prosemirror-model';\nimport { Fragment, Slice } from 'prosemirror-model';\nimport type { Command, EditorState, Transaction } from 'prosemirror-state';\nimport { TextSelection } from 'prosemirror-state';\n\nimport { CellSelection } from './cellselection';\nimport type { Direction } from './input';\nimport type { TableRole } from './schema';\nimport { tableNodeTypes } from './schema';\nimport type { Rect } from './tablemap';\nimport { TableMap } from './tablemap';\nimport type { CellAttrs } from './util';\nimport {\n addColSpan,\n cellAround,\n cellWrapping,\n columnIsHeader,\n isInTable,\n moveCellForward,\n removeColSpan,\n selectionCell,\n} from './util';\nimport { moveColumn } from './utils/move-column';\nimport { moveRow } from './utils/move-row';\n\n/**\n * @public\n */\nexport type TableRect = Rect & {\n tableStart: number;\n map: TableMap;\n table: Node;\n};\n\n/**\n * Helper to get the selected rectangle in a table, if any. Adds table\n * map, table node, and table start offset to the object for\n * convenience.\n *\n * @public\n */\nexport function selectedRect(state: EditorState): TableRect {\n const sel = state.selection;\n const $pos = selectionCell(state);\n const table = $pos.node(-1);\n const tableStart = $pos.start(-1);\n const map = TableMap.get(table);\n const rect =\n sel instanceof CellSelection\n ? map.rectBetween(\n sel.$anchorCell.pos - tableStart,\n sel.$headCell.pos - tableStart,\n )\n : map.findCell($pos.pos - tableStart);\n return { ...rect, tableStart, map, table };\n}\n\n/**\n * Add a column at the given position in a table.\n *\n * @public\n */\nexport function addColumn(\n tr: Transaction,\n { map, tableStart, table }: TableRect,\n col: number,\n): Transaction {\n let refColumn: number | null = col > 0 ? -1 : 0;\n if (columnIsHeader(map, table, col + refColumn)) {\n refColumn = col == 0 || col == map.width ? null : 0;\n }\n\n for (let row = 0; row < map.height; row++) {\n const index = row * map.width + col;\n // If this position falls inside a col-spanning cell\n if (col > 0 && col < map.width && map.map[index - 1] == map.map[index]) {\n const pos = map.map[index];\n const cell = table.nodeAt(pos)!;\n tr.setNodeMarkup(\n tr.mapping.map(tableStart + pos),\n null,\n addColSpan(cell.attrs as CellAttrs, col - map.colCount(pos)),\n );\n // Skip ahead if rowspan > 1\n row += cell.attrs.rowspan - 1;\n } else {\n const type =\n refColumn == null\n ? tableNodeTypes(table.type.schema).cell\n : table.nodeAt(map.map[index + refColumn])!.type;\n const pos = map.positionAt(row, col, table);\n tr.insert(tr.mapping.map(tableStart + pos), type.createAndFill()!);\n }\n }\n return tr;\n}\n\n/**\n * Command to add a column before the column with the selection.\n *\n * @public\n */\nexport function addColumnBefore(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n): boolean {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addColumn(state.tr, rect, rect.left));\n }\n return true;\n}\n\n/**\n * Command to add a column after the column with the selection.\n *\n * @public\n */\nexport function addColumnAfter(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n): boolean {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addColumn(state.tr, rect, rect.right));\n }\n return true;\n}\n\n/**\n * @public\n */\nexport function removeColumn(\n tr: Transaction,\n { map, table, tableStart }: TableRect,\n col: number,\n) {\n const mapStart = tr.mapping.maps.length;\n for (let row = 0; row < map.height; ) {\n const index = row * map.width + col;\n const pos = map.map[index];\n const cell = table.nodeAt(pos)!;\n const attrs = cell.attrs as CellAttrs;\n // If this is part of a col-spanning cell\n if (\n (col > 0 && map.map[index - 1] == pos) ||\n (col < map.width - 1 && map.map[index + 1] == pos)\n ) {\n tr.setNodeMarkup(\n tr.mapping.slice(mapStart).map(tableStart + pos),\n null,\n removeColSpan(attrs, col - map.colCount(pos)),\n );\n } else {\n const start = tr.mapping.slice(mapStart).map(tableStart + pos);\n tr.delete(start, start + cell.nodeSize);\n }\n row += attrs.rowspan;\n }\n}\n\n/**\n * Command function that removes the selected columns from a table.\n *\n * @public\n */\nexport function deleteColumn(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n): boolean {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n const tr = state.tr;\n if (rect.left == 0 && rect.right == rect.map.width) return false;\n for (let i = rect.right - 1; ; i--) {\n removeColumn(tr, rect, i);\n if (i == rect.left) break;\n const table = rect.tableStart\n ? tr.doc.nodeAt(rect.tableStart - 1)\n : tr.doc;\n if (!table) {\n throw new RangeError('No table found');\n }\n rect.table = table;\n rect.map = TableMap.get(table);\n }\n dispatch(tr);\n }\n return true;\n}\n\n/**\n * @public\n */\nexport function rowIsHeader(map: TableMap, table: Node, row: number): boolean {\n const headerCell = tableNodeTypes(table.type.schema).header_cell;\n for (let col = 0; col < map.width; col++)\n if (table.nodeAt(map.map[col + row * map.width])?.type != headerCell)\n return false;\n return true;\n}\n\n/**\n * @public\n */\nexport function addRow(\n tr: Transaction,\n { map, tableStart, table }: TableRect,\n row: number,\n): Transaction {\n let rowPos = tableStart;\n for (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n const cells = [];\n let refRow: number | null = row > 0 ? -1 : 0;\n if (rowIsHeader(map, table, row + refRow))\n refRow = row == 0 || row == map.height ? null : 0;\n for (let col = 0, index = map.width * row; col < map.width; col++, index++) {\n // Covered by a rowspan cell\n if (\n row > 0 &&\n row < map.height &&\n map.map[index] == map.map[index - map.width]\n ) {\n const pos = map.map[index];\n const attrs = table.nodeAt(pos)!.attrs;\n tr.setNodeMarkup(tableStart + pos, null, {\n ...attrs,\n rowspan: attrs.rowspan + 1,\n });\n col += attrs.colspan - 1;\n } else {\n const type =\n refRow == null\n ? tableNodeTypes(table.type.schema).cell\n : table.nodeAt(map.map[index + refRow * map.width])?.type;\n const node = type?.createAndFill();\n if (node) cells.push(node);\n }\n }\n tr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells));\n return tr;\n}\n\n/**\n * Add a table row before the selection.\n *\n * @public\n */\nexport function addRowBefore(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n): boolean {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRow(state.tr, rect, rect.top));\n }\n return true;\n}\n\n/**\n * Add a table row after the selection.\n *\n * @public\n */\nexport function addRowAfter(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n): boolean {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRow(state.tr, rect, rect.bottom));\n }\n return true;\n}\n\n/**\n * @public\n */\nexport function removeRow(\n tr: Transaction,\n { map, table, tableStart }: TableRect,\n row: number,\n): void {\n let rowPos = 0;\n for (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n const nextRow = rowPos + table.child(row).nodeSize;\n\n const mapFrom = tr.mapping.maps.length;\n tr.delete(rowPos + tableStart, nextRow + tableStart);\n\n const seen = new Set<number>();\n\n for (let col = 0, index = row * map.width; col < map.width; col++, index++) {\n const pos = map.map[index];\n\n // Skip cells that are checked already\n if (seen.has(pos)) continue;\n seen.add(pos);\n\n if (row > 0 && pos == map.map[index - map.width]) {\n // If this cell starts in the row above, simply reduce its rowspan\n const attrs = table.nodeAt(pos)!.attrs as CellAttrs;\n tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, {\n ...attrs,\n rowspan: attrs.rowspan - 1,\n });\n col += attrs.colspan - 1;\n } else if (row < map.height && pos == map.map[index + map.width]) {\n // Else, if it continues in the row below, it has to be moved down\n const cell = table.nodeAt(pos)!;\n const attrs = cell.attrs as CellAttrs;\n const copy = cell.type.create(\n { ...attrs, rowspan: cell.attrs.rowspan - 1 },\n cell.content,\n );\n const newPos = map.positionAt(row + 1, col, table);\n tr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy);\n col += attrs.colspan - 1;\n }\n }\n}\n\n/**\n * Remove the selected rows from a table.\n *\n * @public\n */\nexport function deleteRow(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n): boolean {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state),\n tr = state.tr;\n if (rect.top == 0 && rect.bottom == rect.map.height) return false;\n for (let i = rect.bottom - 1; ; i--) {\n removeRow(tr, rect, i);\n if (i == rect.top) break;\n const table = rect.tableStart\n ? tr.doc.nodeAt(rect.tableStart - 1)\n : tr.doc;\n if (!table) {\n throw new RangeError('No table found');\n }\n rect.table = table;\n rect.map = TableMap.get(rect.table);\n }\n dispatch(tr);\n }\n return true;\n}\n\nfunction isEmpty(cell: Node): boolean {\n const c = cell.content;\n\n return (\n c.childCount == 1 && c.child(0).isTextblock && c.child(0).childCount == 0\n );\n}\n\nfunction cellsOverlapRectangle({ width, height, map }: TableMap, rect: Rect) {\n let indexTop = rect.top * width + rect.left,\n indexLeft = indexTop;\n let indexBottom = (rect.bottom - 1) * width + rect.left,\n indexRight = indexTop + (rect.right - rect.left - 1);\n for (let i = rect.top; i < rect.bottom; i++) {\n if (\n (rect.left > 0 && map[indexLeft] == map[indexLeft - 1]) ||\n (rect.right < width && map[indexRight] == map[indexRight + 1])\n )\n return true;\n indexLeft += width;\n indexRight += width;\n }\n for (let i = rect.left; i < rect.right; i++) {\n if (\n (rect.top > 0 && map[indexTop] == map[indexTop - width]) ||\n (rect.bottom < height && map[indexBottom] == map[indexBottom + width])\n )\n return true;\n indexTop++;\n indexBottom++;\n }\n return false;\n}\n\n/**\n * Merge the selected cells into a single cell. Only available when\n * the selected cells' outline forms a rectangle.\n *\n * @public\n */\nexport function mergeCells(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n): boolean {\n const sel = state.selection;\n if (\n !(sel instanceof CellSelection) ||\n sel.$anchorCell.pos == sel.$headCell.pos\n )\n return false;\n const rect = selectedRect(state),\n { map } = rect;\n if (cellsOverlapRectangle(map, rect)) return false;\n if (dispatch) {\n const tr = state.tr;\n const seen: Record<number, boolean> = {};\n let content = Fragment.empty;\n let mergedPos: number | undefined;\n let mergedCell: Node | undefined;\n for (let row = rect.top; row < rect.bottom; row++) {\n for (let col = rect.left; col < rect.right; col++) {\n const cellPos = map.map[row * map.width + col];\n const cell = rect.table.nodeAt(cellPos);\n if (seen[cellPos] || !cell) continue;\n seen[cellPos] = true;\n if (mergedPos == null) {\n mergedPos = cellPos;\n mergedCell = cell;\n } else {\n if (!isEmpty(cell)) content = content.append(cell.content);\n const mapped = tr.mapping.map(cellPos + rect.tableStart);\n tr.delete(mapped, mapped + cell.nodeSize);\n }\n }\n }\n if (mergedPos == null || mergedCell == null) {\n return true;\n }\n\n tr.setNodeMarkup(mergedPos + rect.tableStart, null, {\n ...addColSpan(\n mergedCell.attrs as CellAttrs,\n mergedCell.attrs.colspan,\n rect.right - rect.left - mergedCell.attrs.colspan,\n ),\n rowspan: rect.bottom - rect.top,\n });\n if (content.size > 0) {\n const end = mergedPos + 1 + mergedCell.content.size;\n const start = isEmpty(mergedCell) ? mergedPos + 1 : end;\n tr.replaceWith(start + rect.tableStart, end + rect.tableStart, content);\n }\n tr.setSelection(\n new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart)),\n );\n dispatch(tr);\n }\n return true;\n}\n\n/**\n * Split a selected cell, whose rowpan or colspan is greater than one,\n * into smaller cells. Use the first cell type for the new cells.\n *\n * @public\n */\nexport function splitCell(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n): boolean {\n const nodeTypes = tableNodeTypes(state.schema);\n return splitCellWithType(({ node }) => {\n return nodeTypes[node.type.spec.tableRole as TableRole];\n })(state, dispatch);\n}\n\n/**\n * @public\n */\nexport interface GetCellTypeOptions {\n node: Node;\n row: number;\n col: number;\n}\n\n/**\n * Split a selected cell, whose rowpan or colspan is greater than one,\n * into smaller cells with the cell type (th, td) returned by getType function.\n *\n * @public\n */\nexport function splitCellWithType(\n getCellType: (options: GetCellTypeOptions) => NodeType,\n): Command {\n return (state, dispatch) => {\n const sel = state.selection;\n let cellNode: Node | null | undefined;\n let cellPos: number | undefined;\n if (!(sel instanceof CellSelection)) {\n cellNode = cellWrapping(sel.$from);\n if (!cellNode) return false;\n cellPos = cellAround(sel.$from)?.pos;\n } else {\n if (sel.$anchorCell.pos != sel.$headCell.pos) return false;\n cellNode = sel.$anchorCell.nodeAfter;\n cellPos = sel.$anchorCell.pos;\n }\n if (cellNode == null || cellPos == null) {\n return false;\n }\n if (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) {\n return false;\n }\n if (dispatch) {\n let baseAttrs = cellNode.attrs;\n const attrs = [];\n const colwidth = baseAttrs.colwidth;\n if (baseAttrs.rowspan > 1) baseAttrs = { ...baseAttrs, rowspan: 1 };\n if (baseAttrs.colspan > 1) baseAttrs = { ...baseAttrs, colspan: 1 };\n const rect = selectedRect(state),\n tr = state.tr;\n for (let i = 0; i < rect.right - rect.left; i++)\n attrs.push(\n colwidth\n ? {\n ...baseAttrs,\n colwidth: colwidth && colwidth[i] ? [colwidth[i]] : null,\n }\n : baseAttrs,\n );\n let lastCell;\n for (let row = rect.top; row < rect.bottom; row++) {\n let pos = rect.map.positionAt(row, rect.left, rect.table);\n if (row == rect.top) pos += cellNode.nodeSize;\n for (let col = rect.left, i = 0; col < rect.right; col++, i++) {\n if (col == rect.left && row == rect.top) continue;\n tr.insert(\n (lastCell = tr.mapping.map(pos + rect.tableStart, 1)),\n getCellType({ node: cellNode, row, col }).createAndFill(attrs[i])!,\n );\n }\n }\n tr.setNodeMarkup(\n cellPos,\n getCellType({ node: cellNode, row: rect.top, col: rect.left }),\n attrs[0],\n );\n if (sel instanceof CellSelection)\n tr.setSelection(\n new CellSelection(\n tr.doc.resolve(sel.$anchorCell.pos),\n lastCell ? tr.doc.resolve(lastCell) : undefined,\n ),\n );\n dispatch(tr);\n }\n return true;\n };\n}\n\n/**\n * Returns a command that sets the given attribute to the given value,\n * and is only available when the currently selected cell doesn't\n * already have that attribute set to that value.\n *\n * @public\n */\nexport function setCellAttr(name: string, value: unknown): Command {\n return function (state, dispatch) {\n if (!isInTable(state)) return false;\n const $cell = selectionCell(state);\n if ($cell.nodeAfter!.attrs[name] === value) return false;\n if (dispatch) {\n const tr = state.tr;\n if (state.selection instanceof CellSelection)\n state.selection.forEachCell((node, pos) => {\n if (node.attrs[name] !== value)\n tr.setNodeMarkup(pos, null, {\n ...node.attrs,\n [name]: value,\n });\n });\n else\n tr.setNodeMarkup($cell.pos, null, {\n ...$cell.nodeAfter!.attrs,\n [name]: value,\n });\n dispatch(tr);\n }\n return true;\n };\n}\n\nfunction deprecated_toggleHeader(type: ToggleHeaderType): Command {\n return function (state, dispatch) {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const types = tableNodeTypes(state.schema);\n const rect = selectedRect(state),\n tr = state.tr;\n const cells = rect.map.cellsInRect(\n type == 'column'\n ? {\n left: rect.left,\n top: 0,\n right: rect.right,\n bottom: rect.map.height,\n }\n : type == 'row'\n ? {\n left: 0,\n top: rect.top,\n right: rect.map.width,\n bottom: rect.bottom,\n }\n : rect,\n );\n const nodes = cells.map((pos) => rect.table.nodeAt(pos)!);\n for (\n let i = 0;\n i < cells.length;\n i++ // Remove headers, if any\n )\n if (nodes[i].type == types.header_cell)\n tr.setNodeMarkup(\n rect.tableStart + cells[i],\n types.cell,\n nodes[i].attrs,\n );\n if (tr.steps.length === 0)\n for (\n let i = 0;\n i < cells.length;\n i++ // No headers removed, add instead\n )\n tr.setNodeMarkup(\n rect.tableStart + cells[i],\n types.header_cell,\n nodes[i].attrs,\n );\n dispatch(tr);\n }\n return true;\n };\n}\n\nfunction isHeaderEnabledByType(\n type: 'row' | 'column',\n rect: TableRect,\n types: Record<string, NodeType>,\n): boolean {\n // Get cell positions for first row or first column\n const cellPositions = rect.map.cellsInRect({\n left: 0,\n top: 0,\n right: type == 'row' ? rect.map.width : 1,\n bottom: type == 'column' ? rect.map.height : 1,\n });\n\n for (let i = 0; i < cellPositions.length; i++) {\n const cell = rect.table.nodeAt(cellPositions[i]);\n if (cell && cell.type !== types.header_cell) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * @public\n */\nexport type ToggleHeaderType = 'column' | 'row' | 'cell';\n\n/**\n * Toggles between row/column header and normal cells (Only applies to first row/column).\n * For deprecated behavior pass `useDeprecatedLogic` in options with true.\n *\n * @public\n */\nexport function toggleHeader(\n type: ToggleHeaderType,\n options?: { useDeprecatedLogic: boolean },\n): Command {\n options = options || { useDeprecatedLogic: false };\n\n if (options.useDeprecatedLogic) return deprecated_toggleHeader(type);\n\n return function (state, dispatch) {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const types = tableNodeTypes(state.schema);\n const rect = selectedRect(state),\n tr = state.tr;\n\n const isHeaderRowEnabled = isHeaderEnabledByType('row', rect, types);\n const isHeaderColumnEnabled = isHeaderEnabledByType(\n 'column',\n rect,\n types,\n );\n\n const isHeaderEnabled =\n type === 'column'\n ? isHeaderRowEnabled\n : type === 'row'\n ? isHeaderColumnEnabled\n : false;\n\n const selectionStartsAt = isHeaderEnabled ? 1 : 0;\n\n const cellsRect =\n type == 'column'\n ? {\n left: 0,\n top: selectionStartsAt,\n right: 1,\n bottom: rect.map.height,\n }\n : type == 'row'\n ? {\n left: selectionStartsAt,\n top: 0,\n right: rect.map.width,\n bottom: 1,\n }\n : rect;\n\n const newType =\n type == 'column'\n ? isHeaderColumnEnabled\n ? types.cell\n : types.header_cell\n : type == 'row'\n ? isHeaderRowEnabled\n ? types.cell\n : types.header_cell\n : types.cell;\n\n rect.map.cellsInRect(cellsRect).forEach((relativeCellPos) => {\n const cellPos = relativeCellPos + rect.tableStart;\n const cell = tr.doc.nodeAt(cellPos);\n\n if (cell) {\n tr.setNodeMarkup(cellPos, newType, cell.attrs);\n }\n });\n\n dispatch(tr);\n }\n return true;\n };\n}\n\n/**\n * Toggles whether the selected row contains header cells.\n *\n * @public\n */\nexport const toggleHeaderRow: Command = toggleHeader('row', {\n useDeprecatedLogic: true,\n});\n\n/**\n * Toggles whether the selected column contains header cells.\n *\n * @public\n */\nexport const toggleHeaderColumn: Command = toggleHeader('column', {\n useDeprecatedLogic: true,\n});\n\n/**\n * Toggles whether the selected cells are header cells.\n *\n * @public\n */\nexport const toggleHeaderCell: Command = toggleHeader('cell', {\n useDeprecatedLogic: true,\n});\n\nfunction findNextCell($cell: ResolvedPos, dir: Direction): number | null {\n if (dir < 0) {\n const before = $cell.nodeBefore;\n if (before) return $cell.pos - before.nodeSize;\n for (\n let row = $cell.index(-1) - 1, rowEnd = $cell.before();\n row >= 0;\n row--\n ) {\n const rowNode = $cell.node(-1).child(row);\n const lastChild = rowNode.lastChild;\n if (lastChild) {\n return rowEnd - 1 - lastChild.nodeSize;\n }\n rowEnd -= rowNode.nodeSize;\n }\n } else {\n if ($cell.index() < $cell.parent.childCount - 1) {\n return $cell.pos + $cell.nodeAfter!.nodeSize;\n }\n const table = $cell.node(-1);\n for (\n let row = $cell.indexAfter(-1), rowStart = $cell.after();\n row < table.childCount;\n row++\n ) {\n const rowNode = table.child(row);\n if (rowNode.childCount) return rowStart + 1;\n rowStart += rowNode.nodeSize;\n }\n }\n return null;\n}\n\n/**\n * Returns a command for selecting the next (direction=1) or previous\n * (direction=-1) cell in a table.\n *\n * @public\n */\nexport function goToNextCell(direction: Direction): Command {\n return function (state, dispatch) {\n if (!isInTable(state)) return false;\n const cell = findNextCell(selectionCell(state), direction);\n if (cell == null) return false;\n if (dispatch) {\n const $cell = state.doc.resolve(cell);\n dispatch(\n state.tr\n .setSelection(TextSelection.between($cell, moveCellForward($cell)))\n .scrollIntoView(),\n );\n }\n return true;\n };\n}\n\n/**\n * Deletes the table around the selection, if any.\n *\n * @public\n */\nexport function deleteTable(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n): boolean {\n const $pos = state.selection.$anchor;\n for (let d = $pos.depth; d > 0; d--) {\n const node = $pos.node(d);\n if (node.type.spec.tableRole == 'table') {\n if (dispatch)\n dispatch(\n state.tr.delete($pos.before(d), $pos.after(d)).scrollIntoView(),\n );\n return true;\n }\n }\n return false;\n}\n\n/**\n * Deletes the content of the selected cells, if they are not empty.\n *\n * @public\n */\nexport function deleteCellSelection(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n): boolean {\n const sel = state.selection;\n if (!(sel instanceof CellSelection)) return false;\n if (dispatch) {\n const tr = state.tr;\n const baseContent = tableNodeTypes(state.schema).cell.createAndFill()!\n .content;\n sel.forEachCell((cell, pos) => {\n if (!cell.content.eq(baseContent))\n tr.replace(\n tr.mapping.map(pos + 1),\n tr.mapping.map(pos + cell.nodeSize - 1),\n new Slice(baseContent, 0, 0),\n );\n });\n if (tr.docChanged) dispatch(tr);\n }\n return true;\n}\n\n/**\n * Options for moveTableRow\n *\n * @public\n */\nexport interface MoveTableRowOptions {\n /**\n * The source row index to move from.\n */\n from: number;\n\n /**\n * The destination row index to move to.\n */\n to: number;\n\n /**\n * Whether to select the moved row after the operation.\n *\n * @default true\n */\n select?: boolean;\n\n /**\n * Optional position to resolve table from. If not provided, uses the current selection.\n */\n pos?: number;\n}\n\n/**\n * Move a table row from index `from` to index `to`.\n *\n * @public\n */\nexport function moveTableRow(options: MoveTableRowOptions): Command {\n return (state, dispatch) => {\n const {\n from: originIndex,\n to: targetIndex,\n select = true,\n pos = state.selection.from,\n } = options;\n const tr = state.tr;\n if (moveRow({ tr, originIndex, targetIndex, select, pos })) {\n dispatch?.(tr);\n return true;\n }\n return false;\n };\n}\n\n/**\n * Options for moveTableColumn\n *\n * @public\n */\nexport interface MoveTableColumnOptions {\n /**\n * The source column index to move from.\n */\n from: number;\n\n /**\n * The destination column index to move to.\n */\n to: number;\n\n /**\n * Whether to select the moved column after the operation.\n *\n * @default true\n */\n select?: boolean;\n\n /**\n * Optional position to resolve table from. If not provided, uses the current selection.\n */\n pos?: number;\n}\n\n/**\n * Move a table column from index `from` to index `to`.\n *\n * @public\n */\nexport function moveTableColumn(options: MoveTableColumnOptions): Command {\n return (state, dispatch) => {\n const {\n from: originIndex,\n to: targetIndex,\n select = true,\n pos = state.selection.from,\n } = options;\n const tr = state.tr;\n if (moveColumn({ tr, originIndex, targetIndex, select, pos })) {\n dispatch?.(tr);\n return true;\n }\n return false;\n };\n}\n","// Utilities used for copy/paste handling.\n//\n// This module handles pasting cell content into tables, or pasting\n// anything into a cell selection, as replacing a block of cells with\n// the content of the selection. When pasting cells into a cell, that\n// involves placing the block of pasted content so that its top left\n// aligns with the selection cell, optionally extending the table to\n// the right or bottom to make sure it is large enough. Pasting into a\n// cell selection is different, here the cells in the selection are\n// clipped to the selection's rectangle, optionally repeating the\n// pasted cells when they are smaller than the selection.\n\nimport type { Node, NodeType, Schema } from 'prosemirror-model';\nimport { Fragment, Slice } from 'prosemirror-model';\nimport type { EditorState, Transaction } from 'prosemirror-state';\nimport { Transform } from 'prosemirror-transform';\n\nimport { CellSelection } from './cellselection';\nimport { tableNodeTypes } from './schema';\nimport type { ColWidths, Rect } from './tablemap';\nimport { TableMap } from './tablemap';\nimport type { CellAttrs } from './util';\nimport { removeColSpan } from './util';\n\n/**\n * @internal\n */\nexport type Area = { width: number; height: number; rows: Fragment[] };\n\n// Utilities to help with copying and pasting table cells\n\n/**\n * Get a rectangular area of cells from a slice, or null if the outer\n * nodes of the slice aren't table cells or rows.\n *\n * @internal\n */\nexport function pastedCells(slice: Slice): Area | null {\n if (slice.size === 0) return null;\n let { content, openStart, openEnd } = slice;\n while (\n content.childCount == 1 &&\n ((openStart > 0 && openEnd > 0) ||\n content.child(0).type.spec.tableRole == 'table')\n ) {\n openStart--;\n openEnd--;\n content = content.child(0).content;\n }\n const first = content.child(0);\n const role = first.type.spec.tableRole;\n const schema = first.type.schema,\n rows = [];\n if (role == 'row') {\n for (let i = 0; i < content.childCount; i++) {\n let cells = content.child(i).content;\n const left = i ? 0 : Math.max(0, openStart - 1);\n const right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);\n if (left || right)\n cells = fitSlice(\n tableNodeTypes(schema).row,\n new Slice(cells, left, right),\n ).content;\n rows.push(cells);\n }\n } else if (role == 'cell' || role == 'header_cell') {\n rows.push(\n openStart || openEnd\n ? fitSlice(\n tableNodeTypes(schema).row,\n new Slice(content, openStart, openEnd),\n ).content\n : content,\n );\n } else {\n return null;\n }\n return ensureRectangular(schema, rows);\n}\n\n// Compute the width and height of a set of cells, and make sure each\n// row has the same number of cells.\nfunction ensureRectangular(schema: Schema, rows: Fragment[]): Area {\n const widths: ColWidths = [];\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n for (let j = row.childCount - 1; j >= 0; j--) {\n const { rowspan, colspan } = row.child(j).attrs;\n for (let r = i; r < i + rowspan; r++)\n widths[r] = (widths[r] || 0) + colspan;\n }\n }\n let width = 0;\n for (let r = 0; r < widths.length; r++) width = Math.max(width, widths[r]);\n for (let r = 0; r < widths.length; r++) {\n if (r >= rows.length) rows.push(Fragment.empty);\n if (widths[r] < width) {\n const empty = tableNodeTypes(schema).cell.createAndFill()!;\n const cells = [];\n for (let i = widths[r]; i < width; i++) {\n cells.push(empty);\n }\n rows[r] = rows[r].append(Fragment.from(cells));\n }\n }\n return { height: rows.length, width, rows };\n}\n\nexport function fitSlice(nodeType: NodeType, slice: Slice): Node {\n const node = nodeType.createAndFill()!;\n const tr = new Transform(node).replace(0, node.content.size, slice);\n return tr.doc;\n}\n\n/**\n * Clip or extend (repeat) the given set of cells to cover the given\n * width and height. Will clip rowspan/colspan cells at the edges when\n * they stick out.\n *\n * @internal\n */\nexport function clipCells(\n { width, height, rows }: Area,\n newWidth: number,\n newHeight: number,\n): Area {\n if (width != newWidth) {\n const added: number[] = [];\n const newRows: Fragment[] = [];\n for (let row = 0; row < rows.length; row++) {\n const frag = rows[row],\n cells = [];\n for (let col = added[row] || 0, i = 0; col < newWidth; i++) {\n let cell = frag.child(i % frag.childCount);\n if (col + cell.attrs.colspan > newWidth)\n cell = cell.type.createChecked(\n removeColSpan(\n cell.attrs as CellAttrs,\n cell.attrs.colspan,\n col + cell.attrs.colspan - newWidth,\n ),\n cell.content,\n );\n cells.push(cell);\n col += cell.attrs.colspan;\n for (let j = 1; j < cell.attrs.rowspan; j++)\n added[row + j] = (added[row + j] || 0) + cell.attrs.colspan;\n }\n newRows.push(Fragment.from(cells));\n }\n rows = newRows;\n width = newWidth;\n }\n\n if (height != newHeight) {\n const newRows = [];\n for (let row = 0, i = 0; row < newHeight; row++, i++) {\n const cells = [],\n source = rows[i % height];\n for (let j = 0; j < source.childCount; j++) {\n let cell = source.child(j);\n if (row + cell.attrs.rowspan > newHeight)\n cell = cell.type.create(\n {\n ...cell.attrs,\n rowspan: Math.max(1, newHeight - cell.attrs.rowspan),\n },\n cell.content,\n );\n cells.push(cell);\n }\n newRows.push(Fragment.from(cells));\n }\n rows = newRows;\n height = newHeight;\n }\n\n return { width, height, rows };\n}\n\n// Make sure a table has at least the given width and height. Return\n// true if something was changed.\nfunction growTable(\n tr: Transaction,\n map: TableMap,\n table: Node,\n start: number,\n width: number,\n height: number,\n mapFrom: number,\n): boolean {\n const schema = tr.doc.type.schema;\n const types = tableNodeTypes(schema);\n let empty;\n let emptyHead;\n if (width > map.width) {\n for (let row = 0, rowEnd = 0; row < map.height; row++) {\n const rowNode = table.child(row);\n rowEnd += rowNode.nodeSize;\n const cells: Node[] = [];\n let add: Node;\n if (rowNode.lastChild == null || rowNode.lastChild.type == types.cell)\n add = empty || (empty = types.cell.createAndFill()!);\n else add = emptyHead || (emptyHead = types.header_cell.createAndFill()!);\n for (let i = map.width; i < width; i++) cells.push(add);\n tr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells);\n }\n }\n if (height > map.height) {\n const cells = [];\n for (\n let i = 0, start = (map.height - 1) * map.width;\n i < Math.max(map.width, width);\n i++\n ) {\n const header =\n i >= map.width\n ? false\n : table.nodeAt(map.map[start + i])!.type == types.header_cell;\n cells.push(\n header\n ? emptyHead || (emptyHead = types.header_cell.createAndFill()!)\n : empty || (empty = types.cell.createAndFill()!),\n );\n }\n\n const emptyRow = types.row.create(null, Fragment.from(cells)),\n rows = [];\n for (let i = map.height; i < height; i++) rows.push(emptyRow);\n tr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows);\n }\n return !!(empty || emptyHead);\n}\n\n// Make sure the given line (left, top) to (right, top) doesn't cross\n// any rowspan cells by splitting cells that cross it. Return true if\n// something changed.\nfunction isolateHorizontal(\n tr: Transaction,\n map: TableMap,\n table: Node,\n start: number,\n left: number,\n right: number,\n top: number,\n mapFrom: number,\n): boolean {\n if (top == 0 || top == map.height) return false;\n let found = false;\n for (let col = left; col < right; col++) {\n const index = top * map.width + col,\n pos = map.map[index];\n if (map.map[index - map.width] == pos) {\n found = true;\n const cell = table.nodeAt(pos)!;\n const { top: cellTop, left: cellLeft } = map.findCell(pos);\n tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), null, {\n ...cell.attrs,\n rowspan: top - cellTop,\n });\n tr.insert(\n tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)),\n cell.type.createAndFill({\n ...cell.attrs,\n rowspan: cellTop + cell.attrs.rowspan - top,\n })!,\n );\n col += cell.attrs.colspan - 1;\n }\n }\n return found;\n}\n\n// Make sure the given line (left, top) to (left, bottom) doesn't\n// cross any colspan cells by splitting cells that cross it. Return\n// true if something changed.\nfunction isolateVertical(\n tr: Transaction,\n map: TableMap,\n table: Node,\n start: number,\n top: number,\n bottom: number,\n left: number,\n mapFrom: number,\n): boolean {\n if (left == 0 || left == map.width) return false;\n let found = false;\n for (let row = top; row < bottom; row++) {\n const index = row * map.width + left,\n pos = map.map[index];\n if (map.map[index - 1] == pos) {\n found = true;\n const cell = table.nodeAt(pos)!;\n const cellLeft = map.colCount(pos);\n const updatePos = tr.mapping.slice(mapFrom).map(pos + start);\n tr.setNodeMarkup(\n updatePos,\n null,\n removeColSpan(\n cell.attrs as CellAttrs,\n left - cellLeft,\n cell.attrs.colspan - (left - cellLeft),\n ),\n );\n tr.insert(\n updatePos + cell.nodeSize,\n cell.type.createAndFill(\n removeColSpan(cell.attrs as CellAttrs, 0, left - cellLeft),\n )!,\n );\n row += cell.attrs.rowspan - 1;\n }\n }\n return found;\n}\n\n/**\n * Insert the given set of cells (as returned by `pastedCells`) into a\n * table, at the position pointed at by rect.\n *\n * @internal\n */\nexport function insertCells(\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n tableStart: number,\n rect: Rect,\n cells: Area,\n): void {\n let table = tableStart ? state.doc.nodeAt(tableStart - 1) : state.doc;\n if (!table) {\n throw new Error('No table found');\n }\n let map = TableMap.get(table);\n const { top, left } = rect;\n const right = left + cells.width,\n bottom = top + cells.height;\n const tr = state.tr;\n let mapFrom = 0;\n\n function recomp(): void {\n table = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc;\n if (!table) {\n throw new Error('No table found');\n }\n map = TableMap.get(table);\n mapFrom = tr.mapping.maps.length;\n }\n\n // Prepare the table to be large enough and not have any cells\n // crossing the boundaries of the rectangle that we want to\n // insert into. If anything about it changes, recompute the table\n // map so that subsequent operations can see the current shape.\n if (growTable(tr, map, table, tableStart, right, bottom, mapFrom)) recomp();\n if (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom))\n recomp();\n if (\n isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom)\n )\n recomp();\n if (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom))\n recomp();\n if (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom))\n recomp();\n\n for (let row = top; row < bottom; row++) {\n const from = map.positionAt(row, left, table),\n to = map.positionAt(row, right, table);\n tr.replace(\n tr.mapping.slice(mapFrom).map(from + tableStart),\n tr.mapping.slice(mapFrom).map(to + tableStart),\n new Slice(cells.rows[row - top], 0, 0),\n );\n }\n recomp();\n tr.setSelection(\n new CellSelection(\n tr.doc.resolve(tableStart + map.positionAt(top, left, table)),\n tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table)),\n ),\n );\n dispatch(tr);\n}\n","// This file defines a number of helpers for wiring up user input to\n// table-related functionality.\n\nimport { keydownHandler } from 'prosemirror-keymap';\nimport type { ResolvedPos, Slice } from 'prosemirror-model';\nimport { Fragment } from 'prosemirror-model';\nimport type { Command, EditorState, Transaction } from 'prosemirror-state';\nimport { Selection, TextSelection } from 'prosemirror-state';\nimport type { EditorView } from 'prosemirror-view';\n\nimport { CellSelection } from './cellselection';\nimport { deleteCellSelection } from './commands';\nimport { clipCells, fitSlice, insertCells, pastedCells } from './copypaste';\nimport { tableNodeTypes } from './schema';\nimport { TableMap } from './tablemap';\nimport {\n cellAround,\n inSameTable,\n isInTable,\n nextCell,\n selectionCell,\n tableEditingKey,\n} from './util';\n\ntype Axis = 'horiz' | 'vert';\n\n/**\n * @public\n */\nexport type Direction = -1 | 1;\n\nexport const handleKeyDown = keydownHandler({\n ArrowLeft: arrow('horiz', -1),\n ArrowRight: arrow('horiz', 1),\n ArrowUp: arrow('vert', -1),\n ArrowDown: arrow('vert', 1),\n\n 'Shift-ArrowLeft': shiftArrow('horiz', -1),\n 'Shift-ArrowRight': shiftArrow('horiz', 1),\n 'Shift-ArrowUp': shiftArrow('vert', -1),\n 'Shift-ArrowDown': shiftArrow('vert', 1),\n\n Backspace: deleteCellSelection,\n 'Mod-Backspace': deleteCellSelection,\n Delete: deleteCellSelection,\n 'Mod-Delete': deleteCellSelection,\n});\n\nfunction maybeSetSelection(\n state: EditorState,\n dispatch: undefined | ((tr: Transaction) => void),\n selection: Selection,\n): boolean {\n if (selection.eq(state.selection)) return false;\n if (dispatch) dispatch(state.tr.setSelection(selection).scrollIntoView());\n return true;\n}\n\n/**\n * @internal\n */\nexport function arrow(axis: Axis, dir: Direction): Command {\n return (state, dispatch, view) => {\n if (!view) return false;\n const sel = state.selection;\n if (sel instanceof CellSelection) {\n return maybeSetSelection(\n state,\n dispatch,\n Selection.near(sel.$headCell, dir),\n );\n }\n if (axis != 'horiz' && !sel.empty) return false;\n const end = atEndOfCell(view, axis, dir);\n if (end == null) return false;\n if (axis == 'horiz') {\n return maybeSetSelection(\n state,\n dispatch,\n Selection.near(state.doc.resolve(sel.head + dir), dir),\n );\n } else {\n const $cell = state.doc.resolve(end);\n const $next = nextCell($cell, axis, dir);\n let newSel;\n if ($next) newSel = Selection.near($next, 1);\n else if (dir < 0)\n newSel = Selection.near(state.doc.resolve($cell.before(-1)), -1);\n else newSel = Selection.near(state.doc.resolve($cell.after(-1)), 1);\n return maybeSetSelection(state, dispatch, newSel);\n }\n };\n}\n\nfunction shiftArrow(axis: Axis, dir: Direction): Command {\n return (state, dispatch, view) => {\n if (!view) return false;\n const sel = state.selection;\n let cellSel: CellSelection;\n if (sel instanceof CellSelection) {\n cellSel = sel;\n } else {\n const end = atEndOfCell(view, axis, dir);\n if (end == null) return false;\n cellSel = new CellSelection(state.doc.resolve(end));\n }\n\n const $head = nextCell(cellSel.$headCell, axis, dir);\n if (!$head) return false;\n return maybeSetSelection(\n state,\n dispatch,\n new CellSelection(cellSel.$anchorCell, $head),\n );\n };\n}\n\nexport function handleTripleClick(view: EditorView, pos: number): boolean {\n const doc = view.state.doc,\n $cell = cellAround(doc.resolve(pos));\n if (!$cell) return false;\n view.dispatch(view.state.tr.setSelection(new CellSelection($cell)));\n return true;\n}\n\n/**\n * @public\n */\nexport function handlePaste(\n view: EditorView,\n _: ClipboardEvent,\n slice: Slice,\n): boolean {\n if (!isInTable(view.state)) return false;\n let cells = pastedCells(slice);\n const sel = view.state.selection;\n if (sel instanceof CellSelection) {\n if (!cells)\n cells = {\n width: 1,\n height: 1,\n rows: [\n Fragment.from(\n fitSlice(tableNodeTypes(view.state.schema).cell, slice),\n ),\n ],\n };\n const table = sel.$anchorCell.node(-1);\n const start = sel.$anchorCell.start(-1);\n const rect = TableMap.get(table).rectBetween(\n sel.$anchorCell.pos - start,\n sel.$headCell.pos - start,\n );\n cells = clipCells(cells, rect.right - rect.left, rect.bottom - rect.top);\n insertCells(view.state, view.dispatch, start, rect, cells);\n return true;\n } else if (cells) {\n const $cell = selectionCell(view.state);\n const start = $cell.start(-1);\n insertCells(\n view.state,\n view.dispatch,\n start,\n TableMap.get($cell.node(-1)).findCell($cell.pos - start),\n cells,\n );\n return true;\n } else {\n return false;\n }\n}\n\nexport function handleMouseDown(\n view: EditorView,\n startEvent: MouseEvent,\n): void {\n // Only handle mouse down events for the main button (usually the left button).\n // This ensures that the cell selection won't be triggered when trying to open\n // the context menu.\n if (startEvent.button != 0) return;\n\n if (startEvent.ctrlKey || startEvent.metaKey) return;\n\n const startDOMCell = domInCell(view, startEvent.target as Node);\n let $anchor;\n if (startEvent.shiftKey && view.state.selection instanceof CellSelection) {\n // Adding to an existing cell selection\n setCellSelection(view.state.selection.$anchorCell, startEvent);\n startEvent.preventDefault();\n } else if (\n startEvent.shiftKey &&\n startDOMCell &&\n ($anchor = cellAround(view.state.selection.$anchor)) != null &&\n cellUnderMouse(view, startEvent)?.pos != $anchor.pos\n ) {\n // Adding to a selection that starts in another cell (causing a\n // cell selection to be created).\n setCellSelection($anchor, startEvent);\n startEvent.preventDefault();\n } else if (!startDOMCell) {\n // Not in a cell, let the default behavior happen.\n return;\n }\n\n // Create and dispatch a cell selection between the given anchor and\n // the position under the mouse.\n function setCellSelection($anchor: ResolvedPos, event: MouseEvent): void {\n let $head = cellUnderMouse(view, event);\n const starting = tableEditingKey.getState(view.state) == null;\n if (!$head || !inSameTable($anchor, $head)) {\n if (starting) $head = $anchor;\n else return;\n }\n const selection = new CellSelection($anchor, $head);\n if (starting || !view.state.selection.eq(selection)) {\n const tr = view.state.tr.setSelection(selection);\n if (starting) tr.setMeta(tableEditingKey, $anchor.pos);\n view.dispatch(tr);\n }\n }\n\n // Stop listening to mouse motion events.\n function stop(): void {\n view.root.removeEventListener('mouseup', stop);\n view.root.removeEventListener('dragstart', stop);\n view.root.removeEventListener('mousemove', move);\n if (tableEditingKey.getState(view.state) != null)\n view.dispatch(view.state.tr.setMeta(tableEditingKey, -1));\n }\n\n function move(_event: Event): void {\n const event = _event as MouseEvent;\n const anchor = tableEditingKey.getState(view.state);\n let $anchor;\n if (anchor != null) {\n // Continuing an existing cross-cell selection\n $anchor = view.state.doc.resolve(anchor);\n } else if (domInCell(view, event.target as Node) != startDOMCell) {\n // Moving out of the initial cell -- start a new cell selection\n $anchor = cellUnderMouse(view, startEvent);\n if (!$anchor) return stop();\n }\n if ($anchor) setCellSelection($anchor, event);\n }\n\n view.root.addEventListener('mouseup', stop);\n view.root.addEventListener('dragstart', stop);\n view.root.addEventListener('mousemove', move);\n}\n\n// Check whether the cursor is at the end of a cell (so that further\n// motion would move out of the cell)\nfunction atEndOfCell(view: EditorView, axis: Axis, dir: number): null | number {\n if (!(view.state.selection instanceof TextSelection)) return null;\n const { $head } = view.state.selection;\n for (let d = $head.depth - 1; d >= 0; d--) {\n const parent = $head.node(d),\n index = dir < 0 ? $head.index(d) : $head.indexAfter(d);\n if (index != (dir < 0 ? 0 : parent.childCount)) return null;\n if (\n parent.type.spec.tableRole == 'cell' ||\n parent.type.spec.tableRole == 'header_cell'\n ) {\n const cellPos = $head.before(d);\n const dirStr: 'up' | 'down' | 'left' | 'right' =\n axis == 'vert' ? (dir > 0 ? 'down' : 'up') : dir > 0 ? 'right' : 'left';\n return view.endOfTextblock(dirStr) ? cellPos : null;\n }\n }\n return null;\n}\n\nfunction domInCell(view: EditorView, dom: Node | null): Node | null {\n for (; dom && dom != view.dom; dom = dom.parentNode) {\n if (dom.nodeName == 'TD' || dom.nodeName == 'TH') {\n return dom;\n }\n }\n return null;\n}\n\nfunction cellUnderMouse(\n view: EditorView,\n event: MouseEvent,\n): ResolvedPos | null {\n const mousePos = view.posAtCoords({\n left: event.clientX,\n top: event.clientY,\n });\n if (!mousePos) return null;\n // Prefer `inside` position for better accuracy with merged cells (rowspan/colspan),\n // but fall back to `pos` if `inside` doesn't resolve to a valid cell\n let { inside, pos } = mousePos;\n return (\n (inside >= 0 && cellAround(view.state.doc.resolve(inside))) ||\n cellAround(view.state.doc.resolve(pos))\n );\n}\n","import type { Node } from 'prosemirror-model';\nimport type { NodeView, ViewMutationRecord } from 'prosemirror-view';\n\nimport type { CellAttrs } from './util';\n\n/**\n * @public\n */\nexport class TableView implements NodeView {\n public dom: HTMLDivElement;\n public table: HTMLTableElement;\n public colgroup: HTMLTableColElement;\n public contentDOM: HTMLTableSectionElement;\n\n constructor(\n public node: Node,\n public defaultCellMinWidth: number,\n ) {\n this.dom = document.createElement('div');\n this.dom.className = 'tableWrapper';\n this.table = this.dom.appendChild(document.createElement('table'));\n this.table.style.setProperty(\n '--default-cell-min-width',\n `${defaultCellMinWidth}px`,\n );\n this.colgroup = this.table.appendChild(document.createElement('colgroup'));\n updateColumnsOnResize(node, this.colgroup, this.table, defaultCellMinWidth);\n this.contentDOM = this.table.appendChild(document.createElement('tbody'));\n }\n\n update(node: Node): boolean {\n if (node.type != this.node.type) return false;\n this.node = node;\n updateColumnsOnResize(\n node,\n this.colgroup,\n this.table,\n this.defaultCellMinWidth,\n );\n return true;\n }\n\n ignoreMutation(record: ViewMutationRecord): boolean {\n return (\n record.type == 'attributes' &&\n (record.target == this.table || this.colgroup.contains(record.target))\n );\n }\n}\n\n/**\n * @public\n */\nexport function updateColumnsOnResize(\n node: Node,\n colgroup: HTMLTableColElement,\n table: HTMLTableElement,\n defaultCellMinWidth: number,\n overrideCol?: number,\n overrideValue?: number,\n): void {\n let totalWidth = 0;\n let fixedWidth = true;\n let nextDOM = colgroup.firstChild as HTMLElement;\n const row = node.firstChild;\n if (!row) return;\n\n for (let i = 0, col = 0; i < row.childCount; i++) {\n const { colspan, colwidth } = row.child(i).attrs as CellAttrs;\n for (let j = 0; j < colspan; j++, col++) {\n const hasWidth =\n overrideCol == col ? overrideValue : colwidth && colwidth[j];\n const cssWidth = hasWidth ? hasWidth + 'px' : '';\n totalWidth += hasWidth || defaultCellMinWidth;\n if (!hasWidth) fixedWidth = false;\n if (!nextDOM) {\n const col = document.createElement('col');\n col.style.width = cssWidth;\n colgroup.appendChild(col);\n } else {\n if (nextDOM.style.width != cssWidth) {\n nextDOM.style.width = cssWidth;\n }\n nextDOM = nextDOM.nextSibling as HTMLElement;\n }\n }\n }\n\n while (nextDOM) {\n const after = nextDOM.nextSibling;\n nextDOM.parentNode?.removeChild(nextDOM);\n nextDOM = after as HTMLElement;\n }\n\n if (fixedWidth) {\n table.style.width = totalWidth + 'px';\n table.style.minWidth = '';\n } else {\n table.style.width = '';\n table.style.minWidth = totalWidth + 'px';\n }\n}\n","import type { Attrs, Node as ProsemirrorNode } from 'prosemirror-model';\nimport type { EditorState, Transaction } from 'prosemirror-state';\nimport { Plugin, PluginKey } from 'prosemirror-state';\nimport type { EditorView, NodeView } from 'prosemirror-view';\nimport { Decoration, DecorationSet } from 'prosemirror-view';\n\nimport { tableNodeTypes } from './schema';\nimport { TableMap } from './tablemap';\nimport { TableView, updateColumnsOnResize } from './tableview';\nimport type { CellAttrs } from './util';\nimport { cellAround, pointsAtCell } from './util';\n\n/**\n * @public\n */\nexport const columnResizingPluginKey = new PluginKey<ResizeState>(\n 'tableColumnResizing',\n);\n\n/**\n * @public\n */\nexport type ColumnResizingOptions = {\n handleWidth?: number;\n /**\n * Minimum width of a cell /column. The column cannot be resized smaller than this.\n */\n cellMinWidth?: number;\n /**\n * The default minWidth of a cell / column when it doesn't have an explicit width (i.e.: it has not been resized manually)\n */\n defaultCellMinWidth?: number;\n lastColumnResizable?: boolean;\n /**\n * A custom node view for the rendering table nodes. By default, the plugin\n * uses the {@link TableView} class. You can explicitly set this to `null` to\n * not use a custom node view.\n */\n View?:\n | (new (\n node: ProsemirrorNode,\n cellMinWidth: number,\n view: EditorView,\n ) => NodeView)\n | null;\n};\n\n/**\n * @public\n */\nexport type Dragging = { startX: number; startWidth: number };\n\n/**\n * @public\n */\nexport function columnResizing({\n handleWidth = 5,\n cellMinWidth = 25,\n defaultCellMinWidth = 100,\n View = TableView,\n lastColumnResizable = true,\n}: ColumnResizingOptions = {}): Plugin {\n const plugin = new Plugin<ResizeState>({\n key: columnResizingPluginKey,\n state: {\n init(_, state) {\n const nodeViews = plugin.spec?.props?.nodeViews;\n const tableName = tableNodeTypes(state.schema).table.name;\n if (View && nodeViews) {\n nodeViews[tableName] = (node, view) => {\n return new View(node, defaultCellMinWidth, view);\n };\n }\n return new ResizeState(-1, false);\n },\n apply(tr, prev) {\n return prev.apply(tr);\n },\n },\n props: {\n attributes: (state): Record<string, string> => {\n const pluginState = columnResizingPluginKey.getState(state);\n return pluginState && pluginState.activeHandle > -1\n ? { class: 'resize-cursor' }\n : {};\n },\n\n handleDOMEvents: {\n mousemove: (view, event) => {\n handleMouseMove(view, event, handleWidth, lastColumnResizable);\n },\n mouseleave: (view) => {\n handleMouseLeave(view);\n },\n mousedown: (view, event) => {\n handleMouseDown(view, event, cellMinWidth, defaultCellMinWidth);\n },\n },\n\n decorations: (state) => {\n const pluginState = columnResizingPluginKey.getState(state);\n if (pluginState && pluginState.activeHandle > -1) {\n return handleDecorations(state, pluginState.activeHandle);\n }\n },\n\n nodeViews: {},\n },\n });\n return plugin;\n}\n\n/**\n * @public\n */\nexport class ResizeState {\n constructor(\n public activeHandle: number,\n public dragging: Dragging | false,\n ) {}\n\n apply(tr: Transaction): ResizeState {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const state = this;\n const action = tr.getMeta(columnResizingPluginKey);\n if (action && action.setHandle != null)\n return new ResizeState(action.setHandle, false);\n if (action && action.setDragging !== undefined)\n return new ResizeState(state.activeHandle, action.setDragging);\n if (state.activeHandle > -1 && tr.docChanged) {\n let handle = tr.mapping.map(state.activeHandle, -1);\n if (!pointsAtCell(tr.doc.resolve(handle))) {\n handle = -1;\n }\n return new ResizeState(handle, state.dragging);\n }\n return state;\n }\n}\n\nfunction handleMouseMove(\n view: EditorView,\n event: MouseEvent,\n handleWidth: number,\n lastColumnResizable: boolean,\n): void {\n if (!view.editable) return;\n\n const pluginState = columnResizingPluginKey.getState(view.state);\n if (!pluginState) return;\n\n if (!pluginState.dragging) {\n const target = domCellAround(event.target as HTMLElement);\n let cell = -1;\n if (target) {\n const { left, right } = target.getBoundingClientRect();\n if (event.clientX - left <= handleWidth)\n cell = edgeCell(view, event, 'left', handleWidth);\n else if (right - event.clientX <= handleWidth)\n cell = edgeCell(view, event, 'right', handleWidth);\n }\n\n if (cell != pluginState.activeHandle) {\n if (!lastColumnResizable && cell !== -1) {\n const $cell = view.state.doc.resolve(cell);\n const table = $cell.node(-1);\n const map = TableMap.get(table);\n const tableStart = $cell.start(-1);\n const col =\n map.colCount($cell.pos - tableStart) +\n $cell.nodeAfter!.attrs.colspan -\n 1;\n\n if (col == map.width - 1) {\n return;\n }\n }\n\n updateHandle(view, cell);\n }\n }\n}\n\nfunction handleMouseLeave(view: EditorView): void {\n if (!view.editable) return;\n\n const pluginState = columnResizingPluginKey.getState(view.state);\n if (pluginState && pluginState.activeHandle > -1 && !pluginState.dragging)\n updateHandle(view, -1);\n}\n\nfunction handleMouseDown(\n view: EditorView,\n event: MouseEvent,\n cellMinWidth: number,\n defaultCellMinWidth: number,\n): boolean {\n if (!view.editable) return false;\n\n const win = view.dom.ownerDocument.defaultView ?? window;\n\n const pluginState = columnResizingPluginKey.getState(view.state);\n if (!pluginState || pluginState.activeHandle == -1 || pluginState.dragging)\n return false;\n\n const cell = view.state.doc.nodeAt(pluginState.activeHandle)!;\n const width = currentColWidth(view, pluginState.activeHandle, cell.attrs);\n view.dispatch(\n view.state.tr.setMeta(columnResizingPluginKey, {\n setDragging: { startX: event.clientX, startWidth: width },\n }),\n );\n\n function finish(event: MouseEvent) {\n win.removeEventListener('mouseup', finish);\n win.removeEventListener('mousemove', move);\n const pluginState = columnResizingPluginKey.getState(view.state);\n if (pluginState?.dragging) {\n updateColumnWidth(\n view,\n pluginState.activeHandle,\n draggedWidth(pluginState.dragging, event, cellMinWidth),\n );\n view.dispatch(\n view.state.tr.setMeta(columnResizingPluginKey, { setDragging: null }),\n );\n }\n }\n\n function move(event: MouseEvent): void {\n if (!event.which) return finish(event);\n const pluginState = columnResizingPluginKey.getState(view.state);\n if (!pluginState) return;\n if (pluginState.dragging) {\n const dragged = draggedWidth(pluginState.dragging, event, cellMinWidth);\n displayColumnWidth(\n view,\n pluginState.activeHandle,\n dragged,\n defaultCellMinWidth,\n );\n }\n }\n\n displayColumnWidth(\n view,\n pluginState.activeHandle,\n width,\n defaultCellMinWidth,\n );\n\n win.addEventListener('mouseup', finish);\n win.addEventListener('mousemove', move);\n event.preventDefault();\n return true;\n}\n\nfunction currentColWidth(\n view: EditorView,\n cellPos: number,\n { colspan, colwidth }: Attrs,\n): number {\n const width = colwidth && colwidth[colwidth.length - 1];\n if (width) return width;\n const dom = view.domAtPos(cellPos);\n const node = dom.node.childNodes[dom.offset] as HTMLElement;\n let domWidth = node.offsetWidth,\n parts = colspan;\n if (colwidth)\n for (let i = 0; i < colspan; i++)\n if (colwidth[i]) {\n domWidth -= colwidth[i];\n parts--;\n }\n return domWidth / parts;\n}\n\nfunction domCellAround(target: HTMLElement | null): HTMLElement | null {\n while (target && target.nodeName != 'TD' && target.nodeName != 'TH')\n target =\n target.classList && target.classList.contains('ProseMirror')\n ? null\n : (target.parentNode as HTMLElement);\n return target;\n}\n\nfunction edgeCell(\n view: EditorView,\n event: MouseEvent,\n side: 'left' | 'right',\n handleWidth: number,\n): number {\n // posAtCoords returns inconsistent positions when cursor is moving\n // across a collapsed table border. Use an offset to adjust the\n // target viewport coordinates away from the table border.\n const offset = side == 'right' ? -handleWidth : handleWidth;\n const found = view.posAtCoords({\n left: event.clientX + offset,\n top: event.clientY,\n });\n if (!found) return -1;\n const { pos } = found;\n const $cell = cellAround(view.state.doc.resolve(pos));\n if (!$cell) return -1;\n if (side == 'right') return $cell.pos;\n const map = TableMap.get($cell.node(-1)),\n start = $cell.start(-1);\n const index = map.map.indexOf($cell.pos - start);\n return index % map.width == 0 ? -1 : start + map.map[index - 1];\n}\n\nfunction draggedWidth(\n dragging: Dragging,\n event: MouseEvent,\n resizeMinWidth: number,\n): number {\n const offset = event.clientX - dragging.startX;\n return Math.max(resizeMinWidth, dragging.startWidth + offset);\n}\n\nfunction updateHandle(view: EditorView, value: number): void {\n view.dispatch(\n view.state.tr.setMeta(columnResizingPluginKey, { setHandle: value }),\n );\n}\n\nfunction updateColumnWidth(\n view: EditorView,\n cell: number,\n width: number,\n): void {\n const $cell = view.state.doc.resolve(cell);\n const table = $cell.node(-1),\n map = TableMap.get(table),\n start = $cell.start(-1);\n const col =\n map.colCount($cell.pos - start) + $cell.nodeAfter!.attrs.colspan - 1;\n const tr = view.state.tr;\n for (let row = 0; row < map.height; row++) {\n const mapIndex = row * map.width + col;\n // Rowspanning cell that has already been handled\n if (row && map.map[mapIndex] == map.map[mapIndex - map.width]) continue;\n const pos = map.map[mapIndex];\n const attrs = table.nodeAt(pos)!.attrs as CellAttrs;\n const index = attrs.colspan == 1 ? 0 : col - map.colCount(pos);\n if (attrs.colwidth && attrs.colwidth[index] == width) continue;\n const colwidth = attrs.colwidth\n ? attrs.colwidth.slice()\n : zeroes(attrs.colspan);\n colwidth[index] = width;\n tr.setNodeMarkup(start + pos, null, { ...attrs, colwidth: colwidth });\n }\n if (tr.docChanged) view.dispatch(tr);\n}\n\nfunction displayColumnWidth(\n view: EditorView,\n cell: number,\n width: number,\n defaultCellMinWidth: number,\n): void {\n const $cell = view.state.doc.resolve(cell);\n const table = $cell.node(-1),\n start = $cell.start(-1);\n const col =\n TableMap.get(table).colCount($cell.pos - start) +\n $cell.nodeAfter!.attrs.colspan -\n 1;\n let dom: Node | null = view.domAtPos($cell.start(-1)).node;\n while (dom && dom.nodeName != 'TABLE') {\n dom = dom.parentNode;\n }\n if (!dom) return;\n updateColumnsOnResize(\n table,\n dom.firstChild as HTMLTableColElement,\n dom as HTMLTableElement,\n defaultCellMinWidth,\n col,\n width,\n );\n}\n\nfunction zeroes(n: number): 0[] {\n return Array(n).fill(0);\n}\n\nexport function handleDecorations(\n state: EditorState,\n cell: number,\n): DecorationSet {\n const decorations = [];\n const $cell = state.doc.resolve(cell);\n const table = $cell.node(-1);\n if (!table) {\n return DecorationSet.empty;\n }\n const map = TableMap.get(table);\n const start = $cell.start(-1);\n const col =\n map.colCount($cell.pos - start) + $cell.nodeAfter!.attrs.colspan - 1;\n for (let row = 0; row < map.height; row++) {\n const index = col + row * map.width;\n // For positions that have either a different cell or the end\n // of the table to their right, and either the top of the table or\n // a different cell above them, add a decoration\n if (\n (col == map.width - 1 || map.map[index] != map.map[index + 1]) &&\n (row == 0 || map.map[index] != map.map[index - map.width])\n ) {\n const cellPos = map.map[index];\n const pos = start + cellPos + table.nodeAt(cellPos)!.nodeSize - 1;\n const dom = document.createElement('div');\n dom.className = 'column-resize-handle';\n if (columnResizingPluginKey.getState(state)?.dragging) {\n decorations.push(\n Decoration.node(\n start + cellPos,\n start + cellPos + table.nodeAt(cellPos)!.nodeSize,\n {\n class: 'column-resize-dragging',\n },\n ),\n );\n }\n\n decorations.push(Decoration.widget(pos, dom));\n }\n }\n return DecorationSet.create(state.doc, decorations);\n}\n","// This file defines a plugin that handles the drawing of cell\n// selections and the basic user interactions for creating and working\n// with such selections. It also makes sure that, after each\n// transaction, the shapes of tables are normalized to be rectangular\n// and not contain overlapping cells.\n\nimport { Plugin } from 'prosemirror-state';\n\nimport { drawCellSelection, normalizeSelection } from './cellselection';\nimport { fixTables, fixTablesKey } from './fixtables';\nimport {\n handleKeyDown,\n handleMouseDown,\n handlePaste,\n handleTripleClick,\n} from './input';\nimport { tableEditingKey } from './util';\n\nexport { CellBookmark, CellSelection } from './cellselection';\nexport type { CellSelectionJSON } from './cellselection';\nexport {\n columnResizing,\n columnResizingPluginKey,\n ResizeState,\n} from './columnresizing';\nexport type { ColumnResizingOptions, Dragging } from './columnresizing';\nexport * from './commands';\nexport {\n clipCells as __clipCells,\n insertCells as __insertCells,\n pastedCells as __pastedCells,\n} from './copypaste';\nexport type { Area as __Area } from './copypaste';\nexport type { Direction } from './input';\nexport { tableNodes, tableNodeTypes } from './schema';\nexport type {\n CellAttributes,\n getFromDOM,\n setDOMAttr,\n TableNodes,\n TableNodesOptions,\n TableRole,\n} from './schema';\nexport { TableMap } from './tablemap';\nexport type { ColWidths, Problem, Rect } from './tablemap';\nexport { TableView, updateColumnsOnResize } from './tableview';\nexport {\n addColSpan,\n cellAround,\n cellNear,\n colCount,\n columnIsHeader,\n findCell,\n inSameTable,\n isInTable,\n moveCellForward,\n nextCell,\n pointsAtCell,\n removeColSpan,\n selectionCell,\n} from './util';\nexport type { MutableAttrs } from './util';\nexport { findCellPos, findCellRange, findTable } from './utils/query';\nexport type { FindNodeResult } from './utils/query';\nexport { fixTables, fixTablesKey, handlePaste, tableEditingKey };\n\n/**\n * @public\n */\nexport type TableEditingOptions = {\n /**\n * Whether to allow table node selection.\n *\n * By default, any node selection wrapping a table will be converted into a\n * CellSelection wrapping all cells in the table. You can pass `true` to allow\n * the selection to remain a NodeSelection.\n *\n * @default false\n */\n allowTableNodeSelection?: boolean;\n};\n\n/**\n * Creates a [plugin](http://prosemirror.net/docs/ref/#state.Plugin)\n * that, when added to an editor, enables cell-selection, handles\n * cell-based copy/paste, and makes sure tables stay well-formed (each\n * row has the same width, and cells don't overlap).\n *\n * You should probably put this plugin near the end of your array of\n * plugins, since it handles mouse and arrow key events in tables\n * rather broadly, and other plugins, like the gap cursor or the\n * column-width dragging plugin, might want to get a turn first to\n * perform more specific behavior.\n *\n * @public\n */\nexport function tableEditing({\n allowTableNodeSelection = false,\n}: TableEditingOptions = {}): Plugin {\n return new Plugin({\n key: tableEditingKey,\n\n // This piece of state is used to remember when a mouse-drag\n // cell-selection is happening, so that it can continue even as\n // transactions (which might move its anchor cell) come in.\n state: {\n init() {\n return null;\n },\n apply(tr, cur) {\n const set = tr.getMeta(tableEditingKey);\n if (set != null) return set == -1 ? null : set;\n if (cur == null || !tr.docChanged) return cur;\n const { deleted, pos } = tr.mapping.mapResult(cur);\n return deleted ? null : pos;\n },\n },\n\n props: {\n decorations: drawCellSelection,\n\n handleDOMEvents: {\n mousedown: handleMouseDown,\n },\n\n createSelectionBetween(view) {\n return tableEditingKey.getState(view.state) != null\n ? view.state.selection\n : null;\n },\n\n handleTripleClick,\n\n handleKeyDown,\n\n handlePaste,\n },\n\n appendTransaction(_, oldState, state) {\n return normalizeSelection(\n state,\n fixTables(state, oldState),\n allowTableNodeSelection,\n );\n },\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "prosemirror-tables",
3
+ "type": "module",
4
+ "version": "1.8.5",
5
+ "description": "ProseMirror's rowspan/colspan tables component",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/ProseMirror/prosemirror-tables.git"
10
+ },
11
+ "main": "dist/index.cjs",
12
+ "module": "dist/index.js",
13
+ "types": "dist/index.d.ts",
14
+ "style": "style/tables.css",
15
+ "exports": {
16
+ ".": {
17
+ "import": "./dist/index.js",
18
+ "require": "./dist/index.cjs"
19
+ },
20
+ "./style/tables.css": "./style/tables.css"
21
+ },
22
+ "files": [
23
+ "style",
24
+ "dist"
25
+ ],
26
+ "dependencies": {
27
+ "prosemirror-keymap": "^1.2.3",
28
+ "prosemirror-model": "^1.25.4",
29
+ "prosemirror-state": "^1.4.4",
30
+ "prosemirror-transform": "^1.10.5",
31
+ "prosemirror-view": "^1.41.4"
32
+ },
33
+ "devDependencies": {
34
+ "@ocavue/eslint-config": "^3.8.0",
35
+ "@ocavue/tsconfig": "^0.6.2",
36
+ "@vitest/coverage-v8": "^4.0.16",
37
+ "builddocs": "^1.0.8",
38
+ "eslint": "^9.39.2",
39
+ "happy-dom": "^20.0.11",
40
+ "ist": "^1.1.7",
41
+ "pkg-pr-new": "^0.0.62",
42
+ "prettier": "^3.7.4",
43
+ "prosemirror-commands": "^1.7.1",
44
+ "prosemirror-example-setup": "^1.2.3",
45
+ "prosemirror-gapcursor": "^1.4.0",
46
+ "prosemirror-menu": "^1.2.5",
47
+ "prosemirror-schema-basic": "^1.2.4",
48
+ "prosemirror-test-builder": "^1.1.1",
49
+ "tsdown": "^0.18.2",
50
+ "typescript": "^5.9.3",
51
+ "vite": "^7.3.0",
52
+ "vitest": "^4.0.16"
53
+ },
54
+ "maintainers": [
55
+ {
56
+ "name": "Eduard Shvedai",
57
+ "email": "eshvedai@atlassian.com"
58
+ },
59
+ {
60
+ "name": "Huanhuan Huang",
61
+ "email": "hhuang@atlassian.com"
62
+ },
63
+ {
64
+ "name": "Ocavue",
65
+ "email": "ocavue@gmail.com"
66
+ }
67
+ ],
68
+ "scripts": {
69
+ "dev": "vite demo",
70
+ "build_demo": "vite build demo",
71
+ "typecheck": "tsc --noEmit",
72
+ "test": "vitest",
73
+ "build": "tsdown",
74
+ "watch": "tsdown --watch",
75
+ "build_readme": "builddocs --name tables --format markdown --main src/README.md src/index.ts > README.md",
76
+ "format": "prettier --write .",
77
+ "lint": "eslint . && prettier --check . && pnpm run typecheck",
78
+ "fix": "eslint --fix . && prettier --write ."
79
+ }
80
+ }
@@ -0,0 +1,48 @@
1
+ .ProseMirror .tableWrapper {
2
+ overflow-x: auto;
3
+ }
4
+ .ProseMirror table {
5
+ border-collapse: collapse;
6
+ table-layout: fixed;
7
+ width: 100%;
8
+ overflow: hidden;
9
+ }
10
+ .ProseMirror td,
11
+ .ProseMirror th {
12
+ vertical-align: top;
13
+ box-sizing: border-box;
14
+ position: relative;
15
+ }
16
+
17
+ .ProseMirror td:not([data-colwidth]):not(.column-resize-dragging),
18
+ .ProseMirror th:not([data-colwidth]):not(.column-resize-dragging) {
19
+ /* if there's no explicit width set and the column is not being resized, set a default width */
20
+ min-width: var(--default-cell-min-width);
21
+ }
22
+
23
+ .ProseMirror .column-resize-handle {
24
+ position: absolute;
25
+ right: -2px;
26
+ top: 0;
27
+ bottom: 0;
28
+ width: 4px;
29
+ z-index: 20;
30
+ background-color: #adf;
31
+ pointer-events: none;
32
+ }
33
+ .ProseMirror.resize-cursor {
34
+ cursor: ew-resize;
35
+ cursor: col-resize;
36
+ }
37
+ /* Give selected cells a blue overlay */
38
+ .ProseMirror .selectedCell:after {
39
+ z-index: 2;
40
+ position: absolute;
41
+ content: '';
42
+ left: 0;
43
+ right: 0;
44
+ top: 0;
45
+ bottom: 0;
46
+ background: rgba(200, 200, 255, 0.4);
47
+ pointer-events: none;
48
+ }