@milkdown/crepe 7.4.0 → 7.5.1

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 (424) hide show
  1. package/lib/cjs/clsx-dASsG01A.js +6 -0
  2. package/lib/cjs/clsx-dASsG01A.js.map +1 -0
  3. package/lib/cjs/{index-5PcT4iSf.js → index--2zEz40J.js} +8 -22
  4. package/lib/cjs/{index-5PcT4iSf.js.map → index--2zEz40J.js.map} +1 -1
  5. package/lib/cjs/{index-lrFGGa_l.js → index-5n9R-QCl.js} +5 -19
  6. package/lib/cjs/{index-lrFGGa_l.js.map → index-5n9R-QCl.js.map} +1 -1
  7. package/lib/cjs/{index-SxWWV8XD.js → index-HEdBw63r.js} +8 -22
  8. package/lib/cjs/{index-SxWWV8XD.js.map → index-HEdBw63r.js.map} +1 -1
  9. package/lib/cjs/{index-vlxA_KJ8.js → index-Hlt9dRH5.js} +5 -19
  10. package/lib/cjs/{index-vlxA_KJ8.js.map → index-Hlt9dRH5.js.map} +1 -1
  11. package/lib/cjs/{index-TEjdwq--.js → index-KCW2CzRk.js} +8 -22
  12. package/lib/{esm/index-DoEghZHy.js.map → cjs/index-KCW2CzRk.js.map} +1 -1
  13. package/lib/cjs/{index-qRg5-QJH.js → index-KSZhahYb.js} +6 -20
  14. package/lib/cjs/{index-qRg5-QJH.js.map → index-KSZhahYb.js.map} +1 -1
  15. package/lib/cjs/index-N1cRxqdw.js +39 -0
  16. package/lib/cjs/index-N1cRxqdw.js.map +1 -0
  17. package/lib/cjs/{index-fkT0ywfA.js → index-NNo_VSEA.js} +5 -19
  18. package/lib/cjs/{index-fkT0ywfA.js.map → index-NNo_VSEA.js.map} +1 -1
  19. package/lib/cjs/{index-OtaMLv5l.js → index-O1bDbloo.js} +5 -19
  20. package/lib/cjs/{index-OtaMLv5l.js.map → index-O1bDbloo.js.map} +1 -1
  21. package/lib/cjs/{index-mJ47ZWO2.js → index-OPh9naof.js} +8 -22
  22. package/lib/cjs/{index-mJ47ZWO2.js.map → index-OPh9naof.js.map} +1 -1
  23. package/lib/cjs/{index-OA_u95ey.js → index-PAhfZtcH.js} +5 -19
  24. package/lib/cjs/{index-OA_u95ey.js.map → index-PAhfZtcH.js.map} +1 -1
  25. package/lib/cjs/{index-zBr61zy6.js → index-PeRHVz4A.js} +5 -19
  26. package/lib/{esm/index-6P9Xk934.js.map → cjs/index-PeRHVz4A.js.map} +1 -1
  27. package/lib/cjs/{index-llNS_EuP.js → index-U7GWrg-w.js} +26 -470
  28. package/lib/cjs/index-U7GWrg-w.js.map +1 -0
  29. package/lib/cjs/{index-wXLifZgm.js → index-UTb0Az5e.js} +2 -2
  30. package/lib/cjs/{index-wXLifZgm.js.map → index-UTb0Az5e.js.map} +1 -1
  31. package/lib/cjs/{index-t_GA5F26.js → index-UnEAyH8X.js} +5 -19
  32. package/lib/cjs/{index-t_GA5F26.js.map → index-UnEAyH8X.js.map} +1 -1
  33. package/lib/cjs/{index-i0_v2uVp.js → index-VCkq0ru1.js} +5 -19
  34. package/lib/{esm/index-4QzlLVWs.js.map → cjs/index-VCkq0ru1.js.map} +1 -1
  35. package/lib/cjs/{index-OIQn1x0L.js → index-WQl7Du53.js} +4 -18
  36. package/lib/cjs/index-WQl7Du53.js.map +1 -0
  37. package/lib/cjs/{index-GEIgbcVc.js → index-ahL5MvrQ.js} +28 -42
  38. package/lib/cjs/{index-GEIgbcVc.js.map → index-ahL5MvrQ.js.map} +1 -1
  39. package/lib/cjs/{index-tbEq3xma.js → index-bpgWLeRY.js} +5 -19
  40. package/lib/cjs/{index-tbEq3xma.js.map → index-bpgWLeRY.js.map} +1 -1
  41. package/lib/cjs/index-dEVmN_aj.js +26 -0
  42. package/lib/cjs/index-dEVmN_aj.js.map +1 -0
  43. package/lib/cjs/{index-w9buMrFW.js → index-fZupvR_f.js} +8 -22
  44. package/lib/{esm/index-hQaRWeq1.js.map → cjs/index-fZupvR_f.js.map} +1 -1
  45. package/lib/cjs/{index-ortUqbAp.js → index-gSM-jgti.js} +5 -19
  46. package/lib/{esm/index-oMy83ynO.js.map → cjs/index-gSM-jgti.js.map} +1 -1
  47. package/lib/cjs/{index-LdEYPSZc.js → index-jlPr_A_N.js} +5 -19
  48. package/lib/cjs/{index-LdEYPSZc.js.map → index-jlPr_A_N.js.map} +1 -1
  49. package/lib/cjs/index-ocxd4A-M.js +675 -0
  50. package/lib/cjs/index-ocxd4A-M.js.map +1 -0
  51. package/lib/cjs/{index-xqKfEyRA.js → index-rFFAL9YA.js} +14 -17
  52. package/lib/cjs/index-rFFAL9YA.js.map +1 -0
  53. package/lib/cjs/index-tlx25I_m.js +36 -0
  54. package/lib/cjs/index-tlx25I_m.js.map +1 -0
  55. package/lib/cjs/index-tqAbVyds.js +28 -0
  56. package/lib/cjs/index-tqAbVyds.js.map +1 -0
  57. package/lib/cjs/index-udZSknd8.js +167 -0
  58. package/lib/cjs/index-udZSknd8.js.map +1 -0
  59. package/lib/cjs/index-uleaJDBC.js +19 -0
  60. package/lib/cjs/index-uleaJDBC.js.map +1 -0
  61. package/lib/cjs/{index-de3dfsQr.js → index-urB-WDqA.js} +7 -21
  62. package/lib/cjs/{index-de3dfsQr.js.map → index-urB-WDqA.js.map} +1 -1
  63. package/lib/cjs/{index-78P4PeZ9.js → index-xWgWtxUR.js} +6 -20
  64. package/lib/cjs/{index-78P4PeZ9.js.map → index-xWgWtxUR.js.map} +1 -1
  65. package/lib/cjs/index-z6pe2alg.js.map +1 -1
  66. package/lib/cjs/index.js +150 -13
  67. package/lib/cjs/index.js.map +1 -1
  68. package/lib/cjs/todoList-YYRQo7wG.js +404 -0
  69. package/lib/cjs/todoList-YYRQo7wG.js.map +1 -0
  70. package/lib/esm/clsx-RxCLxYpD.js +4 -0
  71. package/lib/esm/clsx-RxCLxYpD.js.map +1 -0
  72. package/lib/esm/{index-a-SAfeeT.js → index-1NetiFdJ.js} +8 -22
  73. package/lib/esm/{index-a-SAfeeT.js.map → index-1NetiFdJ.js.map} +1 -1
  74. package/lib/esm/{index-NmjiRA0M.js → index-2I_xbjAZ.js} +28 -42
  75. package/lib/esm/{index-NmjiRA0M.js.map → index-2I_xbjAZ.js.map} +1 -1
  76. package/lib/esm/{index-Grquo08f.js → index-2huXYfuJ.js} +8 -22
  77. package/lib/esm/{index-Grquo08f.js.map → index-2huXYfuJ.js.map} +1 -1
  78. package/lib/esm/{index-U8q-F7hU.js → index-4x6_TVZv.js} +5 -19
  79. package/lib/esm/{index-U8q-F7hU.js.map → index-4x6_TVZv.js.map} +1 -1
  80. package/lib/esm/index-6JoGWH2I.js +17 -0
  81. package/lib/esm/index-6JoGWH2I.js.map +1 -0
  82. package/lib/esm/{index-x-zW6gKj.js → index-A-dNwMMf.js} +2 -2
  83. package/lib/esm/{index-x-zW6gKj.js.map → index-A-dNwMMf.js.map} +1 -1
  84. package/lib/esm/{index-oMy83ynO.js → index-AV99ipmP.js} +5 -19
  85. package/lib/{cjs/index-ortUqbAp.js.map → esm/index-AV99ipmP.js.map} +1 -1
  86. package/lib/esm/{index-VyZguCIt.js → index-CMGDOz11.js} +10 -13
  87. package/lib/esm/index-CMGDOz11.js.map +1 -0
  88. package/lib/esm/index-HlPKwzLC.js +34 -0
  89. package/lib/esm/index-HlPKwzLC.js.map +1 -0
  90. package/lib/esm/index-Jvxff1vU.js.map +1 -1
  91. package/lib/esm/{index-vwrMVELn.js → index-PC2bahtq.js} +5 -19
  92. package/lib/esm/{index-vwrMVELn.js.map → index-PC2bahtq.js.map} +1 -1
  93. package/lib/esm/{index-UBeneu17.js → index-QBYz82jZ.js} +5 -19
  94. package/lib/esm/{index-UBeneu17.js.map → index-QBYz82jZ.js.map} +1 -1
  95. package/lib/esm/{index-bsED907r.js → index-W1pAMr_8.js} +6 -20
  96. package/lib/esm/{index-bsED907r.js.map → index-W1pAMr_8.js.map} +1 -1
  97. package/lib/esm/{index-q-qE7-96.js → index-Xzdc2jbA.js} +25 -469
  98. package/lib/esm/index-Xzdc2jbA.js.map +1 -0
  99. package/lib/esm/{index-A9zdyi2L.js → index-ZAtZWqJQ.js} +5 -19
  100. package/lib/esm/{index-A9zdyi2L.js.map → index-ZAtZWqJQ.js.map} +1 -1
  101. package/lib/esm/index-_A9vu1ED.js +673 -0
  102. package/lib/esm/index-_A9vu1ED.js.map +1 -0
  103. package/lib/esm/{index-U71v7KdA.js → index-bnSKBrbD.js} +5 -19
  104. package/lib/esm/{index-U71v7KdA.js.map → index-bnSKBrbD.js.map} +1 -1
  105. package/lib/esm/index-fVrfHXda.js +24 -0
  106. package/lib/esm/index-fVrfHXda.js.map +1 -0
  107. package/lib/esm/{index-PkBZpDL4.js → index-ftnOhuRS.js} +4 -18
  108. package/lib/esm/index-ftnOhuRS.js.map +1 -0
  109. package/lib/esm/{index-4oMdufW4.js → index-iQPB0Rdl.js} +6 -20
  110. package/lib/esm/{index-4oMdufW4.js.map → index-iQPB0Rdl.js.map} +1 -1
  111. package/lib/esm/{index-0khVa44f.js → index-kPj3-TKp.js} +5 -19
  112. package/lib/esm/{index-0khVa44f.js.map → index-kPj3-TKp.js.map} +1 -1
  113. package/lib/esm/{index-hQaRWeq1.js → index-kgOR7SZ6.js} +8 -22
  114. package/lib/{cjs/index-w9buMrFW.js.map → esm/index-kgOR7SZ6.js.map} +1 -1
  115. package/lib/esm/index-lm00PM0y.js +165 -0
  116. package/lib/esm/index-lm00PM0y.js.map +1 -0
  117. package/lib/esm/{index-4QzlLVWs.js → index-m49Bj3q7.js} +5 -19
  118. package/lib/{cjs/index-i0_v2uVp.js.map → esm/index-m49Bj3q7.js.map} +1 -1
  119. package/lib/esm/index-ohmbt6Ys.js +37 -0
  120. package/lib/esm/index-ohmbt6Ys.js.map +1 -0
  121. package/lib/esm/{index-DoEghZHy.js → index-sWVjGw-3.js} +8 -22
  122. package/lib/esm/index-sWVjGw-3.js.map +1 -0
  123. package/lib/esm/{index-L7VXk-jT.js → index-twh8lL5o.js} +5 -19
  124. package/lib/esm/{index-L7VXk-jT.js.map → index-twh8lL5o.js.map} +1 -1
  125. package/lib/esm/{index-6P9Xk934.js → index-v02MCz4_.js} +5 -19
  126. package/lib/{cjs/index-zBr61zy6.js.map → esm/index-v02MCz4_.js.map} +1 -1
  127. package/lib/esm/index-v3rvbocl.js +26 -0
  128. package/lib/esm/index-v3rvbocl.js.map +1 -0
  129. package/lib/esm/{index-7BVeXLQZ.js → index-wEXT8mbN.js} +5 -19
  130. package/lib/esm/{index-7BVeXLQZ.js.map → index-wEXT8mbN.js.map} +1 -1
  131. package/lib/esm/{index-rwcSpYkt.js → index-wFIac5Kw.js} +7 -21
  132. package/lib/esm/{index-rwcSpYkt.js.map → index-wFIac5Kw.js.map} +1 -1
  133. package/lib/esm/{index-bVubJ6Rv.js → index-wg94ewRo.js} +8 -22
  134. package/lib/esm/{index-bVubJ6Rv.js.map → index-wg94ewRo.js.map} +1 -1
  135. package/lib/esm/index.js +152 -11
  136. package/lib/esm/index.js.map +1 -1
  137. package/lib/esm/todoList-9QsDDcmB.js +368 -0
  138. package/lib/esm/todoList-9QsDDcmB.js.map +1 -0
  139. package/lib/theme/_internal/classic-common.css +3 -2
  140. package/lib/theme/common/block-edit.css +3 -1
  141. package/lib/theme/common/code-mirror.css +15 -0
  142. package/lib/theme/common/cursor.css +1 -1
  143. package/lib/theme/common/image-block.css +2 -0
  144. package/lib/theme/common/link-tooltip.css +10 -13
  145. package/lib/theme/common/list-item.css +16 -1
  146. package/lib/theme/common/prosemirror.css +1 -1
  147. package/lib/theme/common/style.css +1 -0
  148. package/lib/theme/common/table.css +217 -0
  149. package/lib/theme/common/toolbar.css +11 -4
  150. package/lib/theme/{classic-dark → crepe-dark}/style.css +2 -2
  151. package/lib/theme/frame/style.css +28 -0
  152. package/lib/theme/frame-dark/style.css +28 -0
  153. package/lib/theme/nord/style.css +28 -0
  154. package/lib/theme/nord-dark/style.css +28 -0
  155. package/lib/types/core/crepe.d.ts +5 -3
  156. package/lib/types/core/crepe.d.ts.map +1 -1
  157. package/lib/types/core/slice.d.ts +2 -2
  158. package/lib/types/core/slice.d.ts.map +1 -1
  159. package/lib/types/feature/block-edit/handle/component.d.ts +3 -0
  160. package/lib/types/feature/block-edit/handle/component.d.ts.map +1 -1
  161. package/lib/types/feature/block-edit/handle/index.d.ts +5 -4
  162. package/lib/types/feature/block-edit/handle/index.d.ts.map +1 -1
  163. package/lib/types/feature/block-edit/index.d.ts +43 -2
  164. package/lib/types/feature/block-edit/index.d.ts.map +1 -1
  165. package/lib/types/feature/block-edit/menu/component.d.ts +3 -1
  166. package/lib/types/feature/block-edit/menu/component.d.ts.map +1 -1
  167. package/lib/types/feature/block-edit/menu/config.d.ts +3 -12
  168. package/lib/types/feature/block-edit/menu/config.d.ts.map +1 -1
  169. package/lib/types/feature/block-edit/menu/group-builder.d.ts +29 -0
  170. package/lib/types/feature/block-edit/menu/group-builder.d.ts.map +1 -0
  171. package/lib/types/feature/block-edit/menu/index.d.ts +5 -4
  172. package/lib/types/feature/block-edit/menu/index.d.ts.map +1 -1
  173. package/lib/types/feature/block-edit/menu/utils.d.ts +28 -0
  174. package/lib/types/feature/block-edit/menu/utils.d.ts.map +1 -0
  175. package/lib/types/feature/code-mirror/index.d.ts +9 -1
  176. package/lib/types/feature/code-mirror/index.d.ts.map +1 -1
  177. package/lib/types/feature/cursor/index.d.ts +1 -1
  178. package/lib/types/feature/cursor/index.d.ts.map +1 -1
  179. package/lib/types/feature/image-block/index.d.ts +19 -2
  180. package/lib/types/feature/image-block/index.d.ts.map +1 -1
  181. package/lib/types/feature/index.d.ts +17 -2
  182. package/lib/types/feature/index.d.ts.map +1 -1
  183. package/lib/types/feature/link-tooltip/index.d.ts +12 -2
  184. package/lib/types/feature/link-tooltip/index.d.ts.map +1 -1
  185. package/lib/types/feature/list-item/index.d.ts +8 -2
  186. package/lib/types/feature/list-item/index.d.ts.map +1 -1
  187. package/lib/types/feature/placeholder/index.d.ts +2 -2
  188. package/lib/types/feature/placeholder/index.d.ts.map +1 -1
  189. package/lib/types/feature/shared.d.ts +3 -1
  190. package/lib/types/feature/shared.d.ts.map +1 -1
  191. package/lib/types/feature/table/index.d.ts +16 -0
  192. package/lib/types/feature/table/index.d.ts.map +1 -0
  193. package/lib/types/feature/toolbar/component.d.ts +3 -1
  194. package/lib/types/feature/toolbar/component.d.ts.map +1 -1
  195. package/lib/types/feature/toolbar/index.d.ts +11 -2
  196. package/lib/types/feature/toolbar/index.d.ts.map +1 -1
  197. package/lib/types/icons/alignCenter.d.ts +2 -0
  198. package/lib/types/icons/alignCenter.d.ts.map +1 -0
  199. package/lib/types/icons/alignLeft.d.ts +2 -0
  200. package/lib/types/icons/alignLeft.d.ts.map +1 -0
  201. package/lib/types/icons/alignRight.d.ts +2 -0
  202. package/lib/types/icons/alignRight.d.ts.map +1 -0
  203. package/lib/types/icons/bold.d.ts +2 -0
  204. package/lib/types/icons/bold.d.ts.map +1 -0
  205. package/lib/types/{feature/list-item/consts.d.ts → icons/bullet.d.ts} +1 -1
  206. package/lib/types/icons/bullet.d.ts.map +1 -0
  207. package/lib/types/icons/bulletList.d.ts +2 -0
  208. package/lib/types/icons/bulletList.d.ts.map +1 -0
  209. package/lib/types/icons/caption.d.ts +2 -0
  210. package/lib/types/icons/caption.d.ts.map +1 -0
  211. package/lib/types/icons/checkBoxChecked.d.ts +2 -0
  212. package/lib/types/icons/checkBoxChecked.d.ts.map +1 -0
  213. package/lib/types/icons/checkBoxUnchecked.d.ts +2 -0
  214. package/lib/types/icons/checkBoxUnchecked.d.ts.map +1 -0
  215. package/lib/types/icons/chevronDown.d.ts +2 -0
  216. package/lib/types/icons/chevronDown.d.ts.map +1 -0
  217. package/lib/types/icons/clear.d.ts +2 -0
  218. package/lib/types/icons/clear.d.ts.map +1 -0
  219. package/lib/types/icons/code.d.ts +2 -0
  220. package/lib/types/icons/code.d.ts.map +1 -0
  221. package/lib/types/icons/confirm.d.ts +2 -0
  222. package/lib/types/icons/confirm.d.ts.map +1 -0
  223. package/lib/types/icons/divider.d.ts +2 -0
  224. package/lib/types/icons/divider.d.ts.map +1 -0
  225. package/lib/types/icons/dragHandle.d.ts +2 -0
  226. package/lib/types/icons/dragHandle.d.ts.map +1 -0
  227. package/lib/types/icons/edit.d.ts +2 -0
  228. package/lib/types/icons/edit.d.ts.map +1 -0
  229. package/lib/types/icons/h1.d.ts +2 -0
  230. package/lib/types/icons/h1.d.ts.map +1 -0
  231. package/lib/types/icons/h2.d.ts +2 -0
  232. package/lib/types/icons/h2.d.ts.map +1 -0
  233. package/lib/types/icons/h3.d.ts +2 -0
  234. package/lib/types/icons/h3.d.ts.map +1 -0
  235. package/lib/types/icons/h4.d.ts +2 -0
  236. package/lib/types/icons/h4.d.ts.map +1 -0
  237. package/lib/types/icons/h5.d.ts +2 -0
  238. package/lib/types/icons/h5.d.ts.map +1 -0
  239. package/lib/types/icons/h6.d.ts +2 -0
  240. package/lib/types/icons/h6.d.ts.map +1 -0
  241. package/lib/types/icons/image.d.ts +2 -0
  242. package/lib/types/icons/image.d.ts.map +1 -0
  243. package/lib/types/icons/index.d.ts +36 -0
  244. package/lib/types/icons/index.d.ts.map +1 -0
  245. package/lib/types/icons/italic.d.ts +2 -0
  246. package/lib/types/icons/italic.d.ts.map +1 -0
  247. package/lib/types/icons/link.d.ts +2 -0
  248. package/lib/types/icons/link.d.ts.map +1 -0
  249. package/lib/types/icons/menu.d.ts +2 -0
  250. package/lib/types/icons/menu.d.ts.map +1 -0
  251. package/lib/types/icons/orderedList.d.ts +2 -0
  252. package/lib/types/icons/orderedList.d.ts.map +1 -0
  253. package/lib/types/icons/plus.d.ts +2 -0
  254. package/lib/types/icons/plus.d.ts.map +1 -0
  255. package/lib/types/icons/quote.d.ts +2 -0
  256. package/lib/types/icons/quote.d.ts.map +1 -0
  257. package/lib/types/icons/remove.d.ts +2 -0
  258. package/lib/types/icons/remove.d.ts.map +1 -0
  259. package/lib/types/icons/search.d.ts +2 -0
  260. package/lib/types/icons/search.d.ts.map +1 -0
  261. package/lib/types/icons/strikethrough.d.ts +2 -0
  262. package/lib/types/icons/strikethrough.d.ts.map +1 -0
  263. package/lib/types/icons/table.d.ts +2 -0
  264. package/lib/types/icons/table.d.ts.map +1 -0
  265. package/lib/types/icons/text.d.ts +2 -0
  266. package/lib/types/icons/text.d.ts.map +1 -0
  267. package/lib/types/icons/todoList.d.ts +2 -0
  268. package/lib/types/icons/todoList.d.ts.map +1 -0
  269. package/lib/types/utils/index.d.ts +1 -1
  270. package/lib/types/utils/index.d.ts.map +1 -1
  271. package/package.json +9 -23
  272. package/src/core/crepe.ts +15 -9
  273. package/src/core/slice.ts +2 -2
  274. package/src/feature/block-edit/handle/component.ts +13 -29
  275. package/src/feature/block-edit/handle/index.ts +16 -17
  276. package/src/feature/block-edit/index.ts +50 -5
  277. package/src/feature/block-edit/menu/component.ts +6 -7
  278. package/src/feature/block-edit/menu/config.ts +203 -274
  279. package/src/feature/block-edit/menu/group-builder.ts +50 -0
  280. package/src/feature/block-edit/menu/index.ts +11 -8
  281. package/src/feature/block-edit/menu/utils.ts +89 -0
  282. package/src/feature/code-mirror/index.ts +27 -19
  283. package/src/feature/cursor/index.ts +3 -4
  284. package/src/feature/image-block/index.ts +34 -41
  285. package/src/feature/index.ts +23 -3
  286. package/src/feature/link-tooltip/index.ts +23 -10
  287. package/src/feature/list-item/index.ts +21 -9
  288. package/src/feature/placeholder/index.ts +11 -6
  289. package/src/feature/shared.ts +4 -1
  290. package/src/feature/table/index.ts +54 -0
  291. package/src/feature/toolbar/component.ts +29 -11
  292. package/src/feature/toolbar/index.ts +21 -9
  293. package/src/icons/alignCenter.ts +7 -0
  294. package/src/icons/alignLeft.ts +7 -0
  295. package/src/icons/alignRight.ts +7 -0
  296. package/src/icons/bold.ts +7 -0
  297. package/src/{feature/list-item/consts.ts → icons/bullet.ts} +3 -3
  298. package/src/icons/bulletList.ts +14 -0
  299. package/src/icons/caption.ts +7 -0
  300. package/src/icons/checkBoxChecked.ts +14 -0
  301. package/src/icons/checkBoxUnchecked.ts +14 -0
  302. package/src/icons/chevronDown.ts +7 -0
  303. package/src/icons/clear.ts +14 -0
  304. package/src/icons/code.ts +14 -0
  305. package/src/icons/confirm.ts +14 -0
  306. package/src/icons/divider.ts +14 -0
  307. package/src/icons/dragHandle.ts +7 -0
  308. package/src/icons/edit.ts +14 -0
  309. package/src/icons/h1.ts +14 -0
  310. package/src/icons/h2.ts +14 -0
  311. package/src/icons/h3.ts +14 -0
  312. package/src/icons/h4.ts +14 -0
  313. package/src/icons/h5.ts +14 -0
  314. package/src/icons/h6.ts +14 -0
  315. package/src/icons/image.ts +14 -0
  316. package/src/icons/index.ts +35 -0
  317. package/src/icons/italic.ts +7 -0
  318. package/src/icons/link.ts +7 -0
  319. package/src/icons/menu.ts +14 -0
  320. package/src/icons/orderedList.ts +14 -0
  321. package/src/icons/plus.ts +14 -0
  322. package/src/icons/quote.ts +14 -0
  323. package/src/icons/remove.ts +7 -0
  324. package/src/icons/search.ts +7 -0
  325. package/src/icons/strikethrough.ts +7 -0
  326. package/src/icons/table.ts +14 -0
  327. package/src/icons/text.ts +14 -0
  328. package/src/icons/todoList.ts +7 -0
  329. package/src/theme/_internal/classic-common.css +3 -2
  330. package/src/theme/common/block-edit.css +3 -1
  331. package/src/theme/common/code-mirror.css +13 -0
  332. package/src/theme/common/cursor.css +1 -1
  333. package/src/theme/common/image-block.css +2 -0
  334. package/src/theme/common/link-tooltip.css +11 -14
  335. package/src/theme/common/list-item.css +9 -0
  336. package/src/theme/common/prosemirror.css +1 -1
  337. package/src/theme/common/style.css +1 -0
  338. package/src/theme/common/table.css +204 -0
  339. package/src/theme/common/toolbar.css +14 -4
  340. package/src/theme/{classic-dark → crepe-dark}/style.css +2 -2
  341. package/src/theme/frame/style.css +28 -0
  342. package/src/theme/frame-dark/style.css +28 -0
  343. package/src/theme/nord/style.css +28 -0
  344. package/src/theme/nord-dark/style.css +28 -0
  345. package/src/utils/index.ts +1 -1
  346. package/lib/cjs/_view-TbSIR42F.js +0 -27
  347. package/lib/cjs/_view-TbSIR42F.js.map +0 -1
  348. package/lib/cjs/clsx-7JLENl8W.js +0 -62
  349. package/lib/cjs/clsx-7JLENl8W.js.map +0 -1
  350. package/lib/cjs/composed-offset-position.browser.min-FwypoGc1.js +0 -1138
  351. package/lib/cjs/composed-offset-position.browser.min-FwypoGc1.js.map +0 -1
  352. package/lib/cjs/helper-OEW-2Vxr.js +0 -9
  353. package/lib/cjs/helper-OEW-2Vxr.js.map +0 -1
  354. package/lib/cjs/index-2oxl5Zo4.js +0 -551
  355. package/lib/cjs/index-2oxl5Zo4.js.map +0 -1
  356. package/lib/cjs/index-GKolgvC5.js +0 -505
  357. package/lib/cjs/index-GKolgvC5.js.map +0 -1
  358. package/lib/cjs/index-JAqL0ybh.js +0 -55
  359. package/lib/cjs/index-JAqL0ybh.js.map +0 -1
  360. package/lib/cjs/index-Ne_pk53w.js +0 -178
  361. package/lib/cjs/index-Ne_pk53w.js.map +0 -1
  362. package/lib/cjs/index-O3vRXWIP.js +0 -199
  363. package/lib/cjs/index-O3vRXWIP.js.map +0 -1
  364. package/lib/cjs/index-OIQn1x0L.js.map +0 -1
  365. package/lib/cjs/index-PF7s7DOo.js +0 -386
  366. package/lib/cjs/index-PF7s7DOo.js.map +0 -1
  367. package/lib/cjs/index-TEjdwq--.js.map +0 -1
  368. package/lib/cjs/index-kNI3S3lF.js +0 -22477
  369. package/lib/cjs/index-kNI3S3lF.js.map +0 -1
  370. package/lib/cjs/index-kvO8ReCY.js +0 -1960
  371. package/lib/cjs/index-kvO8ReCY.js.map +0 -1
  372. package/lib/cjs/index-llNS_EuP.js.map +0 -1
  373. package/lib/cjs/index-xqKfEyRA.js.map +0 -1
  374. package/lib/cjs/meta-q8q9fHyr.js +0 -14
  375. package/lib/cjs/meta-q8q9fHyr.js.map +0 -1
  376. package/lib/cjs/schema-7d3meDfB.js +0 -74
  377. package/lib/cjs/schema-7d3meDfB.js.map +0 -1
  378. package/lib/cjs/tooltip-plugin-Mk9fRTxI.js +0 -200
  379. package/lib/cjs/tooltip-plugin-Mk9fRTxI.js.map +0 -1
  380. package/lib/esm/_view-JjtfhQ8k.js +0 -25
  381. package/lib/esm/_view-JjtfhQ8k.js.map +0 -1
  382. package/lib/esm/clsx-R7WFaNKL.js +0 -52
  383. package/lib/esm/clsx-R7WFaNKL.js.map +0 -1
  384. package/lib/esm/composed-offset-position.browser.min-Tnm31e-m.js +0 -1132
  385. package/lib/esm/composed-offset-position.browser.min-Tnm31e-m.js.map +0 -1
  386. package/lib/esm/helper-iYEjPbOY.js +0 -7
  387. package/lib/esm/helper-iYEjPbOY.js.map +0 -1
  388. package/lib/esm/index-218OjRxG.js +0 -549
  389. package/lib/esm/index-218OjRxG.js.map +0 -1
  390. package/lib/esm/index-AHPvVH4H.js +0 -197
  391. package/lib/esm/index-AHPvVH4H.js.map +0 -1
  392. package/lib/esm/index-Bg5GFp0g.js +0 -384
  393. package/lib/esm/index-Bg5GFp0g.js.map +0 -1
  394. package/lib/esm/index-JkHHp3K-.js +0 -22445
  395. package/lib/esm/index-JkHHp3K-.js.map +0 -1
  396. package/lib/esm/index-PkBZpDL4.js.map +0 -1
  397. package/lib/esm/index-TNMG6UrN.js +0 -53
  398. package/lib/esm/index-TNMG6UrN.js.map +0 -1
  399. package/lib/esm/index-VyZguCIt.js.map +0 -1
  400. package/lib/esm/index-h1arGiXv.js +0 -1958
  401. package/lib/esm/index-h1arGiXv.js.map +0 -1
  402. package/lib/esm/index-pHsvfB_I.js +0 -503
  403. package/lib/esm/index-pHsvfB_I.js.map +0 -1
  404. package/lib/esm/index-q-qE7-96.js.map +0 -1
  405. package/lib/esm/index-u8tWJbca.js +0 -176
  406. package/lib/esm/index-u8tWJbca.js.map +0 -1
  407. package/lib/esm/meta-3ZYGAGrY.js +0 -12
  408. package/lib/esm/meta-3ZYGAGrY.js.map +0 -1
  409. package/lib/esm/schema-hVsy-vme.js +0 -71
  410. package/lib/esm/schema-hVsy-vme.js.map +0 -1
  411. package/lib/esm/tooltip-plugin-vZefVSGL.js +0 -194
  412. package/lib/esm/tooltip-plugin-vZefVSGL.js.map +0 -1
  413. package/lib/types/feature/block-edit/menu/icons.d.ts +0 -14
  414. package/lib/types/feature/block-edit/menu/icons.d.ts.map +0 -1
  415. package/lib/types/feature/link-tooltip/consts.d.ts +0 -5
  416. package/lib/types/feature/link-tooltip/consts.d.ts.map +0 -1
  417. package/lib/types/feature/list-item/consts.d.ts.map +0 -1
  418. package/lib/types/feature/toolbar/consts.d.ts +0 -5
  419. package/lib/types/feature/toolbar/consts.d.ts.map +0 -1
  420. package/src/feature/block-edit/menu/icons.ts +0 -170
  421. package/src/feature/link-tooltip/consts.ts +0 -46
  422. package/src/feature/toolbar/consts.ts +0 -25
  423. /package/lib/theme/{classic → crepe}/style.css +0 -0
  424. /package/src/theme/{classic → crepe}/style.css +0 -0
@@ -1,551 +0,0 @@
1
- 'use strict';
2
-
3
- var schema = require('./schema-7d3meDfB.js');
4
- var meta = require('./meta-q8q9fHyr.js');
5
- var index = require('./index-kNI3S3lF.js');
6
- var atomico = require('atomico');
7
- var clsx = require('./clsx-7JLENl8W.js');
8
- var helper = require('./helper-OEW-2Vxr.js');
9
- var $view = require('./_view-TbSIR42F.js');
10
- require('@milkdown/prose/history');
11
- require('@milkdown/prose/model');
12
- require('@milkdown/prose/keymap');
13
- require('@milkdown/prose/commands');
14
- require('@milkdown/prose');
15
- require('@milkdown/prose/state');
16
- require('@milkdown/prose/inputrules');
17
- require('@milkdown/prose/schema-list');
18
- require('@milkdown/prose/view');
19
- require('@milkdown/prose/transform');
20
-
21
- function visitImage(ast) {
22
- return index.visit(ast, "paragraph", (node, index, parent) => {
23
- var _a, _b;
24
- if (((_a = node.children) == null ? void 0 : _a.length) !== 1)
25
- return;
26
- const firstChild = (_b = node.children) == null ? void 0 : _b[0];
27
- if (!firstChild || firstChild.type !== "image")
28
- return;
29
- const { url, alt, title } = firstChild;
30
- const newNode = {
31
- type: "image-block",
32
- url,
33
- alt,
34
- title
35
- };
36
- parent.children.splice(index, 1, newNode);
37
- });
38
- }
39
- const remarkImageBlockPlugin = index.$remark("remark-image-block", () => () => visitImage);
40
- meta.withMeta(remarkImageBlockPlugin.plugin, {
41
- displayName: "Remark<remarkImageBlock>",
42
- group: "ImageBlock"
43
- });
44
- meta.withMeta(remarkImageBlockPlugin.options, {
45
- displayName: "RemarkConfig<remarkImageBlock>",
46
- group: "ImageBlock"
47
- });
48
-
49
- const defaultImageBlockConfig = {
50
- imageIcon: () => clsx.image,
51
- captionIcon: () => clsx.chatBubble,
52
- uploadButton: () => atomico.html`Upload file`,
53
- confirmButton: () => atomico.html`Confirm ⏎`,
54
- uploadPlaceholderText: "or paste the image link ...",
55
- captionPlaceholderText: "Image caption",
56
- onUpload: (file) => Promise.resolve(URL.createObjectURL(file))
57
- };
58
- const imageBlockConfig = index.$ctx(defaultImageBlockConfig, "imageBlockConfigCtx");
59
- meta.withMeta(imageBlockConfig, {
60
- displayName: "Config<image-block>",
61
- group: "ImageBlock"
62
- });
63
-
64
- function useBlockEffect({
65
- image,
66
- resizeHandle,
67
- ratio,
68
- setRatio,
69
- src
70
- }) {
71
- const host = atomico.useHost();
72
- const root = atomico.useMemo(() => host.current.getRootNode(), [host]);
73
- atomico.useEffect(() => {
74
- const imageRef = image.current;
75
- if (!imageRef)
76
- return;
77
- delete imageRef.dataset.origin;
78
- delete imageRef.dataset.height;
79
- imageRef.style.height = "";
80
- }, [src]);
81
- atomico.useEffect(() => {
82
- const resizeHandleRef = resizeHandle.current;
83
- const imageRef = image.current;
84
- if (!resizeHandleRef || !imageRef)
85
- return;
86
- const onMove = (e) => {
87
- e.preventDefault();
88
- const top = imageRef.getBoundingClientRect().top;
89
- const height = e.clientY - top;
90
- const h = Number(height < 100 ? 100 : height).toFixed(2);
91
- imageRef.dataset.height = h;
92
- imageRef.style.height = `${h}px`;
93
- };
94
- const pointerUp = () => {
95
- root.removeEventListener("pointermove", onMove);
96
- root.removeEventListener("pointerup", pointerUp);
97
- const originHeight = Number(imageRef.dataset.origin);
98
- const currentHeight = Number(imageRef.dataset.height);
99
- const ratio2 = Number.parseFloat(Number(currentHeight / originHeight).toFixed(2));
100
- if (Number.isNaN(ratio2))
101
- return;
102
- setRatio(ratio2);
103
- };
104
- const pointerDown = (e) => {
105
- e.preventDefault();
106
- root.addEventListener("pointermove", onMove);
107
- root.addEventListener("pointerup", pointerUp);
108
- };
109
- const onLoad = (e) => {
110
- const maxWidth = host.current.getBoundingClientRect().width;
111
- if (!maxWidth)
112
- return;
113
- const target = e.target;
114
- const height = target.height;
115
- const width = target.width;
116
- const transformedHeight = width < maxWidth ? height : maxWidth * (height / width);
117
- const h = (transformedHeight * ratio).toFixed(2);
118
- imageRef.dataset.origin = transformedHeight.toFixed(2);
119
- imageRef.dataset.height = h;
120
- imageRef.style.height = `${h}px`;
121
- };
122
- imageRef.addEventListener("load", onLoad);
123
- resizeHandleRef.addEventListener("pointerdown", pointerDown);
124
- return () => {
125
- imageRef.removeEventListener("load", onLoad);
126
- resizeHandleRef.removeEventListener("pointerdown", pointerDown);
127
- };
128
- }, []);
129
- }
130
-
131
- let timer = 0;
132
- const imageComponent = ({
133
- src = "",
134
- caption = "",
135
- ratio = 1,
136
- selected = false,
137
- readonly = false,
138
- setAttr,
139
- config
140
- }) => {
141
- const image = atomico.useRef();
142
- const resizeHandle = atomico.useRef();
143
- const linkInput = atomico.useRef();
144
- const [showCaption, setShowCaption] = atomico.useState(caption.length > 0);
145
- const [hidePlaceholder, setHidePlaceholder] = atomico.useState(src.length !== 0);
146
- const [uuid] = atomico.useState(crypto.randomUUID());
147
- const [focusLinkInput, setFocusLinkInput] = atomico.useState(false);
148
- const [currentLink, setCurrentLink] = atomico.useState(src);
149
- useBlockEffect({
150
- image,
151
- resizeHandle,
152
- ratio,
153
- setRatio: (r) => setAttr == null ? void 0 : setAttr("ratio", r),
154
- src
155
- });
156
- atomico.useEffect(() => {
157
- if (selected)
158
- return;
159
- setShowCaption(caption.length > 0);
160
- }, [selected]);
161
- const onInput = (e) => {
162
- const target = e.target;
163
- const value = target.value;
164
- if (timer)
165
- window.clearTimeout(timer);
166
- timer = window.setTimeout(() => {
167
- setAttr == null ? void 0 : setAttr("caption", value);
168
- }, 1e3);
169
- };
170
- const onBlurCaption = (e) => {
171
- const target = e.target;
172
- const value = target.value;
173
- if (timer) {
174
- window.clearTimeout(timer);
175
- timer = 0;
176
- }
177
- setAttr == null ? void 0 : setAttr("caption", value);
178
- };
179
- const onEditLink = (e) => {
180
- const target = e.target;
181
- const value = target.value;
182
- setHidePlaceholder(value.length !== 0);
183
- setCurrentLink(value);
184
- };
185
- const onUpload = async (e) => {
186
- var _a;
187
- const file = (_a = e.target.files) == null ? void 0 : _a[0];
188
- if (!file)
189
- return;
190
- const url = await (config == null ? void 0 : config.onUpload(file));
191
- if (!url)
192
- return;
193
- setAttr == null ? void 0 : setAttr("src", url);
194
- setHidePlaceholder(true);
195
- };
196
- const onToggleCaption = (e) => {
197
- e.preventDefault();
198
- e.stopPropagation();
199
- if (readonly)
200
- return;
201
- setShowCaption((x) => !x);
202
- };
203
- const onConfirmLinkInput = () => {
204
- var _a, _b;
205
- setAttr == null ? void 0 : setAttr("src", (_b = (_a = linkInput.current) == null ? void 0 : _a.value) != null ? _b : "");
206
- };
207
- const onKeydown = (e) => {
208
- if (e.key === "Enter")
209
- onConfirmLinkInput();
210
- };
211
- const preventDrag = (e) => {
212
- e.preventDefault();
213
- e.stopPropagation();
214
- };
215
- const onClickUploader = (e) => {
216
- e.stopPropagation();
217
- e.preventDefault();
218
- };
219
- return atomico.html`<host class=${clsx.clsx(selected && "selected")}>
220
- <div class=${clsx.clsx("image-edit", src.length > 0 && "hidden")}>
221
- <div class="image-icon">
222
- ${config == null ? void 0 : config.imageIcon()}
223
- </div>
224
- <div class=${clsx.clsx("link-importer", focusLinkInput && "focus")}>
225
- <input
226
- ref=${linkInput}
227
- draggable="true"
228
- ondragstart=${preventDrag}
229
- disabled=${readonly}
230
- class="link-input-area"
231
- value=${currentLink}
232
- oninput=${onEditLink}
233
- onkeydown=${onKeydown}
234
- onfocus=${() => setFocusLinkInput(true)}
235
- onblur=${() => setFocusLinkInput(false)}
236
- />
237
- <div class=${clsx.clsx("placeholder", hidePlaceholder && "hidden")}>
238
- <input disabled=${readonly} class="hidden" id=${uuid} type="file" accept="image/*" onchange=${onUpload} />
239
- <label onpointerdown=${onClickUploader} class="uploader" for=${uuid}>
240
- ${config == null ? void 0 : config.uploadButton()}
241
- </label>
242
- <span class="text" onclick=${() => {
243
- var _a;
244
- return (_a = linkInput.current) == null ? void 0 : _a.focus();
245
- }}>
246
- ${config == null ? void 0 : config.uploadPlaceholderText}
247
- </span>
248
- </div>
249
- </div>
250
- <div
251
- class=${clsx.clsx("confirm", currentLink.length === 0 && "hidden")}
252
- onclick=${() => onConfirmLinkInput()}
253
- >
254
- ${config == null ? void 0 : config.confirmButton()}
255
- </div>
256
- </div>
257
- <div class=${clsx.clsx("image-wrapper", src.length === 0 && "hidden")}>
258
- <div class="operation">
259
- <div class="operation-item" onpointerdown=${onToggleCaption}>${config == null ? void 0 : config.captionIcon()}</div>
260
- </div>
261
- <img ref=${image} data-type=${schema.IMAGE_DATA_TYPE} src=${src} alt=${caption} ratio=${ratio} />
262
- <div ref=${resizeHandle} class="image-resize-handle"></div>
263
- </div>
264
- <input
265
- draggable="true"
266
- ondragstart=${preventDrag}
267
- class=${clsx.clsx("caption-input", !showCaption && "hidden")}
268
- placeholder=${config == null ? void 0 : config.captionPlaceholderText}
269
- oninput=${onInput}
270
- onblur=${onBlurCaption}
271
- value=${caption}
272
- />
273
- </host>`;
274
- };
275
- imageComponent.props = {
276
- src: String,
277
- caption: String,
278
- ratio: Number,
279
- selected: Boolean,
280
- readonly: Boolean,
281
- setAttr: Function,
282
- config: Object
283
- };
284
- const ImageElement = atomico.c(imageComponent);
285
-
286
- helper.defIfNotExists("milkdown-image-block", ImageElement);
287
- const imageBlockView = $view.$view(schema.imageBlockSchema.node, (ctx) => {
288
- return (initialNode, view, getPos) => {
289
- const dom = document.createElement("milkdown-image-block");
290
- const config = ctx.get(imageBlockConfig.key);
291
- const bindAttrs = (node) => {
292
- dom.src = node.attrs.src;
293
- dom.ratio = node.attrs.ratio;
294
- dom.caption = node.attrs.caption;
295
- dom.readonly = !view.editable;
296
- };
297
- bindAttrs(initialNode);
298
- dom.selected = false;
299
- dom.setAttr = (attr, value) => {
300
- const pos = getPos();
301
- if (pos == null)
302
- return;
303
- view.dispatch(view.state.tr.setNodeAttribute(pos, attr, value));
304
- };
305
- dom.config = config;
306
- return {
307
- dom,
308
- update: (updatedNode) => {
309
- if (updatedNode.type !== initialNode.type)
310
- return false;
311
- bindAttrs(updatedNode);
312
- return true;
313
- },
314
- stopEvent: (e) => {
315
- if (e.target instanceof HTMLInputElement)
316
- return true;
317
- return false;
318
- },
319
- selectNode: () => {
320
- dom.selected = true;
321
- },
322
- deselectNode: () => {
323
- dom.selected = false;
324
- },
325
- destroy: () => {
326
- dom.remove();
327
- }
328
- };
329
- };
330
- });
331
- meta.withMeta(imageBlockView, {
332
- displayName: "NodeView<image-block>",
333
- group: "ImageBlock"
334
- });
335
-
336
- const imageBlockComponent = [
337
- remarkImageBlockPlugin,
338
- schema.imageBlockSchema,
339
- imageBlockView,
340
- imageBlockConfig
341
- ].flat();
342
-
343
- const defaultInlineImageConfig = {
344
- imageIcon: () => clsx.image,
345
- uploadButton: () => atomico.html`Upload`,
346
- confirmButton: () => atomico.html`⏎`,
347
- uploadPlaceholderText: "/Paste",
348
- onUpload: (file) => Promise.resolve(URL.createObjectURL(file))
349
- };
350
- const inlineImageConfig = index.$ctx(defaultInlineImageConfig, "inlineImageConfigCtx");
351
- meta.withMeta(inlineImageConfig, {
352
- displayName: "Config<image-inline>",
353
- group: "ImageInline"
354
- });
355
-
356
- const inlineImageComponent = ({
357
- src = "",
358
- selected = false,
359
- alt,
360
- title,
361
- setAttr,
362
- config
363
- }) => {
364
- const linkInput = atomico.useRef();
365
- const [uuid] = atomico.useState(crypto.randomUUID());
366
- const [focusLinkInput, setFocusLinkInput] = atomico.useState(false);
367
- const [hidePlaceholder, setHidePlaceholder] = atomico.useState(src.length !== 0);
368
- const [currentLink, setCurrentLink] = atomico.useState(src);
369
- const onEditLink = (e) => {
370
- const target = e.target;
371
- const value = target.value;
372
- setHidePlaceholder(value.length !== 0);
373
- setCurrentLink(value);
374
- };
375
- const onUpload = async (e) => {
376
- var _a;
377
- const file = (_a = e.target.files) == null ? void 0 : _a[0];
378
- if (!file)
379
- return;
380
- const url = await (config == null ? void 0 : config.onUpload(file));
381
- if (!url)
382
- return;
383
- setAttr == null ? void 0 : setAttr("src", url);
384
- setHidePlaceholder(true);
385
- };
386
- const onConfirmLinkInput = () => {
387
- var _a, _b;
388
- setAttr == null ? void 0 : setAttr("src", (_b = (_a = linkInput.current) == null ? void 0 : _a.value) != null ? _b : "");
389
- };
390
- const onKeydown = (e) => {
391
- if (e.key === "Enter")
392
- onConfirmLinkInput();
393
- };
394
- const preventDrag = (e) => {
395
- e.preventDefault();
396
- e.stopPropagation();
397
- };
398
- const onClickUploader = (e) => {
399
- e.stopPropagation();
400
- e.preventDefault();
401
- };
402
- return atomico.html`<host class=${clsx.clsx(selected && "selected", !src && "empty")}>
403
- ${!src ? atomico.html`<div class="empty-image-inline">
404
- <div class="image-icon">
405
- ${config == null ? void 0 : config.imageIcon()}
406
- </div>
407
- <div class=${clsx.clsx("link-importer", focusLinkInput && "focus")}>
408
- <input
409
- draggable="true"
410
- ref=${linkInput}
411
- ondragstart=${preventDrag}
412
- class="link-input-area"
413
- value=${currentLink}
414
- oninput=${onEditLink}
415
- onkeydown=${onKeydown}
416
- onfocus=${() => setFocusLinkInput(true)}
417
- onblur=${() => setFocusLinkInput(false)}
418
- />
419
- <div class=${clsx.clsx("placeholder", hidePlaceholder && "hidden")}>
420
- <input class="hidden" id=${uuid} type="file" accept="image/*" onchange=${onUpload} />
421
- <label onpointerdown=${onClickUploader} class="uploader" for=${uuid}>
422
- ${config == null ? void 0 : config.uploadButton()}
423
- </label>
424
- <span class="text" onclick=${() => {
425
- var _a;
426
- return (_a = linkInput.current) == null ? void 0 : _a.focus();
427
- }}>
428
- ${config == null ? void 0 : config.uploadPlaceholderText}
429
- </span>
430
- </div>
431
- </div>
432
- <div
433
- class=${clsx.clsx("confirm", currentLink.length === 0 && "hidden")}
434
- onclick=${() => onConfirmLinkInput()}
435
- >
436
- ${config == null ? void 0 : config.confirmButton()}
437
- </div>
438
- </div>` : atomico.html`<img class="image-inline" src=${src} alt=${alt} title=${title} />`}
439
- </host>`;
440
- };
441
- inlineImageComponent.props = {
442
- src: String,
443
- alt: String,
444
- title: String,
445
- selected: Boolean,
446
- setAttr: Function,
447
- config: Object
448
- };
449
- const InlineImageElement = atomico.c(inlineImageComponent);
450
-
451
- helper.defIfNotExists("milkdown-image-inline", InlineImageElement);
452
- const inlineImageView = $view.$view(index.imageSchema.node, (ctx) => {
453
- return (initialNode, view, getPos) => {
454
- const dom = document.createElement("milkdown-image-inline");
455
- const config = ctx.get(inlineImageConfig.key);
456
- const bindAttrs = (node) => {
457
- dom.src = node.attrs.src;
458
- dom.alt = node.attrs.alt;
459
- dom.title = node.attrs.title;
460
- };
461
- bindAttrs(initialNode);
462
- dom.selected = false;
463
- dom.setAttr = (attr, value) => {
464
- const pos = getPos();
465
- if (pos == null)
466
- return;
467
- view.dispatch(view.state.tr.setNodeAttribute(pos, attr, value));
468
- };
469
- dom.config = config;
470
- return {
471
- dom,
472
- update: (updatedNode) => {
473
- if (updatedNode.type !== initialNode.type)
474
- return false;
475
- bindAttrs(updatedNode);
476
- return true;
477
- },
478
- stopEvent: (e) => {
479
- if (dom.selected && e.target instanceof HTMLInputElement)
480
- return true;
481
- return false;
482
- },
483
- selectNode: () => {
484
- dom.selected = true;
485
- },
486
- deselectNode: () => {
487
- dom.selected = false;
488
- },
489
- destroy: () => {
490
- dom.remove();
491
- }
492
- };
493
- };
494
- });
495
- meta.withMeta(inlineImageView, {
496
- displayName: "NodeView<image-inline>",
497
- group: "ImageInline"
498
- });
499
-
500
- const imageInlineComponent = [
501
- inlineImageConfig,
502
- inlineImageView
503
- ];
504
-
505
- const imageIcon = atomico.html`
506
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
507
- <g clip-path="url(#clip0_1013_1596)">
508
- <path d="M19 5V19H5V5H19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM14.14 11.86L11.14 15.73L9 13.14L6 17H18L14.14 11.86Z" fill="#817567"/>
509
- </g>
510
- <defs>
511
- <clipPath id="clip0_1013_1596">
512
- <rect width="24" height="24" fill="white"/>
513
- </clipPath>
514
- </defs>
515
- </svg>
516
- `;
517
- const confirmIcon = atomico.html`
518
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
519
- <g clip-path="url(#clip0_1013_1606)">
520
- <path d="M9.00012 16.1998L5.50012 12.6998C5.11012 12.3098 4.49012 12.3098 4.10012 12.6998C3.71012 13.0898 3.71012 13.7098 4.10012 14.0998L8.29012 18.2898C8.68012 18.6798 9.31012 18.6798 9.70012 18.2898L20.3001 7.69982C20.6901 7.30982 20.6901 6.68982 20.3001 6.29982C19.9101 5.90982 19.2901 5.90982 18.9001 6.29982L9.00012 16.1998Z" fill="#817567"/>
521
- </g>
522
- <defs>
523
- <clipPath id="clip0_1013_1606">
524
- <rect width="24" height="24" fill="white"/>
525
- </clipPath>
526
- </defs>
527
- </svg>
528
- `;
529
- const captionIcon = atomico.html`
530
- <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M9 22a1 1 0 0 1-1-1v-3H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6.1l-3.7 3.71c-.2.19-.45.29-.7.29zm1-6v3.08L13.08 16H20V4H4v12z"/></svg>
531
- `;
532
- const defineFeature = (editor) => {
533
- editor.config((ctx) => {
534
- ctx.update(inlineImageConfig.key, (value) => ({
535
- ...value,
536
- imageIcon: () => imageIcon,
537
- confirmButton: () => confirmIcon,
538
- uploadPlaceholderText: "or paste link"
539
- }));
540
- ctx.update(imageBlockConfig.key, (value) => ({
541
- ...value,
542
- imageIcon: () => imageIcon,
543
- captionIcon: () => captionIcon,
544
- confirmButton: () => atomico.html`Confirm`,
545
- captionPlaceholderText: "Write Image Caption"
546
- }));
547
- }).use(imageBlockComponent).use(imageInlineComponent);
548
- };
549
-
550
- exports.defineFeature = defineFeature;
551
- //# sourceMappingURL=index-2oxl5Zo4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-2oxl5Zo4.js","sources":["../../../components/src/image-block/remark-plugin.ts","../../../components/src/image-block/config.ts","../../../components/src/image-block/view/event.ts","../../../components/src/image-block/view/component.ts","../../../components/src/image-block/view/index.ts","../../../components/src/image-block/index.ts","../../../components/src/image-inline/config.ts","../../../components/src/image-inline/component.ts","../../../components/src/image-inline/view.ts","../../../components/src/image-inline/index.ts","../../src/feature/image-block/index.ts"],"sourcesContent":["import type { Node } from '@milkdown/transformer'\nimport { visit } from 'unist-util-visit'\nimport { $remark } from '@milkdown/utils'\nimport { withMeta } from '../__internal__/meta'\n\nfunction visitImage(ast: Node) {\n return visit(ast, 'paragraph', (node: Node & { children?: Node[] }, index: number, parent: Node & { children: Node[] }) => {\n if (node.children?.length !== 1)\n return\n const firstChild = node.children?.[0]\n if (!firstChild || firstChild.type !== 'image')\n return\n\n const { url, alt, title } = firstChild as Node & { url: string, alt: string, title: string }\n const newNode = {\n type: 'image-block',\n url,\n alt,\n title,\n }\n\n parent.children.splice(index, 1, newNode)\n })\n}\n\nexport const remarkImageBlockPlugin = $remark('remark-image-block', () => () => visitImage)\n\nwithMeta(remarkImageBlockPlugin.plugin, {\n displayName: 'Remark<remarkImageBlock>',\n group: 'ImageBlock',\n})\n\nwithMeta(remarkImageBlockPlugin.options, {\n displayName: 'RemarkConfig<remarkImageBlock>',\n group: 'ImageBlock',\n})\n","import { $ctx } from '@milkdown/utils'\nimport { html } from 'atomico'\nimport { chatBubble, image } from '../__internal__/icons'\nimport { withMeta } from '../__internal__/meta'\n\nexport interface ImageBlockConfig {\n imageIcon: () => ReturnType<typeof html>\n captionIcon: () => ReturnType<typeof html>\n uploadButton: () => ReturnType<typeof html>\n confirmButton: () => ReturnType<typeof html>\n uploadPlaceholderText: string\n captionPlaceholderText: string\n onUpload: (file: File) => Promise<string>\n}\n\nexport const defaultImageBlockConfig: ImageBlockConfig = {\n imageIcon: () => image,\n captionIcon: () => chatBubble,\n uploadButton: () => html`Upload file`,\n confirmButton: () => html`Confirm ⏎`,\n uploadPlaceholderText: 'or paste the image link ...',\n captionPlaceholderText: 'Image caption',\n onUpload: file => Promise.resolve(URL.createObjectURL(file)),\n}\n\nexport const imageBlockConfig = $ctx(defaultImageBlockConfig, 'imageBlockConfigCtx')\n\nwithMeta(imageBlockConfig, {\n displayName: 'Config<image-block>',\n group: 'ImageBlock',\n})\n","import { type Ref, useEffect, useHost, useMemo } from 'atomico'\n\ninterface Options {\n image: Ref<HTMLImageElement>\n resizeHandle: Ref<HTMLDivElement>\n ratio: number\n setRatio: (ratio: number) => void\n src: string\n}\n\nexport function useBlockEffect({\n image,\n resizeHandle,\n ratio,\n setRatio,\n src,\n}: Options) {\n const host = useHost()\n const root = useMemo(() => host.current.getRootNode() as HTMLElement, [host])\n\n useEffect(() => {\n const imageRef = image.current\n if (!imageRef)\n return\n\n delete imageRef.dataset.origin\n delete imageRef.dataset.height\n imageRef.style.height = ''\n }, [src])\n\n useEffect(() => {\n const resizeHandleRef = resizeHandle.current\n const imageRef = image.current\n if (!resizeHandleRef || !imageRef)\n return\n const onMove = (e: PointerEvent) => {\n e.preventDefault()\n const top = imageRef.getBoundingClientRect().top\n const height = e.clientY - top\n const h = Number(height < 100 ? 100 : height).toFixed(2)\n imageRef.dataset.height = h\n imageRef.style.height = `${h}px`\n }\n const pointerUp = () => {\n root.removeEventListener('pointermove', onMove)\n root.removeEventListener('pointerup', pointerUp)\n const originHeight = Number(imageRef.dataset.origin)\n const currentHeight = Number(imageRef.dataset.height)\n const ratio = Number.parseFloat(Number(currentHeight / originHeight).toFixed(2))\n if (Number.isNaN(ratio))\n return\n\n setRatio(ratio)\n }\n\n const pointerDown = (e: PointerEvent) => {\n e.preventDefault()\n root.addEventListener('pointermove', onMove)\n root.addEventListener('pointerup', pointerUp)\n }\n\n const onLoad = (e: Event) => {\n const maxWidth = host.current.getBoundingClientRect().width\n if (!maxWidth)\n return\n\n const target = e.target as HTMLImageElement\n const height = target.height\n const width = target.width\n const transformedHeight = width < maxWidth ? height : maxWidth * (height / width)\n const h = (transformedHeight * ratio).toFixed(2)\n imageRef.dataset.origin = transformedHeight.toFixed(2)\n imageRef.dataset.height = h\n imageRef.style.height = `${h}px`\n }\n\n imageRef.addEventListener('load', onLoad)\n resizeHandleRef.addEventListener('pointerdown', pointerDown)\n return () => {\n imageRef.removeEventListener('load', onLoad)\n resizeHandleRef.removeEventListener('pointerdown', pointerDown)\n }\n }, [])\n}\n","import type { Component } from 'atomico'\nimport { c, html, useEffect, useRef, useState } from 'atomico'\nimport clsx from 'clsx'\nimport type { ImageBlockConfig } from '../config'\nimport { IMAGE_DATA_TYPE } from '../schema'\nimport { useBlockEffect } from './event'\n\nexport interface Attrs {\n src: string\n caption: string\n ratio: number\n}\n\nexport type ImageComponentProps = Attrs & {\n config: ImageBlockConfig\n selected: boolean\n readonly: boolean\n setAttr: <T extends keyof Attrs>(attr: T, value: Attrs[T]) => void\n}\n\nlet timer: number = 0\n\nexport const imageComponent: Component<ImageComponentProps> = ({\n src = '',\n caption = '',\n ratio = 1,\n selected = false,\n readonly = false,\n setAttr,\n config,\n}) => {\n const image = useRef<HTMLImageElement>()\n const resizeHandle = useRef<HTMLDivElement>()\n const linkInput = useRef<HTMLInputElement>()\n const [showCaption, setShowCaption] = useState(caption.length > 0)\n const [hidePlaceholder, setHidePlaceholder] = useState(src.length !== 0)\n const [uuid] = useState(crypto.randomUUID())\n const [focusLinkInput, setFocusLinkInput] = useState(false)\n const [currentLink, setCurrentLink] = useState(src)\n\n useBlockEffect({\n image,\n resizeHandle,\n ratio,\n setRatio: r => setAttr?.('ratio', r),\n src,\n })\n\n useEffect(() => {\n if (selected)\n return\n\n setShowCaption(caption.length > 0)\n }, [selected])\n\n const onInput = (e: InputEvent) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n if (timer)\n window.clearTimeout(timer)\n\n timer = window.setTimeout(() => {\n setAttr?.('caption', value)\n }, 1000)\n }\n\n const onBlurCaption = (e: InputEvent) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n if (timer) {\n window.clearTimeout(timer)\n timer = 0\n }\n\n setAttr?.('caption', value)\n }\n\n const onEditLink = (e: InputEvent) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n setHidePlaceholder(value.length !== 0)\n setCurrentLink(value)\n }\n\n const onUpload = async (e: InputEvent) => {\n const file = (e.target as HTMLInputElement).files?.[0]\n if (!file)\n return\n\n const url = await config?.onUpload(file)\n if (!url)\n return\n\n setAttr?.('src', url)\n setHidePlaceholder(true)\n }\n\n const onToggleCaption = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n if (readonly)\n return\n setShowCaption(x => !x)\n }\n\n const onConfirmLinkInput = () => {\n setAttr?.('src', linkInput.current?.value ?? '')\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter')\n onConfirmLinkInput()\n }\n\n const preventDrag = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n }\n\n const onClickUploader = (e: PointerEvent) => {\n e.stopPropagation()\n e.preventDefault()\n }\n\n return html`<host class=${clsx(selected && 'selected')}>\n <div class=${clsx('image-edit', src.length > 0 && 'hidden')}>\n <div class=\"image-icon\">\n ${config?.imageIcon()}\n </div>\n <div class=${clsx('link-importer', focusLinkInput && 'focus')}>\n <input\n ref=${linkInput}\n draggable=\"true\"\n ondragstart=${preventDrag}\n disabled=${readonly}\n class=\"link-input-area\"\n value=${currentLink}\n oninput=${onEditLink}\n onkeydown=${onKeydown}\n onfocus=${() => setFocusLinkInput(true)}\n onblur=${() => setFocusLinkInput(false)}\n />\n <div class=${clsx('placeholder', hidePlaceholder && 'hidden')}>\n <input disabled=${readonly} class=\"hidden\" id=${uuid} type=\"file\" accept=\"image/*\" onchange=${onUpload} />\n <label onpointerdown=${onClickUploader} class=\"uploader\" for=${uuid}>\n ${config?.uploadButton()}\n </label>\n <span class=\"text\" onclick=${() => linkInput.current?.focus()}>\n ${config?.uploadPlaceholderText}\n </span>\n </div>\n </div>\n <div\n class=${clsx('confirm', currentLink.length === 0 && 'hidden')}\n onclick=${() => onConfirmLinkInput()}\n >\n ${config?.confirmButton()}\n </div>\n </div>\n <div class=${clsx('image-wrapper', src.length === 0 && 'hidden')}>\n <div class=\"operation\">\n <div class=\"operation-item\" onpointerdown=${onToggleCaption}>${config?.captionIcon()}</div>\n </div>\n <img ref=${image} data-type=${IMAGE_DATA_TYPE} src=${src} alt=${caption} ratio=${ratio} />\n <div ref=${resizeHandle} class=\"image-resize-handle\"></div>\n </div>\n <input\n draggable=\"true\"\n ondragstart=${preventDrag}\n class=${clsx('caption-input', !showCaption && 'hidden')}\n placeholder=${config?.captionPlaceholderText}\n oninput=${onInput}\n onblur=${onBlurCaption}\n value=${caption}\n />\n </host>`\n}\n\nimageComponent.props = {\n src: String,\n caption: String,\n ratio: Number,\n selected: Boolean,\n readonly: Boolean,\n setAttr: Function,\n config: Object,\n}\n\nexport const ImageElement = c(imageComponent)\n","import { $view } from '@milkdown/utils'\nimport type { NodeViewConstructor } from '@milkdown/prose/view'\nimport type { Node } from '@milkdown/prose/model'\nimport { imageBlockSchema } from '../schema'\nimport { imageBlockConfig } from '../config'\nimport { withMeta } from '../../__internal__/meta'\nimport { defIfNotExists } from '../../__internal__/helper'\nimport type { ImageComponentProps } from './component'\nimport { ImageElement } from './component'\n\ndefIfNotExists('milkdown-image-block', ImageElement)\nexport const imageBlockView = $view(imageBlockSchema.node, (ctx): NodeViewConstructor => {\n return (initialNode, view, getPos) => {\n const dom = document.createElement('milkdown-image-block') as HTMLElement & ImageComponentProps\n const config = ctx.get(imageBlockConfig.key)\n const bindAttrs = (node: Node) => {\n dom.src = node.attrs.src\n dom.ratio = node.attrs.ratio\n dom.caption = node.attrs.caption\n\n dom.readonly = !view.editable\n }\n\n bindAttrs(initialNode)\n dom.selected = false\n dom.setAttr = (attr, value) => {\n const pos = getPos()\n if (pos == null)\n return\n\n view.dispatch(view.state.tr.setNodeAttribute(pos, attr, value))\n }\n dom.config = config\n return {\n dom,\n update: (updatedNode) => {\n if (updatedNode.type !== initialNode.type)\n return false\n\n bindAttrs(updatedNode)\n return true\n },\n stopEvent: (e) => {\n if (e.target instanceof HTMLInputElement)\n return true\n\n return false\n },\n selectNode: () => {\n dom.selected = true\n },\n deselectNode: () => {\n dom.selected = false\n },\n destroy: () => {\n dom.remove()\n },\n }\n }\n})\n\nwithMeta(imageBlockView, {\n displayName: 'NodeView<image-block>',\n group: 'ImageBlock',\n})\n","import type { MilkdownPlugin } from '@milkdown/ctx'\nimport { imageBlockSchema } from './schema'\nimport { remarkImageBlockPlugin } from './remark-plugin'\nimport { imageBlockView } from './view'\nimport { imageBlockConfig } from './config'\n\nexport * from './schema'\nexport * from './remark-plugin'\nexport * from './config'\nexport * from './view'\n\nexport const imageBlockComponent: MilkdownPlugin[] = [\n remarkImageBlockPlugin,\n imageBlockSchema,\n imageBlockView,\n imageBlockConfig,\n].flat()\n","import { $ctx } from '@milkdown/utils'\nimport { html } from 'atomico'\nimport { image } from '../__internal__/icons'\nimport { withMeta } from '../__internal__/meta'\n\nexport interface InlineImageConfig {\n imageIcon: () => ReturnType<typeof html>\n uploadButton: () => ReturnType<typeof html>\n confirmButton: () => ReturnType<typeof html>\n uploadPlaceholderText: string\n onUpload: (file: File) => Promise<string>\n}\n\nexport const defaultInlineImageConfig: InlineImageConfig = {\n imageIcon: () => image,\n uploadButton: () => html`Upload`,\n confirmButton: () => html`⏎`,\n uploadPlaceholderText: '/Paste',\n onUpload: file => Promise.resolve(URL.createObjectURL(file)),\n}\n\nexport const inlineImageConfig = $ctx(defaultInlineImageConfig, 'inlineImageConfigCtx')\n\nwithMeta(inlineImageConfig, {\n displayName: 'Config<image-inline>',\n group: 'ImageInline',\n})\n","import { c, html, useRef, useState } from 'atomico'\nimport type { Component } from 'atomico'\nimport clsx from 'clsx'\nimport type { InlineImageConfig } from './config'\n\nexport interface Attrs {\n src: string\n alt: string\n title: string\n}\n\nexport type InlineImageComponentProps = Attrs & {\n setAttr: <T extends keyof Attrs>(attr: T, value: Attrs[T]) => void\n selected: boolean\n config: InlineImageConfig\n}\n\nexport const inlineImageComponent: Component<InlineImageComponentProps> = ({\n src = '',\n selected = false,\n alt,\n title,\n setAttr,\n config,\n}) => {\n const linkInput = useRef<HTMLInputElement>()\n const [uuid] = useState(crypto.randomUUID())\n const [focusLinkInput, setFocusLinkInput] = useState(false)\n const [hidePlaceholder, setHidePlaceholder] = useState(src.length !== 0)\n const [currentLink, setCurrentLink] = useState(src)\n\n const onEditLink = (e: InputEvent) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n setHidePlaceholder(value.length !== 0)\n setCurrentLink(value)\n }\n\n const onUpload = async (e: InputEvent) => {\n const file = (e.target as HTMLInputElement).files?.[0]\n if (!file)\n return\n\n const url = await config?.onUpload(file)\n if (!url)\n return\n\n setAttr?.('src', url)\n setHidePlaceholder(true)\n }\n\n const onConfirmLinkInput = () => {\n setAttr?.('src', linkInput.current?.value ?? '')\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter')\n onConfirmLinkInput()\n }\n\n const preventDrag = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n }\n\n const onClickUploader = (e: PointerEvent) => {\n e.stopPropagation()\n e.preventDefault()\n }\n\n return html`<host class=${clsx(selected && 'selected', !src && 'empty')}>\n ${!src\n ? html`<div class=\"empty-image-inline\">\n <div class=\"image-icon\">\n ${config?.imageIcon()}\n </div>\n <div class=${clsx('link-importer', focusLinkInput && 'focus')}>\n <input\n draggable=\"true\"\n ref=${linkInput}\n ondragstart=${preventDrag}\n class=\"link-input-area\"\n value=${currentLink}\n oninput=${onEditLink}\n onkeydown=${onKeydown}\n onfocus=${() => setFocusLinkInput(true)}\n onblur=${() => setFocusLinkInput(false)}\n />\n <div class=${clsx('placeholder', hidePlaceholder && 'hidden')}>\n <input class=\"hidden\" id=${uuid} type=\"file\" accept=\"image/*\" onchange=${onUpload} />\n <label onpointerdown=${onClickUploader} class=\"uploader\" for=${uuid}>\n ${config?.uploadButton()}\n </label>\n <span class=\"text\" onclick=${() => linkInput.current?.focus()}>\n ${config?.uploadPlaceholderText}\n </span>\n </div>\n </div>\n <div\n class=${clsx('confirm', currentLink.length === 0 && 'hidden')}\n onclick=${() => onConfirmLinkInput()}\n >\n ${config?.confirmButton()}\n </div>\n </div>`\n : html`<img class=\"image-inline\" src=${src} alt=${alt} title=${title} />`\n }\n </host>`\n}\n\ninlineImageComponent.props = {\n src: String,\n alt: String,\n title: String,\n selected: Boolean,\n setAttr: Function,\n config: Object,\n}\n\nexport const InlineImageElement = c(inlineImageComponent)\n","import { $view } from '@milkdown/utils'\nimport type { NodeViewConstructor } from '@milkdown/prose/view'\nimport { imageSchema } from '@milkdown/preset-commonmark'\nimport type { Node } from '@milkdown/prose/model'\nimport { withMeta } from '../__internal__/meta'\nimport { defIfNotExists } from '../__internal__/helper'\nimport type { InlineImageComponentProps } from './component'\nimport { InlineImageElement } from './component'\nimport { inlineImageConfig } from './config'\n\ndefIfNotExists('milkdown-image-inline', InlineImageElement)\nexport const inlineImageView = $view(imageSchema.node, (ctx): NodeViewConstructor => {\n return (initialNode, view, getPos) => {\n const dom = document.createElement('milkdown-image-inline') as HTMLElement & InlineImageComponentProps\n const config = ctx.get(inlineImageConfig.key)\n const bindAttrs = (node: Node) => {\n dom.src = node.attrs.src\n dom.alt = node.attrs.alt\n dom.title = node.attrs.title\n }\n bindAttrs(initialNode)\n dom.selected = false\n dom.setAttr = (attr, value) => {\n const pos = getPos()\n if (pos == null)\n return\n\n view.dispatch(view.state.tr.setNodeAttribute(pos, attr, value))\n }\n dom.config = config\n return {\n dom,\n update: (updatedNode) => {\n if (updatedNode.type !== initialNode.type)\n return false\n\n bindAttrs(updatedNode)\n return true\n },\n stopEvent: (e) => {\n if (dom.selected && e.target instanceof HTMLInputElement)\n return true\n\n return false\n },\n selectNode: () => {\n dom.selected = true\n },\n deselectNode: () => {\n dom.selected = false\n },\n destroy: () => {\n dom.remove()\n },\n }\n }\n})\n\nwithMeta(inlineImageView, {\n displayName: 'NodeView<image-inline>',\n group: 'ImageInline',\n})\n","import type { MilkdownPlugin } from '@milkdown/ctx'\nimport { inlineImageConfig } from './config'\nimport { inlineImageView } from './view'\n\nexport * from './config'\nexport * from './view'\n\nexport const imageInlineComponent: MilkdownPlugin[] = [\n inlineImageConfig,\n inlineImageView,\n]\n","import { imageBlockComponent, imageBlockConfig } from '@milkdown/components/image-block'\nimport { imageInlineComponent, inlineImageConfig } from '@milkdown/components/image-inline'\nimport { html } from 'atomico'\nimport type { DefineFeature } from '../shared'\n\nconst imageIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <g clip-path=\"url(#clip0_1013_1596)\">\n <path d=\"M19 5V19H5V5H19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM14.14 11.86L11.14 15.73L9 13.14L6 17H18L14.14 11.86Z\" fill=\"#817567\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_1013_1596\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n`\n\nconst confirmIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <g clip-path=\"url(#clip0_1013_1606)\">\n <path d=\"M9.00012 16.1998L5.50012 12.6998C5.11012 12.3098 4.49012 12.3098 4.10012 12.6998C3.71012 13.0898 3.71012 13.7098 4.10012 14.0998L8.29012 18.2898C8.68012 18.6798 9.31012 18.6798 9.70012 18.2898L20.3001 7.69982C20.6901 7.30982 20.6901 6.68982 20.3001 6.29982C19.9101 5.90982 19.2901 5.90982 18.9001 6.29982L9.00012 16.1998Z\" fill=\"#817567\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_1013_1606\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n`\n\nconst captionIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M9 22a1 1 0 0 1-1-1v-3H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6.1l-3.7 3.71c-.2.19-.45.29-.7.29zm1-6v3.08L13.08 16H20V4H4v12z\"/></svg>\n`\n\nexport const defineFeature: DefineFeature = (editor) => {\n editor\n .config((ctx) => {\n ctx.update(inlineImageConfig.key, value => ({\n ...value,\n imageIcon: () => imageIcon,\n confirmButton: () => confirmIcon,\n uploadPlaceholderText: 'or paste link',\n }))\n ctx.update(imageBlockConfig.key, value => ({\n ...value,\n imageIcon: () => imageIcon,\n captionIcon: () => captionIcon,\n confirmButton: () => html`Confirm`,\n captionPlaceholderText: 'Write Image Caption',\n }))\n })\n .use(imageBlockComponent)\n .use(imageInlineComponent)\n}\n"],"names":["visit","$remark","withMeta","image","chatBubble","html","$ctx","useHost","useMemo","useEffect","ratio","useRef","useState","clsx","IMAGE_DATA_TYPE","c","defIfNotExists","$view","imageBlockSchema","imageSchema"],"mappings":"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"}