@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,51 @@
1
+ import {
2
+ describe,
3
+ expect,
4
+ it,
5
+ } from 'vitest'
6
+
7
+ import { setupTest } from '../testing'
8
+ import { inputText } from '../testing/keyboard'
9
+
10
+ describe('defineBoldInputRule', () => {
11
+ const { editor, n, m } = setupTest()
12
+ it('should add bold marks when typing "**"', async () => {
13
+ const doc = n.doc(n.p('<a>'))
14
+ editor.set(doc)
15
+
16
+ await inputText('**word')
17
+ expect(editor.view.state.doc.toJSON()).toEqual(
18
+ n.doc(n.p('**word')).toJSON(),
19
+ )
20
+
21
+ await inputText('*')
22
+ expect(editor.view.state.doc.toJSON()).toEqual(
23
+ n.doc(n.p('**word*')).toJSON(),
24
+ )
25
+
26
+ await inputText('*')
27
+ expect(editor.view.state.doc.toJSON()).toEqual(
28
+ n.doc(n.p(m.bold('word'))).toJSON(),
29
+ )
30
+ })
31
+
32
+ it('should not add bold marks when typing "**" inside a code block', async () => {
33
+ const doc = n.doc(n.codeBlock('<a>'))
34
+ editor.set(doc)
35
+
36
+ await inputText('**word** ')
37
+ expect(editor.view.state.doc.toJSON()).toEqual(
38
+ n.doc(n.codeBlock('**word** ')).toJSON(),
39
+ )
40
+ })
41
+
42
+ it('should not add bold marks when typing "**" inside a code mark', async () => {
43
+ const doc = n.doc(n.p(m.code('code <a>')))
44
+ editor.set(doc)
45
+
46
+ await inputText('**word** ')
47
+ expect(editor.view.state.doc.toJSON()).toEqual(
48
+ n.doc(n.p(m.code('code **word** '))).toJSON(),
49
+ )
50
+ })
51
+ })
@@ -0,0 +1,18 @@
1
+ import {
2
+ canUseRegexLookbehind,
3
+ type PlainExtension,
4
+ } from '@prosekit/core'
5
+
6
+ import { defineMarkInputRule } from '../input-rule'
7
+
8
+ /**
9
+ * @internal
10
+ */
11
+ export function defineBoldInputRule(): PlainExtension {
12
+ return defineMarkInputRule({
13
+ regex: canUseRegexLookbehind()
14
+ ? /(?<=\s|^)\*\*([^\s*]|[^\s*][^*]*[^\s*])\*\*$/
15
+ : /\*\*([^\s*]|[^\s*][^*]*[^\s*])\*\*$/,
16
+ type: 'bold',
17
+ })
18
+ }
@@ -0,0 +1,14 @@
1
+ import {
2
+ defineKeymap,
3
+ toggleMark,
4
+ type PlainExtension,
5
+ } from '@prosekit/core'
6
+
7
+ /**
8
+ * @internal
9
+ */
10
+ export function defineBoldKeymap(): PlainExtension {
11
+ return defineKeymap({
12
+ 'Mod-b': toggleMark({ type: 'bold' }),
13
+ })
14
+ }
@@ -0,0 +1,53 @@
1
+ import {
2
+ defineMarkSpec,
3
+ type Extension,
4
+ } from '@prosekit/core'
5
+ import type { Attrs } from '@prosekit/pm/model'
6
+
7
+ /**
8
+ * @internal
9
+ */
10
+ export type BoldSpecExtension = Extension<{
11
+ Marks: {
12
+ bold: Attrs
13
+ }
14
+ }>
15
+
16
+ /**
17
+ * @internal
18
+ */
19
+ export function defineBoldSpec(): BoldSpecExtension {
20
+ return defineMarkSpec({
21
+ name: 'bold',
22
+ parseDOM: [
23
+ { tag: 'strong' },
24
+ // This works around a Google Docs misbehavior where
25
+ // pasted content will be inexplicably wrapped in `<b>`
26
+ // tags with a font-weight normal.
27
+ {
28
+ tag: 'b',
29
+ getAttrs: (node: string | HTMLElement): null | false => {
30
+ return (
31
+ typeof node !== 'string'
32
+ && node.style.fontWeight !== 'normal'
33
+ && null
34
+ )
35
+ },
36
+ },
37
+ { style: 'font-weight=400', clearMark: (m) => m.type.name == 'strong' },
38
+ {
39
+ style: 'font-weight',
40
+ getAttrs: (value: string | HTMLElement): null | false => {
41
+ return (
42
+ typeof value === 'string'
43
+ && /^(bold(er)?|[5-9]\d{2,})$/.test(value)
44
+ && null
45
+ )
46
+ },
47
+ },
48
+ ],
49
+ toDOM() {
50
+ return ['strong', 0]
51
+ },
52
+ })
53
+ }
@@ -0,0 +1,32 @@
1
+ import {
2
+ union,
3
+ type Union,
4
+ } from '@prosekit/core'
5
+
6
+ import {
7
+ defineBoldCommands,
8
+ type BoldCommandsExtension,
9
+ } from './bold-commands'
10
+ import { defineBoldInputRule } from './bold-input-rule'
11
+ import { defineBoldKeymap } from './bold-keymap'
12
+ import {
13
+ defineBoldSpec,
14
+ type BoldSpecExtension,
15
+ } from './bold-spec'
16
+
17
+ /**
18
+ * @internal
19
+ */
20
+ export type BoldExtension = Union<[BoldSpecExtension, BoldCommandsExtension]>
21
+
22
+ /**
23
+ * @public
24
+ */
25
+ export function defineBold(): BoldExtension {
26
+ return union(
27
+ defineBoldSpec(),
28
+ defineBoldCommands(),
29
+ defineBoldKeymap(),
30
+ defineBoldInputRule(),
31
+ )
32
+ }
@@ -0,0 +1,14 @@
1
+ export {
2
+ defineBold,
3
+ type BoldExtension,
4
+ } from './bold'
5
+ export {
6
+ defineBoldCommands,
7
+ type BoldCommandsExtension,
8
+ } from './bold-commands'
9
+ export { defineBoldInputRule } from './bold-input-rule'
10
+ export { defineBoldKeymap } from './bold-keymap'
11
+ export {
12
+ defineBoldSpec,
13
+ type BoldSpecExtension,
14
+ } from './bold-spec'
@@ -0,0 +1,23 @@
1
+ import {
2
+ defineCommands,
3
+ toggleMark,
4
+ type Extension,
5
+ } from '@prosekit/core'
6
+
7
+ /**
8
+ * @internal
9
+ */
10
+ export type CodeCommandsExtension = Extension<{
11
+ Commands: {
12
+ toggleCode: []
13
+ }
14
+ }>
15
+
16
+ /**
17
+ * @internal
18
+ */
19
+ export function defineCodeCommands(): CodeCommandsExtension {
20
+ return defineCommands({
21
+ toggleCode: () => toggleMark({ type: 'code' }),
22
+ })
23
+ }
@@ -0,0 +1,18 @@
1
+ import {
2
+ canUseRegexLookbehind,
3
+ type PlainExtension,
4
+ } from '@prosekit/core'
5
+
6
+ import { defineMarkInputRule } from '../input-rule'
7
+
8
+ /**
9
+ * @internal
10
+ */
11
+ export function defineCodeInputRule(): PlainExtension {
12
+ return defineMarkInputRule({
13
+ regex: canUseRegexLookbehind()
14
+ ? /(?<=\s|^)`([^\s`]|[^\s`][^`]*[^\s`])`$/
15
+ : /`([^\s`]|[^\s`][^`]*[^\s`])`$/,
16
+ type: 'code',
17
+ })
18
+ }
@@ -0,0 +1,14 @@
1
+ import {
2
+ defineKeymap,
3
+ toggleMark,
4
+ type PlainExtension,
5
+ } from '@prosekit/core'
6
+
7
+ /**
8
+ * @internal
9
+ */
10
+ export function defineCodeKeymap(): PlainExtension {
11
+ return defineKeymap({
12
+ 'Mod-e': toggleMark({ type: 'code' }),
13
+ })
14
+ }
@@ -0,0 +1,28 @@
1
+ import {
2
+ defineMarkSpec,
3
+ type Extension,
4
+ } from '@prosekit/core'
5
+ import type { Attrs } from '@prosekit/pm/model'
6
+
7
+ /**
8
+ * @internal
9
+ */
10
+ export type CodeSpecExtension = Extension<{
11
+ Marks: {
12
+ code: Attrs
13
+ }
14
+ }>
15
+
16
+ /**
17
+ * @internal
18
+ */
19
+ export function defineCodeSpec(): CodeSpecExtension {
20
+ return defineMarkSpec({
21
+ name: 'code',
22
+ parseDOM: [{ tag: 'code' }],
23
+ code: true,
24
+ toDOM() {
25
+ return ['code', 0]
26
+ },
27
+ })
28
+ }
@@ -0,0 +1,32 @@
1
+ import {
2
+ union,
3
+ type Union,
4
+ } from '@prosekit/core'
5
+
6
+ import {
7
+ defineCodeCommands,
8
+ type CodeCommandsExtension,
9
+ } from './code-commands'
10
+ import { defineCodeInputRule } from './code-input-rule'
11
+ import { defineCodeKeymap } from './code-keymap'
12
+ import {
13
+ defineCodeSpec,
14
+ type CodeSpecExtension,
15
+ } from './code-spec'
16
+
17
+ /**
18
+ * @internal
19
+ */
20
+ export type CodeExtension = Union<[CodeSpecExtension, CodeCommandsExtension]>
21
+
22
+ /**
23
+ * @public
24
+ */
25
+ export function defineCode(): CodeExtension {
26
+ return union(
27
+ defineCodeSpec(),
28
+ defineCodeCommands(),
29
+ defineCodeKeymap(),
30
+ defineCodeInputRule(),
31
+ )
32
+ }
@@ -0,0 +1,14 @@
1
+ export {
2
+ defineCode,
3
+ type CodeExtension,
4
+ } from './code'
5
+ export {
6
+ defineCodeCommands,
7
+ type CodeCommandsExtension,
8
+ } from './code-commands'
9
+ export { defineCodeInputRule } from './code-input-rule'
10
+ export { defineCodeKeymap } from './code-keymap'
11
+ export {
12
+ defineCodeSpec,
13
+ type CodeSpecExtension,
14
+ } from './code-spec'
@@ -0,0 +1,44 @@
1
+ import {
2
+ defineCommands,
3
+ insertNode,
4
+ setBlockType,
5
+ setNodeAttrs,
6
+ toggleNode,
7
+ type Extension,
8
+ } from '@prosekit/core'
9
+
10
+ import type { CodeBlockAttrs } from './code-block-types'
11
+
12
+ /**
13
+ * @internal
14
+ */
15
+ export type CodeBlockCommandsExtension = Extension<{
16
+ Commands: {
17
+ setCodeBlock: [attrs?: CodeBlockAttrs]
18
+ insertCodeBlock: [attrs?: CodeBlockAttrs]
19
+ toggleCodeBlock: [attrs?: CodeBlockAttrs]
20
+ setCodeBlockAttrs: [attrs: CodeBlockAttrs]
21
+ }
22
+ }>
23
+
24
+ /**
25
+ * Adds commands for working with `codeBlock` nodes.
26
+ *
27
+ * @public
28
+ */
29
+ export function defineCodeBlockCommands(): CodeBlockCommandsExtension {
30
+ return defineCommands({
31
+ setCodeBlock: (attrs?: CodeBlockAttrs) => {
32
+ return setBlockType({ type: 'codeBlock', attrs })
33
+ },
34
+ insertCodeBlock: (attrs?: CodeBlockAttrs) => {
35
+ return insertNode({ type: 'codeBlock', attrs })
36
+ },
37
+ toggleCodeBlock: (attrs?: CodeBlockAttrs) => {
38
+ return toggleNode({ type: 'codeBlock', attrs })
39
+ },
40
+ setCodeBlockAttrs: (attrs: CodeBlockAttrs) => {
41
+ return setNodeAttrs({ type: 'codeBlock', attrs })
42
+ },
43
+ })
44
+ }
@@ -0,0 +1,40 @@
1
+ import {
2
+ definePlugin,
3
+ type Extension,
4
+ } from '@prosekit/core'
5
+ import {
6
+ createHighlightPlugin,
7
+ type Parser,
8
+ } from 'prosemirror-highlight'
9
+
10
+ /**
11
+ * @public
12
+ *
13
+ * An alias for the `Parser` type from the `prosemirror-highlight` package.
14
+ */
15
+ export type HighlightParser = Parser
16
+
17
+ /**
18
+ * @public
19
+ */
20
+ export type CodeBlockHighlightOptions = {
21
+ parser: HighlightParser
22
+ }
23
+
24
+ /**
25
+ * Adds syntax highlighting to code blocks. This function requires a `Parser`
26
+ * instance from the `prosemirror-highlight` package. See the
27
+ * [documentation](https://github.com/ocavue/prosemirror-highlight) for more
28
+ * information.
29
+ *
30
+ * @param options
31
+ *
32
+ * @public
33
+ */
34
+ export function defineCodeBlockHighlight({
35
+ parser,
36
+ }: CodeBlockHighlightOptions): Extension {
37
+ return definePlugin(
38
+ createHighlightPlugin({ parser }),
39
+ )
40
+ }
@@ -0,0 +1,36 @@
1
+ import type { PlainExtension } from '@prosekit/core'
2
+
3
+ import { defineTextBlockEnterRule } from '../enter-rule'
4
+ import { defineTextBlockInputRule } from '../input-rule'
5
+
6
+ import type { CodeBlockAttrs } from './code-block-types'
7
+
8
+ /**
9
+ * Adds input rules for `codeBlock` nodes.
10
+ *
11
+ * @public
12
+ */
13
+ export function defineCodeBlockInputRule(): PlainExtension {
14
+ return defineTextBlockInputRule({
15
+ regex: /^```(\S*)\s$/,
16
+ type: 'codeBlock',
17
+ attrs: getAttrs,
18
+ })
19
+ }
20
+
21
+ /**
22
+ * Adds enter rules for `codeBlock` nodes.
23
+ *
24
+ * @public
25
+ */
26
+ export function defineCodeBlockEnterRule(): PlainExtension {
27
+ return defineTextBlockEnterRule({
28
+ regex: /^```(\S*)$/,
29
+ type: 'codeBlock',
30
+ attrs: getAttrs,
31
+ })
32
+ }
33
+
34
+ function getAttrs(match: RegExpMatchArray): CodeBlockAttrs {
35
+ return { language: match[1] || '' }
36
+ }
@@ -0,0 +1,61 @@
1
+ import {
2
+ defaultBlockAt,
3
+ defineKeymap,
4
+ type PlainExtension,
5
+ } from '@prosekit/core'
6
+ import {
7
+ TextSelection,
8
+ type Command,
9
+ } from '@prosekit/pm/state'
10
+
11
+ /**
12
+ * Defines the keymap for code blocks.
13
+ */
14
+ export function defineCodeBlockKeymap(): PlainExtension {
15
+ return defineKeymap({
16
+ Enter: existCodeBlock,
17
+ })
18
+ }
19
+
20
+ /**
21
+ * Exit a code block and insert a default block below if the cursor is at the
22
+ * end of the code block and the code block is ended with two new lines.
23
+ */
24
+ const existCodeBlock: Command = (state, dispatch) => {
25
+ if (!state.selection.empty) {
26
+ return false
27
+ }
28
+
29
+ const { $head } = state.selection
30
+ const parent = $head.parent
31
+ if (
32
+ parent.isTextblock
33
+ && parent.type.spec.code
34
+ && $head.parentOffset === parent.content.size
35
+ && parent.textContent.endsWith('\n\n')
36
+ ) {
37
+ const grandParent = $head.node(-1)
38
+ const insertIndex = $head.indexAfter(-1)
39
+ const type = defaultBlockAt(grandParent.contentMatchAt(insertIndex))
40
+
41
+ if (!type || !grandParent.canReplaceWith(insertIndex, insertIndex, type)) {
42
+ return false
43
+ }
44
+
45
+ if (dispatch) {
46
+ const { tr } = state
47
+ tr.delete($head.pos - 2, $head.pos)
48
+ const pos = tr.selection.$head.after()
49
+ const node = type.createAndFill()
50
+ if (node) {
51
+ tr.replaceWith(pos, pos, node)
52
+ tr.setSelection(TextSelection.near(tr.doc.resolve(pos), 1))
53
+ dispatch(tr.scrollIntoView())
54
+ }
55
+ }
56
+
57
+ return true
58
+ }
59
+
60
+ return false
61
+ }
@@ -0,0 +1,58 @@
1
+ import type { Extension } from '@prosekit/core'
2
+ import type { SpecialLanguage } from 'shiki'
3
+
4
+ import { defineCodeBlockHighlight } from './code-block-highlight'
5
+ import type {
6
+ ShikiBundledLanguage,
7
+ ShikiBundledTheme,
8
+ } from './shiki-bundle'
9
+ import type { ShikiHighlighterOptions } from './shiki-highlighter-chunk'
10
+ import { createLazyParser } from './shiki-parser'
11
+
12
+ /**
13
+ * The options to configure the Shiki highlighter.
14
+ *
15
+ * @public
16
+ */
17
+ export interface CodeBlockShikiOptions extends Omit<ShikiHighlighterOptions, 'themes' | 'langs' | 'engine'> {
18
+ /**
19
+ * A list of Shiki themes to pre-load. The first theme in the list will be
20
+ * used to render the code block.
21
+ *
22
+ * @default ['one-dark-pro']
23
+ */
24
+ themes?: ShikiBundledTheme[]
25
+
26
+ /**
27
+ * A list of Shiki languages to pre-load.
28
+ *
29
+ * @default ['text']
30
+ */
31
+ langs?: (ShikiBundledLanguage | SpecialLanguage)[]
32
+
33
+ /**
34
+ * The RegExp engine to use. By default, the JavaScript engine is used.
35
+ */
36
+ engine?: ShikiHighlighterOptions['engine']
37
+ }
38
+
39
+ /**
40
+ * Adds syntax highlighting to code blocks using the [Shiki](https://github.com/shikijs/shiki) package.
41
+ *
42
+ * It will set two CSS variables on the code block elements:
43
+ *
44
+ * - `--prosemirror-highlight`: sets text color
45
+ * - `--prosemirror-highlight-bg`: sets background color
46
+ *
47
+ * @param options - The options to configure the Shiki highlighter.
48
+ *
49
+ * @public
50
+ */
51
+ export function defineCodeBlockShiki({
52
+ themes = ['one-dark-pro'],
53
+ langs = ['text'],
54
+ ...rest
55
+ }: CodeBlockShikiOptions = {}): Extension {
56
+ const parser = createLazyParser({ themes, langs, ...rest })
57
+ return defineCodeBlockHighlight({ parser })
58
+ }