@seafile/sdoc-editor 1.0.176 → 1.0.178

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/api/seafile-api.js +12 -0
  2. package/dist/basic-sdk/assets/images/sdoc-ask-ai.png +0 -0
  3. package/dist/basic-sdk/comment/components/comment-editor.js +0 -1
  4. package/dist/basic-sdk/comment/components/comment-item-wrapper.js +19 -10
  5. package/dist/basic-sdk/comment/components/comment-list.css +2 -6
  6. package/dist/basic-sdk/comment/components/comment-list.js +29 -39
  7. package/dist/basic-sdk/comment/components/editor-comment.js +13 -2
  8. package/dist/basic-sdk/constants/index.js +2 -1
  9. package/dist/basic-sdk/extension/commons/file-insert-dialog/index.js +28 -18
  10. package/dist/basic-sdk/extension/commons/file-insert-dialog/style.css +12 -9
  11. package/dist/basic-sdk/extension/commons/insert-element-dialog/index.js +10 -0
  12. package/dist/basic-sdk/extension/commons/select-file-dialog/helpers.js +9 -2
  13. package/dist/basic-sdk/extension/commons/select-file-dialog/index.css +115 -0
  14. package/dist/basic-sdk/extension/commons/select-file-dialog/index.js +68 -5
  15. package/dist/basic-sdk/extension/commons/select-file-dialog/local-files/index.css +42 -0
  16. package/dist/basic-sdk/extension/commons/select-file-dialog/local-files/index.js +49 -12
  17. package/dist/basic-sdk/extension/constants/element-type.js +2 -1
  18. package/dist/basic-sdk/extension/constants/menus-config.js +1 -1
  19. package/dist/basic-sdk/extension/core/queries/index.js +12 -1
  20. package/dist/basic-sdk/extension/plugins/ai/ai-icon/index.js +26 -0
  21. package/dist/basic-sdk/extension/plugins/ai/ai-icon/style.css +22 -0
  22. package/dist/basic-sdk/extension/plugins/ai/ai-menu/ai-context-menu.js +39 -0
  23. package/dist/basic-sdk/extension/plugins/ai/ai-menu/ai-dropdown-menu.js +35 -0
  24. package/dist/basic-sdk/extension/plugins/ai/ai-menu/index.js +20 -0
  25. package/dist/basic-sdk/extension/plugins/ai/ai-menu/menu-item.js +62 -0
  26. package/dist/basic-sdk/extension/plugins/ai/ai-menu/style.css +3 -0
  27. package/dist/basic-sdk/extension/plugins/ai/ai-module/adjust-sub-menu.js +40 -0
  28. package/dist/basic-sdk/extension/plugins/ai/ai-module/index.js +452 -0
  29. package/dist/basic-sdk/extension/plugins/ai/ai-module/lang-sub-menu.js +55 -0
  30. package/dist/basic-sdk/extension/plugins/ai/ai-module/style.css +104 -0
  31. package/dist/basic-sdk/extension/plugins/ai/ai-module/tip-dialog.js +32 -0
  32. package/dist/basic-sdk/extension/plugins/ai/constants/index.js +128 -0
  33. package/dist/basic-sdk/extension/plugins/ai/index.js +1 -0
  34. package/dist/basic-sdk/extension/plugins/blockquote/plugin.js +2 -2
  35. package/dist/basic-sdk/extension/plugins/image/helpers.js +25 -16
  36. package/dist/basic-sdk/extension/plugins/image/hover-menu/index.js +1 -1
  37. package/dist/basic-sdk/extension/plugins/sdoc-link/helpers.js +7 -2
  38. package/dist/basic-sdk/extension/plugins/sdoc-link/render/render-elem.css +19 -3
  39. package/dist/basic-sdk/extension/plugins/sdoc-link/render/render-elem.js +8 -3
  40. package/dist/basic-sdk/extension/plugins/text-style/menu/comemnt-editor-menu.js +7 -11
  41. package/dist/basic-sdk/extension/plugins/text-style/menu/index.js +7 -17
  42. package/dist/basic-sdk/extension/plugins/video/helpers.js +1 -0
  43. package/dist/basic-sdk/extension/plugins/video/plugin.js +26 -1
  44. package/dist/basic-sdk/extension/toolbar/side-toolbar/index.js +7 -0
  45. package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.js +4 -1
  46. package/dist/components/doc-operations/revision-operations/more-revision-operations/index.js +4 -0
  47. package/dist/components/doc-operations/revision-operations/revisions/index.js +13 -0
  48. package/dist/constants/index.js +3 -1
  49. package/dist/context.js +8 -0
  50. package/package.json +1 -1
  51. package/public/locales/cs/sdoc-editor.json +23 -1
  52. package/public/locales/de/sdoc-editor.json +23 -1
  53. package/public/locales/en/sdoc-editor.json +23 -1
  54. package/public/locales/es/sdoc-editor.json +23 -1
  55. package/public/locales/es_AR/sdoc-editor.json +23 -1
  56. package/public/locales/es_MX/sdoc-editor.json +23 -1
  57. package/public/locales/fr/sdoc-editor.json +23 -1
  58. package/public/locales/it/sdoc-editor.json +23 -1
  59. package/public/locales/ru/sdoc-editor.json +24 -2
  60. package/public/locales/zh_CN/sdoc-editor.json +23 -1
  61. package/public/media/sdoc-editor-font/iconfont.css +548 -0
  62. package/public/media/sdoc-editor-font/iconfont.eot +0 -0
  63. package/public/media/sdoc-editor-font/iconfont.svg +18 -0
  64. package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
  65. package/public/media/sdoc-editor-font/iconfont.woff +0 -0
  66. package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
  67. package/public/media/sdoc-editor-font.css +42 -6
@@ -8,6 +8,7 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _reactstrap = require("reactstrap");
11
+ var _isHotkey = _interopRequireDefault(require("is-hotkey"));
11
12
  var _reactI18next = require("react-i18next");
12
13
  var _context = _interopRequireDefault(require("../../../../context"));
13
14
  var _localFiles = _interopRequireDefault(require("./local-files"));
@@ -27,6 +28,9 @@ const SelectSdocFileDialog = _ref => {
27
28
  t
28
29
  } = (0, _reactI18next.useTranslation)();
29
30
  const [currentSelectedFile, setCurrentSelectedFile] = (0, _react.useState)(null);
31
+ const [temSearchContent, setTemSearchContent] = (0, _react.useState)('');
32
+ const [searchContent, setSearchContent] = (0, _react.useState)('');
33
+ const [isOpenSearch, setIsOpenSearch] = (0, _react.useState)(false);
30
34
  const onSelectedFile = (0, _react.useCallback)(fileInfo => {
31
35
  setCurrentSelectedFile(fileInfo);
32
36
  }, []);
@@ -70,24 +74,83 @@ const SelectSdocFileDialog = _ref => {
70
74
  closeDialog();
71
75
  // eslint-disable-next-line react-hooks/exhaustive-deps
72
76
  }, [currentSelectedFile]);
77
+ const toggleSearch = (0, _react.useCallback)(() => {
78
+ setIsOpenSearch(prev => !prev);
79
+ }, []);
80
+ const handleSearchInputChange = (0, _react.useCallback)(e => {
81
+ const keyword = e.target.value.toLowerCase();
82
+ setTemSearchContent(keyword);
83
+ }, []);
84
+ const executeSearch = (0, _react.useCallback)(() => {
85
+ if (!temSearchContent.trim()) {
86
+ setSearchContent('');
87
+ return;
88
+ }
89
+ setSearchContent(temSearchContent);
90
+ }, [temSearchContent]);
91
+ const handleInputKeyDown = (0, _react.useCallback)(e => {
92
+ if ((0, _isHotkey.default)('enter', e)) {
93
+ e.preventDefault();
94
+ executeSearch();
95
+ }
96
+ if ((0, _isHotkey.default)('escape', e)) {
97
+ e.preventDefault();
98
+ e.stopPropagation();
99
+ setIsOpenSearch(!isOpenSearch);
100
+ }
101
+ }, [executeSearch, isOpenSearch]);
102
+ (0, _react.useEffect)(() => {
103
+ if (!isOpenSearch) {
104
+ setSearchContent('');
105
+ }
106
+ }, [isOpenSearch]);
73
107
  return /*#__PURE__*/_react.default.createElement(_reactstrap.Modal, {
74
- toggle: closeDialog,
75
108
  isOpen: true,
76
109
  autoFocus: false,
77
110
  zIndex: 1071,
78
111
  returnFocusAfterClose: false,
79
112
  className: "sdoc-file-select-dialog",
80
113
  contentClassName: "sdoc-file-select-modal"
81
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.ModalHeader, {
82
- toggle: closeDialog
83
- }, t(modalTitle)), /*#__PURE__*/_react.default.createElement(_reactstrap.ModalBody, {
114
+ }, /*#__PURE__*/_react.default.createElement("div", {
115
+ className: "modal-header-container"
116
+ }, /*#__PURE__*/_react.default.createElement("h5", {
117
+ className: "modal-title-container"
118
+ }, t(modalTitle)), /*#__PURE__*/_react.default.createElement("div", {
119
+ className: "search-container"
120
+ }, !isOpenSearch && /*#__PURE__*/_react.default.createElement("div", {
121
+ className: "search-icon-container"
122
+ }, /*#__PURE__*/_react.default.createElement("div", {
123
+ className: "sdocfont sdoc-find-replace sdoc-files-search-popover",
124
+ onClick: toggleSearch
125
+ })), isOpenSearch && /*#__PURE__*/_react.default.createElement("div", {
126
+ className: "sdoc-files-search-popover-container"
127
+ }, /*#__PURE__*/_react.default.createElement("div", {
128
+ className: "sdoc-search-wrapper"
129
+ }, /*#__PURE__*/_react.default.createElement("div", {
130
+ className: "sdocfont sdoc-find-replace sdoc-search"
131
+ }), /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
132
+ autoFocus: true,
133
+ className: "sdoc-search-input",
134
+ onKeyUp: handleInputKeyDown,
135
+ onChange: handleSearchInputChange,
136
+ id: "sdoc-search",
137
+ placeholder: t('Search')
138
+ }), /*#__PURE__*/_react.default.createElement("div", {
139
+ className: "sdocfont sdoc-close1 sdoc-close",
140
+ onClick: toggleSearch
141
+ })))), /*#__PURE__*/_react.default.createElement("div", {
142
+ className: "sdocfont sdoc-close1 sdoc-close-dialog",
143
+ onClick: closeDialog
144
+ })), /*#__PURE__*/_react.default.createElement(_reactstrap.ModalBody, {
84
145
  className: "p-0"
85
146
  }, /*#__PURE__*/_react.default.createElement("div", {
86
147
  className: "sdoc-file-select-container"
87
148
  }, /*#__PURE__*/_react.default.createElement(_localFiles.default, {
88
149
  fileType: _constants.FILE_TYPE[dialogType],
89
150
  onSelectedFile: onSelectedFile,
90
- toggle: closeDialog
151
+ toggle: closeDialog,
152
+ searchContent: searchContent,
153
+ isOpenSearch: isOpenSearch
91
154
  }), /*#__PURE__*/_react.default.createElement("div", {
92
155
  className: "sdoc-file-select-footer"
93
156
  }, /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
@@ -17,6 +17,8 @@
17
17
  white-space: nowrap;
18
18
  position: relative;
19
19
  padding-left: 2.8rem;
20
+ display: flex;
21
+ flex-direction: column;
20
22
  }
21
23
 
22
24
  .sdoc-files-tree .sdoc-file-info:hover {
@@ -34,6 +36,12 @@
34
36
  left: 0;
35
37
  }
36
38
 
39
+ .sdoc-file-icon-container .sdoc-file-img {
40
+ position: absolute;
41
+ width: 21.6px;
42
+ right: 1px;
43
+ }
44
+
37
45
  .sdoc-files-tree .sdoc-file-info .sdoc-file-icon {
38
46
  color: #9aa0ac;
39
47
  }
@@ -69,3 +77,37 @@
69
77
  color: #999;
70
78
  padding: 4px 20px;
71
79
  }
80
+
81
+ .sdoc-files-tree .sdoc-file-info .sdoc-search-folder-name {
82
+ font-size: 14px;
83
+ color: #7d7d7d;
84
+ }
85
+
86
+ .sdoc-folder-container.sdoc-folder-search-results .sdoc-file-info {
87
+ height: 59px;
88
+ width: 486px;
89
+ padding: 10px 50px;
90
+ flex-direction: column;
91
+ justify-content: center;
92
+ border-radius: 2px;
93
+ overflow: hidden;
94
+ text-overflow: ellipsis;
95
+ white-space: nowrap;
96
+ }
97
+
98
+ .sdoc-folder-container.sdoc-folder-search-results .sdoc-file-info .sdoc-file-icon-container .sdoc-file-img {
99
+ width: 36px;
100
+ height: 36px;
101
+ }
102
+
103
+ .sdoc-folder-container.sdoc-folder-search-results .sdoc-file-name,
104
+ .sdoc-search-folder-name {
105
+ height: 19.5px;
106
+ display: flex;
107
+ align-items: center;
108
+ }
109
+
110
+ .sdoc-files-tree .sdoc-file-search-no-result {
111
+ display: flex;
112
+ justify-content: center;
113
+ }
@@ -20,12 +20,16 @@ const LocalFiles = _ref => {
20
20
  onSelectedFile,
21
21
  toggle,
22
22
  fileType,
23
- t
23
+ t,
24
+ searchContent,
25
+ isOpenSearch
24
26
  } = _ref;
25
27
  const folderRef = (0, _react.useRef)(null);
26
28
  const [expandedFolder, setExpandedFolder] = (0, _react.useState)(new Set([]));
27
29
  const [currentActiveItem, setCurrentActiveItem] = (0, _react.useState)(null);
28
30
  const [treeData, setTreeData] = (0, _react.useState)([]);
31
+ const [hasSearchResult, setHasSearchResult] = (0, _react.useState)(false);
32
+ const [isCurrentLibrary, setIsCurrentLibrary] = (0, _react.useState)(false);
29
33
  const collapsedFolder = (0, _react.useCallback)((data, indexId) => {
30
34
  for (let i = 0; i < data.length; i++) {
31
35
  var _data$i;
@@ -45,6 +49,8 @@ const LocalFiles = _ref => {
45
49
  res.data.forEach(item => {
46
50
  item.indexId = _slugid.default.nice();
47
51
  });
52
+ setHasSearchResult(false);
53
+ setIsCurrentLibrary(true);
48
54
  // Open folder
49
55
  if (indexId && treeData.length > 0) {
50
56
  const newFileListData = (0, _helpers.addDataToTree)(treeData, indexId, res.data, p);
@@ -64,10 +70,15 @@ const LocalFiles = _ref => {
64
70
  // eslint-disable-next-line react-hooks/exhaustive-deps
65
71
  }, []);
66
72
  (0, _react.useEffect)(() => {
67
- const rootPath = '/';
68
- getTreeData(rootPath);
73
+ if (searchContent.trim() && isOpenSearch) {
74
+ getSearchFiles(searchContent, fileType);
75
+ }
76
+ if (!isOpenSearch || !searchContent.trim()) {
77
+ const rootPath = '/';
78
+ getTreeData(rootPath);
79
+ }
69
80
  // eslint-disable-next-line react-hooks/exhaustive-deps
70
- }, []);
81
+ }, [isOpenSearch, searchContent, isOpenSearch]);
71
82
  const onToggle = (0, _react.useCallback)(async (e, item, treeData) => {
72
83
  e.stopPropagation();
73
84
  if (expandedFolder.has(item.indexId)) {
@@ -88,20 +99,40 @@ const LocalFiles = _ref => {
88
99
  onSelectedFile(file);
89
100
  // eslint-disable-next-line react-hooks/exhaustive-deps
90
101
  }, []);
102
+ const getSearchFiles = (0, _react.useCallback)((searchContent, fileType) => {
103
+ return _context.default.getSearchFilesByFilename(searchContent, 1, 100, fileType).then(res => {
104
+ res.data.results.forEach(item => {
105
+ item.indexId = _slugid.default.nice();
106
+ item.type = 'file';
107
+ item.file_uuid = item.doc_uuid;
108
+ });
109
+ if (res.data.results.length === 0) {
110
+ setHasSearchResult(false);
111
+ } else {
112
+ setHasSearchResult(true);
113
+ }
114
+ setTreeData(res.data.results);
115
+ });
116
+ }, []);
91
117
  const renderFileTree = (0, _react.useCallback)(data => {
92
118
  if (!Array.isArray(data) || data.length === 0) return null;
93
119
  return data.map(item => {
94
- var _item$children, _item$children2;
120
+ var _item$fullpath, _item$children, _item$children2;
95
121
  if (!item) return null;
96
122
  const {
97
123
  type,
98
124
  indexId,
99
125
  name
100
126
  } = item;
127
+ const result = (_item$fullpath = item.fullpath) === null || _item$fullpath === void 0 ? void 0 : _item$fullpath.split('/').filter(Boolean);
128
+ item.fullpath && result.pop();
129
+ const folderPath = item.fullpath && result.join('/');
101
130
  const selected = (currentActiveItem === null || currentActiveItem === void 0 ? void 0 : currentActiveItem.indexId) === indexId;
102
131
  return /*#__PURE__*/_react.default.createElement("div", {
103
132
  key: indexId,
104
- className: "sdoc-folder-container"
133
+ className: (0, _classnames.default)('sdoc-folder-container', {
134
+ 'sdoc-folder-search-results': hasSearchResult === true
135
+ })
105
136
  }, type === 'dir' && /*#__PURE__*/_react.default.createElement("div", {
106
137
  ref: folderRef,
107
138
  className: "sdoc-folder"
@@ -133,19 +164,25 @@ const LocalFiles = _ref => {
133
164
  }, /*#__PURE__*/_react.default.createElement("div", {
134
165
  className: "sdoc-file-icon-container"
135
166
  }, /*#__PURE__*/_react.default.createElement("i", {
136
- className: (0, _classnames.default)('sdoc-file-icon sdocfont', {
137
- 'sdoc-document': fileType === 'sdoc'
138
- }, {
139
- 'sdoc-link-file': fileType === 'file'
167
+ className: (0, _classnames.default)('sdoc-file-icon', {
168
+ 'sdocfont sdoc-link-file': fileType === 'file'
140
169
  })
170
+ }), fileType === 'sdoc' && /*#__PURE__*/_react.default.createElement("img", {
171
+ className: "sdoc-file-img",
172
+ src: (0, _helpers.sdocFileIcon)(),
173
+ alt: ""
141
174
  })), /*#__PURE__*/_react.default.createElement("span", {
142
175
  className: "sdoc-file-name"
143
- }, name)));
176
+ }, name), item.fullpath && folderPath.length !== 0 && /*#__PURE__*/_react.default.createElement("span", {
177
+ className: "sdoc-search-folder-name"
178
+ }, folderPath)));
144
179
  });
145
180
  // eslint-disable-next-line react-hooks/exhaustive-deps
146
181
  }, [treeData, currentActiveItem, expandedFolder]);
147
182
  return /*#__PURE__*/_react.default.createElement("div", {
148
183
  className: "sdoc-files-tree"
149
- }, renderFileTree(treeData));
184
+ }, renderFileTree(treeData), isOpenSearch && !hasSearchResult && !isCurrentLibrary && /*#__PURE__*/_react.default.createElement("div", {
185
+ className: "sdoc-file-search-no-result"
186
+ }, t('No_results')));
150
187
  };
151
188
  var _default = exports.default = (0, _reactI18next.withTranslation)('sdoc-editor')(LocalFiles);
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WIKI_LINK = exports.VIDEO = exports.UNORDERED_LIST = exports.TWO_COLUMN = exports.TOP_LEVEL_TYPES = exports.TITLE = exports.THREE_COLUMN = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.SUBTITLE = exports.SEATABLE_TABLE = exports.SEATABLE_COLUMN = exports.SDOC_LINK = exports.QUICK_INSERT = exports.PARAGRAPH = exports.ORDERED_LIST = exports.MULTI_COLUMN = exports.MENTION_TEMP = exports.MENTION = exports.LIST_ITEM = exports.LINK = exports.INLINE_LEVEL_TYPES = exports.IMAGE_BLOCK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.FOUR_COLUMN = exports.FONT_SIZE_REDUCE = exports.FONT_SIZE_INCREASE = exports.FONT_SIZE = exports.FIVE_COLUMN = exports.FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.CALL_OUT = exports.BLOCKQUOTE = void 0;
6
+ exports.WIKI_LINK = exports.VIDEO = exports.UNORDERED_LIST = exports.TWO_COLUMN = exports.TOP_LEVEL_TYPES = exports.TITLE = exports.THREE_COLUMN = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.SUBTITLE = exports.SEATABLE_TABLE = exports.SEATABLE_COLUMN = exports.SDOC_LINK = exports.QUICK_INSERT = exports.PARAGRAPH = exports.ORDERED_LIST = exports.MULTI_COLUMN = exports.MENTION_TEMP = exports.MENTION = exports.LIST_ITEM = exports.LINK = exports.INLINE_LEVEL_TYPES = exports.IMAGE_BLOCK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.FOUR_COLUMN = exports.FONT_SIZE_REDUCE = exports.FONT_SIZE_INCREASE = exports.FONT_SIZE = exports.FIVE_COLUMN = exports.FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.CALL_OUT = exports.BLOCKQUOTE = exports.ASK_AI = void 0;
7
7
  const BLOCKQUOTE = exports.BLOCKQUOTE = 'blockquote';
8
8
  const TITLE = exports.TITLE = 'title';
9
9
  const SUBTITLE = exports.SUBTITLE = 'subtitle';
@@ -44,6 +44,7 @@ const FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK_INSET_INPUT_TEMP = 'file_li
44
44
  const QUICK_INSERT = exports.QUICK_INSERT = 'quick_insert';
45
45
  const SEATABLE_COLUMN = exports.SEATABLE_COLUMN = 'seatable_column';
46
46
  const SEATABLE_TABLE = exports.SEATABLE_TABLE = 'seatable_table';
47
+ const ASK_AI = exports.ASK_AI = 'ask_ai';
47
48
 
48
49
  // font
49
50
  const FONT_SIZE = exports.FONT_SIZE = 'font-size';
@@ -197,7 +197,7 @@ const MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = {
197
197
  },
198
198
  [_elementType.SDOC_LINK]: {
199
199
  id: `sdoc_${_elementType.SDOC_LINK}`,
200
- iconClass: 'sdocfont sdoc-document',
200
+ iconClass: 'sdocfont sdoc-document-link',
201
201
  text: 'Link_sdoc'
202
202
  },
203
203
  [_elementType.FILE_LINK]: {
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.someNode = exports.isTopLevelListItem = exports.isTextNode = exports.isStartPoint = exports.isSelectionAtBlockStart = exports.isSelectionAtBlockEnd = exports.isRangeInSameBlock = exports.isRangeAcrossBlocks = exports.isMultiLevelList = exports.isLastNode = exports.isLastChild = exports.isHasImg = exports.isFirstChild = exports.isEndPoint = exports.isEmptyArticle = exports.isCurrentLineHasText = exports.isCurrentLineEmpty = exports.isBlockTextEmptyAfterSelection = exports.isBlockAboveEmpty = exports.isAncestorEmpty = exports.getTopLevelBlockNode = exports.getStartPoint = exports.getSelectedNodeEntryByType = exports.getSelectedNodeByTypes = exports.getSelectedNodeByType = exports.getSelectedElems = exports.getQueryOptions = exports.getPreviousPath = exports.getPrevNode = exports.getPointBefore = exports.getParentNode = exports.getNodes = exports.getNodeType = exports.getNodeEntries = exports.getNodeById = exports.getNode = exports.getNextSiblingNodes = exports.getNextNode = exports.getLastChildPath = exports.getLastChild = exports.getEndPoint = exports.getEditorString = exports.getDeepInlineChildren = exports.getCurrentNode = exports.getCommonNode = exports.getChildren = exports.getAboveNode = exports.getAboveBlockNode = exports.findPath = exports.findNode = exports.findDescendant = void 0;
7
+ exports.someNode = exports.isTopLevelListItem = exports.isTextNode = exports.isStartPoint = exports.isSelectionAtBlockStart = exports.isSelectionAtBlockEnd = exports.isRangeInSameBlock = exports.isRangeAcrossBlocks = exports.isMultiLevelList = exports.isLastNode = exports.isLastChild = exports.isHasImg = exports.isFirstChild = exports.isEndPoint = exports.isEmptyArticle = exports.isCurrentLineHasText = exports.isCurrentLineEmpty = exports.isContainsVoidElement = exports.isBlockTextEmptyAfterSelection = exports.isBlockAboveEmpty = exports.isAncestorEmpty = exports.getTopLevelBlockNode = exports.getStartPoint = exports.getSelectedNodeEntryByType = exports.getSelectedNodeByTypes = exports.getSelectedNodeByType = exports.getSelectedElems = exports.getQueryOptions = exports.getPreviousPath = exports.getPrevNode = exports.getPointBefore = exports.getParentNode = exports.getNodes = exports.getNodeType = exports.getNodeEntries = exports.getNodeById = exports.getNode = exports.getNextSiblingNodes = exports.getNextNode = exports.getLastChildPath = exports.getLastChild = exports.getEndPoint = exports.getEditorString = exports.getDeepInlineChildren = exports.getCurrentNode = exports.getCommonNode = exports.getChildren = exports.getAboveNode = exports.getAboveBlockNode = exports.findPath = exports.findNode = exports.findDescendant = void 0;
8
8
  var _slate = require("@seafile/slate");
9
9
  var _slateReact = require("@seafile/slate-react");
10
10
  var _utils = require("../utils");
@@ -553,6 +553,17 @@ const isEmptyArticle = editor => {
553
553
  return false;
554
554
  };
555
555
  exports.isEmptyArticle = isEmptyArticle;
556
+ const isContainsVoidElement = root => {
557
+ const nodes = _slate.Node.nodes(root);
558
+ for (const nodeEntry of nodes) {
559
+ const [n] = nodeEntry;
560
+ if ((n === null || n === void 0 ? void 0 : n.type) === _constants.IMAGE) {
561
+ return true;
562
+ }
563
+ }
564
+ return false;
565
+ };
566
+ exports.isContainsVoidElement = isContainsVoidElement;
556
567
  const getStartPoint = (editor, at) => {
557
568
  return _slate.Editor.start(editor, at);
558
569
  };
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = AIIcon;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _sdocAskAi = _interopRequireDefault(require("../../../../assets/images/sdoc-ask-ai.png"));
10
+ var _classnames = _interopRequireDefault(require("classnames"));
11
+ var _reactI18next = require("react-i18next");
12
+ require("./style.css");
13
+ function AIIcon(_ref) {
14
+ let {
15
+ className = 'big'
16
+ } = _ref;
17
+ const {
18
+ t
19
+ } = (0, _reactI18next.useTranslation)('sdoc-editor');
20
+ const clazznames = (0, _classnames.default)('sdoc-ask-ai-icon', className);
21
+ return /*#__PURE__*/_react.default.createElement("img", {
22
+ className: clazznames,
23
+ src: _sdocAskAi.default,
24
+ alt: t('Ask_AI')
25
+ });
26
+ }
@@ -0,0 +1,22 @@
1
+ .sdoc-ask-ai-icon.big {
2
+ position: absolute;
3
+ width: 18px;
4
+ height: 18px;
5
+ left: 16px;
6
+ }
7
+
8
+ .sdoc-ask-ai-icon.small {
9
+ width: 12px;
10
+ height: 13px;
11
+ margin-right: 4px;
12
+ }
13
+
14
+ .sdoc-ai-result-header div {
15
+ display: flex;
16
+ }
17
+
18
+ .sdoc-ai-result-header .sdoc-ask-ai-icon.big {
19
+ position: relative;
20
+ left: 0;
21
+ margin-right: 10px;
22
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = AIContextMenu;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _menuItem = _interopRequireDefault(require("./menu-item"));
11
+ var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
12
+ var _constants = require("../../../../constants");
13
+ var _constants2 = require("../../../constants");
14
+ require("./style.css");
15
+ function AIContextMenu(_ref) {
16
+ let {
17
+ isRichEditor
18
+ } = _ref;
19
+ const onAiClick = (0, _react.useCallback)(event => {
20
+ const eventBus = _eventBus.default.getInstance();
21
+ eventBus.dispatch(_constants.INTERNAL_EVENT.INSERT_ELEMENT, {
22
+ type: _constants2.ELEMENT_TYPE.ASK_AI,
23
+ slateNode: null
24
+ });
25
+ }, []);
26
+ const aiProps = {
27
+ id: 'context-toolbar-ai',
28
+ isRichEditor,
29
+ className: 'menu-group-item sdoc-ask-ai-menu-container',
30
+ disabled: false,
31
+ isActive: false,
32
+ onMouseDown: onAiClick,
33
+ 'iconClass': 'sdocfont sdoc-ask-ai',
34
+ 'text': 'Ask_AI',
35
+ 'ariaLabel': 'Ask_AI',
36
+ 'type': 'sdoc-ask-ai'
37
+ };
38
+ return /*#__PURE__*/_react.default.createElement(_menuItem.default, aiProps);
39
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = AIDropdownMenu;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
11
+ var _constants = require("../../../../constants");
12
+ var _constants2 = require("../../../constants");
13
+ var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
14
+ function AIDropdownMenu(_ref) {
15
+ let {
16
+ slateNode
17
+ } = _ref;
18
+ const onAiClick = (0, _react.useCallback)(() => {
19
+ const eventBus = _eventBus.default.getInstance();
20
+ eventBus.dispatch(_constants.INTERNAL_EVENT.INSERT_ELEMENT, {
21
+ type: _constants2.ELEMENT_TYPE.ASK_AI,
22
+ slateNode
23
+ });
24
+ }, [slateNode]);
25
+ const aiProps = {
26
+ id: 'side-toolbar-ai',
27
+ 'iconClass': 'sdocfont sdoc-ask-ai',
28
+ 'text': 'Ask_AI',
29
+ 'type': 'sdoc-ask-ai'
30
+ };
31
+ return /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
32
+ menuConfig: aiProps,
33
+ onClick: onAiClick
34
+ });
35
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "AIContextMenu", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _aiContextMenu.default;
11
+ }
12
+ });
13
+ Object.defineProperty(exports, "AIDropdownMenu", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _aiDropdownMenu.default;
17
+ }
18
+ });
19
+ var _aiContextMenu = _interopRequireDefault(require("./ai-context-menu"));
20
+ var _aiDropdownMenu = _interopRequireDefault(require("./ai-dropdown-menu"));
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _reactI18next = require("react-i18next");
11
+ var _classnames = _interopRequireDefault(require("classnames"));
12
+ var _tooltip = _interopRequireDefault(require("../../../../../components/tooltip"));
13
+ var _aiIcon = _interopRequireDefault(require("../ai-icon"));
14
+ const MenuItem = _ref => {
15
+ let {
16
+ disabled,
17
+ isActive,
18
+ isRichEditor,
19
+ type,
20
+ onMouseDown,
21
+ className,
22
+ iconClass,
23
+ id,
24
+ text,
25
+ ariaLabel
26
+ } = _ref;
27
+ const {
28
+ t
29
+ } = (0, _reactI18next.useTranslation)();
30
+ const onClick = (0, _react.useCallback)(event => {
31
+ if (disabled) return;
32
+ onMouseDown(event, type);
33
+
34
+ // eslint-disable-next-line react-hooks/exhaustive-deps
35
+ }, [disabled, type]);
36
+ const validClassName = (0, _classnames.default)('', className, {
37
+ 'btn btn-icon btn-secondary btn-active': !isRichEditor,
38
+ 'rich-icon-btn': isRichEditor,
39
+ 'rich-icon-btn-disabled': isRichEditor && disabled,
40
+ 'rich-icon-btn-hover': isRichEditor && !disabled
41
+ });
42
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("button", {
43
+ id: id,
44
+ type: "button",
45
+ "aria-label": ariaLabel,
46
+ className: validClassName,
47
+ disabled: disabled,
48
+ "data-active": isActive,
49
+ onClick: onClick
50
+ }, /*#__PURE__*/_react.default.createElement("span", {
51
+ className: "sdoc-ask-ai-menu-item"
52
+ }, /*#__PURE__*/_react.default.createElement(_aiIcon.default, {
53
+ className: "small"
54
+ }), /*#__PURE__*/_react.default.createElement("span", null, t(text)))), /*#__PURE__*/_react.default.createElement(_tooltip.default, {
55
+ target: id
56
+ }, t(text)));
57
+ };
58
+ MenuItem.defaultProps = {
59
+ isRichEditor: true,
60
+ className: 'menu-group-item'
61
+ };
62
+ var _default = exports.default = MenuItem;
@@ -0,0 +1,3 @@
1
+ .menu-group-item.sdoc-ask-ai-menu-container {
2
+ width: 80px;
3
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _reactstrap = require("reactstrap");
10
+ var _constants = require("../constants");
11
+ var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
12
+ const AdjustSubMenu = _ref => {
13
+ let {
14
+ target,
15
+ onMoreDetailsClick,
16
+ onMoreConciseClick,
17
+ onMoreVividClick
18
+ } = _ref;
19
+ return /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
20
+ boundariesElement: "viewport",
21
+ target: target,
22
+ className: "ai-adjust-sub-menu sdoc-sub-dropdown-menu sdoc-dropdown-menu",
23
+ trigger: "hover",
24
+ placement: "right-start",
25
+ hideArrow: true,
26
+ fade: false
27
+ }, /*#__PURE__*/_react.default.createElement("div", {
28
+ className: "sdoc-dropdown-menu-container"
29
+ }, /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
30
+ menuConfig: _constants.OPERATION_MENUS_CONFIG.MORE_DETAILS,
31
+ onClick: onMoreDetailsClick
32
+ }), /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
33
+ menuConfig: _constants.OPERATION_MENUS_CONFIG.MORE_CONCISE,
34
+ onClick: onMoreConciseClick
35
+ }), /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
36
+ menuConfig: _constants.OPERATION_MENUS_CONFIG.MORE_VIVID,
37
+ onClick: onMoreVividClick
38
+ })));
39
+ };
40
+ var _default = exports.default = AdjustSubMenu;