@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"../../../../../src","sources":["extensions/additional/Math/utils.ts"],"names":[],"mappings":";;AAMA,kCAGC;AAED,gDAgBC;AAED,oCAmBC;;AAhDD,kEAA2B;AAE3B,2DAAmF;AAEnF,sCAAoC;AAEpC,SAAgB,WAAW,CAAC,IAAwB;IAChD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,mBAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAAe;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,KAAK;aACd,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEvC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAgB,YAAY,CACxB,IAAkB;IAElB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,4BAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtD,IAAI,IAAA,oBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,IAAA,8BAAkB,EAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,CAAC;QAE9B,IAAI,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACH,MAAM,EAAE,QAAQ;gBAChB,IAAI;gBACJ,KAAK,EAAE,IAAA,mBAAE,EAAC,IAAI,CAAC,OAAO,CAAC,4BAAgB,CAAC,IAAI,CAAC,CAAC;aACjD,CAAC;QACN,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["import dd from 'ts-dedent';\n\nimport {DataTransferType, isVSCode, tryParseVSCodeData} from 'src/utils/clipboard';\n\nimport {LATEX_MODES} from './const';\n\nexport function isLatexMode(mode: string | undefined): boolean {\n if (!mode) return false;\n return LATEX_MODES.has(mode.toLowerCase());\n}\n\nexport function parseLatexFormulas(content: string): string[] {\n const blocks = content.split(/\\n\\s*\\n/);\n const formulas: string[] = [];\n\n for (const block of blocks) {\n const lines = block\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n\n if (lines.length > 0) {\n formulas.push(lines.join('\\n'));\n }\n }\n\n return formulas;\n}\n\nexport function getLatexData(\n data: DataTransfer,\n): null | {editor: string; mode: string; value: string} {\n if (!data.getData(DataTransferType.Text)) return null;\n\n if (isVSCode(data)) {\n const vsCodeData = tryParseVSCodeData(data);\n const mode = vsCodeData?.mode;\n\n if (mode && isLatexMode(mode)) {\n return {\n editor: 'vscode',\n mode,\n value: dd(data.getData(DataTransferType.Text)),\n };\n }\n }\n\n return null;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { ExtensionAuto } from "../../../core/index.js";
2
+ import { type SearchViewPluginParams } from "./SearchViewPlugin.js";
3
+ export type SearchOptions = Pick<SearchViewPluginParams, 'anchorSelector'>;
4
+ export declare const Search: ExtensionAuto<SearchOptions>;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Search = void 0;
4
+ const prosemirror_search_1 = require("prosemirror-search");
5
+ const SearchViewPlugin_1 = require("./SearchViewPlugin.js");
6
+ const Search = (builder, opts) => {
7
+ builder.addPlugin(() => [(0, prosemirror_search_1.search)(), (0, SearchViewPlugin_1.searchViewPlugin)(opts)]);
8
+ };
9
+ exports.Search = Search;
10
+ //# sourceMappingURL=Search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Search.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/Search.ts"],"names":[],"mappings":";;;AAAA,2DAA0C;AAI1C,4DAAiF;AAI1E,MAAM,MAAM,GAAiC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAClE,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,IAAA,2BAAM,GAAE,EAAE,IAAA,mCAAgB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC;AAFW,QAAA,MAAM,UAEjB","sourcesContent":["import {search} from 'prosemirror-search';\n\nimport type {ExtensionAuto} from '#core';\n\nimport {type SearchViewPluginParams, searchViewPlugin} from './SearchViewPlugin';\n\nexport type SearchOptions = Pick<SearchViewPluginParams, 'anchorSelector'>;\n\nexport const Search: ExtensionAuto<SearchOptions> = (builder, opts) => {\n builder.addPlugin(() => [search(), searchViewPlugin(opts)]);\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import { Plugin } from "../../../pm/state.js";
2
+ import type { SearchViewState } from "./types.js";
3
+ import "./search-plugin.css";
4
+ export interface SearchViewPluginParams {
5
+ anchorSelector: string;
6
+ }
7
+ export declare const searchViewPlugin: (params: SearchViewPluginParams) => Plugin<SearchViewState>;
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchViewPlugin = void 0;
4
+ const prosemirror_search_1 = require("prosemirror-search");
5
+ const state_1 = require("../../../pm/state.js");
6
+ const utils_1 = require("../../../pm/utils.js");
7
+ const search_1 = require("../../../modules/search/index.js");
8
+ const ReactRenderer_1 = require("../ReactRenderer/index.js");
9
+ const commands_1 = require("./commands.js");
10
+ const const_1 = require("./const.js");
11
+ const key_handler_1 = require("./key-handler.js");
12
+ const connect_tracker_1 = require("./utils/connect-tracker.js");
13
+ const focus_manager_1 = require("./utils/focus-manager.js");
14
+ const search_counter_1 = require("./utils/search-counter.js");
15
+ require("./search-plugin.css");
16
+ const searchViewPlugin = (params) => {
17
+ return new state_1.Plugin({
18
+ key: const_1.pluginKey,
19
+ props: {
20
+ handleKeyDown: key_handler_1.searchKeyHandler,
21
+ },
22
+ state: {
23
+ init: () => ({ open: false }),
24
+ apply(tr, value, _oldState, _newState) {
25
+ const newValue = tr.getMeta(const_1.pluginKey);
26
+ if (typeof newValue === 'object')
27
+ return newValue;
28
+ return value;
29
+ },
30
+ },
31
+ view(view) {
32
+ return new SeachPluginView(view, params);
33
+ },
34
+ });
35
+ };
36
+ exports.searchViewPlugin = searchViewPlugin;
37
+ class SeachPluginView {
38
+ _view;
39
+ _renderer;
40
+ _focusManager;
41
+ _viewDomTrackerDispose;
42
+ _counter;
43
+ _isDomConnected;
44
+ _viewState;
45
+ _searchState;
46
+ constructor(view, params) {
47
+ this._view = view;
48
+ this._viewState = const_1.pluginKey.getState(view.state);
49
+ this._searchState = (0, prosemirror_search_1.getSearchState)(view.state)?.query;
50
+ this._counter = (0, search_counter_1.getCounter)(view.state);
51
+ this._isDomConnected = view.dom.ownerDocument.contains(view.dom);
52
+ this._renderer = this._createRenderer(params);
53
+ this._focusManager = new focus_manager_1.FocusManager(view.dom.ownerDocument);
54
+ // uses MutationObserver to detect when view.dom is disconnected from the DOM tree
55
+ // TODO: replace with eventBus (subscribe to change-editor-mode event) to track when to hide the search bar
56
+ // see https://github.com/gravity-ui/markdown-editor/issues/884
57
+ this._viewDomTrackerDispose = (0, connect_tracker_1.startTracking)(view.dom, {
58
+ onConnect: this._onEditorViewDomConnected,
59
+ onDisconnect: this._onEditorViewDomDisconnected,
60
+ });
61
+ }
62
+ update() {
63
+ const newCounter = (0, search_counter_1.getCounter)(this._view.state);
64
+ const newViewState = const_1.pluginKey.getState(this._view.state);
65
+ const newSearchState = (0, prosemirror_search_1.getSearchState)(this._view.state)?.query;
66
+ if (newViewState !== this._viewState ||
67
+ newSearchState !== this._searchState ||
68
+ newCounter.total !== this._counter.total ||
69
+ newCounter.current !== this._counter.current) {
70
+ this._counter = newCounter;
71
+ this._viewState = newViewState;
72
+ this._searchState = newSearchState;
73
+ this._renderer.rerender();
74
+ }
75
+ }
76
+ destroy() {
77
+ this._renderer.remove();
78
+ this._viewDomTrackerDispose();
79
+ }
80
+ _onEditorViewDomConnected = () => {
81
+ this._isDomConnected = true;
82
+ this._renderer.rerender();
83
+ };
84
+ _onEditorViewDomDisconnected = () => {
85
+ this._isDomConnected = false;
86
+ this._onClose();
87
+ };
88
+ _createRenderer(params) {
89
+ return (0, ReactRenderer_1.getReactRendererFromState)(this._view.state).createItem('search-view', () => {
90
+ const { _viewState: viewState, _searchState: searchState, _isDomConnected: domConnected, } = this;
91
+ if (!domConnected || !viewState?.open || !searchState)
92
+ return null;
93
+ const anchor = this._view.dom.ownerDocument.querySelector(params.anchorSelector);
94
+ return (0, search_1.renderSearchPopup)({
95
+ anchor,
96
+ open: viewState.open,
97
+ counter: this._counter,
98
+ state: searchState,
99
+ onClose: this._onClose,
100
+ onChange: this._onChange,
101
+ onSearchPrev: this._onSearchPrev,
102
+ onSearchNext: this._onSearchNext,
103
+ onReplaceNext: this._onReplaceNext,
104
+ onReplaceAll: this._onReplaceAll,
105
+ });
106
+ });
107
+ }
108
+ _onChange = (config) => {
109
+ const { state, dispatch } = this._view;
110
+ const query = new prosemirror_search_1.SearchQuery({
111
+ search: config.search,
112
+ replace: config.replace,
113
+ caseSensitive: config.caseSensitive,
114
+ wholeWord: config.wholeWord,
115
+ });
116
+ const tr = (0, prosemirror_search_1.setSearchState)(state.tr, query);
117
+ const { $from, $to } = tr.selection;
118
+ const parent = (0, utils_1.findParentNodeClosestToPos)($from, (node) => node.type.isTextblock);
119
+ let result = null;
120
+ // find match in [sel.$from, parent.$end]
121
+ if (parent)
122
+ result = query.findNext(state, $from.pos, parent.pos + parent.node.nodeSize);
123
+ // find match in [parent.$start or sel.$from, doc.$end]
124
+ if (!result)
125
+ result = query.findNext(state, parent?.pos || $from.pos);
126
+ // find match in [doc.$start, parent.$start or sel.$to]
127
+ if (!result)
128
+ result = query.findPrev(state, parent?.pos || $to.pos);
129
+ // update text selection
130
+ if (result)
131
+ tr.setSelection(state_1.TextSelection.create(tr.doc, result.from, result.to));
132
+ dispatch(tr);
133
+ };
134
+ _onClose = () => {
135
+ (0, commands_1.closeSearch)(this._view.state, this._view.dispatch);
136
+ this._view.focus();
137
+ };
138
+ _onSearchPrev = () => {
139
+ this._preserveFocus(commands_1.findPrev);
140
+ };
141
+ _onSearchNext = () => {
142
+ this._preserveFocus(commands_1.findNext);
143
+ };
144
+ _onReplaceNext = () => {
145
+ this._preserveFocus(commands_1.replaceNext);
146
+ };
147
+ _onReplaceAll = () => {
148
+ this._preserveFocus(commands_1.replaceAll);
149
+ };
150
+ _preserveFocus(command) {
151
+ this._focusManager.storeFocus();
152
+ this._view.focus();
153
+ command(this._view.state, this._view.dispatch, this._view);
154
+ this._focusManager.restoreFocus({ preventScroll: true });
155
+ }
156
+ }
157
+ //# sourceMappingURL=SearchViewPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchViewPlugin.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/SearchViewPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {SearchQuery, type SearchResult, getSearchState, setSearchState} from 'prosemirror-search';\n\nimport type {Node} from '#pm/model';\nimport {type Command, Plugin, type PluginView, TextSelection} from '#pm/state';\nimport {findParentNodeClosestToPos} from '#pm/utils';\nimport type {EditorView} from '#pm/view';\nimport {type SearchCounter, type SearchState, renderSearchPopup} from 'src/modules/search';\n\nimport {getReactRendererFromState} from '../ReactRenderer';\n\nimport {closeSearch, findNext, findPrev, replaceAll, replaceNext} from './commands';\nimport {pluginKey} from './const';\nimport {searchKeyHandler} from './key-handler';\nimport type {SearchViewState} from './types';\nimport {startTracking} from './utils/connect-tracker';\nimport {FocusManager} from './utils/focus-manager';\nimport {getCounter} from './utils/search-counter';\n\nimport './search-plugin.scss';\n\nexport interface SearchViewPluginParams {\n anchorSelector: string;\n}\n\nexport const searchViewPlugin = (params: SearchViewPluginParams) => {\n return new Plugin<SearchViewState>({\n key: pluginKey,\n props: {\n handleKeyDown: searchKeyHandler,\n },\n state: {\n init: () => ({open: false}),\n apply(tr, value, _oldState, _newState) {\n const newValue = tr.getMeta(pluginKey) as SearchViewState | undefined;\n if (typeof newValue === 'object') return newValue;\n return value;\n },\n },\n view(view) {\n return new SeachPluginView(view, params);\n },\n });\n};\n\nclass SeachPluginView implements PluginView {\n private readonly _view: EditorView;\n private readonly _renderer;\n private readonly _focusManager: FocusManager;\n private readonly _viewDomTrackerDispose;\n\n private _counter: SearchCounter;\n private _isDomConnected: boolean;\n private _viewState: SearchViewState | undefined;\n private _searchState: SearchQuery | undefined;\n\n constructor(view: EditorView, params: SearchViewPluginParams) {\n this._view = view;\n this._viewState = pluginKey.getState(view.state);\n this._searchState = getSearchState(view.state)?.query;\n this._counter = getCounter(view.state);\n this._isDomConnected = view.dom.ownerDocument.contains(view.dom);\n\n this._renderer = this._createRenderer(params);\n this._focusManager = new FocusManager(view.dom.ownerDocument);\n\n // uses MutationObserver to detect when view.dom is disconnected from the DOM tree\n // TODO: replace with eventBus (subscribe to change-editor-mode event) to track when to hide the search bar\n // see https://github.com/gravity-ui/markdown-editor/issues/884\n this._viewDomTrackerDispose = startTracking(view.dom, {\n onConnect: this._onEditorViewDomConnected,\n onDisconnect: this._onEditorViewDomDisconnected,\n });\n }\n\n update() {\n const newCounter = getCounter(this._view.state);\n const newViewState = pluginKey.getState(this._view.state);\n const newSearchState = getSearchState(this._view.state)?.query;\n\n if (\n newViewState !== this._viewState ||\n newSearchState !== this._searchState ||\n newCounter.total !== this._counter.total ||\n newCounter.current !== this._counter.current\n ) {\n this._counter = newCounter;\n this._viewState = newViewState;\n this._searchState = newSearchState;\n this._renderer.rerender();\n }\n }\n\n destroy() {\n this._renderer.remove();\n this._viewDomTrackerDispose();\n }\n\n private _onEditorViewDomConnected = () => {\n this._isDomConnected = true;\n this._renderer.rerender();\n };\n\n private _onEditorViewDomDisconnected = () => {\n this._isDomConnected = false;\n this._onClose();\n };\n\n private _createRenderer(params: Pick<SearchViewPluginParams, 'anchorSelector'>) {\n return getReactRendererFromState(this._view.state).createItem('search-view', () => {\n const {\n _viewState: viewState,\n _searchState: searchState,\n _isDomConnected: domConnected,\n } = this;\n\n if (!domConnected || !viewState?.open || !searchState) return null;\n\n const anchor = this._view.dom.ownerDocument.querySelector(params.anchorSelector);\n\n return renderSearchPopup({\n anchor,\n open: viewState.open,\n counter: this._counter,\n state: searchState,\n onClose: this._onClose,\n onChange: this._onChange,\n onSearchPrev: this._onSearchPrev,\n onSearchNext: this._onSearchNext,\n onReplaceNext: this._onReplaceNext,\n onReplaceAll: this._onReplaceAll,\n });\n });\n }\n\n private _onChange = (config: SearchState) => {\n const {state, dispatch} = this._view;\n\n const query = new SearchQuery({\n search: config.search,\n replace: config.replace,\n caseSensitive: config.caseSensitive,\n wholeWord: config.wholeWord,\n });\n\n const tr = setSearchState(state.tr, query);\n const {$from, $to} = tr.selection;\n const parent = findParentNodeClosestToPos($from, (node: Node) => node.type.isTextblock);\n\n let result: SearchResult | null = null;\n // find match in [sel.$from, parent.$end]\n if (parent) result = query.findNext(state, $from.pos, parent.pos + parent.node.nodeSize);\n // find match in [parent.$start or sel.$from, doc.$end]\n if (!result) result = query.findNext(state, parent?.pos || $from.pos);\n // find match in [doc.$start, parent.$start or sel.$to]\n if (!result) result = query.findPrev(state, parent?.pos || $to.pos);\n // update text selection\n if (result) tr.setSelection(TextSelection.create(tr.doc, result.from, result.to));\n\n dispatch(tr);\n };\n\n private _onClose = () => {\n closeSearch(this._view.state, this._view.dispatch);\n this._view.focus();\n };\n\n private _onSearchPrev = () => {\n this._preserveFocus(findPrev);\n };\n\n private _onSearchNext = () => {\n this._preserveFocus(findNext);\n };\n\n private _onReplaceNext = () => {\n this._preserveFocus(replaceNext);\n };\n\n private _onReplaceAll = () => {\n this._preserveFocus(replaceAll);\n };\n\n private _preserveFocus(command: Command) {\n this._focusManager.storeFocus();\n this._view.focus();\n command(this._view.state, this._view.dispatch, this._view);\n this._focusManager.restoreFocus({preventScroll: true});\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import type { Command } from "../../../pm/state.js";
2
+ export declare const findNext: Command;
3
+ export declare const findPrev: Command;
4
+ export declare const replaceNext: Command;
5
+ export declare const replaceAll: Command;
6
+ export declare const openSearch: Command;
7
+ export declare const closeSearch: Command;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.closeSearch = exports.openSearch = exports.replaceAll = exports.replaceNext = exports.findPrev = exports.findNext = void 0;
4
+ const prosemirror_search_1 = require("prosemirror-search");
5
+ const SelectionContext_1 = require("../SelectionContext/index.js");
6
+ const const_1 = require("./const.js");
7
+ const wrap_command_1 = require("./utils/wrap-command.js");
8
+ exports.findNext = (0, wrap_command_1.wrapCommand)(prosemirror_search_1.findNext, SelectionContext_1.hideSelectionMenu);
9
+ exports.findPrev = (0, wrap_command_1.wrapCommand)(prosemirror_search_1.findPrev, SelectionContext_1.hideSelectionMenu);
10
+ exports.replaceNext = (0, wrap_command_1.wrapCommand)(prosemirror_search_1.replaceNext, SelectionContext_1.hideSelectionMenu);
11
+ exports.replaceAll = (0, wrap_command_1.wrapCommand)(prosemirror_search_1.replaceAll, SelectionContext_1.hideSelectionMenu);
12
+ const openSearch = (state, dispatch) => {
13
+ if (dispatch) {
14
+ const searchState = (0, prosemirror_search_1.getSearchState)(state);
15
+ const search = state.doc.textBetween(state.selection.from, state.selection.to, ' ');
16
+ const meta = { open: true };
17
+ dispatch((0, prosemirror_search_1.setSearchState)((0, SelectionContext_1.hideSelectionMenu)(state.tr.setMeta(const_1.pluginKey, meta)), new prosemirror_search_1.SearchQuery({
18
+ ...(searchState
19
+ ? {
20
+ regexp: searchState.query.regexp,
21
+ replace: searchState.query.replace,
22
+ literal: searchState.query.literal,
23
+ wholeWord: searchState.query.wholeWord,
24
+ caseSensitive: searchState.query.caseSensitive,
25
+ filter: searchState.query.filter || undefined,
26
+ }
27
+ : undefined),
28
+ search,
29
+ })));
30
+ }
31
+ return true;
32
+ };
33
+ exports.openSearch = openSearch;
34
+ const closeSearch = (state, dispatch) => {
35
+ if (dispatch) {
36
+ const meta = { open: false };
37
+ dispatch((0, prosemirror_search_1.setSearchState)(state.tr.setMeta(const_1.pluginKey, meta), new prosemirror_search_1.SearchQuery({ search: '' })));
38
+ }
39
+ return true;
40
+ };
41
+ exports.closeSearch = closeSearch;
42
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/commands.ts"],"names":[],"mappings":";;;AAAA,2DAQ4B;AAI5B,mEAAsD;AAEtD,sCAAkC;AAElC,0DAAiD;AAEpC,QAAA,QAAQ,GAAG,IAAA,0BAAW,EAAC,6BAAc,EAAE,oCAAiB,CAAC,CAAC;AAC1D,QAAA,QAAQ,GAAG,IAAA,0BAAW,EAAC,6BAAc,EAAE,oCAAiB,CAAC,CAAC;AAC1D,QAAA,WAAW,GAAG,IAAA,0BAAW,EAAC,gCAAiB,EAAE,oCAAiB,CAAC,CAAC;AAChE,QAAA,UAAU,GAAG,IAAA,0BAAW,EAAC,+BAAgB,EAAE,oCAAiB,CAAC,CAAC;AAEpE,MAAM,UAAU,GAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IACnD,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,WAAW,GAAG,IAAA,mCAAc,EAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpF,MAAM,IAAI,GAAoB,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;QAC3C,QAAQ,CACJ,IAAA,mCAAc,EACV,IAAA,oCAAiB,EAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAS,EAAE,IAAI,CAAC,CAAC,EACpD,IAAI,gCAAW,CAAC;YACZ,GAAG,CAAC,WAAW;gBACX,CAAC,CAAC;oBACI,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM;oBAChC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO;oBAClC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO;oBAClC,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS;oBACtC,aAAa,EAAE,WAAW,CAAC,KAAK,CAAC,aAAa;oBAC9C,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS;iBAChD;gBACH,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM;SACT,CAAC,CACL,CACJ,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAzBW,QAAA,UAAU,cAyBrB;AAEK,MAAM,WAAW,GAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IACpD,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,IAAI,GAAoB,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC;QAC5C,QAAQ,CAAC,IAAA,mCAAc,EAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAS,EAAE,IAAI,CAAC,EAAE,IAAI,gCAAW,CAAC,EAAC,MAAM,EAAE,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AANW,QAAA,WAAW,eAMtB","sourcesContent":["import {\n SearchQuery,\n findNext as findNextSearch,\n findPrev as findPrevSearch,\n getSearchState,\n replaceAll as replaceAllSearch,\n replaceNext as replaceNextSearch,\n setSearchState,\n} from 'prosemirror-search';\n\nimport type {Command} from '#pm/state';\n\nimport {hideSelectionMenu} from '../SelectionContext';\n\nimport {pluginKey} from './const';\nimport type {SearchViewState} from './types';\nimport {wrapCommand} from './utils/wrap-command';\n\nexport const findNext = wrapCommand(findNextSearch, hideSelectionMenu);\nexport const findPrev = wrapCommand(findPrevSearch, hideSelectionMenu);\nexport const replaceNext = wrapCommand(replaceNextSearch, hideSelectionMenu);\nexport const replaceAll = wrapCommand(replaceAllSearch, hideSelectionMenu);\n\nexport const openSearch: Command = (state, dispatch) => {\n if (dispatch) {\n const searchState = getSearchState(state);\n const search = state.doc.textBetween(state.selection.from, state.selection.to, ' ');\n const meta: SearchViewState = {open: true};\n dispatch(\n setSearchState(\n hideSelectionMenu(state.tr.setMeta(pluginKey, meta)),\n new SearchQuery({\n ...(searchState\n ? {\n regexp: searchState.query.regexp,\n replace: searchState.query.replace,\n literal: searchState.query.literal,\n wholeWord: searchState.query.wholeWord,\n caseSensitive: searchState.query.caseSensitive,\n filter: searchState.query.filter || undefined,\n }\n : undefined),\n search,\n }),\n ),\n );\n }\n return true;\n};\n\nexport const closeSearch: Command = (state, dispatch) => {\n if (dispatch) {\n const meta: SearchViewState = {open: false};\n dispatch(setSearchState(state.tr.setMeta(pluginKey, meta), new SearchQuery({search: ''})));\n }\n return true;\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import { PluginKey } from "../../../pm/state.js";
2
+ import type { SearchViewState } from "./types.js";
3
+ export declare const SearchClassName: {
4
+ readonly Match: "ProseMirror-search-match";
5
+ readonly ActiveMatch: "ProseMirror-active-search-match";
6
+ };
7
+ export declare const pluginKey: PluginKey<SearchViewState>;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pluginKey = exports.SearchClassName = void 0;
4
+ const state_1 = require("../../../pm/state.js");
5
+ exports.SearchClassName = {
6
+ Match: 'ProseMirror-search-match',
7
+ ActiveMatch: 'ProseMirror-active-search-match',
8
+ };
9
+ exports.pluginKey = new state_1.PluginKey('search-view');
10
+ //# sourceMappingURL=const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/const.ts"],"names":[],"mappings":";;;AAAA,gDAAoC;AAIvB,QAAA,eAAe,GAAG;IAC3B,KAAK,EAAE,0BAA0B;IACjC,WAAW,EAAE,iCAAiC;CACxC,CAAC;AAEE,QAAA,SAAS,GAAG,IAAI,iBAAS,CAAkB,aAAa,CAAC,CAAC","sourcesContent":["import {PluginKey} from '#pm/state';\n\nimport type {SearchViewState} from './types';\n\nexport const SearchClassName = {\n Match: 'ProseMirror-search-match',\n ActiveMatch: 'ProseMirror-active-search-match',\n} as const;\n\nexport const pluginKey = new PluginKey<SearchViewState>('search-view');\n"]}
@@ -0,0 +1 @@
1
+ export * from "./Search.js";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./Search.js"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/index.ts"],"names":[],"mappings":";;;AAAA,sDAAyB","sourcesContent":["export * from './Search';\n"]}
@@ -0,0 +1 @@
1
+ export declare const searchKeyHandler: (view: import("prosemirror-view").EditorView, event: KeyboardEvent) => boolean;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchKeyHandler = void 0;
4
+ const keymap_1 = require("../../../pm/keymap.js");
5
+ const commands_1 = require("./commands.js");
6
+ exports.searchKeyHandler = (0, keymap_1.keydownHandler)({
7
+ 'Mod-f': commands_1.openSearch,
8
+ Escape: commands_1.closeSearch,
9
+ F3: commands_1.findNext,
10
+ 'Shift-F3': commands_1.findPrev,
11
+ 'Mod-g': commands_1.findNext,
12
+ 'Shift-Mod-g': commands_1.findPrev,
13
+ });
14
+ //# sourceMappingURL=key-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-handler.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/key-handler.ts"],"names":[],"mappings":";;;AAAA,kDAA0C;AAE1C,4CAAuE;AAE1D,QAAA,gBAAgB,GAAG,IAAA,uBAAc,EAAC;IAC3C,OAAO,EAAE,qBAAU;IACnB,MAAM,EAAE,sBAAW;IACnB,EAAE,EAAE,mBAAQ;IACZ,UAAU,EAAE,mBAAQ;IACpB,OAAO,EAAE,mBAAQ;IACjB,aAAa,EAAE,mBAAQ;CAC1B,CAAC,CAAC","sourcesContent":["import {keydownHandler} from '#pm/keymap';\n\nimport {closeSearch, findNext, findPrev, openSearch} from './commands';\n\nexport const searchKeyHandler = keydownHandler({\n 'Mod-f': openSearch,\n Escape: closeSearch,\n F3: findNext,\n 'Shift-F3': findPrev,\n 'Mod-g': findNext,\n 'Shift-Mod-g': findPrev,\n});\n"]}
@@ -0,0 +1,7 @@
1
+ .ProseMirror-search-match {
2
+ background-color: var(--g-color-base-info-light);
3
+ }
4
+
5
+ .ProseMirror-active-search-match {
6
+ background-color: var(--g-color-base-info-heavy);
7
+ }
@@ -0,0 +1,3 @@
1
+ export type SearchViewState = {
2
+ open: boolean;
3
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/types.ts"],"names":[],"mappings":"","sourcesContent":["export type SearchViewState = {open: boolean};\n"]}
@@ -0,0 +1,7 @@
1
+ type TrackingOptions = {
2
+ onConnect?: () => void;
3
+ onDisconnect?: () => void;
4
+ };
5
+ type Dispose = () => void;
6
+ export declare function startTracking(elem: HTMLElement, options: TrackingOptions): Dispose;
7
+ export {};
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startTracking = startTracking;
4
+ function startTracking(elem, options) {
5
+ const document = elem.ownerDocument;
6
+ let connected = document.contains(elem);
7
+ const observer = new MutationObserver(() => {
8
+ if (connected) {
9
+ if (!document.contains(elem)) {
10
+ connected = false;
11
+ options.onDisconnect?.();
12
+ }
13
+ }
14
+ else if (document.contains(elem)) {
15
+ connected = true;
16
+ options.onConnect?.();
17
+ }
18
+ });
19
+ observer.observe(document.body, { childList: true, subtree: true });
20
+ return () => {
21
+ observer.disconnect();
22
+ };
23
+ }
24
+ //# sourceMappingURL=connect-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-tracker.js","sourceRoot":"../../../../../../src","sources":["extensions/behavior/Search/utils/connect-tracker.ts"],"names":[],"mappings":";;AAOA,sCAsBC;AAtBD,SAAgB,aAAa,CAAC,IAAiB,EAAE,OAAwB;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;IAEpC,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;QACvC,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,SAAS,GAAG,KAAK,CAAC;gBAClB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;YAC7B,CAAC;QACL,CAAC;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QAC1B,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;IAElE,OAAO,GAAG,EAAE;QACR,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC,CAAC;AACN,CAAC","sourcesContent":["type TrackingOptions = {\n onConnect?: () => void;\n onDisconnect?: () => void;\n};\n\ntype Dispose = () => void;\n\nexport function startTracking(elem: HTMLElement, options: TrackingOptions): Dispose {\n const document = elem.ownerDocument;\n\n let connected = document.contains(elem);\n\n const observer = new MutationObserver(() => {\n if (connected) {\n if (!document.contains(elem)) {\n connected = false;\n options.onDisconnect?.();\n }\n } else if (document.contains(elem)) {\n connected = true;\n options.onConnect?.();\n }\n });\n\n observer.observe(document.body, {childList: true, subtree: true});\n\n return () => {\n observer.disconnect();\n };\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export declare class FocusManager {
2
+ #private;
3
+ constructor(doc?: Document);
4
+ storeFocus(): void;
5
+ restoreFocus(options?: FocusOptions): void;
6
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FocusManager = void 0;
4
+ class FocusManager {
5
+ #doc;
6
+ #previousFocused = null;
7
+ constructor(doc = document) {
8
+ this.#doc = doc;
9
+ }
10
+ storeFocus() {
11
+ this.#previousFocused = this.#doc.activeElement;
12
+ }
13
+ restoreFocus(options) {
14
+ this.#previousFocused?.focus?.(options);
15
+ }
16
+ }
17
+ exports.FocusManager = FocusManager;
18
+ //# sourceMappingURL=focus-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-manager.js","sourceRoot":"../../../../../../src","sources":["extensions/behavior/Search/utils/focus-manager.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAY;IACrB,IAAI,CAAW;IACf,gBAAgB,GAAuB,IAAI,CAAC;IAE5C,YAAY,MAAgB,QAAQ;QAChC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IACpB,CAAC;IAED,UAAU;QACN,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAmC,CAAC;IAC1E,CAAC;IAED,YAAY,CAAC,OAAsB;QAC/B,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;CACJ;AAfD,oCAeC","sourcesContent":["export class FocusManager {\n #doc: Document;\n #previousFocused: HTMLElement | null = null;\n\n constructor(doc: Document = document) {\n this.#doc = doc;\n }\n\n storeFocus() {\n this.#previousFocused = this.#doc.activeElement as HTMLElement | null;\n }\n\n restoreFocus(options?: FocusOptions) {\n this.#previousFocused?.focus?.(options);\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { EditorState } from "../../../../pm/state.js";
2
+ import type { SearchCounter } from "../../../../modules/search/index.js";
3
+ export declare function getCounter(state: EditorState): SearchCounter;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCounter = getCounter;
4
+ const prosemirror_search_1 = require("prosemirror-search");
5
+ const const_1 = require("../const.js");
6
+ function getCounter(state) {
7
+ const decoSet = (0, prosemirror_search_1.getMatchHighlights)(state);
8
+ const searchDecos = decoSet.find(undefined, undefined, () => true);
9
+ const activeIndex = searchDecos.findIndex((deco) => {
10
+ const d = deco;
11
+ return d.type?.attrs?.class === const_1.SearchClassName.ActiveMatch;
12
+ });
13
+ return {
14
+ total: searchDecos.length,
15
+ current: activeIndex + 1,
16
+ };
17
+ }
18
+ //# sourceMappingURL=search-counter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-counter.js","sourceRoot":"../../../../../../src","sources":["extensions/behavior/Search/utils/search-counter.ts"],"names":[],"mappings":";;AAOA,gCAWC;AAlBD,2DAAsD;AAKtD,uCAAyC;AAEzC,SAAgB,UAAU,CAAC,KAAkB;IACzC,MAAM,OAAO,GAAG,IAAA,uCAAkB,EAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/C,MAAM,CAAC,GAAG,IAA8C,CAAC;QACzD,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,uBAAe,CAAC,WAAW,CAAC;IAChE,CAAC,CAAC,CAAC;IACH,OAAO;QACH,KAAK,EAAE,WAAW,CAAC,MAAM;QACzB,OAAO,EAAE,WAAW,GAAG,CAAC;KAC3B,CAAC;AACN,CAAC","sourcesContent":["import {getMatchHighlights} from 'prosemirror-search';\n\nimport type {EditorState} from '#pm/state';\nimport type {SearchCounter} from 'src/modules/search';\n\nimport {SearchClassName} from '../const';\n\nexport function getCounter(state: EditorState): SearchCounter {\n const decoSet = getMatchHighlights(state);\n const searchDecos = decoSet.find(undefined, undefined, () => true);\n const activeIndex = searchDecos.findIndex((deco) => {\n const d = deco as {type?: {attrs?: Record<string, any>}};\n return d.type?.attrs?.class === SearchClassName.ActiveMatch;\n });\n return {\n total: searchDecos.length,\n current: activeIndex + 1,\n };\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Command, Transaction } from "../../../../pm/state.js";
2
+ type Wrapper = (tr: Transaction) => void;
3
+ export declare function wrapCommand(command: Command, ...wrappers: [Wrapper, ...Wrapper[]]): Command;
4
+ export {};
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wrapCommand = wrapCommand;
4
+ function wrapCommand(command, ...wrappers) {
5
+ return (state, dispatch, view) => {
6
+ return command(state, dispatch
7
+ ? function dispatchWithWrappers(tr) {
8
+ for (const wrapper of wrappers) {
9
+ wrapper(tr);
10
+ }
11
+ return dispatch(tr);
12
+ }
13
+ : undefined, view);
14
+ };
15
+ }
16
+ //# sourceMappingURL=wrap-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap-command.js","sourceRoot":"../../../../../../src","sources":["extensions/behavior/Search/utils/wrap-command.ts"],"names":[],"mappings":";;AAIA,kCAeC;AAfD,SAAgB,WAAW,CAAC,OAAgB,EAAE,GAAG,QAAiC;IAC9E,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QAC7B,OAAO,OAAO,CACV,KAAK,EACL,QAAQ;YACJ,CAAC,CAAC,SAAS,oBAAoB,CAAC,EAAE;gBAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC7B,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChB,CAAC;gBACD,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC;YACH,CAAC,CAAC,SAAS,EACf,IAAI,CACP,CAAC;IACN,CAAC,CAAC;AACN,CAAC","sourcesContent":["import type {Command, Transaction} from '#pm/state';\n\ntype Wrapper = (tr: Transaction) => void;\n\nexport function wrapCommand(command: Command, ...wrappers: [Wrapper, ...Wrapper[]]): Command {\n return (state, dispatch, view) => {\n return command(\n state,\n dispatch\n ? function dispatchWithWrappers(tr) {\n for (const wrapper of wrappers) {\n wrapper(tr);\n }\n return dispatch(tr);\n }\n : undefined,\n view,\n );\n };\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import { type Transaction } from 'prosemirror-state';
1
2
  import type { ExtensionAuto } from "../../../core/index.js";
2
3
  import { type ContextConfig } from "./tooltip.js";
3
4
  export type { ContextConfig as SelectionContextConfig, ContextGroupItemData as SelectionContextItemData, } from "./tooltip.js";
@@ -17,6 +18,7 @@ export type SelectionContextOptions = {
17
18
  flip?: boolean;
18
19
  };
19
20
  export declare const SelectionContext: ExtensionAuto<SelectionContextOptions>;
21
+ export declare const hideSelectionMenu: (tr: Transaction) => Transaction;
20
22
  declare module 'prosemirror-model' {
21
23
  interface NodeSpec {
22
24
  /** Set false to disable the selection-context menu within this node */
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SelectionContext = void 0;
3
+ exports.hideSelectionMenu = exports.SelectionContext = void 0;
4
4
  const prosemirror_keymap_1 = require("prosemirror-keymap");
5
5
  const prosemirror_state_1 = require("prosemirror-state");
6
6
  // @ts-ignore // TODO: fix cjs build
@@ -14,6 +14,12 @@ const SelectionContext = (builder, opts) => {
14
14
  }
15
15
  };
16
16
  exports.SelectionContext = SelectionContext;
17
+ const HideMetaKey = 'hide-selection-menu';
18
+ const hideSelectionMenu = (tr) => {
19
+ return tr.setMeta(HideMetaKey, true);
20
+ };
21
+ exports.hideSelectionMenu = hideSelectionMenu;
22
+ const pluginKey = new prosemirror_state_1.PluginKey('selection-context');
17
23
  class SelectionTooltip {
18
24
  destroyed = false;
19
25
  tooltip;
@@ -22,6 +28,9 @@ class SelectionTooltip {
22
28
  constructor(actions, menuConfig, logger, options) {
23
29
  this.tooltip = new tooltip_1.TooltipView(actions, menuConfig, logger, options);
24
30
  }
31
+ get key() {
32
+ return pluginKey;
33
+ }
25
34
  get props() {
26
35
  return {
27
36
  // same as keymap({})
@@ -55,6 +64,14 @@ class SelectionTooltip {
55
64
  },
56
65
  };
57
66
  }
67
+ get state() {
68
+ return {
69
+ init: () => ({ disabled: false }),
70
+ apply(tr) {
71
+ return { disabled: Boolean(tr.getMeta(HideMetaKey)) };
72
+ },
73
+ };
74
+ }
58
75
  view(view) {
59
76
  this.update(view);
60
77
  return {
@@ -70,9 +87,10 @@ class SelectionTooltip {
70
87
  if (this._isMousePressed)
71
88
  return;
72
89
  this.cancelTooltipHiding();
90
+ const hideFromTr = pluginKey.getState(view.state)?.disabled;
73
91
  // Don't show tooltip if editor not mounted to the DOM
74
92
  // or when view is out of focus
75
- if (!view.dom.parentNode || !view.hasFocus()) {
93
+ if (hideFromTr || !view.dom.parentNode || !view.hasFocus()) {
76
94
  this.tooltip.hide(view);
77
95
  return;
78
96
  }