@prosekit/extensions 0.11.4 → 0.11.6

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 (384) hide show
  1. package/dist/commit/style.css +2 -0
  2. package/dist/commit/style.css.map +1 -0
  3. package/dist/commit/style.js +1 -0
  4. package/dist/drop-indicator-E7nCfdnR.js +58 -0
  5. package/dist/drop-indicator-E7nCfdnR.js.map +1 -0
  6. package/dist/enter-rule-RdhEA900.js +2 -1
  7. package/dist/enter-rule-RdhEA900.js.map +1 -0
  8. package/dist/file-DVUhe5KJ.js +134 -0
  9. package/dist/file-DVUhe5KJ.js.map +1 -0
  10. package/dist/gap-cursor/style.css +2 -0
  11. package/dist/gap-cursor/style.css.map +1 -0
  12. package/dist/gap-cursor/style.js +1 -0
  13. package/dist/index-DY6lIIYV.d.ts +134 -0
  14. package/dist/index-DY6lIIYV.d.ts.map +1 -0
  15. package/dist/{input-rule-Gji4N7Oe.js → input-rule-B17tpW4m.js} +3 -3
  16. package/dist/input-rule-B17tpW4m.js.map +1 -0
  17. package/dist/list/style.css +2 -0
  18. package/dist/list/style.css.map +1 -0
  19. package/dist/list/style.js +1 -0
  20. package/dist/loro/style.css +2 -0
  21. package/dist/loro/style.css.map +1 -0
  22. package/dist/loro/style.js +1 -0
  23. package/dist/{mark-rule-D7zaa32n.js → mark-rule-CGmswjQ_.js} +3 -3
  24. package/dist/mark-rule-CGmswjQ_.js.map +1 -0
  25. package/dist/{paste-rule-Cca3n5TA.js → paste-rule-BIztzELg.js} +5 -15
  26. package/dist/paste-rule-BIztzELg.js.map +1 -0
  27. package/dist/placeholder/style.css +2 -0
  28. package/dist/placeholder/style.css.map +1 -0
  29. package/dist/placeholder/style.js +1 -0
  30. package/dist/prosekit-extensions-autocomplete.d.ts +2 -1
  31. package/dist/prosekit-extensions-autocomplete.d.ts.map +1 -0
  32. package/dist/prosekit-extensions-autocomplete.js +2 -9
  33. package/dist/prosekit-extensions-autocomplete.js.map +1 -0
  34. package/dist/prosekit-extensions-blockquote.d.ts +2 -1
  35. package/dist/prosekit-extensions-blockquote.d.ts.map +1 -0
  36. package/dist/prosekit-extensions-blockquote.js +4 -4
  37. package/dist/prosekit-extensions-blockquote.js.map +1 -0
  38. package/dist/prosekit-extensions-bold.d.ts +2 -1
  39. package/dist/prosekit-extensions-bold.d.ts.map +1 -0
  40. package/dist/prosekit-extensions-bold.js +3 -2
  41. package/dist/prosekit-extensions-bold.js.map +1 -0
  42. package/dist/prosekit-extensions-code-block.d.ts +3 -2
  43. package/dist/prosekit-extensions-code-block.d.ts.map +1 -0
  44. package/dist/prosekit-extensions-code-block.js +5 -6
  45. package/dist/prosekit-extensions-code-block.js.map +1 -0
  46. package/dist/prosekit-extensions-code.d.ts +2 -1
  47. package/dist/prosekit-extensions-code.d.ts.map +1 -0
  48. package/dist/prosekit-extensions-code.js +3 -2
  49. package/dist/prosekit-extensions-code.js.map +1 -0
  50. package/dist/prosekit-extensions-commit.d.ts +2 -1
  51. package/dist/prosekit-extensions-commit.d.ts.map +1 -0
  52. package/dist/prosekit-extensions-commit.js +11 -13
  53. package/dist/prosekit-extensions-commit.js.map +1 -0
  54. package/dist/prosekit-extensions-doc.d.ts +2 -1
  55. package/dist/prosekit-extensions-doc.d.ts.map +1 -0
  56. package/dist/prosekit-extensions-doc.js +2 -1
  57. package/dist/prosekit-extensions-doc.js.map +1 -0
  58. package/dist/prosekit-extensions-drop-cursor.d.ts +2 -1
  59. package/dist/prosekit-extensions-drop-cursor.d.ts.map +1 -0
  60. package/dist/prosekit-extensions-drop-cursor.js +2 -1
  61. package/dist/prosekit-extensions-drop-cursor.js.map +1 -0
  62. package/dist/prosekit-extensions-drop-indicator.d.ts +5 -107
  63. package/dist/prosekit-extensions-drop-indicator.d.ts.map +1 -0
  64. package/dist/prosekit-extensions-drop-indicator.js +1 -1
  65. package/dist/prosekit-extensions-enter-rule.d.ts +2 -1
  66. package/dist/prosekit-extensions-enter-rule.d.ts.map +1 -0
  67. package/dist/prosekit-extensions-file.d.ts +2 -125
  68. package/dist/prosekit-extensions-file.js +1 -139
  69. package/dist/prosekit-extensions-gap-cursor.d.ts +2 -2
  70. package/dist/prosekit-extensions-gap-cursor.d.ts.map +1 -0
  71. package/dist/prosekit-extensions-gap-cursor.js +2 -1
  72. package/dist/prosekit-extensions-gap-cursor.js.map +1 -0
  73. package/dist/prosekit-extensions-hard-break.d.ts +2 -5
  74. package/dist/prosekit-extensions-hard-break.d.ts.map +1 -0
  75. package/dist/prosekit-extensions-hard-break.js +2 -1
  76. package/dist/prosekit-extensions-hard-break.js.map +1 -0
  77. package/dist/prosekit-extensions-heading.d.ts +2 -1
  78. package/dist/prosekit-extensions-heading.d.ts.map +1 -0
  79. package/dist/prosekit-extensions-heading.js +5 -6
  80. package/dist/prosekit-extensions-heading.js.map +1 -0
  81. package/dist/prosekit-extensions-horizontal-rule.d.ts +2 -1
  82. package/dist/prosekit-extensions-horizontal-rule.d.ts.map +1 -0
  83. package/dist/prosekit-extensions-horizontal-rule.js +5 -6
  84. package/dist/prosekit-extensions-horizontal-rule.js.map +1 -0
  85. package/dist/prosekit-extensions-image.d.ts +80 -3
  86. package/dist/prosekit-extensions-image.d.ts.map +1 -0
  87. package/dist/prosekit-extensions-image.js +90 -10
  88. package/dist/prosekit-extensions-image.js.map +1 -0
  89. package/dist/prosekit-extensions-input-rule.d.ts +2 -1
  90. package/dist/prosekit-extensions-input-rule.d.ts.map +1 -0
  91. package/dist/prosekit-extensions-input-rule.js +1 -1
  92. package/dist/prosekit-extensions-italic.d.ts +2 -1
  93. package/dist/prosekit-extensions-italic.d.ts.map +1 -0
  94. package/dist/prosekit-extensions-italic.js +3 -2
  95. package/dist/prosekit-extensions-italic.js.map +1 -0
  96. package/dist/prosekit-extensions-link.d.ts +2 -1
  97. package/dist/prosekit-extensions-link.d.ts.map +1 -0
  98. package/dist/prosekit-extensions-link.js +6 -5
  99. package/dist/prosekit-extensions-link.js.map +1 -0
  100. package/dist/prosekit-extensions-list.d.ts +22 -21
  101. package/dist/prosekit-extensions-list.d.ts.map +1 -0
  102. package/dist/prosekit-extensions-list.js +7 -8
  103. package/dist/prosekit-extensions-list.js.map +1 -0
  104. package/dist/prosekit-extensions-loro.d.ts +14 -13
  105. package/dist/prosekit-extensions-loro.d.ts.map +1 -0
  106. package/dist/prosekit-extensions-loro.js +2 -1
  107. package/dist/prosekit-extensions-loro.js.map +1 -0
  108. package/dist/prosekit-extensions-mark-rule.d.ts +2 -1
  109. package/dist/prosekit-extensions-mark-rule.d.ts.map +1 -0
  110. package/dist/prosekit-extensions-mark-rule.js +1 -1
  111. package/dist/prosekit-extensions-mention.d.ts +2 -1
  112. package/dist/prosekit-extensions-mention.d.ts.map +1 -0
  113. package/dist/prosekit-extensions-mention.js +2 -1
  114. package/dist/prosekit-extensions-mention.js.map +1 -0
  115. package/dist/prosekit-extensions-mod-click-prevention.d.ts +2 -1
  116. package/dist/prosekit-extensions-mod-click-prevention.d.ts.map +1 -0
  117. package/dist/prosekit-extensions-mod-click-prevention.js +2 -1
  118. package/dist/prosekit-extensions-mod-click-prevention.js.map +1 -0
  119. package/dist/prosekit-extensions-paragraph.d.ts +2 -5
  120. package/dist/prosekit-extensions-paragraph.d.ts.map +1 -0
  121. package/dist/prosekit-extensions-paragraph.js +2 -1
  122. package/dist/prosekit-extensions-paragraph.js.map +1 -0
  123. package/dist/prosekit-extensions-paste-rule.d.ts +2 -1
  124. package/dist/prosekit-extensions-paste-rule.d.ts.map +1 -0
  125. package/dist/prosekit-extensions-paste-rule.js +1 -1
  126. package/dist/prosekit-extensions-placeholder.d.ts +2 -1
  127. package/dist/prosekit-extensions-placeholder.d.ts.map +1 -0
  128. package/dist/prosekit-extensions-placeholder.js +5 -5
  129. package/dist/prosekit-extensions-placeholder.js.map +1 -0
  130. package/dist/prosekit-extensions-readonly.d.ts +2 -1
  131. package/dist/prosekit-extensions-readonly.d.ts.map +1 -0
  132. package/dist/prosekit-extensions-readonly.js +2 -1
  133. package/dist/prosekit-extensions-readonly.js.map +1 -0
  134. package/dist/prosekit-extensions-search.d.ts +2 -1
  135. package/dist/prosekit-extensions-search.d.ts.map +1 -0
  136. package/dist/prosekit-extensions-search.js +3 -3
  137. package/dist/prosekit-extensions-search.js.map +1 -0
  138. package/dist/prosekit-extensions-strike.d.ts +2 -1
  139. package/dist/prosekit-extensions-strike.d.ts.map +1 -0
  140. package/dist/prosekit-extensions-strike.js +3 -2
  141. package/dist/prosekit-extensions-strike.js.map +1 -0
  142. package/dist/prosekit-extensions-table.d.ts +47 -114
  143. package/dist/prosekit-extensions-table.d.ts.map +1 -0
  144. package/dist/prosekit-extensions-table.js +2 -2
  145. package/dist/prosekit-extensions-text-align.d.ts +2 -1
  146. package/dist/prosekit-extensions-text-align.d.ts.map +1 -0
  147. package/dist/prosekit-extensions-text-align.js +2 -1
  148. package/dist/prosekit-extensions-text-align.js.map +1 -0
  149. package/dist/prosekit-extensions-text.d.ts +2 -1
  150. package/dist/prosekit-extensions-text.d.ts.map +1 -0
  151. package/dist/prosekit-extensions-text.js +2 -1
  152. package/dist/prosekit-extensions-text.js.map +1 -0
  153. package/dist/prosekit-extensions-underline.d.ts +2 -1
  154. package/dist/prosekit-extensions-underline.d.ts.map +1 -0
  155. package/dist/prosekit-extensions-underline.js +2 -1
  156. package/dist/prosekit-extensions-underline.js.map +1 -0
  157. package/dist/prosekit-extensions-virtual-selection.d.ts +2 -1
  158. package/dist/prosekit-extensions-virtual-selection.d.ts.map +1 -0
  159. package/dist/prosekit-extensions-virtual-selection.js +3 -3
  160. package/dist/prosekit-extensions-virtual-selection.js.map +1 -0
  161. package/dist/prosekit-extensions-yjs.d.ts +2 -1
  162. package/dist/prosekit-extensions-yjs.d.ts.map +1 -0
  163. package/dist/prosekit-extensions-yjs.js +2 -1
  164. package/dist/prosekit-extensions-yjs.js.map +1 -0
  165. package/dist/prosekit-extensions.js +1 -0
  166. package/dist/search/style.css +2 -0
  167. package/dist/search/style.css.map +1 -0
  168. package/dist/search/style.js +1 -0
  169. package/dist/{shiki-highlighter-chunk-DSPM0T27.d.ts → shiki-highlighter-chunk-Cwu1Jr9o.d.ts} +2 -1
  170. package/dist/shiki-highlighter-chunk-Cwu1Jr9o.d.ts.map +1 -0
  171. package/dist/shiki-highlighter-chunk.d.ts +1 -1
  172. package/dist/shiki-highlighter-chunk.js +3 -5
  173. package/dist/shiki-highlighter-chunk.js.map +1 -0
  174. package/dist/table/style.css +2 -0
  175. package/dist/table/style.css.map +1 -0
  176. package/dist/table/style.js +1 -0
  177. package/dist/table-BNwuK7xg.js +297 -0
  178. package/dist/table-BNwuK7xg.js.map +1 -0
  179. package/dist/virtual-selection/style.css +2 -0
  180. package/dist/virtual-selection/style.css.map +1 -0
  181. package/dist/virtual-selection/style.js +1 -0
  182. package/dist/yjs/style.css +2 -0
  183. package/dist/yjs/style.css.map +1 -0
  184. package/dist/yjs/style.js +1 -0
  185. package/package.json +12 -10
  186. package/src/autocomplete/autocomplete-helpers.ts +74 -0
  187. package/src/autocomplete/autocomplete-plugin.ts +186 -0
  188. package/src/autocomplete/autocomplete-rule.ts +117 -0
  189. package/src/autocomplete/autocomplete.spec.ts +132 -0
  190. package/src/autocomplete/autocomplete.ts +29 -0
  191. package/src/autocomplete/index.ts +9 -0
  192. package/src/blockquote/blockquote-commands.ts +32 -0
  193. package/src/blockquote/blockquote-input-rule.ts +14 -0
  194. package/src/blockquote/blockquote-keymap.spec.ts +45 -0
  195. package/src/blockquote/blockquote-keymap.ts +31 -0
  196. package/src/blockquote/blockquote-spec.ts +24 -0
  197. package/src/blockquote/blockquote.ts +34 -0
  198. package/src/blockquote/index.ts +14 -0
  199. package/src/bold/bold-commands.ts +23 -0
  200. package/src/bold/bold-input-rule.spec.ts +51 -0
  201. package/src/bold/bold-input-rule.ts +18 -0
  202. package/src/bold/bold-keymap.ts +14 -0
  203. package/src/bold/bold-spec.ts +53 -0
  204. package/src/bold/bold.ts +32 -0
  205. package/src/bold/index.ts +14 -0
  206. package/src/code/code-commands.ts +23 -0
  207. package/src/code/code-input-rule.ts +18 -0
  208. package/src/code/code-keymap.ts +14 -0
  209. package/src/code/code-spec.ts +28 -0
  210. package/src/code/code.ts +32 -0
  211. package/src/code/index.ts +14 -0
  212. package/src/code-block/code-block-commands.ts +44 -0
  213. package/src/code-block/code-block-highlight.ts +40 -0
  214. package/src/code-block/code-block-input-rule.ts +36 -0
  215. package/src/code-block/code-block-keymap.ts +61 -0
  216. package/src/code-block/code-block-shiki.ts +58 -0
  217. package/src/code-block/code-block-spec.spec.ts +164 -0
  218. package/src/code-block/code-block-spec.ts +71 -0
  219. package/src/code-block/code-block-types.ts +8 -0
  220. package/src/code-block/code-block.ts +46 -0
  221. package/src/code-block/index.ts +32 -0
  222. package/src/code-block/shiki-bundle.ts +8 -0
  223. package/src/code-block/shiki-highlighter-chunk.ts +84 -0
  224. package/src/code-block/shiki-highlighter.ts +22 -0
  225. package/src/code-block/shiki-parser.ts +36 -0
  226. package/src/commit/index.ts +330 -0
  227. package/src/commit/style.css +7 -0
  228. package/src/doc/index.ts +21 -0
  229. package/src/drop-cursor/drop-cursor.ts +46 -0
  230. package/src/drop-cursor/index.ts +5 -0
  231. package/src/drop-indicator/drop-indicator-facet.ts +62 -0
  232. package/src/drop-indicator/drop-indicator.ts +35 -0
  233. package/src/drop-indicator/index.ts +14 -0
  234. package/src/enter-rule/index.ts +241 -0
  235. package/src/file/file-drop-handler.ts +75 -0
  236. package/src/file/file-paste-handler.spec.ts +95 -0
  237. package/src/file/file-paste-handler.ts +59 -0
  238. package/src/file/file-upload.ts +140 -0
  239. package/src/file/helpers.ts +39 -0
  240. package/src/file/index.ts +16 -0
  241. package/src/gap-cursor/gap-cursor.ts +28 -0
  242. package/src/gap-cursor/index.ts +4 -0
  243. package/src/gap-cursor/style.css +25 -0
  244. package/src/hard-break/hard-break-commands.ts +31 -0
  245. package/src/hard-break/hard-break-keymap.spec.ts +45 -0
  246. package/src/hard-break/hard-break-keymap.ts +16 -0
  247. package/src/hard-break/hard-break-spec.ts +31 -0
  248. package/src/hard-break/hard-break.ts +32 -0
  249. package/src/hard-break/index.ts +13 -0
  250. package/src/heading/heading-commands.ts +37 -0
  251. package/src/heading/heading-input-rule.ts +22 -0
  252. package/src/heading/heading-keymap.spec.ts +53 -0
  253. package/src/heading/heading-keymap.ts +40 -0
  254. package/src/heading/heading-spec.ts +39 -0
  255. package/src/heading/heading-types.ts +3 -0
  256. package/src/heading/heading.ts +34 -0
  257. package/src/heading/index.ts +15 -0
  258. package/src/horizontal-rule/horizontal-rule-commands.spec.ts +61 -0
  259. package/src/horizontal-rule/horizontal-rule-commands.ts +37 -0
  260. package/src/horizontal-rule/horizontal-rule-input-rule.spec.ts +61 -0
  261. package/src/horizontal-rule/horizontal-rule-input-rule.ts +26 -0
  262. package/src/horizontal-rule/horizontal-rule-spec.ts +21 -0
  263. package/src/horizontal-rule/horizontal-rule.ts +29 -0
  264. package/src/horizontal-rule/index.ts +14 -0
  265. package/src/image/image-commands.ts +36 -0
  266. package/src/image/image-spec.ts +72 -0
  267. package/src/image/image-upload-handler.ts +156 -0
  268. package/src/image/image.ts +25 -0
  269. package/src/image/index.ts +22 -0
  270. package/src/index.ts +1 -0
  271. package/src/input-rule/index.ts +237 -0
  272. package/src/italic/index.ts +14 -0
  273. package/src/italic/italic-commands.spec.ts +75 -0
  274. package/src/italic/italic-commands.ts +23 -0
  275. package/src/italic/italic-input-rule.spec.ts +25 -0
  276. package/src/italic/italic-input-rule.ts +18 -0
  277. package/src/italic/italic-keymap.ts +14 -0
  278. package/src/italic/italic-spec.ts +35 -0
  279. package/src/italic/italic.ts +34 -0
  280. package/src/link/index.spec.ts +88 -0
  281. package/src/link/index.ts +156 -0
  282. package/src/link/link-paste-rule.spec.ts +194 -0
  283. package/src/link/link-paste-rule.ts +22 -0
  284. package/src/link/link-regex.spec.ts +82 -0
  285. package/src/link/link-regex.ts +79 -0
  286. package/src/link/link-types.ts +8 -0
  287. package/src/list/index.ts +25 -0
  288. package/src/list/list-commands.ts +61 -0
  289. package/src/list/list-drop-indicator.ts +37 -0
  290. package/src/list/list-input-rules.ts +14 -0
  291. package/src/list/list-keymap.spec.ts +39 -0
  292. package/src/list/list-keymap.ts +48 -0
  293. package/src/list/list-plugins.ts +35 -0
  294. package/src/list/list-serializer.ts +38 -0
  295. package/src/list/list-spec.ts +60 -0
  296. package/src/list/list-types.spec.ts +10 -0
  297. package/src/list/list-types.ts +23 -0
  298. package/src/list/list.spec.ts +134 -0
  299. package/src/list/list.ts +38 -0
  300. package/src/list/style.css +128 -0
  301. package/src/loro/index.ts +17 -0
  302. package/src/loro/loro-commands.ts +27 -0
  303. package/src/loro/loro-cursor-plugin.ts +28 -0
  304. package/src/loro/loro-keymap.ts +23 -0
  305. package/src/loro/loro-sync-plugin.ts +14 -0
  306. package/src/loro/loro-undo-plugin.ts +12 -0
  307. package/src/loro/loro.ts +75 -0
  308. package/src/loro/style.css +33 -0
  309. package/src/mark-rule/apply.ts +129 -0
  310. package/src/mark-rule/index.ts +2 -0
  311. package/src/mark-rule/mark-rule.spec.ts +123 -0
  312. package/src/mark-rule/mark-rule.ts +48 -0
  313. package/src/mark-rule/range.ts +107 -0
  314. package/src/mark-rule/types.ts +30 -0
  315. package/src/mention/index.ts +90 -0
  316. package/src/mod-click-prevention/index.ts +35 -0
  317. package/src/paragraph/index.ts +7 -0
  318. package/src/paragraph/paragraph-commands.ts +29 -0
  319. package/src/paragraph/paragraph-keymap.ts +15 -0
  320. package/src/paragraph/paragraph-spec.ts +31 -0
  321. package/src/paragraph/paragraph.ts +37 -0
  322. package/src/paste-rule/index.ts +10 -0
  323. package/src/paste-rule/mark-paste-rule.spec.ts +112 -0
  324. package/src/paste-rule/mark-paste-rule.ts +194 -0
  325. package/src/paste-rule/paste-rule-plugin.ts +53 -0
  326. package/src/paste-rule/paste-rule.spec.ts +96 -0
  327. package/src/paste-rule/paste-rule.ts +60 -0
  328. package/src/paste-rule/split-text-by-regex.spec.ts +97 -0
  329. package/src/paste-rule/split-text-by-regex.ts +44 -0
  330. package/src/placeholder/index.ts +113 -0
  331. package/src/placeholder/style.css +7 -0
  332. package/src/readonly/index.ts +22 -0
  333. package/src/search/index.ts +140 -0
  334. package/src/search/style.css +13 -0
  335. package/src/strike/index.ts +101 -0
  336. package/src/table/index.ts +53 -0
  337. package/src/table/style.css +42 -0
  338. package/src/table/table-commands/delete-cell-selection.spec.ts +41 -0
  339. package/src/table/table-commands/delete-cell-selection.ts +1 -0
  340. package/src/table/table-commands/exit-table.spec.ts +45 -0
  341. package/src/table/table-commands/exit-table.ts +49 -0
  342. package/src/table/table-commands/insert-table.spec.ts +39 -0
  343. package/src/table/table-commands/insert-table.ts +80 -0
  344. package/src/table/table-commands/move-table-column.spec.ts +618 -0
  345. package/src/table/table-commands/move-table-column.ts +4 -0
  346. package/src/table/table-commands/move-table-row.spec.ts +380 -0
  347. package/src/table/table-commands/move-table-row.ts +4 -0
  348. package/src/table/table-commands/select-table-cell.spec.ts +34 -0
  349. package/src/table/table-commands/select-table-cell.ts +35 -0
  350. package/src/table/table-commands/select-table-column.spec.ts +33 -0
  351. package/src/table/table-commands/select-table-column.ts +39 -0
  352. package/src/table/table-commands/select-table-row.spec.ts +32 -0
  353. package/src/table/table-commands/select-table-row.ts +39 -0
  354. package/src/table/table-commands/select-table.spec.ts +36 -0
  355. package/src/table/table-commands/select-table.ts +50 -0
  356. package/src/table/table-commands.ts +110 -0
  357. package/src/table/table-drop-indicator.ts +40 -0
  358. package/src/table/table-plugins.ts +15 -0
  359. package/src/table/table-spec.spec.ts +113 -0
  360. package/src/table/table-spec.ts +109 -0
  361. package/src/table/table-utils.ts +16 -0
  362. package/src/table/table.ts +49 -0
  363. package/src/table/test-utils.ts +28 -0
  364. package/src/testing/clipboard.ts +58 -0
  365. package/src/testing/format-html.ts +5 -0
  366. package/src/testing/index.ts +161 -0
  367. package/src/testing/keyboard.ts +36 -0
  368. package/src/testing/markdown.ts +23 -0
  369. package/src/text/index.ts +24 -0
  370. package/src/text-align/index.ts +133 -0
  371. package/src/types/assert-type-equal.ts +8 -0
  372. package/src/underline/index.ts +83 -0
  373. package/src/virtual-selection/index.ts +100 -0
  374. package/src/virtual-selection/style.css +5 -0
  375. package/src/yjs/index.ts +22 -0
  376. package/src/yjs/style.css +31 -0
  377. package/src/yjs/yjs-commands.ts +27 -0
  378. package/src/yjs/yjs-cursor-plugin.ts +25 -0
  379. package/src/yjs/yjs-keymap.ts +23 -0
  380. package/src/yjs/yjs-sync-plugin.ts +23 -0
  381. package/src/yjs/yjs-undo-plugin.ts +87 -0
  382. package/src/yjs/yjs.ts +84 -0
  383. package/dist/drop-indicator-dB9rZn8e.js +0 -267
  384. package/dist/table-CPI9ZxbK.js +0 -760
@@ -0,0 +1,330 @@
1
+ import {
2
+ defineDefaultState,
3
+ definePlugin,
4
+ jsonFromNode,
5
+ union,
6
+ type NodeJSON,
7
+ type PlainExtension,
8
+ type StepJSON,
9
+ } from '@prosekit/core'
10
+ import {
11
+ DOMSerializer,
12
+ Fragment,
13
+ Slice,
14
+ type ProseMirrorNode,
15
+ } from '@prosekit/pm/model'
16
+ import {
17
+ PluginKey,
18
+ ProseMirrorPlugin,
19
+ type Transaction,
20
+ } from '@prosekit/pm/state'
21
+ import { Step } from '@prosekit/pm/transform'
22
+ import {
23
+ Decoration,
24
+ DecorationSet,
25
+ type EditorView,
26
+ } from '@prosekit/pm/view'
27
+ import {
28
+ ChangeSet,
29
+ type Change,
30
+ } from 'prosemirror-changeset'
31
+
32
+ /**
33
+ * A JSON representation of a commit.
34
+ */
35
+ interface Commit {
36
+ /**
37
+ * The current doc node in the JSON format
38
+ */
39
+ doc: NodeJSON
40
+ /**
41
+ * The parent node in the JSON format
42
+ */
43
+ parent: NodeJSON
44
+ /**
45
+ * An array of steps in the JSON format that transform the parent node to the
46
+ * current doc node.
47
+ */
48
+ steps: StepJSON[]
49
+ }
50
+
51
+ function getChanges(
52
+ doc: ProseMirrorNode,
53
+ parent: ProseMirrorNode,
54
+ steps: Step[],
55
+ ): readonly Change[] {
56
+ const initSet = ChangeSet.create(parent)
57
+ const currSet = initSet.addSteps(
58
+ doc,
59
+ steps.map((step) => step.getMap()),
60
+ null,
61
+ )
62
+ return currSet.changes
63
+ }
64
+
65
+ function renderDivWeight(view: EditorView): HTMLElement {
66
+ const document = view.dom.ownerDocument
67
+ return document.createElement('div')
68
+ }
69
+
70
+ function decorateDeletionSlice(
71
+ slice: Slice,
72
+ ): Array<(view: EditorView) => HTMLElement> {
73
+ // Get the fragment of the deleted content
74
+ let { openStart, openEnd, content } = slice
75
+
76
+ while (openStart > 0 && openEnd > 0 && content.childCount === 1) {
77
+ openStart--
78
+ openEnd--
79
+ content = content.child(0).content
80
+ }
81
+
82
+ // Nothing to render
83
+ if (content.childCount === 0) {
84
+ return []
85
+ }
86
+
87
+ // For example, if the slice is
88
+ // {
89
+ // openStart: 1,
90
+ // openEnd: 1,
91
+ // content: <p>Hello</p><p>World</p>
92
+ // }
93
+ // We should render the following decorations:
94
+ // <span>Hello</span>
95
+ // <div></div>
96
+ // <span>World</span>
97
+ if (openStart > 0 && openEnd > 0 && content.childCount === 2) {
98
+ const head = Fragment.from([content.child(0)])
99
+ const tail = Fragment.from([content.child(1)])
100
+ return [
101
+ ...decorateDeletionSlice(new Slice(head, openStart, openStart)),
102
+ renderDivWeight,
103
+ ...decorateDeletionSlice(new Slice(tail, openEnd, openEnd)),
104
+ ]
105
+ }
106
+
107
+ // For example, if the slice is
108
+ // {
109
+ // openStart: 1,
110
+ // openEnd: 0,
111
+ // content: <p>Hello</p><p>World</p>
112
+ // }
113
+ // We should render the following decorations:
114
+ // <span>Hello</span>
115
+ // <div><p>World</p></div>
116
+ if (openStart > 0 && content.childCount >= 2) {
117
+ const nodes = content.content
118
+ const head = Fragment.from(nodes.slice(0, 1))
119
+ const body = Fragment.from(nodes.slice(1))
120
+
121
+ return [
122
+ ...decorateDeletionSlice(new Slice(head, openStart, openStart)),
123
+ ...decorateDeletionSlice(new Slice(body, 0, openEnd)),
124
+ ]
125
+ }
126
+
127
+ // For example, if the slice is
128
+ // {
129
+ // openStart: 0,
130
+ // openEnd: 1,
131
+ // content: <p>Hello</p><p>World</p>
132
+ // }
133
+ // We should render the following decorations:
134
+ // <div><p>Hello</p></div>
135
+ // <span>World</span>
136
+ if (openEnd > 0 && content.childCount >= 2) {
137
+ const nodes = content.content
138
+ const body = Fragment.from(nodes.slice(0, -1))
139
+ const tail = Fragment.from(nodes.slice(-1))
140
+ return [
141
+ ...decorateDeletionSlice(new Slice(body, openStart, 0)),
142
+ ...decorateDeletionSlice(new Slice(tail, openEnd, openEnd)),
143
+ ]
144
+ }
145
+
146
+ const schema = content.child(0).type.schema
147
+ const isInline = content.child(0).isInline
148
+
149
+ const render = (view: EditorView): HTMLElement => {
150
+ const document = view.dom.ownerDocument
151
+
152
+ // Render the fragment to HTML
153
+ const element = document.createElement(isInline ? 'span' : 'div')
154
+ const serializer = DOMSerializer.fromSchema(schema)
155
+ serializer.serializeFragment(content, { document }, element)
156
+
157
+ // Add the class to the element
158
+ element.classList.add('prosekit-commit-deletion')
159
+ return element
160
+ }
161
+
162
+ return [render]
163
+ }
164
+
165
+ function decorateDeletion(
166
+ /** The doc node before the deletion */
167
+ doc: ProseMirrorNode,
168
+ /** The start position of the deleted text in the doc node */
169
+ from: number,
170
+ /** The end position of the deleted text in the doc node */
171
+ to: number,
172
+ /** The insert position of the decoration in the doc node after the change */
173
+ pos: number,
174
+ ): Decoration[] {
175
+ const slice = doc.slice(from, to)
176
+
177
+ const renders = decorateDeletionSlice(slice)
178
+ const count = renders.length
179
+
180
+ return renders.map((render, index) =>
181
+ Decoration.widget(pos, render, {
182
+ side: -20 - count + index,
183
+ // Ensure the text in the decoration is able to be selected.
184
+ ignoreSelection: true,
185
+ })
186
+ )
187
+ }
188
+
189
+ function decorateAddition(
190
+ /** The start position of the inserted text in the doc node */
191
+ from: number,
192
+ /** The end position of the inserted text in the doc node */
193
+ to: number,
194
+ ): Decoration {
195
+ return Decoration.inline(from, to, { class: 'prosekit-commit-addition' })
196
+ }
197
+
198
+ function decorateChange(prev: ProseMirrorNode, change: Change): Decoration[] {
199
+ const { fromA, toA, fromB, toB } = change
200
+ const decorations: Decoration[] = []
201
+
202
+ if (fromA < toA) {
203
+ decorations.push(...decorateDeletion(prev, fromA, toA, fromB))
204
+ }
205
+ if (fromB < toB) {
206
+ decorations.push(decorateAddition(fromB, toB))
207
+ }
208
+
209
+ return decorations
210
+ }
211
+
212
+ function decorateCommit(
213
+ doc: ProseMirrorNode,
214
+ parent: ProseMirrorNode,
215
+ steps: Step[],
216
+ ): DecorationSet {
217
+ const changes = getChanges(doc, parent, steps)
218
+ const decorations = changes.flatMap((change) => decorateChange(parent, change))
219
+ return DecorationSet.create(doc, decorations)
220
+ }
221
+
222
+ function defineCommitDecoration(commit: Commit): PlainExtension {
223
+ const key = new PluginKey<DecorationSet>('prosekit-commit-decoration')
224
+
225
+ return definePlugin(({ schema }): ProseMirrorPlugin => {
226
+ const parent = schema.nodeFromJSON(commit.parent)
227
+ const steps = commit.steps.map((step) => Step.fromJSON(schema, step))
228
+
229
+ return new ProseMirrorPlugin({
230
+ key,
231
+ state: {
232
+ init: (_, instance): DecorationSet => {
233
+ return decorateCommit(instance.doc, parent, steps)
234
+ },
235
+ apply: (tr, deco: DecorationSet): DecorationSet => {
236
+ return deco.map(tr.mapping, tr.doc)
237
+ },
238
+ },
239
+ props: {
240
+ decorations: (state): DecorationSet | undefined => {
241
+ return key.getState(state)
242
+ },
243
+ },
244
+ })
245
+ })
246
+ }
247
+
248
+ /**
249
+ * Define an extension to display the changes from the given commit in the editor.
250
+ */
251
+ function defineCommitViewer(commit: Commit): PlainExtension {
252
+ return union(
253
+ defineDefaultState({ defaultDoc: commit.doc }),
254
+ defineCommitDecoration(commit),
255
+ )
256
+ }
257
+
258
+ class CommitRecorder {
259
+ private parent: ProseMirrorNode | null = null
260
+ private doc: ProseMirrorNode | null = null
261
+ private steps: Step[] = []
262
+
263
+ /**
264
+ * Return a commit object including all changes since the last commit. `null`
265
+ * will be returned if there is no change.
266
+ */
267
+ commit(): Commit | null {
268
+ if (
269
+ !this.parent
270
+ || !this.doc
271
+ || this.steps.length === 0
272
+ || this.parent.eq(this.doc)
273
+ ) {
274
+ return null
275
+ }
276
+
277
+ const commit: Commit = {
278
+ doc: jsonFromNode(this.doc),
279
+ parent: jsonFromNode(this.parent),
280
+ steps: this.steps.map((step) => step.toJSON() as StepJSON),
281
+ }
282
+ this.init(this.doc)
283
+ return commit
284
+ }
285
+
286
+ /**
287
+ * @internal
288
+ */
289
+ init(doc: ProseMirrorNode): void {
290
+ this.doc = doc
291
+ this.parent = doc
292
+ this.steps = []
293
+ }
294
+
295
+ /**
296
+ * @internal
297
+ */
298
+ apply(tr: Transaction): void {
299
+ this.steps.push(...tr.steps)
300
+ this.doc = tr.doc
301
+ }
302
+ }
303
+
304
+ /**
305
+ * Define an extension that can record the changes in the editor.
306
+ */
307
+ function defineCommitRecorder(commitRecorder: CommitRecorder): PlainExtension {
308
+ const key = new PluginKey<DecorationSet>('prosekit-commit-recorder')
309
+
310
+ return definePlugin(
311
+ new ProseMirrorPlugin({
312
+ key,
313
+ state: {
314
+ init: (_, state): void => {
315
+ commitRecorder.init(state.doc)
316
+ },
317
+ apply: (tr): void => {
318
+ commitRecorder.apply(tr)
319
+ },
320
+ },
321
+ }),
322
+ )
323
+ }
324
+
325
+ export {
326
+ CommitRecorder,
327
+ defineCommitRecorder,
328
+ defineCommitViewer,
329
+ type Commit,
330
+ }
@@ -0,0 +1,7 @@
1
+ .prosekit-commit-deletion {
2
+ background-color: #e5534b80;
3
+ text-decoration: line-through;
4
+ }
5
+ .prosekit-commit-addition {
6
+ background-color: #53e54b80;
7
+ }
@@ -0,0 +1,21 @@
1
+ import {
2
+ defineNodeSpec,
3
+ type Extension,
4
+ } from '@prosekit/core'
5
+ import type { Attrs } from '@prosekit/pm/model'
6
+
7
+ /**
8
+ * @internal
9
+ */
10
+ export type DocExtension = Extension<{ Nodes: { doc: Attrs } }>
11
+
12
+ /**
13
+ * @public
14
+ */
15
+ export function defineDoc(): DocExtension {
16
+ return defineNodeSpec({
17
+ name: 'doc',
18
+ content: 'block+',
19
+ topNode: true,
20
+ })
21
+ }
@@ -0,0 +1,46 @@
1
+ import {
2
+ definePlugin,
3
+ type PlainExtension,
4
+ } from '@prosekit/core'
5
+ import { dropCursor } from 'prosemirror-dropcursor'
6
+
7
+ export interface DropCursorOptions {
8
+ /**
9
+ * The color of the cursor. Use `false` to apply no color and rely only on class.
10
+ *
11
+ * @default 'black'
12
+ */
13
+ color?: string | false
14
+
15
+ /**
16
+ * The precise width of the cursor in pixels.
17
+ *
18
+ * @default 1
19
+ */
20
+ width?: number
21
+
22
+ /**
23
+ * A CSS class name to add to the cursor element.
24
+ */
25
+ class?: string
26
+ }
27
+
28
+ /**
29
+ * @internal
30
+ */
31
+ export type DropCursorExtension = PlainExtension
32
+
33
+ /**
34
+ * Show up a decoration at the drop position when something is dragged over the editor.
35
+ *
36
+ * See [prosemirror-dropcursor](https://github.com/ProseMirror/prosemirror-dropcursor) for more information.
37
+ *
38
+ * You probably want to use `<DropIndicator />` component instead of this extension.
39
+ *
40
+ * @public
41
+ */
42
+ export function defineDropCursor(
43
+ options?: DropCursorOptions,
44
+ ): DropCursorExtension {
45
+ return definePlugin(() => dropCursor(options))
46
+ }
@@ -0,0 +1,5 @@
1
+ export {
2
+ defineDropCursor,
3
+ type DropCursorExtension,
4
+ type DropCursorOptions,
5
+ } from './drop-cursor'
@@ -0,0 +1,62 @@
1
+ import {
2
+ defineFacet,
3
+ defineFacetPayload,
4
+ pluginFacet,
5
+ type PlainExtension,
6
+ type PluginPayload,
7
+ } from '@prosekit/core'
8
+ import type {
9
+ DragEventHandler,
10
+ DropIndicatorPluginOptions,
11
+ ShowHandler,
12
+ } from 'prosemirror-drop-indicator'
13
+ import { createDropIndicatorPlugin } from 'prosemirror-drop-indicator'
14
+
15
+ /**
16
+ * @internal
17
+ */
18
+ export function defineDropIndicatorPayload(
19
+ payload: DropIndicatorPluginOptions,
20
+ ): PlainExtension {
21
+ return defineFacetPayload(dropIndicatorFacet, [payload]) as PlainExtension
22
+ }
23
+
24
+ const dropIndicatorFacet = defineFacet<DropIndicatorPluginOptions, PluginPayload>({
25
+ parent: pluginFacet,
26
+ singleton: true,
27
+ reducer: (payloads: DropIndicatorPluginOptions[]): PluginPayload => {
28
+ let showHandlers = payloads.map(p => p.onShow).filter(x => !!x)
29
+ let hideHandlers = payloads.map(p => p.onHide).filter(x => !!x)
30
+ let dragHandlers = payloads.map(p => p.onDrag).filter(x => !!x)
31
+
32
+ let showHandler: ShowHandler = (options) => {
33
+ for (let fn of showHandlers) {
34
+ fn(options)
35
+ }
36
+ }
37
+
38
+ let hideHandler: VoidFunction = () => {
39
+ for (let fn of hideHandlers) {
40
+ fn()
41
+ }
42
+ }
43
+
44
+ let dragHandler: DragEventHandler = (options): boolean => {
45
+ for (let fn of dragHandlers) {
46
+ if (fn(options) === false) return false
47
+ }
48
+ return true
49
+ }
50
+
51
+ if (showHandlers.length === 0) {
52
+ // No `onShow` event handler, so we don't need to create a plugin.
53
+ return []
54
+ }
55
+
56
+ return createDropIndicatorPlugin({
57
+ onDrag: dragHandler,
58
+ onShow: showHandler,
59
+ onHide: hideHandler,
60
+ })
61
+ },
62
+ })
@@ -0,0 +1,35 @@
1
+ import type { PlainExtension } from '@prosekit/core'
2
+ import type { DropIndicatorPluginOptions } from 'prosemirror-drop-indicator'
3
+
4
+ import { defineDropIndicatorPayload } from './drop-indicator-facet'
5
+
6
+ /**
7
+ * @internal
8
+ */
9
+ export type DropIndicatorExtension = PlainExtension
10
+
11
+ /**
12
+ * Defines an extension that controls the behavior of the drop indicator.
13
+ *
14
+ * This extension itself doesn't draw the drop indicator, but it provides the
15
+ * necessary callbacks to do so. You probably don't want to use this extension
16
+ * directly, but rather use the `<DropIndicator>` component.
17
+ *
18
+ * You can add this extension multiple times. If any extension has `onDrag`
19
+ * callback defined, and it returns `false`, then the drop point will be
20
+ * discarded.
21
+ *
22
+ * @public
23
+ */
24
+ export function defineDropIndicator(
25
+ options?: DropIndicatorOptions,
26
+ ): DropIndicatorExtension {
27
+ return defineDropIndicatorPayload(options ?? {})
28
+ }
29
+
30
+ /**
31
+ * Options for {@link defineDropIndicator}.
32
+ *
33
+ * @public
34
+ */
35
+ export interface DropIndicatorOptions extends DropIndicatorPluginOptions {}
@@ -0,0 +1,14 @@
1
+ export type {
2
+ DragEventHandler,
3
+ DragEventHandlerOptions,
4
+ Line,
5
+ Point,
6
+ ShowHandler,
7
+ ShowHandlerOptions,
8
+ ViewDragging,
9
+ } from 'prosemirror-drop-indicator'
10
+ export {
11
+ defineDropIndicator,
12
+ type DropIndicatorExtension,
13
+ type DropIndicatorOptions,
14
+ } from './drop-indicator'