@seafile/seafile-editor 1.0.84 → 1.0.85-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 (39) hide show
  1. package/dist/editors/{simple-slate-editor /index.js → simple-slate-editor/index.js} +35 -12
  2. package/dist/extension/commons/expand-editor-menu.js +28 -0
  3. package/dist/extension/commons/index.js +15 -1
  4. package/dist/extension/commons/menu/menu.css +5 -1
  5. package/dist/extension/commons/more-menu/index.css +28 -0
  6. package/dist/extension/commons/more-menu/index.js +46 -0
  7. package/dist/extension/constants/menus-config.js +13 -1
  8. package/dist/extension/editor.js +8 -1
  9. package/dist/extension/index.js +12 -0
  10. package/dist/extension/toolbar/index.js +8 -1
  11. package/dist/extension/toolbar/inline-toolbar/index.css +40 -0
  12. package/dist/extension/toolbar/inline-toolbar/index.js +85 -0
  13. package/dist/index.js +7 -0
  14. package/dist/pages/longtext-inline-editor/ClickOutside/index.js +86 -0
  15. package/dist/pages/longtext-inline-editor/editor.js +135 -0
  16. package/dist/pages/longtext-inline-editor/formatter/index.css +31 -0
  17. package/dist/pages/longtext-inline-editor/formatter/index.js +66 -0
  18. package/dist/pages/longtext-inline-editor/index.css +71 -0
  19. package/dist/pages/longtext-inline-editor/index.js +128 -0
  20. package/dist/pages/seatable-editor.js +1 -1
  21. package/dist/pages/simple-editor.js +7 -3
  22. package/package.json +1 -1
  23. package/public/locales/cs/seafile-editor.json +2 -1
  24. package/public/locales/de/seafile-editor.json +2 -1
  25. package/public/locales/en/seafile-editor.json +6 -1
  26. package/public/locales/es/seafile-editor.json +2 -1
  27. package/public/locales/fr/seafile-editor.json +2 -1
  28. package/public/locales/it/seafile-editor.json +2 -1
  29. package/public/locales/ru/seafile-editor.json +2 -1
  30. package/public/locales/zh_CN/seafile-editor.json +2 -1
  31. package/public/media/seafile-editor-font/iconfont.eot +0 -0
  32. package/public/media/seafile-editor-font/iconfont.svg +2 -0
  33. package/public/media/seafile-editor-font/iconfont.ttf +0 -0
  34. package/public/media/seafile-editor-font/iconfont.woff +0 -0
  35. package/public/media/seafile-editor-font/iconfont.woff2 +0 -0
  36. package/public/media/seafile-editor-font.css +10 -6
  37. package/readme.md +115 -24
  38. /package/dist/editors/{simple-slate-editor → simple-slate-editor}/style.css +0 -0
  39. /package/dist/editors/{simple-slate-editor → simple-slate-editor}/with-props-editor.js +0 -0
@@ -5,7 +5,7 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = SimpleSlateEditor;
8
+ exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _slateReact = require("slate-react");
11
11
  var _slate = require("slate");
@@ -17,24 +17,30 @@ var _core = require("../../extension/core");
17
17
  var _common = require("../../utils/common");
18
18
  require("./style.css");
19
19
  const isMacOS = (0, _common.isMac)();
20
- function SimpleSlateEditor(_ref) {
20
+ const SimpleSlateEditor = _ref => {
21
21
  let {
22
+ isInline,
23
+ focusNodePath,
22
24
  value,
23
25
  editorApi,
24
26
  onSave,
25
27
  columns,
26
28
  onContentChanged,
27
- isSupportFormula
29
+ isSupportFormula,
30
+ onExpandEditorToggle
28
31
  } = _ref;
29
32
  const [slateValue, setSlateValue] = (0, _react.useState)(value);
30
- const editor = (0, _react.useMemo)(() => (0, _withPropsEditor.default)(_extension.baseEditor, {
33
+ const editor = (0, _react.useMemo)(() => (0, _withPropsEditor.default)(isInline ? _extension.inlineEditor : _extension.baseEditor, {
31
34
  editorApi,
32
35
  onSave,
33
36
  columns
34
- }), [columns, editorApi, onSave]);
37
+ }), [columns, editorApi, onSave, isInline]);
35
38
  const eventProxy = (0, _react.useMemo)(() => {
36
39
  return new _eventHandler.default(editor);
37
40
  }, [editor]);
41
+ const ToolbarComponent = (0, _react.useMemo)(() => {
42
+ return isInline ? _extension.InlineToolbar : _extension.Toolbar;
43
+ }, [isInline]);
38
44
  const decorate = (0, _extension.useHighlight)(editor);
39
45
  const onChange = (0, _react.useCallback)(value => {
40
46
  setSlateValue(value);
@@ -47,9 +53,21 @@ function SimpleSlateEditor(_ref) {
47
53
  const eventBus = _eventBus.default.getInstance();
48
54
  eventBus.dispatch('change');
49
55
  }, [editor, onContentChanged]);
50
- const focusFirstNode = (0, _react.useCallback)(editor => {
56
+ const focusNode = (0, _react.useCallback)((editor, focusNodePath) => {
51
57
  const [firstNode] = editor.children;
52
58
  if (!firstNode) return;
59
+ if (focusNodePath) {
60
+ const customFocusNodePath = (0, _core.getNode)(editor, focusNodePath);
61
+ if (customFocusNodePath) {
62
+ const startOfFirstNode = _slate.Editor.start(editor, focusNodePath);
63
+ const range = {
64
+ anchor: startOfFirstNode,
65
+ focus: startOfFirstNode
66
+ };
67
+ (0, _core.focusEditor)(editor, range);
68
+ return;
69
+ }
70
+ }
53
71
  const [firstNodeFirstChild] = firstNode.children;
54
72
  if (firstNodeFirstChild) {
55
73
  const startOfFirstNode = _slate.Editor.start(editor, [0, 0]);
@@ -85,7 +103,7 @@ function SimpleSlateEditor(_ref) {
85
103
  });
86
104
  const timer = setTimeout(() => {
87
105
  editor.forceNormalize = false;
88
- focusFirstNode(editor);
106
+ focusNode(editor, focusNodePath);
89
107
  }, 300);
90
108
  return () => {
91
109
  editor.forceNormalize = false;
@@ -108,15 +126,16 @@ function SimpleSlateEditor(_ref) {
108
126
  const onEditorClick = (0, _react.useCallback)(() => {
109
127
  const value = editor.children;
110
128
  if (value.length === 1 && _slate.Node.string(value[0]).length === 0) {
111
- focusFirstNode(editor);
129
+ focusNode(editor);
112
130
  }
113
- }, [editor, focusFirstNode]);
131
+ }, [editor, focusNode]);
114
132
  return /*#__PURE__*/_react.default.createElement("div", {
115
133
  className: "sf-simple-slate-editor-container"
116
- }, /*#__PURE__*/_react.default.createElement(_extension.Toolbar, {
134
+ }, /*#__PURE__*/_react.default.createElement(ToolbarComponent, {
117
135
  editor: editor,
118
136
  isSupportFormula: isSupportFormula,
119
- isSupportColumn: !!columns
137
+ isSupportColumn: !!columns,
138
+ onExpandEditorToggle: onExpandEditorToggle
120
139
  }), /*#__PURE__*/_react.default.createElement("div", {
121
140
  className: "sf-slate-editor-content",
122
141
  onClick: onEditorClick
@@ -137,4 +156,8 @@ function SimpleSlateEditor(_ref) {
137
156
  onKeyDown: eventProxy.onKeyDown,
138
157
  onCopy: eventProxy.onCopy
139
158
  })))))));
140
- }
159
+ };
160
+ SimpleSlateEditor.defaultProps = {
161
+ isInline: false
162
+ };
163
+ var _default = exports.default = SimpleSlateEditor;
@@ -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
+ var _menu = require("./menu");
11
+ const ExpandEditorMenu = _ref => {
12
+ let {
13
+ readonly,
14
+ isRichEditor,
15
+ onExpandEditorToggle,
16
+ className
17
+ } = _ref;
18
+ const config = _constants.MENUS_CONFIG_MAP[_constants.EXPAND_EDITOR];
19
+ return /*#__PURE__*/_react.default.createElement(_menu.MenuItem, Object.assign({
20
+ disabled: readonly,
21
+ isActive: false,
22
+ isRichEditor: isRichEditor,
23
+ type: _constants.EXPAND_EDITOR,
24
+ onMouseDown: onExpandEditorToggle,
25
+ className: className
26
+ }, config));
27
+ };
28
+ var _default = exports.default = ExpandEditorMenu;
@@ -10,6 +10,12 @@ Object.defineProperty(exports, "ElementPopover", {
10
10
  return _elementPopover.default;
11
11
  }
12
12
  });
13
+ Object.defineProperty(exports, "ExpandEditorMenu", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _expandEditorMenu.default;
17
+ }
18
+ });
13
19
  Object.defineProperty(exports, "MenuGroup", {
14
20
  enumerable: true,
15
21
  get: function () {
@@ -22,6 +28,12 @@ Object.defineProperty(exports, "MenuItem", {
22
28
  return _menu.MenuItem;
23
29
  }
24
30
  });
31
+ Object.defineProperty(exports, "MoreMenu", {
32
+ enumerable: true,
33
+ get: function () {
34
+ return _moreMenu.default;
35
+ }
36
+ });
25
37
  Object.defineProperty(exports, "Select", {
26
38
  enumerable: true,
27
39
  get: function () {
@@ -30,4 +42,6 @@ Object.defineProperty(exports, "Select", {
30
42
  });
31
43
  var _elementPopover = _interopRequireDefault(require("./element-popover"));
32
44
  var _menu = require("./menu");
33
- var _select = _interopRequireDefault(require("./select"));
45
+ var _select = _interopRequireDefault(require("./select"));
46
+ var _moreMenu = _interopRequireDefault(require("./more-menu"));
47
+ var _expandEditorMenu = _interopRequireDefault(require("./expand-editor-menu"));
@@ -115,4 +115,8 @@
115
115
 
116
116
  .sf-dropdown-list .sf-dropdown-list-item:hover {
117
117
  background-color: #F2F2F2;
118
- }
118
+ }
119
+
120
+ .sf-icon-btn-hover:hover {
121
+ cursor: pointer;
122
+ }
@@ -0,0 +1,28 @@
1
+ .sf-editor-menu-popover {
2
+ padding: 8px 0;
3
+ min-width: 12rem;
4
+ }
5
+
6
+ .sf-editor-menu-popover .popover-inner .sf-slate-help-info-control {
7
+ height: 24px;
8
+ width: 24px;
9
+ margin: 4px 8px;
10
+ display: flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ }
14
+
15
+ .sf-editor-menu-popover .popover-inner .sf-slate-help-info-control:hover {
16
+ background-color: #f2f2f2;
17
+ border-radius: 2px;
18
+ cursor: pointer;
19
+ }
20
+
21
+ .sf-editor-menu-popover .popover-inner .sf-slate-help-info-control .icon-use-help {
22
+ font-size: 13px;
23
+ color: #555;
24
+ }
25
+
26
+ .sf-editor-menu-popover .bs-popover-auto[x-placement^=bottom] {
27
+ margin-top: 2px;
28
+ }
@@ -0,0 +1,46 @@
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 _classnames = _interopRequireDefault(require("classnames"));
10
+ var _reactstrap = require("reactstrap");
11
+ var _constants = require("../../constants");
12
+ require("./index.css");
13
+ const MoreMenu = _ref => {
14
+ let {
15
+ className,
16
+ disabled,
17
+ isRichEditor,
18
+ children
19
+ } = _ref;
20
+ const validClassName = (0, _classnames.default)(className, {
21
+ 'sf-rich-editor': isRichEditor,
22
+ 'sf-icon-btn': true,
23
+ 'sf-icon-btn-disabled': disabled,
24
+ 'sf-icon-btn-hover': !disabled
25
+ });
26
+ const config = _constants.MENUS_CONFIG_MAP[_constants.MORE_OPERATION];
27
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("button", {
28
+ className: validClassName,
29
+ type: "button",
30
+ id: config.id
31
+ }, /*#__PURE__*/_react.default.createElement("i", {
32
+ className: config.iconClass
33
+ })), /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
34
+ target: config.id,
35
+ className: "sf-editor-menu-popover sf-editor--more-menu-popover",
36
+ trigger: "legacy",
37
+ placement: "bottom-end",
38
+ hideArrow: true,
39
+ fade: false
40
+ }, children));
41
+ };
42
+ MoreMenu.defaultProps = {
43
+ isRichEditor: true,
44
+ className: 'sf-menu-group-item'
45
+ };
46
+ var _default = exports.default = MoreMenu;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TEXT_STYLE_MAP = exports.TABLE_SUBMENU_MAP = exports.MENUS_CONFIG_MAP = exports.CLEAR_FORMAT = void 0;
6
+ exports.TEXT_STYLE_MAP = exports.TABLE_SUBMENU_MAP = exports.MORE_OPERATION = exports.MENUS_CONFIG_MAP = exports.EXPAND_EDITOR = exports.CLEAR_FORMAT = void 0;
7
7
  var _elementTypes = require("./element-types");
8
8
  const BOLD = 'bold';
9
9
  const ITALIC = 'italic';
@@ -12,6 +12,8 @@ const CODE = 'code';
12
12
  const DELETE = 'delete';
13
13
  const ADD = 'add';
14
14
  const CLEAR_FORMAT = exports.CLEAR_FORMAT = 'clear_format';
15
+ const MORE_OPERATION = exports.MORE_OPERATION = 'more_operation';
16
+ const EXPAND_EDITOR = exports.EXPAND_EDITOR = 'expand_editor';
15
17
  const TEXT_STYLE_MAP = exports.TEXT_STYLE_MAP = {
16
18
  BOLD: BOLD,
17
19
  ITALIC: ITALIC,
@@ -142,5 +144,15 @@ const MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = {
142
144
  id: "seafile_".concat(_elementTypes.COLUMN),
143
145
  iconClass: 'iconfont icon-choose-column',
144
146
  text: 'Insert_column'
147
+ },
148
+ [MORE_OPERATION]: {
149
+ id: "seafile_".concat(MORE_OPERATION),
150
+ iconClass: 'iconfont icon-more',
151
+ text: ''
152
+ },
153
+ [EXPAND_EDITOR]: {
154
+ id: "seafile_".concat(EXPAND_EDITOR),
155
+ iconClass: 'iconfont icon-fullscreen',
156
+ text: 'Expand_editor'
145
157
  }
146
158
  };
@@ -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.createSlateEditor = exports.baseEditor = void 0;
7
+ exports.inlineEditor = exports.createSlateEditor = exports.baseEditor = void 0;
8
8
  var _slate = require("slate");
9
9
  var _slateHistory = require("slate-history");
10
10
  var _slateReact = require("slate-react");
@@ -16,6 +16,13 @@ const baseEditor = exports.baseEditor = _plugins.default.reduce((editor, pluginI
16
16
  }
17
17
  return editor;
18
18
  }, (0, _slateHistory.withHistory)((0, _slateReact.withReact)((0, _slate.createEditor)())));
19
+ const inlineEditor = exports.inlineEditor = _plugins.default.reduce((editor, pluginItem) => {
20
+ const withPlugin = pluginItem.editorPlugin;
21
+ if (withPlugin) {
22
+ return withPlugin(editor);
23
+ }
24
+ return editor;
25
+ }, (0, _slateHistory.withHistory)((0, _slateReact.withReact)((0, _slate.createEditor)())));
19
26
  const createSlateEditor = () => {
20
27
  const editor = _plugins.default.reduce((editor, pluginItem) => {
21
28
  const withPlugin = pluginItem.editorPlugin;
@@ -10,6 +10,12 @@ Object.defineProperty(exports, "ELementTypes", {
10
10
  return _constants.ELementTypes;
11
11
  }
12
12
  });
13
+ Object.defineProperty(exports, "InlineToolbar", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _toolbar.InlineToolbar;
17
+ }
18
+ });
13
19
  Object.defineProperty(exports, "SetNodeToDecorations", {
14
20
  enumerable: true,
15
21
  get: function () {
@@ -34,6 +40,12 @@ Object.defineProperty(exports, "createSlateEditor", {
34
40
  return _editor.createSlateEditor;
35
41
  }
36
42
  });
43
+ Object.defineProperty(exports, "inlineEditor", {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _editor.inlineEditor;
47
+ }
48
+ });
37
49
  Object.defineProperty(exports, "isEmptyParagraph", {
38
50
  enumerable: true,
39
51
  get: function () {
@@ -4,10 +4,17 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
+ Object.defineProperty(exports, "InlineToolbar", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _inlineToolbar.default;
11
+ }
12
+ });
7
13
  Object.defineProperty(exports, "Toolbar", {
8
14
  enumerable: true,
9
15
  get: function () {
10
16
  return _headerToolbar.default;
11
17
  }
12
18
  });
13
- var _headerToolbar = _interopRequireDefault(require("./header-toolbar"));
19
+ var _headerToolbar = _interopRequireDefault(require("./header-toolbar"));
20
+ var _inlineToolbar = _interopRequireDefault(require("./inline-toolbar"));
@@ -0,0 +1,40 @@
1
+ .sf-slate-editor-toolbar {
2
+ background-color: #fcfcfc !important;
3
+ }
4
+
5
+ .sf-slate-editor-toolbar .sf-slate-article-info-control {
6
+ position: absolute;
7
+ right: 20px;
8
+ height: 30px;
9
+ width: 30px;
10
+ line-height: 30px;
11
+ display: flex;
12
+ justify-content: center;
13
+ cursor: pointer;
14
+ color: #555;
15
+ }
16
+
17
+ .sf-slate-editor-toolbar .sf-slate-article-info-control:hover {
18
+ background-color: #e5e5e5;
19
+ }
20
+
21
+ .sf-slate-editor-toolbar .sf-slate-help-info-control {
22
+ position: absolute;
23
+ right: 20px;
24
+ height: 30px;
25
+ width: 30px;
26
+ line-height: 30px;
27
+ display: flex;
28
+ justify-content: center;
29
+ cursor: pointer;
30
+ color: #555;
31
+ }
32
+
33
+ .sf-slate-editor-toolbar .sf-slate-help-info-control > span:hover {
34
+ cursor: pointer;
35
+ color: #333;
36
+ }
37
+
38
+ .sf-slate-editor-toolbar .sf-slate-article-info-control .iconfont {
39
+ font-size: 13px;
40
+ }
@@ -0,0 +1,85 @@
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 _useSelectionUpdate = _interopRequireDefault(require("../../../hooks/use-selection-update"));
11
+ var _commons = require("../../commons");
12
+ var _menu = _interopRequireDefault(require("../../plugins/blockquote/menu"));
13
+ var _menu2 = _interopRequireDefault(require("../../plugins/header/menu"));
14
+ var _menu3 = _interopRequireDefault(require("../../plugins/text-style/menu"));
15
+ var _menu4 = _interopRequireDefault(require("../../plugins/link/menu"));
16
+ var _constants = require("../../constants");
17
+ var _menu5 = _interopRequireDefault(require("../../plugins/image/menu"));
18
+ var _menu6 = _interopRequireDefault(require("../../plugins/code-block/menu"));
19
+ var _menu7 = _interopRequireDefault(require("../../plugins/check-list/menu"));
20
+ var _menu8 = _interopRequireDefault(require("../../plugins/list/menu"));
21
+ var _elementTypes = require("../../constants/element-types");
22
+ var _tableOperator = require("../../plugins/table/menu/table-operator");
23
+ var _helper = require("../../plugins/table/helper");
24
+ var _menu9 = _interopRequireDefault(require("../../plugins/clear-format/menu"));
25
+ var _shortcutDialog = _interopRequireDefault(require("../user-help/shortcut-dialog"));
26
+ require("./index.css");
27
+ // import TableMenu from '../../plugins/table/menu';
28
+ // import FormulaMenu from '../../plugins/formula/menu';
29
+ // import ColumnMenu from '../../plugins/column/menu';
30
+
31
+ const InlineToolbar = _ref => {
32
+ let {
33
+ editor,
34
+ readonly = false,
35
+ isRichEditor = false,
36
+ isSupportFormula = false,
37
+ isSupportInsertSeafileImage = false,
38
+ isSupportColumn = false,
39
+ onExpandEditorToggle
40
+ } = _ref;
41
+ (0, _useSelectionUpdate.default)();
42
+
43
+ // eslint-disable-next-line react-hooks/exhaustive-deps
44
+ const isShowSubTableMenu = (0, _react.useMemo)(() => (0, _helper.isInTable)(editor), [editor.selection]);
45
+ const [isShowHelpModal, setIsShowHelpModal] = (0, _react.useState)(false);
46
+ const onHelpIconToggle = (0, _react.useCallback)(() => {
47
+ setIsShowHelpModal(!isShowHelpModal);
48
+ }, [isShowHelpModal]);
49
+ const commonProps = {
50
+ editor,
51
+ readonly,
52
+ isRichEditor
53
+ };
54
+ return /*#__PURE__*/_react.default.createElement("div", {
55
+ className: "sf-slate-editor-toolbar"
56
+ }, 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, {
57
+ type: _constants.TEXT_STYLE_MAP.BOLD
58
+ })), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
59
+ type: _constants.TEXT_STYLE_MAP.ITALIC
60
+ })), /*#__PURE__*/_react.default.createElement(_menu3.default, Object.assign({}, commonProps, {
61
+ type: _constants.TEXT_STYLE_MAP.CODE
62
+ })), /*#__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, {
63
+ type: _elementTypes.ORDERED_LIST
64
+ })), /*#__PURE__*/_react.default.createElement(_menu8.default, Object.assign({}, commonProps, {
65
+ type: _elementTypes.UNORDERED_LIST
66
+ }))), /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu6.default, commonProps), /*#__PURE__*/_react.default.createElement(_commons.MoreMenu, commonProps, /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, /*#__PURE__*/_react.default.createElement(_menu5.default, Object.assign({}, commonProps, {
67
+ isSupportInsertSeafileImage: isSupportInsertSeafileImage
68
+ }))), isShowSubTableMenu && /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, {
69
+ className: "sf-menu-group sf-table-operations-group"
70
+ }, /*#__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(_menu9.default, commonProps)), !isRichEditor && /*#__PURE__*/_react.default.createElement("div", {
71
+ className: "sf-slate-help-info-control",
72
+ onClick: onHelpIconToggle
73
+ }, /*#__PURE__*/_react.default.createElement("span", {
74
+ className: "iconfont icon-use-help"
75
+ })))), onExpandEditorToggle && /*#__PURE__*/_react.default.createElement(_commons.MenuGroup, null, onExpandEditorToggle && /*#__PURE__*/_react.default.createElement(_commons.ExpandEditorMenu, Object.assign({}, commonProps, {
76
+ onExpandEditorToggle: onExpandEditorToggle
77
+ }))), isShowHelpModal && /*#__PURE__*/_react.default.createElement(_shortcutDialog.default, {
78
+ isRichEditor: isRichEditor,
79
+ toggleShortcutDialog: onHelpIconToggle
80
+ }));
81
+ };
82
+ InlineToolbar.defaultProps = {
83
+ readonly: false
84
+ };
85
+ var _default = exports.default = InlineToolbar;
package/dist/index.js CHANGED
@@ -28,6 +28,12 @@ Object.defineProperty(exports, "LongTextEditorDialog", {
28
28
  return _longtextEditorDialog.default;
29
29
  }
30
30
  });
31
+ Object.defineProperty(exports, "LongTextInlineEditor", {
32
+ enumerable: true,
33
+ get: function () {
34
+ return _longtextInlineEditor.default;
35
+ }
36
+ });
31
37
  Object.defineProperty(exports, "MarkdownEditor", {
32
38
  enumerable: true,
33
39
  get: function () {
@@ -106,6 +112,7 @@ var _markdownView = _interopRequireDefault(require("./pages/markdown-view"));
106
112
  var _simpleEditor = _interopRequireDefault(require("./pages/simple-editor"));
107
113
  var _emailEditorDialog = _interopRequireDefault(require("./pages/email-editor-dialog"));
108
114
  var _longtextEditorDialog = _interopRequireDefault(require("./pages/longtext-editor-dialog"));
115
+ var _longtextInlineEditor = _interopRequireDefault(require("./pages/longtext-inline-editor"));
109
116
  var _markdownPreview = _interopRequireDefault(require("./pages/markdown-preview"));
110
117
  var _seatableEditor = _interopRequireDefault(require("./pages/seatable-editor"));
111
118
  var _seatableViewer = _interopRequireDefault(require("./pages/seatable-viewer"));
@@ -0,0 +1,86 @@
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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ /**
11
+ * Detecting outside click on a react component is surprisingly hard.
12
+ * A general approach is to have a global click handler on the document
13
+ * which checks if the click target is inside the editor container or
14
+ * not using editorContainer.contains(e.target). This approach works well
15
+ * until portals are used for editors. Portals render children into a DOM
16
+ * node that exists outside the DOM hierarchy of the parent component so
17
+ * editorContainer.contains(e.target) does not work. Here are some examples
18
+ * of the DOM structure with different types of editors
19
+ *
20
+ *
21
+ * SimpleEditor for example Texbox (No Portals)
22
+ * <div react-data-grid>..<div>
23
+ * <div portal-created-by-the-grid-for-editors>
24
+ * <div editor-container>
25
+ * <div simple-editor>..</div>
26
+ * </div>
27
+ * <div>
28
+ *
29
+ * ComplexEditor for example Modals (using Portals)
30
+ * <div react-data-grid>..<div>
31
+ * <div portal-created-by-the-grid-for-editors>
32
+ * <div editor-container>
33
+ * // Nothing here
34
+ * </div>
35
+ * <div>
36
+ * <div portal-created-by-the-editor>
37
+ * <div complex-editor>..</div>
38
+ * </div>
39
+ *
40
+ *
41
+ * One approach to detect outside click is to use event bubbling through
42
+ * portals. An event fired from inside a portal will propagate to ancestors
43
+ * in the containing React tree, even if those elements are not ancestors
44
+ * in the DOM tree. This means a click handler can be attached on the document
45
+ * and on the editor container. The editor container can set a flag to notify
46
+ * that the click was inside the editor and the document click handler can use
47
+ * this flag to call onClickOutside. This approach however has a few caveats
48
+ * - Click handler on the document is set using document.addEventListener
49
+ * - Click handler on the editor container is set using onClick prop
50
+ *
51
+ * This means if a child component inside the editor calls e.stopPropagation
52
+ * then the click handler on the editor container will not be called whereas
53
+ * document click handler will be called.
54
+ * https://github.com/facebook/react/issues/12518
55
+ *
56
+ * To solve this issue onClickCapture event is used.
57
+ */
58
+
59
+ class ClickOutside extends _react.default.Component {
60
+ constructor() {
61
+ super(...arguments);
62
+ (0, _defineProperty2.default)(this, "isClickedInside", false);
63
+ (0, _defineProperty2.default)(this, "handleDocumentClick", e => {
64
+ if (this.isClickedInside) {
65
+ this.isClickedInside = false;
66
+ return;
67
+ }
68
+ this.props.onClickOutside(e);
69
+ });
70
+ (0, _defineProperty2.default)(this, "handleMouseDown", () => {
71
+ this.isClickedInside = true;
72
+ });
73
+ }
74
+ componentDidMount() {
75
+ document.addEventListener('mousedown', this.handleDocumentClick);
76
+ }
77
+ componentWillUnmount() {
78
+ document.removeEventListener('mousedown', this.handleDocumentClick);
79
+ }
80
+ render() {
81
+ return /*#__PURE__*/_react.default.cloneElement(_react.default.Children.only(this.props.children), {
82
+ onMouseDownCapture: this.handleMouseDown
83
+ });
84
+ }
85
+ }
86
+ var _default = exports.default = ClickOutside;