@gravity-ui/markdown-editor 15.26.1 → 15.27.1
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/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/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/version.js +1 -1
- package/build/cjs/version.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/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/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/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/build/styles.css +28 -10
- package/package.json +2 -4
- 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
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.closeSearch = exports.openSearch = exports.replaceAll = exports.replaceNext = exports.findPrev = exports.findNext = void 0;
|
|
4
|
+
const prosemirror_search_1 = require("prosemirror-search");
|
|
5
|
+
const SelectionContext_1 = require("../SelectionContext/index.js");
|
|
6
|
+
const const_1 = require("./const.js");
|
|
7
|
+
const wrap_command_1 = require("./utils/wrap-command.js");
|
|
8
|
+
exports.findNext = (0, wrap_command_1.wrapCommand)(prosemirror_search_1.findNext, SelectionContext_1.hideSelectionMenu);
|
|
9
|
+
exports.findPrev = (0, wrap_command_1.wrapCommand)(prosemirror_search_1.findPrev, SelectionContext_1.hideSelectionMenu);
|
|
10
|
+
exports.replaceNext = (0, wrap_command_1.wrapCommand)(prosemirror_search_1.replaceNext, SelectionContext_1.hideSelectionMenu);
|
|
11
|
+
exports.replaceAll = (0, wrap_command_1.wrapCommand)(prosemirror_search_1.replaceAll, SelectionContext_1.hideSelectionMenu);
|
|
12
|
+
const openSearch = (state, dispatch) => {
|
|
13
|
+
if (dispatch) {
|
|
14
|
+
const searchState = (0, prosemirror_search_1.getSearchState)(state);
|
|
15
|
+
const search = state.doc.textBetween(state.selection.from, state.selection.to, ' ');
|
|
16
|
+
const meta = { open: true };
|
|
17
|
+
dispatch((0, prosemirror_search_1.setSearchState)((0, SelectionContext_1.hideSelectionMenu)(state.tr.setMeta(const_1.pluginKey, meta)), new prosemirror_search_1.SearchQuery({
|
|
18
|
+
...(searchState
|
|
19
|
+
? {
|
|
20
|
+
regexp: searchState.query.regexp,
|
|
21
|
+
replace: searchState.query.replace,
|
|
22
|
+
literal: searchState.query.literal,
|
|
23
|
+
wholeWord: searchState.query.wholeWord,
|
|
24
|
+
caseSensitive: searchState.query.caseSensitive,
|
|
25
|
+
filter: searchState.query.filter || undefined,
|
|
26
|
+
}
|
|
27
|
+
: undefined),
|
|
28
|
+
search,
|
|
29
|
+
})));
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
32
|
+
};
|
|
33
|
+
exports.openSearch = openSearch;
|
|
34
|
+
const closeSearch = (state, dispatch) => {
|
|
35
|
+
if (dispatch) {
|
|
36
|
+
const meta = { open: false };
|
|
37
|
+
dispatch((0, prosemirror_search_1.setSearchState)(state.tr.setMeta(const_1.pluginKey, meta), new prosemirror_search_1.SearchQuery({ search: '' })));
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
};
|
|
41
|
+
exports.closeSearch = closeSearch;
|
|
42
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/commands.ts"],"names":[],"mappings":";;;AAAA,2DAQ4B;AAI5B,mEAAsD;AAEtD,sCAAkC;AAElC,0DAAiD;AAEpC,QAAA,QAAQ,GAAG,IAAA,0BAAW,EAAC,6BAAc,EAAE,oCAAiB,CAAC,CAAC;AAC1D,QAAA,QAAQ,GAAG,IAAA,0BAAW,EAAC,6BAAc,EAAE,oCAAiB,CAAC,CAAC;AAC1D,QAAA,WAAW,GAAG,IAAA,0BAAW,EAAC,gCAAiB,EAAE,oCAAiB,CAAC,CAAC;AAChE,QAAA,UAAU,GAAG,IAAA,0BAAW,EAAC,+BAAgB,EAAE,oCAAiB,CAAC,CAAC;AAEpE,MAAM,UAAU,GAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IACnD,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,WAAW,GAAG,IAAA,mCAAc,EAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpF,MAAM,IAAI,GAAoB,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;QAC3C,QAAQ,CACJ,IAAA,mCAAc,EACV,IAAA,oCAAiB,EAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAS,EAAE,IAAI,CAAC,CAAC,EACpD,IAAI,gCAAW,CAAC;YACZ,GAAG,CAAC,WAAW;gBACX,CAAC,CAAC;oBACI,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM;oBAChC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO;oBAClC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO;oBAClC,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS;oBACtC,aAAa,EAAE,WAAW,CAAC,KAAK,CAAC,aAAa;oBAC9C,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS;iBAChD;gBACH,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM;SACT,CAAC,CACL,CACJ,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAzBW,QAAA,UAAU,cAyBrB;AAEK,MAAM,WAAW,GAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IACpD,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,IAAI,GAAoB,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC;QAC5C,QAAQ,CAAC,IAAA,mCAAc,EAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAS,EAAE,IAAI,CAAC,EAAE,IAAI,gCAAW,CAAC,EAAC,MAAM,EAAE,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AANW,QAAA,WAAW,eAMtB","sourcesContent":["import {\n SearchQuery,\n findNext as findNextSearch,\n findPrev as findPrevSearch,\n getSearchState,\n replaceAll as replaceAllSearch,\n replaceNext as replaceNextSearch,\n setSearchState,\n} from 'prosemirror-search';\n\nimport type {Command} from '#pm/state';\n\nimport {hideSelectionMenu} from '../SelectionContext';\n\nimport {pluginKey} from './const';\nimport type {SearchViewState} from './types';\nimport {wrapCommand} from './utils/wrap-command';\n\nexport const findNext = wrapCommand(findNextSearch, hideSelectionMenu);\nexport const findPrev = wrapCommand(findPrevSearch, hideSelectionMenu);\nexport const replaceNext = wrapCommand(replaceNextSearch, hideSelectionMenu);\nexport const replaceAll = wrapCommand(replaceAllSearch, hideSelectionMenu);\n\nexport const openSearch: Command = (state, dispatch) => {\n if (dispatch) {\n const searchState = getSearchState(state);\n const search = state.doc.textBetween(state.selection.from, state.selection.to, ' ');\n const meta: SearchViewState = {open: true};\n dispatch(\n setSearchState(\n hideSelectionMenu(state.tr.setMeta(pluginKey, meta)),\n new SearchQuery({\n ...(searchState\n ? {\n regexp: searchState.query.regexp,\n replace: searchState.query.replace,\n literal: searchState.query.literal,\n wholeWord: searchState.query.wholeWord,\n caseSensitive: searchState.query.caseSensitive,\n filter: searchState.query.filter || undefined,\n }\n : undefined),\n search,\n }),\n ),\n );\n }\n return true;\n};\n\nexport const closeSearch: Command = (state, dispatch) => {\n if (dispatch) {\n const meta: SearchViewState = {open: false};\n dispatch(setSearchState(state.tr.setMeta(pluginKey, meta), new SearchQuery({search: ''})));\n }\n return true;\n};\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PluginKey } from "../../../pm/state.js";
|
|
2
|
+
import type { SearchViewState } from "./types.js";
|
|
3
|
+
export declare const SearchClassName: {
|
|
4
|
+
readonly Match: "ProseMirror-search-match";
|
|
5
|
+
readonly ActiveMatch: "ProseMirror-active-search-match";
|
|
6
|
+
};
|
|
7
|
+
export declare const pluginKey: PluginKey<SearchViewState>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pluginKey = exports.SearchClassName = void 0;
|
|
4
|
+
const state_1 = require("../../../pm/state.js");
|
|
5
|
+
exports.SearchClassName = {
|
|
6
|
+
Match: 'ProseMirror-search-match',
|
|
7
|
+
ActiveMatch: 'ProseMirror-active-search-match',
|
|
8
|
+
};
|
|
9
|
+
exports.pluginKey = new state_1.PluginKey('search-view');
|
|
10
|
+
//# sourceMappingURL=const.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/const.ts"],"names":[],"mappings":";;;AAAA,gDAAoC;AAIvB,QAAA,eAAe,GAAG;IAC3B,KAAK,EAAE,0BAA0B;IACjC,WAAW,EAAE,iCAAiC;CACxC,CAAC;AAEE,QAAA,SAAS,GAAG,IAAI,iBAAS,CAAkB,aAAa,CAAC,CAAC","sourcesContent":["import {PluginKey} from '#pm/state';\n\nimport type {SearchViewState} from './types';\n\nexport const SearchClassName = {\n Match: 'ProseMirror-search-match',\n ActiveMatch: 'ProseMirror-active-search-match',\n} as const;\n\nexport const pluginKey = new PluginKey<SearchViewState>('search-view');\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Search.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/index.ts"],"names":[],"mappings":";;;AAAA,sDAAyB","sourcesContent":["export * from './Search';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const searchKeyHandler: (view: import("prosemirror-view").EditorView, event: KeyboardEvent) => boolean;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.searchKeyHandler = void 0;
|
|
4
|
+
const keymap_1 = require("../../../pm/keymap.js");
|
|
5
|
+
const commands_1 = require("./commands.js");
|
|
6
|
+
exports.searchKeyHandler = (0, keymap_1.keydownHandler)({
|
|
7
|
+
'Mod-f': commands_1.openSearch,
|
|
8
|
+
Escape: commands_1.closeSearch,
|
|
9
|
+
F3: commands_1.findNext,
|
|
10
|
+
'Shift-F3': commands_1.findPrev,
|
|
11
|
+
'Mod-g': commands_1.findNext,
|
|
12
|
+
'Shift-Mod-g': commands_1.findPrev,
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=key-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-handler.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Search/key-handler.ts"],"names":[],"mappings":";;;AAAA,kDAA0C;AAE1C,4CAAuE;AAE1D,QAAA,gBAAgB,GAAG,IAAA,uBAAc,EAAC;IAC3C,OAAO,EAAE,qBAAU;IACnB,MAAM,EAAE,sBAAW;IACnB,EAAE,EAAE,mBAAQ;IACZ,UAAU,EAAE,mBAAQ;IACpB,OAAO,EAAE,mBAAQ;IACjB,aAAa,EAAE,mBAAQ;CAC1B,CAAC,CAAC","sourcesContent":["import {keydownHandler} from '#pm/keymap';\n\nimport {closeSearch, findNext, findPrev, openSearch} from './commands';\n\nexport const searchKeyHandler = keydownHandler({\n 'Mod-f': openSearch,\n Escape: closeSearch,\n F3: findNext,\n 'Shift-F3': findPrev,\n 'Mod-g': findNext,\n 'Shift-Mod-g': findPrev,\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
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,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startTracking = startTracking;
|
|
4
|
+
function startTracking(elem, options) {
|
|
5
|
+
const document = elem.ownerDocument;
|
|
6
|
+
let connected = document.contains(elem);
|
|
7
|
+
const observer = new MutationObserver(() => {
|
|
8
|
+
if (connected) {
|
|
9
|
+
if (!document.contains(elem)) {
|
|
10
|
+
connected = false;
|
|
11
|
+
options.onDisconnect?.();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
else if (document.contains(elem)) {
|
|
15
|
+
connected = true;
|
|
16
|
+
options.onConnect?.();
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
20
|
+
return () => {
|
|
21
|
+
observer.disconnect();
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=connect-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-tracker.js","sourceRoot":"../../../../../../src","sources":["extensions/behavior/Search/utils/connect-tracker.ts"],"names":[],"mappings":";;AAOA,sCAsBC;AAtBD,SAAgB,aAAa,CAAC,IAAiB,EAAE,OAAwB;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;IAEpC,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;QACvC,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,SAAS,GAAG,KAAK,CAAC;gBAClB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;YAC7B,CAAC;QACL,CAAC;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QAC1B,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;IAElE,OAAO,GAAG,EAAE;QACR,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC,CAAC;AACN,CAAC","sourcesContent":["type TrackingOptions = {\n onConnect?: () => void;\n onDisconnect?: () => void;\n};\n\ntype Dispose = () => void;\n\nexport function startTracking(elem: HTMLElement, options: TrackingOptions): Dispose {\n const document = elem.ownerDocument;\n\n let connected = document.contains(elem);\n\n const observer = new MutationObserver(() => {\n if (connected) {\n if (!document.contains(elem)) {\n connected = false;\n options.onDisconnect?.();\n }\n } else if (document.contains(elem)) {\n connected = true;\n options.onConnect?.();\n }\n });\n\n observer.observe(document.body, {childList: true, subtree: true});\n\n return () => {\n observer.disconnect();\n };\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FocusManager = void 0;
|
|
4
|
+
class FocusManager {
|
|
5
|
+
#doc;
|
|
6
|
+
#previousFocused = null;
|
|
7
|
+
constructor(doc = document) {
|
|
8
|
+
this.#doc = doc;
|
|
9
|
+
}
|
|
10
|
+
storeFocus() {
|
|
11
|
+
this.#previousFocused = this.#doc.activeElement;
|
|
12
|
+
}
|
|
13
|
+
restoreFocus(options) {
|
|
14
|
+
this.#previousFocused?.focus?.(options);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.FocusManager = FocusManager;
|
|
18
|
+
//# sourceMappingURL=focus-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-manager.js","sourceRoot":"../../../../../../src","sources":["extensions/behavior/Search/utils/focus-manager.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAY;IACrB,IAAI,CAAW;IACf,gBAAgB,GAAuB,IAAI,CAAC;IAE5C,YAAY,MAAgB,QAAQ;QAChC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IACpB,CAAC;IAED,UAAU;QACN,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAmC,CAAC;IAC1E,CAAC;IAED,YAAY,CAAC,OAAsB;QAC/B,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;CACJ;AAfD,oCAeC","sourcesContent":["export class FocusManager {\n #doc: Document;\n #previousFocused: HTMLElement | null = null;\n\n constructor(doc: Document = document) {\n this.#doc = doc;\n }\n\n storeFocus() {\n this.#previousFocused = this.#doc.activeElement as HTMLElement | null;\n }\n\n restoreFocus(options?: FocusOptions) {\n this.#previousFocused?.focus?.(options);\n }\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCounter = getCounter;
|
|
4
|
+
const prosemirror_search_1 = require("prosemirror-search");
|
|
5
|
+
const const_1 = require("../const.js");
|
|
6
|
+
function getCounter(state) {
|
|
7
|
+
const decoSet = (0, prosemirror_search_1.getMatchHighlights)(state);
|
|
8
|
+
const searchDecos = decoSet.find(undefined, undefined, () => true);
|
|
9
|
+
const activeIndex = searchDecos.findIndex((deco) => {
|
|
10
|
+
const d = deco;
|
|
11
|
+
return d.type?.attrs?.class === const_1.SearchClassName.ActiveMatch;
|
|
12
|
+
});
|
|
13
|
+
return {
|
|
14
|
+
total: searchDecos.length,
|
|
15
|
+
current: activeIndex + 1,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=search-counter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-counter.js","sourceRoot":"../../../../../../src","sources":["extensions/behavior/Search/utils/search-counter.ts"],"names":[],"mappings":";;AAOA,gCAWC;AAlBD,2DAAsD;AAKtD,uCAAyC;AAEzC,SAAgB,UAAU,CAAC,KAAkB;IACzC,MAAM,OAAO,GAAG,IAAA,uCAAkB,EAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/C,MAAM,CAAC,GAAG,IAA8C,CAAC;QACzD,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,uBAAe,CAAC,WAAW,CAAC;IAChE,CAAC,CAAC,CAAC;IACH,OAAO;QACH,KAAK,EAAE,WAAW,CAAC,MAAM;QACzB,OAAO,EAAE,WAAW,GAAG,CAAC;KAC3B,CAAC;AACN,CAAC","sourcesContent":["import {getMatchHighlights} from 'prosemirror-search';\n\nimport type {EditorState} from '#pm/state';\nimport type {SearchCounter} from 'src/modules/search';\n\nimport {SearchClassName} from '../const';\n\nexport function getCounter(state: EditorState): SearchCounter {\n const decoSet = getMatchHighlights(state);\n const searchDecos = decoSet.find(undefined, undefined, () => true);\n const activeIndex = searchDecos.findIndex((deco) => {\n const d = deco as {type?: {attrs?: Record<string, any>}};\n return d.type?.attrs?.class === SearchClassName.ActiveMatch;\n });\n return {\n total: searchDecos.length,\n current: activeIndex + 1,\n };\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wrapCommand = wrapCommand;
|
|
4
|
+
function wrapCommand(command, ...wrappers) {
|
|
5
|
+
return (state, dispatch, view) => {
|
|
6
|
+
return command(state, dispatch
|
|
7
|
+
? function dispatchWithWrappers(tr) {
|
|
8
|
+
for (const wrapper of wrappers) {
|
|
9
|
+
wrapper(tr);
|
|
10
|
+
}
|
|
11
|
+
return dispatch(tr);
|
|
12
|
+
}
|
|
13
|
+
: undefined, view);
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=wrap-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap-command.js","sourceRoot":"../../../../../../src","sources":["extensions/behavior/Search/utils/wrap-command.ts"],"names":[],"mappings":";;AAIA,kCAeC;AAfD,SAAgB,WAAW,CAAC,OAAgB,EAAE,GAAG,QAAiC;IAC9E,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QAC7B,OAAO,OAAO,CACV,KAAK,EACL,QAAQ;YACJ,CAAC,CAAC,SAAS,oBAAoB,CAAC,EAAE;gBAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC7B,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChB,CAAC;gBACD,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC;YACH,CAAC,CAAC,SAAS,EACf,IAAI,CACP,CAAC;IACN,CAAC,CAAC;AACN,CAAC","sourcesContent":["import type {Command, Transaction} from '#pm/state';\n\ntype Wrapper = (tr: Transaction) => void;\n\nexport function wrapCommand(command: Command, ...wrappers: [Wrapper, ...Wrapper[]]): Command {\n return (state, dispatch, view) => {\n return command(\n state,\n dispatch\n ? function dispatchWithWrappers(tr) {\n for (const wrapper of wrappers) {\n wrapper(tr);\n }\n return dispatch(tr);\n }\n : undefined,\n view,\n );\n };\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Transaction } from 'prosemirror-state';
|
|
1
2
|
import type { ExtensionAuto } from "../../../core/index.js";
|
|
2
3
|
import { type ContextConfig } from "./tooltip.js";
|
|
3
4
|
export type { ContextConfig as SelectionContextConfig, ContextGroupItemData as SelectionContextItemData, } from "./tooltip.js";
|
|
@@ -17,6 +18,7 @@ export type SelectionContextOptions = {
|
|
|
17
18
|
flip?: boolean;
|
|
18
19
|
};
|
|
19
20
|
export declare const SelectionContext: ExtensionAuto<SelectionContextOptions>;
|
|
21
|
+
export declare const hideSelectionMenu: (tr: Transaction) => Transaction;
|
|
20
22
|
declare module 'prosemirror-model' {
|
|
21
23
|
interface NodeSpec {
|
|
22
24
|
/** Set false to disable the selection-context menu within this node */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SelectionContext = void 0;
|
|
3
|
+
exports.hideSelectionMenu = exports.SelectionContext = void 0;
|
|
4
4
|
const prosemirror_keymap_1 = require("prosemirror-keymap");
|
|
5
5
|
const prosemirror_state_1 = require("prosemirror-state");
|
|
6
6
|
// @ts-ignore // TODO: fix cjs build
|
|
@@ -14,6 +14,12 @@ const SelectionContext = (builder, opts) => {
|
|
|
14
14
|
}
|
|
15
15
|
};
|
|
16
16
|
exports.SelectionContext = SelectionContext;
|
|
17
|
+
const HideMetaKey = 'hide-selection-menu';
|
|
18
|
+
const hideSelectionMenu = (tr) => {
|
|
19
|
+
return tr.setMeta(HideMetaKey, true);
|
|
20
|
+
};
|
|
21
|
+
exports.hideSelectionMenu = hideSelectionMenu;
|
|
22
|
+
const pluginKey = new prosemirror_state_1.PluginKey('selection-context');
|
|
17
23
|
class SelectionTooltip {
|
|
18
24
|
destroyed = false;
|
|
19
25
|
tooltip;
|
|
@@ -22,6 +28,9 @@ class SelectionTooltip {
|
|
|
22
28
|
constructor(actions, menuConfig, logger, options) {
|
|
23
29
|
this.tooltip = new tooltip_1.TooltipView(actions, menuConfig, logger, options);
|
|
24
30
|
}
|
|
31
|
+
get key() {
|
|
32
|
+
return pluginKey;
|
|
33
|
+
}
|
|
25
34
|
get props() {
|
|
26
35
|
return {
|
|
27
36
|
// same as keymap({})
|
|
@@ -55,6 +64,14 @@ class SelectionTooltip {
|
|
|
55
64
|
},
|
|
56
65
|
};
|
|
57
66
|
}
|
|
67
|
+
get state() {
|
|
68
|
+
return {
|
|
69
|
+
init: () => ({ disabled: false }),
|
|
70
|
+
apply(tr) {
|
|
71
|
+
return { disabled: Boolean(tr.getMeta(HideMetaKey)) };
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
58
75
|
view(view) {
|
|
59
76
|
this.update(view);
|
|
60
77
|
return {
|
|
@@ -70,9 +87,10 @@ class SelectionTooltip {
|
|
|
70
87
|
if (this._isMousePressed)
|
|
71
88
|
return;
|
|
72
89
|
this.cancelTooltipHiding();
|
|
90
|
+
const hideFromTr = pluginKey.getState(view.state)?.disabled;
|
|
73
91
|
// Don't show tooltip if editor not mounted to the DOM
|
|
74
92
|
// or when view is out of focus
|
|
75
|
-
if (!view.dom.parentNode || !view.hasFocus()) {
|
|
93
|
+
if (hideFromTr || !view.dom.parentNode || !view.hasFocus()) {
|
|
76
94
|
this.tooltip.hide(view);
|
|
77
95
|
return;
|
|
78
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/SelectionContext/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {keydownHandler} from 'prosemirror-keymap';\nimport type {Node} from 'prosemirror-model';\nimport {\n AllSelection,\n type EditorState,\n Plugin,\n type PluginSpec,\n TextSelection,\n} from 'prosemirror-state';\n// @ts-ignore // TODO: fix cjs build\nimport {hasParentNode} from 'prosemirror-utils';\nimport type {EditorProps, EditorView} from 'prosemirror-view';\n\nimport type {ActionStorage, ExtensionAuto} from '../../../core';\nimport type {Logger2} from '../../../logger';\nimport {isCodeBlock} from '../../../utils/nodes';\n\nimport {type ContextConfig, TooltipView} from './tooltip';\n\nexport type {\n ContextConfig as SelectionContextConfig,\n ContextGroupItemData as SelectionContextItemData,\n} from './tooltip';\n\nexport type SelectionContextOptions = {\n config?: ContextConfig;\n /**\n * Placement of context popup\n *\n * @default 'bottom'\n */\n placement?: 'top' | 'bottom';\n /**\n * Prevents context popup from overflowing\n *\n * @default false\n */\n flip?: boolean;\n};\n\nexport const SelectionContext: ExtensionAuto<SelectionContextOptions> = (builder, opts) => {\n const {config} = opts;\n if (Array.isArray(config) && config.length > 0) {\n builder.addPlugin(\n ({actions}) => new Plugin(new SelectionTooltip(actions, config, builder.logger, opts)),\n );\n }\n};\n\ntype TinyState = Pick<EditorState, 'doc' | 'selection'>;\n\nclass SelectionTooltip implements PluginSpec<unknown> {\n private destroyed = false;\n\n private tooltip: TooltipView;\n private hideTimeoutRef: ReturnType<typeof setTimeout> | null = null;\n\n private _isMousePressed = false;\n\n constructor(\n actions: ActionStorage,\n menuConfig: ContextConfig,\n logger: Logger2.ILogger,\n options: SelectionContextOptions,\n ) {\n this.tooltip = new TooltipView(actions, menuConfig, logger, options);\n }\n\n get props(): EditorProps {\n return {\n // same as keymap({})\n handleKeyDown: keydownHandler({\n // hide context menu when Esc was pressed\n Escape: (_state, _dispatch, view) => {\n if (this.tooltip.isTooltipOpen) {\n this.tooltip.hide(view!);\n return true;\n }\n return false;\n },\n }),\n handleDOMEvents: {\n mousedown: (view) => {\n const startState: TinyState = {\n doc: view.state.doc,\n selection: view.state.selection,\n };\n this._isMousePressed = true;\n this.cancelTooltipHiding();\n this.tooltip.hide(view);\n\n const onMouseUp = () => {\n if (this.destroyed) return;\n this._isMousePressed = false;\n this.update(view, startState);\n };\n\n document.addEventListener('mouseup', onMouseUp, {once: true});\n },\n },\n };\n }\n\n view(view: EditorView) {\n this.update(view);\n return {\n update: this.update.bind(this),\n destroy: () => {\n this.destroyed = true;\n this.cancelTooltipHiding();\n this.tooltip.destroy();\n },\n };\n }\n\n private update(view: EditorView, prevState?: TinyState) {\n if (this._isMousePressed) return;\n\n this.cancelTooltipHiding();\n\n // Don't show tooltip if editor not mounted to the DOM\n // or when view is out of focus\n if (!view.dom.parentNode || !view.hasFocus()) {\n this.tooltip.hide(view);\n return;\n }\n\n const {state} = view;\n // Don't do anything if the document/selection didn't change\n if (prevState && prevState.doc.eq(state.doc) && prevState.selection.eq(state.selection))\n return;\n\n const {selection} = state;\n // Hide the tooltip if the selection is empty\n if (\n selection.empty ||\n !(selection instanceof TextSelection || selection instanceof AllSelection)\n ) {\n this.tooltip.hide(view);\n return;\n }\n\n if (\n // Hide tooltip when one side of selection is inside a codeblock\n isCodeBlock(selection.$from.parent) ||\n isCodeBlock(selection.$to.parent) ||\n // or when selection is inside node where context menu is disabled\n hasParentNode((node: Node) => node.type.spec.selectionContext === false)(selection)\n ) {\n this.tooltip.hide(view);\n return;\n }\n\n this.tooltip.show(view, {\n onOpenChange: (_open, _event, reason) => {\n if (reason !== 'escape-key') this.scheduleTooltipHiding(view);\n },\n });\n }\n\n private scheduleTooltipHiding(view: EditorView) {\n this.hideTimeoutRef = setTimeout(() => {\n // hide tooltip if view is out of focus after 30 ms\n if (!view.hasFocus()) {\n this.tooltip.hide(view);\n }\n }, 30);\n }\n\n private cancelTooltipHiding() {\n if (this.hideTimeoutRef !== null) {\n clearTimeout(this.hideTimeoutRef);\n this.hideTimeoutRef = null;\n }\n }\n}\n\ndeclare module 'prosemirror-model' {\n interface NodeSpec {\n /** Set false to disable the selection-context menu within this node */\n selectionContext?: boolean | undefined;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/SelectionContext/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {keydownHandler} from 'prosemirror-keymap';\nimport type {Node} from 'prosemirror-model';\nimport {\n AllSelection,\n type EditorState,\n Plugin,\n PluginKey,\n type PluginSpec,\n type StateField,\n TextSelection,\n type Transaction,\n} from 'prosemirror-state';\n// @ts-ignore // TODO: fix cjs build\nimport {hasParentNode} from 'prosemirror-utils';\nimport type {EditorProps, EditorView} from 'prosemirror-view';\n\nimport type {ActionStorage, ExtensionAuto} from '../../../core';\nimport type {Logger2} from '../../../logger';\nimport {isCodeBlock} from '../../../utils/nodes';\n\nimport {type ContextConfig, TooltipView} from './tooltip';\n\nexport type {\n ContextConfig as SelectionContextConfig,\n ContextGroupItemData as SelectionContextItemData,\n} from './tooltip';\n\nexport type SelectionContextOptions = {\n config?: ContextConfig;\n /**\n * Placement of context popup\n *\n * @default 'bottom'\n */\n placement?: 'top' | 'bottom';\n /**\n * Prevents context popup from overflowing\n *\n * @default false\n */\n flip?: boolean;\n};\n\nexport const SelectionContext: ExtensionAuto<SelectionContextOptions> = (builder, opts) => {\n const {config} = opts;\n if (Array.isArray(config) && config.length > 0) {\n builder.addPlugin(\n ({actions}) => new Plugin(new SelectionTooltip(actions, config, builder.logger, opts)),\n );\n }\n};\n\nconst HideMetaKey = 'hide-selection-menu';\n\nexport const hideSelectionMenu = (tr: Transaction) => {\n return tr.setMeta(HideMetaKey, true);\n};\n\nconst pluginKey = new PluginKey<PluginState>('selection-context');\n\ntype PluginState = {\n disabled: boolean;\n};\n\ntype TinyState = Pick<EditorState, 'doc' | 'selection'>;\n\nclass SelectionTooltip implements PluginSpec<PluginState> {\n private destroyed = false;\n\n private tooltip: TooltipView;\n private hideTimeoutRef: ReturnType<typeof setTimeout> | null = null;\n\n private _isMousePressed = false;\n\n constructor(\n actions: ActionStorage,\n menuConfig: ContextConfig,\n logger: Logger2.ILogger,\n options: SelectionContextOptions,\n ) {\n this.tooltip = new TooltipView(actions, menuConfig, logger, options);\n }\n\n get key(): PluginKey<PluginState> {\n return pluginKey;\n }\n\n get props(): EditorProps {\n return {\n // same as keymap({})\n handleKeyDown: keydownHandler({\n // hide context menu when Esc was pressed\n Escape: (_state, _dispatch, view) => {\n if (this.tooltip.isTooltipOpen) {\n this.tooltip.hide(view!);\n return true;\n }\n return false;\n },\n }),\n handleDOMEvents: {\n mousedown: (view) => {\n const startState: TinyState = {\n doc: view.state.doc,\n selection: view.state.selection,\n };\n this._isMousePressed = true;\n this.cancelTooltipHiding();\n this.tooltip.hide(view);\n\n const onMouseUp = () => {\n if (this.destroyed) return;\n this._isMousePressed = false;\n this.update(view, startState);\n };\n\n document.addEventListener('mouseup', onMouseUp, {once: true});\n },\n },\n };\n }\n\n get state(): StateField<PluginState> {\n return {\n init: () => ({disabled: false}),\n apply(tr) {\n return {disabled: Boolean(tr.getMeta(HideMetaKey))};\n },\n };\n }\n\n view(view: EditorView) {\n this.update(view);\n return {\n update: this.update.bind(this),\n destroy: () => {\n this.destroyed = true;\n this.cancelTooltipHiding();\n this.tooltip.destroy();\n },\n };\n }\n\n private update(view: EditorView, prevState?: TinyState) {\n if (this._isMousePressed) return;\n\n this.cancelTooltipHiding();\n\n const hideFromTr = pluginKey.getState(view.state)?.disabled;\n\n // Don't show tooltip if editor not mounted to the DOM\n // or when view is out of focus\n if (hideFromTr || !view.dom.parentNode || !view.hasFocus()) {\n this.tooltip.hide(view);\n return;\n }\n\n const {state} = view;\n // Don't do anything if the document/selection didn't change\n if (prevState && prevState.doc.eq(state.doc) && prevState.selection.eq(state.selection))\n return;\n\n const {selection} = state;\n // Hide the tooltip if the selection is empty\n if (\n selection.empty ||\n !(selection instanceof TextSelection || selection instanceof AllSelection)\n ) {\n this.tooltip.hide(view);\n return;\n }\n\n if (\n // Hide tooltip when one side of selection is inside a codeblock\n isCodeBlock(selection.$from.parent) ||\n isCodeBlock(selection.$to.parent) ||\n // or when selection is inside node where context menu is disabled\n hasParentNode((node: Node) => node.type.spec.selectionContext === false)(selection)\n ) {\n this.tooltip.hide(view);\n return;\n }\n\n this.tooltip.show(view, {\n onOpenChange: (_open, _event, reason) => {\n if (reason !== 'escape-key') this.scheduleTooltipHiding(view);\n },\n });\n }\n\n private scheduleTooltipHiding(view: EditorView) {\n this.hideTimeoutRef = setTimeout(() => {\n // hide tooltip if view is out of focus after 30 ms\n if (!view.hasFocus()) {\n this.tooltip.hide(view);\n }\n }, 30);\n }\n\n private cancelTooltipHiding() {\n if (this.hideTimeoutRef !== null) {\n clearTimeout(this.hideTimeoutRef);\n this.hideTimeoutRef = null;\n }\n }\n}\n\ndeclare module 'prosemirror-model' {\n interface NodeSpec {\n /** Set false to disable the selection-context menu within this node */\n selectionContext?: boolean | undefined;\n }\n}\n"]}
|
|
@@ -5,6 +5,7 @@ import { type CommandMenuOptions } from "./CommandMenu/index.js";
|
|
|
5
5
|
import { type CursorOptions } from "./Cursor/index.js";
|
|
6
6
|
import { type HistoryOptions } from "./History/index.js";
|
|
7
7
|
import { type ReactRenderer } from "./ReactRenderer/index.js";
|
|
8
|
+
import { type SearchOptions } from "./Search/index.js";
|
|
8
9
|
import { type SelectionContextOptions } from "./SelectionContext/index.js";
|
|
9
10
|
export * from "./Autocomplete/index.js";
|
|
10
11
|
export * from "./ClicksOnEdges/index.js";
|
|
@@ -26,6 +27,7 @@ export type BehaviorPresetOptions = {
|
|
|
26
27
|
placeholder?: PlaceholderOptions;
|
|
27
28
|
reactRenderer: ReactRenderer;
|
|
28
29
|
selectionContext?: SelectionContextOptions;
|
|
30
|
+
search?: SearchOptions;
|
|
29
31
|
commandMenu?: CommandMenuOptions;
|
|
30
32
|
mobile?: boolean;
|
|
31
33
|
};
|
|
@@ -10,6 +10,7 @@ const FilePaste_1 = require("./FilePaste/index.js");
|
|
|
10
10
|
const History_1 = require("./History/index.js");
|
|
11
11
|
const Placeholder_1 = require("./Placeholder/index.js");
|
|
12
12
|
const ReactRenderer_1 = require("./ReactRenderer/index.js");
|
|
13
|
+
const Search_1 = require("./Search/index.js");
|
|
13
14
|
const Selection_1 = require("./Selection/index.js");
|
|
14
15
|
const SelectionContext_1 = require("./SelectionContext/index.js");
|
|
15
16
|
const SharedState_1 = require("./SharedState/index.js");
|
|
@@ -41,6 +42,8 @@ const BehaviorPreset = (builder, opts) => {
|
|
|
41
42
|
builder.use(SelectionContext_1.SelectionContext, opts.selectionContext ?? {});
|
|
42
43
|
if (opts.commandMenu)
|
|
43
44
|
builder.use(CommandMenu_1.CommandMenu, opts.commandMenu);
|
|
45
|
+
if (opts.search)
|
|
46
|
+
builder.use(Search_1.Search, opts.search);
|
|
44
47
|
}
|
|
45
48
|
builder.use(FilePaste_1.FilePaste);
|
|
46
49
|
builder.use(ClicksOnEdges_1.ClicksOnEdges);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["extensions/behavior/index.ts"],"names":[],"mappings":";;;;AAGA,4DAA8C;AAC9C,oDAA6D;AAC7D,wDAAmE;AACnE,8CAAoD;AACpD,oDAAsC;AACtC,gDAAuD;AACvD,wDAA0C;AAC1C,4DAA2E;AAC3E,oDAAsC;AACtC,kEAAkF;AAClF,wDAA0C;AAC1C,kEAAoD;AAEpD,kEAA+B;AAC/B,mEAAgC;AAChC,+DAA4B;AAC5B,iEAA8B;AAC9B,4DAAyB;AACzB,+DAA4B;AAC5B,6DAA0B;AAC1B,iEAA8B;AAC9B,mEAAgC;AAChC,+DAA4B;AAC5B,sEAAmC;AACnC,iEAA8B;AAC9B,sEAAmC;AAc5B,MAAM,cAAc,GAAyC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAClF,OAAO;SACF,GAAG,CAAC,qBAAS,CAAC;SACd,GAAG,CAAC,yBAAW,CAAC;SAChB,GAAG,CAAC,yBAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;SACxC,GAAG,CAAC,eAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;SAC9B,GAAG,CAAC,iBAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;SAChC,GAAG,CAAC,qBAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;SACpC,GAAG,CAAC,sCAAsB,EAAE,IAAI,CAAC,aAAa,CAAC;SAC/C,GAAG,CAAC,mCAAgB,CAAC,CAAC;IAE3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,mCAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,GAAG,CAAC,yBAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["extensions/behavior/index.ts"],"names":[],"mappings":";;;;AAGA,4DAA8C;AAC9C,oDAA6D;AAC7D,wDAAmE;AACnE,8CAAoD;AACpD,oDAAsC;AACtC,gDAAuD;AACvD,wDAA0C;AAC1C,4DAA2E;AAC3E,8CAAoD;AACpD,oDAAsC;AACtC,kEAAkF;AAClF,wDAA0C;AAC1C,kEAAoD;AAEpD,kEAA+B;AAC/B,mEAAgC;AAChC,+DAA4B;AAC5B,iEAA8B;AAC9B,4DAAyB;AACzB,+DAA4B;AAC5B,6DAA0B;AAC1B,iEAA8B;AAC9B,mEAAgC;AAChC,+DAA4B;AAC5B,sEAAmC;AACnC,iEAA8B;AAC9B,sEAAmC;AAc5B,MAAM,cAAc,GAAyC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAClF,OAAO;SACF,GAAG,CAAC,qBAAS,CAAC;SACd,GAAG,CAAC,yBAAW,CAAC;SAChB,GAAG,CAAC,yBAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;SACxC,GAAG,CAAC,eAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;SAC9B,GAAG,CAAC,iBAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;SAChC,GAAG,CAAC,qBAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;SACpC,GAAG,CAAC,sCAAsB,EAAE,IAAI,CAAC,aAAa,CAAC;SAC/C,GAAG,CAAC,mCAAgB,CAAC,CAAC;IAE3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,mCAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,GAAG,CAAC,yBAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,eAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qBAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,6BAAa,CAAC,CAAC;AAC/B,CAAC,CAAC;AAnBW,QAAA,cAAc,kBAmBzB","sourcesContent":["import type {ExtensionAuto} from '../../core';\nimport type {PlaceholderOptions} from '../../utils/placeholder';\n\nimport {ClicksOnEdges} from './ClicksOnEdges';\nimport {Clipboard, type ClipboardOptions} from './Clipboard';\nimport {CommandMenu, type CommandMenuOptions} from './CommandMenu';\nimport {Cursor, type CursorOptions} from './Cursor';\nimport {FilePaste} from './FilePaste';\nimport {History, type HistoryOptions} from './History';\nimport {Placeholder} from './Placeholder';\nimport {type ReactRenderer, ReactRendererExtension} from './ReactRenderer';\nimport {Search, type SearchOptions} from './Search';\nimport {Selection} from './Selection';\nimport {SelectionContext, type SelectionContextOptions} from './SelectionContext';\nimport {SharedState} from './SharedState';\nimport {WidgetDecoration} from './WidgetDecoration';\n\nexport * from './Autocomplete';\nexport * from './ClicksOnEdges';\nexport * from './Clipboard';\nexport * from './CommandMenu';\nexport * from './Cursor';\nexport * from './FilePaste';\nexport * from './History';\nexport * from './Placeholder';\nexport * from './ReactRenderer';\nexport * from './Selection';\nexport * from './SelectionContext';\nexport * from './SharedState';\nexport * from './WidgetDecoration';\n\nexport type BehaviorPresetOptions = {\n cursor?: CursorOptions;\n history?: HistoryOptions;\n clipboard?: ClipboardOptions;\n placeholder?: PlaceholderOptions;\n reactRenderer: ReactRenderer;\n selectionContext?: SelectionContextOptions;\n search?: SearchOptions;\n commandMenu?: CommandMenuOptions;\n mobile?: boolean;\n};\n\nexport const BehaviorPreset: ExtensionAuto<BehaviorPresetOptions> = (builder, opts) => {\n builder\n .use(Selection)\n .use(SharedState)\n .use(Placeholder, opts.placeholder ?? {})\n .use(Cursor, opts.cursor ?? {})\n .use(History, opts.history ?? {})\n .use(Clipboard, opts.clipboard ?? {})\n .use(ReactRendererExtension, opts.reactRenderer)\n .use(WidgetDecoration);\n\n if (!opts.mobile) {\n builder.use(SelectionContext, opts.selectionContext ?? {});\n if (opts.commandMenu) builder.use(CommandMenu, opts.commandMenu);\n if (opts.search) builder.use(Search, opts.search);\n }\n\n builder.use(FilePaste);\n builder.use(ClicksOnEdges);\n};\n"]}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"label_case-sensitive": "Case sensitive",
|
|
3
3
|
"label_whole-word": "Whole word",
|
|
4
|
-
"title": "Search
|
|
4
|
+
"title": "Search and replace",
|
|
5
|
+
"action_close": "Close",
|
|
5
6
|
"action_replace": "Replace",
|
|
6
7
|
"action_replace_all": "Replace all",
|
|
7
|
-
"
|
|
8
|
+
"action_next": "Find next",
|
|
9
|
+
"action_prev": "Find previous",
|
|
10
|
+
"action_expand": "Expand the replacement form",
|
|
11
|
+
"title_search": "Find",
|
|
12
|
+
"title_replace": "Replace with",
|
|
13
|
+
"search_counter": "{{current}} of {{total}}",
|
|
14
|
+
"search_placeholder": "Text search"
|
|
8
15
|
}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
export declare const i18n: <G extends "title" | "label_case-sensitive" | "label_whole-word" | "action_replace" | "action_replace_all" | "
|
|
1
|
+
export declare const i18n: <G extends "title" | "label_case-sensitive" | "label_whole-word" | "action_close" | "action_replace" | "action_replace_all" | "action_next" | "action_prev" | "action_expand" | "title_search" | "title_replace" | "search_counter" | "search_placeholder", S extends string>(key: G | (string extends S ? S : never), params?: {
|
|
2
2
|
[key: string]: any;
|
|
3
3
|
}) => S extends G ? {
|
|
4
4
|
"label_case-sensitive": string;
|
|
5
5
|
"label_whole-word": string;
|
|
6
6
|
title: string;
|
|
7
|
+
action_close: string;
|
|
7
8
|
action_replace: string;
|
|
8
9
|
action_replace_all: string;
|
|
9
|
-
|
|
10
|
+
action_next: string;
|
|
11
|
+
action_prev: string;
|
|
12
|
+
action_expand: string;
|
|
13
|
+
title_search: string;
|
|
14
|
+
title_replace: string;
|
|
15
|
+
search_counter: string;
|
|
16
|
+
search_placeholder: string;
|
|
10
17
|
}[G] : string;
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"label_case-sensitive": "С учетом регистра",
|
|
3
|
-
"label_whole-word": "
|
|
4
|
-
"title": "
|
|
3
|
+
"label_whole-word": "Точное совпадение",
|
|
4
|
+
"title": "Поиск и замена",
|
|
5
|
+
"action_close": "Закрыть",
|
|
5
6
|
"action_replace": "Заменить",
|
|
6
7
|
"action_replace_all": "Заменить всё",
|
|
7
|
-
"
|
|
8
|
+
"action_next": "Следующий",
|
|
9
|
+
"action_prev": "Предыдущий",
|
|
10
|
+
"action_expand": "Раскрыть окно замены",
|
|
11
|
+
"title_search": "Найти",
|
|
12
|
+
"title_replace": "Заменить на",
|
|
13
|
+
"search_counter": "{{current}} из {{total}}",
|
|
14
|
+
"search_placeholder": "Поиск по тексту"
|
|
8
15
|
}
|