@seafile/seafile-editor 2.0.19 → 2.0.20-beta1

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 (46) hide show
  1. package/dist/constants/event-types.js +4 -2
  2. package/dist/editors/inline-editor/index.js +34 -0
  3. package/dist/extension/commons/dropdown-menu-item/index.css +54 -0
  4. package/dist/extension/commons/dropdown-menu-item/index.js +60 -0
  5. package/dist/extension/commons/insert-element-dialog/index.js +50 -18
  6. package/dist/extension/commons/menu/menu-drop-down.js +1 -1
  7. package/dist/extension/commons/menu-shortcut-indicator/index.js +22 -0
  8. package/dist/extension/commons/menu-shortcut-indicator/style.css +18 -0
  9. package/dist/extension/commons/more-menu/index.js +2 -6
  10. package/dist/extension/constants/menus-config.js +7 -1
  11. package/dist/extension/plugins/code-block/menu/index.js +11 -12
  12. package/dist/extension/plugins/column/menu/index.js +14 -13
  13. package/dist/extension/plugins/formula/menu/formula-modal.js +2 -2
  14. package/dist/extension/plugins/formula/menu/index.js +15 -44
  15. package/dist/extension/plugins/header/menu/style.css +2 -2
  16. package/dist/extension/plugins/image/menu/image-menu-dialog.js +7 -10
  17. package/dist/extension/plugins/image/menu/image-menu-popover.js +1 -2
  18. package/dist/extension/plugins/image/menu/index.css +36 -0
  19. package/dist/extension/plugins/image/menu/index.js +57 -52
  20. package/dist/extension/plugins/table/constant.js +4 -1
  21. package/dist/extension/plugins/table/context-menu/horizontal-align-popover/index.js +77 -0
  22. package/dist/extension/plugins/table/context-menu/horizontal-align-popover/style.css +24 -0
  23. package/dist/extension/plugins/table/context-menu/index.js +20 -1
  24. package/dist/extension/plugins/table/context-menu/style.css +19 -0
  25. package/dist/extension/plugins/table/menu/index.js +14 -38
  26. package/dist/extension/plugins/table/menu/style.css +1 -0
  27. package/dist/extension/plugins/table/render-elem/index.js +6 -6
  28. package/dist/extension/toolbar/header-toolbar/index.js +17 -48
  29. package/dist/extension/toolbar/header-toolbar/insert-toolbar/index.js +100 -0
  30. package/dist/extension/toolbar/header-toolbar/insert-toolbar/style.css +47 -0
  31. package/dist/extension/toolbar/inline-toolbar/index.css +4 -0
  32. package/dist/extension/toolbar/inline-toolbar/index.js +17 -24
  33. package/dist/pages/longtext-inline-editor/fallback-editor.js +14 -0
  34. package/dist/pages/longtext-inline-editor/index.css +0 -1
  35. package/dist/pages/longtext-inline-editor/index.js +4 -1
  36. package/package.json +1 -1
  37. package/public/locales/en/seafile-editor.json +6 -1
  38. package/public/locales/zh-CN/seafile-editor.json +6 -1
  39. package/public/locales/zh_CN/seafile-editor.json +6 -1
  40. package/public/media/seafile-editor-font/iconfont.eot +0 -0
  41. package/public/media/seafile-editor-font/iconfont.svg +68 -60
  42. package/public/media/seafile-editor-font/iconfont.ttf +0 -0
  43. package/public/media/seafile-editor-font/iconfont.woff +0 -0
  44. package/public/media/seafile-editor-font/iconfont.woff2 +0 -0
  45. package/public/media/seafile-editor-font.css +139 -123
  46. /package/dist/extension/plugins/image/menu/{style.css → image-menu-popover.css} +0 -0
@@ -0,0 +1,36 @@
1
+ .sf-insert-image-menu-popover-container {
2
+ padding: 8px 0;
3
+ }
4
+
5
+ .sf-insert-video-menu-popover-container {
6
+ padding: 8px 0;
7
+ }
8
+
9
+ .sf-dropdown-menu .sf-dropdown-menu-container {
10
+ min-width: 12rem;
11
+ z-index: 1500;
12
+ }
13
+
14
+ .sf-sub-dropdown-menu .popover {
15
+ left: -8px !important;
16
+ z-index: 1070;
17
+ }
18
+
19
+ .sf-sub-dropdown-menu .bs-popover-auto[x-placement^="left"] {
20
+ left: 8px !important;
21
+ }
22
+
23
+ .sf-dropdown-menu .sf-dropdown-menu-item {
24
+ height: 30px;
25
+ width: 100%;
26
+ padding: 3px 12px;
27
+ user-select: none;
28
+ display: flex;
29
+ align-items: center;
30
+ }
31
+
32
+ .sf-sub-dropdown-menu:hover,
33
+ .sf-dropdown-menu .sf-dropdown-menu-item:hover {
34
+ background-color: rgb(245, 245, 245);
35
+ cursor: pointer;
36
+ }
@@ -12,67 +12,72 @@ var _menusConfig = require("../../../constants/menus-config");
12
12
  var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
13
13
  var _eventTypes = require("../../../../constants/event-types");
14
14
  var _helper = require("../helper");
15
- var _commons = require("../../../commons");
16
- var _imageMenuPopover = _interopRequireDefault(require("./image-menu-popover"));
15
+ var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
16
+ var _reactstrap = require("reactstrap");
17
+ var _reactI18next = require("react-i18next");
18
+ var _constants = require("../../../../constants");
19
+ require("./index.css");
17
20
  const menuConfig = _menusConfig.MENUS_CONFIG_MAP[_elementTypes.IMAGE];
18
21
  const ImageMenu = _ref => {
19
22
  let {
20
- isRichEditor,
21
- className,
22
23
  readonly,
23
24
  editor,
24
- isSupportInsertSeafileImage
25
+ toggle
25
26
  } = _ref;
26
- const [isShowImagePopover, setIsShowImagePopover] = (0, _react.useState)(false);
27
- const imagePopoverRef = (0, _react.useRef)(null);
28
- const handleChangePopoverDisplayed = (0, _react.useCallback)(e => {
29
- if (e) {
30
- const menu = imagePopoverRef.current;
31
- const clickIsInMenu = menu && menu.contains(e.target) && menu !== e.target;
32
- if (clickIsInMenu) return;
33
- }
34
- setIsShowImagePopover(false);
35
- unregisterEventHandler();
36
- setTimeout(() => {
37
- const eventBus = _eventBus.default.getInstance();
38
- eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.ON_TOGGLE_IMAGE_POPOVER, false);
39
- }, 150);
40
- // eslint-disable-next-line react-hooks/exhaustive-deps
41
- }, []);
42
- const registerEventHandler = (0, _react.useCallback)(() => {
43
- document.addEventListener('mousedown', handleChangePopoverDisplayed);
44
- }, [handleChangePopoverDisplayed]);
45
- const unregisterEventHandler = (0, _react.useCallback)(() => {
46
- document.removeEventListener('mousedown', handleChangePopoverDisplayed);
47
- }, [handleChangePopoverDisplayed]);
48
- const onImageMenuToggle = (0, _react.useCallback)(e => {
27
+ const {
28
+ t
29
+ } = (0, _reactI18next.useTranslation)(_constants.TRANSLATE_NAMESPACE);
30
+ const fileInputRef = (0, _react.useRef)(null);
31
+ const openFileDIalog = (0, _react.useCallback)(e => {
32
+ var _fileInputRef$current;
49
33
  e.stopPropagation();
34
+ toggle && toggle();
50
35
  e.nativeEvent.stopImmediatePropagation();
51
- const state = !isShowImagePopover;
36
+ (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 ? void 0 : _fileInputRef$current.click();
37
+ }, [toggle]);
38
+ const handleInsertNetworkImage = () => {
39
+ toggle && toggle();
52
40
  const eventBus = _eventBus.default.getInstance();
53
- if (state) {
54
- setIsShowImagePopover(state);
55
- registerEventHandler();
56
- } else {
57
- setIsShowImagePopover(state);
58
- unregisterEventHandler();
59
- }
60
- eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.ON_TOGGLE_IMAGE_POPOVER, state);
61
- }, [isShowImagePopover, registerEventHandler, unregisterEventHandler]);
62
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_commons.MenuItem, Object.assign({
63
- type: Image,
64
- isRichEditor: isRichEditor,
65
- className: className,
66
- disabled: (0, _helper.isMenuDisabled)(editor, readonly),
67
- isActive: isShowImagePopover,
68
- onMouseDown: onImageMenuToggle
69
- }, menuConfig)), isShowImagePopover && /*#__PURE__*/_react.default.createElement(_imageMenuPopover.default, {
70
- ref: imagePopoverRef,
71
- editor: editor,
72
- setIsShowImagePopover: setIsShowImagePopover,
73
- unregisterEventHandler: unregisterEventHandler,
74
- handelClosePopover: handleChangePopoverDisplayed,
75
- isSupportInsertSeafileImage: isSupportInsertSeafileImage
41
+ eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.INSERT_ELEMENT, {
42
+ type: _elementTypes.IMAGE
43
+ });
44
+ };
45
+ const handleUploadLocalImage = (0, _react.useCallback)(async e => {
46
+ const file = e.target.files[0];
47
+ if (!file) return;
48
+ (0, _helper.handleUpdateImage)(editor, file);
49
+ e.target.value = null;
50
+ }, [editor]);
51
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
52
+ disabled: readonly,
53
+ menuConfig: menuConfig,
54
+ className: "pr-2"
55
+ }, !readonly && /*#__PURE__*/_react.default.createElement("i", {
56
+ className: "iconfont icon-sdoc-right-slide sf-dropdown-item-right-icon"
57
+ })), !readonly && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
58
+ target: menuConfig.id,
59
+ trigger: "hover",
60
+ className: "sf-menu-popover sf-dropdown-menu sf-sub-dropdown-menu sf-insert-image-menu-popover",
61
+ placement: "right-start",
62
+ hideArrow: true,
63
+ fade: false
64
+ }, /*#__PURE__*/_react.default.createElement("div", {
65
+ className: "sf-insert-image-menu-popover-container sf-dropdown-menu-container"
66
+ }, /*#__PURE__*/_react.default.createElement("div", {
67
+ className: "sf-dropdown-menu-item",
68
+ onClick: openFileDIalog
69
+ }, t('Upload_local_image')), /*#__PURE__*/_react.default.createElement("div", {
70
+ className: "sf-dropdown-menu-item",
71
+ onClick: handleInsertNetworkImage
72
+ }, t('Insert_network_image')))), /*#__PURE__*/_react.default.createElement("input", {
73
+ ref: fileInputRef,
74
+ onClick: openFileDIalog,
75
+ onChange: handleUploadLocalImage,
76
+ style: {
77
+ display: 'none'
78
+ },
79
+ type: "file",
80
+ accept: "image/*"
76
81
  }));
77
82
  };
78
83
  var _default = exports.default = ImageMenu;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TABLE_ROW_NODE_NAME = exports.TABLE_MAX_ROWS = exports.TABLE_MAX_COLUMNS = exports.TABLE_ELEMENT_POSITION = exports.TABLE_ELEMENT = exports.TABLE_CELL_NODE_NAME = exports.TABLE_BODY_NODE_NAME = void 0;
6
+ exports.TABLE_ROW_NODE_NAME = exports.TABLE_MAX_ROWS = exports.TABLE_MAX_COLUMNS = exports.TABLE_ELEMENT_POSITION = exports.TABLE_ELEMENT = exports.TABLE_CELL_STYLE = exports.TABLE_CELL_NODE_NAME = exports.TABLE_BODY_NODE_NAME = void 0;
7
7
  const TABLE_CELL_NODE_NAME = exports.TABLE_CELL_NODE_NAME = 'td';
8
8
  const TABLE_ROW_NODE_NAME = exports.TABLE_ROW_NODE_NAME = 'tr';
9
9
  const TABLE_BODY_NODE_NAME = exports.TABLE_BODY_NODE_NAME = 'tbody';
@@ -18,4 +18,7 @@ const TABLE_ELEMENT = exports.TABLE_ELEMENT = {
18
18
  const TABLE_ELEMENT_POSITION = exports.TABLE_ELEMENT_POSITION = {
19
19
  AFTER: 'after',
20
20
  BEFORE: 'before'
21
+ };
22
+ const TABLE_CELL_STYLE = exports.TABLE_CELL_STYLE = {
23
+ TEXT_ALIGN: 'textAlign'
21
24
  };
@@ -0,0 +1,77 @@
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 _classnames = _interopRequireDefault(require("classnames"));
13
+ var _core = require("../../../../core");
14
+ var _constants = require("../../../../../constants");
15
+ var _tableOperations = require("../../table-operations");
16
+ require("./style.css");
17
+ const HorizontalAlignPopover = _ref => {
18
+ let {
19
+ target,
20
+ editor,
21
+ readonly,
22
+ horizontalAlign
23
+ } = _ref;
24
+ const {
25
+ t
26
+ } = (0, _reactI18next.useTranslation)(_constants.TRANSLATE_NAMESPACE);
27
+ const setTextAlignStyle = (0, _react.useCallback)(textAlign => {
28
+ if (readonly) return;
29
+ (0, _tableOperations.changeColumnAlign)(editor, textAlign);
30
+ const focusPoint = editor.selection.focus;
31
+ // prevent select all text in the editor
32
+ (0, _core.focusEditor)(editor, focusPoint);
33
+ // Select last focus point
34
+ setTimeout(() => {
35
+ (0, _core.focusEditor)(editor, focusPoint);
36
+ }, 0);
37
+ }, [editor, readonly]);
38
+ return /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
39
+ target: target.current,
40
+ trigger: "hover",
41
+ placement: "right-start",
42
+ hideArrow: true,
43
+ fade: false
44
+ }, /*#__PURE__*/_react.default.createElement("div", {
45
+ className: "sf-dropdown-menu sf-table-alignment-menu"
46
+ }, /*#__PURE__*/_react.default.createElement("div", {
47
+ className: "sf-dropdown-menu-item",
48
+ onMouseDown: () => setTextAlignStyle('left')
49
+ }, /*#__PURE__*/_react.default.createElement("div", {
50
+ className: "sf-checked"
51
+ }, /*#__PURE__*/_react.default.createElement("i", {
52
+ className: (0, _classnames.default)('iconfont icon-check-mark', {
53
+ active: !horizontalAlign || horizontalAlign === 'left'
54
+ })
55
+ })), /*#__PURE__*/_react.default.createElement("span", {
56
+ className: "active"
57
+ }, t('Left'))), /*#__PURE__*/_react.default.createElement("div", {
58
+ className: "sf-dropdown-menu-item",
59
+ onMouseDown: () => setTextAlignStyle('center')
60
+ }, /*#__PURE__*/_react.default.createElement("div", {
61
+ className: "sf-checked"
62
+ }, /*#__PURE__*/_react.default.createElement("i", {
63
+ className: (0, _classnames.default)('iconfont icon-check-mark', {
64
+ active: horizontalAlign === 'center'
65
+ })
66
+ })), /*#__PURE__*/_react.default.createElement("span", null, t('Center'))), /*#__PURE__*/_react.default.createElement("div", {
67
+ className: "sf-dropdown-menu-item",
68
+ onMouseDown: () => setTextAlignStyle('right')
69
+ }, /*#__PURE__*/_react.default.createElement("div", {
70
+ className: "sf-checked"
71
+ }, /*#__PURE__*/_react.default.createElement("i", {
72
+ className: (0, _classnames.default)('iconfont icon-check-mark', {
73
+ active: horizontalAlign === 'right'
74
+ })
75
+ })), /*#__PURE__*/_react.default.createElement("span", null, t('Right')))));
76
+ };
77
+ var _default = exports.default = HorizontalAlignPopover;
@@ -0,0 +1,24 @@
1
+ .sf-context-menu .sf-dropdown-menu {
2
+ display: flex;
3
+ flex-direction: column;
4
+ }
5
+
6
+ .sf-table-alignment-menu .sf-dropdown-menu-item {
7
+ padding: 4px 50px 4px 10px !important;
8
+ }
9
+
10
+ .sf-table-alignment-menu .sf-dropdown-menu-item .sf-checked {
11
+ margin-right: 6px;
12
+ height: 21px;
13
+ line-height: 21px;
14
+ width: 12px;
15
+ }
16
+
17
+ .sf-table-alignment-menu .sf-dropdown-menu-item .icon-check-mark {
18
+ display: none;
19
+ font-size: 12px !important;
20
+ }
21
+
22
+ .sf-table-alignment-menu .sf-dropdown-menu-item .icon-check-mark.active {
23
+ display: inline;
24
+ }
@@ -12,8 +12,12 @@ var _tableOperations = require("../table-operations");
12
12
  var _constants = require("../../../../constants");
13
13
  var _insertTableElement = _interopRequireDefault(require("./insert-table-element"));
14
14
  var _constant = require("../constant");
15
+ var _core = require("../../../core");
16
+ var _elementTypes = require("../../../constants/element-types");
17
+ var _horizontalAlignPopover = _interopRequireDefault(require("./horizontal-align-popover"));
15
18
  require("./style.css");
16
19
  const ContextMenu = _ref => {
20
+ var _getSelectedNodeByTyp, _cellDom$style;
17
21
  let {
18
22
  element,
19
23
  position,
@@ -22,9 +26,13 @@ const ContextMenu = _ref => {
22
26
  } = _ref;
23
27
  const [contextMenuStyle, setContextMenuStyle] = (0, _react.useState)({});
24
28
  const contextMenuRef = (0, _react.useRef)(null);
29
+ const horizontalAlignRef = (0, _react.useRef)(null);
25
30
  const {
26
31
  t
27
32
  } = (0, _reactI18next.useTranslation)(_constants.TRANSLATE_NAMESPACE);
33
+ const tableCellNodeId = (_getSelectedNodeByTyp = (0, _core.getSelectedNodeByType)(editor, _elementTypes.TABLE_CELL)) === null || _getSelectedNodeByTyp === void 0 ? void 0 : _getSelectedNodeByTyp.id;
34
+ const cellDom = document.querySelector(`td[data-id="${tableCellNodeId}"]`);
35
+ const horizontalAlign = cellDom === null || cellDom === void 0 ? void 0 : (_cellDom$style = cellDom.style) === null || _cellDom$style === void 0 ? void 0 : _cellDom$style[_constant.TABLE_CELL_STYLE.TEXT_ALIGN];
28
36
  const currentRowsCount = (0, _react.useMemo)(() => {
29
37
  const rows = element.children;
30
38
  return rows.length;
@@ -100,6 +108,17 @@ const ContextMenu = _ref => {
100
108
  }, t('Delete_column')), /*#__PURE__*/_react.default.createElement("button", {
101
109
  onMouseDown: () => handleClickOperationBtn(_tableOperations.removeTable),
102
110
  className: 'sf-context-menu-item sf-dropdown-menu-item'
103
- }, t('Delete_table'))));
111
+ }, t('Delete_table')), /*#__PURE__*/_react.default.createElement("div", {
112
+ className: 'sf-divider dropdown-divider'
113
+ }), /*#__PURE__*/_react.default.createElement("button", {
114
+ ref: horizontalAlignRef,
115
+ className: "sf-context-menu-item sf-dropdown-menu-item side-extendable"
116
+ }, /*#__PURE__*/_react.default.createElement("span", null, t('Horizontal_align')), /*#__PURE__*/_react.default.createElement("i", {
117
+ className: "iconfont icon-sdoc-right-slide"
118
+ })), horizontalAlignRef.current && /*#__PURE__*/_react.default.createElement(_horizontalAlignPopover.default, {
119
+ target: horizontalAlignRef,
120
+ editor: editor,
121
+ horizontalAlign: horizontalAlign
122
+ })));
104
123
  };
105
124
  var _default = exports.default = ContextMenu;
@@ -43,6 +43,10 @@
43
43
  cursor: default;
44
44
  }
45
45
 
46
+ .sf-context-menu .sf-divider.dropdown-divider {
47
+ border-top: 1px solid rgba(0, 40, 100, .12);
48
+ }
49
+
46
50
  .sf-context-menu .sf-context-menu-item .insert-number {
47
51
  margin-left: 50px;
48
52
  display: flex;
@@ -68,3 +72,18 @@
68
72
  .sf-context-menu .sf-context-menu-item:disabled .insert-number-input {
69
73
  color: #adb5bd;
70
74
  }
75
+
76
+ .sf-context-menu .sf-context-menu-item.sf-dropdown-menu-item:disabled {
77
+ pointer-events: none;
78
+ color: #adb5bd;
79
+ }
80
+
81
+ .side-extendable .icon-sdoc-right-slide {
82
+ color: #fff;
83
+ transform: scale(.6);
84
+ }
85
+
86
+ .sf-context-menu .sf-dropdown-menu-item:hover {
87
+ color: #fff;
88
+ background-color: #20a0ff;
89
+ }
@@ -7,63 +7,39 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
- var _menuItem = _interopRequireDefault(require("../../../commons/menu/menu-item"));
11
10
  var _constants = require("../../../constants");
12
11
  var _elementTypes = require("../../../constants/element-types");
13
12
  var _helper = require("../helper");
14
13
  var _tableSizeSelector = _interopRequireDefault(require("./table-size-selector"));
14
+ var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
15
15
  require("./style.css");
16
16
  const menuConfig = _constants.MENUS_CONFIG_MAP[_elementTypes.TABLE];
17
17
  const TableMenu = _ref => {
18
18
  let {
19
19
  editor,
20
20
  readonly,
21
- className,
22
- isRichEditor
21
+ toggle
23
22
  } = _ref;
24
23
  const [isOpenTableSizeSelector, setIsOpenTableSizeSelector] = (0, _react.useState)(false);
25
24
  // eslint-disable-next-line react-hooks/exhaustive-deps
26
25
  const disabled = (0, _react.useMemo)(() => (0, _helper.isDisabled)(editor, readonly), [editor.selection, readonly]);
27
- const isActive = (0, _helper.isInTable)(editor);
28
26
  const tablePopoverRef = (0, _react.useRef)(null);
29
- const onHideSelector = (0, _react.useCallback)(e => {
30
- if (e) {
31
- const menu = tablePopoverRef.current;
32
- const clickIsInMenu = menu && menu.contains(e.target) && menu !== e.target;
33
- if (clickIsInMenu) return;
34
- }
35
- setIsOpenTableSizeSelector(false);
36
- unregisterEvent();
37
- // eslint-disable-next-line react-hooks/exhaustive-deps
38
- }, []);
39
- const registerEvent = (0, _react.useCallback)(() => {
40
- document.addEventListener('mousedown', onHideSelector);
41
- // eslint-disable-next-line react-hooks/exhaustive-deps
42
- }, []);
43
- const unregisterEvent = (0, _react.useCallback)(() => {
44
- document.removeEventListener('mousedown', onHideSelector);
45
- // eslint-disable-next-line react-hooks/exhaustive-deps
46
- }, []);
47
- const onMouseDown = (0, _react.useCallback)(e => {
48
- e.stopPropagation();
49
- e.preventDefault();
50
- const newState = !isOpenTableSizeSelector;
51
- setIsOpenTableSizeSelector(newState);
52
- newState ? registerEvent() : unregisterEvent();
53
- }, [isOpenTableSizeSelector, registerEvent, unregisterEvent]);
27
+ const handleMouseEnter = () => setIsOpenTableSizeSelector(true);
28
+ const handleMouseLeave = () => setIsOpenTableSizeSelector(false);
54
29
  return /*#__PURE__*/_react.default.createElement("div", {
55
- className: "sf-table-menu-item"
56
- }, /*#__PURE__*/_react.default.createElement(_menuItem.default, Object.assign({
57
- isRichEditor: isRichEditor,
58
- className: className,
30
+ className: "table-menu-container",
31
+ onMouseEnter: handleMouseEnter,
32
+ onMouseLeave: handleMouseLeave
33
+ }, /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
59
34
  disabled: disabled,
60
- isActive: isActive,
61
- onMouseDown: onMouseDown,
62
- editor: editor
63
- }, menuConfig)), isOpenTableSizeSelector && /*#__PURE__*/_react.default.createElement(_tableSizeSelector.default, {
35
+ menuConfig: menuConfig,
36
+ className: "pr-2"
37
+ }, !disabled && /*#__PURE__*/_react.default.createElement("i", {
38
+ className: "iconfont icon-sdoc-right-slide sf-dropdown-item-right-icon"
39
+ })), !disabled && isOpenTableSizeSelector && /*#__PURE__*/_react.default.createElement(_tableSizeSelector.default, {
64
40
  ref: tablePopoverRef,
65
41
  editor: editor,
66
- onHideSelector: onHideSelector
42
+ onHideSelector: toggle
67
43
  }));
68
44
  };
69
45
  var _default = exports.default = TableMenu;
@@ -9,6 +9,7 @@
9
9
  padding: 5px 12px;
10
10
  background-color: #fff;
11
11
  border: 1px solid #0028641f;
12
+ left: 100%;
12
13
  }
13
14
 
14
15
  .sf-table-size-selector-card .sf-table-grid-info {
@@ -28,17 +28,17 @@ const RenderTableContainer = (_ref, editor) => {
28
28
  rowIndex: -1,
29
29
  colIndex: -1
30
30
  });
31
+ const [isShowContextMenu, setIsShowContextMenu] = (0, _react.useState)(false);
32
+ const [contextMenuPosition, setContextMenuPosition] = (0, _react.useState)({
33
+ top: 0,
34
+ left: 0
35
+ });
31
36
  const [, setSelectGridRange] = (0, _react.useState)({
32
37
  startRowIndex: -1,
33
38
  startColIndex: -1,
34
39
  endRowIndex: -1,
35
40
  endColIndex: -1
36
41
  });
37
- const [isShowContextMenu, setIsShowContextMenu] = (0, _react.useState)(false);
38
- const [contextMenuPosition, setContextMenuPosition] = (0, _react.useState)({
39
- top: 0,
40
- left: 0
41
- });
42
42
  const isReadonly = (0, _slateReact.useReadOnly)();
43
43
  (0, _react.useEffect)(() => {
44
44
  if (isReadonly) return;
@@ -123,6 +123,7 @@ const RenderTableContainer = (_ref, editor) => {
123
123
  const maxColIndex = Math.max(startColIndex, endColIndex);
124
124
  // Select one cell
125
125
  if (minRowIndex === maxRowIndex && minColIndex === maxColIndex) return;
126
+
126
127
  // collapse selection
127
128
  window.getSelection().collapseToEnd();
128
129
  updateSelectedCellStyles(minRowIndex, maxRowIndex, minColIndex, maxColIndex);
@@ -206,7 +207,6 @@ const RenderTableCell = _ref3 => {
206
207
  const editor = (0, _slateReact.useSlateStatic)();
207
208
  const cellPath = (0, _core.findPath)(editor, element, [0, 0]);
208
209
  const pathLength = cellPath.length;
209
- // const rowIndex = cellPath[pathLength - 2];
210
210
  const cellIndex = cellPath[pathLength - 1];
211
211
  const rowEntry = _slate.Editor.parent(editor, cellPath);
212
212
  const tableEntry = _slate.Editor.parent(editor, rowEntry[1]);
@@ -7,29 +7,20 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
- var _classnames = _interopRequireDefault(require("classnames"));
11
- var _eventTypes = require("../../../constants/event-types");
12
10
  var _useSelectionUpdate = _interopRequireDefault(require("../../../hooks/use-selection-update"));
13
- var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
14
11
  var _commons = require("../../commons");
15
12
  var _menu = _interopRequireDefault(require("../../plugins/blockquote/menu"));
16
13
  var _menu2 = _interopRequireDefault(require("../../plugins/header/menu"));
17
14
  var _menu3 = _interopRequireDefault(require("../../plugins/text-style/menu"));
18
15
  var _menu4 = _interopRequireDefault(require("../../plugins/link/menu"));
19
16
  var _constants = require("../../constants");
20
- var _menu5 = _interopRequireDefault(require("../../plugins/image/menu"));
21
- var _menu6 = _interopRequireDefault(require("../../plugins/code-block/menu"));
22
- var _menu7 = _interopRequireDefault(require("../../plugins/check-list/menu"));
23
- var _menu8 = _interopRequireDefault(require("../../plugins/list/menu"));
17
+ var _menu5 = _interopRequireDefault(require("../../plugins/check-list/menu"));
18
+ var _menu6 = _interopRequireDefault(require("../../plugins/list/menu"));
24
19
  var _elementTypes = require("../../constants/element-types");
25
- var _menu9 = _interopRequireDefault(require("../../plugins/table/menu"));
26
- var _tableOperator = require("../../plugins/table/menu/table-operator");
27
- var _helper = require("../../plugins/table/helper");
28
- var _menu10 = _interopRequireDefault(require("../../plugins/formula/menu"));
29
- var _menu11 = _interopRequireDefault(require("../../plugins/clear-format/menu"));
20
+ var _menu7 = _interopRequireDefault(require("../../plugins/clear-format/menu"));
30
21
  var _shortcutDialog = _interopRequireDefault(require("../user-help/shortcut-dialog"));
31
- var _menu12 = _interopRequireDefault(require("../../plugins/column/menu"));
32
22
  var _insertElementDialog = _interopRequireDefault(require("../../commons/insert-element-dialog"));
23
+ var _insertToolbar = _interopRequireDefault(require("./insert-toolbar"));
33
24
  require("./style.css");
34
25
  const Toolbar = _ref => {
35
26
  let {
@@ -41,35 +32,10 @@ const Toolbar = _ref => {
41
32
  isSupportColumn = false
42
33
  } = _ref;
43
34
  (0, _useSelectionUpdate.default)();
44
- const [isShowArticleInfo, setIsShowArticleInfo] = (0, _react.useState)(false);
45
- // eslint-disable-next-line react-hooks/exhaustive-deps
46
- const isShowSubTableMenu = (0, _react.useMemo)(() => (0, _helper.isInTable)(editor), [editor.selection]);
47
- const updateArticleInfoState = (0, _react.useCallback)(() => {
48
- const newState = !isShowArticleInfo;
49
- setIsShowArticleInfo(newState);
50
- const eventBus = _eventBus.default.getInstance();
51
- eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.ON_ARTICLE_INFO_TOGGLE, newState);
52
- }, [isShowArticleInfo]);
53
- const onHelpInfoToggle = (0, _react.useCallback)(state => {
54
- if (state) setIsShowArticleInfo(false);
55
- }, []);
56
- (0, _react.useEffect)(() => {
57
- const eventBus = _eventBus.default.getInstance();
58
- // Trigger external events and close article info
59
- const unsubscribeHelpInfo = eventBus.subscribe(_eventTypes.EXTERNAL_EVENTS.ON_HELP_INFO_TOGGLE, onHelpInfoToggle);
60
- return () => {
61
- unsubscribeHelpInfo();
62
- };
63
- // eslint-disable-next-line react-hooks/exhaustive-deps
64
- }, []);
65
35
  const [isShowHelpModal, setIsShowHelpModal] = (0, _react.useState)(false);
66
36
  const onHelpIconToggle = (0, _react.useCallback)(() => {
67
37
  setIsShowHelpModal(!isShowHelpModal);
68
38
  }, [isShowHelpModal]);
69
- const sideIconClass = (0, _classnames.default)('iconfont', {
70
- 'icon-angle-double-left': !isShowArticleInfo,
71
- 'icon-angle-double-right': isShowArticleInfo
72
- });
73
39
  const commonProps = {
74
40
  editor,
75
41
  readonly,
@@ -77,21 +43,24 @@ const Toolbar = _ref => {
77
43
  };
78
44
  return /*#__PURE__*/_react.default.createElement("div", {
79
45
  className: "sf-slate-editor-toolbar"
80
- }, isRichEditor && /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu2.default, commonProps)), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
46
+ }, isRichEditor && /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_insertToolbar.default, {
47
+ editor: editor,
48
+ readonly: readonly,
49
+ isSupportFormula: isSupportFormula,
50
+ isSupportColumn: isSupportColumn
51
+ })), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu2.default, commonProps)), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
52
+ type: _constants.TEXT_STYLE_MAP.ITALIC
53
+ })), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
81
54
  type: _constants.TEXT_STYLE_MAP.BOLD
82
55
  })), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
83
- type: _constants.TEXT_STYLE_MAP.ITALIC
56
+ type: _constants.TEXT_STYLE_MAP.UNDERLINE
84
57
  })), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
85
58
  type: _constants.TEXT_STYLE_MAP.CODE
86
- })), /*#__PURE__*/_react.default.createElement(_menu4.default, commonProps)), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu.default, commonProps), /*#__PURE__*/_react.default.createElement(_menu7.default, commonProps), /*#__PURE__*/_react.default.createElement(_menu8.default, Object.assign({}, commonProps, {
87
- type: _elementTypes.ORDERED_LIST
88
- })), /*#__PURE__*/_react.default.createElement(_menu8.default, Object.assign({}, commonProps, {
59
+ })), /*#__PURE__*/_react.default.createElement(_menu4.default, commonProps)), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu.default, commonProps), /*#__PURE__*/_react.default.createElement(_menu5.default, commonProps), /*#__PURE__*/_react.default.createElement(_menu6.default, Object.assign({}, commonProps, {
89
60
  type: _elementTypes.UNORDERED_LIST
90
- }))), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu6.default, commonProps), /*#__PURE__*/_react.default.createElement(_menu9.default, commonProps), /*#__PURE__*/_react.default.createElement(_menu5.default, Object.assign({}, commonProps, {
91
- isSupportInsertSeafileImage: isSupportInsertSeafileImage
92
- })), isSupportFormula && /*#__PURE__*/_react.default.createElement(_menu10.default, commonProps), isSupportColumn && /*#__PURE__*/_react.default.createElement(_menu12.default, commonProps)), isShowSubTableMenu && /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, {
93
- className: "sf-menu-group sf-table-operations-group"
94
- }, /*#__PURE__*/_react.default.createElement(_tableOperator.AlignmentDropDown, commonProps), /*#__PURE__*/_react.default.createElement(_tableOperator.ColumnOperationDropDownList, commonProps), /*#__PURE__*/_react.default.createElement(_tableOperator.RowOperationDropDownList, commonProps), /*#__PURE__*/_react.default.createElement(_tableOperator.RemoveTableMenu, commonProps)), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu11.default, commonProps)), !isRichEditor && /*#__PURE__*/_react.default.createElement("div", {
61
+ })), /*#__PURE__*/_react.default.createElement(_menu6.default, Object.assign({}, commonProps, {
62
+ type: _elementTypes.ORDERED_LIST
63
+ }))), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu7.default, commonProps)), !isRichEditor && /*#__PURE__*/_react.default.createElement("div", {
95
64
  className: "sf-slate-help-info-control",
96
65
  onClick: onHelpIconToggle
97
66
  }, /*#__PURE__*/_react.default.createElement("span", {