@seafile/sdoc-editor 1.0.197 → 1.0.198-test0.2

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 (24) hide show
  1. package/dist/basic-sdk/assets/css/sdoc-editor-plugins.css +4 -0
  2. package/dist/basic-sdk/extension/commons/insert-element-dialog/index.js +14 -0
  3. package/dist/basic-sdk/extension/commons/select-file-dialog/index.js +30 -3
  4. package/dist/basic-sdk/extension/commons/select-file-dialog/local-files/index.js +2 -1
  5. package/dist/basic-sdk/extension/constants/element-type.js +2 -1
  6. package/dist/basic-sdk/extension/constants/index.js +10 -3
  7. package/dist/basic-sdk/extension/constants/menus-config.js +5 -0
  8. package/dist/basic-sdk/extension/plugins/video/menu/index.js +1 -1
  9. package/dist/basic-sdk/extension/plugins/whiteboard/helpers.js +60 -0
  10. package/dist/basic-sdk/extension/plugins/whiteboard/index.css +5 -0
  11. package/dist/basic-sdk/extension/plugins/whiteboard/index.js +20 -0
  12. package/dist/basic-sdk/extension/plugins/whiteboard/menu/index.js +63 -0
  13. package/dist/basic-sdk/extension/plugins/whiteboard/plugin.js +28 -0
  14. package/dist/basic-sdk/extension/plugins/whiteboard/render-elem.js +39 -0
  15. package/dist/basic-sdk/extension/render/custom-element.js +7 -0
  16. package/dist/basic-sdk/extension/render/render-comment-editor-element.js +9 -0
  17. package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.js +2 -1
  18. package/dist/basic-sdk/extension/toolbar/insert-element-toolbar/index.js +1 -1
  19. package/dist/basic-sdk/extension/toolbar/side-toolbar/helpers.js +1 -1
  20. package/dist/basic-sdk/extension/toolbar/side-toolbar/insert-block-menu.js +3 -2
  21. package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.css +5 -0
  22. package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.js +4 -2
  23. package/dist/constants/index.js +2 -0
  24. package/package.json +1 -1
@@ -158,6 +158,10 @@
158
158
  padding: 8px 0;
159
159
  }
160
160
 
161
+ .sdoc-insert-whiteboard-menu-popover-container {
162
+ padding: 8px 0;
163
+ }
164
+
161
165
  /* caret */
162
166
  .sdoc-editor__article .caret-item .caret-name::before {
163
167
  content: attr(name);
@@ -34,6 +34,7 @@ const InsertElementDialog = _ref => {
34
34
  const [insertLinkCallback, setInsertLinkCallback] = (0, _react.useState)(null);
35
35
  const [validEditor, setValidEditor] = (0, _react.useState)(editor);
36
36
  const [linkTitle, setLinkTitle] = (0, _react.useState)('');
37
+ const [insertWhiteboardFile, setInsertWhiteboardFile] = (0, _react.useState)(null);
37
38
  const [handleSubmit, setHandleSubmit] = (0, _react.useState)(() => void 0);
38
39
  const {
39
40
  t
@@ -90,6 +91,7 @@ const InsertElementDialog = _ref => {
90
91
  slateNode,
91
92
  insertFileLinkCallback,
92
93
  insertSdocFileLinkCallback,
94
+ insertWhiteboard,
93
95
  editor: paramEditor,
94
96
  linkTitle,
95
97
  // link shortcut wrapping link
@@ -103,6 +105,7 @@ const InsertElementDialog = _ref => {
103
105
  insertSdocFileLinkCallback,
104
106
  insertFileLinkCallback
105
107
  });
108
+ setInsertWhiteboardFile(insertWhiteboard);
106
109
  setLinkTitle(linkTitle);
107
110
  setHandleSubmit(handleSubmit);
108
111
  // Apply for comment editor, as it has a different editor instance
@@ -124,6 +127,7 @@ const InsertElementDialog = _ref => {
124
127
  setElement('');
125
128
  setDialogType('');
126
129
  setInsertLinkCallback(null);
130
+ setInsertWhiteboardFile(null);
127
131
  setValidEditor(null);
128
132
  setLinkTitle('');
129
133
  }, []);
@@ -169,6 +173,16 @@ const InsertElementDialog = _ref => {
169
173
  };
170
174
  return /*#__PURE__*/_react.default.createElement(_index.default, fileLinkProps);
171
175
  }
176
+ case _constants2.ELEMENT_TYPE.WHITEBOARD:
177
+ {
178
+ const whiteboardProps = {
179
+ editor: validEditor,
180
+ dialogType,
181
+ insertWhiteboardFile,
182
+ closeDialog
183
+ };
184
+ return /*#__PURE__*/_react.default.createElement(_index.default, whiteboardProps);
185
+ }
172
186
  case _constants2.LOCAL_IMAGE:
173
187
  {
174
188
  return /*#__PURE__*/_react.default.createElement("input", {
@@ -21,9 +21,9 @@ const SelectSdocFileDialog = _ref => {
21
21
  editor,
22
22
  dialogType,
23
23
  closeDialog,
24
- insertLinkCallback
24
+ insertLinkCallback,
25
+ insertWhiteboardFile
25
26
  } = _ref;
26
- const modalTitle = dialogType === _constants.ELEMENT_TYPE.FILE_LINK ? 'Select_file' : 'Select_sdoc_document';
27
27
  const {
28
28
  t
29
29
  } = (0, _reactI18next.useTranslation)('sdoc-editor');
@@ -31,6 +31,20 @@ const SelectSdocFileDialog = _ref => {
31
31
  const [temSearchContent, setTemSearchContent] = (0, _react.useState)('');
32
32
  const [searchContent, setSearchContent] = (0, _react.useState)('');
33
33
  const [isOpenSearch, setIsOpenSearch] = (0, _react.useState)(false);
34
+ let modalTitle;
35
+ switch (dialogType) {
36
+ case _constants.ELEMENT_TYPE.FILE_LINK:
37
+ modalTitle = 'Select_file';
38
+ break;
39
+ case _constants.ELEMENT_TYPE.SDOC_LINK:
40
+ modalTitle = 'Select_sdoc_document';
41
+ break;
42
+ case _constants.ELEMENT_TYPE.WHITEBOARD:
43
+ modalTitle = 'Select_whiteboard_document';
44
+ break;
45
+ default:
46
+ break;
47
+ }
34
48
  const onSelectedFile = (0, _react.useCallback)(fileInfo => {
35
49
  setCurrentSelectedFile(fileInfo);
36
50
  }, []);
@@ -44,7 +58,20 @@ const SelectSdocFileDialog = _ref => {
44
58
  } else {
45
59
  insertSdocFileLinkCallback && insertSdocFileLinkCallback(editor, fileInfo.name, fileInfo.file_uuid);
46
60
  }
47
- }, [insertLinkCallback, dialogType, editor]);
61
+ switch (dialogType) {
62
+ case _constants.ELEMENT_TYPE.FILE_LINK:
63
+ insertFileLinkCallback && insertFileLinkCallback(editor, fileInfo.name, fileInfo.file_uuid);
64
+ break;
65
+ case _constants.ELEMENT_TYPE.SDOC_LINK:
66
+ insertSdocFileLinkCallback && insertSdocFileLinkCallback(editor, fileInfo.name, fileInfo.file_uuid);
67
+ break;
68
+ case _constants.ELEMENT_TYPE.WHITEBOARD:
69
+ insertWhiteboardFile && insertWhiteboardFile(editor, fileInfo.name, fileInfo.file_uuid);
70
+ break;
71
+ default:
72
+ break;
73
+ }
74
+ }, [insertLinkCallback, insertWhiteboardFile, dialogType, editor]);
48
75
  const onSubmit = (0, _react.useCallback)(() => {
49
76
  if (!currentSelectedFile) return;
50
77
  const {
@@ -46,6 +46,7 @@ const LocalFiles = _ref => {
46
46
  }, []);
47
47
  const getTreeData = (0, _react.useCallback)((p, indexId, treeData) => {
48
48
  return _context.default.getSdocLocalFiles(p, fileType).then(res => {
49
+ console.log(9, res);
49
50
  res.data.forEach(item => {
50
51
  item.indexId = _slugid.default.nice();
51
52
  });
@@ -155,7 +156,7 @@ const LocalFiles = _ref => {
155
156
  className: "sdoc-folder-children"
156
157
  }, ((_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) === 0 && /*#__PURE__*/_react.default.createElement("div", {
157
158
  className: "sdoc-folder-children-empty"
158
- }, `(${t('Empty')})`), ((_item$children2 = item.children) === null || _item$children2 === void 0 ? void 0 : _item$children2.length) > 0 && renderFileTree(item.children))), type === 'file' && /*#__PURE__*/_react.default.createElement("div", {
159
+ }, `(${t('Empty')})`), ((_item$children2 = item.children) === null || _item$children2 === void 0 ? void 0 : _item$children2.length) > 0 && renderFileTree(item.children))), ['file', 'draw'].includes(type) && /*#__PURE__*/_react.default.createElement("div", {
159
160
  className: (0, _classnames.default)('sdoc-file-info', {
160
161
  'active': selected
161
162
  }),
@@ -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 = exports.ASK_AI = void 0;
6
+ exports.WIKI_LINK = exports.WHITEBOARD = 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';
@@ -42,6 +42,7 @@ const MENTION = exports.MENTION = 'mention';
42
42
  const MENTION_TEMP = exports.MENTION_TEMP = 'mention_temp';
43
43
  const FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK_INSET_INPUT_TEMP = 'file_link_insert_input_temp';
44
44
  const QUICK_INSERT = exports.QUICK_INSERT = 'quick_insert';
45
+ const WHITEBOARD = exports.WHITEBOARD = 'whiteboard';
45
46
  const SEATABLE_COLUMN = exports.SEATABLE_COLUMN = 'seatable_column';
46
47
  const SEATABLE_TABLE = exports.SEATABLE_TABLE = 'seatable_table';
47
48
  const ASK_AI = exports.ASK_AI = 'ask_ai';
@@ -484,6 +484,12 @@ Object.defineProperty(exports, "VIDEO", {
484
484
  return _elementType.VIDEO;
485
485
  }
486
486
  });
487
+ Object.defineProperty(exports, "WHITEBOARD", {
488
+ enumerable: true,
489
+ get: function () {
490
+ return _elementType.WHITEBOARD;
491
+ }
492
+ });
487
493
  Object.defineProperty(exports, "WIN_HOTKEYS", {
488
494
  enumerable: true,
489
495
  get: function () {
@@ -532,9 +538,10 @@ const LIST_ITEM_SUPPORTED_TRANSFORMATION = exports.LIST_ITEM_SUPPORTED_TRANSFORM
532
538
  const ADD_POSITION_OFFSET_TYPE = exports.ADD_POSITION_OFFSET_TYPE = [_elementType.PARAGRAPH, _elementType.SUBTITLE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CHECK_LIST_ITEM, _elementType.IMAGE_BLOCK];
533
539
  const FILE_TYPE = exports.FILE_TYPE = {
534
540
  [_elementType.FILE_LINK]: 'file',
535
- [_elementType.SDOC_LINK]: 'sdoc'
541
+ [_elementType.SDOC_LINK]: 'sdoc',
542
+ [_elementType.WHITEBOARD]: 'draw'
536
543
  };
537
- const SUPPORTED_SIDE_OPERATION_TYPE = exports.SUPPORTED_SIDE_OPERATION_TYPE = [_elementType.PARAGRAPH, _elementType.SUBTITLE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CHECK_LIST_ITEM, _elementType.CODE_BLOCK, _elementType.TABLE, _elementType.BLOCKQUOTE, _elementType.CALL_OUT, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.SEATABLE_TABLE, _elementType.MULTI_COLUMN];
544
+ const SUPPORTED_SIDE_OPERATION_TYPE = exports.SUPPORTED_SIDE_OPERATION_TYPE = [_elementType.PARAGRAPH, _elementType.SUBTITLE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CHECK_LIST_ITEM, _elementType.CODE_BLOCK, _elementType.TABLE, _elementType.BLOCKQUOTE, _elementType.CALL_OUT, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.WHITEBOARD, _elementType.SEATABLE_TABLE, _elementType.MULTI_COLUMN];
538
545
  const MOUSE_ENTER_EVENT_DISABLED_MAP = exports.MOUSE_ENTER_EVENT_DISABLED_MAP = {
539
546
  [_elementType.PARAGRAPH]: [_elementType.CALL_OUT],
540
547
  [_elementType.TITLE]: [_elementType.CALL_OUT],
@@ -552,4 +559,4 @@ const MOUSE_ENTER_EVENT_DISABLED_MAP = exports.MOUSE_ENTER_EVENT_DISABLED_MAP =
552
559
  [_elementType.HEADER6]: [_elementType.CALL_OUT],
553
560
  [_elementType.CALL_OUT]: [_elementType.CALL_OUT]
554
561
  };
555
- const ROOT_ELEMENT_TYPES = exports.ROOT_ELEMENT_TYPES = [_elementType.PARAGRAPH, _elementType.TITLE, _elementType.SUBTITLE, _elementType.CHECK_LIST_ITEM, _elementType.ORDERED_LIST, _elementType.UNORDERED_LIST, _elementType.BLOCKQUOTE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CALL_OUT, _elementType.TABLE, _elementType.CODE_BLOCK, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.SEATABLE_TABLE];
562
+ const ROOT_ELEMENT_TYPES = exports.ROOT_ELEMENT_TYPES = [_elementType.PARAGRAPH, _elementType.TITLE, _elementType.SUBTITLE, _elementType.CHECK_LIST_ITEM, _elementType.ORDERED_LIST, _elementType.UNORDERED_LIST, _elementType.BLOCKQUOTE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CALL_OUT, _elementType.TABLE, _elementType.CODE_BLOCK, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.SEATABLE_TABLE, _elementType.WHITEBOARD];
@@ -233,6 +233,11 @@ const MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = {
233
233
  iconClass: 'sdocfont sdoc-seatable-table',
234
234
  type: _elementType.SEATABLE_TABLE,
235
235
  text: 'SeaTable_table'
236
+ },
237
+ [_elementType.WHITEBOARD]: {
238
+ id: `sdoc_${_elementType.WHITEBOARD}`,
239
+ iconClass: 'sdocfont sdoc-document',
240
+ text: 'Whiteboard'
236
241
  }
237
242
  };
238
243
 
@@ -44,7 +44,7 @@ const VideoMenu = _ref => {
44
44
  hideArrow: true,
45
45
  fade: false
46
46
  }, /*#__PURE__*/_react.default.createElement("div", {
47
- className: "sdoc-insert-video-menu-popover-container sdoc-dropdown-menu-container 333"
47
+ className: "sdoc-insert-video-menu-popover-container sdoc-dropdown-menu-container"
48
48
  }, /*#__PURE__*/_react.default.createElement("div", {
49
49
  className: "sdoc-dropdown-menu-item",
50
50
  onClick: openLocalVideoDialog
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.onCreateWhiteboardFile = exports.isInsertWhiteboardMenuDisabled = exports.insertWhiteboard = void 0;
8
+ var _slate = require("@seafile/slate");
9
+ var _core = require("../../core");
10
+ var _constants = require("../../constants");
11
+ var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
12
+ var _constants2 = require("../../../../constants");
13
+ const isInsertWhiteboardMenuDisabled = (editor, readonly) => {
14
+ if (readonly) return true;
15
+ const {
16
+ selection
17
+ } = editor;
18
+ if (selection === null) return true;
19
+ if (!_slate.Range.isCollapsed(selection)) return true;
20
+ const [match] = _slate.Editor.nodes(editor, {
21
+ match: n => {
22
+ let type = (0, _core.getNodeType)(n);
23
+ if (!type && (0, _core.isTextNode)(n) && n.id) {
24
+ const parentNode = (0, _core.getParentNode)(editor.children, n.id);
25
+ type = (0, _core.getNodeType)(parentNode);
26
+ }
27
+ if (type === _constants.CODE_BLOCK) return true;
28
+ if (type.startsWith('header')) return true;
29
+ if (type === _constants.TITLE) return true;
30
+ if (type === _constants.SUBTITLE) return true;
31
+ if (type === _constants.LIST_ITEM) return true;
32
+ if (type === _constants.CHECK_LIST_ITEM) return true;
33
+ if (type === _constants.MULTI_COLUMN) return true;
34
+ if (type === _constants.BLOCKQUOTE) return true;
35
+ if (type === _constants.CALL_OUT) return true;
36
+ if (_slate.Editor.isVoid(editor, n)) return true;
37
+ return false;
38
+ },
39
+ universal: true
40
+ });
41
+ if (match) return true;
42
+ return false;
43
+ };
44
+ exports.isInsertWhiteboardMenuDisabled = isInsertWhiteboardMenuDisabled;
45
+ const insertWhiteboard = () => {};
46
+ exports.insertWhiteboard = insertWhiteboard;
47
+ const onCreateWhiteboardFile = editor => {
48
+ // e.stopPropagation();
49
+ const eventBus = _eventBus.default.getInstance();
50
+ const external_props = {
51
+ insertWhiteboard,
52
+ fileType: 'draw',
53
+ editor
54
+ };
55
+ console.log(2, external_props.insertWhiteboard);
56
+ eventBus.dispatch(_constants2.EXTERNAL_EVENT.CREATE_WHITEBOARD_FILE, {
57
+ ...external_props
58
+ });
59
+ };
60
+ exports.onCreateWhiteboardFile = onCreateWhiteboardFile;
@@ -0,0 +1,5 @@
1
+ .sdoc-whiteboard-container {
2
+ width: 670px;
3
+ height: auto;
4
+ border: 1px solid #ccc;
5
+ }
@@ -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
+ exports.default = void 0;
8
+ var _constants = require("../../constants");
9
+ var _plugin = _interopRequireDefault(require("./plugin"));
10
+ var _menu = _interopRequireDefault(require("./menu"));
11
+ var _renderElem = require("./render-elem");
12
+ require("./index.css");
13
+ const WhiteboardPlugin = {
14
+ type: _constants.WHITEBOARD,
15
+ nodeType: 'element',
16
+ editorMenus: [_menu.default],
17
+ editorPlugin: _plugin.default,
18
+ renderElements: [_renderElem.renderWhiteboard]
19
+ };
20
+ var _default = exports.default = WhiteboardPlugin;
@@ -0,0 +1,63 @@
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 _reactstrap = require("reactstrap");
12
+ var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
13
+ var _helpers = require("../helpers");
14
+ var _constants = require("../../../constants");
15
+ var _constants2 = require("../../../../constants");
16
+ const WhiteboardMenu = _ref => {
17
+ let {
18
+ editor,
19
+ readonly,
20
+ eventBus,
21
+ toggle
22
+ } = _ref;
23
+ const disabled = (0, _helpers.isInsertWhiteboardMenuDisabled)(editor, readonly);
24
+ const menuConfig = _constants.MENUS_CONFIG_MAP[_constants.WHITEBOARD];
25
+ const {
26
+ t
27
+ } = (0, _reactI18next.useTranslation)();
28
+ const onCreateFile = () => {
29
+ (0, _helpers.onCreateWhiteboardFile)(editor);
30
+ };
31
+ const openSelectSdocFileDialog = (0, _react.useCallback)(() => {
32
+ eventBus.dispatch(_constants2.INTERNAL_EVENT.INSERT_ELEMENT, {
33
+ type: _constants.ELEMENT_TYPE.WHITEBOARD,
34
+ insertWhiteboard: _helpers.insertWhiteboard
35
+ });
36
+ toggle && toggle();
37
+
38
+ // eslint-disable-next-line react-hooks/exhaustive-deps
39
+ }, [toggle, eventBus]);
40
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
41
+ disabled: disabled,
42
+ menuConfig: menuConfig,
43
+ className: "pr-2"
44
+ }, !disabled && /*#__PURE__*/_react.default.createElement("i", {
45
+ className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
46
+ })), !disabled && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
47
+ target: menuConfig.id,
48
+ trigger: "hover",
49
+ className: "sdoc-menu-popover sdoc-dropdown-menu sdoc-sub-dropdown-menu sdoc-insert-whiteboard-menu-popover",
50
+ placement: "right-start",
51
+ hideArrow: true,
52
+ fade: false
53
+ }, /*#__PURE__*/_react.default.createElement("div", {
54
+ className: "sdoc-insert-whiteboard-menu-popover-container sdoc-dropdown-menu-container"
55
+ }, /*#__PURE__*/_react.default.createElement("div", {
56
+ className: "sdoc-dropdown-menu-item",
57
+ onClick: openSelectSdocFileDialog
58
+ }, t('Upload_local_whiteboard')), /*#__PURE__*/_react.default.createElement("div", {
59
+ className: "sdoc-dropdown-menu-item",
60
+ onClick: onCreateFile
61
+ }, t('Create_new_whiteboard')))));
62
+ };
63
+ var _default = exports.default = WhiteboardMenu;
@@ -0,0 +1,28 @@
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 _constants = require("../../constants");
10
+ const withWhiteboard = editor => {
11
+ const {
12
+ isVoid
13
+ } = editor;
14
+ const newEditor = editor;
15
+
16
+ // Make whiteboard as void node
17
+ newEditor.isVoid = elem => {
18
+ const {
19
+ type
20
+ } = elem;
21
+ if (type === _constants.WHITEBOARD) {
22
+ return true;
23
+ }
24
+ return isVoid(elem);
25
+ };
26
+ return newEditor;
27
+ };
28
+ var _default = exports.default = withWhiteboard;
@@ -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.renderWhiteboard = renderWhiteboard;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
11
+ var _constants = require("../../../../constants");
12
+ require("./index.css");
13
+ const Whiteboard = _ref => {
14
+ let {
15
+ editor
16
+ } = _ref;
17
+ // const whiteboardContainer = document.getElementById('sdoc-whiteboard-container');
18
+ const [tldraw, setTldraw] = (0, _react.useState)(null);
19
+ const renderWhiteboardEditor = Tldraw => {
20
+ console.log(4, Tldraw);
21
+ setTldraw( /*#__PURE__*/_react.default.createElement(Tldraw, null));
22
+ };
23
+ (0, _react.useEffect)(() => {
24
+ const eventBus = _eventBus.default.getInstance();
25
+ const unsubscribeWhiteboardEditor = eventBus.subscribe(_constants.EXTERNAL_EVENT.TLDRAW_EDITOR, renderWhiteboardEditor);
26
+ console.log(3, renderWhiteboardEditor);
27
+ return () => {
28
+ unsubscribeWhiteboardEditor();
29
+ };
30
+ }, []);
31
+ return /*#__PURE__*/_react.default.createElement("div", {
32
+ id: "sdoc-whiteboard-container"
33
+ }, tldraw);
34
+ };
35
+ function renderWhiteboard(props, editor) {
36
+ return /*#__PURE__*/_react.default.createElement(Whiteboard, Object.assign({}, props, {
37
+ editor: editor
38
+ }));
39
+ }
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
@@ -12,6 +13,7 @@ var _core = require("../core");
12
13
  var _helper = require("./helper");
13
14
  var _elementType = require("../constants/element-type");
14
15
  var _constants2 = require("../../constants");
16
+ var _whiteboard = _interopRequireDefault(require("../plugins/whiteboard"));
15
17
  const CustomRenderElement = props => {
16
18
  const editor = (0, _slateReact.useSlateStatic)();
17
19
  const readonly = (0, _slateReact.useReadOnly)();
@@ -210,6 +212,11 @@ const CustomRenderElement = props => {
210
212
  const [renderSeaTableTable] = _plugins.SeaTableViewsPlugin.renderElements;
211
213
  return renderSeaTableTable(props, editor);
212
214
  }
215
+ case _elementType.WHITEBOARD:
216
+ {
217
+ const [renderWhiteboard] = _whiteboard.default.renderElements;
218
+ return renderWhiteboard(props, editor);
219
+ }
213
220
  default:
214
221
  {
215
222
  const [renderParagraph] = _plugins.ParagraphPlugin.renderElements;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
@@ -8,6 +9,7 @@ var _slateReact = require("@seafile/slate-react");
8
9
  var _constants = require("../constants");
9
10
  var _plugins = require("../plugins");
10
11
  var _core = require("../core");
12
+ var _whiteboard = _interopRequireDefault(require("../plugins/whiteboard"));
11
13
  const RenderCommentEditorCustomRenderElement = props => {
12
14
  const editor = (0, _slateReact.useSlateStatic)();
13
15
  const readonly = (0, _slateReact.useReadOnly)();
@@ -95,6 +97,13 @@ const RenderCommentEditorCustomRenderElement = props => {
95
97
  const [renderBlockquote] = _plugins.BlockquotePlugin.renderElements;
96
98
  return renderBlockquote(props, editor);
97
99
  }
100
+ case _constants.WHITEBOARD:
101
+ {
102
+ const [renderWhiteboard] = _whiteboard.default.renderElements;
103
+ return renderWhiteboard({
104
+ ...props
105
+ }, editor);
106
+ }
98
107
  default:
99
108
  {
100
109
  const [renderParagraph] = _plugins.ParagraphPlugin.renderElements;
@@ -19,6 +19,7 @@ var _menu5 = _interopRequireDefault(require("../../../plugins/sdoc-link/menu"));
19
19
  var _menu6 = _interopRequireDefault(require("../../../plugins/file-link/menu"));
20
20
  var _menu7 = _interopRequireDefault(require("../../../plugins/seatable-column/menu"));
21
21
  var _menu8 = _interopRequireDefault(require("../../../plugins/seatable-tables/menu"));
22
+ var _menu9 = _interopRequireDefault(require("../../../plugins/whiteboard/menu"));
22
23
  var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
23
24
  var _constants = require("../../../../constants");
24
25
  require("./index.css");
@@ -95,7 +96,7 @@ const InsertToolbar = _ref => {
95
96
  style: {
96
97
  maxHeight: window.innerHeight - bottom - 100
97
98
  }
98
- }, /*#__PURE__*/_react.default.createElement(_menu.default, props), /*#__PURE__*/_react.default.createElement(_tableMenu.default, props), (editor === null || editor === void 0 ? void 0 : editor.editorType) !== _constants.DOCUMENT_PLUGIN_EDITOR && /*#__PURE__*/_react.default.createElement(_menu2.default, props), /*#__PURE__*/_react.default.createElement(_menu3.default, props), /*#__PURE__*/_react.default.createElement(_menu4.default, props), /*#__PURE__*/_react.default.createElement("div", {
99
+ }, /*#__PURE__*/_react.default.createElement(_menu.default, props), /*#__PURE__*/_react.default.createElement(_tableMenu.default, props), (editor === null || editor === void 0 ? void 0 : editor.editorType) !== _constants.DOCUMENT_PLUGIN_EDITOR && /*#__PURE__*/_react.default.createElement(_menu2.default, props), /*#__PURE__*/_react.default.createElement(_menu9.default, props), /*#__PURE__*/_react.default.createElement(_menu3.default, props), /*#__PURE__*/_react.default.createElement(_menu4.default, props), /*#__PURE__*/_react.default.createElement("div", {
99
100
  className: "sdoc-dropdown-menu-divider"
100
101
  }), editor.columns && /*#__PURE__*/_react.default.createElement(_menu7.default, props), editor.tables && /*#__PURE__*/_react.default.createElement(_menu8.default, props), !editor.tables && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_menu5.default, props), /*#__PURE__*/_react.default.createElement(_menu6.default, props)))));
101
102
  };
@@ -168,7 +168,7 @@ const QuickInsertBlockMenu = _ref => {
168
168
  // eslint-disable-next-line react/jsx-indent
169
169
  _react.default.createElement(_dropdownMenuItem.default, {
170
170
  isHidden: !quickInsertMenuSearchMap[_constants.TABLE],
171
- key: "sdoc-insert-menu-tabe",
171
+ key: "sdoc-insert-menu-table",
172
172
  menuConfig: {
173
173
  ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.TABLE]
174
174
  },
@@ -138,7 +138,7 @@ const isVoidNode = node => {
138
138
  };
139
139
  exports.isVoidNode = isVoidNode;
140
140
  const isNotSupportTransform = node => {
141
- if (node.type && [_constants.CODE_BLOCK, _constants.TABLE, _constants.CALL_OUT, _constants.VIDEO, _constants.SEATABLE_TABLE].includes(node.type)) {
141
+ if (node.type && [_constants.CODE_BLOCK, _constants.TABLE, _constants.CALL_OUT, _constants.VIDEO, _constants.SEATABLE_TABLE, _constants.WHITEBOARD].includes(node.type)) {
142
142
  return true;
143
143
  }
144
144
  return false;
@@ -150,6 +150,7 @@ const InsertBlockMenu = _ref => {
150
150
  onClick: onInsertVideoToggle
151
151
  }), /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
152
152
  isHidden: !insertMenuSearchMap[_constants.ELEMENT_TYPE.TABLE],
153
+ key: "sdoc-insert-menu-table",
153
154
  menuConfig: {
154
155
  ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.TABLE]
155
156
  },
@@ -160,8 +161,8 @@ const InsertBlockMenu = _ref => {
160
161
  editor: editor,
161
162
  target: "sdoc-side-menu-item-table",
162
163
  trigger: "hover",
163
- placement: "right-start",
164
- popperClassName: "sdoc-side-menu-table-size",
164
+ placement: "left-start",
165
+ popperClassName: "sdoc-side-menu-table-size sdoc-insert-element-table-size-wrapper",
165
166
  createTable: createTable
166
167
  })), /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
167
168
  isHidden: !insertMenuSearchMap[_constants.ELEMENT_TYPE.LINK],
@@ -23,6 +23,11 @@
23
23
  font-size: 14px;
24
24
  }
25
25
 
26
+ .sdoc-side-menu .sdoc-side-menu-insert-wrapper {
27
+ max-height: 278px;
28
+ overflow-y: auto;
29
+ }
30
+
26
31
  .sdoc-side-menu-insert-below-popover .popover {
27
32
  background-color: #fff;
28
33
  min-width: 150px;
@@ -150,11 +150,13 @@ const SideMenu = (_ref, ref) => {
150
150
  onChange: onChange,
151
151
  onCompositionStart: onCompositionStart,
152
152
  onCompositionEnd: onCompositionEnd
153
- })), isNodeEmpty && /*#__PURE__*/_react.default.createElement(_insertBlockMenu.default, {
153
+ })), isNodeEmpty && /*#__PURE__*/_react.default.createElement("div", {
154
+ className: "sdoc-side-menu-insert-wrapper"
155
+ }, /*#__PURE__*/_react.default.createElement(_insertBlockMenu.default, {
154
156
  isNodeEmpty: isNodeEmpty,
155
157
  slateNode: slateNode,
156
158
  insertMenuSearchMap: insertMenuSearchMap
157
- }), !isNodeEmpty && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, transformMenuSearchMap['searching'] && isDisplayCategoryTitle(transformMenuSearchMap, insertBelowMenuSearchMap) && /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
159
+ })), !isNodeEmpty && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, transformMenuSearchMap['searching'] && isDisplayCategoryTitle(transformMenuSearchMap, insertBelowMenuSearchMap) && /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
158
160
  menuConfig: {
159
161
  text: 'Transform_to'
160
162
  },
@@ -36,6 +36,8 @@ const EXTERNAL_EVENT = exports.EXTERNAL_EVENT = {
36
36
  PARTICIPANT_REMOVED: 'participant-removed',
37
37
  CREATE_SDOC_FILE: 'create_sdoc_file',
38
38
  CREATE_WIKI_PAGE: 'create_wiki_page',
39
+ CREATE_WHITEBOARD_FILE: 'create_whiteboard_file',
40
+ TLDRAW_EDITOR: 'tldraw_editor',
39
41
  // wiki
40
42
  INSERT_LINK: 'insert_link',
41
43
  // document
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "1.0.197",
3
+ "version": "1.0.198-test0.2",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",