@seafile/sdoc-editor 0.1.55 → 0.1.57-test0

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 (42) hide show
  1. package/dist/basic-sdk/editor.js +3 -12
  2. package/dist/basic-sdk/extension/constants/element-type.js +5 -1
  3. package/dist/basic-sdk/extension/constants/index.js +14 -2
  4. package/dist/basic-sdk/extension/core/queries/index.js +8 -0
  5. package/dist/basic-sdk/extension/plugins/blockquote/render-elem.js +6 -1
  6. package/dist/basic-sdk/extension/plugins/check-list/render-elem.js +8 -4
  7. package/dist/basic-sdk/extension/plugins/header/render-elem.js +6 -2
  8. package/dist/basic-sdk/extension/plugins/html/plugin.js +8 -6
  9. package/dist/basic-sdk/extension/plugins/index.js +3 -2
  10. package/dist/basic-sdk/extension/plugins/list/render-elem.js +16 -2
  11. package/dist/basic-sdk/extension/plugins/table/constants/index.js +5 -1
  12. package/dist/basic-sdk/extension/plugins/table/helpers.js +159 -22
  13. package/dist/basic-sdk/extension/plugins/table/menu/active-table-menu/index.js +3 -3
  14. package/dist/basic-sdk/extension/plugins/table/plugin.js +2 -2
  15. package/dist/basic-sdk/extension/plugins/table/render/hooks.js +17 -0
  16. package/dist/basic-sdk/extension/plugins/table/render/index.css +137 -0
  17. package/dist/basic-sdk/extension/plugins/table/render/index.js +161 -0
  18. package/dist/basic-sdk/extension/plugins/table/render/render-cell.js +48 -14
  19. package/dist/basic-sdk/extension/plugins/table/render/render-row.js +122 -7
  20. package/dist/basic-sdk/extension/plugins/table/render/resize-handler.js +109 -0
  21. package/dist/basic-sdk/extension/plugins/table/render/resize-handlers.js +27 -0
  22. package/dist/basic-sdk/extension/plugins/table/render/table-root.js +38 -0
  23. package/dist/basic-sdk/extension/plugins/table/render-elem.js +1 -1
  24. package/dist/basic-sdk/extension/plugins/text-align/helpers.js +43 -0
  25. package/dist/basic-sdk/extension/plugins/text-align/index.js +2 -0
  26. package/dist/basic-sdk/extension/plugins/text-align/menu/index.js +105 -0
  27. package/dist/basic-sdk/extension/plugins/text-align/menu/style.css +61 -0
  28. package/dist/basic-sdk/extension/render/render-element.js +9 -3
  29. package/dist/basic-sdk/extension/toolbar/index.js +19 -1
  30. package/dist/basic-sdk/socket/with-socket-io.js +5 -0
  31. package/dist/basic-sdk/utils/mouse-event.js +59 -0
  32. package/dist/basic-sdk/utils/object-utils.js +1 -0
  33. package/dist/components/doc-info/index.js +19 -4
  34. package/dist/config.js +16 -0
  35. package/dist/constants/index.js +1 -0
  36. package/dist/pages/simple-editor.js +3 -1
  37. package/package.json +1 -1
  38. package/public/locales/en/sdoc-editor.json +5 -1
  39. package/public/media/sdoc-editor-font.css +2 -2
  40. package/dist/basic-sdk/extension/plugins/table/render/context.js +0 -5
  41. package/dist/basic-sdk/extension/plugins/table/render/render-table/index.css +0 -72
  42. package/dist/basic-sdk/extension/plugins/table/render/render-table/index.js +0 -94
@@ -42,10 +42,6 @@ var SDocEditor = function SDocEditor(_ref) {
42
42
  setMenuPosition = _useState6[1];
43
43
  var _useCursors = useCursors(editor),
44
44
  cursors = _useCursors.cursors;
45
- var _useState7 = useState({}),
46
- _useState8 = _slicedToArray(_useState7, 2),
47
- forceUpdateValue = _useState8[0],
48
- setForceUpdateValue = _useState8[1];
49
45
 
50
46
  // init eventHandler
51
47
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -94,21 +90,17 @@ var SDocEditor = function SDocEditor(_ref) {
94
90
  }
95
91
  // eslint-disable-next-line react-hooks/exhaustive-deps
96
92
  }, []);
97
- var onSelect = useCallback(function () {
98
- setForceUpdateValue({});
99
- }, []);
100
93
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
101
94
  className: "sdoc-editor-container"
102
95
  }, /*#__PURE__*/React.createElement(Toolbar, {
103
- editor: editor,
104
- forceUpdateValue: forceUpdateValue
96
+ editor: editor
105
97
  }), /*#__PURE__*/React.createElement("div", {
106
98
  className: "sdoc-editor-content"
107
99
  }, /*#__PURE__*/React.createElement(SDocOutline, {
108
100
  doc: slateValue,
109
101
  docUuid: config.docUuid
110
102
  }), /*#__PURE__*/React.createElement("div", {
111
- className: "flex-fill o-auto"
103
+ className: "flex-fill o-auto sdoc-editor-article-container"
112
104
  }, /*#__PURE__*/React.createElement(Slate, {
113
105
  editor: editor,
114
106
  value: slateValue,
@@ -121,8 +113,7 @@ var SDocEditor = function SDocEditor(_ref) {
121
113
  onKeyDown: eventProxy.onKeyDown,
122
114
  cursors: cursors,
123
115
  onContextMenu: onContextMenu,
124
- onMouseDown: onMouseDown,
125
- onSelect: onSelect
116
+ onMouseDown: onMouseDown
126
117
  })))))), isShowContextMenu && /*#__PURE__*/React.createElement(ContextMenu, {
127
118
  editor: editor,
128
119
  contextMenuPosition: menuPosition
@@ -28,4 +28,8 @@ export var TABLE_CELL = 'table-cell';
28
28
  export var FORMULA = 'formula';
29
29
  export var COLUMN = 'column';
30
30
  export var TEXT_STYLE = 'text-style';
31
- export var BOLD_ITALIC = 'bold-italic';
31
+ export var BOLD_ITALIC = 'bold-italic';
32
+ export var TEXT_ALIGN = 'text-align';
33
+ export var ALIGN_LEFT = 'align-left';
34
+ export var ALIGN_RIGHT = 'align-right';
35
+ export var ALIGN_CENTER = 'align-center';
@@ -2,7 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
2
  var _MENUS_CONFIG_MAP, _HEADER_TITLE_MAP, _TABLE_ELEMENT_SPAN;
3
3
  // extension plugin
4
4
  import * as ELEMENT_TYPE from './element-type';
5
- import { BLOCKQUOTE, HEADER, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, PARAGRAPH, BOLD, ITALIC, UNDERLINE, STRIKETHROUGH, ORDERED_LIST, UNORDERED_LIST, LIST_ITEM, LIST_LIC, CHECK_LIST, CHECK_LIST_ITEM, LINK, HTML, CODE_BLOCK, CODE_LINE, IMAGE, TABLE, TABLE_CELL, TABLE_ROW, FORMULA, COLUMN, TEXT_STYLE, BOLD_ITALIC } from './element-type';
5
+ import { BLOCKQUOTE, HEADER, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, PARAGRAPH, BOLD, ITALIC, UNDERLINE, STRIKETHROUGH, ORDERED_LIST, UNORDERED_LIST, LIST_ITEM, LIST_LIC, CHECK_LIST, CHECK_LIST_ITEM, LINK, HTML, CODE_BLOCK, CODE_LINE, IMAGE, TABLE, TABLE_CELL, TABLE_ROW, FORMULA, COLUMN, TEXT_STYLE, BOLD_ITALIC, TEXT_ALIGN, ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTER } from './element-type';
6
6
  import KEYBOARD from './keyboard';
7
7
 
8
8
  // history
@@ -69,6 +69,18 @@ export var MENUS_CONFIG_MAP = (_MENUS_CONFIG_MAP = {}, _defineProperty(_MENUS_CO
69
69
  iconClass: 'sdocfont sdoc-strikethrough',
70
70
  text: 'strikethrough',
71
71
  type: 'STRIKETHROUGH'
72
+ }]), _defineProperty(_MENUS_CONFIG_MAP, TEXT_ALIGN, [{
73
+ id: ALIGN_LEFT,
74
+ iconClass: 'sdocfont sdoc-align-left',
75
+ type: 'left'
76
+ }, {
77
+ id: ALIGN_CENTER,
78
+ iconClass: 'sdocfont sdoc-align-center',
79
+ type: 'center'
80
+ }, {
81
+ id: ALIGN_RIGHT,
82
+ iconClass: 'sdocfont sdoc-align-right',
83
+ type: 'right'
72
84
  }]), _defineProperty(_MENUS_CONFIG_MAP, UNDO, {
73
85
  id: UNDO,
74
86
  iconClass: 'sdocfont sdoc-revoke',
@@ -101,4 +113,4 @@ export var TABLE_ELEMENT_POSITION = {
101
113
  AFTER: 'after',
102
114
  BEFORE: 'before'
103
115
  };
104
- export { BLOCKQUOTE, HEADER, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, PARAGRAPH, BOLD, ITALIC, UNDERLINE, STRIKETHROUGH, ORDERED_LIST, UNORDERED_LIST, LIST_ITEM, LIST_LIC, CHECK_LIST, CHECK_LIST_ITEM, LINK, HTML, CODE_BLOCK, CODE_LINE, IMAGE, TABLE, TABLE_CELL, TABLE_ROW, FORMULA, COLUMN, TEXT_STYLE, BOLD_ITALIC, ELEMENT_TYPE, KEYBOARD };
116
+ export { BLOCKQUOTE, HEADER, HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, PARAGRAPH, BOLD, ITALIC, UNDERLINE, STRIKETHROUGH, ORDERED_LIST, UNORDERED_LIST, LIST_ITEM, LIST_LIC, CHECK_LIST, CHECK_LIST_ITEM, LINK, HTML, CODE_BLOCK, CODE_LINE, IMAGE, TABLE, TABLE_CELL, TABLE_ROW, FORMULA, COLUMN, TEXT_STYLE, BOLD_ITALIC, TEXT_ALIGN, ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTER, ELEMENT_TYPE, KEYBOARD };
@@ -5,6 +5,7 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
5
5
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
6
6
  var _excluded = ["at"];
7
7
  import { Editor, Text, Path, Span, Element, Node, Range } from '@seafile/slate';
8
+ import { ReactEditor } from '@seafile/slate-react';
8
9
  import { match } from '../utils';
9
10
  import ObjectUtils from '../../../utils/object-utils';
10
11
 
@@ -22,6 +23,13 @@ export var getQueryOptions = function getQueryOptions(editor, options) {
22
23
  match: newMatch
23
24
  });
24
25
  };
26
+ export var findPath = function findPath(editor, node, defaultPath) {
27
+ try {
28
+ return ReactEditor.findPath(editor, node);
29
+ } catch (_unused) {
30
+ return defaultPath;
31
+ }
32
+ };
25
33
 
26
34
  // get node
27
35
  export var getNode = function getNode(editor, path) {
@@ -3,8 +3,13 @@ var renderBlockquote = function renderBlockquote(props, editor) {
3
3
  var attributes = props.attributes,
4
4
  children = props.children,
5
5
  element = props.element;
6
+ var style = {
7
+ textAlign: element.align
8
+ };
6
9
  return /*#__PURE__*/React.createElement("blockquote", Object.assign({
7
10
  "data-id": element.id
8
- }, attributes), children);
11
+ }, attributes, {
12
+ style: style
13
+ }), children);
9
14
  };
10
15
  export default renderBlockquote;
@@ -43,13 +43,17 @@ var CheckListItem = /*#__PURE__*/function (_React$PureComponent) {
43
43
  var _this$props2 = this.props,
44
44
  attributes = _this$props2.attributes,
45
45
  children = _this$props2.children,
46
- style = _this$props2.style,
47
- node = _this$props2.element;
48
- var _ref = node || {},
46
+ element = _this$props2.element;
47
+ var _ref = element || {},
48
+ id = _ref.id,
49
+ align = _ref.align,
49
50
  _ref$checked = _ref.checked,
50
51
  checked = _ref$checked === void 0 ? false : _ref$checked;
52
+ var style = {
53
+ textAlign: align
54
+ };
51
55
  return /*#__PURE__*/React.createElement("div", Object.assign({
52
- "data-id": node.id
56
+ "data-id": id
53
57
  }, attributes, {
54
58
  style: style
55
59
  }), /*#__PURE__*/React.createElement("span", {
@@ -1,3 +1,4 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
1
2
  import React from 'react';
2
3
  import { Node } from '@seafile/slate';
3
4
  import { Placeholder } from '../../core';
@@ -9,6 +10,9 @@ var renderHeader = function renderHeader(props, editor) {
9
10
  var type = element.type;
10
11
  var level = type.split('header')[1];
11
12
  var Tag = "h".concat(level);
13
+ var style = {
14
+ textAlign: element.align
15
+ };
12
16
  var isShowPlaceHolder = false;
13
17
  var firstChild = editor.children[0];
14
18
  if (firstChild.id === element.id && Node.string(element) === '' && !isComposing) {
@@ -18,9 +22,9 @@ var renderHeader = function renderHeader(props, editor) {
18
22
  id: element.id,
19
23
  "data-id": element.id
20
24
  }, attributes, {
21
- style: {
25
+ style: _objectSpread({
22
26
  position: isShowPlaceHolder ? 'relative' : ''
23
- }
27
+ }, style)
24
28
  }), isShowPlaceHolder && /*#__PURE__*/React.createElement(Placeholder, {
25
29
  title: 'Please_enter_title'
26
30
  }), children);
@@ -3,13 +3,15 @@ var withHtml = function withHtml(editor) {
3
3
  var insertData = editor.insertData;
4
4
  var newEditor = editor;
5
5
  newEditor.insertData = function (data) {
6
- var htmlContent = data.getData('text/html') || '';
7
- if (htmlContent) {
8
- var content = deserializeHtml(htmlContent);
9
- editor.insertFragment(content);
10
- return;
6
+ if (!newEditor.insertFragmentData(data)) {
7
+ var htmlContent = data.getData('text/html') || '';
8
+ if (htmlContent) {
9
+ var content = deserializeHtml(htmlContent);
10
+ editor.insertFragment(content);
11
+ return;
12
+ }
13
+ insertData(data);
11
14
  }
12
- insertData(data);
13
15
  };
14
16
  return newEditor;
15
17
  };
@@ -9,6 +9,7 @@ import CodeBlockPlugin from './code-block';
9
9
  import ImagePlugin from './image';
10
10
  import TablePlugin from './table';
11
11
  import HtmlPlugin from './html';
12
- var Plugins = [MarkDownPlugin, HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, CodeBlockPlugin, ImagePlugin, TablePlugin, TextPlugin, HtmlPlugin];
12
+ import TextAlignPlugin from './text-align';
13
+ var Plugins = [MarkDownPlugin, HtmlPlugin, HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, CodeBlockPlugin, ImagePlugin, TablePlugin, TextPlugin, TextAlignPlugin];
13
14
  export default Plugins;
14
- export { MarkDownPlugin, HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, CodeBlockPlugin, ImagePlugin, TablePlugin, TextPlugin, HtmlPlugin };
15
+ export { MarkDownPlugin, HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, CodeBlockPlugin, ImagePlugin, TablePlugin, TextPlugin, HtmlPlugin, TextAlignPlugin };
@@ -7,16 +7,30 @@ var renderList = function renderList(props, editor) {
7
7
  var Tag = node.type === ORDERED_LIST ? 'ol' : 'ul';
8
8
  return /*#__PURE__*/React.createElement(Tag, Object.assign({
9
9
  "data-id": node.id,
10
- className: "list-container"
10
+ className: "list-container d-flex flex-column"
11
11
  }, attributes), children);
12
12
  };
13
13
  var renderListItem = function renderListItem(props, editor) {
14
14
  var attributes = props.attributes,
15
15
  children = props.children,
16
16
  element = props.element;
17
+ var align = element.children[0].align;
18
+ var className = '';
19
+ switch (align) {
20
+ case 'center':
21
+ className = 'align-self-center';
22
+ break;
23
+ case 'right':
24
+ className = 'align-self-end';
25
+ break;
26
+ default:
27
+ className = '';
28
+ }
17
29
  return /*#__PURE__*/React.createElement("li", Object.assign({
18
30
  "data-id": element.id
19
- }, attributes), children);
31
+ }, attributes, {
32
+ className: className
33
+ }), children);
20
34
  };
21
35
  var renderListLic = function renderListLic(props, editor) {
22
36
  var attributes = props.attributes,
@@ -5,4 +5,8 @@ export var EMPTY_SELECTED_RANGE = {
5
5
  maxRowIndex: -1,
6
6
  minColIndex: -1,
7
7
  maxColIndex: -1
8
- };
8
+ };
9
+ export var TABLE_MAX_WIDTH = 672; // 673 = 794 - 2[borderLeft + borderRight] - 120[paddingLeft + paddingRight]
10
+
11
+ export var TABLE_ROW_MIN_HEIGHT = 42;
12
+ export var TABLE_CELL_MIN_WIDTH = 35;
@@ -3,10 +3,9 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
3
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
4
  import slugid from 'slugid';
5
5
  import { Editor, Range, Transforms } from '@seafile/slate';
6
- import { getNodeType, getParentNode, getSelectedNodeByType, isTextNode, getSelectedElems, replaceNodeChildren, focusEditor } from '../../core';
7
- import { getNodePathById } from '../../../socket/helpers';
6
+ import { getNodeType, getParentNode, getSelectedNodeByType, isTextNode, getSelectedElems, focusEditor, getNode, findPath } from '../../core';
8
7
  import { ELEMENT_TYPE, TABLE_ELEMENT, TABLE_ELEMENT_POSITION } from '../../constants';
9
- import { TABLE_MAX_ROWS, TABLE_MAX_COLUMNS, EMPTY_SELECTED_RANGE } from './constants';
8
+ import { TABLE_MAX_ROWS, TABLE_MAX_COLUMNS, EMPTY_SELECTED_RANGE, TABLE_ROW_MIN_HEIGHT, TABLE_CELL_MIN_WIDTH, TABLE_MAX_WIDTH } from './constants';
10
9
  import EventBus from '../../../utils/event-bus';
11
10
  import { EXTERNAL_EVENT } from '../../../../constants';
12
11
  import ObjectUtils from '../../../utils/object-utils';
@@ -60,7 +59,10 @@ export var generateTableRow = function generateTableRow(colsCount) {
60
59
  return {
61
60
  id: slugid.nice(),
62
61
  type: ELEMENT_TYPE.TABLE_ROW,
63
- children: children
62
+ children: children,
63
+ style: {
64
+ minHeight: TABLE_ROW_MIN_HEIGHT
65
+ }
64
66
  };
65
67
  };
66
68
  export var generateEmptyTable = function generateEmptyTable() {
@@ -72,10 +74,18 @@ export var generateEmptyTable = function generateEmptyTable() {
72
74
  var tableRow = generateTableRow(colsCount);
73
75
  children.push(tableRow);
74
76
  }
77
+ var columnWidth = Math.max(TABLE_CELL_MIN_WIDTH, parseInt(TABLE_MAX_WIDTH / colsCount));
78
+ var columns = [];
79
+ for (var _i = 0; _i < colsCount; _i++) {
80
+ columns.push({
81
+ width: columnWidth
82
+ });
83
+ }
75
84
  return {
76
85
  id: slugid.nice(),
77
86
  type: ELEMENT_TYPE.TABLE,
78
- children: children
87
+ children: children,
88
+ columns: columns
79
89
  };
80
90
  };
81
91
  export var insertTable = function insertTable(editor, size, selection) {
@@ -90,16 +100,16 @@ export var getSelectedInfo = function getSelectedInfo(editor) {
90
100
  var currentTable = getSelectedNodeByType(editor, ELEMENT_TYPE.TABLE);
91
101
  var currentRow = getSelectedNodeByType(editor, ELEMENT_TYPE.TABLE_ROW);
92
102
  var currentCell = getSelectedNodeByType(editor, ELEMENT_TYPE.TABLE_CELL);
93
- var currentCellPath = getNodePathById(editor, currentCell.id);
103
+ var currentCellPath = findPath(editor, currentCell);
94
104
  return {
95
105
  table: currentTable,
96
- tablePath: getNodePathById(editor, currentTable.id),
106
+ tablePath: findPath(editor, currentTable),
97
107
  tableSize: [currentTable.children.length, currentRow.children.length],
98
108
  row: currentRow,
99
- rowPath: getNodePathById(editor, currentRow.id),
109
+ rowPath: findPath(editor, currentRow),
100
110
  rowIndex: currentCellPath[currentCellPath.length - 2],
101
111
  cell: currentCell,
102
- cellPath: getNodePathById(editor, currentCell.id),
112
+ cellPath: findPath(editor, currentCell),
103
113
  cellIndex: currentCellPath[currentCellPath.length - 1]
104
114
  };
105
115
  };
@@ -128,13 +138,15 @@ export var setTextStyle = function setTextStyle(editor, style) {
128
138
  var firstTableCellNodePath;
129
139
  selectedNodes.forEach(function (node) {
130
140
  if (node.type === ELEMENT_TYPE.TABLE_CELL) {
131
- var targetNode = node.children[0];
132
- var path = getNodePathById(editor, node.id);
133
- firstTableCellNodePath = firstTableCellNodePath ? firstTableCellNodePath : path;
134
- replaceNodeChildren(editor, {
135
- at: path,
136
- nodes: _objectSpread(_objectSpread({}, targetNode), style)
137
- });
141
+ var path = findPath(editor, node);
142
+ if (path) {
143
+ firstTableCellNodePath = firstTableCellNodePath ? firstTableCellNodePath : path;
144
+ Transforms.setNodes(editor, {
145
+ style: _objectSpread(_objectSpread({}, node.style), style)
146
+ }, {
147
+ at: path
148
+ });
149
+ }
138
150
  }
139
151
  });
140
152
  if (firstTableCellNodePath) {
@@ -151,6 +163,7 @@ export var insertTableElement = function insertTableElement(editor, type) {
151
163
  var position = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : TABLE_ELEMENT_POSITION.AFTER;
152
164
  var count = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
153
165
  var _getSelectedInfo = getSelectedInfo(editor),
166
+ table = _getSelectedInfo.table,
154
167
  tablePath = _getSelectedInfo.tablePath,
155
168
  tableSize = _getSelectedInfo.tableSize,
156
169
  rowIndex = _getSelectedInfo.rowIndex,
@@ -175,9 +188,11 @@ export var insertTableElement = function insertTableElement(editor, type) {
175
188
  if (tableSize[1] >= TABLE_MAX_COLUMNS) return;
176
189
  var newCellIndex = position === TABLE_ELEMENT_POSITION.AFTER ? cellIndex + 1 : cellIndex;
177
190
  var _validCount = Math.min(TABLE_MAX_COLUMNS - tableSize[1], count);
191
+ var newColumns = getTableColumnsAfterInsertColumn(editor, table, newCellIndex, _validCount);
192
+ updateColumnWidth(editor, table, newColumns);
178
193
  for (var j = 0; j < _validCount; j++) {
179
- for (var _i = 0; _i < tableSize[0]; _i++) {
180
- var newCellPath = [].concat(_toConsumableArray(tablePath), [_i, newCellIndex]);
194
+ for (var _i2 = 0; _i2 < tableSize[0]; _i2++) {
195
+ var newCellPath = [].concat(_toConsumableArray(tablePath), [_i2, newCellIndex]);
181
196
  var newCell = generateTableCell();
182
197
  Transforms.insertNodes(editor, newCell, {
183
198
  at: newCellPath
@@ -207,6 +222,7 @@ var removeTable = function removeTable(editor, path) {
207
222
  };
208
223
  export var removeTableElement = function removeTableElement(editor, type) {
209
224
  var _getSelectedInfo3 = getSelectedInfo(editor),
225
+ table = _getSelectedInfo3.table,
210
226
  tablePath = _getSelectedInfo3.tablePath,
211
227
  tableSize = _getSelectedInfo3.tableSize,
212
228
  rowPath = _getSelectedInfo3.rowPath,
@@ -261,10 +277,13 @@ export var removeTableElement = function removeTableElement(editor, type) {
261
277
  removeTable(editor, tablePath);
262
278
  return;
263
279
  }
264
- for (var _i2 = 0; _i2 < tableSize[0]; _i2++) {
280
+ var _columns = getTableColumns(editor, table);
281
+ var _newColumns = [].concat(_toConsumableArray(_columns.slice(0, minColIndex)), _toConsumableArray(_columns.slice(maxColIndex + 1)));
282
+ updateColumnWidth(editor, table, _newColumns);
283
+ for (var _i3 = 0; _i3 < tableSize[0]; _i3++) {
265
284
  for (var j = minColIndex; j <= maxColIndex; j++) {
266
285
  // count
267
- var cellPath = [].concat(_toConsumableArray(tablePath), [_i2, minColIndex]);
286
+ var cellPath = [].concat(_toConsumableArray(tablePath), [_i3, minColIndex]);
268
287
  Transforms.removeNodes(editor, {
269
288
  at: cellPath
270
289
  });
@@ -274,8 +293,12 @@ export var removeTableElement = function removeTableElement(editor, type) {
274
293
  focusEditor(editor, _focusPath3);
275
294
  return;
276
295
  }
277
- for (var _i3 = 0; _i3 < tableSize[0]; _i3++) {
278
- var _cellPath = [].concat(_toConsumableArray(tablePath), [_i3, cellIndex]);
296
+ var columns = getTableColumns(editor, table);
297
+ var newColumns = columns.slice(0);
298
+ newColumns.splice(cellIndex, 1);
299
+ updateColumnWidth(editor, table, newColumns);
300
+ for (var _i4 = 0; _i4 < tableSize[0]; _i4++) {
301
+ var _cellPath = [].concat(_toConsumableArray(tablePath), [_i4, cellIndex]);
279
302
  Transforms.removeNodes(editor, {
280
303
  at: _cellPath
281
304
  });
@@ -292,4 +315,118 @@ export var setTableSelectedRange = function setTableSelectedRange(editor, range)
292
315
  return;
293
316
  }
294
317
  editor.tableSelectedRange = EMPTY_SELECTED_RANGE;
318
+ };
319
+ export var updateTableRowHeight = function updateTableRowHeight(editor, element, rowHeight) {
320
+ var path = findPath(editor, element);
321
+ var targetNode = getNode(editor, path);
322
+ if (targetNode.style && targetNode.style.minHeight === rowHeight) return;
323
+ Transforms.setNodes(editor, {
324
+ style: _objectSpread(_objectSpread({}, targetNode.style), {}, {
325
+ minHeight: rowHeight
326
+ })
327
+ }, {
328
+ at: path
329
+ });
330
+ };
331
+ export var updateColumnWidth = function updateColumnWidth(editor, element, columns) {
332
+ var path = findPath(editor, element);
333
+ Transforms.setNodes(editor, {
334
+ columns: columns
335
+ }, {
336
+ at: path
337
+ });
338
+ };
339
+ export var getTableColumnsWidth = function getTableColumnsWidth() {
340
+ var columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
341
+ if (!Array.isArray(columns) || columns.length === 0) return 0;
342
+ return columns.reduce(function (pre, cur) {
343
+ return pre + cur.width;
344
+ }, 0);
345
+ };
346
+ export var getTableColumnsAfterInsertColumn = function getTableColumnsAfterInsertColumn(editor, element, targetColumnIndex, insertColumnCount) {
347
+ var columns = getTableColumns(editor, element);
348
+ var newColumns = columns.slice(0);
349
+ var totalColumnsWidth = getTableColumnsWidth(columns);
350
+ var targetColumn = columns[targetColumnIndex] || columns[targetColumnIndex - 1];
351
+ var targetInsertColumnsWidth = targetColumn.width * insertColumnCount;
352
+
353
+ // Currently in scrolling state, insert directly
354
+ if (totalColumnsWidth > TABLE_MAX_WIDTH) {
355
+ for (var i = 0; i < insertColumnCount; i++) {
356
+ newColumns.splice(targetColumnIndex, 0, targetColumn);
357
+ }
358
+ return newColumns;
359
+ }
360
+
361
+ // Not currently scrolling
362
+ // It is not a scroll state after inserting a new column
363
+ if (totalColumnsWidth + targetInsertColumnsWidth < TABLE_MAX_WIDTH) {
364
+ for (var _i5 = 0; _i5 < insertColumnCount; _i5++) {
365
+ newColumns.push(targetColumn);
366
+ }
367
+ return newColumns;
368
+ }
369
+
370
+ // After inserting a new column is a scrolling state
371
+ for (var _i6 = 0; _i6 < insertColumnCount; _i6++) {
372
+ totalColumnsWidth += targetColumn.width;
373
+ newColumns.splice(targetColumnIndex, 0, targetColumn);
374
+ }
375
+ var proportion = totalColumnsWidth / (TABLE_MAX_WIDTH - 1);
376
+ return newColumns.map(function (column) {
377
+ return _objectSpread(_objectSpread({}, column), {}, {
378
+ width: Math.max(parseInt(column.width / proportion), TABLE_CELL_MIN_WIDTH)
379
+ });
380
+ });
381
+ };
382
+ export var getTableColumns = function getTableColumns(editor, element) {
383
+ if (!element) return [];
384
+ var tableElement = element;
385
+ if (element.type === ELEMENT_TYPE.TABLE_CELL) {
386
+ var cellPath = findPath(editor, element);
387
+ var tablePath = cellPath.slice(0, -2);
388
+ tableElement = getNode(editor, tablePath);
389
+ }
390
+ var _tableElement = tableElement,
391
+ columns = _tableElement.columns,
392
+ children = _tableElement.children;
393
+ if (columns) return columns;
394
+ var columnsCount = children[0].children.length;
395
+ var initColumns = [];
396
+ for (var i = 0; i < columnsCount; i++) {
397
+ var column = {
398
+ width: Math.max(TABLE_CELL_MIN_WIDTH, parseInt(TABLE_MAX_WIDTH / columnsCount))
399
+ };
400
+ initColumns.push(column);
401
+ }
402
+ return initColumns;
403
+ };
404
+ export var getCellColumn = function getCellColumn(editor, cellElement) {
405
+ var column = {
406
+ width: TABLE_CELL_MIN_WIDTH
407
+ };
408
+ if (!editor || !cellElement) return column;
409
+ var cellPath = findPath(editor, cellElement);
410
+ if (!cellPath) return column;
411
+ var pathLength = cellPath.length;
412
+ var cellIndex = cellPath[pathLength - 1];
413
+ var tablePath = cellPath.slice(0, -2);
414
+ var tableElement = getNode(editor, tablePath);
415
+ var columns = tableElement.columns;
416
+ if (columns) {
417
+ column = columns[cellIndex];
418
+ } else {
419
+ var columnsCount = tableElement.children[0].children.length;
420
+ column = {
421
+ width: Math.max(TABLE_CELL_MIN_WIDTH, parseInt(TABLE_MAX_WIDTH / columnsCount))
422
+ };
423
+ }
424
+ return column;
425
+ };
426
+ export var getFirstTableCell = function getFirstTableCell(element) {
427
+ var tableCellElement = element;
428
+ while (tableCellElement && !(tableCellElement.hasAttribute('row-index') && tableCellElement.hasAttribute('cell-index'))) {
429
+ tableCellElement = tableCellElement.parentNode;
430
+ }
431
+ return tableCellElement;
295
432
  };
@@ -54,7 +54,7 @@ var ActiveTableMenu = /*#__PURE__*/function (_Component) {
54
54
  var t = _this.props.t;
55
55
  return /*#__PURE__*/React.createElement(CommonMenu, {
56
56
  id: "text-align",
57
- iconClass: "sdocfont sdoc-left-alignment mr-1",
57
+ iconClass: "sdocfont sdoc-align-left mr-1",
58
58
  ref: function ref(_ref) {
59
59
  return _this.textAlignRef = _ref;
60
60
  }
@@ -62,12 +62,12 @@ var ActiveTableMenu = /*#__PURE__*/function (_Component) {
62
62
  className: "dropdown-item",
63
63
  onClick: _this.setTextAlignStyle.bind(_assertThisInitialized(_this), 'left')
64
64
  }, /*#__PURE__*/React.createElement("i", {
65
- className: "sdocfont sdoc-left-alignment mr-2"
65
+ className: "sdocfont sdoc-align-left mr-2"
66
66
  }), t('left')), /*#__PURE__*/React.createElement("button", {
67
67
  className: "dropdown-item",
68
68
  onClick: _this.setTextAlignStyle.bind(_assertThisInitialized(_this), 'center')
69
69
  }, /*#__PURE__*/React.createElement("i", {
70
- className: "sdocfont sdoc-center-horizontally mr-2"
70
+ className: "sdocfont sdoc-align-center mr-2"
71
71
  }), t('center')), /*#__PURE__*/React.createElement("button", {
72
72
  className: "dropdown-item",
73
73
  onClick: _this.setTextAlignStyle.bind(_assertThisInitialized(_this), 'right')
@@ -9,7 +9,7 @@ import { getNodeType, getParentNode, getSelectedNodeByType, isTextNode, isLastNo
9
9
  import { ELEMENT_TYPE, TABLE_ELEMENT, TABLE_ELEMENT_POSITION, KEYBOARD } from '../../constants';
10
10
  import { TABLE_MAX_ROWS, EMPTY_SELECTED_RANGE } from './constants';
11
11
  import ObjectUtils from '../../../utils/object-utils';
12
- import { getSelectedInfo } from './helpers';
12
+ import { getSelectedInfo, insertTableElement } from './helpers';
13
13
  var deleteHandler = function deleteHandler(editor) {
14
14
  var selection = editor.selection,
15
15
  tableSelectedRange = editor.tableSelectedRange;
@@ -352,7 +352,7 @@ var withTable = function withTable(editor) {
352
352
  tablePath = _getSelectedInfo4.tablePath,
353
353
  tableSize = _getSelectedInfo4.tableSize;
354
354
  if (tableSize[0] === TABLE_MAX_ROWS) return;
355
- newEditor.insertTableElement(TABLE_ELEMENT.ROW, TABLE_ELEMENT_POSITION.AFTER);
355
+ insertTableElement(newEditor, TABLE_ELEMENT.ROW, TABLE_ELEMENT_POSITION.AFTER);
356
356
  Transforms.select(newEditor, [].concat(_toConsumableArray(tablePath), [tableSize[0], 0]));
357
357
  return;
358
358
  }
@@ -0,0 +1,17 @@
1
+ import { createContext, useContext } from 'react';
2
+ export var TableRootContext = createContext();
3
+ export var useTableRootContext = function useTableRootContext() {
4
+ return useContext(TableRootContext);
5
+ };
6
+ export var TableContext = createContext();
7
+ export var useTableContext = function useTableContext() {
8
+ return useContext(TableContext);
9
+ };
10
+ export var ResizeHandlersContext = createContext();
11
+ export var useResizeHandlersContext = function useResizeHandlersContext() {
12
+ return useContext(ResizeHandlersContext);
13
+ };
14
+ export var SettingSelectRangeContext = createContext();
15
+ export var useSettingSelectRangeContext = function useSettingSelectRangeContext() {
16
+ return useContext(SettingSelectRangeContext);
17
+ };