@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.
- package/build/cjs/bundle/MarkdownEditorView.js +1 -1
- package/build/cjs/bundle/MarkdownEditorView.js.map +1 -1
- package/build/cjs/bundle/types.d.ts +5 -0
- package/build/cjs/bundle/types.js.map +1 -1
- package/build/cjs/bundle/useMarkdownEditor.js +1 -0
- package/build/cjs/bundle/useMarkdownEditor.js.map +1 -1
- package/build/cjs/bundle/wysiwyg-preset.d.ts +1 -0
- package/build/cjs/bundle/wysiwyg-preset.js +1 -0
- package/build/cjs/bundle/wysiwyg-preset.js.map +1 -1
- package/build/cjs/extensions/additional/Math/const.d.ts +1 -0
- package/build/cjs/extensions/additional/Math/const.js +11 -1
- package/build/cjs/extensions/additional/Math/const.js.map +1 -1
- package/build/cjs/extensions/additional/Math/index.d.ts +1 -0
- package/build/cjs/extensions/additional/Math/index.js +6 -1
- package/build/cjs/extensions/additional/Math/index.js.map +1 -1
- package/build/cjs/extensions/additional/Math/latex-paste-plugin.d.ts +2 -0
- package/build/cjs/extensions/additional/Math/latex-paste-plugin.js +54 -0
- package/build/cjs/extensions/additional/Math/latex-paste-plugin.js.map +1 -0
- package/build/cjs/extensions/additional/Math/utils.d.ts +7 -0
- package/build/cjs/extensions/additional/Math/utils.js +45 -0
- package/build/cjs/extensions/additional/Math/utils.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/Search.d.ts +4 -0
- package/build/cjs/extensions/behavior/Search/Search.js +10 -0
- package/build/cjs/extensions/behavior/Search/Search.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/SearchViewPlugin.d.ts +7 -0
- package/build/cjs/extensions/behavior/Search/SearchViewPlugin.js +157 -0
- package/build/cjs/extensions/behavior/Search/SearchViewPlugin.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/commands.d.ts +7 -0
- package/build/cjs/extensions/behavior/Search/commands.js +42 -0
- package/build/cjs/extensions/behavior/Search/commands.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/const.d.ts +7 -0
- package/build/cjs/extensions/behavior/Search/const.js +10 -0
- package/build/cjs/extensions/behavior/Search/const.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/index.d.ts +1 -0
- package/build/cjs/extensions/behavior/Search/index.js +5 -0
- package/build/cjs/extensions/behavior/Search/index.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/key-handler.d.ts +1 -0
- package/build/cjs/extensions/behavior/Search/key-handler.js +14 -0
- package/build/cjs/extensions/behavior/Search/key-handler.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/search-plugin.css +7 -0
- package/build/cjs/extensions/behavior/Search/types.d.ts +3 -0
- package/build/cjs/extensions/behavior/Search/types.js +3 -0
- package/build/cjs/extensions/behavior/Search/types.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/utils/connect-tracker.d.ts +7 -0
- package/build/cjs/extensions/behavior/Search/utils/connect-tracker.js +24 -0
- package/build/cjs/extensions/behavior/Search/utils/connect-tracker.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/utils/focus-manager.d.ts +6 -0
- package/build/cjs/extensions/behavior/Search/utils/focus-manager.js +18 -0
- package/build/cjs/extensions/behavior/Search/utils/focus-manager.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/utils/search-counter.d.ts +3 -0
- package/build/cjs/extensions/behavior/Search/utils/search-counter.js +18 -0
- package/build/cjs/extensions/behavior/Search/utils/search-counter.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/utils/wrap-command.d.ts +4 -0
- package/build/cjs/extensions/behavior/Search/utils/wrap-command.js +16 -0
- package/build/cjs/extensions/behavior/Search/utils/wrap-command.js.map +1 -0
- package/build/cjs/extensions/behavior/SelectionContext/index.d.ts +2 -0
- package/build/cjs/extensions/behavior/SelectionContext/index.js +20 -2
- package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/cjs/extensions/behavior/index.d.ts +2 -0
- package/build/cjs/extensions/behavior/index.js +3 -0
- package/build/cjs/extensions/behavior/index.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.css +8 -0
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.d.ts +3 -0
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +68 -7
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/TooltipView.css +4 -0
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.d.ts +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.js +53 -28
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockSpecs/index.d.ts +6 -0
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockSpecs/index.js +28 -2
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockSpecs/index.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/index.d.ts +2 -1
- package/build/cjs/extensions/markdown/CodeBlock/index.js +21 -6
- package/build/cjs/extensions/markdown/CodeBlock/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/schema.js +29 -17
- package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/schema.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.d.ts +2 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.d.ts +5 -2
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js +59 -2
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.d.ts +4 -2
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js +3 -4
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.d.ts +3 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js +36 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.d.ts +13 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +7 -10
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.d.ts +3 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js +39 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-ghost.js +9 -4
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-ghost.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/hooks/use-raf-throttle.d.ts +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/hooks/use-raf-throttle.js +25 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/hooks/use-raf-throttle.js.map +1 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js +4 -2
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js.map +1 -1
- package/build/cjs/i18n/codeblock/en.json +2 -1
- package/build/cjs/i18n/codeblock/index.d.ts +2 -1
- package/build/cjs/i18n/codeblock/ru.json +2 -1
- package/build/cjs/i18n/search/en.json +9 -2
- package/build/cjs/i18n/search/index.d.ts +9 -2
- package/build/cjs/i18n/search/ru.json +10 -3
- package/build/cjs/markup/codemirror/create.js +1 -1
- package/build/cjs/markup/codemirror/create.js.map +1 -1
- package/build/cjs/markup/codemirror/search-plugin/plugin.d.ts +7 -9
- package/build/cjs/markup/codemirror/search-plugin/plugin.js +44 -55
- package/build/cjs/markup/codemirror/search-plugin/plugin.js.map +1 -1
- package/build/cjs/markup/codemirror/search-plugin/theme.d.ts +1 -0
- package/build/cjs/markup/codemirror/search-plugin/theme.js +15 -0
- package/build/cjs/markup/codemirror/search-plugin/theme.js.map +1 -0
- package/build/cjs/modules/search/components/SearchCardView.css +7 -0
- package/build/cjs/modules/search/components/SearchCardView.d.ts +17 -0
- package/build/cjs/modules/search/components/SearchCardView.js +22 -0
- package/build/cjs/modules/search/components/SearchCardView.js.map +1 -0
- package/build/cjs/modules/search/components/SearchCompactView.css +5 -0
- package/build/cjs/modules/search/components/SearchCompactView.d.ts +13 -0
- package/build/cjs/modules/search/components/SearchCompactView.js +26 -0
- package/build/cjs/modules/search/components/SearchCompactView.js.map +1 -0
- package/build/cjs/modules/search/components/SearchCounter.d.ts +6 -0
- package/build/cjs/modules/search/components/SearchCounter.js +15 -0
- package/build/cjs/modules/search/components/SearchCounter.js.map +1 -0
- package/build/cjs/modules/search/components/SearchPopup.css +9 -0
- package/build/cjs/modules/search/components/SearchPopup.d.ts +15 -0
- package/build/cjs/modules/search/components/SearchPopup.js +29 -0
- package/build/cjs/modules/search/components/SearchPopup.js.map +1 -0
- package/build/cjs/modules/search/components/SearchTextInput.d.ts +10 -0
- package/build/cjs/modules/search/components/SearchTextInput.js +24 -0
- package/build/cjs/modules/search/components/SearchTextInput.js.map +1 -0
- package/build/cjs/modules/search/hooks/use-search.d.ts +24 -0
- package/build/cjs/modules/search/hooks/use-search.js +47 -0
- package/build/cjs/modules/search/hooks/use-search.js.map +1 -0
- package/build/cjs/modules/search/index.d.ts +3 -0
- package/build/cjs/modules/search/index.js +9 -0
- package/build/cjs/modules/search/index.js.map +1 -0
- package/build/cjs/modules/search/qa.d.ts +14 -0
- package/build/cjs/modules/search/qa.js +18 -0
- package/build/cjs/modules/search/qa.js.map +1 -0
- package/build/cjs/modules/search/types.d.ts +10 -0
- package/build/cjs/modules/search/types.js +3 -0
- package/build/cjs/modules/search/types.js.map +1 -0
- package/build/cjs/react-utils/useAutoFocus.d.ts +1 -1
- package/build/cjs/react-utils/useAutoFocus.js +8 -10
- package/build/cjs/react-utils/useAutoFocus.js.map +1 -1
- package/build/cjs/styles/styles.css +289 -0
- package/build/cjs/styles/yfm-themes.css +288 -0
- package/build/cjs/table-utils/table-desc.d.ts +1 -0
- package/build/cjs/table-utils/table-desc.js +3 -0
- package/build/cjs/table-utils/table-desc.js.map +1 -1
- package/build/cjs/version.js +1 -1
- package/build/cjs/version.js.map +1 -1
- package/build/cjs/view/hocs/withYfmHtml/index.d.ts +1 -0
- package/build/cjs/view/hocs/withYfmHtml/index.js +3 -0
- package/build/cjs/view/hocs/withYfmHtml/index.js.map +1 -1
- package/build/cjs/view/hocs/withYfmHtml/useYfmHtmlBlockRuntime.d.ts +5 -1
- package/build/cjs/view/hocs/withYfmHtml/useYfmHtmlBlockRuntime.js +8 -1
- package/build/cjs/view/hocs/withYfmHtml/useYfmHtmlBlockRuntime.js.map +1 -1
- package/build/esm/bundle/MarkdownEditorView.js +1 -1
- package/build/esm/bundle/MarkdownEditorView.js.map +1 -1
- package/build/esm/bundle/types.d.ts +5 -0
- package/build/esm/bundle/types.js.map +1 -1
- package/build/esm/bundle/useMarkdownEditor.js +1 -0
- package/build/esm/bundle/useMarkdownEditor.js.map +1 -1
- package/build/esm/bundle/wysiwyg-preset.d.ts +1 -0
- package/build/esm/bundle/wysiwyg-preset.js +1 -0
- package/build/esm/bundle/wysiwyg-preset.js.map +1 -1
- package/build/esm/extensions/additional/Math/const.d.ts +1 -0
- package/build/esm/extensions/additional/Math/const.js +10 -0
- package/build/esm/extensions/additional/Math/const.js.map +1 -1
- package/build/esm/extensions/additional/Math/index.d.ts +1 -0
- package/build/esm/extensions/additional/Math/index.js +3 -0
- package/build/esm/extensions/additional/Math/index.js.map +1 -1
- package/build/esm/extensions/additional/Math/latex-paste-plugin.d.ts +2 -0
- package/build/esm/extensions/additional/Math/latex-paste-plugin.js +50 -0
- package/build/esm/extensions/additional/Math/latex-paste-plugin.js.map +1 -0
- package/build/esm/extensions/additional/Math/utils.d.ts +7 -0
- package/build/esm/extensions/additional/Math/utils.js +39 -0
- package/build/esm/extensions/additional/Math/utils.js.map +1 -0
- package/build/esm/extensions/behavior/Search/Search.d.ts +4 -0
- package/build/esm/extensions/behavior/Search/Search.js +6 -0
- package/build/esm/extensions/behavior/Search/Search.js.map +1 -0
- package/build/esm/extensions/behavior/Search/SearchViewPlugin.d.ts +7 -0
- package/build/esm/extensions/behavior/Search/SearchViewPlugin.js +153 -0
- package/build/esm/extensions/behavior/Search/SearchViewPlugin.js.map +1 -0
- package/build/esm/extensions/behavior/Search/commands.d.ts +7 -0
- package/build/esm/extensions/behavior/Search/commands.js +37 -0
- package/build/esm/extensions/behavior/Search/commands.js.map +1 -0
- package/build/esm/extensions/behavior/Search/const.d.ts +7 -0
- package/build/esm/extensions/behavior/Search/const.js +7 -0
- package/build/esm/extensions/behavior/Search/const.js.map +1 -0
- package/build/esm/extensions/behavior/Search/index.d.ts +1 -0
- package/build/esm/extensions/behavior/Search/index.js +2 -0
- package/build/esm/extensions/behavior/Search/index.js.map +1 -0
- package/build/esm/extensions/behavior/Search/key-handler.d.ts +1 -0
- package/build/esm/extensions/behavior/Search/key-handler.js +11 -0
- package/build/esm/extensions/behavior/Search/key-handler.js.map +1 -0
- package/build/esm/extensions/behavior/Search/search-plugin.css +7 -0
- package/build/esm/extensions/behavior/Search/types.d.ts +3 -0
- package/build/esm/extensions/behavior/Search/types.js +2 -0
- package/build/esm/extensions/behavior/Search/types.js.map +1 -0
- package/build/esm/extensions/behavior/Search/utils/connect-tracker.d.ts +7 -0
- package/build/esm/extensions/behavior/Search/utils/connect-tracker.js +21 -0
- package/build/esm/extensions/behavior/Search/utils/connect-tracker.js.map +1 -0
- package/build/esm/extensions/behavior/Search/utils/focus-manager.d.ts +6 -0
- package/build/esm/extensions/behavior/Search/utils/focus-manager.js +14 -0
- package/build/esm/extensions/behavior/Search/utils/focus-manager.js.map +1 -0
- package/build/esm/extensions/behavior/Search/utils/search-counter.d.ts +3 -0
- package/build/esm/extensions/behavior/Search/utils/search-counter.js +15 -0
- package/build/esm/extensions/behavior/Search/utils/search-counter.js.map +1 -0
- package/build/esm/extensions/behavior/Search/utils/wrap-command.d.ts +4 -0
- package/build/esm/extensions/behavior/Search/utils/wrap-command.js +13 -0
- package/build/esm/extensions/behavior/Search/utils/wrap-command.js.map +1 -0
- package/build/esm/extensions/behavior/SelectionContext/index.d.ts +2 -0
- package/build/esm/extensions/behavior/SelectionContext/index.js +19 -2
- package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/esm/extensions/behavior/index.d.ts +2 -0
- package/build/esm/extensions/behavior/index.js +3 -0
- package/build/esm/extensions/behavior/index.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.css +8 -0
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.d.ts +3 -0
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +69 -8
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/TooltipView.css +4 -0
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.d.ts +1 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.js +54 -29
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockSpecs/index.d.ts +6 -0
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockSpecs/index.js +28 -2
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockSpecs/index.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/index.d.ts +2 -1
- package/build/esm/extensions/markdown/CodeBlock/index.js +21 -6
- package/build/esm/extensions/markdown/CodeBlock/index.js.map +1 -1
- package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/schema.js +29 -17
- package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/schema.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.d.ts +2 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.d.ts +5 -2
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js +59 -2
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.d.ts +4 -2
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js +4 -4
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.d.ts +3 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js +38 -3
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.d.ts +13 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +8 -10
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.d.ts +3 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js +38 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-ghost.js +9 -4
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-ghost.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js +2 -2
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/hooks/use-raf-throttle.d.ts +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/hooks/use-raf-throttle.js +22 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/hooks/use-raf-throttle.js.map +1 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js +4 -2
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js.map +1 -1
- package/build/esm/i18n/codeblock/en.json +2 -1
- package/build/esm/i18n/codeblock/index.d.ts +2 -1
- package/build/esm/i18n/codeblock/ru.json +2 -1
- package/build/esm/i18n/search/en.json +9 -2
- package/build/esm/i18n/search/index.d.ts +9 -2
- package/build/esm/i18n/search/ru.json +10 -3
- package/build/esm/markup/codemirror/create.js +1 -1
- package/build/esm/markup/codemirror/create.js.map +1 -1
- package/build/esm/markup/codemirror/search-plugin/plugin.d.ts +7 -9
- package/build/esm/markup/codemirror/search-plugin/plugin.js +44 -55
- package/build/esm/markup/codemirror/search-plugin/plugin.js.map +1 -1
- package/build/esm/markup/codemirror/search-plugin/theme.d.ts +1 -0
- package/build/esm/markup/codemirror/search-plugin/theme.js +12 -0
- package/build/esm/markup/codemirror/search-plugin/theme.js.map +1 -0
- package/build/esm/modules/search/components/SearchCardView.css +7 -0
- package/build/esm/modules/search/components/SearchCardView.d.ts +17 -0
- package/build/esm/modules/search/components/SearchCardView.js +18 -0
- package/build/esm/modules/search/components/SearchCardView.js.map +1 -0
- package/build/esm/modules/search/components/SearchCompactView.css +5 -0
- package/build/esm/modules/search/components/SearchCompactView.d.ts +13 -0
- package/build/esm/modules/search/components/SearchCompactView.js +22 -0
- package/build/esm/modules/search/components/SearchCompactView.js.map +1 -0
- package/build/esm/modules/search/components/SearchCounter.d.ts +6 -0
- package/build/esm/modules/search/components/SearchCounter.js +11 -0
- package/build/esm/modules/search/components/SearchCounter.js.map +1 -0
- package/build/esm/modules/search/components/SearchPopup.css +9 -0
- package/build/esm/modules/search/components/SearchPopup.d.ts +15 -0
- package/build/esm/modules/search/components/SearchPopup.js +24 -0
- package/build/esm/modules/search/components/SearchPopup.js.map +1 -0
- package/build/esm/modules/search/components/SearchTextInput.d.ts +10 -0
- package/build/esm/modules/search/components/SearchTextInput.js +20 -0
- package/build/esm/modules/search/components/SearchTextInput.js.map +1 -0
- package/build/esm/modules/search/hooks/use-search.d.ts +24 -0
- package/build/esm/modules/search/hooks/use-search.js +44 -0
- package/build/esm/modules/search/hooks/use-search.js.map +1 -0
- package/build/esm/modules/search/index.d.ts +3 -0
- package/build/esm/modules/search/index.js +4 -0
- package/build/esm/modules/search/index.js.map +1 -0
- package/build/esm/modules/search/qa.d.ts +14 -0
- package/build/esm/modules/search/qa.js +15 -0
- package/build/esm/modules/search/qa.js.map +1 -0
- package/build/esm/modules/search/types.d.ts +10 -0
- package/build/esm/modules/search/types.js +2 -0
- package/build/esm/modules/search/types.js.map +1 -0
- package/build/esm/react-utils/useAutoFocus.d.ts +1 -1
- package/build/esm/react-utils/useAutoFocus.js +7 -8
- package/build/esm/react-utils/useAutoFocus.js.map +1 -1
- package/build/esm/styles/styles.css +289 -0
- package/build/esm/styles/yfm-themes.css +288 -0
- package/build/esm/table-utils/table-desc.d.ts +1 -0
- package/build/esm/table-utils/table-desc.js +3 -0
- package/build/esm/table-utils/table-desc.js.map +1 -1
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/build/esm/view/hocs/withYfmHtml/index.d.ts +1 -0
- package/build/esm/view/hocs/withYfmHtml/index.js +1 -0
- package/build/esm/view/hocs/withYfmHtml/index.js.map +1 -1
- package/build/esm/view/hocs/withYfmHtml/useYfmHtmlBlockRuntime.d.ts +5 -1
- package/build/esm/view/hocs/withYfmHtml/useYfmHtmlBlockRuntime.js +7 -1
- package/build/esm/view/hocs/withYfmHtml/useYfmHtmlBlockRuntime.js.map +1 -1
- package/build/styles.css +617 -10
- package/package.json +11 -9
- package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.d.ts +0 -3
- package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.js +0 -9
- package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.js.map +0 -1
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.css +0 -10
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.d.ts +0 -27
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.js +0 -83
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.js.map +0 -1
- package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.d.ts +0 -3
- package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.js +0 -4
- package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.js.map +0 -1
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.css +0 -10
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.d.ts +0 -27
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.js +0 -77
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.js.map +0 -1
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
export * from "./MathSpecs/const.js";
|
|
2
2
|
export { mathBType, mathIType } from "./MathSpecs/index.js";
|
|
3
|
+
export const LATEX_MODES = new Set([
|
|
4
|
+
'tex',
|
|
5
|
+
'latex',
|
|
6
|
+
'bibtex',
|
|
7
|
+
'doctex',
|
|
8
|
+
'latex-expl3',
|
|
9
|
+
'pweave',
|
|
10
|
+
'jlweave',
|
|
11
|
+
'rsweave',
|
|
12
|
+
]);
|
|
3
13
|
//# sourceMappingURL=const.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.js","sourceRoot":"../../../../../src","sources":["extensions/additional/Math/const.ts"],"names":[],"mappings":"AAAA,qCAAkC;AAClC,OAAO,EAAC,SAAS,EAAE,SAAS,EAAC,6BAAoB","sourcesContent":["export * from './MathSpecs/const';\nexport {mathBType, mathIType} from './MathSpecs';\n"]}
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"../../../../../src","sources":["extensions/additional/Math/const.ts"],"names":[],"mappings":"AAAA,qCAAkC;AAClC,OAAO,EAAC,SAAS,EAAE,SAAS,EAAC,6BAAoB;AAEjD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC/B,KAAK;IACL,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,aAAa;IACb,QAAQ;IACR,SAAS;IACT,SAAS;CACZ,CAAC,CAAC","sourcesContent":["export * from './MathSpecs/const';\nexport {mathBType, mathIType} from './MathSpecs';\n\nexport const LATEX_MODES = new Set([\n 'tex',\n 'latex',\n 'bibtex',\n 'doctex',\n 'latex-expl3',\n 'pweave',\n 'jlweave',\n 'rsweave',\n]);\n"]}
|
|
@@ -3,6 +3,7 @@ import { type MathNodeViewOptions } from "./view-and-edit.js";
|
|
|
3
3
|
import "./index.css";
|
|
4
4
|
export { MathNode, mathBType, mathIType } from "./MathSpecs/index.js";
|
|
5
5
|
export { MathBlockNodeView, MathInlineNodeView } from "./view-and-edit.js";
|
|
6
|
+
export { isLatexMode, parseLatexFormulas } from "./utils.js";
|
|
6
7
|
declare const mathIAction = "addMathInline";
|
|
7
8
|
declare const mathBAction = "toMathBlock";
|
|
8
9
|
export type MathOptions = Pick<MathNodeViewOptions, 'loadRuntimeScript' | 'sanitize' | 'katexOptions'>;
|
|
@@ -7,10 +7,12 @@ import { isTextSelection } from "../../../utils/selection.js";
|
|
|
7
7
|
import { MathSpecs } from "./MathSpecs/index.js";
|
|
8
8
|
import { ignoreIfCursorInsideMathInline, moveCursorLeftOfMathInline, removeEmptyMathInlineIfCursorIsAtBeginning, } from "./commands.js";
|
|
9
9
|
import { mathBType, mathIType } from "./const.js";
|
|
10
|
+
import { latexPastePlugin } from "./latex-paste-plugin.js";
|
|
10
11
|
import { mathViewAndEditPlugin } from "./view-and-edit.js";
|
|
11
12
|
import "./index.css";
|
|
12
13
|
export { MathNode, mathBType, mathIType } from "./MathSpecs/index.js";
|
|
13
14
|
export { MathBlockNodeView, MathInlineNodeView } from "./view-and-edit.js";
|
|
15
|
+
export { isLatexMode, parseLatexFormulas } from "./utils.js";
|
|
14
16
|
const mathIAction = 'addMathInline';
|
|
15
17
|
const mathBAction = 'toMathBlock';
|
|
16
18
|
const mathITemplate = 'f(x)=';
|
|
@@ -21,6 +23,7 @@ export const Math = (builder, opts) => {
|
|
|
21
23
|
Backspace: chainCommands(removeEmptyMathInlineIfCursorIsAtBeginning, moveCursorLeftOfMathInline),
|
|
22
24
|
}));
|
|
23
25
|
builder
|
|
26
|
+
.addPlugin(latexPastePlugin, builder.Priority.VeryHigh)
|
|
24
27
|
.addPlugin(() => mathViewAndEditPlugin({
|
|
25
28
|
...opts,
|
|
26
29
|
reactRenderer: builder.context.get('reactrenderer'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/additional/Math/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,YAAY,EAAC,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAe,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAC9D,oCAAoC;AACpC,OAAO,EAAC,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAC,mBAAmB,EAAE,sBAAsB,EAAC,qCAAkC;AACtF,OAAO,EAAC,eAAe,EAAC,oCAAiC;AAEzD,OAAO,EAAC,SAAS,EAAC,6BAAoB;AACtC,OAAO,EACH,8BAA8B,EAC9B,0BAA0B,EAC1B,0CAA0C,GAC7C,sBAAmB;AACpB,OAAO,EAAC,SAAS,EAAE,SAAS,EAAC,mBAAgB;AAC7C,OAAO,EAA2B,qBAAqB,EAAC,2BAAwB;AAEhF,qBAAsB;AAEtB,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAC,6BAAoB;AAC3D,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,2BAAwB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/additional/Math/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {chainCommands, setBlockType} from 'prosemirror-commands';\nimport {type Command, TextSelection} from 'prosemirror-state';\n// @ts-ignore // TODO: fix cjs build\nimport {hasParentNodeOfType} from 'prosemirror-utils';\n\nimport type {Action, ExtensionAuto} from '../../../core';\nimport {inlineNodeInputRule, textblockTypeInputRule} from '../../../utils/inputrules';\nimport {isTextSelection} from '../../../utils/selection';\n\nimport {MathSpecs} from './MathSpecs';\nimport {\n ignoreIfCursorInsideMathInline,\n moveCursorLeftOfMathInline,\n removeEmptyMathInlineIfCursorIsAtBeginning,\n} from './commands';\nimport {mathBType, mathIType} from './const';\nimport {latexPastePlugin} from './latex-paste-plugin';\nimport {type MathNodeViewOptions, mathViewAndEditPlugin} from './view-and-edit';\n\nimport './index.scss';\n\nexport {MathNode, mathBType, mathIType} from './MathSpecs';\nexport {MathBlockNodeView, MathInlineNodeView} from './view-and-edit';\nexport {isLatexMode, parseLatexFormulas} from './utils';\n\nconst mathIAction = 'addMathInline';\nconst mathBAction = 'toMathBlock';\n\nconst mathITemplate = 'f(x)=';\n\n// !!! YfmPreset/YfmSpecsPreset does not use or re-export the Math extension\n\nexport type MathOptions = Pick<\n MathNodeViewOptions,\n 'loadRuntimeScript' | 'sanitize' | 'katexOptions'\n>;\n\nexport const Math: ExtensionAuto<MathOptions> = (builder, opts) => {\n builder.use(MathSpecs);\n\n builder.addKeymap(() => ({\n Enter: ignoreIfCursorInsideMathInline, // ignore breaks in math inline\n Backspace: chainCommands(\n removeEmptyMathInlineIfCursorIsAtBeginning,\n moveCursorLeftOfMathInline,\n ),\n }));\n\n builder\n .addPlugin(latexPastePlugin, builder.Priority.VeryHigh)\n .addPlugin(() =>\n mathViewAndEditPlugin({\n ...opts,\n reactRenderer: builder.context.get('reactrenderer')!,\n }),\n )\n .addInputRules((deps) => ({\n rules: [\n textblockTypeInputRule(/^\\$\\$\\s$/, mathBType(deps.schema)),\n inlineNodeInputRule(/\\$[^$\\s]+\\$$/, (match) =>\n mathIType(deps.schema).create(null, deps.schema.text(match.replace(/\\$/g, ''))),\n ),\n ],\n }));\n builder\n .addAction(mathIAction, (deps) => {\n const type = mathIType(deps.schema);\n const cmd: Command = (state, dispatch) => {\n const {selection} = state;\n if (isTextSelection(selection) && selection.$from.sameParent(selection.$to)) {\n if (dispatch) {\n const fragment = selection.content().content;\n const selectedText =\n fragment.textBetween(0, fragment.size) || mathITemplate;\n const tr = state.tr;\n selection.replaceWith(\n tr,\n type.create(null, deps.schema.text(selectedText)),\n );\n tr.setSelection(\n TextSelection.create(tr.doc, selection.from + selectedText.length + 1),\n );\n dispatch(tr);\n }\n return true;\n }\n return false;\n };\n return {\n isActive: (state) => hasParentNodeOfType(type)(state.selection),\n isEnable: cmd,\n run: cmd,\n };\n })\n .addAction(mathBAction, (deps) => {\n const type = mathBType(deps.schema);\n const cmd = setBlockType(type);\n return {\n isActive: (state) => hasParentNodeOfType(type)(state.selection),\n isEnable: cmd,\n run: cmd,\n };\n });\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Actions {\n [mathIAction]: Action;\n [mathBAction]: Action;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Plugin } from 'prosemirror-state';
|
|
2
|
+
import { getLoggerFromState } from "../../../core/index.js";
|
|
3
|
+
import { Fragment } from "../../../pm/model.js";
|
|
4
|
+
import { MathNode } from "./const.js";
|
|
5
|
+
import { getLatexData, parseLatexFormulas } from "./utils.js";
|
|
6
|
+
export const latexPastePlugin = () => new Plugin({
|
|
7
|
+
props: {
|
|
8
|
+
handleDOMEvents: {
|
|
9
|
+
paste(view, e) {
|
|
10
|
+
const event = e;
|
|
11
|
+
if (!event.clipboardData || view.state.selection.$from.parent.type.spec.code) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
const latexData = getLatexData(event.clipboardData);
|
|
15
|
+
if (!latexData)
|
|
16
|
+
return false;
|
|
17
|
+
getLoggerFromState(view.state).event({
|
|
18
|
+
domEvent: 'paste',
|
|
19
|
+
event: 'paste-latex-from-code-editor',
|
|
20
|
+
editor: latexData.editor,
|
|
21
|
+
editorMode: latexData.mode,
|
|
22
|
+
empty: !latexData.value,
|
|
23
|
+
dataTypes: event.clipboardData.types,
|
|
24
|
+
});
|
|
25
|
+
const { tr, schema } = view.state;
|
|
26
|
+
const mathBlockType = schema.nodes[MathNode.Block];
|
|
27
|
+
if (!mathBlockType)
|
|
28
|
+
return false;
|
|
29
|
+
if (latexData.value) {
|
|
30
|
+
const formulas = parseLatexFormulas(latexData.value);
|
|
31
|
+
if (formulas.length > 0) {
|
|
32
|
+
const nodes = formulas.map((formula) => mathBlockType.create(null, schema.text(formula)));
|
|
33
|
+
const fragment = Fragment.from(nodes);
|
|
34
|
+
tr.replaceWith(tr.selection.from, tr.selection.to, fragment);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
tr.replaceWith(tr.selection.from, tr.selection.to, Fragment.empty);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
tr.replaceWith(tr.selection.from, tr.selection.to, Fragment.empty);
|
|
42
|
+
}
|
|
43
|
+
view.dispatch(tr.scrollIntoView());
|
|
44
|
+
e.preventDefault();
|
|
45
|
+
return true;
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=latex-paste-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"latex-paste-plugin.js","sourceRoot":"../../../../../src","sources":["extensions/additional/Math/latex-paste-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAC,kBAAkB,EAAC,+BAAc;AACzC,OAAO,EAAC,QAAQ,EAAC,6BAAkB;AAEnC,OAAO,EAAC,QAAQ,EAAC,mBAAgB;AACjC,OAAO,EAAC,YAAY,EAAE,kBAAkB,EAAC,mBAAgB;AAEzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CACjC,IAAI,MAAM,CAAC;IACP,KAAK,EAAE;QACH,eAAe,EAAE;YACb,KAAK,CAAC,IAAI,EAAE,CAAQ;gBAChB,MAAM,KAAK,GAAG,CAAmB,CAAC;gBAClC,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC3E,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAED,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACpD,IAAI,CAAC,SAAS;oBAAE,OAAO,KAAK,CAAC;gBAE7B,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;oBACjC,QAAQ,EAAE,OAAO;oBACjB,KAAK,EAAE,8BAA8B;oBACrC,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,UAAU,EAAE,SAAS,CAAC,IAAI;oBAC1B,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK;oBACvB,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK;iBACvC,CAAC,CAAC;gBAEH,MAAM,EAAC,EAAE,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gBAChC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAEnD,IAAI,CAAC,aAAa;oBAAE,OAAO,KAAK,CAAC;gBAEjC,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBAClB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAErD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CACnD,CAAC;wBACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACtC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;oBACjE,CAAC;yBAAM,CAAC;wBACJ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACvE,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACvE,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;gBACnC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YAChB,CAAC;SACJ;KACJ;CACJ,CAAC,CAAC","sourcesContent":["import {Plugin} from 'prosemirror-state';\n\nimport {getLoggerFromState} from '#core';\nimport {Fragment} from '#pm/model';\n\nimport {MathNode} from './const';\nimport {getLatexData, parseLatexFormulas} from './utils';\n\nexport const latexPastePlugin = () =>\n new Plugin({\n props: {\n handleDOMEvents: {\n paste(view, e: Event) {\n const event = e as ClipboardEvent;\n if (!event.clipboardData || view.state.selection.$from.parent.type.spec.code) {\n return false;\n }\n\n const latexData = getLatexData(event.clipboardData);\n if (!latexData) return false;\n\n getLoggerFromState(view.state).event({\n domEvent: 'paste',\n event: 'paste-latex-from-code-editor',\n editor: latexData.editor,\n editorMode: latexData.mode,\n empty: !latexData.value,\n dataTypes: event.clipboardData.types,\n });\n\n const {tr, schema} = view.state;\n const mathBlockType = schema.nodes[MathNode.Block];\n\n if (!mathBlockType) return false;\n\n if (latexData.value) {\n const formulas = parseLatexFormulas(latexData.value);\n\n if (formulas.length > 0) {\n const nodes = formulas.map((formula) =>\n mathBlockType.create(null, schema.text(formula)),\n );\n const fragment = Fragment.from(nodes);\n tr.replaceWith(tr.selection.from, tr.selection.to, fragment);\n } else {\n tr.replaceWith(tr.selection.from, tr.selection.to, Fragment.empty);\n }\n } else {\n tr.replaceWith(tr.selection.from, tr.selection.to, Fragment.empty);\n }\n\n view.dispatch(tr.scrollIntoView());\n e.preventDefault();\n return true;\n },\n },\n },\n });\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function isLatexMode(mode: string | undefined): boolean;
|
|
2
|
+
export declare function parseLatexFormulas(content: string): string[];
|
|
3
|
+
export declare function getLatexData(data: DataTransfer): null | {
|
|
4
|
+
editor: string;
|
|
5
|
+
mode: string;
|
|
6
|
+
value: string;
|
|
7
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import dd from 'ts-dedent';
|
|
2
|
+
import { DataTransferType, isVSCode, tryParseVSCodeData } from "../../../utils/clipboard.js";
|
|
3
|
+
import { LATEX_MODES } from "./const.js";
|
|
4
|
+
export function isLatexMode(mode) {
|
|
5
|
+
if (!mode)
|
|
6
|
+
return false;
|
|
7
|
+
return LATEX_MODES.has(mode.toLowerCase());
|
|
8
|
+
}
|
|
9
|
+
export function parseLatexFormulas(content) {
|
|
10
|
+
const blocks = content.split(/\n\s*\n/);
|
|
11
|
+
const formulas = [];
|
|
12
|
+
for (const block of blocks) {
|
|
13
|
+
const lines = block
|
|
14
|
+
.split('\n')
|
|
15
|
+
.map((line) => line.trim())
|
|
16
|
+
.filter((line) => line.length > 0);
|
|
17
|
+
if (lines.length > 0) {
|
|
18
|
+
formulas.push(lines.join('\n'));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return formulas;
|
|
22
|
+
}
|
|
23
|
+
export function getLatexData(data) {
|
|
24
|
+
if (!data.getData(DataTransferType.Text))
|
|
25
|
+
return null;
|
|
26
|
+
if (isVSCode(data)) {
|
|
27
|
+
const vsCodeData = tryParseVSCodeData(data);
|
|
28
|
+
const mode = vsCodeData?.mode;
|
|
29
|
+
if (mode && isLatexMode(mode)) {
|
|
30
|
+
return {
|
|
31
|
+
editor: 'vscode',
|
|
32
|
+
mode,
|
|
33
|
+
value: dd(data.getData(DataTransferType.Text)),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"../../../../../src","sources":["extensions/additional/Math/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,WAAW,CAAC;AAE3B,OAAO,EAAC,gBAAgB,EAAE,QAAQ,EAAE,kBAAkB,EAAC,oCAA4B;AAEnF,OAAO,EAAC,WAAW,EAAC,mBAAgB;AAEpC,MAAM,UAAU,WAAW,CAAC,IAAwB;IAChD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,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,MAAM,UAAU,YAAY,CACxB,IAAkB;IAElB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtD,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,kBAAkB,CAAC,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,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,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 @@
|
|
|
1
|
+
{"version":3,"file":"Search.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/Search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAI1C,OAAO,EAA8B,gBAAgB,EAAC,8BAA2B;AAIjF,MAAM,CAAC,MAAM,MAAM,GAAiC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAClE,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC","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,153 @@
|
|
|
1
|
+
import { SearchQuery, getSearchState, setSearchState } from 'prosemirror-search';
|
|
2
|
+
import { Plugin, TextSelection } from "../../../pm/state.js";
|
|
3
|
+
import { findParentNodeClosestToPos } from "../../../pm/utils.js";
|
|
4
|
+
import { renderSearchPopup } from "../../../modules/search/index.js";
|
|
5
|
+
import { getReactRendererFromState } from "../ReactRenderer/index.js";
|
|
6
|
+
import { closeSearch, findNext, findPrev, replaceAll, replaceNext } from "./commands.js";
|
|
7
|
+
import { pluginKey } from "./const.js";
|
|
8
|
+
import { searchKeyHandler } from "./key-handler.js";
|
|
9
|
+
import { startTracking } from "./utils/connect-tracker.js";
|
|
10
|
+
import { FocusManager } from "./utils/focus-manager.js";
|
|
11
|
+
import { getCounter } from "./utils/search-counter.js";
|
|
12
|
+
import "./search-plugin.css";
|
|
13
|
+
export const searchViewPlugin = (params) => {
|
|
14
|
+
return new Plugin({
|
|
15
|
+
key: pluginKey,
|
|
16
|
+
props: {
|
|
17
|
+
handleKeyDown: searchKeyHandler,
|
|
18
|
+
},
|
|
19
|
+
state: {
|
|
20
|
+
init: () => ({ open: false }),
|
|
21
|
+
apply(tr, value, _oldState, _newState) {
|
|
22
|
+
const newValue = tr.getMeta(pluginKey);
|
|
23
|
+
if (typeof newValue === 'object')
|
|
24
|
+
return newValue;
|
|
25
|
+
return value;
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
view(view) {
|
|
29
|
+
return new SeachPluginView(view, params);
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
class SeachPluginView {
|
|
34
|
+
_view;
|
|
35
|
+
_renderer;
|
|
36
|
+
_focusManager;
|
|
37
|
+
_viewDomTrackerDispose;
|
|
38
|
+
_counter;
|
|
39
|
+
_isDomConnected;
|
|
40
|
+
_viewState;
|
|
41
|
+
_searchState;
|
|
42
|
+
constructor(view, params) {
|
|
43
|
+
this._view = view;
|
|
44
|
+
this._viewState = pluginKey.getState(view.state);
|
|
45
|
+
this._searchState = getSearchState(view.state)?.query;
|
|
46
|
+
this._counter = getCounter(view.state);
|
|
47
|
+
this._isDomConnected = view.dom.ownerDocument.contains(view.dom);
|
|
48
|
+
this._renderer = this._createRenderer(params);
|
|
49
|
+
this._focusManager = new FocusManager(view.dom.ownerDocument);
|
|
50
|
+
// uses MutationObserver to detect when view.dom is disconnected from the DOM tree
|
|
51
|
+
// TODO: replace with eventBus (subscribe to change-editor-mode event) to track when to hide the search bar
|
|
52
|
+
// see https://github.com/gravity-ui/markdown-editor/issues/884
|
|
53
|
+
this._viewDomTrackerDispose = startTracking(view.dom, {
|
|
54
|
+
onConnect: this._onEditorViewDomConnected,
|
|
55
|
+
onDisconnect: this._onEditorViewDomDisconnected,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
update() {
|
|
59
|
+
const newCounter = getCounter(this._view.state);
|
|
60
|
+
const newViewState = pluginKey.getState(this._view.state);
|
|
61
|
+
const newSearchState = getSearchState(this._view.state)?.query;
|
|
62
|
+
if (newViewState !== this._viewState ||
|
|
63
|
+
newSearchState !== this._searchState ||
|
|
64
|
+
newCounter.total !== this._counter.total ||
|
|
65
|
+
newCounter.current !== this._counter.current) {
|
|
66
|
+
this._counter = newCounter;
|
|
67
|
+
this._viewState = newViewState;
|
|
68
|
+
this._searchState = newSearchState;
|
|
69
|
+
this._renderer.rerender();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
destroy() {
|
|
73
|
+
this._renderer.remove();
|
|
74
|
+
this._viewDomTrackerDispose();
|
|
75
|
+
}
|
|
76
|
+
_onEditorViewDomConnected = () => {
|
|
77
|
+
this._isDomConnected = true;
|
|
78
|
+
this._renderer.rerender();
|
|
79
|
+
};
|
|
80
|
+
_onEditorViewDomDisconnected = () => {
|
|
81
|
+
this._isDomConnected = false;
|
|
82
|
+
this._onClose();
|
|
83
|
+
};
|
|
84
|
+
_createRenderer(params) {
|
|
85
|
+
return getReactRendererFromState(this._view.state).createItem('search-view', () => {
|
|
86
|
+
const { _viewState: viewState, _searchState: searchState, _isDomConnected: domConnected, } = this;
|
|
87
|
+
if (!domConnected || !viewState?.open || !searchState)
|
|
88
|
+
return null;
|
|
89
|
+
const anchor = this._view.dom.ownerDocument.querySelector(params.anchorSelector);
|
|
90
|
+
return renderSearchPopup({
|
|
91
|
+
anchor,
|
|
92
|
+
open: viewState.open,
|
|
93
|
+
counter: this._counter,
|
|
94
|
+
state: searchState,
|
|
95
|
+
onClose: this._onClose,
|
|
96
|
+
onChange: this._onChange,
|
|
97
|
+
onSearchPrev: this._onSearchPrev,
|
|
98
|
+
onSearchNext: this._onSearchNext,
|
|
99
|
+
onReplaceNext: this._onReplaceNext,
|
|
100
|
+
onReplaceAll: this._onReplaceAll,
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
_onChange = (config) => {
|
|
105
|
+
const { state, dispatch } = this._view;
|
|
106
|
+
const query = new SearchQuery({
|
|
107
|
+
search: config.search,
|
|
108
|
+
replace: config.replace,
|
|
109
|
+
caseSensitive: config.caseSensitive,
|
|
110
|
+
wholeWord: config.wholeWord,
|
|
111
|
+
});
|
|
112
|
+
const tr = setSearchState(state.tr, query);
|
|
113
|
+
const { $from, $to } = tr.selection;
|
|
114
|
+
const parent = findParentNodeClosestToPos($from, (node) => node.type.isTextblock);
|
|
115
|
+
let result = null;
|
|
116
|
+
// find match in [sel.$from, parent.$end]
|
|
117
|
+
if (parent)
|
|
118
|
+
result = query.findNext(state, $from.pos, parent.pos + parent.node.nodeSize);
|
|
119
|
+
// find match in [parent.$start or sel.$from, doc.$end]
|
|
120
|
+
if (!result)
|
|
121
|
+
result = query.findNext(state, parent?.pos || $from.pos);
|
|
122
|
+
// find match in [doc.$start, parent.$start or sel.$to]
|
|
123
|
+
if (!result)
|
|
124
|
+
result = query.findPrev(state, parent?.pos || $to.pos);
|
|
125
|
+
// update text selection
|
|
126
|
+
if (result)
|
|
127
|
+
tr.setSelection(TextSelection.create(tr.doc, result.from, result.to));
|
|
128
|
+
dispatch(tr);
|
|
129
|
+
};
|
|
130
|
+
_onClose = () => {
|
|
131
|
+
closeSearch(this._view.state, this._view.dispatch);
|
|
132
|
+
this._view.focus();
|
|
133
|
+
};
|
|
134
|
+
_onSearchPrev = () => {
|
|
135
|
+
this._preserveFocus(findPrev);
|
|
136
|
+
};
|
|
137
|
+
_onSearchNext = () => {
|
|
138
|
+
this._preserveFocus(findNext);
|
|
139
|
+
};
|
|
140
|
+
_onReplaceNext = () => {
|
|
141
|
+
this._preserveFocus(replaceNext);
|
|
142
|
+
};
|
|
143
|
+
_onReplaceAll = () => {
|
|
144
|
+
this._preserveFocus(replaceAll);
|
|
145
|
+
};
|
|
146
|
+
_preserveFocus(command) {
|
|
147
|
+
this._focusManager.storeFocus();
|
|
148
|
+
this._view.focus();
|
|
149
|
+
command(this._view.state, this._view.dispatch, this._view);
|
|
150
|
+
this._focusManager.restoreFocus({ preventScroll: true });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# 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,37 @@
|
|
|
1
|
+
import { SearchQuery, findNext as findNextSearch, findPrev as findPrevSearch, getSearchState, replaceAll as replaceAllSearch, replaceNext as replaceNextSearch, setSearchState, } from 'prosemirror-search';
|
|
2
|
+
import { hideSelectionMenu } from "../SelectionContext/index.js";
|
|
3
|
+
import { pluginKey } from "./const.js";
|
|
4
|
+
import { wrapCommand } from "./utils/wrap-command.js";
|
|
5
|
+
export const findNext = wrapCommand(findNextSearch, hideSelectionMenu);
|
|
6
|
+
export const findPrev = wrapCommand(findPrevSearch, hideSelectionMenu);
|
|
7
|
+
export const replaceNext = wrapCommand(replaceNextSearch, hideSelectionMenu);
|
|
8
|
+
export const replaceAll = wrapCommand(replaceAllSearch, hideSelectionMenu);
|
|
9
|
+
export const openSearch = (state, dispatch) => {
|
|
10
|
+
if (dispatch) {
|
|
11
|
+
const searchState = getSearchState(state);
|
|
12
|
+
const search = state.doc.textBetween(state.selection.from, state.selection.to, ' ');
|
|
13
|
+
const meta = { open: true };
|
|
14
|
+
dispatch(setSearchState(hideSelectionMenu(state.tr.setMeta(pluginKey, meta)), new SearchQuery({
|
|
15
|
+
...(searchState
|
|
16
|
+
? {
|
|
17
|
+
regexp: searchState.query.regexp,
|
|
18
|
+
replace: searchState.query.replace,
|
|
19
|
+
literal: searchState.query.literal,
|
|
20
|
+
wholeWord: searchState.query.wholeWord,
|
|
21
|
+
caseSensitive: searchState.query.caseSensitive,
|
|
22
|
+
filter: searchState.query.filter || undefined,
|
|
23
|
+
}
|
|
24
|
+
: undefined),
|
|
25
|
+
search,
|
|
26
|
+
})));
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
29
|
+
};
|
|
30
|
+
export const closeSearch = (state, dispatch) => {
|
|
31
|
+
if (dispatch) {
|
|
32
|
+
const meta = { open: false };
|
|
33
|
+
dispatch(setSearchState(state.tr.setMeta(pluginKey, meta), new SearchQuery({ search: '' })));
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,WAAW,EACX,QAAQ,IAAI,cAAc,EAC1B,QAAQ,IAAI,cAAc,EAC1B,cAAc,EACd,UAAU,IAAI,gBAAgB,EAC9B,WAAW,IAAI,iBAAiB,EAChC,cAAc,GACjB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAC,iBAAiB,EAAC,qCAA4B;AAEtD,OAAO,EAAC,SAAS,EAAC,mBAAgB;AAElC,OAAO,EAAC,WAAW,EAAC,gCAA6B;AAEjD,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;AAE3E,MAAM,CAAC,MAAM,UAAU,GAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IACnD,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,WAAW,GAAG,cAAc,CAAC,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,cAAc,CACV,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EACpD,IAAI,WAAW,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;AAEF,MAAM,CAAC,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,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,WAAW,CAAC,EAAC,MAAM,EAAE,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC","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,7 @@
|
|
|
1
|
+
import { PluginKey } from "../../../pm/state.js";
|
|
2
|
+
export const SearchClassName = {
|
|
3
|
+
Match: 'ProseMirror-search-match',
|
|
4
|
+
ActiveMatch: 'ProseMirror-active-search-match',
|
|
5
|
+
};
|
|
6
|
+
export const pluginKey = new PluginKey('search-view');
|
|
7
|
+
//# sourceMappingURL=const.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,6BAAkB;AAIpC,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,KAAK,EAAE,0BAA0B;IACjC,WAAW,EAAE,iCAAiC;CACxC,CAAC;AAEX,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/index.ts"],"names":[],"mappings":"AAAA,4BAAyB","sourcesContent":["export * from './Search';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const searchKeyHandler: (view: import("prosemirror-view").EditorView, event: KeyboardEvent) => boolean;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { keydownHandler } from "../../../pm/keymap.js";
|
|
2
|
+
import { closeSearch, findNext, findPrev, openSearch } from "./commands.js";
|
|
3
|
+
export const searchKeyHandler = keydownHandler({
|
|
4
|
+
'Mod-f': openSearch,
|
|
5
|
+
Escape: closeSearch,
|
|
6
|
+
F3: findNext,
|
|
7
|
+
'Shift-F3': findPrev,
|
|
8
|
+
'Mod-g': findNext,
|
|
9
|
+
'Shift-Mod-g': findPrev,
|
|
10
|
+
});
|
|
11
|
+
//# 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,OAAO,EAAC,cAAc,EAAC,8BAAmB;AAE1C,OAAO,EAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAC,sBAAmB;AAEvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;IAC3C,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,WAAW;IACnB,EAAE,EAAE,QAAQ;IACZ,UAAU,EAAE,QAAQ;IACpB,OAAO,EAAE,QAAQ;IACjB,aAAa,EAAE,QAAQ;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 @@
|
|
|
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,21 @@
|
|
|
1
|
+
export function startTracking(elem, options) {
|
|
2
|
+
const document = elem.ownerDocument;
|
|
3
|
+
let connected = document.contains(elem);
|
|
4
|
+
const observer = new MutationObserver(() => {
|
|
5
|
+
if (connected) {
|
|
6
|
+
if (!document.contains(elem)) {
|
|
7
|
+
connected = false;
|
|
8
|
+
options.onDisconnect?.();
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
else if (document.contains(elem)) {
|
|
12
|
+
connected = true;
|
|
13
|
+
options.onConnect?.();
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
17
|
+
return () => {
|
|
18
|
+
observer.disconnect();
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# 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,MAAM,UAAU,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,14 @@
|
|
|
1
|
+
export class FocusManager {
|
|
2
|
+
#doc;
|
|
3
|
+
#previousFocused = null;
|
|
4
|
+
constructor(doc = document) {
|
|
5
|
+
this.#doc = doc;
|
|
6
|
+
}
|
|
7
|
+
storeFocus() {
|
|
8
|
+
this.#previousFocused = this.#doc.activeElement;
|
|
9
|
+
}
|
|
10
|
+
restoreFocus(options) {
|
|
11
|
+
this.#previousFocused?.focus?.(options);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=focus-manager.js.map
|