@gravity-ui/markdown-editor 15.25.0 → 15.27.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 (342) hide show
  1. package/build/cjs/bundle/MarkdownEditorView.js +1 -1
  2. package/build/cjs/bundle/MarkdownEditorView.js.map +1 -1
  3. package/build/cjs/bundle/types.d.ts +5 -0
  4. package/build/cjs/bundle/types.js.map +1 -1
  5. package/build/cjs/bundle/useMarkdownEditor.js +1 -0
  6. package/build/cjs/bundle/useMarkdownEditor.js.map +1 -1
  7. package/build/cjs/bundle/wysiwyg-preset.d.ts +1 -0
  8. package/build/cjs/bundle/wysiwyg-preset.js +1 -0
  9. package/build/cjs/bundle/wysiwyg-preset.js.map +1 -1
  10. package/build/cjs/extensions/additional/Math/const.d.ts +1 -0
  11. package/build/cjs/extensions/additional/Math/const.js +11 -1
  12. package/build/cjs/extensions/additional/Math/const.js.map +1 -1
  13. package/build/cjs/extensions/additional/Math/index.d.ts +1 -0
  14. package/build/cjs/extensions/additional/Math/index.js +6 -1
  15. package/build/cjs/extensions/additional/Math/index.js.map +1 -1
  16. package/build/cjs/extensions/additional/Math/latex-paste-plugin.d.ts +2 -0
  17. package/build/cjs/extensions/additional/Math/latex-paste-plugin.js +54 -0
  18. package/build/cjs/extensions/additional/Math/latex-paste-plugin.js.map +1 -0
  19. package/build/cjs/extensions/additional/Math/utils.d.ts +7 -0
  20. package/build/cjs/extensions/additional/Math/utils.js +45 -0
  21. package/build/cjs/extensions/additional/Math/utils.js.map +1 -0
  22. package/build/cjs/extensions/behavior/Search/Search.d.ts +4 -0
  23. package/build/cjs/extensions/behavior/Search/Search.js +10 -0
  24. package/build/cjs/extensions/behavior/Search/Search.js.map +1 -0
  25. package/build/cjs/extensions/behavior/Search/SearchViewPlugin.d.ts +7 -0
  26. package/build/cjs/extensions/behavior/Search/SearchViewPlugin.js +157 -0
  27. package/build/cjs/extensions/behavior/Search/SearchViewPlugin.js.map +1 -0
  28. package/build/cjs/extensions/behavior/Search/commands.d.ts +7 -0
  29. package/build/cjs/extensions/behavior/Search/commands.js +42 -0
  30. package/build/cjs/extensions/behavior/Search/commands.js.map +1 -0
  31. package/build/cjs/extensions/behavior/Search/const.d.ts +7 -0
  32. package/build/cjs/extensions/behavior/Search/const.js +10 -0
  33. package/build/cjs/extensions/behavior/Search/const.js.map +1 -0
  34. package/build/cjs/extensions/behavior/Search/index.d.ts +1 -0
  35. package/build/cjs/extensions/behavior/Search/index.js +5 -0
  36. package/build/cjs/extensions/behavior/Search/index.js.map +1 -0
  37. package/build/cjs/extensions/behavior/Search/key-handler.d.ts +1 -0
  38. package/build/cjs/extensions/behavior/Search/key-handler.js +14 -0
  39. package/build/cjs/extensions/behavior/Search/key-handler.js.map +1 -0
  40. package/build/cjs/extensions/behavior/Search/search-plugin.css +7 -0
  41. package/build/cjs/extensions/behavior/Search/types.d.ts +3 -0
  42. package/build/cjs/extensions/behavior/Search/types.js +3 -0
  43. package/build/cjs/extensions/behavior/Search/types.js.map +1 -0
  44. package/build/cjs/extensions/behavior/Search/utils/connect-tracker.d.ts +7 -0
  45. package/build/cjs/extensions/behavior/Search/utils/connect-tracker.js +24 -0
  46. package/build/cjs/extensions/behavior/Search/utils/connect-tracker.js.map +1 -0
  47. package/build/cjs/extensions/behavior/Search/utils/focus-manager.d.ts +6 -0
  48. package/build/cjs/extensions/behavior/Search/utils/focus-manager.js +18 -0
  49. package/build/cjs/extensions/behavior/Search/utils/focus-manager.js.map +1 -0
  50. package/build/cjs/extensions/behavior/Search/utils/search-counter.d.ts +3 -0
  51. package/build/cjs/extensions/behavior/Search/utils/search-counter.js +18 -0
  52. package/build/cjs/extensions/behavior/Search/utils/search-counter.js.map +1 -0
  53. package/build/cjs/extensions/behavior/Search/utils/wrap-command.d.ts +4 -0
  54. package/build/cjs/extensions/behavior/Search/utils/wrap-command.js +16 -0
  55. package/build/cjs/extensions/behavior/Search/utils/wrap-command.js.map +1 -0
  56. package/build/cjs/extensions/behavior/SelectionContext/index.d.ts +2 -0
  57. package/build/cjs/extensions/behavior/SelectionContext/index.js +20 -2
  58. package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
  59. package/build/cjs/extensions/behavior/index.d.ts +2 -0
  60. package/build/cjs/extensions/behavior/index.js +3 -0
  61. package/build/cjs/extensions/behavior/index.js.map +1 -1
  62. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.css +8 -0
  63. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.d.ts +3 -0
  64. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +68 -7
  65. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  66. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/TooltipView.css +4 -0
  67. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.d.ts +1 -1
  68. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.js +53 -28
  69. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.js.map +1 -1
  70. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockSpecs/index.d.ts +6 -0
  71. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockSpecs/index.js +28 -2
  72. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockSpecs/index.js.map +1 -1
  73. package/build/cjs/extensions/markdown/CodeBlock/index.d.ts +2 -1
  74. package/build/cjs/extensions/markdown/CodeBlock/index.js +21 -6
  75. package/build/cjs/extensions/markdown/CodeBlock/index.js.map +1 -1
  76. package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/schema.js +29 -17
  77. package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/schema.js.map +1 -1
  78. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.d.ts +2 -1
  79. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.js.map +1 -1
  80. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.d.ts +5 -2
  81. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js +59 -2
  82. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -1
  83. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.d.ts +4 -2
  84. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js +3 -4
  85. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js.map +1 -1
  86. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.d.ts +3 -1
  87. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js +36 -1
  88. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -1
  89. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.d.ts +13 -1
  90. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +7 -10
  91. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -1
  92. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.d.ts +3 -0
  93. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js +39 -1
  94. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js.map +1 -1
  95. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-ghost.js +9 -4
  96. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-ghost.js.map +1 -1
  97. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js +1 -1
  98. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js.map +1 -1
  99. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/hooks/use-raf-throttle.d.ts +1 -0
  100. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/hooks/use-raf-throttle.js +25 -0
  101. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/hooks/use-raf-throttle.js.map +1 -0
  102. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js +4 -2
  103. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js.map +1 -1
  104. package/build/cjs/i18n/codeblock/en.json +2 -1
  105. package/build/cjs/i18n/codeblock/index.d.ts +2 -1
  106. package/build/cjs/i18n/codeblock/ru.json +2 -1
  107. package/build/cjs/i18n/search/en.json +9 -2
  108. package/build/cjs/i18n/search/index.d.ts +9 -2
  109. package/build/cjs/i18n/search/ru.json +10 -3
  110. package/build/cjs/markup/codemirror/create.js +1 -1
  111. package/build/cjs/markup/codemirror/create.js.map +1 -1
  112. package/build/cjs/markup/codemirror/search-plugin/plugin.d.ts +7 -9
  113. package/build/cjs/markup/codemirror/search-plugin/plugin.js +44 -55
  114. package/build/cjs/markup/codemirror/search-plugin/plugin.js.map +1 -1
  115. package/build/cjs/markup/codemirror/search-plugin/theme.d.ts +1 -0
  116. package/build/cjs/markup/codemirror/search-plugin/theme.js +15 -0
  117. package/build/cjs/markup/codemirror/search-plugin/theme.js.map +1 -0
  118. package/build/cjs/modules/search/components/SearchCardView.css +7 -0
  119. package/build/cjs/modules/search/components/SearchCardView.d.ts +17 -0
  120. package/build/cjs/modules/search/components/SearchCardView.js +22 -0
  121. package/build/cjs/modules/search/components/SearchCardView.js.map +1 -0
  122. package/build/cjs/modules/search/components/SearchCompactView.css +5 -0
  123. package/build/cjs/modules/search/components/SearchCompactView.d.ts +13 -0
  124. package/build/cjs/modules/search/components/SearchCompactView.js +26 -0
  125. package/build/cjs/modules/search/components/SearchCompactView.js.map +1 -0
  126. package/build/cjs/modules/search/components/SearchCounter.d.ts +6 -0
  127. package/build/cjs/modules/search/components/SearchCounter.js +15 -0
  128. package/build/cjs/modules/search/components/SearchCounter.js.map +1 -0
  129. package/build/cjs/modules/search/components/SearchPopup.css +9 -0
  130. package/build/cjs/modules/search/components/SearchPopup.d.ts +15 -0
  131. package/build/cjs/modules/search/components/SearchPopup.js +29 -0
  132. package/build/cjs/modules/search/components/SearchPopup.js.map +1 -0
  133. package/build/cjs/modules/search/components/SearchTextInput.d.ts +10 -0
  134. package/build/cjs/modules/search/components/SearchTextInput.js +24 -0
  135. package/build/cjs/modules/search/components/SearchTextInput.js.map +1 -0
  136. package/build/cjs/modules/search/hooks/use-search.d.ts +24 -0
  137. package/build/cjs/modules/search/hooks/use-search.js +47 -0
  138. package/build/cjs/modules/search/hooks/use-search.js.map +1 -0
  139. package/build/cjs/modules/search/index.d.ts +3 -0
  140. package/build/cjs/modules/search/index.js +9 -0
  141. package/build/cjs/modules/search/index.js.map +1 -0
  142. package/build/cjs/modules/search/qa.d.ts +14 -0
  143. package/build/cjs/modules/search/qa.js +18 -0
  144. package/build/cjs/modules/search/qa.js.map +1 -0
  145. package/build/cjs/modules/search/types.d.ts +10 -0
  146. package/build/cjs/modules/search/types.js +3 -0
  147. package/build/cjs/modules/search/types.js.map +1 -0
  148. package/build/cjs/react-utils/useAutoFocus.d.ts +1 -1
  149. package/build/cjs/react-utils/useAutoFocus.js +8 -10
  150. package/build/cjs/react-utils/useAutoFocus.js.map +1 -1
  151. package/build/cjs/styles/styles.css +289 -0
  152. package/build/cjs/styles/yfm-themes.css +288 -0
  153. package/build/cjs/table-utils/table-desc.d.ts +1 -0
  154. package/build/cjs/table-utils/table-desc.js +3 -0
  155. package/build/cjs/table-utils/table-desc.js.map +1 -1
  156. package/build/cjs/version.js +1 -1
  157. package/build/cjs/version.js.map +1 -1
  158. package/build/cjs/view/hocs/withYfmHtml/index.d.ts +1 -0
  159. package/build/cjs/view/hocs/withYfmHtml/index.js +3 -0
  160. package/build/cjs/view/hocs/withYfmHtml/index.js.map +1 -1
  161. package/build/cjs/view/hocs/withYfmHtml/useYfmHtmlBlockRuntime.d.ts +5 -1
  162. package/build/cjs/view/hocs/withYfmHtml/useYfmHtmlBlockRuntime.js +8 -1
  163. package/build/cjs/view/hocs/withYfmHtml/useYfmHtmlBlockRuntime.js.map +1 -1
  164. package/build/esm/bundle/MarkdownEditorView.js +1 -1
  165. package/build/esm/bundle/MarkdownEditorView.js.map +1 -1
  166. package/build/esm/bundle/types.d.ts +5 -0
  167. package/build/esm/bundle/types.js.map +1 -1
  168. package/build/esm/bundle/useMarkdownEditor.js +1 -0
  169. package/build/esm/bundle/useMarkdownEditor.js.map +1 -1
  170. package/build/esm/bundle/wysiwyg-preset.d.ts +1 -0
  171. package/build/esm/bundle/wysiwyg-preset.js +1 -0
  172. package/build/esm/bundle/wysiwyg-preset.js.map +1 -1
  173. package/build/esm/extensions/additional/Math/const.d.ts +1 -0
  174. package/build/esm/extensions/additional/Math/const.js +10 -0
  175. package/build/esm/extensions/additional/Math/const.js.map +1 -1
  176. package/build/esm/extensions/additional/Math/index.d.ts +1 -0
  177. package/build/esm/extensions/additional/Math/index.js +3 -0
  178. package/build/esm/extensions/additional/Math/index.js.map +1 -1
  179. package/build/esm/extensions/additional/Math/latex-paste-plugin.d.ts +2 -0
  180. package/build/esm/extensions/additional/Math/latex-paste-plugin.js +50 -0
  181. package/build/esm/extensions/additional/Math/latex-paste-plugin.js.map +1 -0
  182. package/build/esm/extensions/additional/Math/utils.d.ts +7 -0
  183. package/build/esm/extensions/additional/Math/utils.js +39 -0
  184. package/build/esm/extensions/additional/Math/utils.js.map +1 -0
  185. package/build/esm/extensions/behavior/Search/Search.d.ts +4 -0
  186. package/build/esm/extensions/behavior/Search/Search.js +6 -0
  187. package/build/esm/extensions/behavior/Search/Search.js.map +1 -0
  188. package/build/esm/extensions/behavior/Search/SearchViewPlugin.d.ts +7 -0
  189. package/build/esm/extensions/behavior/Search/SearchViewPlugin.js +153 -0
  190. package/build/esm/extensions/behavior/Search/SearchViewPlugin.js.map +1 -0
  191. package/build/esm/extensions/behavior/Search/commands.d.ts +7 -0
  192. package/build/esm/extensions/behavior/Search/commands.js +37 -0
  193. package/build/esm/extensions/behavior/Search/commands.js.map +1 -0
  194. package/build/esm/extensions/behavior/Search/const.d.ts +7 -0
  195. package/build/esm/extensions/behavior/Search/const.js +7 -0
  196. package/build/esm/extensions/behavior/Search/const.js.map +1 -0
  197. package/build/esm/extensions/behavior/Search/index.d.ts +1 -0
  198. package/build/esm/extensions/behavior/Search/index.js +2 -0
  199. package/build/esm/extensions/behavior/Search/index.js.map +1 -0
  200. package/build/esm/extensions/behavior/Search/key-handler.d.ts +1 -0
  201. package/build/esm/extensions/behavior/Search/key-handler.js +11 -0
  202. package/build/esm/extensions/behavior/Search/key-handler.js.map +1 -0
  203. package/build/esm/extensions/behavior/Search/search-plugin.css +7 -0
  204. package/build/esm/extensions/behavior/Search/types.d.ts +3 -0
  205. package/build/esm/extensions/behavior/Search/types.js +2 -0
  206. package/build/esm/extensions/behavior/Search/types.js.map +1 -0
  207. package/build/esm/extensions/behavior/Search/utils/connect-tracker.d.ts +7 -0
  208. package/build/esm/extensions/behavior/Search/utils/connect-tracker.js +21 -0
  209. package/build/esm/extensions/behavior/Search/utils/connect-tracker.js.map +1 -0
  210. package/build/esm/extensions/behavior/Search/utils/focus-manager.d.ts +6 -0
  211. package/build/esm/extensions/behavior/Search/utils/focus-manager.js +14 -0
  212. package/build/esm/extensions/behavior/Search/utils/focus-manager.js.map +1 -0
  213. package/build/esm/extensions/behavior/Search/utils/search-counter.d.ts +3 -0
  214. package/build/esm/extensions/behavior/Search/utils/search-counter.js +15 -0
  215. package/build/esm/extensions/behavior/Search/utils/search-counter.js.map +1 -0
  216. package/build/esm/extensions/behavior/Search/utils/wrap-command.d.ts +4 -0
  217. package/build/esm/extensions/behavior/Search/utils/wrap-command.js +13 -0
  218. package/build/esm/extensions/behavior/Search/utils/wrap-command.js.map +1 -0
  219. package/build/esm/extensions/behavior/SelectionContext/index.d.ts +2 -0
  220. package/build/esm/extensions/behavior/SelectionContext/index.js +19 -2
  221. package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
  222. package/build/esm/extensions/behavior/index.d.ts +2 -0
  223. package/build/esm/extensions/behavior/index.js +3 -0
  224. package/build/esm/extensions/behavior/index.js.map +1 -1
  225. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.css +8 -0
  226. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.d.ts +3 -0
  227. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +69 -8
  228. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  229. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/TooltipView.css +4 -0
  230. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.d.ts +1 -1
  231. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.js +54 -29
  232. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.js.map +1 -1
  233. package/build/esm/extensions/markdown/CodeBlock/CodeBlockSpecs/index.d.ts +6 -0
  234. package/build/esm/extensions/markdown/CodeBlock/CodeBlockSpecs/index.js +28 -2
  235. package/build/esm/extensions/markdown/CodeBlock/CodeBlockSpecs/index.js.map +1 -1
  236. package/build/esm/extensions/markdown/CodeBlock/index.d.ts +2 -1
  237. package/build/esm/extensions/markdown/CodeBlock/index.js +21 -6
  238. package/build/esm/extensions/markdown/CodeBlock/index.js.map +1 -1
  239. package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/schema.js +29 -17
  240. package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/schema.js.map +1 -1
  241. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.d.ts +2 -1
  242. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.js.map +1 -1
  243. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.d.ts +5 -2
  244. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js +59 -2
  245. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -1
  246. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.d.ts +4 -2
  247. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js +4 -4
  248. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js.map +1 -1
  249. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.d.ts +3 -1
  250. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js +38 -3
  251. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -1
  252. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.d.ts +13 -1
  253. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +8 -10
  254. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -1
  255. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.d.ts +3 -0
  256. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js +38 -1
  257. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js.map +1 -1
  258. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-ghost.js +9 -4
  259. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-ghost.js.map +1 -1
  260. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js +2 -2
  261. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js.map +1 -1
  262. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/hooks/use-raf-throttle.d.ts +1 -0
  263. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/hooks/use-raf-throttle.js +22 -0
  264. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/hooks/use-raf-throttle.js.map +1 -0
  265. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js +4 -2
  266. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js.map +1 -1
  267. package/build/esm/i18n/codeblock/en.json +2 -1
  268. package/build/esm/i18n/codeblock/index.d.ts +2 -1
  269. package/build/esm/i18n/codeblock/ru.json +2 -1
  270. package/build/esm/i18n/search/en.json +9 -2
  271. package/build/esm/i18n/search/index.d.ts +9 -2
  272. package/build/esm/i18n/search/ru.json +10 -3
  273. package/build/esm/markup/codemirror/create.js +1 -1
  274. package/build/esm/markup/codemirror/create.js.map +1 -1
  275. package/build/esm/markup/codemirror/search-plugin/plugin.d.ts +7 -9
  276. package/build/esm/markup/codemirror/search-plugin/plugin.js +44 -55
  277. package/build/esm/markup/codemirror/search-plugin/plugin.js.map +1 -1
  278. package/build/esm/markup/codemirror/search-plugin/theme.d.ts +1 -0
  279. package/build/esm/markup/codemirror/search-plugin/theme.js +12 -0
  280. package/build/esm/markup/codemirror/search-plugin/theme.js.map +1 -0
  281. package/build/esm/modules/search/components/SearchCardView.css +7 -0
  282. package/build/esm/modules/search/components/SearchCardView.d.ts +17 -0
  283. package/build/esm/modules/search/components/SearchCardView.js +18 -0
  284. package/build/esm/modules/search/components/SearchCardView.js.map +1 -0
  285. package/build/esm/modules/search/components/SearchCompactView.css +5 -0
  286. package/build/esm/modules/search/components/SearchCompactView.d.ts +13 -0
  287. package/build/esm/modules/search/components/SearchCompactView.js +22 -0
  288. package/build/esm/modules/search/components/SearchCompactView.js.map +1 -0
  289. package/build/esm/modules/search/components/SearchCounter.d.ts +6 -0
  290. package/build/esm/modules/search/components/SearchCounter.js +11 -0
  291. package/build/esm/modules/search/components/SearchCounter.js.map +1 -0
  292. package/build/esm/modules/search/components/SearchPopup.css +9 -0
  293. package/build/esm/modules/search/components/SearchPopup.d.ts +15 -0
  294. package/build/esm/modules/search/components/SearchPopup.js +24 -0
  295. package/build/esm/modules/search/components/SearchPopup.js.map +1 -0
  296. package/build/esm/modules/search/components/SearchTextInput.d.ts +10 -0
  297. package/build/esm/modules/search/components/SearchTextInput.js +20 -0
  298. package/build/esm/modules/search/components/SearchTextInput.js.map +1 -0
  299. package/build/esm/modules/search/hooks/use-search.d.ts +24 -0
  300. package/build/esm/modules/search/hooks/use-search.js +44 -0
  301. package/build/esm/modules/search/hooks/use-search.js.map +1 -0
  302. package/build/esm/modules/search/index.d.ts +3 -0
  303. package/build/esm/modules/search/index.js +4 -0
  304. package/build/esm/modules/search/index.js.map +1 -0
  305. package/build/esm/modules/search/qa.d.ts +14 -0
  306. package/build/esm/modules/search/qa.js +15 -0
  307. package/build/esm/modules/search/qa.js.map +1 -0
  308. package/build/esm/modules/search/types.d.ts +10 -0
  309. package/build/esm/modules/search/types.js +2 -0
  310. package/build/esm/modules/search/types.js.map +1 -0
  311. package/build/esm/react-utils/useAutoFocus.d.ts +1 -1
  312. package/build/esm/react-utils/useAutoFocus.js +7 -8
  313. package/build/esm/react-utils/useAutoFocus.js.map +1 -1
  314. package/build/esm/styles/styles.css +289 -0
  315. package/build/esm/styles/yfm-themes.css +288 -0
  316. package/build/esm/table-utils/table-desc.d.ts +1 -0
  317. package/build/esm/table-utils/table-desc.js +3 -0
  318. package/build/esm/table-utils/table-desc.js.map +1 -1
  319. package/build/esm/version.js +1 -1
  320. package/build/esm/version.js.map +1 -1
  321. package/build/esm/view/hocs/withYfmHtml/index.d.ts +1 -0
  322. package/build/esm/view/hocs/withYfmHtml/index.js +1 -0
  323. package/build/esm/view/hocs/withYfmHtml/index.js.map +1 -1
  324. package/build/esm/view/hocs/withYfmHtml/useYfmHtmlBlockRuntime.d.ts +5 -1
  325. package/build/esm/view/hocs/withYfmHtml/useYfmHtmlBlockRuntime.js +7 -1
  326. package/build/esm/view/hocs/withYfmHtml/useYfmHtmlBlockRuntime.js.map +1 -1
  327. package/build/styles.css +617 -10
  328. package/package.json +11 -9
  329. package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.d.ts +0 -3
  330. package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.js +0 -9
  331. package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.js.map +0 -1
  332. package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.css +0 -10
  333. package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.d.ts +0 -27
  334. package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.js +0 -83
  335. package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.js.map +0 -1
  336. package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.d.ts +0 -3
  337. package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.js +0 -4
  338. package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.js.map +0 -1
  339. package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.css +0 -10
  340. package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.d.ts +0 -27
  341. package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.js +0 -77
  342. package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.js.map +0 -1
@@ -149,7 +149,7 @@ exports.MarkdownEditorView = (0, react_1.forwardRef)((props, ref) => {
149
149
  }, [className]), role: "button", tabIndex: 0, children: [(0, jsx_runtime_1.jsx)(EditorWrapper, { autofocus: autofocus, editor: editor, editorMode: editorMode, enableSubmitInPreview: enableSubmitInPreview, hidePreviewAfterSubmit: hidePreviewAfterSubmit, isFocused: isWrapperFocused(divRef), markupHiddenActionsConfig: markupHiddenActionsConfig, markupToolbarConfig: markupToolbarConfig, qa: "g-md-editor-mode", ref: editorWrapperRef, settingsVisible: settingsVisible, showPreview: showPreview, stickyToolbar: stickyToolbar, toggleShowPreview: toggleShowPreview, toolbarsPreset: toolbarsPreset, unsetShowPreview: unsetShowPreview, wysiwygHiddenActionsConfig: wysiwygHiddenActionsConfig, wysiwygToolbarConfig: wysiwygToolbarConfig }), markupSplitMode && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [editor.splitMode === 'horizontal' ? ((0, jsx_runtime_1.jsx)(HorizontalDrag_1.HorizontalDrag, { editor: editor, isMounted: isMounted, leftElRef: editorWrapperRef, rightElRef: splitModeViewWrapperRef, wrapperRef: divRef })) : ((0, jsx_runtime_1.jsx)("div", { className: b('resizer') })), (0, jsx_runtime_1.jsx)(SplitModeView_1.SplitModeView, { editor: editor, ref: splitModeViewWrapperRef })] }))] }) }));
150
150
  });
151
151
  exports.MarkdownEditorView.displayName = 'MarkdownEditorView';
152
- const MarkupSearchAnchor = ({ mode }) => ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: mode === 'markup' && (0, jsx_runtime_1.jsx)("div", { className: "g-md-search-anchor" }) }));
152
+ const MarkupSearchAnchor = ({ mode }) => ((0, jsx_runtime_1.jsx)("div", { className: `g-md-search-${mode}-anchor` }));
153
153
  function Settings(props) {
154
154
  const wrapperRef = (0, react_1.useRef)(null);
155
155
  const isSticky = (0, react_utils_1.useSticky)(wrapperRef) && props.toolbarVisibility && props.stickyToolbar;
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownEditorView.js","sourceRoot":"../../../src","sources":["bundle/MarkdownEditorView.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport {type QAProps, useToaster} from '@gravity-ui/uikit';\nimport {ErrorBoundary} from 'react-error-boundary';\nimport {useEnsuredForwardedRef, useKey, useUpdate} from 'react-use';\n\nimport {type ClassNameProps, cn} from '../classname';\nimport {i18n} from '../i18n/bundle';\nimport {globalLogger} from '../logger';\nimport type {ToolbarsPreset} from '../modules/toolbars/types';\nimport {useBooleanState, useSticky} from '../react-utils';\nimport {isMac} from '../utils';\n\nimport type {Editor, EditorInt} from './Editor';\nimport {HorizontalDrag} from './HorizontalDrag';\nimport {MarkupEditorView} from './MarkupEditorView';\nimport {SplitModeView} from './SplitModeView';\nimport {WysiwygEditorView} from './WysiwygEditorView';\nimport {useMarkdownEditorContext} from './context';\nimport {EditorSettings, type EditorSettingsProps, type SettingItems} from './settings';\nimport {stickyCn} from './sticky';\nimport type {MToolbarData, MToolbarItemData, WToolbarData, WToolbarItemData} from './toolbar/types';\nimport {getToolbarsConfigs} from './toolbar/utils/toolbarsConfigs';\nimport type {MarkdownEditorMode} from './types';\n\nimport '../styles/styles.scss';\nimport './MarkdownEditorView.scss'; // eslint-disable-line import/order\n\nexport const cnEditorComponent = cn('editor-component');\nconst b = cnEditorComponent;\n\ninterface EditorWrapperProps extends QAProps, ToolbarConfigs, Omit<ViewProps, 'editor'> {\n editor: EditorInt;\n editorMode: MarkdownEditorMode;\n isFocused: boolean;\n showPreview: boolean;\n toggleShowPreview: () => void;\n unsetShowPreview: () => void;\n}\nconst EditorWrapper = forwardRef<HTMLDivElement, EditorWrapperProps>(\n (\n {\n autofocus,\n editor,\n editorMode,\n enableSubmitInPreview,\n hidePreviewAfterSubmit,\n isFocused,\n markupHiddenActionsConfig: initialMarkupHiddenActionsConfig,\n markupToolbarConfig: initialMarkupToolbarConfig,\n qa,\n settingsVisible: settingsVisibleProp,\n showPreview,\n stickyToolbar,\n toggleShowPreview,\n toolbarsPreset,\n unsetShowPreview,\n wysiwygHiddenActionsConfig: initialWysiwygHiddenActionsConfig,\n wysiwygToolbarConfig: initialWysiwygToolbarConfig,\n },\n ref,\n ) => {\n const {\n wysiwygToolbarConfig,\n markupToolbarConfig,\n wysiwygHiddenActionsConfig,\n markupHiddenActionsConfig,\n } = useMemo(\n () =>\n getToolbarsConfigs({\n toolbarsPreset,\n props: {\n wysiwygToolbarConfig: initialWysiwygToolbarConfig,\n markupToolbarConfig: initialMarkupToolbarConfig,\n wysiwygHiddenActionsConfig: initialWysiwygHiddenActionsConfig,\n markupHiddenActionsConfig: initialMarkupHiddenActionsConfig,\n },\n preset: editor.preset,\n }),\n [\n toolbarsPreset,\n initialWysiwygToolbarConfig,\n initialMarkupToolbarConfig,\n initialWysiwygHiddenActionsConfig,\n initialMarkupHiddenActionsConfig,\n editor.preset,\n ],\n );\n const onModeChange = useCallback(\n (type: MarkdownEditorMode) => {\n editor.changeEditorMode({mode: type, reason: 'settings'});\n unsetShowPreview();\n },\n [editor, unsetShowPreview],\n );\n const onToolbarVisibilityChange = useCallback(\n (visible: boolean) => {\n editor.changeToolbarVisibility({visible});\n },\n [editor],\n );\n const onSplitModeChange = useCallback(\n (splitModeEnabled: boolean) => {\n unsetShowPreview();\n editor.changeSplitModeEnabled({splitModeEnabled});\n },\n [editor, unsetShowPreview],\n );\n const onShowPreviewChange = useCallback(\n (showPreviewValue: boolean) => {\n editor.changeSplitModeEnabled({splitModeEnabled: false});\n if (showPreviewValue !== showPreview) toggleShowPreview();\n },\n [editor, showPreview, toggleShowPreview],\n );\n const canRenderPreview = Boolean(\n editor.renderPreview && editorMode === 'markup' && !editor.splitModeEnabled,\n );\n\n useKey(\n (e) => canRenderPreview && isPreviewKeyDown(e),\n (e) => {\n e.preventDefault();\n onShowPreviewChange(!showPreview);\n },\n {event: 'keydown'},\n [showPreview, editorMode, onShowPreviewChange, canRenderPreview],\n );\n\n useKey(\n (e) => Boolean(enableSubmitInPreview && showPreview && isFocused && isSubmitKeyDown(e)),\n () => {\n editor.emit('submit', null);\n\n if (hidePreviewAfterSubmit) {\n onShowPreviewChange(false);\n }\n },\n {event: 'keydown'},\n [hidePreviewAfterSubmit, enableSubmitInPreview, showPreview, showPreview],\n );\n\n const settingsProps = {\n mode: editorMode,\n onModeChange,\n onShowPreviewChange,\n onSplitModeChange,\n onToolbarVisibilityChange,\n renderPreviewButton: canRenderPreview,\n showPreview,\n splitMode: editor.splitMode,\n splitModeEnabled: editor.splitModeEnabled,\n stickyToolbar,\n toolbarVisibility: editor.toolbarVisible && !showPreview,\n disableMark: editor.mobile,\n };\n\n const areSettingsVisible =\n settingsVisibleProp === true ||\n (Array.isArray(settingsVisibleProp) && settingsVisibleProp.length > 0);\n\n const toolbarDisplay = editor.mobile ? 'scroll' : 'shrink';\n\n return (\n <div\n className={b('editor-wrapper')}\n ref={ref}\n data-qa={qa}\n data-mode={editor.currentMode}\n >\n {showPreview ? (\n <>\n <div className={b('preview-wrapper')}>\n {editor.renderPreview?.({\n getValue: editor.getValue,\n mode: 'preview',\n md: editor.mdOptions,\n directiveSyntax: editor.directiveSyntax,\n })}\n </div>\n <Settings {...settingsProps} settingsVisible={settingsVisibleProp} />\n </>\n ) : (\n <>\n {editorMode === 'wysiwyg' && (\n <WysiwygEditorView\n editor={editor}\n autofocus={autofocus}\n settingsVisible={areSettingsVisible}\n toolbarConfig={wysiwygToolbarConfig}\n toolbarVisible={editor.toolbarVisible}\n hiddenActionsConfig={wysiwygHiddenActionsConfig}\n className={b('editor', {mode: editorMode})}\n toolbarClassName={b('toolbar')}\n stickyToolbar={stickyToolbar}\n toolbarDisplay={toolbarDisplay}\n >\n <Settings\n {...settingsProps}\n settingsVisible={editor.toolbarVisible && settingsVisibleProp}\n />\n </WysiwygEditorView>\n )}\n {editorMode === 'markup' && (\n <MarkupEditorView\n editor={editor}\n autofocus={autofocus}\n settingsVisible={areSettingsVisible}\n toolbarConfig={markupToolbarConfig}\n toolbarVisible={editor.toolbarVisible}\n splitMode={editor.splitMode}\n splitModeEnabled={editor.splitModeEnabled}\n hiddenActionsConfig={markupHiddenActionsConfig}\n className={b('editor', {mode: editorMode})}\n toolbarClassName={b('toolbar')}\n stickyToolbar={stickyToolbar}\n toolbarDisplay={toolbarDisplay}\n >\n <Settings\n {...settingsProps}\n settingsVisible={editor.toolbarVisible && settingsVisibleProp}\n />\n </MarkupEditorView>\n )}\n <Settings\n {...settingsProps}\n settingsVisible={!editor.toolbarVisible && settingsVisibleProp}\n renderPreviewButton={!editor.toolbarVisible && canRenderPreview}\n />\n </>\n )}\n </div>\n );\n },\n);\n\nEditorWrapper.displayName = 'EditorWrapper';\n\ntype ToolbarConfigs = {\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n markupToolbarConfig?: MToolbarData;\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n wysiwygToolbarConfig?: WToolbarData;\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n markupHiddenActionsConfig?: MToolbarItemData[];\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n wysiwygHiddenActionsConfig?: WToolbarItemData[];\n};\n\ntype ViewProps = {\n editor?: Editor;\n autofocus?: boolean;\n // MAJOR: rename to settings\n /** @default true */\n settingsVisible?: boolean | SettingItems[];\n toolbarsPreset?: ToolbarsPreset;\n stickyToolbar: boolean;\n enableSubmitInPreview?: boolean;\n hidePreviewAfterSubmit?: boolean;\n};\n\nexport type MarkdownEditorViewProps = ClassNameProps & ToolbarConfigs & ViewProps & QAProps & {};\n\nexport const MarkdownEditorView = forwardRef<HTMLDivElement, MarkdownEditorViewProps>(\n (props, ref) => {\n const divRef = useEnsuredForwardedRef(ref as React.MutableRefObject<HTMLDivElement>);\n const editorWrapperRef = useRef(null);\n const [showPreview, , unsetShowPreview, toggleShowPreview] = useBooleanState(false);\n\n const [isMounted, setIsMounted] = useState(false);\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n const context = useMarkdownEditorContext();\n const editor = (props.editor ?? context) as EditorInt;\n if (!editor)\n throw new Error(\n '[MarkdownEditorView]: an instance of the editor must be passed through the props or context',\n );\n\n const {\n autofocus,\n className,\n enableSubmitInPreview = true,\n hidePreviewAfterSubmit = false,\n markupHiddenActionsConfig,\n markupToolbarConfig,\n qa,\n settingsVisible = true,\n stickyToolbar,\n toolbarsPreset,\n wysiwygHiddenActionsConfig,\n wysiwygToolbarConfig,\n } = props;\n\n const rerender = useUpdate();\n useLayoutEffect(() => {\n editor.on('rerender', rerender);\n return () => {\n editor.off('rerender', rerender);\n };\n }, [editor, rerender]);\n\n const editorMode = editor.currentMode;\n const markupSplitMode =\n editor.splitModeEnabled && editor.splitMode && editorMode === 'markup';\n\n const splitModeViewWrapperRef = useRef(null);\n\n const toaster = useToaster();\n\n useEffect(() => {\n if (showPreview) {\n divRef.current.focus();\n }\n }, [divRef, showPreview]);\n\n const areSettingsVisible =\n settingsVisible === true ||\n (Array.isArray(settingsVisible) && settingsVisible.length > 0);\n\n return (\n <ErrorBoundary\n onError={(e) => {\n globalLogger.error(e);\n editor.logger.error(e);\n }}\n fallbackRender={({error, resetErrorBoundary}) => {\n toaster.add({\n theme: 'danger',\n name: 'g-md-editor-error',\n title: i18n('error-title'),\n content: error.message,\n });\n setTimeout(() => {\n resetErrorBoundary();\n editor.changeEditorMode({\n mode: 'markup',\n reason: 'error-boundary',\n emit: false,\n });\n });\n return null;\n }}\n >\n <div\n ref={divRef}\n data-qa={qa}\n className={b(\n {\n settings: areSettingsVisible,\n split: markupSplitMode && editor.splitMode,\n },\n [className],\n )}\n role=\"button\"\n tabIndex={0}\n >\n <EditorWrapper\n autofocus={autofocus}\n editor={editor}\n editorMode={editorMode}\n enableSubmitInPreview={enableSubmitInPreview}\n hidePreviewAfterSubmit={hidePreviewAfterSubmit}\n isFocused={isWrapperFocused(divRef)}\n markupHiddenActionsConfig={markupHiddenActionsConfig}\n markupToolbarConfig={markupToolbarConfig}\n qa=\"g-md-editor-mode\"\n ref={editorWrapperRef}\n settingsVisible={settingsVisible}\n showPreview={showPreview}\n stickyToolbar={stickyToolbar}\n toggleShowPreview={toggleShowPreview}\n toolbarsPreset={toolbarsPreset}\n unsetShowPreview={unsetShowPreview}\n wysiwygHiddenActionsConfig={wysiwygHiddenActionsConfig}\n wysiwygToolbarConfig={wysiwygToolbarConfig}\n />\n\n {markupSplitMode && (\n <>\n {editor.splitMode === 'horizontal' ? (\n <HorizontalDrag\n editor={editor}\n isMounted={isMounted}\n leftElRef={editorWrapperRef}\n rightElRef={splitModeViewWrapperRef}\n wrapperRef={divRef}\n />\n ) : (\n <div className={b('resizer')} />\n )}\n <SplitModeView editor={editor} ref={splitModeViewWrapperRef} />\n </>\n )}\n </div>\n </ErrorBoundary>\n );\n },\n);\nMarkdownEditorView.displayName = 'MarkdownEditorView';\n\ninterface MarkupSearchAnchorProps extends Pick<EditorSettingsProps, 'mode'> {}\n\nconst MarkupSearchAnchor: React.FC<MarkupSearchAnchorProps> = ({mode}) => (\n <>{mode === 'markup' && <div className=\"g-md-search-anchor\"></div>}</>\n);\n\nfunction Settings(props: EditorSettingsProps & {stickyToolbar: boolean}) {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const isSticky = useSticky(wrapperRef) && props.toolbarVisibility && props.stickyToolbar;\n\n return (\n <>\n {(props.renderPreviewButton || props.settingsVisible) && (\n <div className={b('settings-wrapper')}>\n <div\n ref={wrapperRef}\n className={stickyCn.settings({\n withToolbar: props.toolbarVisibility,\n stickyActive: isSticky,\n })}\n >\n <EditorSettings {...props} />\n <MarkupSearchAnchor {...props} />\n </div>\n </div>\n )}\n </>\n );\n}\n\nfunction isPreviewKeyDown(e: KeyboardEvent) {\n const modKey = isMac() ? e.metaKey : e.ctrlKey;\n return modKey && e.shiftKey && e.code === 'KeyP';\n}\n\nfunction isWrapperFocused(divRef: React.RefObject<HTMLDivElement>) {\n return document.activeElement === divRef.current;\n}\n\nfunction isSubmitKeyDown(e: KeyboardEvent) {\n const modKey = isMac() ? e.metaKey : e.ctrlKey;\n return modKey && e.code === 'Enter';\n}\n"]}
1
+ {"version":3,"file":"MarkdownEditorView.js","sourceRoot":"../../../src","sources":["bundle/MarkdownEditorView.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport {type QAProps, useToaster} from '@gravity-ui/uikit';\nimport {ErrorBoundary} from 'react-error-boundary';\nimport {useEnsuredForwardedRef, useKey, useUpdate} from 'react-use';\n\nimport {type ClassNameProps, cn} from '../classname';\nimport {i18n} from '../i18n/bundle';\nimport {globalLogger} from '../logger';\nimport type {ToolbarsPreset} from '../modules/toolbars/types';\nimport {useBooleanState, useSticky} from '../react-utils';\nimport {isMac} from '../utils';\n\nimport type {Editor, EditorInt} from './Editor';\nimport {HorizontalDrag} from './HorizontalDrag';\nimport {MarkupEditorView} from './MarkupEditorView';\nimport {SplitModeView} from './SplitModeView';\nimport {WysiwygEditorView} from './WysiwygEditorView';\nimport {useMarkdownEditorContext} from './context';\nimport {EditorSettings, type EditorSettingsProps, type SettingItems} from './settings';\nimport {stickyCn} from './sticky';\nimport type {MToolbarData, MToolbarItemData, WToolbarData, WToolbarItemData} from './toolbar/types';\nimport {getToolbarsConfigs} from './toolbar/utils/toolbarsConfigs';\nimport type {MarkdownEditorMode} from './types';\n\nimport '../styles/styles.scss';\nimport './MarkdownEditorView.scss'; // eslint-disable-line import/order\n\nexport const cnEditorComponent = cn('editor-component');\nconst b = cnEditorComponent;\n\ninterface EditorWrapperProps extends QAProps, ToolbarConfigs, Omit<ViewProps, 'editor'> {\n editor: EditorInt;\n editorMode: MarkdownEditorMode;\n isFocused: boolean;\n showPreview: boolean;\n toggleShowPreview: () => void;\n unsetShowPreview: () => void;\n}\nconst EditorWrapper = forwardRef<HTMLDivElement, EditorWrapperProps>(\n (\n {\n autofocus,\n editor,\n editorMode,\n enableSubmitInPreview,\n hidePreviewAfterSubmit,\n isFocused,\n markupHiddenActionsConfig: initialMarkupHiddenActionsConfig,\n markupToolbarConfig: initialMarkupToolbarConfig,\n qa,\n settingsVisible: settingsVisibleProp,\n showPreview,\n stickyToolbar,\n toggleShowPreview,\n toolbarsPreset,\n unsetShowPreview,\n wysiwygHiddenActionsConfig: initialWysiwygHiddenActionsConfig,\n wysiwygToolbarConfig: initialWysiwygToolbarConfig,\n },\n ref,\n ) => {\n const {\n wysiwygToolbarConfig,\n markupToolbarConfig,\n wysiwygHiddenActionsConfig,\n markupHiddenActionsConfig,\n } = useMemo(\n () =>\n getToolbarsConfigs({\n toolbarsPreset,\n props: {\n wysiwygToolbarConfig: initialWysiwygToolbarConfig,\n markupToolbarConfig: initialMarkupToolbarConfig,\n wysiwygHiddenActionsConfig: initialWysiwygHiddenActionsConfig,\n markupHiddenActionsConfig: initialMarkupHiddenActionsConfig,\n },\n preset: editor.preset,\n }),\n [\n toolbarsPreset,\n initialWysiwygToolbarConfig,\n initialMarkupToolbarConfig,\n initialWysiwygHiddenActionsConfig,\n initialMarkupHiddenActionsConfig,\n editor.preset,\n ],\n );\n const onModeChange = useCallback(\n (type: MarkdownEditorMode) => {\n editor.changeEditorMode({mode: type, reason: 'settings'});\n unsetShowPreview();\n },\n [editor, unsetShowPreview],\n );\n const onToolbarVisibilityChange = useCallback(\n (visible: boolean) => {\n editor.changeToolbarVisibility({visible});\n },\n [editor],\n );\n const onSplitModeChange = useCallback(\n (splitModeEnabled: boolean) => {\n unsetShowPreview();\n editor.changeSplitModeEnabled({splitModeEnabled});\n },\n [editor, unsetShowPreview],\n );\n const onShowPreviewChange = useCallback(\n (showPreviewValue: boolean) => {\n editor.changeSplitModeEnabled({splitModeEnabled: false});\n if (showPreviewValue !== showPreview) toggleShowPreview();\n },\n [editor, showPreview, toggleShowPreview],\n );\n const canRenderPreview = Boolean(\n editor.renderPreview && editorMode === 'markup' && !editor.splitModeEnabled,\n );\n\n useKey(\n (e) => canRenderPreview && isPreviewKeyDown(e),\n (e) => {\n e.preventDefault();\n onShowPreviewChange(!showPreview);\n },\n {event: 'keydown'},\n [showPreview, editorMode, onShowPreviewChange, canRenderPreview],\n );\n\n useKey(\n (e) => Boolean(enableSubmitInPreview && showPreview && isFocused && isSubmitKeyDown(e)),\n () => {\n editor.emit('submit', null);\n\n if (hidePreviewAfterSubmit) {\n onShowPreviewChange(false);\n }\n },\n {event: 'keydown'},\n [hidePreviewAfterSubmit, enableSubmitInPreview, showPreview, showPreview],\n );\n\n const settingsProps = {\n mode: editorMode,\n onModeChange,\n onShowPreviewChange,\n onSplitModeChange,\n onToolbarVisibilityChange,\n renderPreviewButton: canRenderPreview,\n showPreview,\n splitMode: editor.splitMode,\n splitModeEnabled: editor.splitModeEnabled,\n stickyToolbar,\n toolbarVisibility: editor.toolbarVisible && !showPreview,\n disableMark: editor.mobile,\n };\n\n const areSettingsVisible =\n settingsVisibleProp === true ||\n (Array.isArray(settingsVisibleProp) && settingsVisibleProp.length > 0);\n\n const toolbarDisplay = editor.mobile ? 'scroll' : 'shrink';\n\n return (\n <div\n className={b('editor-wrapper')}\n ref={ref}\n data-qa={qa}\n data-mode={editor.currentMode}\n >\n {showPreview ? (\n <>\n <div className={b('preview-wrapper')}>\n {editor.renderPreview?.({\n getValue: editor.getValue,\n mode: 'preview',\n md: editor.mdOptions,\n directiveSyntax: editor.directiveSyntax,\n })}\n </div>\n <Settings {...settingsProps} settingsVisible={settingsVisibleProp} />\n </>\n ) : (\n <>\n {editorMode === 'wysiwyg' && (\n <WysiwygEditorView\n editor={editor}\n autofocus={autofocus}\n settingsVisible={areSettingsVisible}\n toolbarConfig={wysiwygToolbarConfig}\n toolbarVisible={editor.toolbarVisible}\n hiddenActionsConfig={wysiwygHiddenActionsConfig}\n className={b('editor', {mode: editorMode})}\n toolbarClassName={b('toolbar')}\n stickyToolbar={stickyToolbar}\n toolbarDisplay={toolbarDisplay}\n >\n <Settings\n {...settingsProps}\n settingsVisible={editor.toolbarVisible && settingsVisibleProp}\n />\n </WysiwygEditorView>\n )}\n {editorMode === 'markup' && (\n <MarkupEditorView\n editor={editor}\n autofocus={autofocus}\n settingsVisible={areSettingsVisible}\n toolbarConfig={markupToolbarConfig}\n toolbarVisible={editor.toolbarVisible}\n splitMode={editor.splitMode}\n splitModeEnabled={editor.splitModeEnabled}\n hiddenActionsConfig={markupHiddenActionsConfig}\n className={b('editor', {mode: editorMode})}\n toolbarClassName={b('toolbar')}\n stickyToolbar={stickyToolbar}\n toolbarDisplay={toolbarDisplay}\n >\n <Settings\n {...settingsProps}\n settingsVisible={editor.toolbarVisible && settingsVisibleProp}\n />\n </MarkupEditorView>\n )}\n <Settings\n {...settingsProps}\n settingsVisible={!editor.toolbarVisible && settingsVisibleProp}\n renderPreviewButton={!editor.toolbarVisible && canRenderPreview}\n />\n </>\n )}\n </div>\n );\n },\n);\n\nEditorWrapper.displayName = 'EditorWrapper';\n\ntype ToolbarConfigs = {\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n markupToolbarConfig?: MToolbarData;\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n wysiwygToolbarConfig?: WToolbarData;\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n markupHiddenActionsConfig?: MToolbarItemData[];\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n wysiwygHiddenActionsConfig?: WToolbarItemData[];\n};\n\ntype ViewProps = {\n editor?: Editor;\n autofocus?: boolean;\n // MAJOR: rename to settings\n /** @default true */\n settingsVisible?: boolean | SettingItems[];\n toolbarsPreset?: ToolbarsPreset;\n stickyToolbar: boolean;\n enableSubmitInPreview?: boolean;\n hidePreviewAfterSubmit?: boolean;\n};\n\nexport type MarkdownEditorViewProps = ClassNameProps & ToolbarConfigs & ViewProps & QAProps & {};\n\nexport const MarkdownEditorView = forwardRef<HTMLDivElement, MarkdownEditorViewProps>(\n (props, ref) => {\n const divRef = useEnsuredForwardedRef(ref as React.MutableRefObject<HTMLDivElement>);\n const editorWrapperRef = useRef(null);\n const [showPreview, , unsetShowPreview, toggleShowPreview] = useBooleanState(false);\n\n const [isMounted, setIsMounted] = useState(false);\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n const context = useMarkdownEditorContext();\n const editor = (props.editor ?? context) as EditorInt;\n if (!editor)\n throw new Error(\n '[MarkdownEditorView]: an instance of the editor must be passed through the props or context',\n );\n\n const {\n autofocus,\n className,\n enableSubmitInPreview = true,\n hidePreviewAfterSubmit = false,\n markupHiddenActionsConfig,\n markupToolbarConfig,\n qa,\n settingsVisible = true,\n stickyToolbar,\n toolbarsPreset,\n wysiwygHiddenActionsConfig,\n wysiwygToolbarConfig,\n } = props;\n\n const rerender = useUpdate();\n useLayoutEffect(() => {\n editor.on('rerender', rerender);\n return () => {\n editor.off('rerender', rerender);\n };\n }, [editor, rerender]);\n\n const editorMode = editor.currentMode;\n const markupSplitMode =\n editor.splitModeEnabled && editor.splitMode && editorMode === 'markup';\n\n const splitModeViewWrapperRef = useRef(null);\n\n const toaster = useToaster();\n\n useEffect(() => {\n if (showPreview) {\n divRef.current.focus();\n }\n }, [divRef, showPreview]);\n\n const areSettingsVisible =\n settingsVisible === true ||\n (Array.isArray(settingsVisible) && settingsVisible.length > 0);\n\n return (\n <ErrorBoundary\n onError={(e) => {\n globalLogger.error(e);\n editor.logger.error(e);\n }}\n fallbackRender={({error, resetErrorBoundary}) => {\n toaster.add({\n theme: 'danger',\n name: 'g-md-editor-error',\n title: i18n('error-title'),\n content: error.message,\n });\n setTimeout(() => {\n resetErrorBoundary();\n editor.changeEditorMode({\n mode: 'markup',\n reason: 'error-boundary',\n emit: false,\n });\n });\n return null;\n }}\n >\n <div\n ref={divRef}\n data-qa={qa}\n className={b(\n {\n settings: areSettingsVisible,\n split: markupSplitMode && editor.splitMode,\n },\n [className],\n )}\n role=\"button\"\n tabIndex={0}\n >\n <EditorWrapper\n autofocus={autofocus}\n editor={editor}\n editorMode={editorMode}\n enableSubmitInPreview={enableSubmitInPreview}\n hidePreviewAfterSubmit={hidePreviewAfterSubmit}\n isFocused={isWrapperFocused(divRef)}\n markupHiddenActionsConfig={markupHiddenActionsConfig}\n markupToolbarConfig={markupToolbarConfig}\n qa=\"g-md-editor-mode\"\n ref={editorWrapperRef}\n settingsVisible={settingsVisible}\n showPreview={showPreview}\n stickyToolbar={stickyToolbar}\n toggleShowPreview={toggleShowPreview}\n toolbarsPreset={toolbarsPreset}\n unsetShowPreview={unsetShowPreview}\n wysiwygHiddenActionsConfig={wysiwygHiddenActionsConfig}\n wysiwygToolbarConfig={wysiwygToolbarConfig}\n />\n\n {markupSplitMode && (\n <>\n {editor.splitMode === 'horizontal' ? (\n <HorizontalDrag\n editor={editor}\n isMounted={isMounted}\n leftElRef={editorWrapperRef}\n rightElRef={splitModeViewWrapperRef}\n wrapperRef={divRef}\n />\n ) : (\n <div className={b('resizer')} />\n )}\n <SplitModeView editor={editor} ref={splitModeViewWrapperRef} />\n </>\n )}\n </div>\n </ErrorBoundary>\n );\n },\n);\nMarkdownEditorView.displayName = 'MarkdownEditorView';\n\ninterface MarkupSearchAnchorProps extends Pick<EditorSettingsProps, 'mode'> {}\n\nconst MarkupSearchAnchor: React.FC<MarkupSearchAnchorProps> = ({mode}) => (\n <div className={`g-md-search-${mode}-anchor`}></div>\n);\n\nfunction Settings(props: EditorSettingsProps & {stickyToolbar: boolean}) {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const isSticky = useSticky(wrapperRef) && props.toolbarVisibility && props.stickyToolbar;\n\n return (\n <>\n {(props.renderPreviewButton || props.settingsVisible) && (\n <div className={b('settings-wrapper')}>\n <div\n ref={wrapperRef}\n className={stickyCn.settings({\n withToolbar: props.toolbarVisibility,\n stickyActive: isSticky,\n })}\n >\n <EditorSettings {...props} />\n <MarkupSearchAnchor {...props} />\n </div>\n </div>\n )}\n </>\n );\n}\n\nfunction isPreviewKeyDown(e: KeyboardEvent) {\n const modKey = isMac() ? e.metaKey : e.ctrlKey;\n return modKey && e.shiftKey && e.code === 'KeyP';\n}\n\nfunction isWrapperFocused(divRef: React.RefObject<HTMLDivElement>) {\n return document.activeElement === divRef.current;\n}\n\nfunction isSubmitKeyDown(e: KeyboardEvent) {\n const modKey = isMac() ? e.metaKey : e.ctrlKey;\n return modKey && e.code === 'Enter';\n}\n"]}
@@ -170,6 +170,11 @@ export type MarkdownEditorWysiwygConfig = {
170
170
  * Note: The use of the markdown-it-attrs plugin will be removed in the next major version.
171
171
  */
172
172
  disableMarkdownAttrs?: boolean;
173
+ /**
174
+ * Show search panel in the editor.
175
+ * @default true
176
+ */
177
+ searchPanel?: boolean;
173
178
  };
174
179
  export type MarkdownEditorOptions = {
175
180
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"../../../src","sources":["bundle/types.ts"],"names":[],"mappings":";AAAA,mDAAmD","sourcesContent":["// public types, re-exported in src/bundle/index.ts\n\nimport type {ReactNode} from 'react';\n\nimport type {MarkupString} from '../common';\nimport type {EscapeConfig, Extension} from '../core';\nimport type {Logger2} from '../logger';\nimport type {CreateCodemirrorParams, YfmLangOptions} from '../markup';\nimport type {FileUploadHandler} from '../utils';\nimport type {DirectiveSyntaxContext, DirectiveSyntaxOption} from '../utils/directive';\n\nimport type {ChangeEditorModeOptions} from './Editor';\nimport type {ExtensionsOptions as WysiwygPresetExtensionsOptions} from './wysiwyg-preset';\n\nexport type {Editor as MarkdownEditorInstance} from './Editor';\nexport type MarkdownEditorMode = 'wysiwyg' | 'markup';\nexport type MarkdownEditorPreset = 'zero' | 'commonmark' | 'default' | 'yfm' | 'full';\nexport type MarkdownEditorSplitMode = false | 'horizontal' | 'vertical';\n\nexport type RenderPreviewParams = {\n getValue: () => MarkupString;\n mode: 'preview' | 'split';\n md: Readonly<MarkdownEditorMdOptions>;\n directiveSyntax: Pick<DirectiveSyntaxContext, 'option' | 'valueFor' | 'mdPluginValueFor'>;\n};\nexport type RenderPreview = (params: RenderPreviewParams) => ReactNode;\n\nexport type ParseInsertedUrlAsImage = (text: string) => {imageUrl: string; title?: string} | null;\n\nexport type WysiwygPlaceholderOptions = {\n value?: string | (() => string);\n /** Default – empty-doc\n Values:\n - 'empty-doc' – The placeholder will only be shown when the document is completely empty;\n - 'empty-row-top-level' – The placeholder will be displayed in an empty line that is at the top level of the document structure;\n - 'empty-row' – The placeholder will be shown in any empty line within the document, regardless of its nesting level.\n */\n behavior?: 'empty-doc' | 'empty-row-top-level' | 'empty-row';\n};\n\nexport type MarkdownEditorMdOptions = {\n html?: boolean;\n breaks?: boolean;\n linkify?: boolean;\n linkifyTlds?: string | string[];\n};\n\nexport type MarkdownEditorInitialOptions = {\n markup?: MarkupString;\n /** Default – wysiwyg */\n mode?: MarkdownEditorMode;\n /** Default – true */\n toolbarVisible?: boolean;\n /**\n * Default – false\n *\n * Note: has no effect if `MarkdownEditorMarkupConfig.splitMode` is set to false or is not set.\n */\n splitModeEnabled?: boolean;\n};\n\nexport type MarkdownEditorHandlers = {\n /** Pass this handler to allow uploading files from device. */\n uploadFile?: FileUploadHandler;\n};\n\nexport type MarkdownEditorExperimentalOptions = {\n /**\n * If we need to set dimensions for uploaded images\n *\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n /**\n * If we need to enable new image size calculations\n *\n * @default false\n */\n enableNewImageSizeCalculation?: boolean;\n /**\n * Called before switching from the markup editor to the wysiwyg editor.\n * You can use it to pre-process the value from the markup editor before it gets into the wysiwyg editor.\n */\n prepareRawMarkup?: (value: MarkupString) => MarkupString;\n beforeEditorModeChange?: (\n options: Pick<ChangeEditorModeOptions, 'mode' | 'reason'>,\n ) => boolean | undefined;\n /**\n * Enables support of directive syntax for diplodoc (YFM) extensions.\n *\n * **Note:** This setting affects parsing of markdown markup and serializing to markdown markup.\n * Be careful with it and use it in consistency with diplodoc/transform and diplodoc-extensions.\n *\n * Before enabling this option, make sure that appropriate versions of diplodoc/transform and diplodoc-extensions are installed.\n *\n * You can pass an object in `key:value` format to provide different behaviour for each extension individually.\n *\n * Values:\n * - 'disabled' – directive syntax is disabled;\n * - 'enabled' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using old syntax;\n * - 'preserve' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using directive syntax;\n * - 'overwrite' – existing blocks will be overwritten using directive syntax through serialization;\n * - 'only' – old syntax is disabled, only directive syntax available. Blocks in old syntax will not be parsed.\n *\n * Default value is 'disabled'.\n */\n directiveSyntax?: DirectiveSyntaxOption;\n /**\n * If we need support for empty strings\n *\n * @default false\n */\n preserveEmptyRows?: boolean;\n /**\n * Preserves the original formatting of unmodified blocks,\n * restoring their structure during serialization\n *\n * **Use case:** Maintain consistent markup when switching modes\n *\n * **Note:** Applies to tracked blocks: `yfm_table`\n *\n * @default false\n */\n preserveMarkupFormatting?: boolean;\n};\n\nexport type MarkdownEditorMarkupConfig = {\n /**\n * Pass the rendering function to preview the markdown content.\n *\n * It is also used for split view rendering.\n *\n * If false is passed, preview will be disabled.\n */\n renderPreview?: RenderPreview;\n /**\n * Pass position of split view.\n *\n * Note: for enable split view, you need to pass renderPreview function too.\n *\n * If false is passed, split view will be disabled.\n */\n splitMode?: MarkdownEditorSplitMode;\n /** Additional extensions for codemirror instance. */\n extensions?: CreateCodemirrorParams['extensions'];\n /** Can be used to disable some of the default extensions */\n disabledExtensions?: CreateCodemirrorParams['disabledExtensions'];\n /** Additional keymaps for codemirror instance */\n keymaps?: CreateCodemirrorParams['keymaps'];\n /** Overrides the default placeholder content. */\n placeholder?: CreateCodemirrorParams['placeholder'];\n /** Enable HTML parsing when pasting content. */\n parseHtmlOnPaste?: boolean;\n /**\n * Additional language data for markdown language in codemirror.\n * Can be used to configure additional autocompletions and others.\n * See more https://codemirror.net/docs/ref/#state.EditorState.languageDataAt\n */\n languageData?: YfmLangOptions['languageData'];\n /** Config for @codemirror/autocomplete https://codemirror.net/docs/ref/#autocomplete.autocompletion%5Econfig */\n autocompletion?: CreateCodemirrorParams['autocompletion'];\n /**\n * The function, used to determine if the pasted text is the image url and should be inserted as an image\n */\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n /**\n * Show search panel in the editor.\n * @default true\n */\n searchPanel?: boolean;\n};\n\n// do not export this type\ntype ExtensionsOptions<T extends object = {}> = Omit<\n WysiwygPresetExtensionsOptions,\n 'reactRenderer'\n> &\n T;\n\nexport type MarkdownEditorWysiwygConfig = {\n /** Additional extensions */\n extensions?: Extension;\n extensionOptions?: ExtensionsOptions;\n escapeConfig?: EscapeConfig;\n placeholderOptions?: WysiwygPlaceholderOptions;\n // MAJOR: remove markdown-it-attrs\n /**\n * Disable the markdown-it-attrs plugin in the markup parser.\n *\n * Note: The use of the markdown-it-attrs plugin will be removed in the next major version.\n */\n disableMarkdownAttrs?: boolean;\n};\n\nexport type MarkdownEditorOptions = {\n /**\n * A set of plug-in extensions.\n *\n * @default 'full'\n */\n preset?: MarkdownEditorPreset;\n /** Markdown parser options */\n md?: MarkdownEditorMdOptions;\n /** Initial values */\n initial?: MarkdownEditorInitialOptions;\n handlers?: MarkdownEditorHandlers;\n experimental?: MarkdownEditorExperimentalOptions;\n /** Options for markup mode */\n markupConfig?: MarkdownEditorMarkupConfig;\n /** Options for wysiwyg mode */\n wysiwygConfig?: MarkdownEditorWysiwygConfig;\n logger?: Logger2.ILogger;\n /** Mobile view */\n mobile?: boolean;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"../../../src","sources":["bundle/types.ts"],"names":[],"mappings":";AAAA,mDAAmD","sourcesContent":["// public types, re-exported in src/bundle/index.ts\n\nimport type {ReactNode} from 'react';\n\nimport type {MarkupString} from '../common';\nimport type {EscapeConfig, Extension} from '../core';\nimport type {Logger2} from '../logger';\nimport type {CreateCodemirrorParams, YfmLangOptions} from '../markup';\nimport type {FileUploadHandler} from '../utils';\nimport type {DirectiveSyntaxContext, DirectiveSyntaxOption} from '../utils/directive';\n\nimport type {ChangeEditorModeOptions} from './Editor';\nimport type {ExtensionsOptions as WysiwygPresetExtensionsOptions} from './wysiwyg-preset';\n\nexport type {Editor as MarkdownEditorInstance} from './Editor';\nexport type MarkdownEditorMode = 'wysiwyg' | 'markup';\nexport type MarkdownEditorPreset = 'zero' | 'commonmark' | 'default' | 'yfm' | 'full';\nexport type MarkdownEditorSplitMode = false | 'horizontal' | 'vertical';\n\nexport type RenderPreviewParams = {\n getValue: () => MarkupString;\n mode: 'preview' | 'split';\n md: Readonly<MarkdownEditorMdOptions>;\n directiveSyntax: Pick<DirectiveSyntaxContext, 'option' | 'valueFor' | 'mdPluginValueFor'>;\n};\nexport type RenderPreview = (params: RenderPreviewParams) => ReactNode;\n\nexport type ParseInsertedUrlAsImage = (text: string) => {imageUrl: string; title?: string} | null;\n\nexport type WysiwygPlaceholderOptions = {\n value?: string | (() => string);\n /** Default – empty-doc\n Values:\n - 'empty-doc' – The placeholder will only be shown when the document is completely empty;\n - 'empty-row-top-level' – The placeholder will be displayed in an empty line that is at the top level of the document structure;\n - 'empty-row' – The placeholder will be shown in any empty line within the document, regardless of its nesting level.\n */\n behavior?: 'empty-doc' | 'empty-row-top-level' | 'empty-row';\n};\n\nexport type MarkdownEditorMdOptions = {\n html?: boolean;\n breaks?: boolean;\n linkify?: boolean;\n linkifyTlds?: string | string[];\n};\n\nexport type MarkdownEditorInitialOptions = {\n markup?: MarkupString;\n /** Default – wysiwyg */\n mode?: MarkdownEditorMode;\n /** Default – true */\n toolbarVisible?: boolean;\n /**\n * Default – false\n *\n * Note: has no effect if `MarkdownEditorMarkupConfig.splitMode` is set to false or is not set.\n */\n splitModeEnabled?: boolean;\n};\n\nexport type MarkdownEditorHandlers = {\n /** Pass this handler to allow uploading files from device. */\n uploadFile?: FileUploadHandler;\n};\n\nexport type MarkdownEditorExperimentalOptions = {\n /**\n * If we need to set dimensions for uploaded images\n *\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n /**\n * If we need to enable new image size calculations\n *\n * @default false\n */\n enableNewImageSizeCalculation?: boolean;\n /**\n * Called before switching from the markup editor to the wysiwyg editor.\n * You can use it to pre-process the value from the markup editor before it gets into the wysiwyg editor.\n */\n prepareRawMarkup?: (value: MarkupString) => MarkupString;\n beforeEditorModeChange?: (\n options: Pick<ChangeEditorModeOptions, 'mode' | 'reason'>,\n ) => boolean | undefined;\n /**\n * Enables support of directive syntax for diplodoc (YFM) extensions.\n *\n * **Note:** This setting affects parsing of markdown markup and serializing to markdown markup.\n * Be careful with it and use it in consistency with diplodoc/transform and diplodoc-extensions.\n *\n * Before enabling this option, make sure that appropriate versions of diplodoc/transform and diplodoc-extensions are installed.\n *\n * You can pass an object in `key:value` format to provide different behaviour for each extension individually.\n *\n * Values:\n * - 'disabled' – directive syntax is disabled;\n * - 'enabled' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using old syntax;\n * - 'preserve' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using directive syntax;\n * - 'overwrite' – existing blocks will be overwritten using directive syntax through serialization;\n * - 'only' – old syntax is disabled, only directive syntax available. Blocks in old syntax will not be parsed.\n *\n * Default value is 'disabled'.\n */\n directiveSyntax?: DirectiveSyntaxOption;\n /**\n * If we need support for empty strings\n *\n * @default false\n */\n preserveEmptyRows?: boolean;\n /**\n * Preserves the original formatting of unmodified blocks,\n * restoring their structure during serialization\n *\n * **Use case:** Maintain consistent markup when switching modes\n *\n * **Note:** Applies to tracked blocks: `yfm_table`\n *\n * @default false\n */\n preserveMarkupFormatting?: boolean;\n};\n\nexport type MarkdownEditorMarkupConfig = {\n /**\n * Pass the rendering function to preview the markdown content.\n *\n * It is also used for split view rendering.\n *\n * If false is passed, preview will be disabled.\n */\n renderPreview?: RenderPreview;\n /**\n * Pass position of split view.\n *\n * Note: for enable split view, you need to pass renderPreview function too.\n *\n * If false is passed, split view will be disabled.\n */\n splitMode?: MarkdownEditorSplitMode;\n /** Additional extensions for codemirror instance. */\n extensions?: CreateCodemirrorParams['extensions'];\n /** Can be used to disable some of the default extensions */\n disabledExtensions?: CreateCodemirrorParams['disabledExtensions'];\n /** Additional keymaps for codemirror instance */\n keymaps?: CreateCodemirrorParams['keymaps'];\n /** Overrides the default placeholder content. */\n placeholder?: CreateCodemirrorParams['placeholder'];\n /** Enable HTML parsing when pasting content. */\n parseHtmlOnPaste?: boolean;\n /**\n * Additional language data for markdown language in codemirror.\n * Can be used to configure additional autocompletions and others.\n * See more https://codemirror.net/docs/ref/#state.EditorState.languageDataAt\n */\n languageData?: YfmLangOptions['languageData'];\n /** Config for @codemirror/autocomplete https://codemirror.net/docs/ref/#autocomplete.autocompletion%5Econfig */\n autocompletion?: CreateCodemirrorParams['autocompletion'];\n /**\n * The function, used to determine if the pasted text is the image url and should be inserted as an image\n */\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n /**\n * Show search panel in the editor.\n * @default true\n */\n searchPanel?: boolean;\n};\n\n// do not export this type\ntype ExtensionsOptions<T extends object = {}> = Omit<\n WysiwygPresetExtensionsOptions,\n 'reactRenderer'\n> &\n T;\n\nexport type MarkdownEditorWysiwygConfig = {\n /** Additional extensions */\n extensions?: Extension;\n extensionOptions?: ExtensionsOptions;\n escapeConfig?: EscapeConfig;\n placeholderOptions?: WysiwygPlaceholderOptions;\n // MAJOR: remove markdown-it-attrs\n /**\n * Disable the markdown-it-attrs plugin in the markup parser.\n *\n * Note: The use of the markdown-it-attrs plugin will be removed in the next major version.\n */\n disableMarkdownAttrs?: boolean;\n /**\n * Show search panel in the editor.\n * @default true\n */\n searchPanel?: boolean;\n};\n\nexport type MarkdownEditorOptions = {\n /**\n * A set of plug-in extensions.\n *\n * @default 'full'\n */\n preset?: MarkdownEditorPreset;\n /** Markdown parser options */\n md?: MarkdownEditorMdOptions;\n /** Initial values */\n initial?: MarkdownEditorInitialOptions;\n handlers?: MarkdownEditorHandlers;\n experimental?: MarkdownEditorExperimentalOptions;\n /** Options for markup mode */\n markupConfig?: MarkdownEditorMarkupConfig;\n /** Options for wysiwyg mode */\n wysiwygConfig?: MarkdownEditorWysiwygConfig;\n logger?: Logger2.ILogger;\n /** Mobile view */\n mobile?: boolean;\n};\n"]}
@@ -40,6 +40,7 @@ function useMarkdownEditor(props, deps = []) {
40
40
  needToSetDimensionsForUploadedImages: experimental.needToSetDimensionsForUploadedImages,
41
41
  enableNewImageSizeCalculation: experimental.enableNewImageSizeCalculation,
42
42
  mobile,
43
+ searchPanel: wysiwygConfig.searchPanel ?? true,
43
44
  });
44
45
  {
45
46
  const extraExtensions = wysiwygConfig.extensions;
@@ -1 +1 @@
1
- {"version":3,"file":"useMarkdownEditor.js","sourceRoot":"../../../src","sources":["bundle/useMarkdownEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import {useLayoutEffect, useMemo} from 'react';\n\nimport type {Extension} from '../core';\nimport {getPMTransformers} from '../core/markdown/ProseMirrorTransformer/getTransformers';\nimport {ReactRenderStorage} from '../extensions';\nimport {Logger2, globalLogger} from '../logger';\nimport {DirectiveSyntaxContext} from '../utils/directive';\n\nimport {EditorImpl, type EditorInt} from './Editor';\nimport type {\n MarkdownEditorInstance,\n MarkdownEditorMode,\n MarkdownEditorOptions,\n MarkdownEditorPreset,\n} from './types';\nimport {BundlePreset} from './wysiwyg-preset';\n\nexport type UseMarkdownEditorProps = MarkdownEditorOptions;\n\nexport function useMarkdownEditor(\n props: UseMarkdownEditorProps,\n deps: React.DependencyList = [],\n): MarkdownEditorInstance {\n const editor = useMemo<EditorInt>(() => {\n const {\n md = {},\n initial = {},\n handlers = {},\n experimental = {},\n markupConfig = {},\n wysiwygConfig = {},\n logger = new Logger2(),\n mobile,\n } = props;\n\n const preset: MarkdownEditorPreset = props.preset ?? 'full';\n const renderStorage = new ReactRenderStorage();\n\n const pmTransformers = getPMTransformers({\n emptyRowTransformer: experimental.preserveEmptyRows,\n });\n\n const directiveSyntax = new DirectiveSyntaxContext(experimental.directiveSyntax);\n\n const extensions: Extension = (builder) => {\n const extensionOptions = wysiwygConfig.extensionOptions;\n\n builder.use(BundlePreset, {\n ...extensionOptions,\n directiveSyntax,\n preset,\n reactRenderer: renderStorage,\n onCancel: () => {\n editor.emit('cancel', null);\n return true;\n },\n onSubmit: () => {\n editor.emit('submit', null);\n return true;\n },\n disableMdAttrs: wysiwygConfig.disableMarkdownAttrs,\n preserveEmptyRows: experimental.preserveEmptyRows,\n placeholderOptions: wysiwygConfig.placeholderOptions,\n mdBreaks: md.breaks,\n fileUploadHandler: handlers.uploadFile,\n needToSetDimensionsForUploadedImages:\n experimental.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: experimental.enableNewImageSizeCalculation,\n mobile,\n });\n {\n const extraExtensions = wysiwygConfig.extensions;\n if (extraExtensions) {\n builder.use(extraExtensions, props.wysiwygConfig?.extensionOptions);\n }\n }\n };\n\n return new EditorImpl({\n ...props,\n logger,\n preset,\n renderStorage,\n directiveSyntax,\n pmTransformers,\n md,\n initial,\n handlers,\n experimental,\n markupConfig,\n wysiwygConfig: {\n ...wysiwygConfig,\n extensions,\n },\n });\n }, deps);\n\n useLayoutEffect(() => {\n function onToolbarAction({editorMode, id}: {editorMode: MarkdownEditorMode; id: string}) {\n globalLogger.action({mode: editorMode, source: 'toolbar', action: id});\n editor.logger.action({mode: editorMode, source: 'toolbar', action: id});\n }\n\n editor.on('toolbar-action', onToolbarAction);\n return () => {\n editor.off('toolbar-action', onToolbarAction);\n editor.destroy();\n };\n }, [editor]);\n return editor;\n}\n"]}
1
+ {"version":3,"file":"useMarkdownEditor.js","sourceRoot":"../../../src","sources":["bundle/useMarkdownEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import {useLayoutEffect, useMemo} from 'react';\n\nimport type {Extension} from '../core';\nimport {getPMTransformers} from '../core/markdown/ProseMirrorTransformer/getTransformers';\nimport {ReactRenderStorage} from '../extensions';\nimport {Logger2, globalLogger} from '../logger';\nimport {DirectiveSyntaxContext} from '../utils/directive';\n\nimport {EditorImpl, type EditorInt} from './Editor';\nimport type {\n MarkdownEditorInstance,\n MarkdownEditorMode,\n MarkdownEditorOptions,\n MarkdownEditorPreset,\n} from './types';\nimport {BundlePreset} from './wysiwyg-preset';\n\nexport type UseMarkdownEditorProps = MarkdownEditorOptions;\n\nexport function useMarkdownEditor(\n props: UseMarkdownEditorProps,\n deps: React.DependencyList = [],\n): MarkdownEditorInstance {\n const editor = useMemo<EditorInt>(() => {\n const {\n md = {},\n initial = {},\n handlers = {},\n experimental = {},\n markupConfig = {},\n wysiwygConfig = {},\n logger = new Logger2(),\n mobile,\n } = props;\n\n const preset: MarkdownEditorPreset = props.preset ?? 'full';\n const renderStorage = new ReactRenderStorage();\n\n const pmTransformers = getPMTransformers({\n emptyRowTransformer: experimental.preserveEmptyRows,\n });\n\n const directiveSyntax = new DirectiveSyntaxContext(experimental.directiveSyntax);\n\n const extensions: Extension = (builder) => {\n const extensionOptions = wysiwygConfig.extensionOptions;\n\n builder.use(BundlePreset, {\n ...extensionOptions,\n directiveSyntax,\n preset,\n reactRenderer: renderStorage,\n onCancel: () => {\n editor.emit('cancel', null);\n return true;\n },\n onSubmit: () => {\n editor.emit('submit', null);\n return true;\n },\n disableMdAttrs: wysiwygConfig.disableMarkdownAttrs,\n preserveEmptyRows: experimental.preserveEmptyRows,\n placeholderOptions: wysiwygConfig.placeholderOptions,\n mdBreaks: md.breaks,\n fileUploadHandler: handlers.uploadFile,\n needToSetDimensionsForUploadedImages:\n experimental.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: experimental.enableNewImageSizeCalculation,\n mobile,\n searchPanel: wysiwygConfig.searchPanel ?? true,\n });\n {\n const extraExtensions = wysiwygConfig.extensions;\n if (extraExtensions) {\n builder.use(extraExtensions, props.wysiwygConfig?.extensionOptions);\n }\n }\n };\n\n return new EditorImpl({\n ...props,\n logger,\n preset,\n renderStorage,\n directiveSyntax,\n pmTransformers,\n md,\n initial,\n handlers,\n experimental,\n markupConfig,\n wysiwygConfig: {\n ...wysiwygConfig,\n extensions,\n },\n });\n }, deps);\n\n useLayoutEffect(() => {\n function onToolbarAction({editorMode, id}: {editorMode: MarkdownEditorMode; id: string}) {\n globalLogger.action({mode: editorMode, source: 'toolbar', action: id});\n editor.logger.action({mode: editorMode, source: 'toolbar', action: id});\n }\n\n editor.on('toolbar-action', onToolbarAction);\n return () => {\n editor.off('toolbar-action', onToolbarAction);\n editor.destroy();\n };\n }, [editor]);\n return editor;\n}\n"]}
@@ -22,6 +22,7 @@ export type BundlePresetOptions = ExtensionsOptions & EditorModeKeymapOptions &
22
22
  directiveSyntax: DirectiveSyntaxContext;
23
23
  disableMdAttrs?: boolean;
24
24
  mobile?: boolean;
25
+ searchPanel: boolean;
25
26
  };
26
27
  declare global {
27
28
  namespace WysiwygEditor {
@@ -32,6 +32,7 @@ const BundlePreset = (builder, opts) => {
32
32
  },
33
33
  },
34
34
  cursor: { dropOptions: dropCursor },
35
+ search: opts.searchPanel ? { anchorSelector: '.g-md-search-wysiwyg-anchor' } : undefined,
35
36
  clipboard: { pasteFileHandler: opts.fileUploadHandler, ...opts.clipboard },
36
37
  selectionContext: { config: wysiwyg_1.wSelectionMenuConfigByPreset.zero, ...opts.selectionContext },
37
38
  commandMenu: { actions: wysiwyg_1.wCommandMenuConfigByPreset.zero, ...opts.commandMenu },
@@ -1 +1 @@
1
- {"version":3,"file":"wysiwyg-preset.js","sourceRoot":"../../../src","sources":["bundle/wysiwyg-preset.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Node} from 'prosemirror-model';\n\nimport type {ExtensionAuto} from '../core';\nimport {BehaviorPreset, type BehaviorPresetOptions} from '../extensions/behavior';\nimport {\n EditorModeKeymap,\n type EditorModeKeymapOptions,\n} from '../extensions/behavior/EditorModeKeymap';\nimport {BaseNode, YfmHeadingAttr, YfmNoteNode} from '../extensions/specs';\nimport {i18n as i18nPlaceholder} from '../i18n/placeholder';\nimport {CommonMarkPreset, type CommonMarkPresetOptions} from '../presets/commonmark';\nimport {DefaultPreset, type DefaultPresetOptions} from '../presets/default';\nimport {FullPreset, type FullPresetOptions} from '../presets/full';\nimport {YfmPreset, type YfmPresetOptions} from '../presets/yfm';\nimport {ZeroPreset, type ZeroPresetOptions} from '../presets/zero';\nimport {Action as A, formatter as f} from '../shortcuts';\nimport type {DirectiveSyntaxContext} from '../utils/directive';\nimport type {FileUploadHandler} from '../utils/upload';\n\nimport {wCommandMenuConfigByPreset, wSelectionMenuConfigByPreset} from './config/wysiwyg';\nimport {emojiDefs} from './emoji';\nimport type {MarkdownEditorPreset, WysiwygPlaceholderOptions} from './types';\n\nconst DEFAULT_IGNORED_KEYS = ['Tab', 'Shift-Tab'] as const;\n\nexport type ExtensionsOptions = BehaviorPresetOptions & FullPresetOptions;\n\nexport type BundlePresetOptions = ExtensionsOptions &\n EditorModeKeymapOptions & {\n preset: MarkdownEditorPreset;\n mdBreaks?: boolean;\n preserveEmptyRows?: boolean;\n fileUploadHandler?: FileUploadHandler;\n placeholderOptions?: WysiwygPlaceholderOptions;\n /**\n * If we need to set dimensions for uploaded images\n *\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n enableNewImageSizeCalculation?: boolean;\n directiveSyntax: DirectiveSyntaxContext;\n // MAJOR: remove markdown-it-attrs\n disableMdAttrs?: boolean;\n mobile?: boolean;\n };\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {\n directiveSyntax: DirectiveSyntaxContext;\n }\n }\n}\n\nexport const BundlePreset: ExtensionAuto<BundlePresetOptions> = (builder, opts) => {\n builder.context.set('directiveSyntax', opts.directiveSyntax);\n\n const dropCursor: NonNullable<BundlePresetOptions['cursor']>['dropOptions'] = {\n color: 'var(--g-color-line-brand)',\n width: 2,\n };\n\n const zeroOptions: BehaviorPresetOptions & ZeroPresetOptions = {\n ...opts,\n baseStyles: {\n attributes: {\n // for disable setting attrs inside pm-view from floating-ui from uikit\n // see https://github.com/floating-ui/floating-ui/discussions/3213\n // and https://github.com/floating-ui/floating-ui/pull/3202\n 'aria-live': '',\n ...opts.baseStyles?.attributes,\n },\n },\n cursor: {dropOptions: dropCursor},\n clipboard: {pasteFileHandler: opts.fileUploadHandler, ...opts.clipboard},\n selectionContext: {config: wSelectionMenuConfigByPreset.zero, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.zero, ...opts.commandMenu},\n history: {undoKey: f.toPM(A.Undo), redoKey: f.toPM(A.Redo), ...opts.history},\n baseSchema: {\n paragraphKey: f.toPM(A.Text),\n paragraphPlaceholder: (node: Node, parent?: Node | null) => {\n const {value, behavior} = opts.placeholderOptions || {};\n\n const emptyEntries = {\n 'empty-row': !node.text,\n 'empty-row-top-level': !node.text && parent?.type.name === BaseNode.Doc,\n 'empty-doc':\n !node.text && parent?.type.name === BaseNode.Doc && parent.childCount === 1,\n };\n\n const showPlaceholder = emptyEntries[behavior || 'empty-doc'];\n\n if (!showPlaceholder) return null;\n\n return typeof value === 'function'\n ? value()\n : value ?? i18nPlaceholder(opts.mobile ? 'doc_empty_mobile' : 'doc_empty');\n },\n preserveEmptyRows: opts.preserveEmptyRows,\n ...opts.baseSchema,\n },\n };\n const commonMarkOptions: BehaviorPresetOptions & CommonMarkPresetOptions = {\n ...zeroOptions,\n selectionContext: {\n config: wSelectionMenuConfigByPreset.commonmark,\n ...opts.selectionContext,\n },\n commandMenu: {actions: wCommandMenuConfigByPreset.commonmark, ...opts.commandMenu},\n breaks: {\n preferredBreak: (opts.mdBreaks ? 'soft' : 'hard') as 'soft' | 'hard',\n ...opts.breaks,\n },\n bold: {boldKey: f.toPM(A.Bold), ...opts.bold},\n italic: {italicKey: f.toPM(A.Italic), ...opts.italic},\n code: {codeKey: f.toPM(A.Code), ...opts.code},\n codeBlock: {\n codeBlockKey: f.toPM(A.CodeBlock),\n ...opts.codeBlock,\n },\n blockquote: {qouteKey: f.toPM(A.Quote), ...opts.blockquote},\n link: {linkKey: f.toPM(A.Link), ...opts.link},\n lists: {\n ulKey: f.toPM(A.BulletList),\n olKey: f.toPM(A.OrderedList),\n ulInputRules: {plus: false},\n ...opts.lists,\n },\n image: {\n parseInsertedUrlAsImage: opts.imgSize?.parseInsertedUrlAsImage,\n },\n };\n const defaultOptions: BehaviorPresetOptions & DefaultPresetOptions = {\n ...commonMarkOptions,\n selectionContext: {config: wSelectionMenuConfigByPreset.default, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.default, ...opts.commandMenu},\n strike: {strikeKey: f.toPM(A.Strike), ...opts.strike},\n };\n const yfmOptions: BehaviorPresetOptions & YfmPresetOptions = {\n ...defaultOptions,\n yfmConfigs: {disableAttrs: opts.disableMdAttrs, ...opts.yfmConfigs},\n selectionContext: {config: wSelectionMenuConfigByPreset.yfm, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.yfm, ...opts.commandMenu},\n underline: {underlineKey: f.toPM(A.Underline), ...opts.underline},\n imgSize: {\n imageUploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: opts.enableNewImageSizeCalculation,\n ...opts.imgSize,\n },\n checkbox: {checkboxLabelPlaceholder: () => i18nPlaceholder('checkbox'), ...opts.checkbox},\n deflist: {\n deflistTermPlaceholder: () => i18nPlaceholder('deflist_term'),\n deflistDescPlaceholder: () => i18nPlaceholder('deflist_desc'),\n },\n yfmCut: {\n yfmCutKey: f.toPM(A.Cut),\n yfmCutTitlePlaceholder: () => i18nPlaceholder('cut_title'),\n yfmCutContentPlaceholder: () => i18nPlaceholder('cut_content'),\n ...opts.yfmCut,\n },\n yfmNote: {\n yfmNoteKey: f.toPM(A.Note),\n yfmNoteTitlePlaceholder: () => i18nPlaceholder('note_title'),\n ...opts.yfmNote,\n },\n yfmTable: {\n yfmTableCellPlaceholder: () => i18nPlaceholder('table_cell'),\n ...opts.yfmTable,\n controls: opts.mobile ? false : opts.yfmTable?.controls,\n },\n yfmFile: {\n fileUploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,\n ...opts.yfmFile,\n },\n yfmHeading: {\n h1Key: f.toPM(A.Heading1),\n h2Key: f.toPM(A.Heading2),\n h3Key: f.toPM(A.Heading3),\n h4Key: f.toPM(A.Heading4),\n h5Key: f.toPM(A.Heading5),\n h6Key: f.toPM(A.Heading6),\n headingPlaceholder: (node: Node) =>\n `${i18nPlaceholder('heading')} ${node.attrs[YfmHeadingAttr.Level]}`, // todo: remove attrs import\n ...opts.yfmHeading,\n },\n placeholder: {\n [YfmNoteNode.NoteContent]: () => i18nPlaceholder('note_content'),\n },\n };\n const fullOptions: BehaviorPresetOptions & FullPresetOptions = {\n ...yfmOptions,\n selectionContext: {config: wSelectionMenuConfigByPreset.full, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.full, ...opts.commandMenu},\n emoji: {defs: emojiDefs, ...opts.emoji},\n };\n\n const zeroIgnoreActions = [A.Undo, A.Redo];\n const commonMarkIgnoreActions = zeroIgnoreActions.concat(\n A.Bold,\n A.Italic,\n A.Code,\n A.Link,\n\n A.Text,\n A.Heading1,\n A.Heading2,\n A.Heading3,\n A.Heading4,\n A.Heading5,\n A.Heading6,\n\n A.BulletList,\n A.OrderedList,\n\n A.Quote,\n A.CodeBlock,\n );\n const defaultIgnoreActions = commonMarkIgnoreActions.concat(A.Strike);\n const yfmIgnoreActions = defaultIgnoreActions.concat(\n A.Underline,\n\n A.Note,\n A.Cut,\n );\n const fullIgnoreActions = yfmIgnoreActions.concat();\n\n let ignoreActions;\n\n switch (opts.preset) {\n case 'zero': {\n ignoreActions = zeroIgnoreActions;\n builder.use(BehaviorPreset, zeroOptions).use(ZeroPreset, zeroOptions);\n break;\n }\n case 'commonmark': {\n ignoreActions = commonMarkIgnoreActions;\n builder.use(BehaviorPreset, commonMarkOptions).use(CommonMarkPreset, commonMarkOptions);\n break;\n }\n case 'default': {\n ignoreActions = defaultIgnoreActions;\n builder.use(BehaviorPreset, defaultOptions).use(DefaultPreset, defaultOptions);\n break;\n }\n case 'yfm': {\n ignoreActions = yfmIgnoreActions;\n builder.use(BehaviorPreset, yfmOptions).use(YfmPreset, yfmOptions);\n break;\n }\n default: {\n ignoreActions = fullIgnoreActions;\n builder.use(BehaviorPreset, fullOptions).use(FullPreset, fullOptions);\n break;\n }\n }\n\n const ignoreKeysList = opts.ignoreKeysList?.slice() ?? [];\n ignoreKeysList.push(...DEFAULT_IGNORED_KEYS);\n for (const action of ignoreActions) {\n const key = f.toPM(action);\n if (key) ignoreKeysList.push(key);\n }\n\n builder.use(EditorModeKeymap, {\n onSubmit: opts.onSubmit,\n onCancel: opts.onCancel,\n ignoreKeysList,\n });\n};\n"]}
1
+ {"version":3,"file":"wysiwyg-preset.js","sourceRoot":"../../../src","sources":["bundle/wysiwyg-preset.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Node} from 'prosemirror-model';\n\nimport type {ExtensionAuto} from '../core';\nimport {BehaviorPreset, type BehaviorPresetOptions} from '../extensions/behavior';\nimport {\n EditorModeKeymap,\n type EditorModeKeymapOptions,\n} from '../extensions/behavior/EditorModeKeymap';\nimport {BaseNode, YfmHeadingAttr, YfmNoteNode} from '../extensions/specs';\nimport {i18n as i18nPlaceholder} from '../i18n/placeholder';\nimport {CommonMarkPreset, type CommonMarkPresetOptions} from '../presets/commonmark';\nimport {DefaultPreset, type DefaultPresetOptions} from '../presets/default';\nimport {FullPreset, type FullPresetOptions} from '../presets/full';\nimport {YfmPreset, type YfmPresetOptions} from '../presets/yfm';\nimport {ZeroPreset, type ZeroPresetOptions} from '../presets/zero';\nimport {Action as A, formatter as f} from '../shortcuts';\nimport type {DirectiveSyntaxContext} from '../utils/directive';\nimport type {FileUploadHandler} from '../utils/upload';\n\nimport {wCommandMenuConfigByPreset, wSelectionMenuConfigByPreset} from './config/wysiwyg';\nimport {emojiDefs} from './emoji';\nimport type {MarkdownEditorPreset, WysiwygPlaceholderOptions} from './types';\n\nconst DEFAULT_IGNORED_KEYS = ['Tab', 'Shift-Tab'] as const;\n\nexport type ExtensionsOptions = BehaviorPresetOptions & FullPresetOptions;\n\nexport type BundlePresetOptions = ExtensionsOptions &\n EditorModeKeymapOptions & {\n preset: MarkdownEditorPreset;\n mdBreaks?: boolean;\n preserveEmptyRows?: boolean;\n fileUploadHandler?: FileUploadHandler;\n placeholderOptions?: WysiwygPlaceholderOptions;\n /**\n * If we need to set dimensions for uploaded images\n *\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n enableNewImageSizeCalculation?: boolean;\n directiveSyntax: DirectiveSyntaxContext;\n // MAJOR: remove markdown-it-attrs\n disableMdAttrs?: boolean;\n mobile?: boolean;\n searchPanel: boolean;\n };\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {\n directiveSyntax: DirectiveSyntaxContext;\n }\n }\n}\n\nexport const BundlePreset: ExtensionAuto<BundlePresetOptions> = (builder, opts) => {\n builder.context.set('directiveSyntax', opts.directiveSyntax);\n\n const dropCursor: NonNullable<BundlePresetOptions['cursor']>['dropOptions'] = {\n color: 'var(--g-color-line-brand)',\n width: 2,\n };\n\n const zeroOptions: BehaviorPresetOptions & ZeroPresetOptions = {\n ...opts,\n baseStyles: {\n attributes: {\n // for disable setting attrs inside pm-view from floating-ui from uikit\n // see https://github.com/floating-ui/floating-ui/discussions/3213\n // and https://github.com/floating-ui/floating-ui/pull/3202\n 'aria-live': '',\n ...opts.baseStyles?.attributes,\n },\n },\n cursor: {dropOptions: dropCursor},\n search: opts.searchPanel ? {anchorSelector: '.g-md-search-wysiwyg-anchor'} : undefined,\n clipboard: {pasteFileHandler: opts.fileUploadHandler, ...opts.clipboard},\n selectionContext: {config: wSelectionMenuConfigByPreset.zero, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.zero, ...opts.commandMenu},\n history: {undoKey: f.toPM(A.Undo), redoKey: f.toPM(A.Redo), ...opts.history},\n baseSchema: {\n paragraphKey: f.toPM(A.Text),\n paragraphPlaceholder: (node: Node, parent?: Node | null) => {\n const {value, behavior} = opts.placeholderOptions || {};\n\n const emptyEntries = {\n 'empty-row': !node.text,\n 'empty-row-top-level': !node.text && parent?.type.name === BaseNode.Doc,\n 'empty-doc':\n !node.text && parent?.type.name === BaseNode.Doc && parent.childCount === 1,\n };\n\n const showPlaceholder = emptyEntries[behavior || 'empty-doc'];\n\n if (!showPlaceholder) return null;\n\n return typeof value === 'function'\n ? value()\n : value ?? i18nPlaceholder(opts.mobile ? 'doc_empty_mobile' : 'doc_empty');\n },\n preserveEmptyRows: opts.preserveEmptyRows,\n ...opts.baseSchema,\n },\n };\n const commonMarkOptions: BehaviorPresetOptions & CommonMarkPresetOptions = {\n ...zeroOptions,\n selectionContext: {\n config: wSelectionMenuConfigByPreset.commonmark,\n ...opts.selectionContext,\n },\n commandMenu: {actions: wCommandMenuConfigByPreset.commonmark, ...opts.commandMenu},\n breaks: {\n preferredBreak: (opts.mdBreaks ? 'soft' : 'hard') as 'soft' | 'hard',\n ...opts.breaks,\n },\n bold: {boldKey: f.toPM(A.Bold), ...opts.bold},\n italic: {italicKey: f.toPM(A.Italic), ...opts.italic},\n code: {codeKey: f.toPM(A.Code), ...opts.code},\n codeBlock: {\n codeBlockKey: f.toPM(A.CodeBlock),\n ...opts.codeBlock,\n },\n blockquote: {qouteKey: f.toPM(A.Quote), ...opts.blockquote},\n link: {linkKey: f.toPM(A.Link), ...opts.link},\n lists: {\n ulKey: f.toPM(A.BulletList),\n olKey: f.toPM(A.OrderedList),\n ulInputRules: {plus: false},\n ...opts.lists,\n },\n image: {\n parseInsertedUrlAsImage: opts.imgSize?.parseInsertedUrlAsImage,\n },\n };\n const defaultOptions: BehaviorPresetOptions & DefaultPresetOptions = {\n ...commonMarkOptions,\n selectionContext: {config: wSelectionMenuConfigByPreset.default, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.default, ...opts.commandMenu},\n strike: {strikeKey: f.toPM(A.Strike), ...opts.strike},\n };\n const yfmOptions: BehaviorPresetOptions & YfmPresetOptions = {\n ...defaultOptions,\n yfmConfigs: {disableAttrs: opts.disableMdAttrs, ...opts.yfmConfigs},\n selectionContext: {config: wSelectionMenuConfigByPreset.yfm, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.yfm, ...opts.commandMenu},\n underline: {underlineKey: f.toPM(A.Underline), ...opts.underline},\n imgSize: {\n imageUploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: opts.enableNewImageSizeCalculation,\n ...opts.imgSize,\n },\n checkbox: {checkboxLabelPlaceholder: () => i18nPlaceholder('checkbox'), ...opts.checkbox},\n deflist: {\n deflistTermPlaceholder: () => i18nPlaceholder('deflist_term'),\n deflistDescPlaceholder: () => i18nPlaceholder('deflist_desc'),\n },\n yfmCut: {\n yfmCutKey: f.toPM(A.Cut),\n yfmCutTitlePlaceholder: () => i18nPlaceholder('cut_title'),\n yfmCutContentPlaceholder: () => i18nPlaceholder('cut_content'),\n ...opts.yfmCut,\n },\n yfmNote: {\n yfmNoteKey: f.toPM(A.Note),\n yfmNoteTitlePlaceholder: () => i18nPlaceholder('note_title'),\n ...opts.yfmNote,\n },\n yfmTable: {\n yfmTableCellPlaceholder: () => i18nPlaceholder('table_cell'),\n ...opts.yfmTable,\n controls: opts.mobile ? false : opts.yfmTable?.controls,\n },\n yfmFile: {\n fileUploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,\n ...opts.yfmFile,\n },\n yfmHeading: {\n h1Key: f.toPM(A.Heading1),\n h2Key: f.toPM(A.Heading2),\n h3Key: f.toPM(A.Heading3),\n h4Key: f.toPM(A.Heading4),\n h5Key: f.toPM(A.Heading5),\n h6Key: f.toPM(A.Heading6),\n headingPlaceholder: (node: Node) =>\n `${i18nPlaceholder('heading')} ${node.attrs[YfmHeadingAttr.Level]}`, // todo: remove attrs import\n ...opts.yfmHeading,\n },\n placeholder: {\n [YfmNoteNode.NoteContent]: () => i18nPlaceholder('note_content'),\n },\n };\n const fullOptions: BehaviorPresetOptions & FullPresetOptions = {\n ...yfmOptions,\n selectionContext: {config: wSelectionMenuConfigByPreset.full, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.full, ...opts.commandMenu},\n emoji: {defs: emojiDefs, ...opts.emoji},\n };\n\n const zeroIgnoreActions = [A.Undo, A.Redo];\n const commonMarkIgnoreActions = zeroIgnoreActions.concat(\n A.Bold,\n A.Italic,\n A.Code,\n A.Link,\n\n A.Text,\n A.Heading1,\n A.Heading2,\n A.Heading3,\n A.Heading4,\n A.Heading5,\n A.Heading6,\n\n A.BulletList,\n A.OrderedList,\n\n A.Quote,\n A.CodeBlock,\n );\n const defaultIgnoreActions = commonMarkIgnoreActions.concat(A.Strike);\n const yfmIgnoreActions = defaultIgnoreActions.concat(\n A.Underline,\n\n A.Note,\n A.Cut,\n );\n const fullIgnoreActions = yfmIgnoreActions.concat();\n\n let ignoreActions;\n\n switch (opts.preset) {\n case 'zero': {\n ignoreActions = zeroIgnoreActions;\n builder.use(BehaviorPreset, zeroOptions).use(ZeroPreset, zeroOptions);\n break;\n }\n case 'commonmark': {\n ignoreActions = commonMarkIgnoreActions;\n builder.use(BehaviorPreset, commonMarkOptions).use(CommonMarkPreset, commonMarkOptions);\n break;\n }\n case 'default': {\n ignoreActions = defaultIgnoreActions;\n builder.use(BehaviorPreset, defaultOptions).use(DefaultPreset, defaultOptions);\n break;\n }\n case 'yfm': {\n ignoreActions = yfmIgnoreActions;\n builder.use(BehaviorPreset, yfmOptions).use(YfmPreset, yfmOptions);\n break;\n }\n default: {\n ignoreActions = fullIgnoreActions;\n builder.use(BehaviorPreset, fullOptions).use(FullPreset, fullOptions);\n break;\n }\n }\n\n const ignoreKeysList = opts.ignoreKeysList?.slice() ?? [];\n ignoreKeysList.push(...DEFAULT_IGNORED_KEYS);\n for (const action of ignoreActions) {\n const key = f.toPM(action);\n if (key) ignoreKeysList.push(key);\n }\n\n builder.use(EditorModeKeymap, {\n onSubmit: opts.onSubmit,\n onCancel: opts.onCancel,\n ignoreKeysList,\n });\n};\n"]}
@@ -1,2 +1,3 @@
1
1
  export * from "./MathSpecs/const.js";
2
2
  export { mathBType, mathIType } from "./MathSpecs/index.js";
3
+ export declare const LATEX_MODES: Set<string>;
@@ -1,9 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mathIType = exports.mathBType = void 0;
3
+ exports.LATEX_MODES = exports.mathIType = exports.mathBType = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  tslib_1.__exportStar(require("./MathSpecs/const.js"), exports);
6
6
  var MathSpecs_1 = require("./MathSpecs/index.js");
7
7
  Object.defineProperty(exports, "mathBType", { enumerable: true, get: function () { return MathSpecs_1.mathBType; } });
8
8
  Object.defineProperty(exports, "mathIType", { enumerable: true, get: function () { return MathSpecs_1.mathIType; } });
9
+ exports.LATEX_MODES = new Set([
10
+ 'tex',
11
+ 'latex',
12
+ 'bibtex',
13
+ 'doctex',
14
+ 'latex-expl3',
15
+ 'pweave',
16
+ 'jlweave',
17
+ 'rsweave',
18
+ ]);
9
19
  //# sourceMappingURL=const.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"const.js","sourceRoot":"../../../../../src","sources":["extensions/additional/Math/const.ts"],"names":[],"mappings":";;;;AAAA,+DAAkC;AAClC,kDAAiD;AAAzC,sGAAA,SAAS,OAAA;AAAE,sGAAA,SAAS,OAAA","sourcesContent":["export * from './MathSpecs/const';\nexport {mathBType, mathIType} from './MathSpecs';\n"]}
1
+ {"version":3,"file":"const.js","sourceRoot":"../../../../../src","sources":["extensions/additional/Math/const.ts"],"names":[],"mappings":";;;;AAAA,+DAAkC;AAClC,kDAAiD;AAAzC,sGAAA,SAAS,OAAA;AAAE,sGAAA,SAAS,OAAA;AAEf,QAAA,WAAW,GAAG,IAAI,GAAG,CAAC;IAC/B,KAAK;IACL,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,aAAa;IACb,QAAQ;IACR,SAAS;IACT,SAAS;CACZ,CAAC,CAAC","sourcesContent":["export * from './MathSpecs/const';\nexport {mathBType, mathIType} from './MathSpecs';\n\nexport const LATEX_MODES = new Set([\n 'tex',\n 'latex',\n 'bibtex',\n 'doctex',\n 'latex-expl3',\n 'pweave',\n 'jlweave',\n 'rsweave',\n]);\n"]}
@@ -3,6 +3,7 @@ import { type MathNodeViewOptions } from "./view-and-edit.js";
3
3
  import "./index.css";
4
4
  export { MathNode, mathBType, mathIType } from "./MathSpecs/index.js";
5
5
  export { MathBlockNodeView, MathInlineNodeView } from "./view-and-edit.js";
6
+ export { isLatexMode, parseLatexFormulas } from "./utils.js";
6
7
  declare const mathIAction = "addMathInline";
7
8
  declare const mathBAction = "toMathBlock";
8
9
  export type MathOptions = Pick<MathNodeViewOptions, 'loadRuntimeScript' | 'sanitize' | 'katexOptions'>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Math = exports.MathInlineNodeView = exports.MathBlockNodeView = exports.mathIType = exports.mathBType = exports.MathNode = void 0;
3
+ exports.Math = exports.parseLatexFormulas = exports.isLatexMode = exports.MathInlineNodeView = exports.MathBlockNodeView = exports.mathIType = exports.mathBType = exports.MathNode = void 0;
4
4
  const prosemirror_commands_1 = require("prosemirror-commands");
5
5
  const prosemirror_state_1 = require("prosemirror-state");
6
6
  // @ts-ignore // TODO: fix cjs build
@@ -10,6 +10,7 @@ const selection_1 = require("../../../utils/selection.js");
10
10
  const MathSpecs_1 = require("./MathSpecs/index.js");
11
11
  const commands_1 = require("./commands.js");
12
12
  const const_1 = require("./const.js");
13
+ const latex_paste_plugin_1 = require("./latex-paste-plugin.js");
13
14
  const view_and_edit_1 = require("./view-and-edit.js");
14
15
  require("./index.css");
15
16
  var MathSpecs_2 = require("./MathSpecs/index.js");
@@ -19,6 +20,9 @@ Object.defineProperty(exports, "mathIType", { enumerable: true, get: function ()
19
20
  var view_and_edit_2 = require("./view-and-edit.js");
20
21
  Object.defineProperty(exports, "MathBlockNodeView", { enumerable: true, get: function () { return view_and_edit_2.MathBlockNodeView; } });
21
22
  Object.defineProperty(exports, "MathInlineNodeView", { enumerable: true, get: function () { return view_and_edit_2.MathInlineNodeView; } });
23
+ var utils_1 = require("./utils.js");
24
+ Object.defineProperty(exports, "isLatexMode", { enumerable: true, get: function () { return utils_1.isLatexMode; } });
25
+ Object.defineProperty(exports, "parseLatexFormulas", { enumerable: true, get: function () { return utils_1.parseLatexFormulas; } });
22
26
  const mathIAction = 'addMathInline';
23
27
  const mathBAction = 'toMathBlock';
24
28
  const mathITemplate = 'f(x)=';
@@ -29,6 +33,7 @@ const Math = (builder, opts) => {
29
33
  Backspace: (0, prosemirror_commands_1.chainCommands)(commands_1.removeEmptyMathInlineIfCursorIsAtBeginning, commands_1.moveCursorLeftOfMathInline),
30
34
  }));
31
35
  builder
36
+ .addPlugin(latex_paste_plugin_1.latexPastePlugin, builder.Priority.VeryHigh)
32
37
  .addPlugin(() => (0, view_and_edit_1.mathViewAndEditPlugin)({
33
38
  ...opts,
34
39
  reactRenderer: builder.context.get('reactrenderer'),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/additional/Math/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {chainCommands, setBlockType} from 'prosemirror-commands';\nimport {type Command, TextSelection} from 'prosemirror-state';\n// @ts-ignore // TODO: fix cjs build\nimport {hasParentNodeOfType} from 'prosemirror-utils';\n\nimport type {Action, ExtensionAuto} from '../../../core';\nimport {inlineNodeInputRule, textblockTypeInputRule} from '../../../utils/inputrules';\nimport {isTextSelection} from '../../../utils/selection';\n\nimport {MathSpecs} from './MathSpecs';\nimport {\n ignoreIfCursorInsideMathInline,\n moveCursorLeftOfMathInline,\n removeEmptyMathInlineIfCursorIsAtBeginning,\n} from './commands';\nimport {mathBType, mathIType} from './const';\nimport {type MathNodeViewOptions, mathViewAndEditPlugin} from './view-and-edit';\n\nimport './index.scss';\n\nexport {MathNode, mathBType, mathIType} from './MathSpecs';\nexport {MathBlockNodeView, MathInlineNodeView} from './view-and-edit';\n\nconst mathIAction = 'addMathInline';\nconst mathBAction = 'toMathBlock';\n\nconst mathITemplate = 'f(x)=';\n\n// !!! YfmPreset/YfmSpecsPreset does not use or re-export the Math extension\n\nexport type MathOptions = Pick<\n MathNodeViewOptions,\n 'loadRuntimeScript' | 'sanitize' | 'katexOptions'\n>;\n\nexport const Math: ExtensionAuto<MathOptions> = (builder, opts) => {\n builder.use(MathSpecs);\n\n builder.addKeymap(() => ({\n Enter: ignoreIfCursorInsideMathInline, // ignore breaks in math inline\n Backspace: chainCommands(\n removeEmptyMathInlineIfCursorIsAtBeginning,\n moveCursorLeftOfMathInline,\n ),\n }));\n\n builder\n .addPlugin(() =>\n mathViewAndEditPlugin({\n ...opts,\n reactRenderer: builder.context.get('reactrenderer')!,\n }),\n )\n .addInputRules((deps) => ({\n rules: [\n textblockTypeInputRule(/^\\$\\$\\s$/, mathBType(deps.schema)),\n inlineNodeInputRule(/\\$[^$\\s]+\\$$/, (match) =>\n mathIType(deps.schema).create(null, deps.schema.text(match.replace(/\\$/g, ''))),\n ),\n ],\n }));\n builder\n .addAction(mathIAction, (deps) => {\n const type = mathIType(deps.schema);\n const cmd: Command = (state, dispatch) => {\n const {selection} = state;\n if (isTextSelection(selection) && selection.$from.sameParent(selection.$to)) {\n if (dispatch) {\n const fragment = selection.content().content;\n const selectedText =\n fragment.textBetween(0, fragment.size) || mathITemplate;\n const tr = state.tr;\n selection.replaceWith(\n tr,\n type.create(null, deps.schema.text(selectedText)),\n );\n tr.setSelection(\n TextSelection.create(tr.doc, selection.from + selectedText.length + 1),\n );\n dispatch(tr);\n }\n return true;\n }\n return false;\n };\n return {\n isActive: (state) => hasParentNodeOfType(type)(state.selection),\n isEnable: cmd,\n run: cmd,\n };\n })\n .addAction(mathBAction, (deps) => {\n const type = mathBType(deps.schema);\n const cmd = setBlockType(type);\n return {\n isActive: (state) => hasParentNodeOfType(type)(state.selection),\n isEnable: cmd,\n run: cmd,\n };\n });\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Actions {\n [mathIAction]: Action;\n [mathBAction]: Action;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/additional/Math/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {chainCommands, setBlockType} from 'prosemirror-commands';\nimport {type Command, TextSelection} from 'prosemirror-state';\n// @ts-ignore // TODO: fix cjs build\nimport {hasParentNodeOfType} from 'prosemirror-utils';\n\nimport type {Action, ExtensionAuto} from '../../../core';\nimport {inlineNodeInputRule, textblockTypeInputRule} from '../../../utils/inputrules';\nimport {isTextSelection} from '../../../utils/selection';\n\nimport {MathSpecs} from './MathSpecs';\nimport {\n ignoreIfCursorInsideMathInline,\n moveCursorLeftOfMathInline,\n removeEmptyMathInlineIfCursorIsAtBeginning,\n} from './commands';\nimport {mathBType, mathIType} from './const';\nimport {latexPastePlugin} from './latex-paste-plugin';\nimport {type MathNodeViewOptions, mathViewAndEditPlugin} from './view-and-edit';\n\nimport './index.scss';\n\nexport {MathNode, mathBType, mathIType} from './MathSpecs';\nexport {MathBlockNodeView, MathInlineNodeView} from './view-and-edit';\nexport {isLatexMode, parseLatexFormulas} from './utils';\n\nconst mathIAction = 'addMathInline';\nconst mathBAction = 'toMathBlock';\n\nconst mathITemplate = 'f(x)=';\n\n// !!! YfmPreset/YfmSpecsPreset does not use or re-export the Math extension\n\nexport type MathOptions = Pick<\n MathNodeViewOptions,\n 'loadRuntimeScript' | 'sanitize' | 'katexOptions'\n>;\n\nexport const Math: ExtensionAuto<MathOptions> = (builder, opts) => {\n builder.use(MathSpecs);\n\n builder.addKeymap(() => ({\n Enter: ignoreIfCursorInsideMathInline, // ignore breaks in math inline\n Backspace: chainCommands(\n removeEmptyMathInlineIfCursorIsAtBeginning,\n moveCursorLeftOfMathInline,\n ),\n }));\n\n builder\n .addPlugin(latexPastePlugin, builder.Priority.VeryHigh)\n .addPlugin(() =>\n mathViewAndEditPlugin({\n ...opts,\n reactRenderer: builder.context.get('reactrenderer')!,\n }),\n )\n .addInputRules((deps) => ({\n rules: [\n textblockTypeInputRule(/^\\$\\$\\s$/, mathBType(deps.schema)),\n inlineNodeInputRule(/\\$[^$\\s]+\\$$/, (match) =>\n mathIType(deps.schema).create(null, deps.schema.text(match.replace(/\\$/g, ''))),\n ),\n ],\n }));\n builder\n .addAction(mathIAction, (deps) => {\n const type = mathIType(deps.schema);\n const cmd: Command = (state, dispatch) => {\n const {selection} = state;\n if (isTextSelection(selection) && selection.$from.sameParent(selection.$to)) {\n if (dispatch) {\n const fragment = selection.content().content;\n const selectedText =\n fragment.textBetween(0, fragment.size) || mathITemplate;\n const tr = state.tr;\n selection.replaceWith(\n tr,\n type.create(null, deps.schema.text(selectedText)),\n );\n tr.setSelection(\n TextSelection.create(tr.doc, selection.from + selectedText.length + 1),\n );\n dispatch(tr);\n }\n return true;\n }\n return false;\n };\n return {\n isActive: (state) => hasParentNodeOfType(type)(state.selection),\n isEnable: cmd,\n run: cmd,\n };\n })\n .addAction(mathBAction, (deps) => {\n const type = mathBType(deps.schema);\n const cmd = setBlockType(type);\n return {\n isActive: (state) => hasParentNodeOfType(type)(state.selection),\n isEnable: cmd,\n run: cmd,\n };\n });\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Actions {\n [mathIAction]: Action;\n [mathBAction]: Action;\n }\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { Plugin } from 'prosemirror-state';
2
+ export declare const latexPastePlugin: () => Plugin<any>;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.latexPastePlugin = void 0;
4
+ const prosemirror_state_1 = require("prosemirror-state");
5
+ const _core_1 = require("../../../core/index.js");
6
+ const model_1 = require("../../../pm/model.js");
7
+ const const_1 = require("./const.js");
8
+ const utils_1 = require("./utils.js");
9
+ const latexPastePlugin = () => new prosemirror_state_1.Plugin({
10
+ props: {
11
+ handleDOMEvents: {
12
+ paste(view, e) {
13
+ const event = e;
14
+ if (!event.clipboardData || view.state.selection.$from.parent.type.spec.code) {
15
+ return false;
16
+ }
17
+ const latexData = (0, utils_1.getLatexData)(event.clipboardData);
18
+ if (!latexData)
19
+ return false;
20
+ (0, _core_1.getLoggerFromState)(view.state).event({
21
+ domEvent: 'paste',
22
+ event: 'paste-latex-from-code-editor',
23
+ editor: latexData.editor,
24
+ editorMode: latexData.mode,
25
+ empty: !latexData.value,
26
+ dataTypes: event.clipboardData.types,
27
+ });
28
+ const { tr, schema } = view.state;
29
+ const mathBlockType = schema.nodes[const_1.MathNode.Block];
30
+ if (!mathBlockType)
31
+ return false;
32
+ if (latexData.value) {
33
+ const formulas = (0, utils_1.parseLatexFormulas)(latexData.value);
34
+ if (formulas.length > 0) {
35
+ const nodes = formulas.map((formula) => mathBlockType.create(null, schema.text(formula)));
36
+ const fragment = model_1.Fragment.from(nodes);
37
+ tr.replaceWith(tr.selection.from, tr.selection.to, fragment);
38
+ }
39
+ else {
40
+ tr.replaceWith(tr.selection.from, tr.selection.to, model_1.Fragment.empty);
41
+ }
42
+ }
43
+ else {
44
+ tr.replaceWith(tr.selection.from, tr.selection.to, model_1.Fragment.empty);
45
+ }
46
+ view.dispatch(tr.scrollIntoView());
47
+ e.preventDefault();
48
+ return true;
49
+ },
50
+ },
51
+ },
52
+ });
53
+ exports.latexPastePlugin = latexPastePlugin;
54
+ //# sourceMappingURL=latex-paste-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"latex-paste-plugin.js","sourceRoot":"../../../../../src","sources":["extensions/additional/Math/latex-paste-plugin.ts"],"names":[],"mappings":";;;AAAA,yDAAyC;AAEzC,kDAAyC;AACzC,gDAAmC;AAEnC,sCAAiC;AACjC,sCAAyD;AAElD,MAAM,gBAAgB,GAAG,GAAG,EAAE,CACjC,IAAI,0BAAM,CAAC;IACP,KAAK,EAAE;QACH,eAAe,EAAE;YACb,KAAK,CAAC,IAAI,EAAE,CAAQ;gBAChB,MAAM,KAAK,GAAG,CAAmB,CAAC;gBAClC,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC3E,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAED,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACpD,IAAI,CAAC,SAAS;oBAAE,OAAO,KAAK,CAAC;gBAE7B,IAAA,0BAAkB,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;oBACjC,QAAQ,EAAE,OAAO;oBACjB,KAAK,EAAE,8BAA8B;oBACrC,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,UAAU,EAAE,SAAS,CAAC,IAAI;oBAC1B,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK;oBACvB,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK;iBACvC,CAAC,CAAC;gBAEH,MAAM,EAAC,EAAE,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gBAChC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAQ,CAAC,KAAK,CAAC,CAAC;gBAEnD,IAAI,CAAC,aAAa;oBAAE,OAAO,KAAK,CAAC;gBAEjC,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBAClB,MAAM,QAAQ,GAAG,IAAA,0BAAkB,EAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAErD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CACnD,CAAC;wBACF,MAAM,QAAQ,GAAG,gBAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACtC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;oBACjE,CAAC;yBAAM,CAAC;wBACJ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,gBAAQ,CAAC,KAAK,CAAC,CAAC;oBACvE,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,gBAAQ,CAAC,KAAK,CAAC,CAAC;gBACvE,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;gBACnC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YAChB,CAAC;SACJ;KACJ;CACJ,CAAC,CAAC;AAjDM,QAAA,gBAAgB,oBAiDtB","sourcesContent":["import {Plugin} from 'prosemirror-state';\n\nimport {getLoggerFromState} from '#core';\nimport {Fragment} from '#pm/model';\n\nimport {MathNode} from './const';\nimport {getLatexData, parseLatexFormulas} from './utils';\n\nexport const latexPastePlugin = () =>\n new Plugin({\n props: {\n handleDOMEvents: {\n paste(view, e: Event) {\n const event = e as ClipboardEvent;\n if (!event.clipboardData || view.state.selection.$from.parent.type.spec.code) {\n return false;\n }\n\n const latexData = getLatexData(event.clipboardData);\n if (!latexData) return false;\n\n getLoggerFromState(view.state).event({\n domEvent: 'paste',\n event: 'paste-latex-from-code-editor',\n editor: latexData.editor,\n editorMode: latexData.mode,\n empty: !latexData.value,\n dataTypes: event.clipboardData.types,\n });\n\n const {tr, schema} = view.state;\n const mathBlockType = schema.nodes[MathNode.Block];\n\n if (!mathBlockType) return false;\n\n if (latexData.value) {\n const formulas = parseLatexFormulas(latexData.value);\n\n if (formulas.length > 0) {\n const nodes = formulas.map((formula) =>\n mathBlockType.create(null, schema.text(formula)),\n );\n const fragment = Fragment.from(nodes);\n tr.replaceWith(tr.selection.from, tr.selection.to, fragment);\n } else {\n tr.replaceWith(tr.selection.from, tr.selection.to, Fragment.empty);\n }\n } else {\n tr.replaceWith(tr.selection.from, tr.selection.to, Fragment.empty);\n }\n\n view.dispatch(tr.scrollIntoView());\n e.preventDefault();\n return true;\n },\n },\n },\n });\n"]}
@@ -0,0 +1,7 @@
1
+ export declare function isLatexMode(mode: string | undefined): boolean;
2
+ export declare function parseLatexFormulas(content: string): string[];
3
+ export declare function getLatexData(data: DataTransfer): null | {
4
+ editor: string;
5
+ mode: string;
6
+ value: string;
7
+ };
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isLatexMode = isLatexMode;
4
+ exports.parseLatexFormulas = parseLatexFormulas;
5
+ exports.getLatexData = getLatexData;
6
+ const tslib_1 = require("tslib");
7
+ const ts_dedent_1 = tslib_1.__importDefault(require("ts-dedent"));
8
+ const clipboard_1 = require("../../../utils/clipboard.js");
9
+ const const_1 = require("./const.js");
10
+ function isLatexMode(mode) {
11
+ if (!mode)
12
+ return false;
13
+ return const_1.LATEX_MODES.has(mode.toLowerCase());
14
+ }
15
+ function parseLatexFormulas(content) {
16
+ const blocks = content.split(/\n\s*\n/);
17
+ const formulas = [];
18
+ for (const block of blocks) {
19
+ const lines = block
20
+ .split('\n')
21
+ .map((line) => line.trim())
22
+ .filter((line) => line.length > 0);
23
+ if (lines.length > 0) {
24
+ formulas.push(lines.join('\n'));
25
+ }
26
+ }
27
+ return formulas;
28
+ }
29
+ function getLatexData(data) {
30
+ if (!data.getData(clipboard_1.DataTransferType.Text))
31
+ return null;
32
+ if ((0, clipboard_1.isVSCode)(data)) {
33
+ const vsCodeData = (0, clipboard_1.tryParseVSCodeData)(data);
34
+ const mode = vsCodeData?.mode;
35
+ if (mode && isLatexMode(mode)) {
36
+ return {
37
+ editor: 'vscode',
38
+ mode,
39
+ value: (0, ts_dedent_1.default)(data.getData(clipboard_1.DataTransferType.Text)),
40
+ };
41
+ }
42
+ }
43
+ return null;
44
+ }
45
+ //# sourceMappingURL=utils.js.map