@prosekit/extensions 0.14.0 → 0.14.2

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 (248) hide show
  1. package/dist/{drop-indicator-B_oMfeVP.js → drop-indicator-DJq8pF92.js} +1 -1
  2. package/dist/{drop-indicator-B_oMfeVP.js.map → drop-indicator-DJq8pF92.js.map} +1 -1
  3. package/dist/{file-iLVR0eM0.js → file-upload-I9m1EJAM.js} +1 -1
  4. package/dist/file-upload-I9m1EJAM.js.map +1 -0
  5. package/dist/{index-cp1u4e0e.d.ts → file-upload-dr3IXUty.d.ts} +1 -1
  6. package/dist/file-upload-dr3IXUty.d.ts.map +1 -0
  7. package/dist/{paste-rule-BaDghcaU.js → mark-paste-rule--F1QPUcU.js} +2 -2
  8. package/dist/mark-paste-rule--F1QPUcU.js.map +1 -0
  9. package/dist/{mark-rule-CYe8zk4q.js → mark-rule-Bqdm49Eq.js} +2 -2
  10. package/dist/mark-rule-Bqdm49Eq.js.map +1 -0
  11. package/dist/prosekit-extensions-autocomplete.d.ts +1 -1
  12. package/dist/prosekit-extensions-autocomplete.js +17 -17
  13. package/dist/prosekit-extensions-autocomplete.js.map +1 -1
  14. package/dist/prosekit-extensions-background-color.d.ts +1 -1
  15. package/dist/prosekit-extensions-background-color.js.map +1 -1
  16. package/dist/prosekit-extensions-blockquote.d.ts +13 -13
  17. package/dist/prosekit-extensions-blockquote.d.ts.map +1 -1
  18. package/dist/prosekit-extensions-blockquote.js +6 -5
  19. package/dist/prosekit-extensions-blockquote.js.map +1 -1
  20. package/dist/prosekit-extensions-bold.d.ts +12 -12
  21. package/dist/prosekit-extensions-bold.d.ts.map +1 -1
  22. package/dist/prosekit-extensions-bold.js +1 -1
  23. package/dist/prosekit-extensions-bold.js.map +1 -1
  24. package/dist/prosekit-extensions-code-block.d.ts +53 -36
  25. package/dist/prosekit-extensions-code-block.d.ts.map +1 -1
  26. package/dist/prosekit-extensions-code-block.js +78 -72
  27. package/dist/prosekit-extensions-code-block.js.map +1 -1
  28. package/dist/prosekit-extensions-code.d.ts +12 -12
  29. package/dist/prosekit-extensions-code.d.ts.map +1 -1
  30. package/dist/prosekit-extensions-code.js +1 -1
  31. package/dist/prosekit-extensions-code.js.map +1 -1
  32. package/dist/prosekit-extensions-commit.d.ts +1 -1
  33. package/dist/prosekit-extensions-commit.js +1 -1
  34. package/dist/prosekit-extensions-drop-indicator.js +1 -1
  35. package/dist/prosekit-extensions-enter-rule.d.ts +6 -78
  36. package/dist/prosekit-extensions-enter-rule.d.ts.map +1 -1
  37. package/dist/prosekit-extensions-enter-rule.js +37 -2
  38. package/dist/prosekit-extensions-enter-rule.js.map +1 -0
  39. package/dist/prosekit-extensions-file.d.ts +2 -2
  40. package/dist/prosekit-extensions-file.js +1 -1
  41. package/dist/prosekit-extensions-hard-break.d.ts +7 -7
  42. package/dist/prosekit-extensions-hard-break.d.ts.map +1 -1
  43. package/dist/prosekit-extensions-hard-break.js.map +1 -1
  44. package/dist/prosekit-extensions-heading.d.ts +15 -15
  45. package/dist/prosekit-extensions-heading.d.ts.map +1 -1
  46. package/dist/prosekit-extensions-heading.js +1 -1
  47. package/dist/prosekit-extensions-heading.js.map +1 -1
  48. package/dist/prosekit-extensions-horizontal-rule.d.ts +7 -7
  49. package/dist/prosekit-extensions-horizontal-rule.d.ts.map +1 -1
  50. package/dist/prosekit-extensions-horizontal-rule.js +11 -10
  51. package/dist/prosekit-extensions-horizontal-rule.js.map +1 -1
  52. package/dist/prosekit-extensions-image.d.ts +13 -12
  53. package/dist/prosekit-extensions-image.d.ts.map +1 -1
  54. package/dist/prosekit-extensions-image.js +10 -10
  55. package/dist/prosekit-extensions-image.js.map +1 -1
  56. package/dist/prosekit-extensions-input-rule.js +89 -2
  57. package/dist/prosekit-extensions-input-rule.js.map +1 -0
  58. package/dist/prosekit-extensions-italic.d.ts +12 -12
  59. package/dist/prosekit-extensions-italic.d.ts.map +1 -1
  60. package/dist/prosekit-extensions-italic.js +1 -1
  61. package/dist/prosekit-extensions-italic.js.map +1 -1
  62. package/dist/prosekit-extensions-link.js +4 -4
  63. package/dist/prosekit-extensions-link.js.map +1 -1
  64. package/dist/prosekit-extensions-list.d.ts +26 -26
  65. package/dist/prosekit-extensions-list.d.ts.map +1 -1
  66. package/dist/prosekit-extensions-list.js +27 -27
  67. package/dist/prosekit-extensions-list.js.map +1 -1
  68. package/dist/prosekit-extensions-loro.d.ts +16 -16
  69. package/dist/prosekit-extensions-loro.d.ts.map +1 -1
  70. package/dist/prosekit-extensions-loro.js.map +1 -1
  71. package/dist/prosekit-extensions-mark-rule.js +1 -1
  72. package/dist/prosekit-extensions-math.d.ts +154 -0
  73. package/dist/prosekit-extensions-math.d.ts.map +1 -0
  74. package/dist/prosekit-extensions-math.js +108 -0
  75. package/dist/prosekit-extensions-math.js.map +1 -0
  76. package/dist/prosekit-extensions-mod-click-prevention.js +1 -1
  77. package/dist/prosekit-extensions-paragraph.d.ts +7 -7
  78. package/dist/prosekit-extensions-paragraph.d.ts.map +1 -1
  79. package/dist/prosekit-extensions-paragraph.js.map +1 -1
  80. package/dist/prosekit-extensions-paste-rule.js +1 -1
  81. package/dist/prosekit-extensions-placeholder.d.ts +1 -1
  82. package/dist/prosekit-extensions-placeholder.js +2 -2
  83. package/dist/prosekit-extensions-placeholder.js.map +1 -1
  84. package/dist/prosekit-extensions-readonly.js +1 -1
  85. package/dist/prosekit-extensions-strike.js +1 -1
  86. package/dist/prosekit-extensions-strike.js.map +1 -1
  87. package/dist/prosekit-extensions-table.d.ts +47 -47
  88. package/dist/prosekit-extensions-table.d.ts.map +1 -1
  89. package/dist/prosekit-extensions-table.js +1 -1
  90. package/dist/prosekit-extensions-text-align.d.ts +1 -1
  91. package/dist/prosekit-extensions-text-color.d.ts +1 -1
  92. package/dist/prosekit-extensions-text-color.js.map +1 -1
  93. package/dist/prosekit-extensions-virtual-selection.js +1 -1
  94. package/dist/prosekit-extensions-yjs.d.ts +3 -3
  95. package/dist/prosekit-extensions-yjs.d.ts.map +1 -1
  96. package/dist/prosekit-extensions-yjs.js.map +1 -1
  97. package/dist/shiki-highlighter-chunk.d.ts +19 -2
  98. package/dist/shiki-highlighter-chunk.d.ts.map +1 -0
  99. package/dist/{table-4oHfV-Ql.js → table-B81i9oH9.js} +29 -29
  100. package/dist/table-B81i9oH9.js.map +1 -0
  101. package/package.json +22 -10
  102. package/src/autocomplete/autocomplete-helpers.ts +1 -1
  103. package/src/autocomplete/autocomplete-plugin.ts +2 -2
  104. package/src/autocomplete/autocomplete-rule.ts +1 -1
  105. package/src/autocomplete/autocomplete.spec.ts +4 -4
  106. package/src/autocomplete/autocomplete.ts +2 -2
  107. package/src/autocomplete/index.ts +2 -2
  108. package/src/background-color/background-color-commands.spec.ts +1 -1
  109. package/src/background-color/background-color-commands.ts +1 -1
  110. package/src/background-color/background-color-spec.spec.ts +1 -1
  111. package/src/background-color/background-color.ts +2 -2
  112. package/src/background-color/index.ts +3 -3
  113. package/src/blockquote/blockquote-input-rule.ts +1 -1
  114. package/src/blockquote/blockquote-keymap.spec.ts +1 -1
  115. package/src/blockquote/blockquote-keymap.ts +9 -7
  116. package/src/blockquote/blockquote.ts +4 -4
  117. package/src/blockquote/index.ts +5 -5
  118. package/src/bold/bold-input-rule.spec.ts +2 -2
  119. package/src/bold/bold-input-rule.ts +1 -1
  120. package/src/bold/bold.ts +4 -4
  121. package/src/bold/index.ts +5 -5
  122. package/src/code/code-input-rule.ts +1 -1
  123. package/src/code/code.ts +4 -4
  124. package/src/code/index.ts +5 -5
  125. package/src/code-block/code-block-commands.ts +1 -1
  126. package/src/code-block/code-block-highlight.ts +11 -1
  127. package/src/code-block/code-block-input-rule.ts +3 -3
  128. package/src/code-block/code-block-shiki.ts +13 -5
  129. package/src/code-block/code-block-spec.spec.ts +2 -2
  130. package/src/code-block/code-block-spec.ts +1 -1
  131. package/src/code-block/code-block.ts +4 -4
  132. package/src/code-block/index.ts +9 -9
  133. package/src/code-block/shiki-highlighter.ts +2 -2
  134. package/src/code-block/shiki-parser.ts +2 -2
  135. package/src/drop-cursor/index.ts +1 -1
  136. package/src/drop-indicator/drop-indicator.ts +1 -1
  137. package/src/drop-indicator/index.ts +1 -1
  138. package/src/enter-rule/index.ts +18 -191
  139. package/src/file/file-drop-handler.ts +1 -1
  140. package/src/file/file-paste-handler.spec.ts +3 -3
  141. package/src/file/file-paste-handler.ts +1 -1
  142. package/src/file/index.ts +3 -3
  143. package/src/gap-cursor/index.ts +1 -1
  144. package/src/hard-break/hard-break-keymap.spec.ts +2 -2
  145. package/src/hard-break/hard-break-keymap.ts +1 -1
  146. package/src/hard-break/hard-break.ts +3 -3
  147. package/src/hard-break/index.ts +4 -4
  148. package/src/heading/heading-commands.ts +1 -1
  149. package/src/heading/heading-input-rule.ts +2 -2
  150. package/src/heading/heading-keymap.spec.ts +1 -1
  151. package/src/heading/heading-spec.ts +1 -1
  152. package/src/heading/heading.ts +4 -4
  153. package/src/heading/index.ts +6 -6
  154. package/src/horizontal-rule/horizontal-rule-commands.spec.ts +1 -1
  155. package/src/horizontal-rule/horizontal-rule-commands.ts +13 -11
  156. package/src/horizontal-rule/horizontal-rule-input-rule.spec.ts +2 -2
  157. package/src/horizontal-rule/horizontal-rule-input-rule.ts +1 -1
  158. package/src/horizontal-rule/horizontal-rule.ts +3 -3
  159. package/src/horizontal-rule/index.ts +4 -4
  160. package/src/image/image-commands/insert-image.ts +1 -1
  161. package/src/image/image-commands/upload-image.spec.ts +4 -4
  162. package/src/image/image-commands/upload-image.ts +2 -2
  163. package/src/image/image-commands.ts +3 -3
  164. package/src/image/image-upload-handler.ts +2 -2
  165. package/src/image/image.ts +2 -2
  166. package/src/image/index.ts +6 -6
  167. package/src/italic/index.ts +5 -5
  168. package/src/italic/italic-commands.spec.ts +4 -4
  169. package/src/italic/italic-input-rule.spec.ts +2 -2
  170. package/src/italic/italic-input-rule.ts +1 -1
  171. package/src/italic/italic.ts +4 -4
  172. package/src/link/index.spec.ts +2 -2
  173. package/src/link/index.ts +6 -6
  174. package/src/link/link-paste-rule.spec.ts +2 -2
  175. package/src/link/link-paste-rule.ts +3 -3
  176. package/src/link/link-regex.spec.ts +1 -1
  177. package/src/list/index.ts +8 -8
  178. package/src/list/list-drop-indicator.ts +2 -2
  179. package/src/list/list-input-rules.ts +1 -1
  180. package/src/list/list-keymap.spec.ts +1 -1
  181. package/src/list/list-spec.ts +1 -1
  182. package/src/list/list-types.spec.ts +2 -2
  183. package/src/list/list.spec.ts +6 -6
  184. package/src/list/list.ts +7 -7
  185. package/src/loro/index.ts +6 -6
  186. package/src/loro/loro.ts +5 -5
  187. package/src/mark-rule/apply.ts +2 -2
  188. package/src/mark-rule/index.ts +2 -2
  189. package/src/mark-rule/mark-rule.spec.ts +4 -4
  190. package/src/mark-rule/mark-rule.ts +2 -2
  191. package/src/math/index.ts +22 -0
  192. package/src/math/math-block.ts +96 -0
  193. package/src/math/math-inline.ts +89 -0
  194. package/src/math/math-plugin.ts +8 -0
  195. package/src/math/math.ts +39 -0
  196. package/src/paragraph/index.ts +7 -7
  197. package/src/paragraph/paragraph-keymap.ts +1 -1
  198. package/src/paragraph/paragraph.ts +3 -3
  199. package/src/paste-rule/index.ts +2 -2
  200. package/src/paste-rule/mark-paste-rule.spec.ts +8 -8
  201. package/src/paste-rule/mark-paste-rule.ts +2 -2
  202. package/src/paste-rule/paste-rule.spec.ts +2 -2
  203. package/src/paste-rule/paste-rule.ts +1 -1
  204. package/src/paste-rule/split-text-by-regex.spec.ts +1 -1
  205. package/src/placeholder/index.ts +1 -1
  206. package/src/strike/index.ts +1 -1
  207. package/src/table/index.ts +14 -14
  208. package/src/table/table-commands/delete-cell-selection.spec.ts +3 -3
  209. package/src/table/table-commands/exit-table.spec.ts +2 -2
  210. package/src/table/table-commands/insert-table.spec.ts +1 -1
  211. package/src/table/table-commands/move-table-column.spec.ts +2 -2
  212. package/src/table/table-commands/move-table-row.spec.ts +2 -2
  213. package/src/table/table-commands/select-table-cell.spec.ts +3 -3
  214. package/src/table/table-commands/select-table-cell.ts +1 -1
  215. package/src/table/table-commands/select-table-column.spec.ts +2 -2
  216. package/src/table/table-commands/select-table-column.ts +1 -1
  217. package/src/table/table-commands/select-table-row.spec.ts +2 -2
  218. package/src/table/table-commands/select-table-row.ts +1 -1
  219. package/src/table/table-commands/select-table.spec.ts +2 -2
  220. package/src/table/table-commands/select-table.ts +1 -1
  221. package/src/table/table-commands.ts +9 -9
  222. package/src/table/table-drop-indicator.ts +2 -2
  223. package/src/table/table-spec.spec.ts +4 -4
  224. package/src/table/table.ts +4 -4
  225. package/src/table/test-utils.ts +1 -1
  226. package/src/testing/index.ts +25 -22
  227. package/src/testing/katex.ts +9 -0
  228. package/src/text-color/index.ts +3 -3
  229. package/src/text-color/text-color-commands.spec.ts +1 -1
  230. package/src/text-color/text-color-commands.ts +1 -1
  231. package/src/text-color/text-color-spec.spec.ts +1 -1
  232. package/src/text-color/text-color.ts +2 -2
  233. package/src/yjs/index.ts +7 -7
  234. package/src/yjs/yjs-cursor-plugin.ts +1 -1
  235. package/src/yjs/yjs-types.ts +0 -2
  236. package/src/yjs/yjs-undo-plugin.ts +3 -2
  237. package/src/yjs/yjs.ts +6 -6
  238. package/dist/enter-rule-D-p4ykfv.js +0 -96
  239. package/dist/enter-rule-D-p4ykfv.js.map +0 -1
  240. package/dist/file-iLVR0eM0.js.map +0 -1
  241. package/dist/index-cp1u4e0e.d.ts.map +0 -1
  242. package/dist/input-rule-COGr_GBb.js +0 -90
  243. package/dist/input-rule-COGr_GBb.js.map +0 -1
  244. package/dist/mark-rule-CYe8zk4q.js.map +0 -1
  245. package/dist/paste-rule-BaDghcaU.js.map +0 -1
  246. package/dist/shiki-highlighter-chunk-DNNm2Vow.d.ts +0 -19
  247. package/dist/shiki-highlighter-chunk-DNNm2Vow.d.ts.map +0 -1
  248. package/dist/table-4oHfV-Ql.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-extensions-link.js","names":[],"sources":["../src/link/link-regex.ts","../src/link/link-paste-rule.ts","../src/link/index.ts"],"sourcesContent":["/* eslint-disable unicorn/prefer-string-raw -- Don't use String.raw here for better bundler minification */\n\n// All valid alpha TLDs.\n// Data source: https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst TLD_RE_PATTERN =\n 'a(?:a(?:a|rp)|b(?:arth|b(?:ott|vie)?|c|le|ogado|udhabi)|c(?:ademy|c(?:enture|ountants?)|o|tor)?|d(?:s|ult)?|e(?:g|ro|tna)?|f(?:l|rica)?|g(?:akhan|ency)?|i(?:g|r(?:bus|force|tel))?|kdn|l(?:faromeo|i(?:baba|pay)|l(?:finanz|state|y)|s(?:ace|tom))?|m(?:azon|e(?:rican(?:express|family)|x)|fam|ica|sterdam)?|n(?:alytics|droid|quan|z)|ol?|p(?:artments|p(?:le)?)|q(?:uarelle)?|r(?:a(?:b|mco)|chi|my|pa|te?)?|s(?:da|ia|sociates)?|t(?:hleta|torney)?|u(?:ction|di(?:ble|o)?|spost|t(?:hor|os?))?|vianca|ws?|xa?|z(?:ure)?)|b(?:a(?:by|idu|n(?:a(?:mex|narepublic)|d|k)|r(?:c(?:elona|lay(?:card|s))|efoot|gains)?|s(?:eball|ketball)|uhaus|yern)?|b(?:c|t|va)?|c[gn]|d|e(?:a(?:ts|uty)|er|ntley|rlin|st(?:buy)?|t)?|f|g|h(?:arti)?|i(?:ble|d|ke|ngo?|o|z)?|j|l(?:ack(?:friday)?|o(?:ckbuster|g|omberg)|ue)|m[sw]?|n(?:pparibas)?|o(?:ats|ehringer|fa|m|nd|o(?:k(?:ing)?)?|s(?:ch|t(?:ik|on))|t|utique|x)?|r(?:adesco|idgestone|o(?:adway|ker|ther)|ussels)?|s|t|u(?:ild(?:ers)?|siness|y|zz)|v|w|y|zh?)|c(?:a(?:b|fe|l(?:l|vinklein)?|m(?:era|p)?|non|p(?:etown|ital(?:one)?)|r(?:avan|ds|e(?:ers?)?|s)?|s(?:a|e|h|ino)|t(?:ering|holic)?)?|b(?:a|n|re|s)|c|d|e(?:nter|o|rn)|f[ad]?|g|h(?:a(?:n(?:el|nel)|rity|se|t)|eap|intai|r(?:istmas|ome)|urch)?|i(?:priani|rcle|sco|t(?:adel|ic?|y(?:eats)?))?|k|l(?:aims|eaning|i(?:ck|ni(?:c|que))|o(?:thing|ud)|ub(?:med)?)?|m|n|o(?:ach|des|ffee|l(?:lege|ogne)|m(?:cast|m(?:bank|unity)|p(?:a(?:ny|re)|uter)|sec)?|n(?:dos|s(?:truction|ulting)|t(?:act|ractors))|o(?:king(?:channel)?|l|p)|rsica|u(?:ntry|pons?|rses))?|pa|r(?:edit(?:card|union)?|icket|own|s|uises?)?|u(?:isinella)?|v|w|x|y(?:mru|ou)?|z)|d(?:a(?:bur|d|nce|t(?:a|e|ing|sun)|y)|clk|ds|e(?:al(?:er|s)?|gree|l(?:ivery|l|oitte|ta)|mocrat|nt(?:al|ist)|si(?:gn)?|v)?|hl|i(?:amonds|et|gital|rect(?:ory)?|s(?:co(?:unt|ver)|h)|y)|j|k|m|np|o(?:c(?:s|tor)|g|mains|t|wnload)?|rive|tv|u(?:bai|nlop|pont|rban)|v(?:ag|r)|z)|e(?:a(?:rth|t)|co?|d(?:eka|u(?:cation)?)|e|g|m(?:ail|erck)|n(?:ergy|gineer(?:ing)?|terprises)|pson|quipment|r(?:icsson|ni)?|s(?:q|tate)?|t(?:isalat)?|u(?:rovision|s)?|vents|x(?:change|p(?:ert|osed|ress)|traspace))|f(?:a(?:ge|i(?:l|rwinds|th)|mily|ns?|rm(?:ers)?|s(?:hion|t))|e(?:dex|edback|rr(?:ari|ero))|i(?:at|d(?:elity|o)|lm|na(?:l|nc(?:e|ial))|r(?:e(?:stone)?|mdale)|sh(?:ing)?|t(?:ness)?)?|j|k|l(?:i(?:ckr|ghts|r)|o(?:rist|wers)|y)|m|o(?:o(?:d(?:network)?|tball)?|r(?:d|ex|sale|um)|undation|x)?|r(?:e(?:e|senius)|l|o(?:gans|nt(?:door|ier)))?|tr|u(?:jitsu|nd?|rniture|tbol)|yi)|g(?:a(?:l(?:l(?:ery|o|up))?|mes?|p|rden|y)?|b(?:iz)?|dn?|e(?:a|nt(?:ing)?|orge)?|f|g(?:ee)?|h|i(?:fts?|v(?:es|ing))?|l(?:ass|e|ob(?:al|o))?|m(?:ail|bh|o|x)?|n|o(?:daddy|l(?:d(?:point)?|f)|o(?:dyear|g(?:le)?)?|p|t|v)|p|q|r(?:a(?:inger|phics|tis)|een|ipe|o(?:cery|up))?|s|t|u(?:ardian|cci|ge|i(?:de|tars)|ru)?|w|y)|h(?:a(?:ir|mburg|ngout|us)|bo|dfc(?:bank)?|e(?:alth(?:care)?|l(?:p|sinki)|r(?:e|mes))|gtv|i(?:phop|samitsu|tachi|v)|kt?|m|n|o(?:ckey|l(?:dings|iday)|me(?:depot|goods|s(?:ense)?)|nda|rse|s(?:pital|t(?:ing)?)|t(?:el(?:es|s)|mail)?|use|w)|r|sbc|t|u(?:ghes)?|y(?:att|undai))|i(?:bm|c(?:bc|e|u)|d|e(?:ee)?|fm|kano|l|m(?:amat|db|mo(?:bilien)?)?|n(?:c|dustries|f(?:initi|o)|g|k|s(?:titute|ur(?:ance|e))|t(?:ernational|uit)?|vestments)?|o|piranga|q|r(?:ish)?|s(?:maili|t(?:anbul)?)?|t(?:au|v)?)|j(?:a(?:guar|va)|cb|e(?:ep|tzt|welry)?|io|ll|mp?|nj|o(?:b(?:s|urg)|t|y)?|p(?:morgan|rs)?|u(?:egos|niper))|k(?:aufen|ddi|e(?:rry(?:hotels|logistics|properties))?|fh|g|h|i(?:a|ds|m|nd(?:er|le)|tchen|wi)?|m|n|o(?:eln|matsu|sher)|p(?:mg|n)?|r(?:d|ed)?|uokgroup|w|y(?:oto)?|z)|l(?:a(?:caixa|m(?:borghini|er)|n(?:c(?:aster|ia)|d(?:rover)?|xess)|salle|t(?:ino|robe)?|w(?:yer)?)?|b|c|ds|e(?:ase|clerc|frak|g(?:al|o)|xus)|gbt|i(?:dl|fe(?:insurance|style)?|ghting|ke|lly|m(?:ited|o)|n(?:coln|de|k)|psy|v(?:e|ing))?|k|l[cp]|o(?:ans?|c(?:ker|us)|l|ndon|tt[eo]|ve)|pl(?:financial)?|r|s|t(?:da?)?|u(?:ndbeck|x(?:e|ury))?|v|y)|m(?:a(?:cys|drid|i(?:f|son)|keup|n(?:agement|go)?|p|r(?:ket(?:ing|s)?|riott|shalls)|serati|ttel)?|ba|c(?:kinsey)?|d|e(?:d(?:ia)?|et|lbourne|m(?:e|orial)|nu?|rckmsd)?|g|h|i(?:ami|crosoft|l|n[it]|t(?:subishi)?)|k|l[bs]?|ma?|n|o(?:bi(?:le)?|da|e|i|m|n(?:ash|ey|ster)|r(?:mon|tgage)|scow|to(?:rcycles)?|v(?:ie)?)?|p|q|r|sd?|t[nr]?|u(?:s(?:eum|ic)|tual)?|v|w|x|y|z)|n(?:a(?:b|goya|me|tura|vy)?|ba|c|e(?:c|t(?:bank|flix|work)?|ustar|ws?|x(?:t(?:direct)?|us))?|fl?|go?|hk|i(?:co|k(?:e|on)|nja|ssa[ny])?|l|o(?:kia|rt(?:hwesternmutual|on)|w(?:ruz|tv)?)?|p|r[aw]?|tt|u|yc|z)|o(?:b(?:i|server)|ffice|kinawa|l(?:ayan(?:group)?|dnavy|lo)|m(?:ega)?|n(?:e|g|l(?:ine)?)|oo|pen|r(?:a(?:cle|nge)|g(?:anic)?|igins)|saka|t(?:suka|t)|vh)|p(?:a(?:ge|nasonic|r(?:is|s|t(?:ners|s|y))|ssagens|y)?|ccw|et?|f(?:izer)?|g|h(?:armacy|d|ilips|o(?:ne|to(?:graphy|s)?)|ysio)?|i(?:c(?:s|t(?:et|ures))|d|n[gk]?|oneer|zza)|k|l(?:a(?:ce|y(?:station)?)|u(?:mbing|s))?|m|nc?|o(?:hl|ker|litie|rn|st)|r(?:a(?:merica|xi)|ess|ime|o(?:d(?:uctions)?|f|gressive|mo|pert(?:ies|y)|tection)?|u(?:dential)?)?|s|t|ub|wc?|y)|q(?:a|pon|ue(?:bec|st))|r(?:a(?:cing|dio)|e(?:a(?:d|l(?:estate|t(?:or|y)))|cipes|d(?:stone|umbrella)?|hab|i(?:sen?|t)|liance|n(?:t(?:als)?)?|p(?:air|ort|ublican)|st(?:aurant)?|views?|xroth)?|i(?:c(?:h(?:ardli)?|oh)|l|o|p)|o(?:c(?:her|ks)|deo|gers|om)?|s(?:vp)?|u(?:gby|hr|n)?|we?|yukyu)|s(?:a(?:arland|fe(?:ty)?|kura|l(?:e|on)|ms(?:club|ung)|n(?:dvik(?:coromant)?|ofi)|p|rl|s|ve|xo)?|b[is]?|c(?:a|b|h(?:aeffler|midt|o(?:larships|ol)|ule|warz)|ience|ot)?|d|e(?:a(?:rch|t)|cur(?:e|ity)|ek|lect|ner|rvices|ven|w|xy?)?|fr|g|h(?:a(?:ngrila|rp|w)|ell|i(?:a|ksha)|o(?:es|p(?:ping)?|uji|w(?:time)?))?|i(?:lk|n(?:a|gles)|te)?|j|k(?:in?|y(?:pe)?)?|l(?:ing)?|m(?:art|ile)?|n(?:cf)?|o(?:c(?:cer|ial)|ft(?:bank|ware)|hu|l(?:ar|utions)|n[gy]|y)?|p(?:a(?:ce)?|o(?:rt|t))|rl?|s|t(?:a(?:da|ples|r|te(?:bank|farm))|c(?:group)?|o(?:ckholm|r(?:age|e))|ream|ud(?:io|y)|yle)?|u(?:cks|pp(?:l(?:ies|y)|ort)|r(?:f|gery)|zuki)?|v|w(?:atch|iss)|x|y(?:dney|stems)?|z)|t(?:a(?:b|ipei|lk|obao|rget|t(?:a(?:motors|r)|too)|xi?)|ci?|dk?|e(?:am|ch(?:nology)?|l|masek|nnis|va)|f|g|h(?:d|eat(?:er|re))?|i(?:aa|ckets|enda|ffany|ps|r(?:es|ol))|j(?:maxx|x)?|k(?:maxx)?|l|m(?:all)?|n|o(?:day|kyo|ols|p|ray|shiba|tal|urs|wn|y(?:ota|s))?|r(?:a(?:d(?:e|ing)|ining|vel(?:channel|ers(?:insurance)?)?)|ust|v)?|t|u(?:be|i|nes|shu)|vs?|w|z)|u(?:a|b(?:ank|s)|g|k|n(?:i(?:com|versity)|o)|ol|ps|s|y|z)|v(?:a(?:cations|n(?:a|guard))?|c|e(?:gas|ntures|r(?:isign|sicherung)|t)?|g|i(?:ajes|deo|g|king|llas|n|p|rgin|s(?:a|ion)|v[ao])?|laanderen|n|o(?:dka|l(?:kswagen|vo)|t(?:e|ing|o)|yage)|u(?:elos)?)|w(?:a(?:l(?:es|mart|ter)|ng(?:gou)?|tch(?:es)?)|e(?:ather(?:channel)?|b(?:cam|er|site)|d(?:ding)?|i(?:bo|r))|f|hoswho|i(?:en|ki|lliamhill|n(?:dows|e|ners)?)|me|o(?:lterskluwer|odside|r(?:ks?|ld)|w)|s|t[cf])|x(?:box|erox|finity|i(?:huan|n)|xx|yz)|y(?:a(?:chts|hoo|maxun|ndex)|e|o(?:dobashi|ga|kohama|u(?:tube)?)|t|un)|z(?:a(?:ppos|ra)?|ero|ip|m|one|uerich|w)'\n\n// Some common punctuations that can be used to stop a link\nconst PUNCTUATION_CHAR_PATTERN = '\\\\.\\\\,\\\\;\\\\!\\\\?'\n\nconst STOP_CHAR_PATTERN = '[' + PUNCTUATION_CHAR_PATTERN + ']'\n\nconst END_CHAR_PATTERN = '[^' + '\\\\s' + PUNCTUATION_CHAR_PATTERN + ']'\n\n// dprint-ignore\nconst LINK_RE_BASE_PATTERN = (\n // start of the link group\n '(' + \n '(?:' +\n // protocol identifier (optional)\n // short syntax // is allowed\n '(?:(?:https?:)?\\\\/\\\\/)?' +\n\n // host & domain names.\n '(?:' +\n '(?:' +\n '[a-z0-9\\\\u00a1-\\\\uffff]' +\n '[a-z0-9\\\\u00a1-\\\\uffff_-]{0,62}' +\n ')?' +\n '[a-z0-9\\\\u00a1-\\\\uffff]\\\\.' +\n ')+' +\n\n // TLD identifier name, must not end with dot\n '(?:' +\n TLD_RE_PATTERN +\n ')' +\n ')' +\n\n // port number (optional)\n '(?::\\\\d{2,5})?' +\n\n // sub path (optional)\n '(?:/' +\n '(?:' + \n '\\\\S*' +\n END_CHAR_PATTERN +\n ')?' +\n ')?' +\n\n // query string (optional)\n '(?:\\\\?' + \n '(?:' + \n '\\\\S*' +\n END_CHAR_PATTERN +\n ')' +\n ')?' +\n\n // fragment (optional)\n '(?:\\\\#' + \n '(?:' + \n '\\\\S*' +\n END_CHAR_PATTERN +\n ')?' +\n ')?' +\n\n // end of the link group\n ')'\n)\n\n// dprint-ignore\nconst LINK_ENTER_PATTERN = LINK_RE_BASE_PATTERN + STOP_CHAR_PATTERN + '?' + '$'\n// dprint-ignore\nconst LINK_INPUT_PATTERN = LINK_RE_BASE_PATTERN + STOP_CHAR_PATTERN + '?' + '\\\\s$'\n// dprint-ignore\nconst LINK_MARK_PATTERN = LINK_RE_BASE_PATTERN + '(?=' + STOP_CHAR_PATTERN + '|\\\\s|$)'\n\nexport const LINK_ENTER_RE: RegExp = new RegExp(LINK_ENTER_PATTERN, 'gi')\nexport const LINK_INPUT_RE: RegExp = new RegExp(LINK_INPUT_PATTERN, 'gi')\nexport const LINK_MARK_RE: RegExp = new RegExp(LINK_MARK_PATTERN, 'gi')\n","import type { PlainExtension } from '@prosekit/core'\n\nimport { defineMarkPasteRule } from '../paste-rule'\n\nimport { LINK_MARK_RE } from './link-regex'\nimport type { LinkAttrs } from './link-types'\n\n/**\n * @internal\n */\nexport function defineLinkPasteRule(): PlainExtension {\n return defineMarkPasteRule({\n type: 'link',\n regex: LINK_MARK_RE,\n getAttrs: (match: RegExpExecArray): LinkAttrs | false => {\n if (match[1]) {\n return { href: match[1] } satisfies LinkAttrs\n }\n return false\n },\n })\n}\n","import {\n addMark,\n defineCommands,\n defineMarkSpec,\n expandMark,\n removeMark,\n toggleMark,\n union,\n type Extension,\n type PlainExtension,\n type Union,\n} from '@prosekit/core'\nimport { InputRule } from '@prosekit/pm/inputrules'\n\nimport { defineEnterRule } from '../enter-rule'\nimport { defineInputRule } from '../input-rule'\nimport { defineMarkRule } from '../mark-rule'\n\nimport { defineLinkPasteRule } from './link-paste-rule'\nimport { LINK_ENTER_RE, LINK_INPUT_RE, LINK_MARK_RE } from './link-regex'\nimport type { LinkAttrs } from './link-types'\n\nexport { defineLinkPasteRule }\nexport type { LinkAttrs }\n\n/**\n * @internal\n */\nexport type LinkSpecExtension = Extension<{\n Marks: {\n link: LinkAttrs\n }\n}>\n\n/**\n * @internal\n */\nexport function defineLinkSpec(): LinkSpecExtension {\n return defineMarkSpec<'link', LinkAttrs>({\n name: 'link',\n inclusive: false,\n attrs: {\n href: { validate: 'string' },\n target: { default: null, validate: 'string|null' },\n rel: { default: null, validate: 'string|null' },\n },\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (dom: HTMLElement) => {\n return {\n href: dom.getAttribute('href') || '',\n target: dom.getAttribute('target') || null,\n rel: dom.getAttribute('rel') || null,\n }\n },\n },\n ],\n toDOM(node) {\n const { href, target, rel } = node.attrs as LinkAttrs\n return ['a', { href, target, rel }, 0]\n },\n })\n}\n\n/**\n * @internal\n */\nexport type LinkCommandsExtension = Extension<{\n Commands: {\n addLink: [attrs: LinkAttrs]\n removeLink: []\n toggleLink: [attrs: LinkAttrs]\n expandLink: []\n }\n}>\n\nexport function defineLinkCommands(): LinkCommandsExtension {\n return defineCommands({\n addLink: (attrs: LinkAttrs) => addMark({ type: 'link', attrs }),\n removeLink: () => removeMark({ type: 'link' }),\n toggleLink: (attrs: LinkAttrs) => toggleMark({ type: 'link', attrs }),\n expandLink: () => expandMark({ type: 'link' }),\n })\n}\n\n/**\n * Apply link marks after pressing Space.\n *\n * @internal\n */\nexport function defineLinkInputRule(): PlainExtension {\n return defineInputRule(\n new InputRule(LINK_INPUT_RE, (state, match, from) => {\n const href = match[1]\n if (!href) return null\n\n const mark = state.schema.marks.link.create({ href })\n return state.tr.addMark(from, from + href.length, mark).insertText(' ')\n }),\n )\n}\n\n/**\n * Apply link marks after typing Enter.\n *\n * @internal\n */\nexport function defineLinkEnterRule(): PlainExtension {\n return defineEnterRule({\n regex: LINK_ENTER_RE,\n handler: ({ state, from, match }) => {\n const href = match[1]\n if (!href) return null\n\n const mark = state.schema.marks.link.create({ href })\n const tr = state.tr.addMark(from, from + href.length, mark)\n return tr.docChanged ? tr : null\n },\n })\n}\n\n/**\n * Apply and remove link marks to the text during typing.\n *\n * @internal\n */\nexport function defineLinkMarkRule(): PlainExtension {\n return defineMarkRule({\n regex: LINK_MARK_RE,\n type: 'link',\n attrs: (match) => ({ href: match[1] }),\n })\n}\n\n/**\n * @internal\n */\nexport type LinkExtension = Union<[LinkSpecExtension, LinkCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineLink(): LinkExtension {\n return union(\n defineLinkSpec(),\n defineLinkCommands(),\n defineLinkInputRule(),\n defineLinkEnterRule(),\n defineLinkPasteRule(),\n )\n}\n"],"mappings":";;;;;;;;AAIA,MAAM,iBACJ;AAGF,MAAM,2BAA2B;AAEjC,MAAM,oBAAoB,MAAM,2BAA2B;AAElC,KAAe;AAGxC,MAAM,uBAEF,6HAiBY,iBACJ;AAmCZ,MAAM,qBAAqB,uBAAuB,oBAAoB;AAEtE,MAAM,qBAAqB,uBAAuB,oBAAoB;AAEtE,MAAM,oBAAoB,uBAAuB;AAEjD,MAAa,gBAAwB,IAAI,OAAO,oBAAoB,KAAK;AACzE,MAAa,gBAAwB,IAAI,OAAO,oBAAoB,KAAK;AACzE,MAAa,eAAuB,IAAI,OAAO,mBAAmB,KAAK;;;;;;;ACpEvE,SAAgB,sBAAsC;AACpD,QAAO,oBAAoB;EACzB,MAAM;EACN,OAAO;EACP,WAAW,UAA8C;AACvD,OAAI,MAAM,GACR,QAAO,EAAE,MAAM,MAAM,IAAI;AAE3B,UAAO;;EAEV,CAAC;;;;;;;;ACiBJ,SAAgB,iBAAoC;AAClD,QAAO,eAAkC;EACvC,MAAM;EACN,WAAW;EACX,OAAO;GACL,MAAM,EAAE,UAAU,UAAU;GAC5B,QAAQ;IAAE,SAAS;IAAM,UAAU;IAAe;GAClD,KAAK;IAAE,SAAS;IAAM,UAAU;IAAe;GAChD;EACD,UAAU,CACR;GACE,KAAK;GACL,WAAW,QAAqB;AAC9B,WAAO;KACL,MAAM,IAAI,aAAa,OAAO,IAAI;KAClC,QAAQ,IAAI,aAAa,SAAS,IAAI;KACtC,KAAK,IAAI,aAAa,MAAM,IAAI;KACjC;;GAEJ,CACF;EACD,MAAM,MAAM;GACV,MAAM,EAAE,MAAM,QAAQ,QAAQ,KAAK;AACnC,UAAO;IAAC;IAAK;KAAE;KAAM;KAAQ;KAAK;IAAE;IAAE;;EAEzC,CAAC;;AAeJ,SAAgB,qBAA4C;AAC1D,QAAO,eAAe;EACpB,UAAU,UAAqB,QAAQ;GAAE,MAAM;GAAQ;GAAO,CAAC;EAC/D,kBAAkB,WAAW,EAAE,MAAM,QAAQ,CAAC;EAC9C,aAAa,UAAqB,WAAW;GAAE,MAAM;GAAQ;GAAO,CAAC;EACrE,kBAAkB,WAAW,EAAE,MAAM,QAAQ,CAAC;EAC/C,CAAC;;;;;;;AAQJ,SAAgB,sBAAsC;AACpD,QAAO,gBACL,IAAI,UAAU,gBAAgB,OAAO,OAAO,SAAS;EACnD,MAAM,OAAO,MAAM;AACnB,MAAI,CAAC,KAAM,QAAO;EAElB,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK,OAAO,EAAE,MAAM,CAAC;AACrD,SAAO,MAAM,GAAG,QAAQ,MAAM,OAAO,KAAK,QAAQ,KAAK,CAAC,WAAW,IAAI;GACvE,CACH;;;;;;;AAQH,SAAgB,sBAAsC;AACpD,QAAO,gBAAgB;EACrB,OAAO;EACP,UAAU,EAAE,OAAO,MAAM,YAAY;GACnC,MAAM,OAAO,MAAM;AACnB,OAAI,CAAC,KAAM,QAAO;GAElB,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK,OAAO,EAAE,MAAM,CAAC;GACrD,MAAM,KAAK,MAAM,GAAG,QAAQ,MAAM,OAAO,KAAK,QAAQ,KAAK;AAC3D,UAAO,GAAG,aAAa,KAAK;;EAE/B,CAAC;;;;;;;AAQJ,SAAgB,qBAAqC;AACnD,QAAO,eAAe;EACpB,OAAO;EACP,MAAM;EACN,QAAQ,WAAW,EAAE,MAAM,MAAM,IAAI;EACtC,CAAC;;;;;AAWJ,SAAgB,aAA4B;AAC1C,QAAO,MACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,CACtB"}
1
+ {"version":3,"file":"prosekit-extensions-link.js","names":[],"sources":["../src/link/link-regex.ts","../src/link/link-paste-rule.ts","../src/link/index.ts"],"sourcesContent":["/* eslint-disable unicorn/prefer-string-raw -- Don't use String.raw here for better bundler minification */\n\n// All valid alpha TLDs.\n// Data source: https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst TLD_RE_PATTERN =\n 'a(?:a(?:a|rp)|b(?:arth|b(?:ott|vie)?|c|le|ogado|udhabi)|c(?:ademy|c(?:enture|ountants?)|o|tor)?|d(?:s|ult)?|e(?:g|ro|tna)?|f(?:l|rica)?|g(?:akhan|ency)?|i(?:g|r(?:bus|force|tel))?|kdn|l(?:faromeo|i(?:baba|pay)|l(?:finanz|state|y)|s(?:ace|tom))?|m(?:azon|e(?:rican(?:express|family)|x)|fam|ica|sterdam)?|n(?:alytics|droid|quan|z)|ol?|p(?:artments|p(?:le)?)|q(?:uarelle)?|r(?:a(?:b|mco)|chi|my|pa|te?)?|s(?:da|ia|sociates)?|t(?:hleta|torney)?|u(?:ction|di(?:ble|o)?|spost|t(?:hor|os?))?|vianca|ws?|xa?|z(?:ure)?)|b(?:a(?:by|idu|n(?:a(?:mex|narepublic)|d|k)|r(?:c(?:elona|lay(?:card|s))|efoot|gains)?|s(?:eball|ketball)|uhaus|yern)?|b(?:c|t|va)?|c[gn]|d|e(?:a(?:ts|uty)|er|ntley|rlin|st(?:buy)?|t)?|f|g|h(?:arti)?|i(?:ble|d|ke|ngo?|o|z)?|j|l(?:ack(?:friday)?|o(?:ckbuster|g|omberg)|ue)|m[sw]?|n(?:pparibas)?|o(?:ats|ehringer|fa|m|nd|o(?:k(?:ing)?)?|s(?:ch|t(?:ik|on))|t|utique|x)?|r(?:adesco|idgestone|o(?:adway|ker|ther)|ussels)?|s|t|u(?:ild(?:ers)?|siness|y|zz)|v|w|y|zh?)|c(?:a(?:b|fe|l(?:l|vinklein)?|m(?:era|p)?|non|p(?:etown|ital(?:one)?)|r(?:avan|ds|e(?:ers?)?|s)?|s(?:a|e|h|ino)|t(?:ering|holic)?)?|b(?:a|n|re|s)|c|d|e(?:nter|o|rn)|f[ad]?|g|h(?:a(?:n(?:el|nel)|rity|se|t)|eap|intai|r(?:istmas|ome)|urch)?|i(?:priani|rcle|sco|t(?:adel|ic?|y(?:eats)?))?|k|l(?:aims|eaning|i(?:ck|ni(?:c|que))|o(?:thing|ud)|ub(?:med)?)?|m|n|o(?:ach|des|ffee|l(?:lege|ogne)|m(?:cast|m(?:bank|unity)|p(?:a(?:ny|re)|uter)|sec)?|n(?:dos|s(?:truction|ulting)|t(?:act|ractors))|o(?:king(?:channel)?|l|p)|rsica|u(?:ntry|pons?|rses))?|pa|r(?:edit(?:card|union)?|icket|own|s|uises?)?|u(?:isinella)?|v|w|x|y(?:mru|ou)?|z)|d(?:a(?:bur|d|nce|t(?:a|e|ing|sun)|y)|clk|ds|e(?:al(?:er|s)?|gree|l(?:ivery|l|oitte|ta)|mocrat|nt(?:al|ist)|si(?:gn)?|v)?|hl|i(?:amonds|et|gital|rect(?:ory)?|s(?:co(?:unt|ver)|h)|y)|j|k|m|np|o(?:c(?:s|tor)|g|mains|t|wnload)?|rive|tv|u(?:bai|nlop|pont|rban)|v(?:ag|r)|z)|e(?:a(?:rth|t)|co?|d(?:eka|u(?:cation)?)|e|g|m(?:ail|erck)|n(?:ergy|gineer(?:ing)?|terprises)|pson|quipment|r(?:icsson|ni)?|s(?:q|tate)?|t(?:isalat)?|u(?:rovision|s)?|vents|x(?:change|p(?:ert|osed|ress)|traspace))|f(?:a(?:ge|i(?:l|rwinds|th)|mily|ns?|rm(?:ers)?|s(?:hion|t))|e(?:dex|edback|rr(?:ari|ero))|i(?:at|d(?:elity|o)|lm|na(?:l|nc(?:e|ial))|r(?:e(?:stone)?|mdale)|sh(?:ing)?|t(?:ness)?)?|j|k|l(?:i(?:ckr|ghts|r)|o(?:rist|wers)|y)|m|o(?:o(?:d(?:network)?|tball)?|r(?:d|ex|sale|um)|undation|x)?|r(?:e(?:e|senius)|l|o(?:gans|nt(?:door|ier)))?|tr|u(?:jitsu|nd?|rniture|tbol)|yi)|g(?:a(?:l(?:l(?:ery|o|up))?|mes?|p|rden|y)?|b(?:iz)?|dn?|e(?:a|nt(?:ing)?|orge)?|f|g(?:ee)?|h|i(?:fts?|v(?:es|ing))?|l(?:ass|e|ob(?:al|o))?|m(?:ail|bh|o|x)?|n|o(?:daddy|l(?:d(?:point)?|f)|o(?:dyear|g(?:le)?)?|p|t|v)|p|q|r(?:a(?:inger|phics|tis)|een|ipe|o(?:cery|up))?|s|t|u(?:ardian|cci|ge|i(?:de|tars)|ru)?|w|y)|h(?:a(?:ir|mburg|ngout|us)|bo|dfc(?:bank)?|e(?:alth(?:care)?|l(?:p|sinki)|r(?:e|mes))|gtv|i(?:phop|samitsu|tachi|v)|kt?|m|n|o(?:ckey|l(?:dings|iday)|me(?:depot|goods|s(?:ense)?)|nda|rse|s(?:pital|t(?:ing)?)|t(?:el(?:es|s)|mail)?|use|w)|r|sbc|t|u(?:ghes)?|y(?:att|undai))|i(?:bm|c(?:bc|e|u)|d|e(?:ee)?|fm|kano|l|m(?:amat|db|mo(?:bilien)?)?|n(?:c|dustries|f(?:initi|o)|g|k|s(?:titute|ur(?:ance|e))|t(?:ernational|uit)?|vestments)?|o|piranga|q|r(?:ish)?|s(?:maili|t(?:anbul)?)?|t(?:au|v)?)|j(?:a(?:guar|va)|cb|e(?:ep|tzt|welry)?|io|ll|mp?|nj|o(?:b(?:s|urg)|t|y)?|p(?:morgan|rs)?|u(?:egos|niper))|k(?:aufen|ddi|e(?:rry(?:hotels|logistics|properties))?|fh|g|h|i(?:a|ds|m|nd(?:er|le)|tchen|wi)?|m|n|o(?:eln|matsu|sher)|p(?:mg|n)?|r(?:d|ed)?|uokgroup|w|y(?:oto)?|z)|l(?:a(?:caixa|m(?:borghini|er)|n(?:c(?:aster|ia)|d(?:rover)?|xess)|salle|t(?:ino|robe)?|w(?:yer)?)?|b|c|ds|e(?:ase|clerc|frak|g(?:al|o)|xus)|gbt|i(?:dl|fe(?:insurance|style)?|ghting|ke|lly|m(?:ited|o)|n(?:coln|de|k)|psy|v(?:e|ing))?|k|l[cp]|o(?:ans?|c(?:ker|us)|l|ndon|tt[eo]|ve)|pl(?:financial)?|r|s|t(?:da?)?|u(?:ndbeck|x(?:e|ury))?|v|y)|m(?:a(?:cys|drid|i(?:f|son)|keup|n(?:agement|go)?|p|r(?:ket(?:ing|s)?|riott|shalls)|serati|ttel)?|ba|c(?:kinsey)?|d|e(?:d(?:ia)?|et|lbourne|m(?:e|orial)|nu?|rckmsd)?|g|h|i(?:ami|crosoft|l|n[it]|t(?:subishi)?)|k|l[bs]?|ma?|n|o(?:bi(?:le)?|da|e|i|m|n(?:ash|ey|ster)|r(?:mon|tgage)|scow|to(?:rcycles)?|v(?:ie)?)?|p|q|r|sd?|t[nr]?|u(?:s(?:eum|ic)|tual)?|v|w|x|y|z)|n(?:a(?:b|goya|me|tura|vy)?|ba|c|e(?:c|t(?:bank|flix|work)?|ustar|ws?|x(?:t(?:direct)?|us))?|fl?|go?|hk|i(?:co|k(?:e|on)|nja|ssa[ny])?|l|o(?:kia|rt(?:hwesternmutual|on)|w(?:ruz|tv)?)?|p|r[aw]?|tt|u|yc|z)|o(?:b(?:i|server)|ffice|kinawa|l(?:ayan(?:group)?|dnavy|lo)|m(?:ega)?|n(?:e|g|l(?:ine)?)|oo|pen|r(?:a(?:cle|nge)|g(?:anic)?|igins)|saka|t(?:suka|t)|vh)|p(?:a(?:ge|nasonic|r(?:is|s|t(?:ners|s|y))|ssagens|y)?|ccw|et?|f(?:izer)?|g|h(?:armacy|d|ilips|o(?:ne|to(?:graphy|s)?)|ysio)?|i(?:c(?:s|t(?:et|ures))|d|n[gk]?|oneer|zza)|k|l(?:a(?:ce|y(?:station)?)|u(?:mbing|s))?|m|nc?|o(?:hl|ker|litie|rn|st)|r(?:a(?:merica|xi)|ess|ime|o(?:d(?:uctions)?|f|gressive|mo|pert(?:ies|y)|tection)?|u(?:dential)?)?|s|t|ub|wc?|y)|q(?:a|pon|ue(?:bec|st))|r(?:a(?:cing|dio)|e(?:a(?:d|l(?:estate|t(?:or|y)))|cipes|d(?:stone|umbrella)?|hab|i(?:sen?|t)|liance|n(?:t(?:als)?)?|p(?:air|ort|ublican)|st(?:aurant)?|views?|xroth)?|i(?:c(?:h(?:ardli)?|oh)|l|o|p)|o(?:c(?:her|ks)|deo|gers|om)?|s(?:vp)?|u(?:gby|hr|n)?|we?|yukyu)|s(?:a(?:arland|fe(?:ty)?|kura|l(?:e|on)|ms(?:club|ung)|n(?:dvik(?:coromant)?|ofi)|p|rl|s|ve|xo)?|b[is]?|c(?:a|b|h(?:aeffler|midt|o(?:larships|ol)|ule|warz)|ience|ot)?|d|e(?:a(?:rch|t)|cur(?:e|ity)|ek|lect|ner|rvices|ven|w|xy?)?|fr|g|h(?:a(?:ngrila|rp|w)|ell|i(?:a|ksha)|o(?:es|p(?:ping)?|uji|w(?:time)?))?|i(?:lk|n(?:a|gles)|te)?|j|k(?:in?|y(?:pe)?)?|l(?:ing)?|m(?:art|ile)?|n(?:cf)?|o(?:c(?:cer|ial)|ft(?:bank|ware)|hu|l(?:ar|utions)|n[gy]|y)?|p(?:a(?:ce)?|o(?:rt|t))|rl?|s|t(?:a(?:da|ples|r|te(?:bank|farm))|c(?:group)?|o(?:ckholm|r(?:age|e))|ream|ud(?:io|y)|yle)?|u(?:cks|pp(?:l(?:ies|y)|ort)|r(?:f|gery)|zuki)?|v|w(?:atch|iss)|x|y(?:dney|stems)?|z)|t(?:a(?:b|ipei|lk|obao|rget|t(?:a(?:motors|r)|too)|xi?)|ci?|dk?|e(?:am|ch(?:nology)?|l|masek|nnis|va)|f|g|h(?:d|eat(?:er|re))?|i(?:aa|ckets|enda|ffany|ps|r(?:es|ol))|j(?:maxx|x)?|k(?:maxx)?|l|m(?:all)?|n|o(?:day|kyo|ols|p|ray|shiba|tal|urs|wn|y(?:ota|s))?|r(?:a(?:d(?:e|ing)|ining|vel(?:channel|ers(?:insurance)?)?)|ust|v)?|t|u(?:be|i|nes|shu)|vs?|w|z)|u(?:a|b(?:ank|s)|g|k|n(?:i(?:com|versity)|o)|ol|ps|s|y|z)|v(?:a(?:cations|n(?:a|guard))?|c|e(?:gas|ntures|r(?:isign|sicherung)|t)?|g|i(?:ajes|deo|g|king|llas|n|p|rgin|s(?:a|ion)|v[ao])?|laanderen|n|o(?:dka|l(?:kswagen|vo)|t(?:e|ing|o)|yage)|u(?:elos)?)|w(?:a(?:l(?:es|mart|ter)|ng(?:gou)?|tch(?:es)?)|e(?:ather(?:channel)?|b(?:cam|er|site)|d(?:ding)?|i(?:bo|r))|f|hoswho|i(?:en|ki|lliamhill|n(?:dows|e|ners)?)|me|o(?:lterskluwer|odside|r(?:ks?|ld)|w)|s|t[cf])|x(?:box|erox|finity|i(?:huan|n)|xx|yz)|y(?:a(?:chts|hoo|maxun|ndex)|e|o(?:dobashi|ga|kohama|u(?:tube)?)|t|un)|z(?:a(?:ppos|ra)?|ero|ip|m|one|uerich|w)'\n\n// Some common punctuations that can be used to stop a link\nconst PUNCTUATION_CHAR_PATTERN = '\\\\.\\\\,\\\\;\\\\!\\\\?'\n\nconst STOP_CHAR_PATTERN = '[' + PUNCTUATION_CHAR_PATTERN + ']'\n\nconst END_CHAR_PATTERN = '[^' + '\\\\s' + PUNCTUATION_CHAR_PATTERN + ']'\n\n// dprint-ignore\nconst LINK_RE_BASE_PATTERN = (\n // start of the link group\n '(' + \n '(?:' +\n // protocol identifier (optional)\n // short syntax // is allowed\n '(?:(?:https?:)?\\\\/\\\\/)?' +\n\n // host & domain names.\n '(?:' +\n '(?:' +\n '[a-z0-9\\\\u00a1-\\\\uffff]' +\n '[a-z0-9\\\\u00a1-\\\\uffff_-]{0,62}' +\n ')?' +\n '[a-z0-9\\\\u00a1-\\\\uffff]\\\\.' +\n ')+' +\n\n // TLD identifier name, must not end with dot\n '(?:' +\n TLD_RE_PATTERN +\n ')' +\n ')' +\n\n // port number (optional)\n '(?::\\\\d{2,5})?' +\n\n // sub path (optional)\n '(?:/' +\n '(?:' + \n '\\\\S*' +\n END_CHAR_PATTERN +\n ')?' +\n ')?' +\n\n // query string (optional)\n '(?:\\\\?' + \n '(?:' + \n '\\\\S*' +\n END_CHAR_PATTERN +\n ')' +\n ')?' +\n\n // fragment (optional)\n '(?:\\\\#' + \n '(?:' + \n '\\\\S*' +\n END_CHAR_PATTERN +\n ')?' +\n ')?' +\n\n // end of the link group\n ')'\n)\n\n// dprint-ignore\nconst LINK_ENTER_PATTERN = LINK_RE_BASE_PATTERN + STOP_CHAR_PATTERN + '?' + '$'\n// dprint-ignore\nconst LINK_INPUT_PATTERN = LINK_RE_BASE_PATTERN + STOP_CHAR_PATTERN + '?' + '\\\\s$'\n// dprint-ignore\nconst LINK_MARK_PATTERN = LINK_RE_BASE_PATTERN + '(?=' + STOP_CHAR_PATTERN + '|\\\\s|$)'\n\nexport const LINK_ENTER_RE: RegExp = new RegExp(LINK_ENTER_PATTERN, 'gi')\nexport const LINK_INPUT_RE: RegExp = new RegExp(LINK_INPUT_PATTERN, 'gi')\nexport const LINK_MARK_RE: RegExp = new RegExp(LINK_MARK_PATTERN, 'gi')\n","import type { PlainExtension } from '@prosekit/core'\n\nimport { defineMarkPasteRule } from '../paste-rule/index.ts'\n\nimport { LINK_MARK_RE } from './link-regex.ts'\nimport type { LinkAttrs } from './link-types.ts'\n\n/**\n * @internal\n */\nexport function defineLinkPasteRule(): PlainExtension {\n return defineMarkPasteRule({\n type: 'link',\n regex: LINK_MARK_RE,\n getAttrs: (match: RegExpExecArray): LinkAttrs | false => {\n if (match[1]) {\n return { href: match[1] } satisfies LinkAttrs\n }\n return false\n },\n })\n}\n","import {\n addMark,\n defineCommands,\n defineMarkSpec,\n expandMark,\n removeMark,\n toggleMark,\n union,\n type Extension,\n type PlainExtension,\n type Union,\n} from '@prosekit/core'\nimport { InputRule } from '@prosekit/pm/inputrules'\n\nimport { defineEnterRule } from '../enter-rule/index.ts'\nimport { defineInputRule } from '../input-rule/index.ts'\nimport { defineMarkRule } from '../mark-rule/index.ts'\n\nimport { defineLinkPasteRule } from './link-paste-rule.ts'\nimport { LINK_ENTER_RE, LINK_INPUT_RE, LINK_MARK_RE } from './link-regex.ts'\nimport type { LinkAttrs } from './link-types.ts'\n\nexport { defineLinkPasteRule }\nexport type { LinkAttrs }\n\n/**\n * @internal\n */\nexport type LinkSpecExtension = Extension<{\n Marks: {\n link: LinkAttrs\n }\n}>\n\n/**\n * @internal\n */\nexport function defineLinkSpec(): LinkSpecExtension {\n return defineMarkSpec<'link', LinkAttrs>({\n name: 'link',\n inclusive: false,\n attrs: {\n href: { validate: 'string' },\n target: { default: null, validate: 'string|null' },\n rel: { default: null, validate: 'string|null' },\n },\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (dom: HTMLElement) => {\n return {\n href: dom.getAttribute('href') || '',\n target: dom.getAttribute('target') || null,\n rel: dom.getAttribute('rel') || null,\n }\n },\n },\n ],\n toDOM(node) {\n const { href, target, rel } = node.attrs as LinkAttrs\n return ['a', { href, target, rel }, 0]\n },\n })\n}\n\n/**\n * @internal\n */\nexport type LinkCommandsExtension = Extension<{\n Commands: {\n addLink: [attrs: LinkAttrs]\n removeLink: []\n toggleLink: [attrs: LinkAttrs]\n expandLink: []\n }\n}>\n\nexport function defineLinkCommands(): LinkCommandsExtension {\n return defineCommands({\n addLink: (attrs: LinkAttrs) => addMark({ type: 'link', attrs }),\n removeLink: () => removeMark({ type: 'link' }),\n toggleLink: (attrs: LinkAttrs) => toggleMark({ type: 'link', attrs }),\n expandLink: () => expandMark({ type: 'link' }),\n })\n}\n\n/**\n * Apply link marks after pressing Space.\n *\n * @internal\n */\nexport function defineLinkInputRule(): PlainExtension {\n return defineInputRule(\n new InputRule(LINK_INPUT_RE, (state, match, from) => {\n const href = match[1]\n if (!href) return null\n\n const mark = state.schema.marks.link.create({ href })\n return state.tr.addMark(from, from + href.length, mark).insertText(' ')\n }),\n )\n}\n\n/**\n * Apply link marks after typing Enter.\n *\n * @internal\n */\nexport function defineLinkEnterRule(): PlainExtension {\n return defineEnterRule({\n regex: LINK_ENTER_RE,\n handler: ({ state, from, match }) => {\n const href = match[1]\n if (!href) return null\n\n const mark = state.schema.marks.link.create({ href })\n const tr = state.tr.addMark(from, from + href.length, mark)\n return tr.docChanged ? tr : null\n },\n })\n}\n\n/**\n * Apply and remove link marks to the text during typing.\n *\n * @internal\n */\nexport function defineLinkMarkRule(): PlainExtension {\n return defineMarkRule({\n regex: LINK_MARK_RE,\n type: 'link',\n attrs: (match) => ({ href: match[1] }),\n })\n}\n\n/**\n * @internal\n */\nexport type LinkExtension = Union<[LinkSpecExtension, LinkCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineLink(): LinkExtension {\n return union(\n defineLinkSpec(),\n defineLinkCommands(),\n defineLinkInputRule(),\n defineLinkEnterRule(),\n defineLinkPasteRule(),\n )\n}\n"],"mappings":";;;;;;;;AAIA,MAAM,iBACJ;AAGF,MAAM,2BAA2B;AAEjC,MAAM,oBAAoB,MAAM,2BAA2B;AAElC,KAAe;AAGxC,MAAM,uBAEF,6HAiBY,iBACJ;AAmCZ,MAAM,qBAAqB,uBAAuB,oBAAoB;AAEtE,MAAM,qBAAqB,uBAAuB,oBAAoB;AAEtE,MAAM,oBAAoB,uBAAuB;AAEjD,MAAa,gBAAwB,IAAI,OAAO,oBAAoB,KAAK;AACzE,MAAa,gBAAwB,IAAI,OAAO,oBAAoB,KAAK;AACzE,MAAa,eAAuB,IAAI,OAAO,mBAAmB,KAAK;;;;;;;ACpEvE,SAAgB,sBAAsC;AACpD,QAAO,oBAAoB;EACzB,MAAM;EACN,OAAO;EACP,WAAW,UAA8C;AACvD,OAAI,MAAM,GACR,QAAO,EAAE,MAAM,MAAM,IAAI;AAE3B,UAAO;;EAEV,CAAC;;;;;;;;ACiBJ,SAAgB,iBAAoC;AAClD,QAAO,eAAkC;EACvC,MAAM;EACN,WAAW;EACX,OAAO;GACL,MAAM,EAAE,UAAU,UAAU;GAC5B,QAAQ;IAAE,SAAS;IAAM,UAAU;IAAe;GAClD,KAAK;IAAE,SAAS;IAAM,UAAU;IAAe;GAChD;EACD,UAAU,CACR;GACE,KAAK;GACL,WAAW,QAAqB;AAC9B,WAAO;KACL,MAAM,IAAI,aAAa,OAAO,IAAI;KAClC,QAAQ,IAAI,aAAa,SAAS,IAAI;KACtC,KAAK,IAAI,aAAa,MAAM,IAAI;KACjC;;GAEJ,CACF;EACD,MAAM,MAAM;GACV,MAAM,EAAE,MAAM,QAAQ,QAAQ,KAAK;AACnC,UAAO;IAAC;IAAK;KAAE;KAAM;KAAQ;KAAK;IAAE;IAAE;;EAEzC,CAAC;;AAeJ,SAAgB,qBAA4C;AAC1D,QAAO,eAAe;EACpB,UAAU,UAAqB,QAAQ;GAAE,MAAM;GAAQ;GAAO,CAAC;EAC/D,kBAAkB,WAAW,EAAE,MAAM,QAAQ,CAAC;EAC9C,aAAa,UAAqB,WAAW;GAAE,MAAM;GAAQ;GAAO,CAAC;EACrE,kBAAkB,WAAW,EAAE,MAAM,QAAQ,CAAC;EAC/C,CAAC;;;;;;;AAQJ,SAAgB,sBAAsC;AACpD,QAAO,gBACL,IAAI,UAAU,gBAAgB,OAAO,OAAO,SAAS;EACnD,MAAM,OAAO,MAAM;AACnB,MAAI,CAAC,KAAM,QAAO;EAElB,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK,OAAO,EAAE,MAAM,CAAC;AACrD,SAAO,MAAM,GAAG,QAAQ,MAAM,OAAO,KAAK,QAAQ,KAAK,CAAC,WAAW,IAAI;GACvE,CACH;;;;;;;AAQH,SAAgB,sBAAsC;AACpD,QAAO,gBAAgB;EACrB,OAAO;EACP,UAAU,EAAE,OAAO,MAAM,YAAY;GACnC,MAAM,OAAO,MAAM;AACnB,OAAI,CAAC,KAAM,QAAO;GAElB,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK,OAAO,EAAE,MAAM,CAAC;GACrD,MAAM,KAAK,MAAM,GAAG,QAAQ,MAAM,OAAO,KAAK,QAAQ,KAAK;AAC3D,UAAO,GAAG,aAAa,KAAK;;EAE/B,CAAC;;;;;;;AAQJ,SAAgB,qBAAqC;AACnD,QAAO,eAAe;EACpB,OAAO;EACP,MAAM;EACN,QAAQ,WAAW,EAAE,MAAM,MAAM,IAAI;EACtC,CAAC;;;;;AAWJ,SAAgB,aAA4B;AAC1C,QAAO,MACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,CACtB"}
@@ -25,6 +25,32 @@ type ListCommandsExtension = Extension<{
25
25
  */
26
26
  declare function defineListCommands(): ListCommandsExtension;
27
27
  //#endregion
28
+ //#region src/list/list-input-rules.d.ts
29
+ /**
30
+ * @internal
31
+ */
32
+ declare function defineListInputRules(): Extension;
33
+ //#endregion
34
+ //#region src/list/list-keymap.d.ts
35
+ /**
36
+ * Returns a extension that adds key bindings for list.
37
+ *
38
+ * @internal
39
+ */
40
+ declare function defineListKeymap(): PlainExtension;
41
+ //#endregion
42
+ //#region src/list/list-plugins.d.ts
43
+ /**
44
+ * @internal
45
+ */
46
+ declare function defineListPlugins(): PlainExtension;
47
+ //#endregion
48
+ //#region src/list/list-serializer.d.ts
49
+ /**
50
+ * @internal
51
+ */
52
+ declare function defineListSerializer(): PlainExtension;
53
+ //#endregion
28
54
  //#region src/list/list-types.d.ts
29
55
  /**
30
56
  * The attributes of a list node.
@@ -74,31 +100,5 @@ type ListExtension = Union<[ListSpecExtension, ListCommandsExtension]>;
74
100
  */
75
101
  declare function defineList(): ListExtension;
76
102
  //#endregion
77
- //#region src/list/list-input-rules.d.ts
78
- /**
79
- * @internal
80
- */
81
- declare function defineListInputRules(): Extension;
82
- //#endregion
83
- //#region src/list/list-keymap.d.ts
84
- /**
85
- * Returns a extension that adds key bindings for list.
86
- *
87
- * @internal
88
- */
89
- declare function defineListKeymap(): PlainExtension;
90
- //#endregion
91
- //#region src/list/list-plugins.d.ts
92
- /**
93
- * @internal
94
- */
95
- declare function defineListPlugins(): PlainExtension;
96
- //#endregion
97
- //#region src/list/list-serializer.d.ts
98
- /**
99
- * @internal
100
- */
101
- declare function defineListSerializer(): PlainExtension;
102
- //#endregion
103
103
  export { type DedentListOptions, type IndentListOptions, type ListAttrs, type ListCommandsExtension, ListDOMSerializer, type ListExtension, type ListSpecExtension, type ToggleCollapsedOptions, type UnwrapListOptions, type WrapInListGetAttrs, defineList, defineListCommands, defineListInputRules, defineListKeymap, defineListPlugins, defineListSerializer, defineListSpec };
104
104
  //# sourceMappingURL=prosekit-extensions-list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-extensions-list.d.ts","names":[],"sources":["../src/list/list-commands.ts","../src/list/list-types.ts","../src/list/list-spec.ts","../src/list/list.ts","../src/list/list-input-rules.ts","../src/list/list-keymap.ts","../src/list/list-plugins.ts","../src/list/list-serializer.ts"],"mappings":";;;;;;AAyBA;KAAY,qBAAA,GAAwB,SAAA;EAClC,QAAA;IACE,UAAA,GAAa,OAAA,GAAU,mBAAA;IACvB,UAAA,GAAa,OAAA,GAAU,mBAAA;IACvB,QAAA,GAAW,SAAA;IACX,SAAA;IACA,eAAA,GAAkB,OAAA,GAAU,wBAAA;IAC5B,UAAA,GAAa,OAAA,GAAU,mBAAA;IACvB,UAAA,GAAa,KAAA,GAAQ,cAAA;IACrB,UAAA,GAAa,KAAA,GAAQ,cAAA;IACrB,UAAA,GAAa,KAAA,GAAQ,cAAA;EAAA;AAAA;;;;;;iBAST,kBAAA,CAAA,GAAsB,qBAAA;;;;;;;AAnBtC;UCpBiB,SAAA;;;;EAIf,IAAA;EDuByB;;;ECnBzB,KAAA;EDYkC;;;ECRlC,OAAA;EDSA;;;ECLA,SAAA;AAAA;;;;;ADIF;KEhBY,iBAAA,GAAoB,SAAA;EAC9B,KAAA;IACE,IAAA,EAAM,SAAA;EAAA;AAAA;;;;iBA4BM,cAAA,CAAA,GAAkB,iBAAA;;;;AFdlC;;KGZY,aAAA,GAAgB,KAAA,EAAO,iBAAA,EAAmB,qBAAA;;;;iBAKtC,UAAA,CAAA,GAAc,aAAA;;;;;;iBCVd,oBAAA,CAAA,GAAwB,SAAA;;;;;;AJiBxC;;iBKcgB,gBAAA,CAAA,GAAoB,cAAA;;;;;;iBCVpB,iBAAA,CAAA,GAAqB,cAAA;;;;;;iBCtBrB,oBAAA,CAAA,GAAwB,cAAA"}
1
+ {"version":3,"file":"prosekit-extensions-list.d.ts","names":[],"sources":["../src/list/list-commands.ts","../src/list/list-input-rules.ts","../src/list/list-keymap.ts","../src/list/list-plugins.ts","../src/list/list-serializer.ts","../src/list/list-types.ts","../src/list/list-spec.ts","../src/list/list.ts"],"mappings":";;;;;;AAyBA;KAAY,qBAAA,GAAwB,SAAA;EAClC,QAAA;IACE,UAAA,GAAa,OAAA,GAAU,mBAAA;IACvB,UAAA,GAAa,OAAA,GAAU,mBAAA;IACvB,QAAA,GAAW,SAAA;IACX,SAAA;IACA,eAAA,GAAkB,OAAA,GAAU,wBAAA;IAC5B,UAAA,GAAa,OAAA,GAAU,mBAAA;IACvB,UAAA,GAAa,KAAA,GAAQ,cAAA;IACrB,UAAA,GAAa,KAAA,GAAQ,cAAA;IACrB,UAAA,GAAa,KAAA,GAAQ,cAAA;EAAA;AAAA;;;;;;iBAST,kBAAA,CAAA,GAAsB,qBAAA;;;;;;iBCpCtB,oBAAA,CAAA,GAAwB,SAAA;;;;;;ADiBxC;;iBEcgB,gBAAA,CAAA,GAAoB,cAAA;;;;;;iBCVpB,iBAAA,CAAA,GAAqB,cAAA;;;;;;iBCtBrB,oBAAA,CAAA,GAAwB,cAAA;;;;;;;AJkBxC;UKpBiB,SAAA;;;;EAIf,IAAA;ELuByB;;;EKnBzB,KAAA;ELYkC;;;EKRlC,OAAA;ELSA;;;EKLA,SAAA;AAAA;;;;;ALIF;KMhBY,iBAAA,GAAoB,SAAA;EAC9B,KAAA;IACE,IAAA,EAAM,SAAA;EAAA;AAAA;;;;iBA4BM,cAAA,CAAA,GAAkB,iBAAA;;;;ANdlC;;KOZY,aAAA,GAAgB,KAAA,EAAO,iBAAA,EAAmB,qBAAA;;;;iBAKtC,UAAA,CAAA,GAAc,aAAA"}
@@ -1,7 +1,7 @@
1
- import { n as defineInputRule } from "./input-rule-COGr_GBb.js";
2
- import { t as defineDropIndicator } from "./drop-indicator-B_oMfeVP.js";
3
- import { defineClipboardSerializer, defineCommands, defineKeymap, defineNodeSpec, definePlugin, insertNode, union } from "@prosekit/core";
1
+ import { defineInputRule } from "./prosekit-extensions-input-rule.js";
2
+ import { t as defineDropIndicator } from "./drop-indicator-DJq8pF92.js";
4
3
  import { Plugin } from "@prosekit/pm/state";
4
+ import { defineClipboardSerializer, defineCommands, defineKeymap, defineNodeSpec, definePlugin, insertNode, union } from "@prosekit/core";
5
5
  import { chainCommands, deleteSelection } from "@prosekit/pm/commands";
6
6
  import { isElementLike } from "@ocavue/utils";
7
7
  import { ListDOMSerializer, createDedentListCommand, createIndentListCommand, createListEventPlugin, createListRenderingPlugin, createListSpec, createMoveListCommand, createSafariInputMethodWorkaroundPlugin, createSplitListCommand, createToggleCollapsedCommand, createToggleListCommand, createUnwrapListCommand, createWrapInListCommand, deleteCommand, enterCommand, findCheckboxInListItem, joinCollapsedListBackward, joinListElements, joinListUp, listInputRules, listToDOM, protectCollapsed, unwrapListSlice } from "prosemirror-flat-list";
@@ -32,30 +32,6 @@ function defineListCommands() {
32
32
  });
33
33
  }
34
34
 
35
- //#endregion
36
- //#region src/list/list-drop-indicator.ts
37
- /**
38
- * Configures drop indicator to avoid unexpected drop point.
39
- *
40
- * We don't want to drag a list node and drop it as the first
41
- * child of another list node.
42
- *
43
- * @internal
44
- */
45
- function defineListDropIndicator() {
46
- return defineDropIndicator({ onDrag });
47
- }
48
- const onDrag = ({ view, pos }) => {
49
- const slice = view.dragging?.slice;
50
- if (slice && slice.openStart === 0 && slice.openEnd === 0 && slice.content.childCount === 1) {
51
- if (slice.content.child(0).type.name === "list") {
52
- const $pos = view.state.doc.resolve(pos);
53
- if ($pos.parent.type.name === "list" && $pos.index() === 0) return false;
54
- }
55
- }
56
- return true;
57
- };
58
-
59
35
  //#endregion
60
36
  //#region src/list/list-input-rules.ts
61
37
  /**
@@ -198,6 +174,30 @@ function defineListSpec() {
198
174
  });
199
175
  }
200
176
 
177
+ //#endregion
178
+ //#region src/list/list-drop-indicator.ts
179
+ /**
180
+ * Configures drop indicator to avoid unexpected drop point.
181
+ *
182
+ * We don't want to drag a list node and drop it as the first
183
+ * child of another list node.
184
+ *
185
+ * @internal
186
+ */
187
+ function defineListDropIndicator() {
188
+ return defineDropIndicator({ onDrag });
189
+ }
190
+ const onDrag = ({ view, pos }) => {
191
+ const slice = view.dragging?.slice;
192
+ if (slice && slice.openStart === 0 && slice.openEnd === 0 && slice.content.childCount === 1) {
193
+ if (slice.content.child(0).type.name === "list") {
194
+ const $pos = view.state.doc.resolve(pos);
195
+ if ($pos.parent.type.name === "list" && $pos.index() === 0) return false;
196
+ }
197
+ }
198
+ return true;
199
+ };
200
+
201
201
  //#endregion
202
202
  //#region src/list/list.ts
203
203
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-extensions-list.js","names":[],"sources":["../src/list/list-commands.ts","../src/list/list-drop-indicator.ts","../src/list/list-input-rules.ts","../src/list/list-keymap.ts","../src/list/list-plugins.ts","../src/list/list-serializer.ts","../src/list/list-spec.ts","../src/list/list.ts"],"sourcesContent":["import { defineCommands, insertNode, type Extension } from '@prosekit/core'\nimport type { Command } from '@prosekit/pm/state'\nimport {\n createDedentListCommand as dedentList,\n createIndentListCommand as indentList,\n createMoveListCommand as moveList,\n createSplitListCommand as splitList,\n createToggleCollapsedCommand as toggleCollapsed,\n createToggleListCommand as toggleList,\n createUnwrapListCommand as unwrapList,\n createWrapInListCommand as wrapInList,\n type DedentListOptions,\n type IndentListOptions,\n type ListAttributes,\n type ToggleCollapsedOptions,\n type UnwrapListOptions,\n} from 'prosemirror-flat-list'\n\nfunction insertList(attrs?: ListAttributes): Command {\n return insertNode({ type: 'list', attrs })\n}\n\n/**\n * @internal\n */\nexport type ListCommandsExtension = Extension<{\n Commands: {\n dedentList: [options?: DedentListOptions]\n indentList: [options?: IndentListOptions]\n moveList: [direction: 'up' | 'down']\n splitList: []\n toggleCollapsed: [options?: ToggleCollapsedOptions]\n unwrapList: [options?: UnwrapListOptions]\n toggleList: [attrs?: ListAttributes]\n wrapInList: [attrs?: ListAttributes]\n insertList: [attrs?: ListAttributes]\n }\n}>\n\n/**\n * Defines list commands.\n *\n * @internal\n */\nexport function defineListCommands(): ListCommandsExtension {\n return defineCommands({\n dedentList,\n indentList,\n moveList,\n splitList,\n toggleCollapsed,\n unwrapList,\n toggleList,\n wrapInList,\n insertList,\n })\n}\n","import type { PlainExtension } from '@prosekit/core'\n\nimport type { DragEventHandler } from '../drop-indicator'\nimport { defineDropIndicator } from '../drop-indicator'\n\n/**\n * Configures drop indicator to avoid unexpected drop point.\n *\n * We don't want to drag a list node and drop it as the first\n * child of another list node.\n *\n * @internal\n */\nexport function defineListDropIndicator(): PlainExtension {\n return defineDropIndicator({\n onDrag,\n })\n}\n\nconst onDrag: DragEventHandler = ({ view, pos }): boolean => {\n const slice = view.dragging?.slice\n if (\n slice\n && slice.openStart === 0\n && slice.openEnd === 0\n && slice.content.childCount === 1\n ) {\n const node = slice.content.child(0)\n if (node.type.name === 'list') {\n const $pos = view.state.doc.resolve(pos)\n if ($pos.parent.type.name === 'list' && $pos.index() === 0) {\n return false\n }\n }\n }\n return true\n}\n","import { union, type Extension } from '@prosekit/core'\nimport { listInputRules } from 'prosemirror-flat-list'\n\nimport { defineInputRule } from '../input-rule'\n\n/**\n * @internal\n */\nexport function defineListInputRules(): Extension {\n return union(listInputRules.map(defineInputRule))\n}\n","import { defineKeymap, type PlainExtension } from '@prosekit/core'\nimport { chainCommands, deleteSelection } from '@prosekit/pm/commands'\nimport {\n createDedentListCommand,\n createIndentListCommand,\n deleteCommand,\n enterCommand,\n joinCollapsedListBackward,\n joinListUp,\n protectCollapsed,\n} from 'prosemirror-flat-list'\n\n// This is different from the one exported by prosemirror-flat-list, because\n// some commands are moved to `defineBaseKeymap` in `prosekit/core`.\nconst backspaceCommand = chainCommands(\n protectCollapsed,\n deleteSelection,\n joinListUp,\n joinCollapsedListBackward,\n)\n\nconst dedentListCommand = createDedentListCommand()\nconst indentListCommand = createIndentListCommand()\n\nconst listKeymap = {\n 'Enter': enterCommand,\n 'Backspace': backspaceCommand,\n 'Delete': deleteCommand,\n 'Mod-]': indentListCommand,\n 'Mod-[': dedentListCommand,\n 'Tab': indentListCommand,\n 'Shift-Tab': dedentListCommand,\n}\n\n/**\n * Returns a extension that adds key bindings for list.\n *\n * @internal\n */\nexport function defineListKeymap(): PlainExtension {\n return defineKeymap(listKeymap)\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { Plugin } from '@prosekit/pm/state'\nimport {\n createListEventPlugin,\n createListRenderingPlugin,\n createSafariInputMethodWorkaroundPlugin,\n unwrapListSlice,\n} from 'prosemirror-flat-list'\n\nfunction createListClipboardPlugin(): Plugin {\n return new Plugin({\n props: {\n transformCopied: unwrapListSlice,\n },\n })\n}\n\nfunction createListPlugins(): Plugin[] {\n return [\n createListEventPlugin(),\n createListRenderingPlugin(),\n createListClipboardPlugin(),\n createSafariInputMethodWorkaroundPlugin(),\n ]\n}\n\n/**\n * @internal\n */\nexport function defineListPlugins(): PlainExtension {\n return definePlugin(createListPlugins)\n}\n","import { isElementLike } from '@ocavue/utils'\nimport { defineClipboardSerializer, type PlainExtension } from '@prosekit/core'\nimport { findCheckboxInListItem, joinListElements, listToDOM } from 'prosemirror-flat-list'\n\n/**\n * @internal\n */\nexport function defineListSerializer(): PlainExtension {\n return defineClipboardSerializer({\n serializeFragmentWrapper: (fn) => {\n return (...args) => {\n const dom = fn(...args)\n return normalizeElementTree(joinListElements(dom))\n }\n },\n serializeNodeWrapper: (fn) => {\n return (...args) => {\n const dom = fn(...args)\n return isElementLike(dom)\n ? normalizeElementTree(joinListElements(dom))\n : dom\n }\n },\n nodesFromSchemaWrapper: (fn) => {\n return (...args) => {\n const nodes = fn(...args)\n return {\n ...nodes,\n list: (node) => listToDOM({ node, nativeList: true }),\n }\n }\n },\n })\n}\n\nfunction normalizeElementTree<T extends Element | DocumentFragment>(\n node: T,\n): T {\n if (isElementLike(node)) {\n normalizeTaskList(node)\n }\n\n for (const child of node.children) {\n normalizeElementTree(child)\n }\n\n return node\n}\n\n/**\n * Modifies the DOM tree for task lists to ensure that the output HTML can be\n * parsed by rehype-remark.\n */\nfunction normalizeTaskList(node: Element): void {\n if (\n !node.classList.contains('prosemirror-flat-list')\n || node.getAttribute('data-list-kind') !== 'task'\n || node.children.length !== 2\n ) {\n return\n }\n\n const marker = node.children.item(0)\n if (!marker || !marker.classList.contains('list-marker')) {\n return\n }\n\n const checkbox = findCheckboxInListItem(marker)\n if (!checkbox) {\n return\n }\n\n const content = node.children.item(1)\n if (!content || !content.classList.contains('list-content')) {\n return\n }\n\n const textBlock = content.children.item(0)\n if (!textBlock || !['P', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(textBlock.tagName)) {\n return\n }\n\n node.replaceChildren(...content.children)\n textBlock.prepend(checkbox)\n}\n","import { defineNodeSpec, type Extension } from '@prosekit/core'\nimport type { DOMOutputSpec, ProseMirrorNode } from '@prosekit/pm/model'\nimport { createListSpec, listToDOM, type ListAttributes } from 'prosemirror-flat-list'\n\nimport type { ListAttrs } from './list-types'\n\n/**\n * @internal\n */\nexport type ListSpecExtension = Extension<{\n Nodes: {\n list: ListAttrs\n }\n}>\n\nfunction getMarkers(node: ProseMirrorNode): DOMOutputSpec[] {\n const attrs = node.attrs as ListAttributes\n switch (attrs.kind) {\n case 'task':\n // Use a `label` element here so that the area around the checkbox is also checkable.\n return [\n [\n 'label',\n [\n 'input',\n { type: 'checkbox', checked: attrs.checked ? '' : undefined },\n ],\n ],\n ]\n default:\n // Always return an empty array so that the marker element is rendered. This\n // is required to make the drop indicator locate the correct position.\n return []\n }\n}\n\n/**\n * @internal\n */\nexport function defineListSpec(): ListSpecExtension {\n const spec = createListSpec()\n\n return defineNodeSpec<'list', ListAttrs>({\n ...spec,\n toDOM: (node) => {\n return listToDOM({ node, getMarkers })\n },\n name: 'list',\n })\n}\n","import { union, type Union } from '@prosekit/core'\n\nimport { defineListCommands, type ListCommandsExtension } from './list-commands'\nimport { defineListDropIndicator } from './list-drop-indicator'\nimport { defineListInputRules } from './list-input-rules'\nimport { defineListKeymap } from './list-keymap'\nimport { defineListPlugins } from './list-plugins'\nimport { defineListSerializer } from './list-serializer'\nimport { defineListSpec, type ListSpecExtension } from './list-spec'\n\n/**\n * @internal\n */\nexport type ListExtension = Union<[ListSpecExtension, ListCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineList(): ListExtension {\n return union(\n defineListSpec(),\n defineListPlugins(),\n defineListKeymap(),\n defineListInputRules(),\n defineListCommands(),\n defineListSerializer(),\n defineListDropIndicator(),\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"prosekit-extensions-list.js","names":[],"sources":["../src/list/list-commands.ts","../src/list/list-input-rules.ts","../src/list/list-keymap.ts","../src/list/list-plugins.ts","../src/list/list-serializer.ts","../src/list/list-spec.ts","../src/list/list-drop-indicator.ts","../src/list/list.ts"],"sourcesContent":["import { defineCommands, insertNode, type Extension } from '@prosekit/core'\nimport type { Command } from '@prosekit/pm/state'\nimport {\n createDedentListCommand as dedentList,\n createIndentListCommand as indentList,\n createMoveListCommand as moveList,\n createSplitListCommand as splitList,\n createToggleCollapsedCommand as toggleCollapsed,\n createToggleListCommand as toggleList,\n createUnwrapListCommand as unwrapList,\n createWrapInListCommand as wrapInList,\n type DedentListOptions,\n type IndentListOptions,\n type ListAttributes,\n type ToggleCollapsedOptions,\n type UnwrapListOptions,\n} from 'prosemirror-flat-list'\n\nfunction insertList(attrs?: ListAttributes): Command {\n return insertNode({ type: 'list', attrs })\n}\n\n/**\n * @internal\n */\nexport type ListCommandsExtension = Extension<{\n Commands: {\n dedentList: [options?: DedentListOptions]\n indentList: [options?: IndentListOptions]\n moveList: [direction: 'up' | 'down']\n splitList: []\n toggleCollapsed: [options?: ToggleCollapsedOptions]\n unwrapList: [options?: UnwrapListOptions]\n toggleList: [attrs?: ListAttributes]\n wrapInList: [attrs?: ListAttributes]\n insertList: [attrs?: ListAttributes]\n }\n}>\n\n/**\n * Defines list commands.\n *\n * @internal\n */\nexport function defineListCommands(): ListCommandsExtension {\n return defineCommands({\n dedentList,\n indentList,\n moveList,\n splitList,\n toggleCollapsed,\n unwrapList,\n toggleList,\n wrapInList,\n insertList,\n })\n}\n","import { union, type Extension } from '@prosekit/core'\nimport { listInputRules } from 'prosemirror-flat-list'\n\nimport { defineInputRule } from '../input-rule/index.ts'\n\n/**\n * @internal\n */\nexport function defineListInputRules(): Extension {\n return union(listInputRules.map(defineInputRule))\n}\n","import { defineKeymap, type PlainExtension } from '@prosekit/core'\nimport { chainCommands, deleteSelection } from '@prosekit/pm/commands'\nimport {\n createDedentListCommand,\n createIndentListCommand,\n deleteCommand,\n enterCommand,\n joinCollapsedListBackward,\n joinListUp,\n protectCollapsed,\n} from 'prosemirror-flat-list'\n\n// This is different from the one exported by prosemirror-flat-list, because\n// some commands are moved to `defineBaseKeymap` in `prosekit/core`.\nconst backspaceCommand = chainCommands(\n protectCollapsed,\n deleteSelection,\n joinListUp,\n joinCollapsedListBackward,\n)\n\nconst dedentListCommand = createDedentListCommand()\nconst indentListCommand = createIndentListCommand()\n\nconst listKeymap = {\n 'Enter': enterCommand,\n 'Backspace': backspaceCommand,\n 'Delete': deleteCommand,\n 'Mod-]': indentListCommand,\n 'Mod-[': dedentListCommand,\n 'Tab': indentListCommand,\n 'Shift-Tab': dedentListCommand,\n}\n\n/**\n * Returns a extension that adds key bindings for list.\n *\n * @internal\n */\nexport function defineListKeymap(): PlainExtension {\n return defineKeymap(listKeymap)\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { Plugin } from '@prosekit/pm/state'\nimport {\n createListEventPlugin,\n createListRenderingPlugin,\n createSafariInputMethodWorkaroundPlugin,\n unwrapListSlice,\n} from 'prosemirror-flat-list'\n\nfunction createListClipboardPlugin(): Plugin {\n return new Plugin({\n props: {\n transformCopied: unwrapListSlice,\n },\n })\n}\n\nfunction createListPlugins(): Plugin[] {\n return [\n createListEventPlugin(),\n createListRenderingPlugin(),\n createListClipboardPlugin(),\n createSafariInputMethodWorkaroundPlugin(),\n ]\n}\n\n/**\n * @internal\n */\nexport function defineListPlugins(): PlainExtension {\n return definePlugin(createListPlugins)\n}\n","import { isElementLike } from '@ocavue/utils'\nimport { defineClipboardSerializer, type PlainExtension } from '@prosekit/core'\nimport { findCheckboxInListItem, joinListElements, listToDOM } from 'prosemirror-flat-list'\n\n/**\n * @internal\n */\nexport function defineListSerializer(): PlainExtension {\n return defineClipboardSerializer({\n serializeFragmentWrapper: (fn) => {\n return (...args) => {\n const dom = fn(...args)\n return normalizeElementTree(joinListElements(dom))\n }\n },\n serializeNodeWrapper: (fn) => {\n return (...args) => {\n const dom = fn(...args)\n return isElementLike(dom)\n ? normalizeElementTree(joinListElements(dom))\n : dom\n }\n },\n nodesFromSchemaWrapper: (fn) => {\n return (...args) => {\n const nodes = fn(...args)\n return {\n ...nodes,\n list: (node) => listToDOM({ node, nativeList: true }),\n }\n }\n },\n })\n}\n\nfunction normalizeElementTree<T extends Element | DocumentFragment>(\n node: T,\n): T {\n if (isElementLike(node)) {\n normalizeTaskList(node)\n }\n\n for (const child of node.children) {\n normalizeElementTree(child)\n }\n\n return node\n}\n\n/**\n * Modifies the DOM tree for task lists to ensure that the output HTML can be\n * parsed by rehype-remark.\n */\nfunction normalizeTaskList(node: Element): void {\n if (\n !node.classList.contains('prosemirror-flat-list')\n || node.getAttribute('data-list-kind') !== 'task'\n || node.children.length !== 2\n ) {\n return\n }\n\n const marker = node.children.item(0)\n if (!marker || !marker.classList.contains('list-marker')) {\n return\n }\n\n const checkbox = findCheckboxInListItem(marker)\n if (!checkbox) {\n return\n }\n\n const content = node.children.item(1)\n if (!content || !content.classList.contains('list-content')) {\n return\n }\n\n const textBlock = content.children.item(0)\n if (!textBlock || !['P', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(textBlock.tagName)) {\n return\n }\n\n node.replaceChildren(...content.children)\n textBlock.prepend(checkbox)\n}\n","import { defineNodeSpec, type Extension } from '@prosekit/core'\nimport type { DOMOutputSpec, ProseMirrorNode } from '@prosekit/pm/model'\nimport { createListSpec, listToDOM, type ListAttributes } from 'prosemirror-flat-list'\n\nimport type { ListAttrs } from './list-types.ts'\n\n/**\n * @internal\n */\nexport type ListSpecExtension = Extension<{\n Nodes: {\n list: ListAttrs\n }\n}>\n\nfunction getMarkers(node: ProseMirrorNode): DOMOutputSpec[] {\n const attrs = node.attrs as ListAttributes\n switch (attrs.kind) {\n case 'task':\n // Use a `label` element here so that the area around the checkbox is also checkable.\n return [\n [\n 'label',\n [\n 'input',\n { type: 'checkbox', checked: attrs.checked ? '' : undefined },\n ],\n ],\n ]\n default:\n // Always return an empty array so that the marker element is rendered. This\n // is required to make the drop indicator locate the correct position.\n return []\n }\n}\n\n/**\n * @internal\n */\nexport function defineListSpec(): ListSpecExtension {\n const spec = createListSpec()\n\n return defineNodeSpec<'list', ListAttrs>({\n ...spec,\n toDOM: (node) => {\n return listToDOM({ node, getMarkers })\n },\n name: 'list',\n })\n}\n","import type { PlainExtension } from '@prosekit/core'\n\nimport type { DragEventHandler } from '../drop-indicator/index.ts'\nimport { defineDropIndicator } from '../drop-indicator/index.ts'\n\n/**\n * Configures drop indicator to avoid unexpected drop point.\n *\n * We don't want to drag a list node and drop it as the first\n * child of another list node.\n *\n * @internal\n */\nexport function defineListDropIndicator(): PlainExtension {\n return defineDropIndicator({\n onDrag,\n })\n}\n\nconst onDrag: DragEventHandler = ({ view, pos }): boolean => {\n const slice = view.dragging?.slice\n if (\n slice\n && slice.openStart === 0\n && slice.openEnd === 0\n && slice.content.childCount === 1\n ) {\n const node = slice.content.child(0)\n if (node.type.name === 'list') {\n const $pos = view.state.doc.resolve(pos)\n if ($pos.parent.type.name === 'list' && $pos.index() === 0) {\n return false\n }\n }\n }\n return true\n}\n","import { union, type Union } from '@prosekit/core'\n\nimport { defineListCommands, type ListCommandsExtension } from './list-commands.ts'\nimport { defineListDropIndicator } from './list-drop-indicator.ts'\nimport { defineListInputRules } from './list-input-rules.ts'\nimport { defineListKeymap } from './list-keymap.ts'\nimport { defineListPlugins } from './list-plugins.ts'\nimport { defineListSerializer } from './list-serializer.ts'\nimport { defineListSpec, type ListSpecExtension } from './list-spec.ts'\n\n/**\n * @internal\n */\nexport type ListExtension = Union<[ListSpecExtension, ListCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineList(): ListExtension {\n return union(\n defineListSpec(),\n defineListPlugins(),\n defineListKeymap(),\n defineListInputRules(),\n defineListCommands(),\n defineListSerializer(),\n defineListDropIndicator(),\n )\n}\n"],"mappings":"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"}
@@ -13,6 +13,22 @@ type LoroCommandsExtension = Extension<{
13
13
  }>;
14
14
  declare function defineLoroCommands(): LoroCommandsExtension;
15
15
  //#endregion
16
+ //#region src/loro/loro-cursor-plugin.d.ts
17
+ interface LoroCursorOptions extends CursorPluginOptions {
18
+ awareness?: CursorAwareness;
19
+ presence?: CursorEphemeralStore;
20
+ }
21
+ declare function defineLoroCursorPlugin(options: LoroCursorOptions): PlainExtension;
22
+ //#endregion
23
+ //#region src/loro/loro-keymap.d.ts
24
+ declare function defineLoroKeymap(): PlainExtension;
25
+ //#endregion
26
+ //#region src/loro/loro-sync-plugin.d.ts
27
+ declare function defineLoroSyncPlugin(options: LoroSyncPluginProps$1): PlainExtension;
28
+ //#endregion
29
+ //#region src/loro/loro-undo-plugin.d.ts
30
+ declare function defineLoroUndoPlugin(options: LoroUndoPluginProps$1): PlainExtension;
31
+ //#endregion
16
32
  //#region src/loro/loro.d.ts
17
33
  interface LoroOptions {
18
34
  /**
@@ -49,21 +65,5 @@ type LoroExtension = Union<[LoroCommandsExtension, PlainExtension]>;
49
65
  */
50
66
  declare function defineLoro(options: LoroOptions): LoroExtension;
51
67
  //#endregion
52
- //#region src/loro/loro-cursor-plugin.d.ts
53
- interface LoroCursorOptions extends CursorPluginOptions {
54
- awareness?: CursorAwareness;
55
- presence?: CursorEphemeralStore;
56
- }
57
- declare function defineLoroCursorPlugin(options: LoroCursorOptions): PlainExtension;
58
- //#endregion
59
- //#region src/loro/loro-keymap.d.ts
60
- declare function defineLoroKeymap(): PlainExtension;
61
- //#endregion
62
- //#region src/loro/loro-sync-plugin.d.ts
63
- declare function defineLoroSyncPlugin(options: LoroSyncPluginProps$1): PlainExtension;
64
- //#endregion
65
- //#region src/loro/loro-undo-plugin.d.ts
66
- declare function defineLoroUndoPlugin(options: LoroUndoPluginProps$1): PlainExtension;
67
- //#endregion
68
68
  export { type LoroCursorOptions, type LoroExtension, type LoroOptions, type LoroSyncPluginProps, type LoroUndoPluginProps, defineLoro, defineLoroCommands, defineLoroCursorPlugin, defineLoroKeymap, defineLoroSyncPlugin, defineLoroUndoPlugin };
69
69
  //# sourceMappingURL=prosekit-extensions-loro.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-extensions-loro.d.ts","names":[],"sources":["../src/loro/loro-commands.ts","../src/loro/loro.ts","../src/loro/loro-cursor-plugin.ts","../src/loro/loro-keymap.ts","../src/loro/loro-sync-plugin.ts","../src/loro/loro-undo-plugin.ts"],"mappings":";;;;;;;KAWY,qBAAA,GAAwB,SAAA;EAClC,QAAA;IACE,IAAA;IACA,IAAA;EAAA;AAAA;AAAA,iBAIY,kBAAA,CAAA,GAAsB,qBAAA;;;UCFrB,WAAA;EDLL;;;ECSV,GAAA,EAAK,WAAA;EDT6B;;;ECclC,SAAA,GAAY,eAAA;EDXN;;AAIR;ECYE,QAAA,GAAW,oBAAA;;;;EAKX,IAAA,GAAO,IAAA,CAAK,qBAAA;;;AAnBd;EAwBE,IAAA,GAAO,IAAA,CAAK,qBAAA;;;;EAKZ,MAAA,GAAS,mBAAA;AAAA;;;;KAMC,aAAA,GAAgB,KAAA,EAAO,qBAAA,EAAuB,cAAA;;;;iBAK1C,UAAA,CAAW,OAAA,EAAS,WAAA,GAAc,aAAA;;;UCnDjC,iBAAA,SAA0B,mBAAA;EACzC,SAAA,GAAY,eAAA;EACZ,QAAA,GAAW,oBAAA;AAAA;AAAA,iBAGG,sBAAA,CACd,OAAA,EAAS,iBAAA,GACR,cAAA;;;iBCAa,gBAAA,CAAA,GAAoB,cAAA;;;iBCTpB,oBAAA,CACd,OAAA,EAAS,qBAAA,GACR,cAAA;;;iBCFa,oBAAA,CAAqB,OAAA,EAAS,qBAAA,GAAsB,cAAA"}
1
+ {"version":3,"file":"prosekit-extensions-loro.d.ts","names":[],"sources":["../src/loro/loro-commands.ts","../src/loro/loro-cursor-plugin.ts","../src/loro/loro-keymap.ts","../src/loro/loro-sync-plugin.ts","../src/loro/loro-undo-plugin.ts","../src/loro/loro.ts"],"mappings":";;;;;;;KAWY,qBAAA,GAAwB,SAAA;EAClC,QAAA;IACE,IAAA;IACA,IAAA;EAAA;AAAA;AAAA,iBAIY,kBAAA,CAAA,GAAsB,qBAAA;;;UCbrB,iBAAA,SAA0B,mBAAA;EACzC,SAAA,GAAY,eAAA;EACZ,QAAA,GAAW,oBAAA;AAAA;AAAA,iBAGG,sBAAA,CACd,OAAA,EAAS,iBAAA,GACR,cAAA;;;iBCAa,gBAAA,CAAA,GAAoB,cAAA;;;iBCTpB,oBAAA,CACd,OAAA,EAAS,qBAAA,GACR,cAAA;;;iBCFa,oBAAA,CAAqB,OAAA,EAAS,qBAAA,GAAsB,cAAA;;;UCanD,WAAA;ELLL;;;EKSV,GAAA,EAAK,WAAA;ELT6B;;;EKclC,SAAA,GAAY,eAAA;ELXN;;AAIR;EKYE,QAAA,GAAW,oBAAA;;;;EAKX,IAAA,GAAO,IAAA,CAAK,qBAAA;;;AJ9Bd;EImCE,IAAA,GAAO,IAAA,CAAK,qBAAA;;;;EAKZ,MAAA,GAAS,mBAAA;AAAA;;;;KAMC,aAAA,GAAgB,KAAA,EAAO,qBAAA,EAAuB,cAAA;;;;iBAK1C,UAAA,CAAW,OAAA,EAAS,WAAA,GAAc,aAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-extensions-loro.js","names":[],"sources":["../src/loro/loro-commands.ts","../src/loro/loro-cursor-plugin.ts","../src/loro/loro-keymap.ts","../src/loro/loro-sync-plugin.ts","../src/loro/loro-undo-plugin.ts","../src/loro/loro.ts"],"sourcesContent":["import { defineCommands, type Extension } from '@prosekit/core'\nimport { redo, undo } from 'loro-prosemirror'\n\nconst commands = {\n undo: () => undo,\n redo: () => redo,\n} as const\n\n/**\n * @internal\n */\nexport type LoroCommandsExtension = Extension<{\n Commands: {\n undo: []\n redo: []\n }\n}>\n\nexport function defineLoroCommands(): LoroCommandsExtension {\n return defineCommands(commands)\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport type { Plugin } from '@prosekit/pm/state'\nimport type { CursorAwareness, CursorEphemeralStore, CursorPluginOptions } from 'loro-prosemirror'\nimport { LoroCursorPlugin, LoroEphemeralCursorPlugin } from 'loro-prosemirror'\n\nexport interface LoroCursorOptions extends CursorPluginOptions {\n awareness?: CursorAwareness\n presence?: CursorEphemeralStore\n}\n\nexport function defineLoroCursorPlugin(\n options: LoroCursorOptions,\n): PlainExtension {\n return definePlugin(createLoroCursorPlugin(options))\n}\n\nfunction createLoroCursorPlugin(options: LoroCursorOptions): Plugin {\n const { awareness, presence, ...rest } = options\n if (awareness && presence) {\n throw new Error('Only one of awareness and presence can be provided')\n } else if (awareness) {\n return LoroCursorPlugin(awareness, rest)\n } else if (presence) {\n return LoroEphemeralCursorPlugin(presence, rest)\n } else {\n throw new Error('Either awareness or presence must be provided')\n }\n}\n","import { defineKeymap, isApple, type Keymap, type PlainExtension } from '@prosekit/core'\nimport { redo, undo } from 'loro-prosemirror'\n\nconst keymap: Keymap = {\n 'Mod-z': undo,\n 'Mod-Z': redo,\n}\n\nif (!isApple) {\n keymap['Mod-y'] = redo\n}\n\nexport function defineLoroKeymap(): PlainExtension {\n return defineKeymap(keymap)\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { LoroSyncPlugin, type LoroSyncPluginProps } from 'loro-prosemirror'\n\nexport function defineLoroSyncPlugin(\n options: LoroSyncPluginProps,\n): PlainExtension {\n return definePlugin(LoroSyncPlugin(options))\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { LoroUndoPlugin, type LoroUndoPluginProps } from 'loro-prosemirror'\n\nexport function defineLoroUndoPlugin(options: LoroUndoPluginProps): PlainExtension {\n return definePlugin(LoroUndoPlugin(options))\n}\n","import { Priority, union, withPriority, type PlainExtension, type Union } from '@prosekit/core'\nimport type {\n CursorAwareness,\n CursorEphemeralStore,\n CursorPluginOptions,\n LoroDocType,\n LoroSyncPluginProps,\n LoroUndoPluginProps,\n} from 'loro-prosemirror'\n\nimport { defineLoroCommands, type LoroCommandsExtension } from './loro-commands'\nimport { defineLoroCursorPlugin } from './loro-cursor-plugin'\nimport { defineLoroKeymap } from './loro-keymap'\nimport { defineLoroSyncPlugin } from './loro-sync-plugin'\nimport { defineLoroUndoPlugin } from './loro-undo-plugin'\n\nexport interface LoroOptions {\n /**\n * The Loro instance handles the state of shared data.\n */\n doc: LoroDocType\n\n /**\n * The (legacy) Awareness instance. One of `awareness` or `presence` must be provided.\n */\n awareness?: CursorAwareness\n\n /**\n * The CursorEphemeralStore instance. One of `awareness` or `presence` must be provided.\n */\n presence?: CursorEphemeralStore\n\n /**\n * Extra options for `LoroSyncPlugin`.\n */\n sync?: Omit<LoroSyncPluginProps, 'doc'>\n\n /**\n * Extra options for the `LoroUndoPlugin`.\n */\n undo?: Omit<LoroUndoPluginProps, 'doc'>\n\n /**\n * Extra options for `LoroCursorPlugin` or `LoroEphemeralCursorPlugin`.\n */\n cursor?: CursorPluginOptions\n}\n\n/**\n * @internal\n */\nexport type LoroExtension = Union<[LoroCommandsExtension, PlainExtension]>\n\n/**\n * @public\n */\nexport function defineLoro(options: LoroOptions): LoroExtension {\n const { doc, awareness, presence, sync, undo, cursor } = options\n\n return withPriority(\n union([\n defineLoroKeymap(),\n defineLoroCommands(),\n defineLoroCursorPlugin({ ...cursor, awareness, presence }),\n defineLoroUndoPlugin({ ...undo, doc }),\n defineLoroSyncPlugin({ ...sync, doc }),\n ]),\n Priority.high,\n )\n}\n"],"mappings":";;;;AAGA,MAAM,WAAW;CACf,YAAY;CACZ,YAAY;CACb;AAYD,SAAgB,qBAA4C;AAC1D,QAAO,eAAe,SAAS;;;;;ACTjC,SAAgB,uBACd,SACgB;AAChB,QAAO,aAAa,uBAAuB,QAAQ,CAAC;;AAGtD,SAAS,uBAAuB,SAAoC;CAClE,MAAM,EAAE,WAAW,UAAU,GAAG,SAAS;AACzC,KAAI,aAAa,SACf,OAAM,IAAI,MAAM,qDAAqD;UAC5D,UACT,QAAO,iBAAiB,WAAW,KAAK;UAC/B,SACT,QAAO,0BAA0B,UAAU,KAAK;KAEhD,OAAM,IAAI,MAAM,gDAAgD;;;;;ACtBpE,MAAM,SAAiB;CACrB,SAAS;CACT,SAAS;CACV;AAED,IAAI,CAAC,QACH,QAAO,WAAW;AAGpB,SAAgB,mBAAmC;AACjD,QAAO,aAAa,OAAO;;;;;ACV7B,SAAgB,qBACd,SACgB;AAChB,QAAO,aAAa,eAAe,QAAQ,CAAC;;;;;ACH9C,SAAgB,qBAAqB,SAA8C;AACjF,QAAO,aAAa,eAAe,QAAQ,CAAC;;;;;;;;ACoD9C,SAAgB,WAAW,SAAqC;CAC9D,MAAM,EAAE,KAAK,WAAW,UAAU,MAAM,MAAM,WAAW;AAEzD,QAAO,aACL,MAAM;EACJ,kBAAkB;EAClB,oBAAoB;EACpB,uBAAuB;GAAE,GAAG;GAAQ;GAAW;GAAU,CAAC;EAC1D,qBAAqB;GAAE,GAAG;GAAM;GAAK,CAAC;EACtC,qBAAqB;GAAE,GAAG;GAAM;GAAK,CAAC;EACvC,CAAC,EACF,SAAS,KACV"}
1
+ {"version":3,"file":"prosekit-extensions-loro.js","names":[],"sources":["../src/loro/loro-commands.ts","../src/loro/loro-cursor-plugin.ts","../src/loro/loro-keymap.ts","../src/loro/loro-sync-plugin.ts","../src/loro/loro-undo-plugin.ts","../src/loro/loro.ts"],"sourcesContent":["import { defineCommands, type Extension } from '@prosekit/core'\nimport { redo, undo } from 'loro-prosemirror'\n\nconst commands = {\n undo: () => undo,\n redo: () => redo,\n} as const\n\n/**\n * @internal\n */\nexport type LoroCommandsExtension = Extension<{\n Commands: {\n undo: []\n redo: []\n }\n}>\n\nexport function defineLoroCommands(): LoroCommandsExtension {\n return defineCommands(commands)\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport type { Plugin } from '@prosekit/pm/state'\nimport type { CursorAwareness, CursorEphemeralStore, CursorPluginOptions } from 'loro-prosemirror'\nimport { LoroCursorPlugin, LoroEphemeralCursorPlugin } from 'loro-prosemirror'\n\nexport interface LoroCursorOptions extends CursorPluginOptions {\n awareness?: CursorAwareness\n presence?: CursorEphemeralStore\n}\n\nexport function defineLoroCursorPlugin(\n options: LoroCursorOptions,\n): PlainExtension {\n return definePlugin(createLoroCursorPlugin(options))\n}\n\nfunction createLoroCursorPlugin(options: LoroCursorOptions): Plugin {\n const { awareness, presence, ...rest } = options\n if (awareness && presence) {\n throw new Error('Only one of awareness and presence can be provided')\n } else if (awareness) {\n return LoroCursorPlugin(awareness, rest)\n } else if (presence) {\n return LoroEphemeralCursorPlugin(presence, rest)\n } else {\n throw new Error('Either awareness or presence must be provided')\n }\n}\n","import { defineKeymap, isApple, type Keymap, type PlainExtension } from '@prosekit/core'\nimport { redo, undo } from 'loro-prosemirror'\n\nconst keymap: Keymap = {\n 'Mod-z': undo,\n 'Mod-Z': redo,\n}\n\nif (!isApple) {\n keymap['Mod-y'] = redo\n}\n\nexport function defineLoroKeymap(): PlainExtension {\n return defineKeymap(keymap)\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { LoroSyncPlugin, type LoroSyncPluginProps } from 'loro-prosemirror'\n\nexport function defineLoroSyncPlugin(\n options: LoroSyncPluginProps,\n): PlainExtension {\n return definePlugin(LoroSyncPlugin(options))\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { LoroUndoPlugin, type LoroUndoPluginProps } from 'loro-prosemirror'\n\nexport function defineLoroUndoPlugin(options: LoroUndoPluginProps): PlainExtension {\n return definePlugin(LoroUndoPlugin(options))\n}\n","import { Priority, union, withPriority, type PlainExtension, type Union } from '@prosekit/core'\nimport type {\n CursorAwareness,\n CursorEphemeralStore,\n CursorPluginOptions,\n LoroDocType,\n LoroSyncPluginProps,\n LoroUndoPluginProps,\n} from 'loro-prosemirror'\n\nimport { defineLoroCommands, type LoroCommandsExtension } from './loro-commands.ts'\nimport { defineLoroCursorPlugin } from './loro-cursor-plugin.ts'\nimport { defineLoroKeymap } from './loro-keymap.ts'\nimport { defineLoroSyncPlugin } from './loro-sync-plugin.ts'\nimport { defineLoroUndoPlugin } from './loro-undo-plugin.ts'\n\nexport interface LoroOptions {\n /**\n * The Loro instance handles the state of shared data.\n */\n doc: LoroDocType\n\n /**\n * The (legacy) Awareness instance. One of `awareness` or `presence` must be provided.\n */\n awareness?: CursorAwareness\n\n /**\n * The CursorEphemeralStore instance. One of `awareness` or `presence` must be provided.\n */\n presence?: CursorEphemeralStore\n\n /**\n * Extra options for `LoroSyncPlugin`.\n */\n sync?: Omit<LoroSyncPluginProps, 'doc'>\n\n /**\n * Extra options for the `LoroUndoPlugin`.\n */\n undo?: Omit<LoroUndoPluginProps, 'doc'>\n\n /**\n * Extra options for `LoroCursorPlugin` or `LoroEphemeralCursorPlugin`.\n */\n cursor?: CursorPluginOptions\n}\n\n/**\n * @internal\n */\nexport type LoroExtension = Union<[LoroCommandsExtension, PlainExtension]>\n\n/**\n * @public\n */\nexport function defineLoro(options: LoroOptions): LoroExtension {\n const { doc, awareness, presence, sync, undo, cursor } = options\n\n return withPriority(\n union([\n defineLoroKeymap(),\n defineLoroCommands(),\n defineLoroCursorPlugin({ ...cursor, awareness, presence }),\n defineLoroUndoPlugin({ ...undo, doc }),\n defineLoroSyncPlugin({ ...sync, doc }),\n ]),\n Priority.high,\n )\n}\n"],"mappings":";;;;AAGA,MAAM,WAAW;CACf,YAAY;CACZ,YAAY;CACb;AAYD,SAAgB,qBAA4C;AAC1D,QAAO,eAAe,SAAS;;;;;ACTjC,SAAgB,uBACd,SACgB;AAChB,QAAO,aAAa,uBAAuB,QAAQ,CAAC;;AAGtD,SAAS,uBAAuB,SAAoC;CAClE,MAAM,EAAE,WAAW,UAAU,GAAG,SAAS;AACzC,KAAI,aAAa,SACf,OAAM,IAAI,MAAM,qDAAqD;UAC5D,UACT,QAAO,iBAAiB,WAAW,KAAK;UAC/B,SACT,QAAO,0BAA0B,UAAU,KAAK;KAEhD,OAAM,IAAI,MAAM,gDAAgD;;;;;ACtBpE,MAAM,SAAiB;CACrB,SAAS;CACT,SAAS;CACV;AAED,IAAI,CAAC,QACH,QAAO,WAAW;AAGpB,SAAgB,mBAAmC;AACjD,QAAO,aAAa,OAAO;;;;;ACV7B,SAAgB,qBACd,SACgB;AAChB,QAAO,aAAa,eAAe,QAAQ,CAAC;;;;;ACH9C,SAAgB,qBAAqB,SAA8C;AACjF,QAAO,aAAa,eAAe,QAAQ,CAAC;;;;;;;;ACoD9C,SAAgB,WAAW,SAAqC;CAC9D,MAAM,EAAE,KAAK,WAAW,UAAU,MAAM,MAAM,WAAW;AAEzD,QAAO,aACL,MAAM;EACJ,kBAAkB;EAClB,oBAAoB;EACpB,uBAAuB;GAAE,GAAG;GAAQ;GAAW;GAAU,CAAC;EAC1D,qBAAqB;GAAE,GAAG;GAAM;GAAK,CAAC;EACtC,qBAAqB;GAAE,GAAG;GAAM;GAAK,CAAC;EACvC,CAAC,EACF,SAAS,KACV"}
@@ -1,3 +1,3 @@
1
- import { t as defineMarkRule } from "./mark-rule-CYe8zk4q.js";
1
+ import { t as defineMarkRule } from "./mark-rule-Bqdm49Eq.js";
2
2
 
3
3
  export { defineMarkRule };
@@ -0,0 +1,154 @@
1
+ import { Extension, PlainExtension, Union } from "@prosekit/core";
2
+ import { Attrs } from "@prosekit/pm/model";
3
+ import { RenderMathBlock, RenderMathInline } from "prosemirror-math";
4
+
5
+ //#region src/math/math-block.d.ts
6
+ /**
7
+ * @internal
8
+ */
9
+ type MathBlockSpecExtension = Extension<{
10
+ Nodes: {
11
+ mathBlock: Attrs;
12
+ };
13
+ }>;
14
+ /**
15
+ * @internal
16
+ */
17
+ declare function defineMathBlockSpec(): MathBlockSpecExtension;
18
+ /**
19
+ * Options for {@link defineMathBlockView}.
20
+ *
21
+ * @internal
22
+ */
23
+ interface MathBlockViewOptions {
24
+ /**
25
+ * The function to render the math block.
26
+ */
27
+ render: RenderMathBlock;
28
+ }
29
+ /**
30
+ * Defines an extension that renders a math block using a custom node view.
31
+ *
32
+ * @param options
33
+ * @internal
34
+ */
35
+ declare function defineMathBlockView({
36
+ render
37
+ }: MathBlockViewOptions): Extension;
38
+ /**
39
+ * @internal
40
+ */
41
+ declare function defineMathBlockEnterRule(): PlainExtension;
42
+ /**
43
+ * Options for {@link defineMathBlock}.
44
+ *
45
+ * @internal
46
+ */
47
+ interface MathBlockOptions {
48
+ /**
49
+ * The function to render the math block.
50
+ */
51
+ render: RenderMathBlock;
52
+ }
53
+ /**
54
+ * @internal
55
+ */
56
+ type MathBlockExtension = Union<[MathBlockSpecExtension]>;
57
+ /**
58
+ * Defines node `mathBlock` and related functionalities.
59
+ *
60
+ * @param options
61
+ * @public
62
+ */
63
+ declare function defineMathBlock(options: MathBlockOptions): MathBlockExtension;
64
+ //#endregion
65
+ //#region src/math/math-inline.d.ts
66
+ /**
67
+ * @internal
68
+ */
69
+ type MathInlineSpecExtension = Extension<{
70
+ Nodes: {
71
+ mathInline: Attrs;
72
+ };
73
+ }>;
74
+ /**
75
+ * @internal
76
+ */
77
+ declare function defineMathInlineSpec(): MathInlineSpecExtension;
78
+ /**
79
+ * Options for {@link defineMathInlineView}.
80
+ *
81
+ * @internal
82
+ */
83
+ interface MathInlineViewOptions {
84
+ /**
85
+ * The function to render the math inline.
86
+ */
87
+ render: RenderMathInline;
88
+ }
89
+ /**
90
+ * Defines an extension that renders a math inline using a custom node view.
91
+ *
92
+ * @param options
93
+ * @internal
94
+ */
95
+ declare function defineMathInlineView({
96
+ render
97
+ }: MathInlineViewOptions): Extension;
98
+ /**
99
+ * @internal
100
+ */
101
+ declare function defineMathInlineInputRule(): PlainExtension;
102
+ /**
103
+ * Options for {@link defineMathInline}.
104
+ *
105
+ * @internal
106
+ */
107
+ interface MathInlineOptions {
108
+ /**
109
+ * The function to render the math inline.
110
+ */
111
+ render: RenderMathInline;
112
+ }
113
+ /**
114
+ * @internal
115
+ */
116
+ type MathInlineExtension = Union<[MathInlineSpecExtension]>;
117
+ /**
118
+ * Defines node `mathInline` and related functionalities.
119
+ *
120
+ * @param options
121
+ * @public
122
+ */
123
+ declare function defineMathInline(options: MathInlineOptions): MathInlineExtension;
124
+ //#endregion
125
+ //#region src/math/math-plugin.d.ts
126
+ declare function defineMathPlugin(): PlainExtension;
127
+ //#endregion
128
+ //#region src/math/math.d.ts
129
+ /**
130
+ * @public
131
+ */
132
+ type MathExtension = Union<[MathInlineExtension, MathBlockExtension]>;
133
+ /**
134
+ * Options for {@link defineMath}.
135
+ *
136
+ * @public
137
+ */
138
+ interface MathOptions {
139
+ /**
140
+ * The function to render the math block.
141
+ */
142
+ renderMathBlock: RenderMathBlock;
143
+ /**
144
+ * The function to render the math inline.
145
+ */
146
+ renderMathInline: RenderMathInline;
147
+ }
148
+ /**
149
+ * @public
150
+ */
151
+ declare function defineMath(options: MathOptions): MathExtension;
152
+ //#endregion
153
+ export { type MathBlockExtension, type MathBlockOptions, type MathBlockSpecExtension, type MathBlockViewOptions, type MathExtension, type MathInlineExtension, type MathInlineOptions, type MathInlineSpecExtension, type MathInlineViewOptions, type MathOptions, defineMath, defineMathBlock, defineMathBlockEnterRule, defineMathBlockSpec, defineMathBlockView, defineMathInline, defineMathInlineInputRule, defineMathInlineSpec, defineMathInlineView, defineMathPlugin };
154
+ //# sourceMappingURL=prosekit-extensions-math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prosekit-extensions-math.d.ts","names":[],"sources":["../src/math/math-block.ts","../src/math/math-inline.ts","../src/math/math-plugin.ts","../src/math/math.ts"],"mappings":";;;;;;;AASA;KAAY,sBAAA,GAAyB,SAAA;EACnC,KAAA;IACE,SAAA,EAAW,KAAA;EAAA;AAAA;;;;iBAOC,mBAAA,CAAA,GAAuB,sBAAA;AAAvC;;;;;AAAA,UAmBiB,oBAAA;EAAoB;;;EAInC,MAAA,EAAQ,eAAA;AAAA;;;;;;;iBASM,mBAAA,CAAA;EAAsB;AAAA,GAAU,oBAAA,GAAuB,SAAA;;;;iBAYvD,wBAAA,CAAA,GAA4B,cAAA;;;AAA5C;;;UASiB,gBAAA;EATyC;AAS1D;;EAIE,MAAA,EAAQ,eAAA;AAAA;;AAMV;;KAAY,kBAAA,GAAqB,KAAA,EAAO,sBAAA;;;AAQxC;;;;iBAAgB,eAAA,CAAgB,OAAA,EAAS,gBAAA,GAAmB,kBAAA;;;;;AAhF5D;KCAY,uBAAA,GAA0B,SAAA;EACpC,KAAA;IACE,UAAA,EAAY,KAAA;EAAA;AAAA;;;;iBAOA,oBAAA,CAAA,GAAwB,uBAAA;ADAxC;;;;;AAAA,UCYiB,qBAAA;EDOoB;;;ECHnC,MAAA,EAAQ,gBAAA;AAAA;;;;;;;iBASM,oBAAA,CAAA;EAAuB;AAAA,GAAU,qBAAA,GAAwB,SAAA;;;;iBAYzD,yBAAA,CAAA,GAA6B,cAAA;;;ADO7C;;;UCEiB,iBAAA;EDFyC;AAS1D;;ECHE,MAAA,EAAQ,gBAAA;AAAA;;ADaV;;KCPY,mBAAA,GAAsB,KAAA,EAAO,uBAAA;;;ADezC;;;;iBCPgB,gBAAA,CAAiB,OAAA,EAAS,iBAAA,GAAoB,mBAAA;;;iBC/E9C,gBAAA,CAAA,GAAoB,cAAA;;;;AFMpC;;KGCY,aAAA,GAAgB,KAAA,EAAO,mBAAA,EAAqB,kBAAA;;;;;;UAOvC,WAAA;EHNG;AAOpB;;EGGE,eAAA,EAAiB,eAAA;EHHoB;;AAmBvC;EGXE,gBAAA,EAAkB,gBAAA;AAAA;;;AHwBpB;iBGlBgB,UAAA,CAAW,OAAA,EAAS,WAAA,GAAc,aAAA"}
@@ -0,0 +1,108 @@
1
+ import { defineInputRule } from "./prosekit-extensions-input-rule.js";
2
+ import { defineEnterRule } from "./prosekit-extensions-enter-rule.js";
3
+ import { defineNodeSpec, defineNodeView, definePlugin, union } from "@prosekit/core";
4
+ import { createCursorInsidePlugin, createMathBlockView, createMathInlineInputRule, createMathInlineView, mathBlockEnterRule, mathBlockSpec, mathInlineSpec } from "prosemirror-math";
5
+
6
+ //#region src/math/math-block.ts
7
+ /**
8
+ * @internal
9
+ */
10
+ function defineMathBlockSpec() {
11
+ return defineNodeSpec({
12
+ ...mathBlockSpec,
13
+ attrs: { language: {
14
+ default: "tex",
15
+ validate: "string"
16
+ } },
17
+ name: "mathBlock"
18
+ });
19
+ }
20
+ /**
21
+ * Defines an extension that renders a math block using a custom node view.
22
+ *
23
+ * @param options
24
+ * @internal
25
+ */
26
+ function defineMathBlockView({ render }) {
27
+ return defineNodeView({
28
+ name: "mathBlock",
29
+ constructor: (node, view, getPos, decorations) => {
30
+ return createMathBlockView(render, node, decorations);
31
+ }
32
+ });
33
+ }
34
+ /**
35
+ * @internal
36
+ */
37
+ function defineMathBlockEnterRule() {
38
+ return defineEnterRule(mathBlockEnterRule);
39
+ }
40
+ /**
41
+ * Defines node `mathBlock` and related functionalities.
42
+ *
43
+ * @param options
44
+ * @public
45
+ */
46
+ function defineMathBlock(options) {
47
+ return union(defineMathBlockSpec(), defineMathBlockView(options), defineMathBlockEnterRule());
48
+ }
49
+
50
+ //#endregion
51
+ //#region src/math/math-inline.ts
52
+ /**
53
+ * @internal
54
+ */
55
+ function defineMathInlineSpec() {
56
+ return defineNodeSpec({
57
+ ...mathInlineSpec,
58
+ name: "mathInline"
59
+ });
60
+ }
61
+ /**
62
+ * Defines an extension that renders a math inline using a custom node view.
63
+ *
64
+ * @param options
65
+ * @internal
66
+ */
67
+ function defineMathInlineView({ render }) {
68
+ return defineNodeView({
69
+ name: "mathInline",
70
+ constructor: (node, view, getPos, decorations) => {
71
+ return createMathInlineView(render, node, decorations);
72
+ }
73
+ });
74
+ }
75
+ /**
76
+ * @internal
77
+ */
78
+ function defineMathInlineInputRule() {
79
+ return defineInputRule(createMathInlineInputRule("mathInline"));
80
+ }
81
+ /**
82
+ * Defines node `mathInline` and related functionalities.
83
+ *
84
+ * @param options
85
+ * @public
86
+ */
87
+ function defineMathInline(options) {
88
+ return union(defineMathInlineSpec(), defineMathInlineView(options), defineMathInlineInputRule());
89
+ }
90
+
91
+ //#endregion
92
+ //#region src/math/math-plugin.ts
93
+ function defineMathPlugin() {
94
+ return definePlugin(createCursorInsidePlugin());
95
+ }
96
+
97
+ //#endregion
98
+ //#region src/math/math.ts
99
+ /**
100
+ * @public
101
+ */
102
+ function defineMath(options) {
103
+ return union(defineMathBlock({ render: options.renderMathBlock }), defineMathInline({ render: options.renderMathInline }), defineMathPlugin());
104
+ }
105
+
106
+ //#endregion
107
+ export { defineMath, defineMathBlock, defineMathBlockEnterRule, defineMathBlockSpec, defineMathBlockView, defineMathInline, defineMathInlineInputRule, defineMathInlineSpec, defineMathInlineView, defineMathPlugin };
108
+ //# sourceMappingURL=prosekit-extensions-math.js.map