@milkdown/crepe 7.8.0 → 7.9.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 (304) hide show
  1. package/lib/cjs/confirm-CNveM9QH.js +26 -0
  2. package/lib/cjs/confirm-CNveM9QH.js.map +1 -0
  3. package/lib/cjs/edit-BUtBJHpV.js +24 -0
  4. package/lib/cjs/edit-BUtBJHpV.js.map +1 -0
  5. package/lib/cjs/functions-BAY51plB.js +39 -0
  6. package/lib/cjs/functions-BAY51plB.js.map +1 -0
  7. package/lib/cjs/image-BXLkOVnO.js +24 -0
  8. package/lib/cjs/image-BXLkOVnO.js.map +1 -0
  9. package/lib/cjs/{index-DAiGM2G1.js → index-B7gqgc1H.js} +484 -204
  10. package/lib/cjs/index-B7gqgc1H.js.map +1 -0
  11. package/lib/cjs/{index-Dub20F3z.js → index-B91KhPew.js} +4 -4
  12. package/lib/cjs/index-B91KhPew.js.map +1 -0
  13. package/lib/cjs/{index-nrFkJeLW.js → index-BsrJn8Jp.js} +22 -7
  14. package/lib/cjs/index-BsrJn8Jp.js.map +1 -0
  15. package/lib/cjs/{index-BReSN-JQ.js → index-C2CAbC2F.js} +2 -2
  16. package/lib/cjs/{index-BReSN-JQ.js.map → index-C2CAbC2F.js.map} +1 -1
  17. package/lib/cjs/{index-CGies6Iv.js → index-CnyNb_OH.js} +45 -45
  18. package/lib/cjs/index-CnyNb_OH.js.map +1 -0
  19. package/lib/cjs/{index-CJdEvN3_.js → index-CoTb-QdE.js} +123 -105
  20. package/lib/cjs/index-CoTb-QdE.js.map +1 -0
  21. package/lib/cjs/index-DEs_IHHy.js +91 -0
  22. package/lib/cjs/index-DEs_IHHy.js.map +1 -0
  23. package/lib/cjs/index-DGAwtnNK.js +349 -0
  24. package/lib/cjs/index-DGAwtnNK.js.map +1 -0
  25. package/lib/cjs/index-DLIudQKW.js +126 -0
  26. package/lib/cjs/index-DLIudQKW.js.map +1 -0
  27. package/lib/cjs/index-Dw6lXgs6.js +81 -0
  28. package/lib/cjs/index-Dw6lXgs6.js.map +1 -0
  29. package/lib/cjs/{index-AlHHvSR_.js → index-xbwf60wt.js} +1 -6
  30. package/lib/cjs/{index-AlHHvSR_.js.map → index-xbwf60wt.js.map} +1 -1
  31. package/lib/cjs/{index-CvmlYYXX.js → index-xbxqAqH2.js} +21 -7
  32. package/lib/cjs/index-xbxqAqH2.js.map +1 -0
  33. package/lib/cjs/index.js +6 -6
  34. package/lib/cjs/plus-XLomtlXf.js +24 -0
  35. package/lib/cjs/plus-XLomtlXf.js.map +1 -0
  36. package/lib/cjs/remove-Ba-ypwBf.js +17 -0
  37. package/lib/cjs/remove-Ba-ypwBf.js.map +1 -0
  38. package/lib/esm/confirm-DtE-HkVd.js +24 -0
  39. package/lib/esm/confirm-DtE-HkVd.js.map +1 -0
  40. package/lib/esm/edit-D--t_JAb.js +22 -0
  41. package/lib/esm/edit-D--t_JAb.js.map +1 -0
  42. package/lib/esm/functions-DlJPkGmE.js +36 -0
  43. package/lib/esm/functions-DlJPkGmE.js.map +1 -0
  44. package/lib/esm/image-DoB1o1sl.js +22 -0
  45. package/lib/esm/image-DoB1o1sl.js.map +1 -0
  46. package/lib/esm/index-BAQT-9au.js +347 -0
  47. package/lib/esm/index-BAQT-9au.js.map +1 -0
  48. package/lib/esm/{index-DOrkOhki.js → index-BCvtgOeI.js} +4 -4
  49. package/lib/esm/index-BCvtgOeI.js.map +1 -0
  50. package/lib/esm/{index-x2oo_GmY.js → index-BDZ_pnSv.js} +122 -104
  51. package/lib/esm/index-BDZ_pnSv.js.map +1 -0
  52. package/lib/esm/{index-D6fLMv29.js → index-BPG8iO8t.js} +2 -6
  53. package/lib/esm/{index-D6fLMv29.js.map → index-BPG8iO8t.js.map} +1 -1
  54. package/lib/esm/{index-DcRgwPLd.js → index-BUBXHhHG.js} +18 -3
  55. package/lib/esm/index-BUBXHhHG.js.map +1 -0
  56. package/lib/esm/{index-CsYl2WR5.js → index-Bvz1Yyiz.js} +2 -2
  57. package/lib/esm/{index-CsYl2WR5.js.map → index-Bvz1Yyiz.js.map} +1 -1
  58. package/lib/esm/index-C1aVAv1l.js +124 -0
  59. package/lib/esm/index-C1aVAv1l.js.map +1 -0
  60. package/lib/esm/{index-CEOsxgzJ.js → index-CM4urRY9.js} +470 -190
  61. package/lib/esm/index-CM4urRY9.js.map +1 -0
  62. package/lib/esm/{index-BFsG6770.js → index-ChR5Qhyf.js} +17 -3
  63. package/lib/esm/index-ChR5Qhyf.js.map +1 -0
  64. package/lib/esm/index-CwMVnVeI.js +89 -0
  65. package/lib/esm/index-CwMVnVeI.js.map +1 -0
  66. package/lib/esm/{index-BwTxn2hs.js → index-Dc_wWopW.js} +46 -46
  67. package/lib/esm/index-Dc_wWopW.js.map +1 -0
  68. package/lib/esm/index-E8UgFLeN.js +79 -0
  69. package/lib/esm/index-E8UgFLeN.js.map +1 -0
  70. package/lib/esm/index.js +6 -6
  71. package/lib/esm/plus-lrX0Q75O.js +22 -0
  72. package/lib/esm/plus-lrX0Q75O.js.map +1 -0
  73. package/lib/esm/remove-D3g0Cd6_.js +15 -0
  74. package/lib/esm/remove-D3g0Cd6_.js.map +1 -0
  75. package/lib/theme/_internal/classic-common.css +6 -0
  76. package/lib/theme/common/block-edit.css +23 -23
  77. package/lib/theme/common/code-mirror.css +43 -44
  78. package/lib/theme/common/image-block.css +79 -81
  79. package/lib/theme/common/latex.css +6 -6
  80. package/lib/theme/common/link-tooltip.css +21 -21
  81. package/lib/theme/common/list-item.css +11 -10
  82. package/lib/theme/common/table.css +39 -39
  83. package/lib/theme/common/toolbar.css +8 -8
  84. package/lib/tsconfig.tsbuildinfo +1 -0
  85. package/lib/types/core/crepe.d.ts +6 -6
  86. package/lib/types/core/crepe.d.ts.map +1 -1
  87. package/lib/types/core/slice.d.ts.map +1 -1
  88. package/lib/types/feature/block-edit/handle/component.d.ts +4 -8
  89. package/lib/types/feature/block-edit/handle/component.d.ts.map +1 -1
  90. package/lib/types/feature/block-edit/handle/index.d.ts +1 -1
  91. package/lib/types/feature/block-edit/handle/index.d.ts.map +1 -1
  92. package/lib/types/feature/block-edit/index.d.ts.map +1 -1
  93. package/lib/types/feature/block-edit/menu/component.d.ts +8 -11
  94. package/lib/types/feature/block-edit/menu/component.d.ts.map +1 -1
  95. package/lib/types/feature/block-edit/menu/config.d.ts.map +1 -1
  96. package/lib/types/feature/block-edit/menu/index.d.ts.map +1 -1
  97. package/lib/types/feature/block-edit/menu/utils.d.ts +2 -3
  98. package/lib/types/feature/block-edit/menu/utils.d.ts.map +1 -1
  99. package/lib/types/feature/code-mirror/index.d.ts +3 -4
  100. package/lib/types/feature/code-mirror/index.d.ts.map +1 -1
  101. package/lib/types/feature/cursor/index.d.ts.map +1 -1
  102. package/lib/types/feature/image-block/index.d.ts.map +1 -1
  103. package/lib/types/feature/index.d.ts +4 -4
  104. package/lib/types/feature/index.d.ts.map +1 -1
  105. package/lib/types/feature/latex/index.d.ts.map +1 -1
  106. package/lib/types/feature/latex/inline-tooltip/component.d.ts +6 -10
  107. package/lib/types/feature/latex/inline-tooltip/component.d.ts.map +1 -1
  108. package/lib/types/feature/latex/inline-tooltip/view.d.ts.map +1 -1
  109. package/lib/types/feature/latex/input-rule.d.ts.map +1 -1
  110. package/lib/types/feature/latex/remark.d.ts.map +1 -1
  111. package/lib/types/feature/link-tooltip/index.d.ts.map +1 -1
  112. package/lib/types/feature/list-item/index.d.ts.map +1 -1
  113. package/lib/types/feature/placeholder/index.d.ts.map +1 -1
  114. package/lib/types/feature/shared.d.ts +1 -2
  115. package/lib/types/feature/shared.d.ts.map +1 -1
  116. package/lib/types/feature/table/index.d.ts.map +1 -1
  117. package/lib/types/feature/toolbar/component.d.ts +9 -12
  118. package/lib/types/feature/toolbar/component.d.ts.map +1 -1
  119. package/lib/types/feature/toolbar/index.d.ts.map +1 -1
  120. package/lib/types/icons/align-center.d.ts +1 -1
  121. package/lib/types/icons/align-center.d.ts.map +1 -1
  122. package/lib/types/icons/align-left.d.ts +1 -1
  123. package/lib/types/icons/align-left.d.ts.map +1 -1
  124. package/lib/types/icons/align-right.d.ts +1 -1
  125. package/lib/types/icons/align-right.d.ts.map +1 -1
  126. package/lib/types/icons/bold.d.ts +1 -1
  127. package/lib/types/icons/bold.d.ts.map +1 -1
  128. package/lib/types/icons/bullet-list.d.ts +1 -1
  129. package/lib/types/icons/bullet-list.d.ts.map +1 -1
  130. package/lib/types/icons/bullet.d.ts +1 -1
  131. package/lib/types/icons/bullet.d.ts.map +1 -1
  132. package/lib/types/icons/caption.d.ts +1 -1
  133. package/lib/types/icons/caption.d.ts.map +1 -1
  134. package/lib/types/icons/check-box-checked.d.ts +1 -1
  135. package/lib/types/icons/check-box-checked.d.ts.map +1 -1
  136. package/lib/types/icons/check-box-unchecked.d.ts +1 -1
  137. package/lib/types/icons/check-box-unchecked.d.ts.map +1 -1
  138. package/lib/types/icons/chevron-down.d.ts +1 -1
  139. package/lib/types/icons/chevron-down.d.ts.map +1 -1
  140. package/lib/types/icons/clear.d.ts +1 -1
  141. package/lib/types/icons/clear.d.ts.map +1 -1
  142. package/lib/types/icons/code.d.ts +1 -1
  143. package/lib/types/icons/code.d.ts.map +1 -1
  144. package/lib/types/icons/confirm.d.ts +1 -1
  145. package/lib/types/icons/confirm.d.ts.map +1 -1
  146. package/lib/types/icons/copy.d.ts +1 -1
  147. package/lib/types/icons/copy.d.ts.map +1 -1
  148. package/lib/types/icons/divider.d.ts +1 -1
  149. package/lib/types/icons/divider.d.ts.map +1 -1
  150. package/lib/types/icons/drag-handle.d.ts +1 -1
  151. package/lib/types/icons/drag-handle.d.ts.map +1 -1
  152. package/lib/types/icons/edit.d.ts +1 -1
  153. package/lib/types/icons/edit.d.ts.map +1 -1
  154. package/lib/types/icons/functions.d.ts +1 -1
  155. package/lib/types/icons/functions.d.ts.map +1 -1
  156. package/lib/types/icons/h1.d.ts +1 -1
  157. package/lib/types/icons/h1.d.ts.map +1 -1
  158. package/lib/types/icons/h2.d.ts +1 -1
  159. package/lib/types/icons/h2.d.ts.map +1 -1
  160. package/lib/types/icons/h3.d.ts +1 -1
  161. package/lib/types/icons/h3.d.ts.map +1 -1
  162. package/lib/types/icons/h4.d.ts +1 -1
  163. package/lib/types/icons/h4.d.ts.map +1 -1
  164. package/lib/types/icons/h5.d.ts +1 -1
  165. package/lib/types/icons/h5.d.ts.map +1 -1
  166. package/lib/types/icons/h6.d.ts +1 -1
  167. package/lib/types/icons/h6.d.ts.map +1 -1
  168. package/lib/types/icons/image.d.ts +1 -1
  169. package/lib/types/icons/image.d.ts.map +1 -1
  170. package/lib/types/icons/italic.d.ts +1 -1
  171. package/lib/types/icons/italic.d.ts.map +1 -1
  172. package/lib/types/icons/link.d.ts +1 -1
  173. package/lib/types/icons/link.d.ts.map +1 -1
  174. package/lib/types/icons/menu.d.ts +1 -1
  175. package/lib/types/icons/menu.d.ts.map +1 -1
  176. package/lib/types/icons/ordered-list.d.ts +1 -1
  177. package/lib/types/icons/ordered-list.d.ts.map +1 -1
  178. package/lib/types/icons/plus.d.ts +1 -1
  179. package/lib/types/icons/plus.d.ts.map +1 -1
  180. package/lib/types/icons/quote.d.ts +1 -1
  181. package/lib/types/icons/quote.d.ts.map +1 -1
  182. package/lib/types/icons/remove.d.ts +1 -1
  183. package/lib/types/icons/remove.d.ts.map +1 -1
  184. package/lib/types/icons/search.d.ts +1 -1
  185. package/lib/types/icons/search.d.ts.map +1 -1
  186. package/lib/types/icons/strikethrough.d.ts +1 -1
  187. package/lib/types/icons/strikethrough.d.ts.map +1 -1
  188. package/lib/types/icons/table.d.ts +1 -1
  189. package/lib/types/icons/table.d.ts.map +1 -1
  190. package/lib/types/icons/text.d.ts +1 -1
  191. package/lib/types/icons/text.d.ts.map +1 -1
  192. package/lib/types/icons/todo-list.d.ts +1 -1
  193. package/lib/types/icons/todo-list.d.ts.map +1 -1
  194. package/lib/types/icons/visibility-off.d.ts +1 -1
  195. package/lib/types/icons/visibility-off.d.ts.map +1 -1
  196. package/package.json +4 -26
  197. package/src/core/crepe.ts +13 -12
  198. package/src/core/slice.ts +2 -0
  199. package/src/feature/block-edit/handle/component.tsx +60 -0
  200. package/src/feature/block-edit/handle/index.ts +22 -14
  201. package/src/feature/block-edit/index.ts +3 -1
  202. package/src/feature/block-edit/menu/component.tsx +237 -0
  203. package/src/feature/block-edit/menu/config.ts +6 -3
  204. package/src/feature/block-edit/menu/index.ts +38 -18
  205. package/src/feature/block-edit/menu/utils.ts +3 -3
  206. package/src/feature/code-mirror/index.ts +20 -20
  207. package/src/feature/cursor/index.ts +1 -1
  208. package/src/feature/image-block/index.ts +3 -1
  209. package/src/feature/index.ts +5 -4
  210. package/src/feature/latex/index.ts +8 -8
  211. package/src/feature/latex/inline-tooltip/component.tsx +57 -0
  212. package/src/feature/latex/inline-tooltip/view.ts +30 -17
  213. package/src/feature/latex/input-rule.ts +4 -3
  214. package/src/feature/latex/remark.ts +3 -2
  215. package/src/feature/link-tooltip/index.ts +3 -1
  216. package/src/feature/list-item/index.ts +8 -16
  217. package/src/feature/placeholder/index.ts +6 -3
  218. package/src/feature/shared.ts +1 -2
  219. package/src/feature/table/index.ts +2 -0
  220. package/src/feature/toolbar/component.tsx +256 -0
  221. package/src/feature/toolbar/index.ts +34 -17
  222. package/src/icons/align-center.ts +1 -3
  223. package/src/icons/align-left.ts +1 -3
  224. package/src/icons/align-right.ts +1 -3
  225. package/src/icons/bold.ts +1 -3
  226. package/src/icons/bullet-list.ts +1 -3
  227. package/src/icons/bullet.ts +1 -3
  228. package/src/icons/caption.ts +1 -3
  229. package/src/icons/check-box-checked.ts +1 -3
  230. package/src/icons/check-box-unchecked.ts +1 -3
  231. package/src/icons/chevron-down.ts +1 -3
  232. package/src/icons/clear.ts +1 -3
  233. package/src/icons/code.ts +1 -3
  234. package/src/icons/confirm.ts +1 -3
  235. package/src/icons/copy.ts +1 -3
  236. package/src/icons/divider.ts +1 -3
  237. package/src/icons/drag-handle.ts +1 -3
  238. package/src/icons/edit.ts +1 -3
  239. package/src/icons/functions.ts +1 -3
  240. package/src/icons/h1.ts +1 -3
  241. package/src/icons/h2.ts +1 -3
  242. package/src/icons/h3.ts +1 -3
  243. package/src/icons/h4.ts +1 -3
  244. package/src/icons/h5.ts +1 -3
  245. package/src/icons/h6.ts +1 -3
  246. package/src/icons/image.ts +1 -3
  247. package/src/icons/italic.ts +1 -3
  248. package/src/icons/link.ts +1 -3
  249. package/src/icons/menu.ts +1 -3
  250. package/src/icons/ordered-list.ts +1 -3
  251. package/src/icons/plus.ts +1 -3
  252. package/src/icons/quote.ts +1 -3
  253. package/src/icons/remove.ts +1 -3
  254. package/src/icons/search.ts +1 -3
  255. package/src/icons/strikethrough.ts +1 -3
  256. package/src/icons/table.ts +1 -3
  257. package/src/icons/text.ts +1 -3
  258. package/src/icons/todo-list.ts +1 -3
  259. package/src/icons/visibility-off.ts +1 -3
  260. package/src/theme/_internal/classic-common.css +6 -0
  261. package/src/theme/common/block-edit.css +2 -2
  262. package/src/theme/common/code-mirror.css +5 -6
  263. package/src/theme/common/image-block.css +9 -11
  264. package/src/theme/common/latex.css +1 -1
  265. package/src/theme/common/link-tooltip.css +2 -2
  266. package/src/theme/common/list-item.css +3 -2
  267. package/src/theme/common/table.css +2 -2
  268. package/src/theme/common/toolbar.css +1 -1
  269. package/lib/cjs/functions-Dk90yOUc.js +0 -690
  270. package/lib/cjs/functions-Dk90yOUc.js.map +0 -1
  271. package/lib/cjs/index-CGies6Iv.js.map +0 -1
  272. package/lib/cjs/index-CJdEvN3_.js.map +0 -1
  273. package/lib/cjs/index-CvmlYYXX.js.map +0 -1
  274. package/lib/cjs/index-D3lu92SA.js +0 -39
  275. package/lib/cjs/index-D3lu92SA.js.map +0 -1
  276. package/lib/cjs/index-DAiGM2G1.js.map +0 -1
  277. package/lib/cjs/index-DKY_Kri2.js +0 -272
  278. package/lib/cjs/index-DKY_Kri2.js.map +0 -1
  279. package/lib/cjs/index-DQll67YS.js +0 -65
  280. package/lib/cjs/index-DQll67YS.js.map +0 -1
  281. package/lib/cjs/index-Dub20F3z.js.map +0 -1
  282. package/lib/cjs/index-hPk2gbSt.js +0 -35
  283. package/lib/cjs/index-hPk2gbSt.js.map +0 -1
  284. package/lib/cjs/index-nrFkJeLW.js.map +0 -1
  285. package/lib/esm/functions-Bsik6ikd.js +0 -652
  286. package/lib/esm/functions-Bsik6ikd.js.map +0 -1
  287. package/lib/esm/index-B3KiKTSt.js +0 -63
  288. package/lib/esm/index-B3KiKTSt.js.map +0 -1
  289. package/lib/esm/index-BFsG6770.js.map +0 -1
  290. package/lib/esm/index-BwTxn2hs.js.map +0 -1
  291. package/lib/esm/index-CBrOT1fW.js +0 -37
  292. package/lib/esm/index-CBrOT1fW.js.map +0 -1
  293. package/lib/esm/index-CEOsxgzJ.js.map +0 -1
  294. package/lib/esm/index-Cuk7cL-r.js +0 -33
  295. package/lib/esm/index-Cuk7cL-r.js.map +0 -1
  296. package/lib/esm/index-DOrkOhki.js.map +0 -1
  297. package/lib/esm/index-DcRgwPLd.js.map +0 -1
  298. package/lib/esm/index-H9uklzH0.js +0 -270
  299. package/lib/esm/index-H9uklzH0.js.map +0 -1
  300. package/lib/esm/index-x2oo_GmY.js.map +0 -1
  301. package/src/feature/block-edit/handle/component.ts +0 -54
  302. package/src/feature/block-edit/menu/component.ts +0 -241
  303. package/src/feature/latex/inline-tooltip/component.ts +0 -38
  304. package/src/feature/toolbar/component.ts +0 -236
@@ -1,38 +0,0 @@
1
- import { c, h, html, type Component } from 'atomico'
2
- import type { LatexConfig } from '..'
3
- import type { EditorView } from '@milkdown/kit/prose/view'
4
-
5
- type LatexEditComponentProps = {
6
- config: Partial<LatexConfig>
7
- innerView: EditorView
8
- updateValue: () => void
9
- }
10
-
11
- export const latexEditComponent: Component<LatexEditComponentProps> = ({
12
- config,
13
- innerView,
14
- updateValue,
15
- }) => {
16
- const onMouseDown = (e: MouseEvent) => {
17
- e.preventDefault()
18
- updateValue?.()
19
- }
20
- return html`
21
- <host>
22
- <div class="container">
23
- ${innerView && h(innerView.dom, {})}
24
- <button onmousedown=${onMouseDown}>
25
- ${config?.inlineEditConfirm?.()}
26
- </button>
27
- </div>
28
- </host>
29
- `
30
- }
31
-
32
- latexEditComponent.props = {
33
- config: Object,
34
- innerView: Object,
35
- updateValue: Function,
36
- }
37
-
38
- export const LatexInlineEditElement = c(latexEditComponent)
@@ -1,236 +0,0 @@
1
- import type { Component } from 'atomico'
2
- import { c, html, useEffect, useUpdate } from 'atomico'
3
- import type { Ctx } from '@milkdown/kit/ctx'
4
- import { commandsCtx, editorViewCtx } from '@milkdown/kit/core'
5
- import {
6
- emphasisSchema,
7
- inlineCodeSchema,
8
- linkSchema,
9
- strongSchema,
10
- toggleEmphasisCommand,
11
- toggleInlineCodeCommand,
12
- toggleStrongCommand,
13
- } from '@milkdown/kit/preset/commonmark'
14
- import type { MarkType, Node, NodeType } from '@milkdown/kit/prose/model'
15
- import type { Selection } from '@milkdown/kit/prose/state'
16
- import clsx from 'clsx'
17
- import { linkTooltipAPI } from '@milkdown/kit/component/link-tooltip'
18
- import {
19
- strikethroughSchema,
20
- toggleStrikethroughCommand,
21
- } from '@milkdown/kit/preset/gfm'
22
- import {
23
- boldIcon,
24
- codeIcon,
25
- italicIcon,
26
- linkIcon,
27
- strikethroughIcon,
28
- functionsIcon,
29
- } from '../../icons'
30
- import type { ToolbarFeatureConfig } from './index'
31
- import { NodeSelection, TextSelection } from '@milkdown/kit/prose/state'
32
- import { mathInlineSchema } from '../latex/inline-latex'
33
- import { FeaturesCtx } from '../../core/slice'
34
- import { CrepeFeature } from '../..'
35
-
36
- export interface ToolbarProps {
37
- ctx: Ctx
38
- hide: () => void
39
- show: boolean
40
- selection: Selection
41
- config?: ToolbarFeatureConfig
42
- }
43
-
44
- export const toolbarComponent: Component<ToolbarProps> = ({
45
- ctx,
46
- hide,
47
- show,
48
- config,
49
- selection,
50
- }) => {
51
- const update = useUpdate()
52
- useEffect(() => {
53
- update()
54
- }, [show])
55
-
56
- const onClick = (fn: (ctx: Ctx) => void) => (e: MouseEvent) => {
57
- e.preventDefault()
58
- ctx && fn(ctx)
59
- update()
60
- }
61
-
62
- const isActive = (mark: MarkType) => {
63
- if (!ctx || !selection) return false
64
- const view = ctx.get(editorViewCtx)
65
- const {
66
- state: { doc },
67
- } = view
68
- return doc.rangeHasMark(selection.from, selection.to, mark)
69
- }
70
-
71
- const containsNode = (node: NodeType) => {
72
- if (!ctx || !selection) return false
73
- const view = ctx.get(editorViewCtx)
74
- const {
75
- state: { doc },
76
- } = view
77
- if (selection instanceof NodeSelection) {
78
- return selection.node.type === node
79
- }
80
-
81
- const { from, to } = selection
82
-
83
- let hasNode = false
84
- doc.nodesBetween(from, to, (n) => {
85
- if (n.type === node) {
86
- hasNode = true
87
- return false
88
- }
89
- return true
90
- })
91
-
92
- return hasNode
93
- }
94
-
95
- const flags = ctx?.get(FeaturesCtx)
96
- const isLatexEnabled = flags?.includes(CrepeFeature.Latex)
97
-
98
- const toggleLatex = (ctx: Ctx) => {
99
- const hasLatex = containsNode(mathInlineSchema.type(ctx))
100
- const view = ctx.get(editorViewCtx)
101
- const { selection, doc, tr } = view.state
102
- if (!hasLatex) {
103
- const text = doc.textBetween(selection.from, selection.to)
104
- let _tr = tr.replaceSelectionWith(
105
- mathInlineSchema.type(ctx).create({
106
- value: text,
107
- })
108
- )
109
- view.dispatch(
110
- _tr.setSelection(NodeSelection.create(_tr.doc, selection.from))
111
- )
112
- return
113
- }
114
-
115
- const { from, to } = selection
116
- let pos = -1
117
- let node: Node | null = null
118
- doc.nodesBetween(from, to, (n, p) => {
119
- if (node) return false
120
- if (n.type === mathInlineSchema.type(ctx)) {
121
- pos = p
122
- node = n
123
- return false
124
- }
125
- return true
126
- })
127
- if (!node || pos < 0) return
128
-
129
- let _tr = tr.delete(pos, pos + 1)
130
- const content = (node as Node).attrs.value
131
- _tr = _tr.insertText(content, pos)
132
- view.dispatch(
133
- _tr.setSelection(
134
- TextSelection.create(_tr.doc, from, to + content.length - 1)
135
- )
136
- )
137
- }
138
-
139
- return html`<host>
140
- <button
141
- type="button"
142
- class=${clsx(
143
- 'toolbar-item',
144
- ctx && isActive(strongSchema.type(ctx)) && 'active'
145
- )}
146
- onmousedown=${onClick((ctx) => {
147
- const commands = ctx.get(commandsCtx)
148
- commands.call(toggleStrongCommand.key)
149
- })}
150
- >
151
- ${config?.boldIcon?.() ?? boldIcon}
152
- </button>
153
- <button
154
- type="button"
155
- class=${clsx(
156
- 'toolbar-item',
157
- ctx && isActive(emphasisSchema.type(ctx)) && 'active'
158
- )}
159
- onmousedown=${onClick((ctx) => {
160
- const commands = ctx.get(commandsCtx)
161
- commands.call(toggleEmphasisCommand.key)
162
- })}
163
- >
164
- ${config?.italicIcon?.() ?? italicIcon}
165
- </button>
166
- <button
167
- type="button"
168
- class=${clsx(
169
- 'toolbar-item',
170
- ctx && isActive(strikethroughSchema.type(ctx)) && 'active'
171
- )}
172
- onmousedown=${onClick((ctx) => {
173
- const commands = ctx.get(commandsCtx)
174
- commands.call(toggleStrikethroughCommand.key)
175
- })}
176
- >
177
- ${config?.strikethroughIcon?.() ?? strikethroughIcon}
178
- </button>
179
- <div class="divider"></div>
180
- <button
181
- type="button"
182
- class=${clsx(
183
- 'toolbar-item',
184
- ctx && isActive(inlineCodeSchema.type(ctx)) && 'active'
185
- )}
186
- onmousedown=${onClick((ctx) => {
187
- const commands = ctx.get(commandsCtx)
188
- commands.call(toggleInlineCodeCommand.key)
189
- })}
190
- >
191
- ${config?.codeIcon?.() ?? codeIcon}
192
- </button>
193
- ${isLatexEnabled &&
194
- html`<button
195
- type="button"
196
- class=${clsx(
197
- 'toolbar-item',
198
- ctx && containsNode(mathInlineSchema.type(ctx)) && 'active'
199
- )}
200
- onmousedown=${onClick(toggleLatex)}
201
- >
202
- ${config?.latexIcon?.() ?? functionsIcon}
203
- </button>`}
204
- <button
205
- type="button"
206
- class=${clsx(
207
- 'toolbar-item',
208
- ctx && isActive(linkSchema.type(ctx)) && 'active'
209
- )}
210
- onmousedown=${onClick((ctx) => {
211
- const view = ctx.get(editorViewCtx)
212
- const { selection } = view.state
213
-
214
- if (isActive(linkSchema.type(ctx))) {
215
- ctx.get(linkTooltipAPI.key).removeLink(selection.from, selection.to)
216
- return
217
- }
218
-
219
- ctx.get(linkTooltipAPI.key).addLink(selection.from, selection.to)
220
- hide?.()
221
- })}
222
- >
223
- ${config?.linkIcon?.() ?? linkIcon}
224
- </button>
225
- </host>`
226
- }
227
-
228
- toolbarComponent.props = {
229
- ctx: Object,
230
- hide: Function,
231
- show: Boolean,
232
- config: Object,
233
- selection: Object,
234
- }
235
-
236
- export const ToolbarElement = c(toolbarComponent)