@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
@@ -13,23 +13,21 @@ export interface SearchPanelPluginParams {
13
13
  export declare const SearchPanelPlugin: (params: SearchPanelPluginParams) => ViewPlugin<{
14
14
  readonly view: EditorView;
15
15
  readonly params: SearchPanelPluginParams;
16
- anchor: HTMLElement | null;
17
- renderer: RendererItem | null;
18
- searchConfig: SearchQueryConfig;
16
+ renderer: RendererItem;
19
17
  receiver: Receiver<EventMap> | undefined;
20
- setViewSearchWithDelay: (config: Partial<SearchQueryConfig>) => void;
18
+ panelOpened: boolean;
19
+ searchState: SearchQuery | null;
21
20
  update(update: ViewUpdate): void;
22
21
  destroy(): void;
23
- setViewSearch(config: Partial<SearchQueryConfig>): void;
22
+ createRenderer(): RendererItem;
24
23
  handleEditorModeChange({ mode }: {
25
24
  mode: MarkdownEditorMode;
26
25
  }): void;
27
- handleChange(search: string): void;
26
+ handleChange(config: SearchQueryConfig): void;
28
27
  handleClose(): void;
29
28
  handleSearchNext(): void;
30
29
  handleSearchPrev(): void;
31
- handleSearchConfigChange(config: Partial<SearchQueryConfig>): void;
32
- handleReplaceNext(query: string, replacement: string): void;
33
- handleReplaceAll(query: string, replacement: string): void;
30
+ handleReplaceNext(): void;
31
+ handleReplaceAll(): void;
34
32
  }>;
35
33
  export {};
@@ -1,90 +1,83 @@
1
1
  import { SearchQuery, closeSearchPanel, findNext, findPrevious, getSearchQuery, replaceAll, replaceNext, search, searchKeymap, searchPanelOpen, setSearchQuery, } from '@codemirror/search';
2
2
  import { ViewPlugin, keymap, } from '@codemirror/view';
3
- import { debounce } from "../../../lodash.js";
3
+ import { renderSearchPopup } from "../../../modules/search/index.js";
4
4
  import { ReactRendererFacet } from "../react-facet.js";
5
- import { renderSearchPopup } from "./view/SearchPopup.js";
6
- const INPUT_DELAY = 200;
5
+ import { searchTheme } from "./theme.js";
7
6
  export const SearchPanelPlugin = (params) => ViewPlugin.fromClass(class {
8
7
  view;
9
8
  params;
10
- anchor;
11
9
  renderer;
12
- searchConfig = {
13
- search: '',
14
- caseSensitive: false,
15
- wholeWord: false,
16
- replace: '',
17
- };
18
10
  receiver;
19
- setViewSearchWithDelay;
11
+ panelOpened;
12
+ searchState;
20
13
  constructor(view) {
21
14
  this.view = view;
22
- this.anchor = null;
23
- this.renderer = null;
24
15
  this.params = params;
25
16
  this.receiver = params.receiver;
17
+ this.panelOpened = searchPanelOpen(view.state);
18
+ this.searchState = getSearchQuery(view.state);
19
+ this.renderer = this.createRenderer();
26
20
  this.handleClose = this.handleClose.bind(this);
27
21
  this.handleChange = this.handleChange.bind(this);
28
22
  this.handleSearchNext = this.handleSearchNext.bind(this);
29
23
  this.handleSearchPrev = this.handleSearchPrev.bind(this);
30
24
  this.handleReplaceNext = this.handleReplaceNext.bind(this);
31
25
  this.handleReplaceAll = this.handleReplaceAll.bind(this);
32
- this.handleSearchConfigChange = this.handleSearchConfigChange.bind(this);
33
26
  this.handleEditorModeChange = this.handleEditorModeChange.bind(this);
34
- this.setViewSearchWithDelay = debounce(this.setViewSearch, this.params.inputDelay ?? INPUT_DELAY);
35
27
  this.receiver?.on('change-editor-mode', this.handleEditorModeChange);
36
28
  }
37
29
  update(update) {
38
30
  const isPanelOpen = searchPanelOpen(update.state);
39
- if (isPanelOpen && !this.renderer) {
40
- const initial = getSearchQuery(update.state);
41
- this.anchor = document.querySelector(this.params.anchorSelector);
42
- this.renderer = this.view.state
43
- .facet(ReactRendererFacet)
44
- .createItem('cm-search', () => renderSearchPopup({
45
- initial,
31
+ const searchQuery = getSearchQuery(update.state);
32
+ if (isPanelOpen !== this.panelOpened || searchQuery !== this.searchState) {
33
+ this.panelOpened = isPanelOpen;
34
+ this.searchState = searchQuery;
35
+ this.renderer.rerender();
36
+ }
37
+ }
38
+ destroy() {
39
+ this.renderer.remove();
40
+ this.receiver?.off('change-editor-mode', this.handleEditorModeChange);
41
+ }
42
+ createRenderer() {
43
+ return this.view.state.facet(ReactRendererFacet).createItem('cm-search', () => {
44
+ if (!this.panelOpened || !this.searchState)
45
+ return null;
46
+ const anchor = this.view.dom.ownerDocument.querySelector(this.params.anchorSelector);
47
+ if (!anchor)
48
+ return null;
49
+ return renderSearchPopup({
46
50
  open: true,
47
- anchor: this.anchor,
48
- onChange: this.handleChange,
51
+ anchor: anchor,
52
+ state: this.searchState,
49
53
  onClose: this.handleClose,
54
+ onChange: this.handleChange,
50
55
  onSearchNext: this.handleSearchNext,
51
56
  onSearchPrev: this.handleSearchPrev,
52
57
  onReplaceNext: this.handleReplaceNext,
53
58
  onReplaceAll: this.handleReplaceAll,
54
- onConfigChange: this.handleSearchConfigChange,
55
- }));
56
- }
57
- else if (!isPanelOpen && this.renderer) {
58
- this.renderer?.remove();
59
- this.renderer = null;
60
- }
61
- }
62
- destroy() {
63
- this.renderer?.remove();
64
- this.renderer = null;
65
- this.receiver?.off('change-editor-mode', this.handleEditorModeChange);
66
- }
67
- setViewSearch(config) {
68
- this.searchConfig = {
69
- ...this.searchConfig,
70
- ...config,
71
- };
72
- const searchQuery = new SearchQuery({
73
- ...this.searchConfig,
59
+ });
74
60
  });
75
- this.view.dispatch({ effects: setSearchQuery.of(searchQuery) });
76
61
  }
77
62
  handleEditorModeChange({ mode }) {
78
63
  if (mode === 'wysiwyg') {
79
64
  closeSearchPanel(this.view);
80
65
  }
81
66
  }
82
- handleChange(search) {
83
- this.setViewSearchWithDelay({ search });
67
+ handleChange(config) {
68
+ this.view.dispatch({
69
+ effects: setSearchQuery.of(new SearchQuery({
70
+ search: config.search,
71
+ replace: config.replace,
72
+ caseSensitive: config.caseSensitive,
73
+ wholeWord: config.wholeWord,
74
+ })),
75
+ });
84
76
  }
85
77
  handleClose() {
86
- this.setViewSearch({ search: '' });
78
+ this.handleChange({ search: '' });
87
79
  closeSearchPanel(this.view);
80
+ this.view.focus();
88
81
  }
89
82
  handleSearchNext() {
90
83
  findNext(this.view);
@@ -92,20 +85,16 @@ export const SearchPanelPlugin = (params) => ViewPlugin.fromClass(class {
92
85
  handleSearchPrev() {
93
86
  findPrevious(this.view);
94
87
  }
95
- handleSearchConfigChange(config) {
96
- this.setViewSearch(config);
97
- }
98
- handleReplaceNext(query, replacement) {
99
- this.setViewSearch({ search: query, replace: replacement });
88
+ handleReplaceNext() {
100
89
  replaceNext(this.view);
101
90
  }
102
- handleReplaceAll(query, replacement) {
103
- this.setViewSearch({ search: query, replace: replacement });
91
+ handleReplaceAll() {
104
92
  replaceAll(this.view);
105
93
  }
106
94
  }, {
107
95
  provide: () => [
108
96
  keymap.of(searchKeymap),
97
+ searchTheme,
109
98
  search({
110
99
  createPanel: () => ({
111
100
  // Create an empty search panel
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"../../../../../src","sources":["markup/codemirror/search-plugin/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n SearchQuery,\n closeSearchPanel,\n findNext,\n findPrevious,\n getSearchQuery,\n replaceAll,\n replaceNext,\n search,\n searchKeymap,\n searchPanelOpen,\n setSearchQuery,\n} from '@codemirror/search';\nimport {\n type EditorView,\n type PluginValue,\n ViewPlugin,\n type ViewUpdate,\n keymap,\n} from '@codemirror/view';\n\nimport type {MarkdownEditorMode} from '../../../bundle';\nimport type {EventMap} from '../../../bundle/Editor';\nimport type {RendererItem} from '../../../extensions';\nimport {debounce} from '../../../lodash';\nimport type {Receiver} from '../../../utils';\nimport {ReactRendererFacet} from '../react-facet';\n\nimport {renderSearchPopup} from './view/SearchPopup';\n\ntype SearchQueryConfig = ConstructorParameters<typeof SearchQuery>[0];\n\nconst INPUT_DELAY = 200;\n\nexport interface SearchPanelPluginParams {\n anchorSelector: string;\n inputDelay?: number;\n receiver?: Receiver<EventMap>;\n}\n\nexport const SearchPanelPlugin = (params: SearchPanelPluginParams) =>\n ViewPlugin.fromClass(\n class implements PluginValue {\n readonly view: EditorView;\n readonly params: SearchPanelPluginParams;\n\n anchor: HTMLElement | null;\n renderer: RendererItem | null;\n searchConfig: SearchQueryConfig = {\n search: '',\n caseSensitive: false,\n wholeWord: false,\n replace: '',\n };\n receiver: Receiver<EventMap> | undefined;\n\n setViewSearchWithDelay: (config: Partial<SearchQueryConfig>) => void;\n\n constructor(view: EditorView) {\n this.view = view;\n this.anchor = null;\n this.renderer = null;\n this.params = params;\n this.receiver = params.receiver;\n\n this.handleClose = this.handleClose.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleSearchNext = this.handleSearchNext.bind(this);\n this.handleSearchPrev = this.handleSearchPrev.bind(this);\n this.handleReplaceNext = this.handleReplaceNext.bind(this);\n this.handleReplaceAll = this.handleReplaceAll.bind(this);\n this.handleSearchConfigChange = this.handleSearchConfigChange.bind(this);\n this.handleEditorModeChange = this.handleEditorModeChange.bind(this);\n\n this.setViewSearchWithDelay = debounce(\n this.setViewSearch,\n this.params.inputDelay ?? INPUT_DELAY,\n );\n this.receiver?.on('change-editor-mode', this.handleEditorModeChange);\n }\n\n update(update: ViewUpdate): void {\n const isPanelOpen = searchPanelOpen(update.state);\n\n if (isPanelOpen && !this.renderer) {\n const initial = getSearchQuery(update.state);\n this.anchor = document.querySelector(this.params.anchorSelector);\n this.renderer = this.view.state\n .facet(ReactRendererFacet)\n .createItem('cm-search', () =>\n renderSearchPopup({\n initial,\n open: true,\n anchor: this.anchor,\n onChange: this.handleChange,\n onClose: this.handleClose,\n onSearchNext: this.handleSearchNext,\n onSearchPrev: this.handleSearchPrev,\n onReplaceNext: this.handleReplaceNext,\n onReplaceAll: this.handleReplaceAll,\n onConfigChange: this.handleSearchConfigChange,\n }),\n );\n } else if (!isPanelOpen && this.renderer) {\n this.renderer?.remove();\n this.renderer = null;\n }\n }\n\n destroy() {\n this.renderer?.remove();\n this.renderer = null;\n this.receiver?.off('change-editor-mode', this.handleEditorModeChange);\n }\n\n setViewSearch(config: Partial<SearchQueryConfig>) {\n this.searchConfig = {\n ...this.searchConfig,\n ...config,\n };\n const searchQuery = new SearchQuery({\n ...this.searchConfig,\n });\n\n this.view.dispatch({effects: setSearchQuery.of(searchQuery)});\n }\n\n handleEditorModeChange({mode}: {mode: MarkdownEditorMode}) {\n if (mode === 'wysiwyg') {\n closeSearchPanel(this.view);\n }\n }\n\n handleChange(search: string) {\n this.setViewSearchWithDelay({search});\n }\n\n handleClose() {\n this.setViewSearch({search: ''});\n closeSearchPanel(this.view);\n }\n\n handleSearchNext() {\n findNext(this.view);\n }\n\n handleSearchPrev() {\n findPrevious(this.view);\n }\n\n handleSearchConfigChange(config: Partial<SearchQueryConfig>) {\n this.setViewSearch(config);\n }\n\n handleReplaceNext(query: string, replacement: string) {\n this.setViewSearch({search: query, replace: replacement});\n replaceNext(this.view);\n }\n\n handleReplaceAll(query: string, replacement: string) {\n this.setViewSearch({search: query, replace: replacement});\n replaceAll(this.view);\n }\n },\n {\n provide: () => [\n keymap.of(searchKeymap),\n search({\n createPanel: () => ({\n // Create an empty search panel\n dom: document.createElement('div'),\n }),\n }),\n ],\n },\n );\n"]}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"../../../../../src","sources":["markup/codemirror/search-plugin/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n SearchQuery,\n closeSearchPanel,\n findNext,\n findPrevious,\n getSearchQuery,\n replaceAll,\n replaceNext,\n search,\n searchKeymap,\n searchPanelOpen,\n setSearchQuery,\n} from '@codemirror/search';\nimport {\n type EditorView,\n type PluginValue,\n ViewPlugin,\n type ViewUpdate,\n keymap,\n} from '@codemirror/view';\n\nimport type {MarkdownEditorMode} from 'src/bundle';\nimport type {EventMap} from 'src/bundle/Editor';\nimport type {RendererItem} from 'src/extensions';\nimport {renderSearchPopup} from 'src/modules/search';\nimport type {Receiver} from 'src/utils';\n\nimport {ReactRendererFacet} from '../react-facet';\n\nimport {searchTheme} from './theme';\n\ntype SearchQueryConfig = ConstructorParameters<typeof SearchQuery>[0];\n\nexport interface SearchPanelPluginParams {\n anchorSelector: string;\n inputDelay?: number;\n receiver?: Receiver<EventMap>;\n}\n\nexport const SearchPanelPlugin = (params: SearchPanelPluginParams) =>\n ViewPlugin.fromClass(\n class implements PluginValue {\n readonly view: EditorView;\n readonly params: SearchPanelPluginParams;\n\n renderer: RendererItem;\n receiver: Receiver<EventMap> | undefined;\n\n panelOpened: boolean;\n searchState: SearchQuery | null;\n\n constructor(view: EditorView) {\n this.view = view;\n this.params = params;\n this.receiver = params.receiver;\n\n this.panelOpened = searchPanelOpen(view.state);\n this.searchState = getSearchQuery(view.state);\n this.renderer = this.createRenderer();\n\n this.handleClose = this.handleClose.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleSearchNext = this.handleSearchNext.bind(this);\n this.handleSearchPrev = this.handleSearchPrev.bind(this);\n this.handleReplaceNext = this.handleReplaceNext.bind(this);\n this.handleReplaceAll = this.handleReplaceAll.bind(this);\n this.handleEditorModeChange = this.handleEditorModeChange.bind(this);\n\n this.receiver?.on('change-editor-mode', this.handleEditorModeChange);\n }\n\n update(update: ViewUpdate): void {\n const isPanelOpen = searchPanelOpen(update.state);\n const searchQuery = getSearchQuery(update.state);\n\n if (isPanelOpen !== this.panelOpened || searchQuery !== this.searchState) {\n this.panelOpened = isPanelOpen;\n this.searchState = searchQuery;\n this.renderer.rerender();\n }\n }\n\n destroy() {\n this.renderer.remove();\n this.receiver?.off('change-editor-mode', this.handleEditorModeChange);\n }\n\n createRenderer() {\n return this.view.state.facet(ReactRendererFacet).createItem('cm-search', () => {\n if (!this.panelOpened || !this.searchState) return null;\n\n const anchor = this.view.dom.ownerDocument.querySelector(\n this.params.anchorSelector,\n );\n\n if (!anchor) return null;\n\n return renderSearchPopup({\n open: true,\n anchor: anchor,\n state: this.searchState,\n onClose: this.handleClose,\n onChange: this.handleChange,\n onSearchNext: this.handleSearchNext,\n onSearchPrev: this.handleSearchPrev,\n onReplaceNext: this.handleReplaceNext,\n onReplaceAll: this.handleReplaceAll,\n });\n });\n }\n\n handleEditorModeChange({mode}: {mode: MarkdownEditorMode}) {\n if (mode === 'wysiwyg') {\n closeSearchPanel(this.view);\n }\n }\n\n handleChange(config: SearchQueryConfig) {\n this.view.dispatch({\n effects: setSearchQuery.of(\n new SearchQuery({\n search: config.search,\n replace: config.replace,\n caseSensitive: config.caseSensitive,\n wholeWord: config.wholeWord,\n }),\n ),\n });\n }\n\n handleClose() {\n this.handleChange({search: ''});\n closeSearchPanel(this.view);\n this.view.focus();\n }\n\n handleSearchNext() {\n findNext(this.view);\n }\n\n handleSearchPrev() {\n findPrevious(this.view);\n }\n\n handleReplaceNext() {\n replaceNext(this.view);\n }\n\n handleReplaceAll() {\n replaceAll(this.view);\n }\n },\n {\n provide: () => [\n keymap.of(searchKeymap),\n searchTheme,\n search({\n createPanel: () => ({\n // Create an empty search panel\n dom: document.createElement('div'),\n }),\n }),\n ],\n },\n );\n"]}
@@ -0,0 +1 @@
1
+ export declare const searchTheme: import("@codemirror/state").Extension;
@@ -0,0 +1,12 @@
1
+ import { EditorView } from "../../../cm/view.js";
2
+ export const searchTheme = EditorView.baseTheme({
3
+ '&light, &dark': {
4
+ '& .cm-searchMatch': {
5
+ backgroundColor: 'var(--g-color-base-info-light)',
6
+ },
7
+ '& .cm-searchMatch-selected': {
8
+ backgroundColor: 'var(--g-color-base-info-heavy)',
9
+ },
10
+ },
11
+ });
12
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"../../../../../src","sources":["markup/codemirror/search-plugin/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,4BAAiB;AAEpC,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC;IAC5C,eAAe,EAAE;QACb,mBAAmB,EAAE;YACjB,eAAe,EAAE,gCAAgC;SACpD;QACD,4BAA4B,EAAE;YAC1B,eAAe,EAAE,gCAAgC;SACpD;KACJ;CACJ,CAAC,CAAC","sourcesContent":["import {EditorView} from '#cm/view';\n\nexport const searchTheme = EditorView.baseTheme({\n '&light, &dark': {\n '& .cm-searchMatch': {\n backgroundColor: 'var(--g-color-base-info-light)',\n },\n '& .cm-searchMatch-selected': {\n backgroundColor: 'var(--g-color-base-info-heavy)',\n },\n },\n});\n"]}
@@ -0,0 +1,7 @@
1
+ .g-md-search-card {
2
+ width: 428px;
3
+ }
4
+ .g-md-search-card__row.g-md-search-card__row {
5
+ --gc-form-row-label-width: 86px;
6
+ --gc-form-row-field-height: 36px;
7
+ }
@@ -0,0 +1,17 @@
1
+ import { type DOMProps } from '@gravity-ui/uikit';
2
+ import type { SearchCounter, SearchState } from "../types.js";
3
+ import "./SearchCardView.css";
4
+ export type SearchCardViewProps = DOMProps & {
5
+ counter?: SearchCounter;
6
+ searchState: SearchState;
7
+ onClose: () => void;
8
+ onSearchChange: (value: string) => void;
9
+ onReplacementChange: (value: string) => void;
10
+ onFindPrevious: () => void;
11
+ onFindNext: () => void;
12
+ onReplace: () => void;
13
+ onReplaceAll: () => void;
14
+ onWholeWordChange: (value: boolean) => void;
15
+ onCaseSensitiveChange: (value: boolean) => void;
16
+ };
17
+ export declare const SearchCardView: React.FC<SearchCardViewProps>;
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef } from 'react';
3
+ import { DelayedTextInput, FormRow } from '@gravity-ui/components';
4
+ import { Xmark } from '@gravity-ui/icons';
5
+ import { Button, Card, Checkbox, Flex, Icon, Text, sp } from '@gravity-ui/uikit';
6
+ import { cn } from "../../../classname.js";
7
+ import { i18n } from "../../../i18n/search/index.js";
8
+ import { useAutoFocus } from "../../../react-utils/useAutoFocus.js";
9
+ import { SearchQA } from "../qa.js";
10
+ import { SearchTextInput } from "./SearchTextInput.js";
11
+ import "./SearchCardView.css";
12
+ const b = cn('search-card');
13
+ export const SearchCardView = ({ style, className, counter, searchState, onClose, onSearchChange, onReplacementChange, onFindPrevious, onFindNext, onReplace, onReplaceAll, onWholeWordChange, onCaseSensitiveChange, }) => {
14
+ const searchInputRef = useRef(null);
15
+ useAutoFocus(searchInputRef, [], 200);
16
+ return (_jsxs(Card, { size: "l", spacing: { pt: 4, pb: 5, pl: 5, pr: 5 }, style: style, className: b(null, className), children: [_jsxs(Flex, { spacing: { mb: 5 }, alignItems: "center", justifyContent: "space-between", className: b('header'), children: [_jsx(Text, { variant: "subheader-2", className: b('title'), children: i18n('title') }), _jsx(Button, { size: "m", view: "flat", onClick: onClose, "aria-label": i18n('action_close'), qa: SearchQA.CloseBtn, children: _jsx(Icon, { data: Xmark }) })] }), _jsxs(FormRow, { direction: "row", label: i18n('title_search'), className: b('row', sp({ mb: 4 })), children: [_jsx(SearchTextInput, { counter: counter, onFindNext: onFindNext, onFindPrevious: onFindPrevious, controlRef: searchInputRef, className: sp({ mb: 2 }), onUpdate: onSearchChange, value: searchState.search, delay: 300 }), _jsx(Checkbox, { size: "m", onUpdate: onCaseSensitiveChange, checked: searchState.caseSensitive, qa: SearchQA.CaseSensitiveCheck, className: sp({ mr: 4 }), children: i18n('label_case-sensitive') }), _jsx(Checkbox, { size: "m", checked: searchState.wholeWord, onUpdate: onWholeWordChange, qa: SearchQA.WholeWordCheck, children: i18n('label_whole-word') })] }), _jsx(FormRow, { direction: "row", label: i18n('title_replace'), className: b('row', sp({ mb: 5 })), children: _jsx(DelayedTextInput, { size: "l", delay: 300, value: searchState.replace, onUpdate: onReplacementChange, qa: SearchQA.ReplaceInput }) }), _jsxs(Flex, { justifyContent: "flex-end", gap: 2, className: b('footer'), children: [_jsx(Button, { size: "l", view: "normal", onClick: onReplaceAll, disabled: !searchState.search, qa: SearchQA.ReplaceAllBtn, children: i18n('action_replace_all') }), _jsx(Button, { view: "action", size: "l", disabled: !searchState.search, onClick: onReplace, qa: SearchQA.ReplaceBtn, children: i18n('action_replace') })] })] }));
17
+ };
18
+ //# sourceMappingURL=SearchCardView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchCardView.js","sourceRoot":"../../../../../src","sources":["modules/search/components/SearchCardView.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useRef} from 'react';\n\nimport {DelayedTextInput, FormRow} from '@gravity-ui/components';\nimport {Xmark} from '@gravity-ui/icons';\nimport {Button, Card, Checkbox, type DOMProps, Flex, Icon, Text, sp} from '@gravity-ui/uikit';\n\nimport {cn} from 'src/classname';\nimport {i18n} from 'src/i18n/search';\nimport {useAutoFocus} from 'src/react-utils/useAutoFocus';\n\nimport {SearchQA} from '../qa';\nimport type {SearchCounter, SearchState} from '../types';\n\nimport {SearchTextInput} from './SearchTextInput';\n\nimport './SearchCardView.scss';\n\nexport type SearchCardViewProps = DOMProps & {\n counter?: SearchCounter;\n searchState: SearchState;\n onClose: () => void;\n onSearchChange: (value: string) => void;\n onReplacementChange: (value: string) => void;\n onFindPrevious: () => void;\n onFindNext: () => void;\n onReplace: () => void;\n onReplaceAll: () => void;\n onWholeWordChange: (value: boolean) => void;\n onCaseSensitiveChange: (value: boolean) => void;\n};\n\nconst b = cn('search-card');\n\nexport const SearchCardView: React.FC<SearchCardViewProps> = ({\n style,\n className,\n\n counter,\n searchState,\n onClose,\n onSearchChange,\n onReplacementChange,\n onFindPrevious,\n onFindNext,\n onReplace,\n onReplaceAll,\n onWholeWordChange,\n onCaseSensitiveChange,\n}) => {\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n useAutoFocus(searchInputRef, [], 200);\n\n return (\n <Card\n size=\"l\"\n spacing={{pt: 4, pb: 5, pl: 5, pr: 5}}\n style={style}\n className={b(null, className)}\n >\n <Flex\n spacing={{mb: 5}}\n alignItems=\"center\"\n justifyContent=\"space-between\"\n className={b('header')}\n >\n <Text variant=\"subheader-2\" className={b('title')}>\n {i18n('title')}\n </Text>\n <Button\n size=\"m\"\n view=\"flat\"\n onClick={onClose}\n aria-label={i18n('action_close')}\n qa={SearchQA.CloseBtn}\n >\n <Icon data={Xmark} />\n </Button>\n </Flex>\n\n <FormRow direction=\"row\" label={i18n('title_search')} className={b('row', sp({mb: 4}))}>\n <SearchTextInput\n counter={counter}\n onFindNext={onFindNext}\n onFindPrevious={onFindPrevious}\n controlRef={searchInputRef}\n className={sp({mb: 2})}\n onUpdate={onSearchChange}\n value={searchState.search}\n delay={300}\n />\n\n <Checkbox\n size=\"m\"\n onUpdate={onCaseSensitiveChange}\n checked={searchState.caseSensitive}\n qa={SearchQA.CaseSensitiveCheck}\n className={sp({mr: 4})}\n >\n {i18n('label_case-sensitive')}\n </Checkbox>\n\n <Checkbox\n size=\"m\"\n checked={searchState.wholeWord}\n onUpdate={onWholeWordChange}\n qa={SearchQA.WholeWordCheck}\n >\n {i18n('label_whole-word')}\n </Checkbox>\n </FormRow>\n\n <FormRow\n direction=\"row\"\n label={i18n('title_replace')}\n className={b('row', sp({mb: 5}))}\n >\n <DelayedTextInput\n size=\"l\"\n delay={300}\n value={searchState.replace}\n onUpdate={onReplacementChange}\n qa={SearchQA.ReplaceInput}\n />\n </FormRow>\n\n <Flex justifyContent=\"flex-end\" gap={2} className={b('footer')}>\n <Button\n size=\"l\"\n view=\"normal\"\n onClick={onReplaceAll}\n disabled={!searchState.search}\n qa={SearchQA.ReplaceAllBtn}\n >\n {i18n('action_replace_all')}\n </Button>\n <Button\n view=\"action\"\n size=\"l\"\n disabled={!searchState.search}\n onClick={onReplace}\n qa={SearchQA.ReplaceBtn}\n >\n {i18n('action_replace')}\n </Button>\n </Flex>\n </Card>\n );\n};\n"]}
@@ -0,0 +1,5 @@
1
+ .g-md-search-compact {
2
+ display: flex;
3
+ align-items: center;
4
+ width: 428px;
5
+ }
@@ -0,0 +1,13 @@
1
+ import { type DOMProps, type QAProps } from '@gravity-ui/uikit';
2
+ import type { SearchCounter } from "../types.js";
3
+ import "./SearchCompactView.css";
4
+ export type SearchCompactProps = DOMProps & QAProps & {
5
+ value: string;
6
+ counter?: SearchCounter;
7
+ onChange: (value: string) => void;
8
+ onFindPrevious: () => void;
9
+ onFindNext: () => void;
10
+ onExpand: () => void;
11
+ onClose: () => void;
12
+ };
13
+ export declare const SeachCompactView: React.FC<SearchCompactProps>;
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef } from 'react';
3
+ import { ChevronsExpandUpRight, Xmark } from '@gravity-ui/icons';
4
+ import { Button, ButtonIcon, Card, Icon, Tooltip, sp, } from '@gravity-ui/uikit';
5
+ import { cn } from "../../../classname.js";
6
+ import { i18n } from "../../../i18n/search/index.js";
7
+ import { useAutoFocus } from "../../../react-utils/useAutoFocus.js";
8
+ import { SearchQA } from "../qa.js";
9
+ import { SearchTextInput } from "./SearchTextInput.js";
10
+ import "./SearchCompactView.css";
11
+ const b = cn('search-compact');
12
+ export const SeachCompactView = function SearchCompactView({ value, counter, onChange, onFindNext, onFindPrevious, onExpand, onClose, qa, style, className, }) {
13
+ const inputRef = useRef(null);
14
+ useAutoFocus(inputRef, [], 200);
15
+ return (_jsxs(Card, { spacing: { pr: 1 }, "data-qa": qa, style: style, className: b(null, className), children: [_jsx(SearchTextInput, { counter: counter, onFindNext: onFindNext, onFindPrevious: onFindPrevious, value: value, view: "clear", delay: 300, onUpdate: onChange, controlRef: inputRef, placeholder: i18n('search_placeholder'), className: sp({ pl: 3 }) }), _jsx("div", { className: sp({ mr: 1 }), style: {
16
+ flexShrink: 0,
17
+ background: 'var(--g-color-line-generic-solid)',
18
+ height: '36px',
19
+ width: '1px',
20
+ } }), _jsx(Tooltip, { content: i18n('action_expand'), role: "label", children: (props, ref) => (_jsx(Button, { ...props, size: "m", view: "flat-secondary", onClick: onExpand, qa: SearchQA.ExpandBtn, ref: ref, "aria-label": i18n('action_expand'), children: _jsx(ButtonIcon, { children: _jsx(Icon, { data: ChevronsExpandUpRight }) }) })) }), _jsx(Button, { size: "m", view: "flat-secondary", onClick: onClose, className: sp({ ml: 1 }), "aria-label": i18n('action_close'), qa: SearchQA.CloseBtn, children: _jsx(ButtonIcon, { children: _jsx(Icon, { data: Xmark }) }) })] }));
21
+ };
22
+ //# sourceMappingURL=SearchCompactView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchCompactView.js","sourceRoot":"../../../../../src","sources":["modules/search/components/SearchCompactView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,OAAO,CAAC;AAE7B,OAAO,EAAC,qBAAqB,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACH,MAAM,EACN,UAAU,EACV,IAAI,EAEJ,IAAI,EAEJ,OAAO,EACP,EAAE,GACL,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAC,EAAE,EAAC,8BAAsB;AACjC,OAAO,EAAC,IAAI,EAAC,sCAAwB;AACrC,OAAO,EAAC,YAAY,EAAC,6CAAqC;AAE1D,OAAO,EAAC,QAAQ,EAAC,iBAAc;AAG/B,OAAO,EAAC,eAAe,EAAC,6BAA0B;AAElD,iCAAkC;AAElC,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC;AAa/B,MAAM,CAAC,MAAM,gBAAgB,GAAiC,SAAS,iBAAiB,CAAC,EACrF,KAAK,EACL,OAAO,EAEP,QAAQ,EACR,UAAU,EACV,cAAc,EACd,QAAQ,EACR,OAAO,EAEP,EAAE,EACF,KAAK,EACL,SAAS,GACZ;IACG,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEhD,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAEhC,OAAO,CACH,MAAC,IAAI,IAAC,OAAO,EAAE,EAAC,EAAE,EAAE,CAAC,EAAC,aAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,aAC5E,KAAC,eAAe,IACZ,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,QAAQ,EACpB,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,EACvC,SAAS,EAAE,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,EAAC,CAAC,GACxB,EAEF,cACI,SAAS,EAAE,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,EAAC,CAAC,EACtB,KAAK,EAAE;oBACH,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,mCAAmC;oBAC/C,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,KAAK;iBACf,GACH,EAGF,KAAC,OAAO,IAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,EAAC,OAAO,YAChD,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CACb,KAAC,MAAM,OACC,KAAK,EACT,IAAI,EAAC,GAAG,EACR,IAAI,EAAC,gBAAgB,EACrB,OAAO,EAAE,QAAQ,EACjB,EAAE,EAAE,QAAQ,CAAC,SAAS,EACtB,GAAG,EAAE,GAAmC,gBAC5B,IAAI,CAAC,eAAe,CAAC,YAEjC,KAAC,UAAU,cACP,KAAC,IAAI,IAAC,IAAI,EAAE,qBAAqB,GAAI,GAC5B,GACR,CACZ,GACK,EACV,KAAC,MAAM,IACH,IAAI,EAAC,GAAG,EACR,IAAI,EAAC,gBAAgB,EACrB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,EAAC,CAAC,gBACV,IAAI,CAAC,cAAc,CAAC,EAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,YAErB,KAAC,UAAU,cACP,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,GAAI,GACZ,GACR,IACN,CACV,CAAC;AACN,CAAC,CAAC","sourcesContent":["import {useRef} from 'react';\n\nimport {ChevronsExpandUpRight, Xmark} from '@gravity-ui/icons';\nimport {\n Button,\n ButtonIcon,\n Card,\n type DOMProps,\n Icon,\n type QAProps,\n Tooltip,\n sp,\n} from '@gravity-ui/uikit';\n\nimport {cn} from 'src/classname';\nimport {i18n} from 'src/i18n/search';\nimport {useAutoFocus} from 'src/react-utils/useAutoFocus';\n\nimport {SearchQA} from '../qa';\nimport type {SearchCounter} from '../types';\n\nimport {SearchTextInput} from './SearchTextInput';\n\nimport './SearchCompactView.scss';\n\nconst b = cn('search-compact');\n\nexport type SearchCompactProps = DOMProps &\n QAProps & {\n value: string;\n counter?: SearchCounter;\n onChange: (value: string) => void;\n onFindPrevious: () => void;\n onFindNext: () => void;\n onExpand: () => void;\n onClose: () => void;\n };\n\nexport const SeachCompactView: React.FC<SearchCompactProps> = function SearchCompactView({\n value,\n counter,\n\n onChange,\n onFindNext,\n onFindPrevious,\n onExpand,\n onClose,\n\n qa,\n style,\n className,\n}) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n useAutoFocus(inputRef, [], 200);\n\n return (\n <Card spacing={{pr: 1}} data-qa={qa} style={style} className={b(null, className)}>\n <SearchTextInput\n counter={counter}\n onFindNext={onFindNext}\n onFindPrevious={onFindPrevious}\n value={value}\n view=\"clear\"\n delay={300}\n onUpdate={onChange}\n controlRef={inputRef}\n placeholder={i18n('search_placeholder')}\n className={sp({pl: 3})}\n />\n\n <div\n className={sp({mr: 1})}\n style={{\n flexShrink: 0,\n background: 'var(--g-color-line-generic-solid)',\n height: '36px',\n width: '1px',\n }}\n />\n\n {/* eslint-disable-next-line jsx-a11y/aria-role */}\n <Tooltip content={i18n('action_expand')} role=\"label\">\n {(props, ref) => (\n <Button\n {...props}\n size=\"m\"\n view=\"flat-secondary\"\n onClick={onExpand}\n qa={SearchQA.ExpandBtn}\n ref={ref as React.Ref<HTMLButtonElement>}\n aria-label={i18n('action_expand')}\n >\n <ButtonIcon>\n <Icon data={ChevronsExpandUpRight} />\n </ButtonIcon>\n </Button>\n )}\n </Tooltip>\n <Button\n size=\"m\"\n view=\"flat-secondary\"\n onClick={onClose}\n className={sp({ml: 1})}\n aria-label={i18n('action_close')}\n qa={SearchQA.CloseBtn}\n >\n <ButtonIcon>\n <Icon data={Xmark} />\n </ButtonIcon>\n </Button>\n </Card>\n );\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import { type DOMProps } from '@gravity-ui/uikit';
2
+ import type { SearchCounter } from "../types.js";
3
+ export type SearchCounterProps = DOMProps & {
4
+ counter: SearchCounter;
5
+ };
6
+ export declare const SearchCounterText: React.FC<SearchCounterProps>;
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Text } from '@gravity-ui/uikit';
3
+ import { i18n } from "../../../i18n/search/index.js";
4
+ import { SearchQA } from "../qa.js";
5
+ export const SearchCounterText = ({ counter, style, className }) => {
6
+ return (_jsx(Text, { whiteSpace: "nowrap", style: style, className: className, qa: SearchQA.Counter, children: i18n('search_counter', {
7
+ current: String(counter.current),
8
+ total: String(counter.total),
9
+ }) }));
10
+ };
11
+ //# sourceMappingURL=SearchCounter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchCounter.js","sourceRoot":"../../../../../src","sources":["modules/search/components/SearchCounter.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAgB,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAC,IAAI,EAAC,sCAAwB;AAErC,OAAO,EAAC,QAAQ,EAAC,iBAAc;AAO/B,MAAM,CAAC,MAAM,iBAAiB,GAAiC,CAAC,EAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAC,EAAE,EAAE;IAC3F,OAAO,CACH,KAAC,IAAI,IAAC,UAAU,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,OAAO,YAC7E,IAAI,CAAC,gBAAgB,EAAE;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;YAChC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAC/B,CAAC,GACC,CACV,CAAC;AACN,CAAC,CAAC","sourcesContent":["import {type DOMProps, Text} from '@gravity-ui/uikit';\n\nimport {i18n} from 'src/i18n/search';\n\nimport {SearchQA} from '../qa';\nimport type {SearchCounter} from '../types';\n\nexport type SearchCounterProps = DOMProps & {\n counter: SearchCounter;\n};\n\nexport const SearchCounterText: React.FC<SearchCounterProps> = ({counter, style, className}) => {\n return (\n <Text whiteSpace=\"nowrap\" style={style} className={className} qa={SearchQA.Counter}>\n {i18n('search_counter', {\n current: String(counter.current),\n total: String(counter.total),\n })}\n </Text>\n );\n};\n"]}
@@ -0,0 +1,9 @@
1
+ .g-md-search-popup {
2
+ --g-popup-border-width: 0;
3
+ --g-popup-border-radius: 16px;
4
+ border-radius: 16px;
5
+ }
6
+ .g-md-search-popup_compact {
7
+ --g-popup-border-radius: var(--g-border-radius-l);
8
+ border-radius: var(--g-border-radius-l);
9
+ }
@@ -0,0 +1,15 @@
1
+ import { type UseSearchProps } from "../hooks/use-search.js";
2
+ import type { SearchCounter } from "../types.js";
3
+ import "./SearchPopup.css";
4
+ export type SearchPopupProps = UseSearchProps & {
5
+ open: boolean;
6
+ anchor: Element;
7
+ counter?: SearchCounter;
8
+ onClose: () => void;
9
+ };
10
+ export declare const SearchPopup: React.FC<SearchPopupProps>;
11
+ interface SearchPopupWithRefProps extends Omit<SearchPopupProps, 'anchor'> {
12
+ anchor: Element | null;
13
+ }
14
+ export declare function renderSearchPopup({ anchor, ...props }: SearchPopupWithRefProps): JSX.Element | null;
15
+ export {};
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Popup } from '@gravity-ui/uikit';
3
+ import { cn } from "../../../classname.js";
4
+ import { useSearch } from "../hooks/use-search.js";
5
+ import { SearchQA } from "../qa.js";
6
+ import { SearchCardView } from "./SearchCardView.js";
7
+ import { SeachCompactView } from "./SearchCompactView.js";
8
+ import "./SearchPopup.css";
9
+ const b = cn('search-popup');
10
+ export const SearchPopup = ({ open, anchor, counter, onClose, ...props }) => {
11
+ const { isCompact, searchState, handlers } = useSearch(props);
12
+ return (_jsx(Popup, { open: open, qa: SearchQA.Panel, anchorElement: anchor, placement: "bottom-end", className: b({ compact: isCompact }), onOpenChange: (_open, _event, reason) => {
13
+ if (reason === 'escape-key') {
14
+ onClose();
15
+ }
16
+ }, children: isCompact ? (_jsx(SeachCompactView, { counter: counter, onClose: onClose, value: searchState.search, onExpand: handlers.onExpand, onChange: handlers.onSearchChange, onFindNext: handlers.onFindNext, onFindPrevious: handlers.onFindPrevious })) : (_jsx(SearchCardView, { counter: counter, onClose: onClose, searchState: searchState, onSearchChange: handlers.onSearchChange, onReplacementChange: handlers.onReplaceChange, onFindNext: handlers.onFindNext, onFindPrevious: handlers.onFindPrevious, onReplace: handlers.onReplace, onReplaceAll: handlers.onReplaceAll, onWholeWordChange: handlers.onWholeWordChange, onCaseSensitiveChange: handlers.onCaseSensitiveChange })) }));
17
+ };
18
+ SearchPopup.displayName = 'SearchPopup';
19
+ export function renderSearchPopup({ anchor, ...props }) {
20
+ if (!anchor)
21
+ return null;
22
+ return _jsx(SearchPopup, { anchor: anchor, ...props });
23
+ }
24
+ //# sourceMappingURL=SearchPopup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchPopup.js","sourceRoot":"../../../../../src","sources":["modules/search/components/SearchPopup.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAExC,OAAO,EAAC,EAAE,EAAC,8BAAsB;AAEjC,OAAO,EAAsB,SAAS,EAAC,+BAA4B;AACnE,OAAO,EAAC,QAAQ,EAAC,iBAAc;AAG/B,OAAO,EAAC,cAAc,EAAC,4BAAyB;AAChD,OAAO,EAAC,gBAAgB,EAAC,+BAA4B;AAErD,2BAA4B;AAE5B,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;AAS7B,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EACpD,IAAI,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EACP,GAAG,KAAK,EACX,EAAE,EAAE;IACD,MAAM,EAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAE5D,OAAO,CACH,KAAC,KAAK,IACF,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,QAAQ,CAAC,KAAK,EAClB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAC,YAAY,EACtB,SAAS,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,SAAS,EAAC,CAAC,EAClC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACpC,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBAC1B,OAAO,EAAE,CAAC;YACd,CAAC;QACL,CAAC,YAEA,SAAS,CAAC,CAAC,CAAC,CACT,KAAC,gBAAgB,IACb,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,CAAC,MAAM,EACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,QAAQ,EAAE,QAAQ,CAAC,cAAc,EACjC,UAAU,EAAE,QAAQ,CAAC,UAAU,EAC/B,cAAc,EAAE,QAAQ,CAAC,cAAc,GACzC,CACL,CAAC,CAAC,CAAC,CACA,KAAC,cAAc,IACX,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,QAAQ,CAAC,cAAc,EACvC,mBAAmB,EAAE,QAAQ,CAAC,eAAe,EAC7C,UAAU,EAAE,QAAQ,CAAC,UAAU,EAC/B,cAAc,EAAE,QAAQ,CAAC,cAAc,EACvC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY,EACnC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,EAC7C,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB,GACvD,CACL,GACG,CACX,CAAC;AACN,CAAC,CAAC;AAEF,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAMxC,MAAM,UAAU,iBAAiB,CAAC,EAAC,MAAM,EAAE,GAAG,KAAK,EAA0B;IACzE,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,KAAM,KAAK,GAAI,CAAC;AACtD,CAAC","sourcesContent":["import {Popup} from '@gravity-ui/uikit';\n\nimport {cn} from 'src/classname';\n\nimport {type UseSearchProps, useSearch} from '../hooks/use-search';\nimport {SearchQA} from '../qa';\nimport type {SearchCounter} from '../types';\n\nimport {SearchCardView} from './SearchCardView';\nimport {SeachCompactView} from './SearchCompactView';\n\nimport './SearchPopup.scss';\n\nconst b = cn('search-popup');\n\nexport type SearchPopupProps = UseSearchProps & {\n open: boolean;\n anchor: Element;\n counter?: SearchCounter;\n onClose: () => void;\n};\n\nexport const SearchPopup: React.FC<SearchPopupProps> = ({\n open,\n anchor,\n counter,\n onClose,\n ...props\n}) => {\n const {isCompact, searchState, handlers} = useSearch(props);\n\n return (\n <Popup\n open={open}\n qa={SearchQA.Panel}\n anchorElement={anchor}\n placement=\"bottom-end\"\n className={b({compact: isCompact})}\n onOpenChange={(_open, _event, reason) => {\n if (reason === 'escape-key') {\n onClose();\n }\n }}\n >\n {isCompact ? (\n <SeachCompactView\n counter={counter}\n onClose={onClose}\n value={searchState.search}\n onExpand={handlers.onExpand}\n onChange={handlers.onSearchChange}\n onFindNext={handlers.onFindNext}\n onFindPrevious={handlers.onFindPrevious}\n />\n ) : (\n <SearchCardView\n counter={counter}\n onClose={onClose}\n searchState={searchState}\n onSearchChange={handlers.onSearchChange}\n onReplacementChange={handlers.onReplaceChange}\n onFindNext={handlers.onFindNext}\n onFindPrevious={handlers.onFindPrevious}\n onReplace={handlers.onReplace}\n onReplaceAll={handlers.onReplaceAll}\n onWholeWordChange={handlers.onWholeWordChange}\n onCaseSensitiveChange={handlers.onCaseSensitiveChange}\n />\n )}\n </Popup>\n );\n};\n\nSearchPopup.displayName = 'SearchPopup';\n\ninterface SearchPopupWithRefProps extends Omit<SearchPopupProps, 'anchor'> {\n anchor: Element | null;\n}\n\nexport function renderSearchPopup({anchor, ...props}: SearchPopupWithRefProps) {\n if (!anchor) return null;\n\n return <SearchPopup anchor={anchor} {...props} />;\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { DelayedTextInput } from '@gravity-ui/components';
2
+ import type { SearchCounter } from "../types.js";
3
+ type DelayedTextInputProps = React.ComponentProps<typeof DelayedTextInput>;
4
+ export type SearchTextInputProps = DelayedTextInputProps & {
5
+ counter?: SearchCounter;
6
+ onFindNext: () => void;
7
+ onFindPrevious: () => void;
8
+ };
9
+ export declare const SearchTextInput: React.FC<SearchTextInputProps>;
10
+ export {};
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback } from 'react';
3
+ import { DelayedTextInput } from '@gravity-ui/components';
4
+ import { ChevronDown, ChevronUp } from '@gravity-ui/icons';
5
+ import { Button, ButtonIcon, Icon, sp } from '@gravity-ui/uikit';
6
+ import { i18n } from "../../../i18n/search/index.js";
7
+ import { SearchQA } from "../qa.js";
8
+ import { SearchCounterText } from "./SearchCounter.js";
9
+ export const SearchTextInput = function SearchTextInput({ counter, onFindNext, onFindPrevious, ...inputProps }) {
10
+ const handleKeyDown = useCallback((event) => {
11
+ if (event.key === 'Enter') {
12
+ if (event.shiftKey)
13
+ onFindPrevious();
14
+ else
15
+ onFindNext();
16
+ }
17
+ }, [onFindNext, onFindPrevious]);
18
+ return (_jsx(DelayedTextInput, { size: "l", qa: SearchQA.FindInput, onKeyDown: handleKeyDown, endContent: Boolean(inputProps.value) && (_jsxs(_Fragment, { children: [counter && _jsx(SearchCounterText, { counter: counter, className: sp({ px: 1 }) }), _jsx(Button, { size: "m", view: "flat-secondary", onClick: onFindPrevious, "aria-label": i18n('action_prev'), qa: SearchQA.PrevBtn, children: _jsx(ButtonIcon, { children: _jsx(Icon, { data: ChevronUp }) }) }), _jsx(Button, { size: "m", view: "flat-secondary", onClick: onFindNext, className: sp({ ml: 1 }), "aria-label": i18n('action_next'), qa: SearchQA.NextBtn, children: _jsx(ButtonIcon, { children: _jsx(Icon, { data: ChevronDown }) }) })] })), ...inputProps }));
19
+ };
20
+ //# sourceMappingURL=SearchTextInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchTextInput.js","sourceRoot":"../../../../../src","sources":["modules/search/components/SearchTextInput.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,OAAO,CAAC;AAElC,OAAO,EAAC,gBAAgB,EAAC,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAC,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAC,IAAI,EAAC,sCAAwB;AAErC,OAAO,EAAC,QAAQ,EAAC,iBAAc;AAG/B,OAAO,EAAC,iBAAiB,EAAC,2BAAwB;AAUlD,MAAM,CAAC,MAAM,eAAe,GAAmC,SAAS,eAAe,CAAC,EACpF,OAAO,EACP,UAAU,EACV,cAAc,EACd,GAAG,UAAU,EAChB;IACG,MAAM,aAAa,GAAG,WAAW,CAC7B,CAAC,KAAK,EAAE,EAAE;QACN,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACxB,IAAI,KAAK,CAAC,QAAQ;gBAAE,cAAc,EAAE,CAAC;;gBAChC,UAAU,EAAE,CAAC;QACtB,CAAC;IACL,CAAC,EACD,CAAC,UAAU,EAAE,cAAc,CAAC,CAC/B,CAAC;IAEF,OAAO,CACH,KAAC,gBAAgB,IACb,IAAI,EAAC,GAAG,EACR,EAAE,EAAE,QAAQ,CAAC,SAAS,EACtB,SAAS,EAAE,aAAa,EACxB,UAAU,EACN,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CACzB,8BACK,OAAO,IAAI,KAAC,iBAAiB,IAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,EAAC,CAAC,GAAI,EAC3E,KAAC,MAAM,IACH,IAAI,EAAC,GAAG,EACR,IAAI,EAAC,gBAAgB,EACrB,OAAO,EAAE,cAAc,gBACX,IAAI,CAAC,aAAa,CAAC,EAC/B,EAAE,EAAE,QAAQ,CAAC,OAAO,YAEpB,KAAC,UAAU,cACP,KAAC,IAAI,IAAC,IAAI,EAAE,SAAS,GAAI,GAChB,GACR,EACT,KAAC,MAAM,IACH,IAAI,EAAC,GAAG,EACR,IAAI,EAAC,gBAAgB,EACrB,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,EAAC,CAAC,gBACV,IAAI,CAAC,aAAa,CAAC,EAC/B,EAAE,EAAE,QAAQ,CAAC,OAAO,YAEpB,KAAC,UAAU,cACP,KAAC,IAAI,IAAC,IAAI,EAAE,WAAW,GAAI,GAClB,GACR,IACV,CACN,KAED,UAAU,GAChB,CACL,CAAC;AACN,CAAC,CAAC","sourcesContent":["import {useCallback} from 'react';\n\nimport {DelayedTextInput} from '@gravity-ui/components';\nimport {ChevronDown, ChevronUp} from '@gravity-ui/icons';\nimport {Button, ButtonIcon, Icon, sp} from '@gravity-ui/uikit';\n\nimport {i18n} from 'src/i18n/search';\n\nimport {SearchQA} from '../qa';\nimport type {SearchCounter} from '../types';\n\nimport {SearchCounterText} from './SearchCounter';\n\ntype DelayedTextInputProps = React.ComponentProps<typeof DelayedTextInput>;\n\nexport type SearchTextInputProps = DelayedTextInputProps & {\n counter?: SearchCounter;\n onFindNext: () => void;\n onFindPrevious: () => void;\n};\n\nexport const SearchTextInput: React.FC<SearchTextInputProps> = function SearchTextInput({\n counter,\n onFindNext,\n onFindPrevious,\n ...inputProps\n}) {\n const handleKeyDown = useCallback<React.KeyboardEventHandler>(\n (event) => {\n if (event.key === 'Enter') {\n if (event.shiftKey) onFindPrevious();\n else onFindNext();\n }\n },\n [onFindNext, onFindPrevious],\n );\n\n return (\n <DelayedTextInput\n size=\"l\"\n qa={SearchQA.FindInput}\n onKeyDown={handleKeyDown}\n endContent={\n Boolean(inputProps.value) && (\n <>\n {counter && <SearchCounterText counter={counter} className={sp({px: 1})} />}\n <Button\n size=\"m\"\n view=\"flat-secondary\"\n onClick={onFindPrevious}\n aria-label={i18n('action_prev')}\n qa={SearchQA.PrevBtn}\n >\n <ButtonIcon>\n <Icon data={ChevronUp} />\n </ButtonIcon>\n </Button>\n <Button\n size=\"m\"\n view=\"flat-secondary\"\n onClick={onFindNext}\n className={sp({ml: 1})}\n aria-label={i18n('action_next')}\n qa={SearchQA.NextBtn}\n >\n <ButtonIcon>\n <Icon data={ChevronDown} />\n </ButtonIcon>\n </Button>\n </>\n )\n }\n {...inputProps}\n />\n );\n};\n"]}
@@ -0,0 +1,24 @@
1
+ import type { SearchState } from "../types.js";
2
+ export type UseSearchProps = {
3
+ state: SearchState;
4
+ onChange: (config: SearchState) => void;
5
+ onSearchPrev: (config: SearchState) => void;
6
+ onSearchNext: (config: SearchState) => void;
7
+ onReplaceNext: (config: SearchState) => void;
8
+ onReplaceAll: (config: SearchState) => void;
9
+ };
10
+ export declare function useSearch({ state, onChange, onSearchPrev, onSearchNext, onReplaceNext, onReplaceAll, }: UseSearchProps): {
11
+ isCompact: boolean;
12
+ searchState: SearchState;
13
+ handlers: {
14
+ onExpand: () => void;
15
+ onSearchChange: (value: string) => void;
16
+ onReplaceChange: (value: string) => void;
17
+ onWholeWordChange: (val: boolean) => void;
18
+ onCaseSensitiveChange: (val: boolean) => void;
19
+ onFindPrevious: () => void;
20
+ onFindNext: () => void;
21
+ onReplace: () => void;
22
+ onReplaceAll: () => void;
23
+ };
24
+ };
@@ -0,0 +1,44 @@
1
+ import { useBooleanState } from "../../../react-utils/index.js";
2
+ export function useSearch({ state, onChange, onSearchPrev, onSearchNext, onReplaceNext, onReplaceAll, }) {
3
+ const [isCompact, , showFullForm] = useBooleanState(true);
4
+ const handleSearchChange = (value) => {
5
+ onChange({ ...state, search: value });
6
+ };
7
+ const handleReplacementChange = (value) => {
8
+ onChange({ ...state, replace: value });
9
+ };
10
+ const handleFindPrevious = () => {
11
+ onSearchPrev(state);
12
+ };
13
+ const handleFindNext = () => {
14
+ onSearchNext(state);
15
+ };
16
+ const handleReplace = () => {
17
+ onReplaceNext(state);
18
+ };
19
+ const handleReplaceAll = () => {
20
+ onReplaceAll(state);
21
+ };
22
+ const handleCaseSensitiveChange = (val) => {
23
+ onChange({ ...state, caseSensitive: val });
24
+ };
25
+ const handleWholeWordChange = (val) => {
26
+ onChange({ ...state, wholeWord: val });
27
+ };
28
+ return {
29
+ isCompact,
30
+ searchState: state,
31
+ handlers: {
32
+ onExpand: showFullForm,
33
+ onSearchChange: handleSearchChange,
34
+ onReplaceChange: handleReplacementChange,
35
+ onWholeWordChange: handleWholeWordChange,
36
+ onCaseSensitiveChange: handleCaseSensitiveChange,
37
+ onFindPrevious: handleFindPrevious,
38
+ onFindNext: handleFindNext,
39
+ onReplace: handleReplace,
40
+ onReplaceAll: handleReplaceAll,
41
+ },
42
+ };
43
+ }
44
+ //# sourceMappingURL=use-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-search.js","sourceRoot":"../../../../../src","sources":["modules/search/hooks/use-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,sCAAwB;AAahD,MAAM,UAAU,SAAS,CAAC,EACtB,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,GACC;IACb,MAAM,CAAC,SAAS,EAAE,AAAD,EAAG,YAAY,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAE1D,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,EAAE;QACzC,QAAQ,CAAC,EAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,EAAC,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,uBAAuB,GAAG,CAAC,KAAa,EAAE,EAAE;QAC9C,QAAQ,CAAC,EAAC,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,YAAY,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,aAAa,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,yBAAyB,GAAG,CAAC,GAAY,EAAE,EAAE;QAC/C,QAAQ,CAAC,EAAC,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,EAAC,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAAC,GAAY,EAAE,EAAE;QAC3C,QAAQ,CAAC,EAAC,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,EAAC,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,OAAO;QACH,SAAS;QAET,WAAW,EAAE,KAAK;QAElB,QAAQ,EAAE;YACN,QAAQ,EAAE,YAAY;YAEtB,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,uBAAuB;YAExC,iBAAiB,EAAE,qBAAqB;YACxC,qBAAqB,EAAE,yBAAyB;YAEhD,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,cAAc;YAE1B,SAAS,EAAE,aAAa;YACxB,YAAY,EAAE,gBAAgB;SACjC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import {useBooleanState} from 'src/react-utils';\n\nimport type {SearchState} from '../types';\n\nexport type UseSearchProps = {\n state: SearchState;\n onChange: (config: SearchState) => void;\n onSearchPrev: (config: SearchState) => void;\n onSearchNext: (config: SearchState) => void;\n onReplaceNext: (config: SearchState) => void;\n onReplaceAll: (config: SearchState) => void;\n};\n\nexport function useSearch({\n state,\n onChange,\n onSearchPrev,\n onSearchNext,\n onReplaceNext,\n onReplaceAll,\n}: UseSearchProps) {\n const [isCompact, , showFullForm] = useBooleanState(true);\n\n const handleSearchChange = (value: string) => {\n onChange({...state, search: value});\n };\n\n const handleReplacementChange = (value: string) => {\n onChange({...state, replace: value});\n };\n\n const handleFindPrevious = () => {\n onSearchPrev(state);\n };\n\n const handleFindNext = () => {\n onSearchNext(state);\n };\n\n const handleReplace = () => {\n onReplaceNext(state);\n };\n\n const handleReplaceAll = () => {\n onReplaceAll(state);\n };\n\n const handleCaseSensitiveChange = (val: boolean) => {\n onChange({...state, caseSensitive: val});\n };\n\n const handleWholeWordChange = (val: boolean) => {\n onChange({...state, wholeWord: val});\n };\n\n return {\n isCompact,\n\n searchState: state,\n\n handlers: {\n onExpand: showFullForm,\n\n onSearchChange: handleSearchChange,\n onReplaceChange: handleReplacementChange,\n\n onWholeWordChange: handleWholeWordChange,\n onCaseSensitiveChange: handleCaseSensitiveChange,\n\n onFindPrevious: handleFindPrevious,\n onFindNext: handleFindNext,\n\n onReplace: handleReplace,\n onReplaceAll: handleReplaceAll,\n },\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export * from "./types.js";
2
+ export * from "./components/SearchPopup.js";
3
+ export { SearchQA } from "./qa.js";