@milkdown/crepe 7.4.0 → 7.5.0

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 (430) hide show
  1. package/lib/cjs/{_view-TbSIR42F.js → _view-N32ied53.js} +2 -2
  2. package/lib/cjs/{_view-TbSIR42F.js.map → _view-N32ied53.js.map} +1 -1
  3. package/lib/cjs/clsx-dASsG01A.js +6 -0
  4. package/lib/cjs/clsx-dASsG01A.js.map +1 -0
  5. package/lib/cjs/{composed-offset-position.browser.min-FwypoGc1.js → floating-ui.dom-2cjBpir5.js} +14 -18
  6. package/lib/cjs/floating-ui.dom-2cjBpir5.js.map +1 -0
  7. package/lib/cjs/helper-1aludV1Z.js +15 -0
  8. package/lib/cjs/helper-1aludV1Z.js.map +1 -0
  9. package/lib/cjs/{index-tbEq3xma.js → index--sa4NMpW.js} +15 -14
  10. package/lib/cjs/{index-tbEq3xma.js.map → index--sa4NMpW.js.map} +1 -1
  11. package/lib/cjs/{index-5PcT4iSf.js → index--tnUmqZ_.js} +18 -17
  12. package/lib/cjs/{index-5PcT4iSf.js.map → index--tnUmqZ_.js.map} +1 -1
  13. package/lib/cjs/{index-i0_v2uVp.js → index-1vHyMXH8.js} +15 -14
  14. package/lib/{esm/index-4QzlLVWs.js.map → cjs/index-1vHyMXH8.js.map} +1 -1
  15. package/lib/cjs/index-28q261C7.js +448 -0
  16. package/lib/cjs/index-28q261C7.js.map +1 -0
  17. package/lib/cjs/{index-mJ47ZWO2.js → index-55VIM-52.js} +18 -17
  18. package/lib/{esm/index-Grquo08f.js.map → cjs/index-55VIM-52.js.map} +1 -1
  19. package/lib/cjs/{index-lrFGGa_l.js → index-92bwto5V.js} +15 -14
  20. package/lib/cjs/{index-lrFGGa_l.js.map → index-92bwto5V.js.map} +1 -1
  21. package/lib/cjs/{index-2oxl5Zo4.js → index-Buu2tD9O.js} +45 -62
  22. package/lib/cjs/index-Buu2tD9O.js.map +1 -0
  23. package/lib/cjs/{index-OA_u95ey.js → index-E4Ist86Z.js} +15 -14
  24. package/lib/{esm/index-7BVeXLQZ.js.map → cjs/index-E4Ist86Z.js.map} +1 -1
  25. package/lib/cjs/{index-OIQn1x0L.js → index-FbNqlZU8.js} +14 -13
  26. package/lib/cjs/index-FbNqlZU8.js.map +1 -0
  27. package/lib/cjs/{index-SxWWV8XD.js → index-HH5lPgpj.js} +18 -17
  28. package/lib/cjs/{index-SxWWV8XD.js.map → index-HH5lPgpj.js.map} +1 -1
  29. package/lib/cjs/{index-vlxA_KJ8.js → index-J1-yHn7v.js} +15 -14
  30. package/lib/{esm/index-vwrMVELn.js.map → cjs/index-J1-yHn7v.js.map} +1 -1
  31. package/lib/cjs/{index-xqKfEyRA.js → index-J3XY9IPt.js} +12 -7
  32. package/lib/cjs/index-J3XY9IPt.js.map +1 -0
  33. package/lib/cjs/{index-llNS_EuP.js → index-Jztk6JlP.js} +58 -55
  34. package/lib/cjs/index-Jztk6JlP.js.map +1 -0
  35. package/lib/cjs/{index-O3vRXWIP.js → index-N6pPZY61.js} +22 -30
  36. package/lib/cjs/index-N6pPZY61.js.map +1 -0
  37. package/lib/cjs/{index-GKolgvC5.js → index-TUJs6KKL.js} +35 -68
  38. package/lib/cjs/index-TUJs6KKL.js.map +1 -0
  39. package/lib/cjs/{index-OtaMLv5l.js → index-Tjg8KyK7.js} +15 -14
  40. package/lib/cjs/{index-OtaMLv5l.js.map → index-Tjg8KyK7.js.map} +1 -1
  41. package/lib/cjs/{index-qRg5-QJH.js → index-VYwHTL3F.js} +16 -15
  42. package/lib/cjs/{index-qRg5-QJH.js.map → index-VYwHTL3F.js.map} +1 -1
  43. package/lib/cjs/index-_GOdKqUK.js +1147 -0
  44. package/lib/cjs/index-_GOdKqUK.js.map +1 -0
  45. package/lib/cjs/{index-PF7s7DOo.js → index-cKQcw-eu.js} +2 -2
  46. package/lib/cjs/{index-PF7s7DOo.js.map → index-cKQcw-eu.js.map} +1 -1
  47. package/lib/cjs/{index-fkT0ywfA.js → index-c_OzudR7.js} +15 -14
  48. package/lib/{esm/index-L7VXk-jT.js.map → cjs/index-c_OzudR7.js.map} +1 -1
  49. package/lib/cjs/{index-TEjdwq--.js → index-cb-5m0vG.js} +18 -17
  50. package/lib/cjs/index-cb-5m0vG.js.map +1 -0
  51. package/lib/cjs/index-cpC-j5Nt.js +176 -0
  52. package/lib/cjs/index-cpC-j5Nt.js.map +1 -0
  53. package/lib/cjs/index-crv_k6dv.js +1353 -0
  54. package/lib/cjs/index-crv_k6dv.js.map +1 -0
  55. package/lib/cjs/{index-78P4PeZ9.js → index-jlfsu92T.js} +16 -15
  56. package/lib/{esm/index-4oMdufW4.js.map → cjs/index-jlfsu92T.js.map} +1 -1
  57. package/lib/cjs/{index-de3dfsQr.js → index-jn036wuh.js} +17 -16
  58. package/lib/{esm/index-rwcSpYkt.js.map → cjs/index-jn036wuh.js.map} +1 -1
  59. package/lib/cjs/{index-JAqL0ybh.js → index-kqz-P6o6.js} +9 -9
  60. package/lib/cjs/index-kqz-P6o6.js.map +1 -0
  61. package/lib/cjs/{index-t_GA5F26.js → index-lBumFRUQ.js} +15 -14
  62. package/lib/cjs/{index-t_GA5F26.js.map → index-lBumFRUQ.js.map} +1 -1
  63. package/lib/cjs/{index-LdEYPSZc.js → index-lUNj3xuC.js} +15 -14
  64. package/lib/{esm/index-0khVa44f.js.map → cjs/index-lUNj3xuC.js.map} +1 -1
  65. package/lib/cjs/{index-ortUqbAp.js → index-mcxgNBq9.js} +15 -14
  66. package/lib/cjs/{index-ortUqbAp.js.map → index-mcxgNBq9.js.map} +1 -1
  67. package/lib/cjs/{index-GEIgbcVc.js → index-nTfDKYYi.js} +38 -37
  68. package/lib/{esm/index-NmjiRA0M.js.map → cjs/index-nTfDKYYi.js.map} +1 -1
  69. package/lib/cjs/{index-kNI3S3lF.js → index-tBw4NmwY.js} +11779 -404
  70. package/lib/cjs/index-tBw4NmwY.js.map +1 -0
  71. package/lib/cjs/{index-zBr61zy6.js → index-vfzLCXfi.js} +15 -14
  72. package/lib/cjs/{index-zBr61zy6.js.map → index-vfzLCXfi.js.map} +1 -1
  73. package/lib/cjs/{index-w9buMrFW.js → index-von4W2LG.js} +18 -17
  74. package/lib/cjs/{index-w9buMrFW.js.map → index-von4W2LG.js.map} +1 -1
  75. package/lib/cjs/index-z6pe2alg.js.map +1 -1
  76. package/lib/cjs/{index-wXLifZgm.js → index-zXSAHvAj.js} +2 -2
  77. package/lib/cjs/{index-wXLifZgm.js.map → index-zXSAHvAj.js.map} +1 -1
  78. package/lib/cjs/index.js +7 -6
  79. package/lib/cjs/index.js.map +1 -1
  80. package/lib/cjs/{schema-7d3meDfB.js → schema-RVrwDDcq.js} +4 -4
  81. package/lib/cjs/{schema-7d3meDfB.js.map → schema-RVrwDDcq.js.map} +1 -1
  82. package/lib/cjs/todoList-Ze4FLMlx.js +415 -0
  83. package/lib/cjs/todoList-Ze4FLMlx.js.map +1 -0
  84. package/lib/cjs/{tooltip-plugin-Mk9fRTxI.js → tooltip-plugin--lhebztC.js} +15 -24
  85. package/lib/cjs/tooltip-plugin--lhebztC.js.map +1 -0
  86. package/lib/esm/{_view-JjtfhQ8k.js → _view-IlZC8FA6.js} +2 -2
  87. package/lib/esm/{_view-JjtfhQ8k.js.map → _view-IlZC8FA6.js.map} +1 -1
  88. package/lib/esm/clsx-RxCLxYpD.js +4 -0
  89. package/lib/esm/clsx-RxCLxYpD.js.map +1 -0
  90. package/lib/esm/{composed-offset-position.browser.min-Tnm31e-m.js → floating-ui.dom-CAYjY8Gv.js} +15 -17
  91. package/lib/esm/floating-ui.dom-CAYjY8Gv.js.map +1 -0
  92. package/lib/esm/helper-wZAtC67x.js +13 -0
  93. package/lib/esm/helper-wZAtC67x.js.map +1 -0
  94. package/lib/esm/{index-Bg5GFp0g.js → index-0-j8Icms.js} +2 -2
  95. package/lib/esm/{index-Bg5GFp0g.js.map → index-0-j8Icms.js.map} +1 -1
  96. package/lib/esm/{index-4oMdufW4.js → index-1l-61HI-.js} +16 -15
  97. package/lib/{cjs/index-78P4PeZ9.js.map → esm/index-1l-61HI-.js.map} +1 -1
  98. package/lib/esm/{index-bVubJ6Rv.js → index-3HeWs5rX.js} +18 -17
  99. package/lib/esm/{index-bVubJ6Rv.js.map → index-3HeWs5rX.js.map} +1 -1
  100. package/lib/esm/{index-6P9Xk934.js → index-3bDzhU6z.js} +15 -14
  101. package/lib/esm/{index-6P9Xk934.js.map → index-3bDzhU6z.js.map} +1 -1
  102. package/lib/esm/{index-NmjiRA0M.js → index-6GrVnloh.js} +38 -37
  103. package/lib/{cjs/index-GEIgbcVc.js.map → esm/index-6GrVnloh.js.map} +1 -1
  104. package/lib/esm/index-8QJbxTYk.js +1145 -0
  105. package/lib/esm/index-8QJbxTYk.js.map +1 -0
  106. package/lib/esm/{index-218OjRxG.js → index-9w_hdnvb.js} +39 -56
  107. package/lib/esm/index-9w_hdnvb.js.map +1 -0
  108. package/lib/esm/index-A83StUe6.js +174 -0
  109. package/lib/esm/index-A83StUe6.js.map +1 -0
  110. package/lib/esm/{index-TNMG6UrN.js → index-AOoFzBaK.js} +9 -9
  111. package/lib/esm/index-AOoFzBaK.js.map +1 -0
  112. package/lib/esm/{index-L7VXk-jT.js → index-DS7Z4Ach.js} +15 -14
  113. package/lib/{cjs/index-fkT0ywfA.js.map → esm/index-DS7Z4Ach.js.map} +1 -1
  114. package/lib/esm/index-Jvxff1vU.js.map +1 -1
  115. package/lib/esm/{index-JkHHp3K-.js → index-LAdX6LsO.js} +11712 -352
  116. package/lib/esm/index-LAdX6LsO.js.map +1 -0
  117. package/lib/esm/{index-VyZguCIt.js → index-MB6wQe1U.js} +12 -7
  118. package/lib/esm/index-MB6wQe1U.js.map +1 -0
  119. package/lib/esm/{index-vwrMVELn.js → index-MxgqkRtj.js} +15 -14
  120. package/lib/{cjs/index-vlxA_KJ8.js.map → esm/index-MxgqkRtj.js.map} +1 -1
  121. package/lib/esm/{index-hQaRWeq1.js → index-NZ5-xr5_.js} +18 -17
  122. package/lib/esm/{index-hQaRWeq1.js.map → index-NZ5-xr5_.js.map} +1 -1
  123. package/lib/esm/{index-x-zW6gKj.js → index-OpUb5xP6.js} +2 -2
  124. package/lib/esm/{index-x-zW6gKj.js.map → index-OpUb5xP6.js.map} +1 -1
  125. package/lib/esm/{index-oMy83ynO.js → index-SDPCpsD5.js} +15 -14
  126. package/lib/esm/{index-oMy83ynO.js.map → index-SDPCpsD5.js.map} +1 -1
  127. package/lib/esm/{index-bsED907r.js → index-VP76m4nW.js} +16 -15
  128. package/lib/esm/{index-bsED907r.js.map → index-VP76m4nW.js.map} +1 -1
  129. package/lib/esm/{index-PkBZpDL4.js → index-Vl0W0S3h.js} +14 -13
  130. package/lib/esm/index-Vl0W0S3h.js.map +1 -0
  131. package/lib/esm/{index-rwcSpYkt.js → index-VoX_n1l_.js} +17 -16
  132. package/lib/{cjs/index-de3dfsQr.js.map → esm/index-VoX_n1l_.js.map} +1 -1
  133. package/lib/esm/{index-7BVeXLQZ.js → index-XH7OnwZl.js} +15 -14
  134. package/lib/{cjs/index-OA_u95ey.js.map → esm/index-XH7OnwZl.js.map} +1 -1
  135. package/lib/esm/{index-a-SAfeeT.js → index-Yuj7sNhQ.js} +18 -17
  136. package/lib/esm/{index-a-SAfeeT.js.map → index-Yuj7sNhQ.js.map} +1 -1
  137. package/lib/esm/{index-A9zdyi2L.js → index-_4fWmRbN.js} +15 -14
  138. package/lib/esm/{index-A9zdyi2L.js.map → index-_4fWmRbN.js.map} +1 -1
  139. package/lib/esm/{index-Grquo08f.js → index-bexsWrgs.js} +18 -17
  140. package/lib/{cjs/index-mJ47ZWO2.js.map → esm/index-bexsWrgs.js.map} +1 -1
  141. package/lib/esm/{index-pHsvfB_I.js → index-chrnjY1D.js} +29 -62
  142. package/lib/esm/index-chrnjY1D.js.map +1 -0
  143. package/lib/esm/{index-UBeneu17.js → index-eqd5wtjX.js} +15 -14
  144. package/lib/esm/{index-UBeneu17.js.map → index-eqd5wtjX.js.map} +1 -1
  145. package/lib/esm/{index-4QzlLVWs.js → index-g_3dzLYU.js} +15 -14
  146. package/lib/{cjs/index-i0_v2uVp.js.map → esm/index-g_3dzLYU.js.map} +1 -1
  147. package/lib/esm/{index-0khVa44f.js → index-grT-Kuf2.js} +15 -14
  148. package/lib/{cjs/index-LdEYPSZc.js.map → esm/index-grT-Kuf2.js.map} +1 -1
  149. package/lib/esm/{index-AHPvVH4H.js → index-hF04phbf.js} +20 -28
  150. package/lib/esm/index-hF04phbf.js.map +1 -0
  151. package/lib/esm/{index-q-qE7-96.js → index-i79QMXpJ.js} +55 -52
  152. package/lib/esm/index-i79QMXpJ.js.map +1 -0
  153. package/lib/esm/{index-DoEghZHy.js → index-rvOBAXap.js} +18 -17
  154. package/lib/{cjs/index-TEjdwq--.js.map → esm/index-rvOBAXap.js.map} +1 -1
  155. package/lib/esm/index-uP9BKsTM.js +446 -0
  156. package/lib/esm/index-uP9BKsTM.js.map +1 -0
  157. package/lib/esm/index-ueQQMSgm.js +1351 -0
  158. package/lib/esm/index-ueQQMSgm.js.map +1 -0
  159. package/lib/esm/{index-U71v7KdA.js → index-x8SyiPMC.js} +15 -14
  160. package/lib/esm/{index-U71v7KdA.js.map → index-x8SyiPMC.js.map} +1 -1
  161. package/lib/esm/{index-U8q-F7hU.js → index-zrQXXSXm.js} +15 -14
  162. package/lib/esm/{index-U8q-F7hU.js.map → index-zrQXXSXm.js.map} +1 -1
  163. package/lib/esm/index.js +7 -6
  164. package/lib/esm/index.js.map +1 -1
  165. package/lib/esm/{schema-hVsy-vme.js → schema-JWJqD9qa.js} +3 -3
  166. package/lib/esm/{schema-hVsy-vme.js.map → schema-JWJqD9qa.js.map} +1 -1
  167. package/lib/esm/todoList-M-PGJKde.js +378 -0
  168. package/lib/esm/todoList-M-PGJKde.js.map +1 -0
  169. package/lib/esm/{tooltip-plugin-vZefVSGL.js → tooltip-plugin-iw2EQWIG.js} +10 -19
  170. package/lib/esm/tooltip-plugin-iw2EQWIG.js.map +1 -0
  171. package/lib/theme/_internal/classic-common.css +3 -2
  172. package/lib/theme/common/block-edit.css +3 -1
  173. package/lib/theme/common/code-mirror.css +15 -0
  174. package/lib/theme/common/cursor.css +1 -1
  175. package/lib/theme/common/image-block.css +2 -0
  176. package/lib/theme/common/link-tooltip.css +10 -13
  177. package/lib/theme/common/list-item.css +16 -1
  178. package/lib/theme/common/prosemirror.css +1 -1
  179. package/lib/theme/common/style.css +1 -0
  180. package/lib/theme/common/table.css +217 -0
  181. package/lib/theme/common/toolbar.css +11 -4
  182. package/lib/theme/{classic-dark → crepe-dark}/style.css +2 -2
  183. package/lib/theme/frame/style.css +28 -0
  184. package/lib/theme/frame-dark/style.css +28 -0
  185. package/lib/theme/nord/style.css +28 -0
  186. package/lib/theme/nord-dark/style.css +28 -0
  187. package/lib/types/core/crepe.d.ts +5 -3
  188. package/lib/types/core/crepe.d.ts.map +1 -1
  189. package/lib/types/core/slice.d.ts +2 -2
  190. package/lib/types/core/slice.d.ts.map +1 -1
  191. package/lib/types/feature/block-edit/handle/component.d.ts +3 -0
  192. package/lib/types/feature/block-edit/handle/component.d.ts.map +1 -1
  193. package/lib/types/feature/block-edit/handle/index.d.ts +5 -4
  194. package/lib/types/feature/block-edit/handle/index.d.ts.map +1 -1
  195. package/lib/types/feature/block-edit/index.d.ts +43 -2
  196. package/lib/types/feature/block-edit/index.d.ts.map +1 -1
  197. package/lib/types/feature/block-edit/menu/component.d.ts +3 -1
  198. package/lib/types/feature/block-edit/menu/component.d.ts.map +1 -1
  199. package/lib/types/feature/block-edit/menu/config.d.ts +3 -12
  200. package/lib/types/feature/block-edit/menu/config.d.ts.map +1 -1
  201. package/lib/types/feature/block-edit/menu/group-builder.d.ts +29 -0
  202. package/lib/types/feature/block-edit/menu/group-builder.d.ts.map +1 -0
  203. package/lib/types/feature/block-edit/menu/index.d.ts +5 -4
  204. package/lib/types/feature/block-edit/menu/index.d.ts.map +1 -1
  205. package/lib/types/feature/block-edit/menu/utils.d.ts +28 -0
  206. package/lib/types/feature/block-edit/menu/utils.d.ts.map +1 -0
  207. package/lib/types/feature/code-mirror/index.d.ts +9 -1
  208. package/lib/types/feature/code-mirror/index.d.ts.map +1 -1
  209. package/lib/types/feature/cursor/index.d.ts +1 -1
  210. package/lib/types/feature/cursor/index.d.ts.map +1 -1
  211. package/lib/types/feature/image-block/index.d.ts +19 -2
  212. package/lib/types/feature/image-block/index.d.ts.map +1 -1
  213. package/lib/types/feature/index.d.ts +17 -2
  214. package/lib/types/feature/index.d.ts.map +1 -1
  215. package/lib/types/feature/link-tooltip/index.d.ts +12 -2
  216. package/lib/types/feature/link-tooltip/index.d.ts.map +1 -1
  217. package/lib/types/feature/list-item/index.d.ts +8 -2
  218. package/lib/types/feature/list-item/index.d.ts.map +1 -1
  219. package/lib/types/feature/placeholder/index.d.ts +2 -2
  220. package/lib/types/feature/placeholder/index.d.ts.map +1 -1
  221. package/lib/types/feature/shared.d.ts +3 -1
  222. package/lib/types/feature/shared.d.ts.map +1 -1
  223. package/lib/types/feature/table/index.d.ts +16 -0
  224. package/lib/types/feature/table/index.d.ts.map +1 -0
  225. package/lib/types/feature/toolbar/component.d.ts +3 -1
  226. package/lib/types/feature/toolbar/component.d.ts.map +1 -1
  227. package/lib/types/feature/toolbar/index.d.ts +11 -2
  228. package/lib/types/feature/toolbar/index.d.ts.map +1 -1
  229. package/lib/types/icons/alignCenter.d.ts +2 -0
  230. package/lib/types/icons/alignCenter.d.ts.map +1 -0
  231. package/lib/types/icons/alignLeft.d.ts +2 -0
  232. package/lib/types/icons/alignLeft.d.ts.map +1 -0
  233. package/lib/types/icons/alignRight.d.ts +2 -0
  234. package/lib/types/icons/alignRight.d.ts.map +1 -0
  235. package/lib/types/icons/bold.d.ts +2 -0
  236. package/lib/types/icons/bold.d.ts.map +1 -0
  237. package/lib/types/{feature/list-item/consts.d.ts → icons/bullet.d.ts} +1 -1
  238. package/lib/types/icons/bullet.d.ts.map +1 -0
  239. package/lib/types/icons/bulletList.d.ts +2 -0
  240. package/lib/types/icons/bulletList.d.ts.map +1 -0
  241. package/lib/types/icons/caption.d.ts +2 -0
  242. package/lib/types/icons/caption.d.ts.map +1 -0
  243. package/lib/types/icons/checkBoxChecked.d.ts +2 -0
  244. package/lib/types/icons/checkBoxChecked.d.ts.map +1 -0
  245. package/lib/types/icons/checkBoxUnchecked.d.ts +2 -0
  246. package/lib/types/icons/checkBoxUnchecked.d.ts.map +1 -0
  247. package/lib/types/icons/chevronDown.d.ts +2 -0
  248. package/lib/types/icons/chevronDown.d.ts.map +1 -0
  249. package/lib/types/icons/clear.d.ts +2 -0
  250. package/lib/types/icons/clear.d.ts.map +1 -0
  251. package/lib/types/icons/code.d.ts +2 -0
  252. package/lib/types/icons/code.d.ts.map +1 -0
  253. package/lib/types/icons/confirm.d.ts +2 -0
  254. package/lib/types/icons/confirm.d.ts.map +1 -0
  255. package/lib/types/icons/divider.d.ts +2 -0
  256. package/lib/types/icons/divider.d.ts.map +1 -0
  257. package/lib/types/icons/dragHandle.d.ts +2 -0
  258. package/lib/types/icons/dragHandle.d.ts.map +1 -0
  259. package/lib/types/icons/edit.d.ts +2 -0
  260. package/lib/types/icons/edit.d.ts.map +1 -0
  261. package/lib/types/icons/h1.d.ts +2 -0
  262. package/lib/types/icons/h1.d.ts.map +1 -0
  263. package/lib/types/icons/h2.d.ts +2 -0
  264. package/lib/types/icons/h2.d.ts.map +1 -0
  265. package/lib/types/icons/h3.d.ts +2 -0
  266. package/lib/types/icons/h3.d.ts.map +1 -0
  267. package/lib/types/icons/h4.d.ts +2 -0
  268. package/lib/types/icons/h4.d.ts.map +1 -0
  269. package/lib/types/icons/h5.d.ts +2 -0
  270. package/lib/types/icons/h5.d.ts.map +1 -0
  271. package/lib/types/icons/h6.d.ts +2 -0
  272. package/lib/types/icons/h6.d.ts.map +1 -0
  273. package/lib/types/icons/image.d.ts +2 -0
  274. package/lib/types/icons/image.d.ts.map +1 -0
  275. package/lib/types/icons/index.d.ts +36 -0
  276. package/lib/types/icons/index.d.ts.map +1 -0
  277. package/lib/types/icons/italic.d.ts +2 -0
  278. package/lib/types/icons/italic.d.ts.map +1 -0
  279. package/lib/types/icons/link.d.ts +2 -0
  280. package/lib/types/icons/link.d.ts.map +1 -0
  281. package/lib/types/icons/menu.d.ts +2 -0
  282. package/lib/types/icons/menu.d.ts.map +1 -0
  283. package/lib/types/icons/orderedList.d.ts +2 -0
  284. package/lib/types/icons/orderedList.d.ts.map +1 -0
  285. package/lib/types/icons/plus.d.ts +2 -0
  286. package/lib/types/icons/plus.d.ts.map +1 -0
  287. package/lib/types/icons/quote.d.ts +2 -0
  288. package/lib/types/icons/quote.d.ts.map +1 -0
  289. package/lib/types/icons/remove.d.ts +2 -0
  290. package/lib/types/icons/remove.d.ts.map +1 -0
  291. package/lib/types/icons/search.d.ts +2 -0
  292. package/lib/types/icons/search.d.ts.map +1 -0
  293. package/lib/types/icons/strikethrough.d.ts +2 -0
  294. package/lib/types/icons/strikethrough.d.ts.map +1 -0
  295. package/lib/types/icons/table.d.ts +2 -0
  296. package/lib/types/icons/table.d.ts.map +1 -0
  297. package/lib/types/icons/text.d.ts +2 -0
  298. package/lib/types/icons/text.d.ts.map +1 -0
  299. package/lib/types/icons/todoList.d.ts +2 -0
  300. package/lib/types/icons/todoList.d.ts.map +1 -0
  301. package/lib/types/utils/index.d.ts +1 -1
  302. package/lib/types/utils/index.d.ts.map +1 -1
  303. package/package.json +9 -23
  304. package/src/core/crepe.ts +15 -9
  305. package/src/core/slice.ts +2 -2
  306. package/src/feature/block-edit/handle/component.ts +13 -29
  307. package/src/feature/block-edit/handle/index.ts +16 -17
  308. package/src/feature/block-edit/index.ts +50 -5
  309. package/src/feature/block-edit/menu/component.ts +6 -7
  310. package/src/feature/block-edit/menu/config.ts +203 -274
  311. package/src/feature/block-edit/menu/group-builder.ts +50 -0
  312. package/src/feature/block-edit/menu/index.ts +11 -8
  313. package/src/feature/block-edit/menu/utils.ts +89 -0
  314. package/src/feature/code-mirror/index.ts +27 -19
  315. package/src/feature/cursor/index.ts +3 -4
  316. package/src/feature/image-block/index.ts +34 -41
  317. package/src/feature/index.ts +23 -3
  318. package/src/feature/link-tooltip/index.ts +23 -10
  319. package/src/feature/list-item/index.ts +21 -9
  320. package/src/feature/placeholder/index.ts +11 -6
  321. package/src/feature/shared.ts +4 -1
  322. package/src/feature/table/index.ts +54 -0
  323. package/src/feature/toolbar/component.ts +29 -11
  324. package/src/feature/toolbar/index.ts +21 -9
  325. package/src/icons/alignCenter.ts +7 -0
  326. package/src/icons/alignLeft.ts +7 -0
  327. package/src/icons/alignRight.ts +7 -0
  328. package/src/icons/bold.ts +7 -0
  329. package/src/{feature/list-item/consts.ts → icons/bullet.ts} +3 -3
  330. package/src/icons/bulletList.ts +14 -0
  331. package/src/icons/caption.ts +7 -0
  332. package/src/icons/checkBoxChecked.ts +14 -0
  333. package/src/icons/checkBoxUnchecked.ts +14 -0
  334. package/src/icons/chevronDown.ts +7 -0
  335. package/src/icons/clear.ts +14 -0
  336. package/src/icons/code.ts +14 -0
  337. package/src/icons/confirm.ts +14 -0
  338. package/src/icons/divider.ts +14 -0
  339. package/src/icons/dragHandle.ts +7 -0
  340. package/src/icons/edit.ts +14 -0
  341. package/src/icons/h1.ts +14 -0
  342. package/src/icons/h2.ts +14 -0
  343. package/src/icons/h3.ts +14 -0
  344. package/src/icons/h4.ts +14 -0
  345. package/src/icons/h5.ts +14 -0
  346. package/src/icons/h6.ts +14 -0
  347. package/src/icons/image.ts +14 -0
  348. package/src/icons/index.ts +35 -0
  349. package/src/icons/italic.ts +7 -0
  350. package/src/icons/link.ts +7 -0
  351. package/src/icons/menu.ts +14 -0
  352. package/src/icons/orderedList.ts +14 -0
  353. package/src/icons/plus.ts +14 -0
  354. package/src/icons/quote.ts +14 -0
  355. package/src/icons/remove.ts +7 -0
  356. package/src/icons/search.ts +7 -0
  357. package/src/icons/strikethrough.ts +7 -0
  358. package/src/icons/table.ts +14 -0
  359. package/src/icons/text.ts +14 -0
  360. package/src/icons/todoList.ts +7 -0
  361. package/src/theme/_internal/classic-common.css +3 -2
  362. package/src/theme/common/block-edit.css +3 -1
  363. package/src/theme/common/code-mirror.css +13 -0
  364. package/src/theme/common/cursor.css +1 -1
  365. package/src/theme/common/image-block.css +2 -0
  366. package/src/theme/common/link-tooltip.css +11 -14
  367. package/src/theme/common/list-item.css +9 -0
  368. package/src/theme/common/prosemirror.css +1 -1
  369. package/src/theme/common/style.css +1 -0
  370. package/src/theme/common/table.css +204 -0
  371. package/src/theme/common/toolbar.css +14 -4
  372. package/src/theme/{classic-dark → crepe-dark}/style.css +2 -2
  373. package/src/theme/frame/style.css +28 -0
  374. package/src/theme/frame-dark/style.css +28 -0
  375. package/src/theme/nord/style.css +28 -0
  376. package/src/theme/nord-dark/style.css +28 -0
  377. package/src/utils/index.ts +1 -1
  378. package/lib/cjs/clsx-7JLENl8W.js +0 -62
  379. package/lib/cjs/clsx-7JLENl8W.js.map +0 -1
  380. package/lib/cjs/composed-offset-position.browser.min-FwypoGc1.js.map +0 -1
  381. package/lib/cjs/helper-OEW-2Vxr.js +0 -9
  382. package/lib/cjs/helper-OEW-2Vxr.js.map +0 -1
  383. package/lib/cjs/index-2oxl5Zo4.js.map +0 -1
  384. package/lib/cjs/index-GKolgvC5.js.map +0 -1
  385. package/lib/cjs/index-JAqL0ybh.js.map +0 -1
  386. package/lib/cjs/index-Ne_pk53w.js +0 -178
  387. package/lib/cjs/index-Ne_pk53w.js.map +0 -1
  388. package/lib/cjs/index-O3vRXWIP.js.map +0 -1
  389. package/lib/cjs/index-OIQn1x0L.js.map +0 -1
  390. package/lib/cjs/index-kNI3S3lF.js.map +0 -1
  391. package/lib/cjs/index-kvO8ReCY.js +0 -1960
  392. package/lib/cjs/index-kvO8ReCY.js.map +0 -1
  393. package/lib/cjs/index-llNS_EuP.js.map +0 -1
  394. package/lib/cjs/index-xqKfEyRA.js.map +0 -1
  395. package/lib/cjs/meta-q8q9fHyr.js +0 -14
  396. package/lib/cjs/meta-q8q9fHyr.js.map +0 -1
  397. package/lib/cjs/tooltip-plugin-Mk9fRTxI.js.map +0 -1
  398. package/lib/esm/clsx-R7WFaNKL.js +0 -52
  399. package/lib/esm/clsx-R7WFaNKL.js.map +0 -1
  400. package/lib/esm/composed-offset-position.browser.min-Tnm31e-m.js.map +0 -1
  401. package/lib/esm/helper-iYEjPbOY.js +0 -7
  402. package/lib/esm/helper-iYEjPbOY.js.map +0 -1
  403. package/lib/esm/index-218OjRxG.js.map +0 -1
  404. package/lib/esm/index-AHPvVH4H.js.map +0 -1
  405. package/lib/esm/index-DoEghZHy.js.map +0 -1
  406. package/lib/esm/index-JkHHp3K-.js.map +0 -1
  407. package/lib/esm/index-PkBZpDL4.js.map +0 -1
  408. package/lib/esm/index-TNMG6UrN.js.map +0 -1
  409. package/lib/esm/index-VyZguCIt.js.map +0 -1
  410. package/lib/esm/index-h1arGiXv.js +0 -1958
  411. package/lib/esm/index-h1arGiXv.js.map +0 -1
  412. package/lib/esm/index-pHsvfB_I.js.map +0 -1
  413. package/lib/esm/index-q-qE7-96.js.map +0 -1
  414. package/lib/esm/index-u8tWJbca.js +0 -176
  415. package/lib/esm/index-u8tWJbca.js.map +0 -1
  416. package/lib/esm/meta-3ZYGAGrY.js +0 -12
  417. package/lib/esm/meta-3ZYGAGrY.js.map +0 -1
  418. package/lib/esm/tooltip-plugin-vZefVSGL.js.map +0 -1
  419. package/lib/types/feature/block-edit/menu/icons.d.ts +0 -14
  420. package/lib/types/feature/block-edit/menu/icons.d.ts.map +0 -1
  421. package/lib/types/feature/link-tooltip/consts.d.ts +0 -5
  422. package/lib/types/feature/link-tooltip/consts.d.ts.map +0 -1
  423. package/lib/types/feature/list-item/consts.d.ts.map +0 -1
  424. package/lib/types/feature/toolbar/consts.d.ts +0 -5
  425. package/lib/types/feature/toolbar/consts.d.ts.map +0 -1
  426. package/src/feature/block-edit/menu/icons.ts +0 -170
  427. package/src/feature/link-tooltip/consts.ts +0 -46
  428. package/src/feature/toolbar/consts.ts +0 -25
  429. /package/lib/theme/{classic → crepe}/style.css +0 -0
  430. /package/src/theme/{classic → crepe}/style.css +0 -0
@@ -0,0 +1,1353 @@
1
+ 'use strict';
2
+
3
+ var index$3 = require('./index-z6pe2alg.js');
4
+ var atomico = require('atomico');
5
+ var todoList = require('./todoList-Ze4FLMlx.js');
6
+ var transform = require('@milkdown/prose/transform');
7
+ var schema = require('./schema-RVrwDDcq.js');
8
+ var index = require('./index-tBw4NmwY.js');
9
+ var state = require('@milkdown/prose/state');
10
+ var prose = require('@milkdown/prose');
11
+ var index$2 = require('./index-cKQcw-eu.js');
12
+ var floatingUi_dom = require('./floating-ui.dom-2cjBpir5.js');
13
+ var index$1 = require('./index-28q261C7.js');
14
+ var model = require('@milkdown/prose/model');
15
+ require('@milkdown/prose/commands');
16
+ require('@milkdown/prose/inputrules');
17
+ require('@milkdown/prose/keymap');
18
+ require('@milkdown/prose/view');
19
+ require('@milkdown/prose/schema-list');
20
+ require('@milkdown/prose/history');
21
+ require('@milkdown/prose/tables');
22
+
23
+ function withMeta(plugin, meta) {
24
+ Object.assign(plugin, {
25
+ meta: {
26
+ package: "@milkdown/plugin-block",
27
+ ...meta
28
+ }
29
+ });
30
+ return plugin;
31
+ }
32
+
33
+ const defaultNodeFilter = (pos) => {
34
+ const table = prose.findParent((node) => node.type.name === "table")(pos);
35
+ if (table)
36
+ return false;
37
+ return true;
38
+ };
39
+ const blockConfig = index.$ctx({ filterNodes: defaultNodeFilter }, "blockConfig");
40
+ withMeta(blockConfig, {
41
+ displayName: "Ctx<blockConfig>"
42
+ });
43
+
44
+ function selectRootNodeByDom(view, coords, filterNodes) {
45
+ var _a;
46
+ const root = view.dom.parentElement;
47
+ if (!root)
48
+ return null;
49
+ const pos = (_a = view.posAtCoords({
50
+ left: coords.x,
51
+ top: coords.y
52
+ })) == null ? void 0 : _a.inside;
53
+ if (pos == null || pos < 0)
54
+ return null;
55
+ let $pos = view.state.doc.resolve(pos);
56
+ let node = view.state.doc.nodeAt(pos);
57
+ let element = view.nodeDOM(pos);
58
+ const filter = (needLookup) => {
59
+ const checkDepth = $pos.depth >= 1 && $pos.index($pos.depth) === 0;
60
+ const shouldLookUp = needLookup || checkDepth;
61
+ if (!shouldLookUp)
62
+ return;
63
+ const ancestorPos = $pos.before($pos.depth);
64
+ node = view.state.doc.nodeAt(ancestorPos);
65
+ element = view.nodeDOM(ancestorPos);
66
+ $pos = view.state.doc.resolve(ancestorPos);
67
+ if (!filterNodes($pos, node))
68
+ filter(true);
69
+ };
70
+ const filterResult = filterNodes($pos, node);
71
+ filter(!filterResult);
72
+ if (!element || !node)
73
+ return null;
74
+ return { node, $pos, el: element };
75
+ }
76
+
77
+ let _detachedDoc = null;
78
+ function detachedDoc() {
79
+ return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument("title"));
80
+ }
81
+ const wrapMap = {
82
+ thead: ["table"],
83
+ tbody: ["table"],
84
+ tfoot: ["table"],
85
+ caption: ["table"],
86
+ colgroup: ["table"],
87
+ col: ["table", "colgroup"],
88
+ tr: ["table", "tbody"],
89
+ td: ["table", "tbody", "tr"],
90
+ th: ["table", "tbody", "tr"]
91
+ };
92
+ function serializeForClipboard(view, slice) {
93
+ const context = [];
94
+ let { openStart, openEnd, content } = slice;
95
+ while (openStart > 1 && openEnd > 1 && content.childCount === 1 && content.firstChild.childCount === 1) {
96
+ openStart -= 1;
97
+ openEnd -= 1;
98
+ const node = content.firstChild;
99
+ context.push(
100
+ node.type.name,
101
+ node.attrs !== node.type.defaultAttrs ? node.attrs : null
102
+ );
103
+ content = node.content;
104
+ }
105
+ const serializer = view.someProp("clipboardSerializer") || model.DOMSerializer.fromSchema(view.state.schema);
106
+ const doc = detachedDoc();
107
+ const wrap = doc.createElement("div");
108
+ wrap.appendChild(serializer.serializeFragment(content, { document: doc }));
109
+ let firstChild = wrap.firstChild;
110
+ let needsWrap;
111
+ let wrappers = 0;
112
+ while (firstChild && firstChild.nodeType === 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {
113
+ for (let i = needsWrap.length - 1; i >= 0; i--) {
114
+ const wrapper = doc.createElement(needsWrap[i]);
115
+ while (wrap.firstChild) wrapper.appendChild(wrap.firstChild);
116
+ wrap.appendChild(wrapper);
117
+ wrappers++;
118
+ }
119
+ firstChild = wrap.firstChild;
120
+ }
121
+ if (firstChild && firstChild.nodeType === 1) {
122
+ firstChild.setAttribute(
123
+ "data-pm-slice",
124
+ `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : ""} ${JSON.stringify(context)}`
125
+ );
126
+ }
127
+ const text = view.someProp("clipboardTextSerializer", (f) => f(slice, view)) || slice.content.textBetween(0, slice.content.size, "\n\n");
128
+ return { dom: wrap, text };
129
+ }
130
+
131
+ var __typeError$5 = (msg) => {
132
+ throw TypeError(msg);
133
+ };
134
+ var __accessCheck$5 = (obj, member, msg) => member.has(obj) || __typeError$5("Cannot " + msg);
135
+ var __privateGet$5 = (obj, member, getter) => (__accessCheck$5(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
136
+ var __privateAdd$5 = (obj, member, value) => member.has(obj) ? __typeError$5("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
137
+ var __privateSet$5 = (obj, member, value, setter) => (__accessCheck$5(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
138
+ var _ctx$2, _createSelection, _activeSelection, _active, _activeDOMRect, _dragging, _BlockService_instances, filterNodes_get, view_get, _notify, _hide, _show, _handleMouseDown, _handleMouseUp, _handleDragStart, _mousemoveCallback, _dragEnd;
139
+ const brokenClipboardAPI = prose.browser.ie && prose.browser.ie_version < 15 || prose.browser.ios && prose.browser.webkit_version < 604;
140
+ const buffer = 20;
141
+ class BlockService {
142
+ constructor() {
143
+ __privateAdd$5(this, _BlockService_instances);
144
+ /// @internal
145
+ __privateAdd$5(this, _ctx$2);
146
+ /// @internal
147
+ __privateAdd$5(this, _createSelection, () => {
148
+ if (!__privateGet$5(this, _active))
149
+ return null;
150
+ const result = __privateGet$5(this, _active);
151
+ const view = __privateGet$5(this, _BlockService_instances, view_get);
152
+ if (view && state.NodeSelection.isSelectable(result.node)) {
153
+ const nodeSelection = state.NodeSelection.create(view.state.doc, result.$pos.pos);
154
+ view.dispatch(view.state.tr.setSelection(nodeSelection));
155
+ view.focus();
156
+ __privateSet$5(this, _activeSelection, nodeSelection);
157
+ return nodeSelection;
158
+ }
159
+ return null;
160
+ });
161
+ /// @internal
162
+ __privateAdd$5(this, _activeSelection, null);
163
+ /// @internal
164
+ __privateAdd$5(this, _active, null);
165
+ /// @internal
166
+ __privateAdd$5(this, _activeDOMRect);
167
+ /// @internal
168
+ __privateAdd$5(this, _dragging, false);
169
+ /// @internal
170
+ __privateAdd$5(this, _notify);
171
+ /// @internal
172
+ __privateAdd$5(this, _hide, () => {
173
+ var _a;
174
+ (_a = __privateGet$5(this, _notify)) == null ? void 0 : _a.call(this, { type: "hide" });
175
+ __privateSet$5(this, _active, null);
176
+ });
177
+ /// @internal
178
+ __privateAdd$5(this, _show, (active) => {
179
+ var _a;
180
+ __privateSet$5(this, _active, active);
181
+ (_a = __privateGet$5(this, _notify)) == null ? void 0 : _a.call(this, { type: "show", active });
182
+ });
183
+ /// Bind editor context and notify function to the service.
184
+ this.bind = (ctx, notify) => {
185
+ __privateSet$5(this, _ctx$2, ctx);
186
+ __privateSet$5(this, _notify, notify);
187
+ };
188
+ /// Add mouse event to the dom.
189
+ this.addEvent = (dom) => {
190
+ dom.addEventListener("mousedown", __privateGet$5(this, _handleMouseDown));
191
+ dom.addEventListener("mouseup", __privateGet$5(this, _handleMouseUp));
192
+ dom.addEventListener("dragstart", __privateGet$5(this, _handleDragStart));
193
+ };
194
+ /// Remove mouse event to the dom.
195
+ this.removeEvent = (dom) => {
196
+ dom.removeEventListener("mousedown", __privateGet$5(this, _handleMouseDown));
197
+ dom.removeEventListener("mouseup", __privateGet$5(this, _handleMouseUp));
198
+ dom.removeEventListener("dragstart", __privateGet$5(this, _handleDragStart));
199
+ };
200
+ /// Unbind the notify function.
201
+ this.unBind = () => {
202
+ __privateSet$5(this, _notify, void 0);
203
+ };
204
+ /// @internal
205
+ __privateAdd$5(this, _handleMouseDown, () => {
206
+ var _a;
207
+ __privateSet$5(this, _activeDOMRect, (_a = __privateGet$5(this, _active)) == null ? void 0 : _a.el.getBoundingClientRect());
208
+ __privateGet$5(this, _createSelection).call(this);
209
+ });
210
+ /// @internal
211
+ __privateAdd$5(this, _handleMouseUp, () => {
212
+ if (!__privateGet$5(this, _dragging)) {
213
+ requestAnimationFrame(() => {
214
+ var _a;
215
+ if (!__privateGet$5(this, _activeDOMRect))
216
+ return;
217
+ (_a = __privateGet$5(this, _BlockService_instances, view_get)) == null ? void 0 : _a.focus();
218
+ });
219
+ return;
220
+ }
221
+ __privateSet$5(this, _dragging, false);
222
+ __privateSet$5(this, _activeSelection, null);
223
+ });
224
+ /// @internal
225
+ __privateAdd$5(this, _handleDragStart, (event) => {
226
+ var _a;
227
+ __privateSet$5(this, _dragging, true);
228
+ const view = __privateGet$5(this, _BlockService_instances, view_get);
229
+ if (!view)
230
+ return;
231
+ view.dom.dataset.dragging = "true";
232
+ const selection = __privateGet$5(this, _activeSelection);
233
+ if (event.dataTransfer && selection) {
234
+ const slice = selection.content();
235
+ event.dataTransfer.effectAllowed = "copyMove";
236
+ const { dom, text } = serializeForClipboard(view, slice);
237
+ event.dataTransfer.clearData();
238
+ event.dataTransfer.setData(brokenClipboardAPI ? "Text" : "text/html", dom.innerHTML);
239
+ if (!brokenClipboardAPI)
240
+ event.dataTransfer.setData("text/plain", text);
241
+ const activeEl = (_a = __privateGet$5(this, _active)) == null ? void 0 : _a.el;
242
+ if (activeEl)
243
+ event.dataTransfer.setDragImage(activeEl, 0, 0);
244
+ view.dragging = {
245
+ slice,
246
+ move: true
247
+ };
248
+ }
249
+ });
250
+ /// @internal
251
+ this.keydownCallback = (view) => {
252
+ __privateGet$5(this, _hide).call(this);
253
+ __privateSet$5(this, _dragging, false);
254
+ view.dom.dataset.dragging = "false";
255
+ return false;
256
+ };
257
+ /// @internal
258
+ __privateAdd$5(this, _mousemoveCallback, index$1.throttle((view, event) => {
259
+ if (!view.editable)
260
+ return;
261
+ const rect = view.dom.getBoundingClientRect();
262
+ const x = rect.left + rect.width / 2;
263
+ const dom = view.root.elementFromPoint(x, event.clientY);
264
+ if (!(dom instanceof Element)) {
265
+ __privateGet$5(this, _hide).call(this);
266
+ return;
267
+ }
268
+ const filterNodes = __privateGet$5(this, _BlockService_instances, filterNodes_get);
269
+ if (!filterNodes)
270
+ return;
271
+ const result = selectRootNodeByDom(view, { x, y: event.clientY }, filterNodes);
272
+ if (!result) {
273
+ __privateGet$5(this, _hide).call(this);
274
+ return;
275
+ }
276
+ __privateGet$5(this, _show).call(this, result);
277
+ }, 200));
278
+ /// @internal
279
+ this.mousemoveCallback = (view, event) => {
280
+ if (view.composing || !view.editable)
281
+ return false;
282
+ __privateGet$5(this, _mousemoveCallback).call(this, view, event);
283
+ return false;
284
+ };
285
+ /// @internal
286
+ this.dragoverCallback = (view, event) => {
287
+ var _a;
288
+ if (__privateGet$5(this, _dragging)) {
289
+ const root = (_a = __privateGet$5(this, _BlockService_instances, view_get)) == null ? void 0 : _a.dom.parentElement;
290
+ if (!root)
291
+ return false;
292
+ const hasHorizontalScrollbar = root.scrollHeight > root.clientHeight;
293
+ const rootRect = root.getBoundingClientRect();
294
+ if (hasHorizontalScrollbar) {
295
+ if (root.scrollTop > 0 && Math.abs(event.y - rootRect.y) < buffer) {
296
+ const top = root.scrollTop > 10 ? root.scrollTop - 10 : 0;
297
+ root.scrollTop = top;
298
+ return false;
299
+ }
300
+ const totalHeight = Math.round(view.dom.getBoundingClientRect().height);
301
+ const scrollBottom = Math.round(root.scrollTop + rootRect.height);
302
+ if (scrollBottom < totalHeight && Math.abs(event.y - (rootRect.height + rootRect.y)) < buffer) {
303
+ const top = root.scrollTop + 10;
304
+ root.scrollTop = top;
305
+ return false;
306
+ }
307
+ }
308
+ }
309
+ return false;
310
+ };
311
+ /// @internal
312
+ this.dragenterCallback = (view) => {
313
+ if (!view.dragging)
314
+ return;
315
+ __privateSet$5(this, _dragging, true);
316
+ view.dom.dataset.dragging = "true";
317
+ };
318
+ /// @internal
319
+ this.dragleaveCallback = (view, event) => {
320
+ const x = event.clientX;
321
+ const y = event.clientY;
322
+ if (x < 0 || y < 0 || x > window.innerWidth || y > window.innerHeight) {
323
+ __privateSet$5(this, _active, null);
324
+ __privateGet$5(this, _dragEnd).call(this, view);
325
+ }
326
+ };
327
+ /// @internal
328
+ this.dropCallback = (view) => {
329
+ __privateGet$5(this, _dragEnd).call(this, view);
330
+ return false;
331
+ };
332
+ /// @internal
333
+ this.dragendCallback = (view) => {
334
+ __privateGet$5(this, _dragEnd).call(this, view);
335
+ };
336
+ /// @internal
337
+ __privateAdd$5(this, _dragEnd, (view) => {
338
+ __privateSet$5(this, _dragging, false);
339
+ view.dom.dataset.dragging = "false";
340
+ });
341
+ }
342
+ }
343
+ _ctx$2 = new WeakMap();
344
+ _createSelection = new WeakMap();
345
+ _activeSelection = new WeakMap();
346
+ _active = new WeakMap();
347
+ _activeDOMRect = new WeakMap();
348
+ _dragging = new WeakMap();
349
+ _BlockService_instances = new WeakSet();
350
+ filterNodes_get = function() {
351
+ var _a;
352
+ return (_a = __privateGet$5(this, _ctx$2)) == null ? void 0 : _a.get(blockConfig.key).filterNodes;
353
+ };
354
+ view_get = function() {
355
+ var _a;
356
+ return (_a = __privateGet$5(this, _ctx$2)) == null ? void 0 : _a.get(index.editorViewCtx);
357
+ };
358
+ _notify = new WeakMap();
359
+ _hide = new WeakMap();
360
+ _show = new WeakMap();
361
+ _handleMouseDown = new WeakMap();
362
+ _handleMouseUp = new WeakMap();
363
+ _handleDragStart = new WeakMap();
364
+ _mousemoveCallback = new WeakMap();
365
+ _dragEnd = new WeakMap();
366
+
367
+ const blockService = index.$ctx(new BlockService(), "blockService");
368
+ withMeta(blockConfig, {
369
+ displayName: "Ctx<blockService>"
370
+ });
371
+ const blockSpec = index.$ctx({}, "blockSpec");
372
+ withMeta(blockConfig, {
373
+ displayName: "Ctx<blockSpec>"
374
+ });
375
+ const blockPlugin = index.$prose((ctx) => {
376
+ const milkdownPluginBlockKey = new state.PluginKey("MILKDOWN_BLOCK");
377
+ const service = ctx.get(blockService.key);
378
+ const spec = ctx.get(blockSpec.key);
379
+ return new state.Plugin({
380
+ key: milkdownPluginBlockKey,
381
+ ...spec,
382
+ props: {
383
+ ...spec.props,
384
+ handleDOMEvents: {
385
+ drop: (view) => {
386
+ return service.dropCallback(view);
387
+ },
388
+ pointermove: (view, event) => {
389
+ return service.mousemoveCallback(view, event);
390
+ },
391
+ keydown: (view) => {
392
+ return service.keydownCallback(view);
393
+ },
394
+ dragover: (view, event) => {
395
+ return service.dragoverCallback(view, event);
396
+ },
397
+ dragleave: (view, event) => {
398
+ return service.dragleaveCallback(view, event);
399
+ },
400
+ dragenter: (view) => {
401
+ return service.dragenterCallback(view);
402
+ },
403
+ dragend: (view) => {
404
+ return service.dragendCallback(view);
405
+ }
406
+ }
407
+ }
408
+ });
409
+ });
410
+ withMeta(blockPlugin, {
411
+ displayName: "Prose<block>"
412
+ });
413
+
414
+ var __typeError$4 = (msg) => {
415
+ throw TypeError(msg);
416
+ };
417
+ var __accessCheck$4 = (obj, member, msg) => member.has(obj) || __typeError$4("Cannot " + msg);
418
+ var __privateGet$4 = (obj, member, getter) => (__accessCheck$4(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
419
+ var __privateAdd$4 = (obj, member, value) => member.has(obj) ? __typeError$4("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
420
+ var __privateSet$4 = (obj, member, value, setter) => (__accessCheck$4(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
421
+ var __privateMethod$1 = (obj, member, method) => (__accessCheck$4(obj, member, "access private method"), method);
422
+ var _element, _ctx$1, _service, _activeNode, _initialized$1, _getOffset, _getPosition, _getPlacement, _BlockProvider_instances, init_fn;
423
+ class BlockProvider {
424
+ constructor(options) {
425
+ __privateAdd$4(this, _BlockProvider_instances);
426
+ /// @internal
427
+ __privateAdd$4(this, _element);
428
+ /// @internal
429
+ __privateAdd$4(this, _ctx$1);
430
+ /// @internal
431
+ __privateAdd$4(this, _service);
432
+ /// @internal
433
+ __privateAdd$4(this, _activeNode, null);
434
+ /// @internal
435
+ __privateAdd$4(this, _initialized$1, false);
436
+ /// @internal
437
+ __privateAdd$4(this, _getOffset);
438
+ /// @internal
439
+ __privateAdd$4(this, _getPosition);
440
+ /// @internal
441
+ __privateAdd$4(this, _getPlacement);
442
+ /// Update provider state by editor view.
443
+ this.update = () => {
444
+ requestAnimationFrame(() => {
445
+ if (!__privateGet$4(this, _initialized$1)) {
446
+ try {
447
+ __privateMethod$1(this, _BlockProvider_instances, init_fn).call(this);
448
+ __privateSet$4(this, _initialized$1, true);
449
+ } catch (e) {
450
+ }
451
+ }
452
+ });
453
+ };
454
+ /// Destroy the block.
455
+ this.destroy = () => {
456
+ var _a, _b;
457
+ (_a = __privateGet$4(this, _service)) == null ? void 0 : _a.unBind();
458
+ (_b = __privateGet$4(this, _service)) == null ? void 0 : _b.removeEvent(__privateGet$4(this, _element));
459
+ __privateGet$4(this, _element).remove();
460
+ };
461
+ /// Show the block.
462
+ this.show = (active) => {
463
+ const dom = active.el;
464
+ const editorDom = __privateGet$4(this, _ctx$1).get(index.editorViewCtx).dom;
465
+ const deriveContext = {
466
+ ctx: __privateGet$4(this, _ctx$1),
467
+ active,
468
+ editorDom,
469
+ blockDom: __privateGet$4(this, _element)
470
+ };
471
+ const virtualEl = {
472
+ contextElement: dom,
473
+ getBoundingClientRect: () => {
474
+ if (__privateGet$4(this, _getPosition))
475
+ return __privateGet$4(this, _getPosition).call(this, deriveContext);
476
+ return dom.getBoundingClientRect();
477
+ }
478
+ };
479
+ const middleware = [floatingUi_dom.flip()];
480
+ if (__privateGet$4(this, _getOffset)) {
481
+ const offsetOption = __privateGet$4(this, _getOffset).call(this, deriveContext);
482
+ const offsetExt = floatingUi_dom.offset(offsetOption);
483
+ middleware.push(offsetExt);
484
+ }
485
+ floatingUi_dom.computePosition(virtualEl, __privateGet$4(this, _element), {
486
+ placement: __privateGet$4(this, _getPlacement) ? __privateGet$4(this, _getPlacement).call(this, deriveContext) : "left",
487
+ middleware
488
+ }).then(({ x, y }) => {
489
+ Object.assign(__privateGet$4(this, _element).style, {
490
+ left: `${x}px`,
491
+ top: `${y}px`
492
+ });
493
+ __privateGet$4(this, _element).dataset.show = "true";
494
+ });
495
+ };
496
+ /// Hide the block.
497
+ this.hide = () => {
498
+ __privateGet$4(this, _element).dataset.show = "false";
499
+ setTimeout(() => {
500
+ Object.assign(__privateGet$4(this, _element).style, {
501
+ left: `-999px`,
502
+ top: `-999px`
503
+ });
504
+ }, 200);
505
+ };
506
+ __privateSet$4(this, _ctx$1, options.ctx);
507
+ __privateSet$4(this, _element, options.content);
508
+ __privateSet$4(this, _getOffset, options.getOffset);
509
+ __privateSet$4(this, _getPosition, options.getPosition);
510
+ __privateSet$4(this, _getPlacement, options.getPlacement);
511
+ this.hide();
512
+ }
513
+ /// The context of current active node.
514
+ get active() {
515
+ return __privateGet$4(this, _activeNode);
516
+ }
517
+ }
518
+ _element = new WeakMap();
519
+ _ctx$1 = new WeakMap();
520
+ _service = new WeakMap();
521
+ _activeNode = new WeakMap();
522
+ _initialized$1 = new WeakMap();
523
+ _getOffset = new WeakMap();
524
+ _getPosition = new WeakMap();
525
+ _getPlacement = new WeakMap();
526
+ _BlockProvider_instances = new WeakSet();
527
+ /// @internal
528
+ init_fn = function() {
529
+ var _a;
530
+ const view = __privateGet$4(this, _ctx$1).get(index.editorViewCtx);
531
+ (_a = view.dom.parentElement) == null ? void 0 : _a.appendChild(__privateGet$4(this, _element));
532
+ const service = __privateGet$4(this, _ctx$1).get(blockService.key);
533
+ service.bind(__privateGet$4(this, _ctx$1), (message) => {
534
+ if (message.type === "hide") {
535
+ this.hide();
536
+ __privateSet$4(this, _activeNode, null);
537
+ } else if (message.type === "show") {
538
+ this.show(message.active);
539
+ __privateSet$4(this, _activeNode, message.active);
540
+ }
541
+ });
542
+ __privateSet$4(this, _service, service);
543
+ __privateGet$4(this, _service).addEvent(__privateGet$4(this, _element));
544
+ __privateGet$4(this, _element).draggable = true;
545
+ };
546
+
547
+ const block = [blockSpec, blockConfig, blockService, blockPlugin];
548
+ block.key = blockSpec.key;
549
+ block.pluginKey = blockPlugin.key;
550
+
551
+ function slashFactory(id) {
552
+ const slashSpec = index.$ctx({}, `${id}_SLASH_SPEC`);
553
+ const slashPlugin = index.$prose((ctx) => {
554
+ const spec = ctx.get(slashSpec.key);
555
+ return new state.Plugin({
556
+ key: new state.PluginKey(`${id}_SLASH`),
557
+ ...spec
558
+ });
559
+ });
560
+ const result = [slashSpec, slashPlugin];
561
+ result.key = slashSpec.key;
562
+ result.pluginKey = slashPlugin.key;
563
+ slashSpec.meta = {
564
+ package: "@milkdown/plugin-slash",
565
+ displayName: `Ctx<slashSpec>|${id}`
566
+ };
567
+ slashPlugin.meta = {
568
+ package: "@milkdown/plugin-slash",
569
+ displayName: `Prose<slash>|${id}`
570
+ };
571
+ return result;
572
+ }
573
+
574
+ var __typeError$3 = (msg) => {
575
+ throw TypeError(msg);
576
+ };
577
+ var __accessCheck$3 = (obj, member, msg) => member.has(obj) || __typeError$3("Cannot " + msg);
578
+ var __privateGet$3 = (obj, member, getter) => (__accessCheck$3(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
579
+ var __privateAdd$3 = (obj, member, value) => member.has(obj) ? __typeError$3("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
580
+ var __privateSet$3 = (obj, member, value, setter) => (__accessCheck$3(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
581
+ var __privateMethod = (obj, member, method) => (__accessCheck$3(obj, member, "access private method"), method);
582
+ var _initialized, _debounce, _trigger, _shouldShow, _offset, _onUpdate, _SlashProvider_instances, _shouldShow_fn;
583
+ class SlashProvider {
584
+ constructor(options) {
585
+ __privateAdd$3(this, _SlashProvider_instances);
586
+ /// @internal
587
+ __privateAdd$3(this, _initialized, false);
588
+ /// @internal
589
+ __privateAdd$3(this, _debounce);
590
+ /// @internal
591
+ __privateAdd$3(this, _trigger);
592
+ /// @internal
593
+ __privateAdd$3(this, _shouldShow);
594
+ /// The offset to get the block. Default is 0.
595
+ __privateAdd$3(this, _offset);
596
+ /// On show callback.
597
+ this.onShow = () => {
598
+ };
599
+ /// On hide callback.
600
+ this.onHide = () => {
601
+ };
602
+ /// @internal
603
+ __privateAdd$3(this, _onUpdate, (view, prevState) => {
604
+ var _a;
605
+ const { state, composing } = view;
606
+ const { selection, doc } = state;
607
+ const { ranges } = selection;
608
+ const from = Math.min(...ranges.map((range) => range.$from.pos));
609
+ const to = Math.max(...ranges.map((range) => range.$to.pos));
610
+ const isSame = prevState && prevState.doc.eq(doc) && prevState.selection.eq(selection);
611
+ if (!__privateGet$3(this, _initialized)) {
612
+ (_a = view.dom.parentElement) == null ? void 0 : _a.appendChild(this.element);
613
+ __privateSet$3(this, _initialized, true);
614
+ }
615
+ if (composing || isSame)
616
+ return;
617
+ if (!__privateGet$3(this, _shouldShow).call(this, view, prevState)) {
618
+ this.hide();
619
+ return;
620
+ }
621
+ const virtualEl = {
622
+ getBoundingClientRect: () => prose.posToDOMRect(view, from, to)
623
+ };
624
+ floatingUi_dom.computePosition(virtualEl, this.element, {
625
+ placement: "bottom-start",
626
+ middleware: [floatingUi_dom.flip(), floatingUi_dom.offset(__privateGet$3(this, _offset))]
627
+ }).then(({ x, y }) => {
628
+ Object.assign(this.element.style, {
629
+ left: `${x}px`,
630
+ top: `${y}px`
631
+ });
632
+ });
633
+ this.show();
634
+ });
635
+ /// Update provider state by editor view.
636
+ this.update = (view, prevState) => {
637
+ const updater = index$2.debounce(__privateGet$3(this, _onUpdate), __privateGet$3(this, _debounce));
638
+ updater(view, prevState);
639
+ };
640
+ /// Get the content of the current text block.
641
+ /// Pass the `matchNode` function to determine whether the current node should be matched, by default, it will match the paragraph node.
642
+ this.getContent = (view, matchNode = (node) => node.type.name === "paragraph") => {
643
+ const { selection } = view.state;
644
+ const { empty, $from } = selection;
645
+ const isTextBlock = view.state.selection instanceof state.TextSelection;
646
+ const isSlashChildren = this.element.contains(document.activeElement);
647
+ const notHasFocus = !view.hasFocus() && !isSlashChildren;
648
+ const isReadonly = !view.editable;
649
+ const paragraph = prose.findParentNode(matchNode)(view.state.selection);
650
+ const isNotInParagraph = !paragraph;
651
+ if (notHasFocus || isReadonly || !empty || !isTextBlock || isNotInParagraph)
652
+ return;
653
+ return $from.parent.textBetween(Math.max(0, $from.parentOffset - 500), $from.parentOffset, void 0, "\uFFFC");
654
+ };
655
+ /// Destroy the slash.
656
+ this.destroy = () => {
657
+ };
658
+ /// Show the slash.
659
+ this.show = () => {
660
+ this.element.dataset.show = "true";
661
+ this.onShow();
662
+ };
663
+ /// Hide the slash.
664
+ this.hide = () => {
665
+ this.element.dataset.show = "false";
666
+ this.onHide();
667
+ };
668
+ var _a, _b, _c;
669
+ this.element = options.content;
670
+ __privateSet$3(this, _debounce, (_a = options.debounce) != null ? _a : 200);
671
+ __privateSet$3(this, _shouldShow, (_b = options.shouldShow) != null ? _b : __privateMethod(this, _SlashProvider_instances, _shouldShow_fn));
672
+ __privateSet$3(this, _trigger, (_c = options.trigger) != null ? _c : "/");
673
+ __privateSet$3(this, _offset, options.offset);
674
+ }
675
+ }
676
+ _initialized = new WeakMap();
677
+ _debounce = new WeakMap();
678
+ _trigger = new WeakMap();
679
+ _shouldShow = new WeakMap();
680
+ _offset = new WeakMap();
681
+ _onUpdate = new WeakMap();
682
+ _SlashProvider_instances = new WeakSet();
683
+ /// @internal
684
+ _shouldShow_fn = function(view) {
685
+ const currentTextBlockContent = this.getContent(view);
686
+ if (!currentTextBlockContent)
687
+ return false;
688
+ const target = currentTextBlockContent.at(-1);
689
+ if (!target)
690
+ return false;
691
+ return Array.isArray(__privateGet$3(this, _trigger)) ? __privateGet$3(this, _trigger).includes(target) : __privateGet$3(this, _trigger) === target;
692
+ };
693
+
694
+ function clearRange(tr) {
695
+ const { $from, $to } = tr.selection;
696
+ const { pos: from } = $from;
697
+ const { pos: to } = $to;
698
+ tr = tr.deleteRange(from - $from.node().content.size, to);
699
+ return tr;
700
+ }
701
+ function setBlockType(tr, nodeType, attrs = null) {
702
+ const { from, to } = tr.selection;
703
+ return tr.setBlockType(from, to, nodeType, attrs);
704
+ }
705
+ function wrapInBlockType(tr, nodeType, attrs = null) {
706
+ const { $from, $to } = tr.selection;
707
+ const range = $from.blockRange($to);
708
+ const wrapping = range && transform.findWrapping(range, nodeType, attrs);
709
+ if (!wrapping)
710
+ return null;
711
+ return tr.wrap(range, wrapping);
712
+ }
713
+ function addBlockType(tr, nodeType, attrs = null) {
714
+ const node = nodeType.createAndFill(attrs);
715
+ if (!node)
716
+ return null;
717
+ return tr.replaceSelectionWith(node);
718
+ }
719
+ function clearContentAndSetBlockType(nodeType, attrs = null) {
720
+ return (state, dispatch) => {
721
+ if (dispatch) {
722
+ const tr = setBlockType(clearRange(state.tr), nodeType, attrs);
723
+ dispatch(tr.scrollIntoView());
724
+ }
725
+ return true;
726
+ };
727
+ }
728
+ function clearContentAndWrapInBlockType(nodeType, attrs = null) {
729
+ return (state, dispatch) => {
730
+ const tr = wrapInBlockType(clearRange(state.tr), nodeType, attrs);
731
+ if (!tr)
732
+ return false;
733
+ if (dispatch)
734
+ dispatch(tr.scrollIntoView());
735
+ return true;
736
+ };
737
+ }
738
+ function clearContentAndAddBlockType(nodeType, attrs = null) {
739
+ return (state, dispatch) => {
740
+ const tr = addBlockType(clearRange(state.tr), nodeType, attrs);
741
+ if (!tr)
742
+ return false;
743
+ if (dispatch)
744
+ dispatch(tr.scrollIntoView());
745
+ return true;
746
+ };
747
+ }
748
+
749
+ var __typeError$2 = (msg) => {
750
+ throw TypeError(msg);
751
+ };
752
+ var __accessCheck$2 = (obj, member, msg) => member.has(obj) || __typeError$2("Cannot " + msg);
753
+ var __privateGet$2 = (obj, member, getter) => (__accessCheck$2(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
754
+ var __privateAdd$2 = (obj, member, value) => member.has(obj) ? __typeError$2("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
755
+ var __privateSet$2 = (obj, member, value, setter) => (__accessCheck$2(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
756
+ var _groups, _getGroupInstance;
757
+ class GroupBuilder {
758
+ constructor() {
759
+ __privateAdd$2(this, _groups, []);
760
+ this.clear = () => {
761
+ __privateSet$2(this, _groups, []);
762
+ return this;
763
+ };
764
+ __privateAdd$2(this, _getGroupInstance, (group) => {
765
+ const groupInstance = {
766
+ group,
767
+ addItem: (key, item) => {
768
+ const data = { key, ...item };
769
+ group.items.push(data);
770
+ return groupInstance;
771
+ },
772
+ clear: () => {
773
+ group.items = [];
774
+ return groupInstance;
775
+ }
776
+ };
777
+ return groupInstance;
778
+ });
779
+ this.addGroup = (key, label) => {
780
+ const items = [];
781
+ const group = {
782
+ key,
783
+ label,
784
+ items
785
+ };
786
+ __privateGet$2(this, _groups).push(group);
787
+ return __privateGet$2(this, _getGroupInstance).call(this, group);
788
+ };
789
+ this.getGroup = (key) => {
790
+ const group = __privateGet$2(this, _groups).find((group2) => group2.key === key);
791
+ if (!group)
792
+ throw new Error(`Group with key ${key} not found`);
793
+ return __privateGet$2(this, _getGroupInstance).call(this, group);
794
+ };
795
+ this.build = () => {
796
+ return __privateGet$2(this, _groups);
797
+ };
798
+ }
799
+ }
800
+ _groups = new WeakMap();
801
+ _getGroupInstance = new WeakMap();
802
+
803
+ function getGroups(filter, config) {
804
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W;
805
+ const groupBuilder = new GroupBuilder();
806
+ groupBuilder.addGroup("text", (_a = config == null ? void 0 : config.slashMenuTextGroupLabel) != null ? _a : "Text").addItem("text", {
807
+ label: (_b = config == null ? void 0 : config.slashMenuTextGroupLabel) != null ? _b : "Text",
808
+ icon: (_d = (_c = config == null ? void 0 : config.slashMenuTextIcon) == null ? void 0 : _c.call(config)) != null ? _d : todoList.textIcon,
809
+ onRun: (ctx) => {
810
+ const view = ctx.get(index.editorViewCtx);
811
+ const { dispatch, state } = view;
812
+ const command = clearContentAndSetBlockType(index.paragraphSchema.type(ctx));
813
+ command(state, dispatch);
814
+ }
815
+ }).addItem("h1", {
816
+ label: (_e = config == null ? void 0 : config.slashMenuH1Label) != null ? _e : "Heading 1",
817
+ icon: (_g = (_f = config == null ? void 0 : config.slashMenuH1Icon) == null ? void 0 : _f.call(config)) != null ? _g : todoList.h1Icon,
818
+ onRun: (ctx) => {
819
+ const view = ctx.get(index.editorViewCtx);
820
+ const { dispatch, state } = view;
821
+ const command = clearContentAndSetBlockType(index.headingSchema.type(ctx), { level: 1 });
822
+ command(state, dispatch);
823
+ }
824
+ }).addItem("h2", {
825
+ label: (_h = config == null ? void 0 : config.slashMenuH2Label) != null ? _h : "Heading 2",
826
+ icon: (_j = (_i = config == null ? void 0 : config.slashMenuH2Icon) == null ? void 0 : _i.call(config)) != null ? _j : todoList.h2Icon,
827
+ onRun: (ctx) => {
828
+ const view = ctx.get(index.editorViewCtx);
829
+ const { dispatch, state } = view;
830
+ const command = clearContentAndSetBlockType(index.headingSchema.type(ctx), { level: 2 });
831
+ command(state, dispatch);
832
+ }
833
+ }).addItem("h3", {
834
+ label: (_k = config == null ? void 0 : config.slashMenuH3Label) != null ? _k : "Heading 3",
835
+ icon: (_m = (_l = config == null ? void 0 : config.slashMenuH3Icon) == null ? void 0 : _l.call(config)) != null ? _m : todoList.h3Icon,
836
+ onRun: (ctx) => {
837
+ const view = ctx.get(index.editorViewCtx);
838
+ const { dispatch, state } = view;
839
+ const command = clearContentAndSetBlockType(index.headingSchema.type(ctx), { level: 3 });
840
+ command(state, dispatch);
841
+ }
842
+ }).addItem("h4", {
843
+ label: (_n = config == null ? void 0 : config.slashMenuH4Label) != null ? _n : "Heading 4",
844
+ icon: (_p = (_o = config == null ? void 0 : config.slashMenuH4Icon) == null ? void 0 : _o.call(config)) != null ? _p : todoList.h4Icon,
845
+ onRun: (ctx) => {
846
+ const view = ctx.get(index.editorViewCtx);
847
+ const { dispatch, state } = view;
848
+ const command = clearContentAndSetBlockType(index.headingSchema.type(ctx), { level: 4 });
849
+ command(state, dispatch);
850
+ }
851
+ }).addItem("h5", {
852
+ label: (_q = config == null ? void 0 : config.slashMenuH5Label) != null ? _q : "Heading 5",
853
+ icon: (_s = (_r = config == null ? void 0 : config.slashMenuH5Icon) == null ? void 0 : _r.call(config)) != null ? _s : todoList.h5Icon,
854
+ onRun: (ctx) => {
855
+ const view = ctx.get(index.editorViewCtx);
856
+ const { dispatch, state } = view;
857
+ const command = clearContentAndSetBlockType(index.headingSchema.type(ctx), { level: 5 });
858
+ command(state, dispatch);
859
+ }
860
+ }).addItem("h6", {
861
+ label: (_t = config == null ? void 0 : config.slashMenuH6Label) != null ? _t : "Heading 6",
862
+ icon: (_v = (_u = config == null ? void 0 : config.slashMenuH6Icon) == null ? void 0 : _u.call(config)) != null ? _v : todoList.h6Icon,
863
+ onRun: (ctx) => {
864
+ const view = ctx.get(index.editorViewCtx);
865
+ const { dispatch, state } = view;
866
+ const command = clearContentAndSetBlockType(index.headingSchema.type(ctx), { level: 6 });
867
+ command(state, dispatch);
868
+ }
869
+ }).addItem("quote", {
870
+ label: (_w = config == null ? void 0 : config.slashMenuQuoteLabel) != null ? _w : "Quote",
871
+ icon: (_y = (_x = config == null ? void 0 : config.slashMenuQuoteIcon) == null ? void 0 : _x.call(config)) != null ? _y : todoList.quoteIcon,
872
+ onRun: (ctx) => {
873
+ const view = ctx.get(index.editorViewCtx);
874
+ const { dispatch, state } = view;
875
+ const command = clearContentAndWrapInBlockType(index.blockquoteSchema.type(ctx));
876
+ command(state, dispatch);
877
+ }
878
+ }).addItem("divider", {
879
+ label: (_z = config == null ? void 0 : config.slashMenuDividerLabel) != null ? _z : "Divider",
880
+ icon: (_B = (_A = config == null ? void 0 : config.slashMenuDividerIcon) == null ? void 0 : _A.call(config)) != null ? _B : todoList.dividerIcon,
881
+ onRun: (ctx) => {
882
+ const view = ctx.get(index.editorViewCtx);
883
+ const { dispatch, state } = view;
884
+ const command = clearContentAndAddBlockType(index.hrSchema.type(ctx));
885
+ command(state, dispatch);
886
+ }
887
+ });
888
+ groupBuilder.addGroup("list", (_C = config == null ? void 0 : config.slashMenuListGroupLabel) != null ? _C : "List").addItem("bullet-list", {
889
+ label: (_D = config == null ? void 0 : config.slashMenuBulletListLabel) != null ? _D : "Bullet List",
890
+ icon: (_F = (_E = config == null ? void 0 : config.slashMenuBulletListIcon) == null ? void 0 : _E.call(config)) != null ? _F : todoList.bulletListIcon,
891
+ onRun: (ctx) => {
892
+ const view = ctx.get(index.editorViewCtx);
893
+ const { dispatch, state } = view;
894
+ const command = clearContentAndWrapInBlockType(index.bulletListSchema.type(ctx));
895
+ command(state, dispatch);
896
+ }
897
+ }).addItem("ordered-list", {
898
+ label: (_G = config == null ? void 0 : config.slashMenuOrderedListLabel) != null ? _G : "Ordered List",
899
+ icon: (_I = (_H = config == null ? void 0 : config.slashMenuOrderedListIcon) == null ? void 0 : _H.call(config)) != null ? _I : todoList.orderedListIcon,
900
+ onRun: (ctx) => {
901
+ const view = ctx.get(index.editorViewCtx);
902
+ const { dispatch, state } = view;
903
+ const command = clearContentAndWrapInBlockType(index.orderedListSchema.type(ctx));
904
+ command(state, dispatch);
905
+ }
906
+ }).addItem("todo-list", {
907
+ label: (_J = config == null ? void 0 : config.slashMenuTaskListLabel) != null ? _J : "Todo List",
908
+ icon: (_L = (_K = config == null ? void 0 : config.slashMenuTaskListIcon) == null ? void 0 : _K.call(config)) != null ? _L : todoList.todoListIcon,
909
+ onRun: (ctx) => {
910
+ const view = ctx.get(index.editorViewCtx);
911
+ const { dispatch, state } = view;
912
+ const command = clearContentAndWrapInBlockType(index.listItemSchema.type(ctx), { checked: false });
913
+ command(state, dispatch);
914
+ }
915
+ });
916
+ groupBuilder.addGroup("advanced", (_M = config == null ? void 0 : config.slashMenuAdvancedGroupLabel) != null ? _M : "Advanced").addItem("image", {
917
+ label: (_N = config == null ? void 0 : config.slashMenuImageLabel) != null ? _N : "Image",
918
+ icon: (_P = (_O = config == null ? void 0 : config.slashMenuImageIcon) == null ? void 0 : _O.call(config)) != null ? _P : todoList.imageIcon,
919
+ onRun: (ctx) => {
920
+ const view = ctx.get(index.editorViewCtx);
921
+ const { dispatch, state } = view;
922
+ const command = clearContentAndAddBlockType(schema.imageBlockSchema.type(ctx));
923
+ command(state, dispatch);
924
+ }
925
+ }).addItem("code", {
926
+ label: (_Q = config == null ? void 0 : config.slashMenuCodeBlockLabel) != null ? _Q : "Code",
927
+ icon: (_S = (_R = config == null ? void 0 : config.slashMenuCodeBlockIcon) == null ? void 0 : _R.call(config)) != null ? _S : todoList.codeIcon,
928
+ onRun: (ctx) => {
929
+ const view = ctx.get(index.editorViewCtx);
930
+ const { dispatch, state } = view;
931
+ const command = clearContentAndAddBlockType(index.codeBlockSchema.type(ctx));
932
+ command(state, dispatch);
933
+ }
934
+ }).addItem("table", {
935
+ label: (_T = config == null ? void 0 : config.slashMenuTableLabel) != null ? _T : "Table",
936
+ icon: (_V = (_U = config == null ? void 0 : config.slashMenuTableIcon) == null ? void 0 : _U.call(config)) != null ? _V : todoList.tableIcon,
937
+ onRun: (ctx) => {
938
+ const view = ctx.get(index.editorViewCtx);
939
+ const { dispatch, state: state$1 } = view;
940
+ const tr = clearRange(state$1.tr);
941
+ const table = index.createTable(ctx, 3, 3);
942
+ tr.replaceSelectionWith(table);
943
+ const { from } = tr.selection;
944
+ const pos = from - table.nodeSize + 2;
945
+ dispatch(tr);
946
+ requestAnimationFrame(() => {
947
+ const selection = state.NodeSelection.create(view.state.tr.doc, pos);
948
+ dispatch(view.state.tr.setSelection(selection).scrollIntoView());
949
+ });
950
+ }
951
+ });
952
+ (_W = config == null ? void 0 : config.buildMenu) == null ? void 0 : _W.call(config, groupBuilder);
953
+ let groups = groupBuilder.build();
954
+ if (filter) {
955
+ groups = groups.map((group) => {
956
+ const items2 = group.items.filter((item) => item.label.toLowerCase().includes(filter.toLowerCase()));
957
+ return {
958
+ ...group,
959
+ items: items2
960
+ };
961
+ }).filter((group) => group.items.length > 0);
962
+ }
963
+ const items = groups.flatMap((groups2) => groups2.items);
964
+ items.forEach((item, index) => {
965
+ Object.assign(item, { index });
966
+ });
967
+ groups.reduce((acc, group) => {
968
+ const end = acc + group.items.length;
969
+ Object.assign(group, {
970
+ range: [acc, end]
971
+ });
972
+ return end;
973
+ }, 0);
974
+ return {
975
+ groups,
976
+ size: items.length
977
+ };
978
+ }
979
+
980
+ const menuComponent = ({
981
+ show,
982
+ hide,
983
+ ctx,
984
+ filter,
985
+ config
986
+ }) => {
987
+ const { groups, size } = atomico.useMemo(() => getGroups(filter, config), [filter]);
988
+ const host = atomico.useHost();
989
+ const [hoverIndex, setHoverIndex] = atomico.useState(0);
990
+ const root = atomico.useMemo(() => host.current.getRootNode(), [host]);
991
+ const prevMousePosition = atomico.useRef({ x: -999, y: -999 });
992
+ const onMouseMove = atomico.useCallback((e) => {
993
+ const prevPos = prevMousePosition.current;
994
+ if (!prevPos)
995
+ return;
996
+ const { x, y } = e;
997
+ prevPos.x = x;
998
+ prevPos.y = y;
999
+ }, []);
1000
+ atomico.useEffect(() => {
1001
+ if (size === 0 && show)
1002
+ hide == null ? void 0 : hide();
1003
+ }, [size, show]);
1004
+ const onHover = atomico.useCallback((index, after) => {
1005
+ setHoverIndex((prev) => {
1006
+ const next = typeof index === "function" ? index(prev) : index;
1007
+ after == null ? void 0 : after(next);
1008
+ return next;
1009
+ });
1010
+ }, []);
1011
+ const scrollToIndex = atomico.useCallback((index) => {
1012
+ const target = host.current.querySelector(`[data-index="${index}"]`);
1013
+ const scrollRoot = host.current.querySelector(".menu-groups");
1014
+ if (!target || !scrollRoot)
1015
+ return;
1016
+ scrollRoot.scrollTop = target.offsetTop - scrollRoot.offsetTop;
1017
+ }, []);
1018
+ const runByIndex = atomico.useCallback((index) => {
1019
+ const item = groups.flatMap((group) => group.items).at(index);
1020
+ if (item && ctx)
1021
+ item.onRun(ctx);
1022
+ hide == null ? void 0 : hide();
1023
+ }, [groups]);
1024
+ const onKeydown = atomico.useCallback((e) => {
1025
+ if (e.key === "Escape") {
1026
+ e.preventDefault();
1027
+ hide == null ? void 0 : hide();
1028
+ return;
1029
+ }
1030
+ if (e.key === "ArrowDown") {
1031
+ e.preventDefault();
1032
+ return onHover((index) => index < size - 1 ? index + 1 : index, scrollToIndex);
1033
+ }
1034
+ if (e.key === "ArrowUp") {
1035
+ e.preventDefault();
1036
+ return onHover((index) => index <= 0 ? index : index - 1, scrollToIndex);
1037
+ }
1038
+ if (e.key === "ArrowLeft") {
1039
+ e.preventDefault();
1040
+ return onHover((index) => {
1041
+ const group = groups.find((group2) => group2.range[0] <= index && group2.range[1] > index);
1042
+ if (!group)
1043
+ return index;
1044
+ const prevGroup = groups[groups.indexOf(group) - 1];
1045
+ if (!prevGroup)
1046
+ return index;
1047
+ return prevGroup.range[1] - 1;
1048
+ }, scrollToIndex);
1049
+ }
1050
+ if (e.key === "ArrowRight") {
1051
+ e.preventDefault();
1052
+ return onHover((index) => {
1053
+ const group = groups.find((group2) => group2.range[0] <= index && group2.range[1] > index);
1054
+ if (!group)
1055
+ return index;
1056
+ const nextGroup = groups[groups.indexOf(group) + 1];
1057
+ if (!nextGroup)
1058
+ return index;
1059
+ return nextGroup.range[0];
1060
+ }, scrollToIndex);
1061
+ }
1062
+ if (e.key === "Enter") {
1063
+ e.preventDefault();
1064
+ runByIndex(hoverIndex);
1065
+ }
1066
+ }, [hide, groups, hoverIndex]);
1067
+ const onMouseEnter = atomico.useCallback((index) => {
1068
+ return (e) => {
1069
+ const prevPos = prevMousePosition.current;
1070
+ if (!prevPos)
1071
+ return;
1072
+ const { x, y } = e;
1073
+ if (x === prevPos.x && y === prevPos.y)
1074
+ return;
1075
+ onHover(index);
1076
+ };
1077
+ }, []);
1078
+ atomico.useEffect(() => {
1079
+ if (show)
1080
+ root.addEventListener("keydown", onKeydown, { capture: true });
1081
+ else root.removeEventListener("keydown", onKeydown, { capture: true });
1082
+ return () => {
1083
+ root.removeEventListener("keydown", onKeydown, { capture: true });
1084
+ };
1085
+ }, [show, onKeydown]);
1086
+ return atomico.html`
1087
+ <host onmousedown=${(e) => e.preventDefault()}>
1088
+ <nav class="tab-group">
1089
+ <ul>
1090
+ ${groups.map((group) => atomico.html`<li
1091
+ key=${group.key}
1092
+ onmousedown=${() => onHover(group.range[0], scrollToIndex)}
1093
+ class=${hoverIndex >= group.range[0] && hoverIndex < group.range[1] ? "selected" : ""}
1094
+ >
1095
+ ${group.label}
1096
+ </li>`)}
1097
+ </ul>
1098
+ </nav>
1099
+ <div class="menu-groups" onmousemove=${onMouseMove}>
1100
+ ${groups.map((group) => {
1101
+ return atomico.html`
1102
+ <div key=${group.key} class="menu-group">
1103
+ <h6>${group.label}</h6>
1104
+ <ul>
1105
+ ${group.items.map(
1106
+ (item) => atomico.html`<li
1107
+ key=${item.key}
1108
+ data-index=${item.index}
1109
+ class=${hoverIndex === item.index ? "hover" : ""}
1110
+ onmouseenter=${onMouseEnter(item.index)}
1111
+ onmousedown=${() => {
1112
+ var _a;
1113
+ (_a = host.current.querySelector(`[data-index="${item.index}"]`)) == null ? void 0 : _a.classList.add("active");
1114
+ }}
1115
+ onmouseup=${() => {
1116
+ var _a;
1117
+ (_a = host.current.querySelector(`[data-index="${item.index}"]`)) == null ? void 0 : _a.classList.remove("active");
1118
+ runByIndex(item.index);
1119
+ }}
1120
+ >
1121
+ ${item.icon}
1122
+ <span>${item.label}</span>
1123
+ </li>`
1124
+ )}
1125
+ </ul>
1126
+ </div>
1127
+ `;
1128
+ })}
1129
+ </div>
1130
+ </host>
1131
+ `;
1132
+ };
1133
+ menuComponent.props = {
1134
+ ctx: Object,
1135
+ config: Object,
1136
+ show: Boolean,
1137
+ filter: String,
1138
+ hide: Function
1139
+ };
1140
+ const MenuElement = atomico.c(menuComponent);
1141
+
1142
+ var __typeError$1 = (msg) => {
1143
+ throw TypeError(msg);
1144
+ };
1145
+ var __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$1("Cannot " + msg);
1146
+ var __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
1147
+ var __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1148
+ var __privateSet$1 = (obj, member, value, setter) => (__accessCheck$1(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
1149
+ var _content$1, _slashProvider, _programmaticallyPos;
1150
+ const menu = slashFactory("CREPE_MENU");
1151
+ const menuAPI = index.$ctx({
1152
+ show: () => {
1153
+ },
1154
+ hide: () => {
1155
+ }
1156
+ }, "menuAPICtx");
1157
+ index$3.defIfNotExists("milkdown-slash-menu", MenuElement);
1158
+ function configureMenu(ctx, config) {
1159
+ ctx.set(menu.key, {
1160
+ view: (view) => new MenuView(ctx, view, config)
1161
+ });
1162
+ }
1163
+ class MenuView {
1164
+ constructor(ctx, view, config) {
1165
+ __privateAdd$1(this, _content$1);
1166
+ __privateAdd$1(this, _slashProvider);
1167
+ __privateAdd$1(this, _programmaticallyPos, null);
1168
+ this.update = (view) => {
1169
+ __privateGet$1(this, _slashProvider).update(view);
1170
+ };
1171
+ this.show = (pos) => {
1172
+ __privateSet$1(this, _programmaticallyPos, pos);
1173
+ __privateGet$1(this, _content$1).filter = "";
1174
+ __privateGet$1(this, _slashProvider).show();
1175
+ };
1176
+ this.hide = () => {
1177
+ __privateSet$1(this, _programmaticallyPos, null);
1178
+ __privateGet$1(this, _slashProvider).hide();
1179
+ };
1180
+ this.destroy = () => {
1181
+ __privateGet$1(this, _slashProvider).destroy();
1182
+ __privateGet$1(this, _content$1).remove();
1183
+ };
1184
+ __privateSet$1(this, _content$1, new MenuElement());
1185
+ __privateGet$1(this, _content$1).hide = this.hide;
1186
+ __privateGet$1(this, _content$1).ctx = ctx;
1187
+ __privateGet$1(this, _content$1).config = config;
1188
+ const self = this;
1189
+ __privateSet$1(this, _slashProvider, new SlashProvider({
1190
+ content: __privateGet$1(this, _content$1),
1191
+ debounce: 20,
1192
+ shouldShow(view2) {
1193
+ if (index$3.isInCodeBlock(view2.state.selection) || index$3.isInList(view2.state.selection))
1194
+ return false;
1195
+ const currentText = this.getContent(view2, (node) => ["paragraph", "heading"].includes(node.type.name));
1196
+ if (currentText == null)
1197
+ return false;
1198
+ const pos = __privateGet$1(self, _programmaticallyPos);
1199
+ __privateGet$1(self, _content$1).filter = currentText.startsWith("/") ? currentText.slice(1) : currentText;
1200
+ if (typeof pos === "number") {
1201
+ if (view2.state.doc.resolve(pos).node() !== view2.state.doc.resolve(view2.state.selection.from).node()) {
1202
+ __privateSet$1(self, _programmaticallyPos, null);
1203
+ return false;
1204
+ }
1205
+ return true;
1206
+ }
1207
+ if (!currentText.startsWith("/"))
1208
+ return false;
1209
+ return true;
1210
+ },
1211
+ offset: 10
1212
+ }));
1213
+ __privateGet$1(this, _slashProvider).onShow = () => {
1214
+ __privateGet$1(this, _content$1).show = true;
1215
+ };
1216
+ __privateGet$1(this, _slashProvider).onHide = () => {
1217
+ __privateGet$1(this, _content$1).show = false;
1218
+ };
1219
+ this.update(view);
1220
+ ctx.set(menuAPI.key, {
1221
+ show: (pos) => this.show(pos),
1222
+ hide: () => this.hide()
1223
+ });
1224
+ }
1225
+ }
1226
+ _content$1 = new WeakMap();
1227
+ _slashProvider = new WeakMap();
1228
+ _programmaticallyPos = new WeakMap();
1229
+
1230
+ const blockHandleComponent = ({
1231
+ onAdd,
1232
+ addIcon,
1233
+ handleIcon
1234
+ }) => {
1235
+ const ref = atomico.useRef();
1236
+ atomico.useEffect(() => {
1237
+ var _a;
1238
+ (_a = ref.current) == null ? void 0 : _a.classList.remove("active");
1239
+ });
1240
+ const onMouseDown = (e) => {
1241
+ var _a;
1242
+ e.preventDefault();
1243
+ e.stopPropagation();
1244
+ (_a = ref.current) == null ? void 0 : _a.classList.add("active");
1245
+ };
1246
+ const onMouseUp = (e) => {
1247
+ var _a;
1248
+ e.preventDefault();
1249
+ e.stopPropagation();
1250
+ onAdd == null ? void 0 : onAdd();
1251
+ (_a = ref.current) == null ? void 0 : _a.classList.remove("active");
1252
+ };
1253
+ return atomico.html`
1254
+ <host>
1255
+ <div ref=${ref} onmousedown=${onMouseDown} onmouseup=${onMouseUp} class="operation-item">
1256
+ ${(addIcon == null ? void 0 : addIcon()) || todoList.plusIcon}
1257
+ </div>
1258
+ <div class="operation-item">
1259
+ ${(handleIcon == null ? void 0 : handleIcon()) || todoList.menuIcon}
1260
+ </div>
1261
+ </host>
1262
+ `;
1263
+ };
1264
+ blockHandleComponent.props = {
1265
+ show: Boolean,
1266
+ onAdd: Function,
1267
+ addIcon: Function,
1268
+ handleIcon: Function
1269
+ };
1270
+ const BlockHandleElement = atomico.c(blockHandleComponent);
1271
+
1272
+ var __typeError = (msg) => {
1273
+ throw TypeError(msg);
1274
+ };
1275
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
1276
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
1277
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1278
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
1279
+ var _content, _provider, _ctx;
1280
+ class BlockHandleView {
1281
+ constructor(ctx, config) {
1282
+ __privateAdd(this, _content);
1283
+ __privateAdd(this, _provider);
1284
+ __privateAdd(this, _ctx);
1285
+ this.update = () => {
1286
+ __privateGet(this, _provider).update();
1287
+ };
1288
+ this.destroy = () => {
1289
+ __privateGet(this, _provider).destroy();
1290
+ __privateGet(this, _content).remove();
1291
+ };
1292
+ this.onAdd = () => {
1293
+ const ctx = __privateGet(this, _ctx);
1294
+ const view = ctx.get(index.editorViewCtx);
1295
+ if (!view.hasFocus())
1296
+ view.focus();
1297
+ const { state: state$1, dispatch } = view;
1298
+ const active = __privateGet(this, _provider).active;
1299
+ if (!active)
1300
+ return;
1301
+ const $pos = active.$pos;
1302
+ const pos = $pos.pos + active.node.nodeSize;
1303
+ let tr = state$1.tr.insert(pos, index.paragraphSchema.type(ctx).create());
1304
+ tr = tr.setSelection(state.TextSelection.near(tr.doc.resolve(pos)));
1305
+ dispatch(tr.scrollIntoView());
1306
+ __privateGet(this, _provider).hide();
1307
+ ctx.get(menuAPI.key).show(tr.selection.from);
1308
+ };
1309
+ __privateSet(this, _ctx, ctx);
1310
+ const content = new BlockHandleElement();
1311
+ __privateSet(this, _content, content);
1312
+ __privateGet(this, _content).onAdd = this.onAdd;
1313
+ __privateGet(this, _content).addIcon = config == null ? void 0 : config.handleAddIcon;
1314
+ __privateGet(this, _content).handleIcon = config == null ? void 0 : config.handleDragIcon;
1315
+ __privateSet(this, _provider, new BlockProvider({
1316
+ ctx,
1317
+ content,
1318
+ getOffset: () => 16,
1319
+ getPlacement: ({ active, blockDom }) => {
1320
+ let totalDescendant = 0;
1321
+ active.node.descendants((node) => {
1322
+ totalDescendant += node.childCount;
1323
+ });
1324
+ const dom = active.el;
1325
+ const domRect = dom.getBoundingClientRect();
1326
+ const handleRect = blockDom.getBoundingClientRect();
1327
+ const style = window.getComputedStyle(dom);
1328
+ const paddingTop = Number.parseInt(style.paddingTop, 10) || 0;
1329
+ const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0;
1330
+ const height = domRect.height - paddingTop - paddingBottom;
1331
+ const handleHeight = handleRect.height;
1332
+ return totalDescendant > 2 || handleHeight * 2 < height ? "left-start" : "left";
1333
+ }
1334
+ }));
1335
+ this.update();
1336
+ }
1337
+ }
1338
+ _content = new WeakMap();
1339
+ _provider = new WeakMap();
1340
+ _ctx = new WeakMap();
1341
+ index$3.defIfNotExists("milkdown-block-handle", BlockHandleElement);
1342
+ function configureBlockHandle(ctx, config) {
1343
+ ctx.set(block.key, {
1344
+ view: () => new BlockHandleView(ctx, config)
1345
+ });
1346
+ }
1347
+
1348
+ const defineFeature = (editor, config) => {
1349
+ editor.config((ctx) => configureBlockHandle(ctx, config)).config((ctx) => configureMenu(ctx, config)).use(menuAPI).use(block).use(menu);
1350
+ };
1351
+
1352
+ exports.defineFeature = defineFeature;
1353
+ //# sourceMappingURL=index-crv_k6dv.js.map