@seafile/sdoc-editor 1.0.27 → 1.0.28-alpha.0

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 (27) hide show
  1. package/dist/basic-sdk/comment/components/global-comment/index.js +1 -1
  2. package/dist/basic-sdk/comment/utils/index.js +1 -1
  3. package/dist/basic-sdk/editor/comment-article.js +1 -1
  4. package/dist/basic-sdk/extension/constants/menus-config.js +3 -3
  5. package/dist/basic-sdk/extension/core/queries/index.js +7 -0
  6. package/dist/basic-sdk/extension/core/utils/index.js +4 -3
  7. package/dist/basic-sdk/extension/plugins/callout/plugin.js +1 -2
  8. package/dist/basic-sdk/extension/plugins/check-list/helpers.js +33 -4
  9. package/dist/basic-sdk/extension/plugins/code-block/hover-menu/index.js +1 -1
  10. package/dist/basic-sdk/extension/plugins/list/plugin/shortcut.js +1 -1
  11. package/dist/basic-sdk/extension/plugins/mention/render-elem/participant-popover.js +1 -1
  12. package/dist/basic-sdk/extension/plugins/seatable-tables/op-menu/index.css +133 -6
  13. package/dist/basic-sdk/extension/plugins/seatable-tables/op-menu/index.js +224 -15
  14. package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/index.css +1 -1
  15. package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/seatable-table.js +2 -2
  16. package/dist/basic-sdk/extension/plugins/table/menu/vertical-align-popover/style.css +0 -1
  17. package/dist/basic-sdk/extension/toolbar/side-toolbar/helpers.js +8 -1
  18. package/dist/basic-sdk/extension/toolbar/side-toolbar/transform-menus.js +7 -1
  19. package/package.json +1 -1
  20. package/public/locales/en/sdoc-editor.json +1 -1
  21. package/public/locales/ru/sdoc-editor.json +1 -1
  22. package/public/media/sdoc-editor-font/iconfont.eot +0 -0
  23. package/public/media/sdoc-editor-font/iconfont.svg +8 -0
  24. package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
  25. package/public/media/sdoc-editor-font/iconfont.woff +0 -0
  26. package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
  27. package/public/media/sdoc-editor-font.css +24 -10
@@ -1,5 +1,5 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
- import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
2
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
3
3
  import dayjs from 'dayjs';
4
4
  import EventBus from '../../../utils/event-bus';
5
5
  import useCommentList from '../../hooks/comment-hooks/use-comment-list';
@@ -31,7 +31,7 @@ export const searchCollaborators = (collaborators, searchValue) => {
31
31
  };
32
32
 
33
33
  // Mailto, file, tel, callto, sms, cid, xmpp, etc. are not support
34
- const ALLOWED_URL_REG = /((http|https):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|])/g;
34
+ // const ALLOWED_URL_REG = /((http|https):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|])/g;
35
35
  // export const textToHtml = (text) => {
36
36
  // if (!text) return '';
37
37
  // return text.replace(ALLOWED_URL_REG, '<a href="$1" target="_blank" class=' + COMMENT_URL_CLASSNAME + '>$1</a>');
@@ -1,7 +1,7 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
2
  import React, { useCallback, useMemo } from 'react';
3
3
  import { Editable, ReactEditor, Slate } from '@seafile/slate-react';
4
- import { Editor, Node, Range } from '@seafile/slate';
4
+ import { Editor, Node } from '@seafile/slate';
5
5
  import isHotkey from 'is-hotkey';
6
6
  import scrollIntoView from 'scroll-into-view-if-needed';
7
7
  import { renderLeaf } from '../extension';
@@ -64,7 +64,7 @@ export const MENUS_CONFIG_MAP = {
64
64
  [CHECK_LIST_ITEM]: {
65
65
  id: CHECK_LIST_ITEM,
66
66
  iconClass: 'sdocfont sdoc-check-square',
67
- text: 'Check_list_item'
67
+ text: 'Check_list'
68
68
  },
69
69
  [CODE_BLOCK]: {
70
70
  id: CODE_BLOCK,
@@ -255,7 +255,7 @@ export const SIDE_TRANSFORM_MENUS_CONFIG = [{
255
255
  id: CHECK_LIST_ITEM,
256
256
  iconClass: 'sdocfont sdoc-check-square',
257
257
  type: CHECK_LIST_ITEM,
258
- text: 'Check_list_item'
258
+ text: 'Check_list'
259
259
  }, {
260
260
  id: BLOCKQUOTE,
261
261
  iconClass: 'sdocfont sdoc-quote1',
@@ -315,7 +315,7 @@ export const SIDE_INSERT_MENUS_CONFIG = {
315
315
  id: '',
316
316
  iconClass: 'sdocfont sdoc-check-square',
317
317
  type: CHECK_LIST_ITEM,
318
- text: 'Check_list_item'
318
+ text: 'Check_list'
319
319
  },
320
320
  [PARAGRAPH]: {
321
321
  id: PARAGRAPH,
@@ -451,4 +451,11 @@ export const isCurrentLineEmpty = editor => {
451
451
  };
452
452
  export const isCurrentLineHasText = node => {
453
453
  return Node.string(node).trim() !== '';
454
+ };
455
+ export const isMultiLevelList = listNode => {
456
+ const {
457
+ children
458
+ } = listNode || {};
459
+ let isMultiLevel = (children === null || children === void 0 ? void 0 : children.find(item => (item === null || item === void 0 ? void 0 : item.children.length) > 1)) ? true : false;
460
+ return isMultiLevel;
454
461
  };
@@ -17,10 +17,10 @@ export const match = (node, path, predicate) => {
17
17
  }
18
18
  return predicate(node, path);
19
19
  };
20
- export const generateDefaultText = () => {
20
+ export const generateDefaultText = text => {
21
21
  return {
22
22
  id: slugid.nice(),
23
- text: ''
23
+ text: text || ''
24
24
  };
25
25
  };
26
26
  export const generateDefaultParagraph = () => {
@@ -32,11 +32,12 @@ export const generateDefaultParagraph = () => {
32
32
  };
33
33
  export const generateEmptyElement = function (type) {
34
34
  let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
35
+ let text = arguments.length > 2 ? arguments[2] : undefined;
35
36
  return _objectSpread(_objectSpread({
36
37
  id: slugid.nice(),
37
38
  type
38
39
  }, props), {}, {
39
- children: [generateDefaultText()]
40
+ children: [generateDefaultText(text)]
40
41
  });
41
42
  };
42
43
  export function Placeholder(props) {
@@ -17,8 +17,7 @@ const withCallout = editor => {
17
17
  insertFragment,
18
18
  deleteBackward,
19
19
  onHotKeyDown,
20
- insertData,
21
- onCopy
20
+ insertData
22
21
  } = editor;
23
22
  const newEditor = editor;
24
23
  newEditor.deleteBackward = unit => {
@@ -1,6 +1,6 @@
1
- import { Transforms, Editor, Element } from '@seafile/slate';
2
- import { CHECK_LIST_ITEM, PARAGRAPH, ELEMENT_TYPE, INSERT_POSITION } from '../../constants';
3
- import { getSelectedNodeByType, generateEmptyElement } from '../../core';
1
+ import { Transforms, Editor, Element, Node } from '@seafile/slate';
2
+ import { CHECK_LIST_ITEM, PARAGRAPH, ELEMENT_TYPE, INSERT_POSITION, ORDERED_LIST, UNORDERED_LIST } from '../../constants';
3
+ import { getSelectedNodeByType, generateEmptyElement, isMultiLevelList } from '../../core';
4
4
  export const isMenuDisabled = (editor, readonly) => {
5
5
  if (readonly) return true;
6
6
  if (editor.selection == null) return true;
@@ -19,7 +19,7 @@ export const isMenuDisabled = (editor, readonly) => {
19
19
  } = element;
20
20
  if (type === ELEMENT_TYPE.CODE_LINE) return true;
21
21
  if (type === ELEMENT_TYPE.CODE_BLOCK) return true;
22
- if (type === ELEMENT_TYPE.LIST_ITEM) return true;
22
+ if ([ORDERED_LIST, UNORDERED_LIST].includes(type) && isMultiLevelList(element)) return true;
23
23
  if (type === ELEMENT_TYPE.TABLE) return true;
24
24
  if (type === ELEMENT_TYPE.TABLE_ROW) return true;
25
25
  if (type === ELEMENT_TYPE.TABLE_CELL) return true;
@@ -33,6 +33,27 @@ export const getCheckListItemType = editor => {
33
33
  if (!node) return PARAGRAPH;
34
34
  return node.type;
35
35
  };
36
+ export const convertToCheck = (editor, listNode, listPath) => {
37
+ const checkList = [];
38
+ const {
39
+ children
40
+ } = listNode || {};
41
+ children.forEach(item => {
42
+ const text = Node.string(item);
43
+ const checkNode = generateEmptyElement(CHECK_LIST_ITEM, {}, text);
44
+ checkList.push(checkNode);
45
+ });
46
+ Transforms.removeNodes(editor, {
47
+ at: [listPath[0]]
48
+ });
49
+ Transforms.insertNodes(editor, checkList, {
50
+ at: [listPath[0]]
51
+ });
52
+ Transforms.select(editor, {
53
+ path: [listPath[0], 0],
54
+ offset: 0
55
+ });
56
+ };
36
57
  export const setCheckListItemType = (editor, newType, insertPosition) => {
37
58
  if (insertPosition === INSERT_POSITION.AFTER) {
38
59
  const p = generateEmptyElement(PARAGRAPH);
@@ -42,6 +63,14 @@ export const setCheckListItemType = (editor, newType, insertPosition) => {
42
63
  });
43
64
  Transforms.select(editor, [path[0] + 1]);
44
65
  }
66
+ const path = Editor.path(editor, editor.selection);
67
+ if (path) {
68
+ const [targetNode, targetPath] = Editor.node(editor, [path[0]]);
69
+ if (targetNode && [ORDERED_LIST, UNORDERED_LIST].includes(targetNode === null || targetNode === void 0 ? void 0 : targetNode.type)) {
70
+ convertToCheck(editor, targetNode, targetPath);
71
+ return;
72
+ }
73
+ }
45
74
  Transforms.setNodes(editor, {
46
75
  type: newType
47
76
  });
@@ -1,4 +1,4 @@
1
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
1
+ import React, { useCallback, useEffect, useState } from 'react';
2
2
  import { Input } from 'reactstrap';
3
3
  import { useTranslation, withTranslation } from 'react-i18next';
4
4
  import Tooltip from '../../../../../components/tooltip';
@@ -1,5 +1,5 @@
1
1
  import { Editor, Path, Range, Transforms } from '@seafile/slate';
2
- import { INSERT_POSITION, ORDERED_LIST, PARAGRAPH } from '../../../constants';
2
+ import { ORDERED_LIST, PARAGRAPH } from '../../../constants';
3
3
  import { getBeforeText, setListType } from '../helpers';
4
4
  import { focusEditor, getLastChild, getPreviousPath } from '../../../core';
5
5
  import { generateEmptyListItem } from '../model';
@@ -136,7 +136,7 @@ const ParticipantPopover = _ref => {
136
136
  setActiveCollaboratorIndex(nextActiveCollaboratorIndex);
137
137
  }, [searchedCollaborators, activeCollaboratorIndex]);
138
138
  const onSelectCollaborator = useCallback(collaborator => {
139
- const [node, path] = getMentionTempIptEntry(editor);
139
+ const [, path] = getMentionTempIptEntry(editor);
140
140
  insertMention(editor, collaborator);
141
141
  addParticipants(collaborator.username);
142
142
  Transforms.removeNodes(editor, {
@@ -1,16 +1,143 @@
1
- .seatable-op-menu {
1
+ .sdoc-seatable-hover-menu-container {
2
2
  position: absolute;
3
- padding: 7px;
3
+ height: 42px;
4
+ z-index: 101;
5
+ width: fit-content;
6
+ max-width: 250px;
7
+ }
8
+
9
+ .sdoc-seatable-hover-menu-container .hover-menu-container {
4
10
  height: 36px;
11
+ width: 100%;
12
+ padding: 7px 8px;
5
13
  background-color: #fff;
6
- border: 1px solid #eee;
7
- border-radius: 3px;
8
- z-index: 100;
9
14
  display: flex;
15
+ justify-content: space-around;
16
+ align-items: center;
17
+ border-radius: 3px;
18
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
19
+ border: 1px solid #e8e8e8;
20
+ }
21
+
22
+ .sdoc-seatable-hover-menu-container .hover-menu-container .active {
23
+ color: #212529;
24
+ text-decoration: none;
25
+ background: #f2f2f2;
26
+ }
27
+
28
+ .sdoc-seatable-hover-menu-container .hover-menu-container .op-item {
29
+ position: relative;
30
+ height: 100%;
31
+ width: 100%;
32
+ font-size: 12px;
33
+ color: #212529;
34
+ border-radius: 2px;
35
+ text-align: center;
36
+ line-height: 20px;
37
+ }
38
+
39
+ .sdoc-seatable-hover-menu-container .sdoc-seatable-hover-operation-item.sdoc-seatable-hover-operation-lang .op-item {
40
+ padding: 0 5px;
41
+ }
42
+
43
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-hover-operation-lang .icon-font {
44
+ display: inline-flex;
45
+ align-items: center;
46
+ justify-content: center;
47
+ margin-left: 8px;
48
+ }
49
+
50
+ .sdoc-seatable-hover-menu-container .sdoc-seatable-hover-operation-item {
51
+ height: 20px;
52
+ width: 20px;
53
+ text-align: center;
54
+ justify-content: center;
55
+ }
56
+
57
+ .sdoc-seatable-hover-menu-container .sdoc-seatable-hover-operation-item.sdoc-seatable-hover-operation-lang {
58
+ width: fit-content;
59
+ }
60
+
61
+ .sdoc-seatable-hover-menu-container .sdoc-seatable-hover-operation-lang .icon-font {
62
+ color: #999;
63
+ }
64
+
65
+ .sdoc-seatable-hover-menu-container .sdoc-seatable-hover-operation-divider {
66
+ height: 20px;
67
+ width: 1px;
68
+ background-color: #e5e5e5;
69
+ margin: 0 8px;
70
+ }
71
+
72
+ .sdoc-seatable-hover-menu-container .hover-menu-container .op-item:hover {
73
+ color: #212529;
74
+ text-decoration: none;
75
+ background: #f2f2f2;
10
76
  }
11
77
 
12
- .seatable-op-menu .sdocfont {
78
+ .sdoc-seatable-hover-menu-container .icon-font {
13
79
  font-size: 12px;
14
80
  color: #444;
81
+ }
82
+
83
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver {
84
+ position: absolute;
85
+ top: 38px;
86
+ left: 0px;
87
+ width: 200px;
88
+ overflow-y: hidden;
89
+ background-color: #fff;
90
+ border-radius: 4px;
91
+ box-shadow: 0 0 5px #ccc;
92
+ border: 1px solid #dedede;
93
+ }
94
+
95
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-right-popver {
96
+ left: 200px
97
+ }
98
+
99
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .tables-list-empty {
100
+ padding: 10px;
101
+ width: 100%;
102
+ font-size: 13px;
103
+ text-align: center;
104
+ line-height: 30px;
105
+ vertical-align: middle;
106
+ }
107
+
108
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .tables-list-ul {
109
+ list-style: none;
110
+ overflow-y: auto;
111
+ max-height: 280px;
112
+ min-height: 100px;
113
+ padding: 10px;
114
+ }
115
+
116
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .tables-list-ul .tables-list-li {
117
+ position: relative;
118
+ white-space: nowrap;
15
119
  cursor: pointer;
120
+ line-height: 30px;
121
+ height: 30px;
122
+ font-size: 13px;
123
+ padding-left: 12px;
124
+ display: flex;
125
+ justify-content: space-between;
126
+ }
127
+
128
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .tables-list-ul .tables-list-li:hover {
129
+ background-color: #f5f5f5;;
130
+ }
131
+
132
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .tables-list-ul .tables-list-li .active {
133
+ background-color: #f5f5f5;;
134
+ }
135
+
136
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .tables-list-ul .tables-list-li .li-check-mark {
137
+ opacity: 0;
138
+ padding: 0 10px;
139
+ }
140
+
141
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .tables-list-ul .tables-list-li .li-checked {
142
+ opacity: 1;
16
143
  }
@@ -1,29 +1,238 @@
1
- import React, { useCallback, useState } from 'react';
1
+ import React, { useCallback, useState, useEffect, useRef } from 'react';
2
+ import { useTranslation } from 'react-i18next';
2
3
  import { ElementPopover } from '../../../commons';
4
+ import Tooltip from '../../../../../components/tooltip';
5
+ import CustomSwitch from '../seatable-settings/custom-switch';
3
6
  import TableSettings from '../seatable-settings';
7
+ import { updateSeaTableTable } from '../helpers';
4
8
  import './index.css';
5
- export default function OpMenu(_ref) {
9
+ const TablesList = _ref => {
10
+ let {
11
+ tablesData,
12
+ onSelectTable,
13
+ selectedTableText
14
+ } = _ref;
15
+ const {
16
+ t
17
+ } = useTranslation();
18
+ if (!tablesData.length) {
19
+ return /*#__PURE__*/React.createElement("div", {
20
+ className: "tables-list-empty"
21
+ }, /*#__PURE__*/React.createElement("span", null, t('Search_not_found')));
22
+ }
23
+ return /*#__PURE__*/React.createElement("ul", {
24
+ className: "tables-list-ul"
25
+ }, tablesData.map(item => {
26
+ return /*#__PURE__*/React.createElement("li", {
27
+ className: "tables-list-li ".concat(selectedTableText === item.name ? 'active' : ''),
28
+ id: item._id,
29
+ key: item._id,
30
+ onClick: () => {
31
+ onSelectTable(item);
32
+ }
33
+ }, item.name, /*#__PURE__*/React.createElement("span", {
34
+ className: "li-check-mark ".concat(selectedTableText === item.name ? 'li-checked' : '')
35
+ }, /*#__PURE__*/React.createElement("i", {
36
+ className: "sdocfont sdoc-check-mark icon-font"
37
+ })));
38
+ }));
39
+ };
40
+ const TablesSettings = _ref2 => {
41
+ let {
42
+ settings,
43
+ updatePageSettings
44
+ } = _ref2;
45
+ const {
46
+ t
47
+ } = useTranslation();
48
+ return /*#__PURE__*/React.createElement("div", {
49
+ className: "tables-list-ul"
50
+ }, /*#__PURE__*/React.createElement("div", {
51
+ className: "setting-item"
52
+ }, /*#__PURE__*/React.createElement(CustomSwitch, {
53
+ checked: settings['show_record_numbers'] === true ? true : false,
54
+ isLocked: false,
55
+ title: t('Show_record_numbers'),
56
+ onPropertiesChanged: value => {
57
+ updatePageSettings({
58
+ show_record_numbers: value
59
+ });
60
+ }
61
+ })), /*#__PURE__*/React.createElement("div", {
62
+ className: "setting-item"
63
+ }, /*#__PURE__*/React.createElement(CustomSwitch, {
64
+ checked: settings['alternate_color'] === false ? false : true,
65
+ isLocked: false,
66
+ title: t('Alternate_color'),
67
+ onPropertiesChanged: value => {
68
+ updatePageSettings({
69
+ alternate_color: value
70
+ });
71
+ }
72
+ })));
73
+ };
74
+ export default function OpMenu(_ref3) {
6
75
  let {
7
76
  editor,
8
77
  element,
9
78
  menuPosition
10
- } = _ref;
79
+ } = _ref3;
80
+ console.log('element', element);
81
+ const {
82
+ t
83
+ } = useTranslation();
84
+ const timer = useRef(null);
85
+ const [isShowTableList, setIsShowTablesList] = useState(false);
86
+ const [selectedTableText, setSelectedTableText] = useState('');
11
87
  const [isShowSeaTableSetting, setIsShowSeaTableSetting] = useState(false);
12
- const onShowSettings = useCallback(() => {
13
- setIsShowSeaTableSetting(true);
88
+ const [isShowTooltip, setIsShowTooltip] = useState(false);
89
+ const [tablesData, setTablesData] = useState(editor.tables);
90
+ useEffect(() => {
91
+ setIsShowTooltip(true);
14
92
  }, []);
15
- const onHideSettings = useCallback(() => {
93
+ useEffect(() => {
94
+ const {
95
+ table_id
96
+ } = element;
97
+ const table = editor.tables.find(item => item._id === table_id);
98
+ if (table) {
99
+ setSelectedTableText(table.name);
100
+ }
101
+ }, [editor.tables, element]);
102
+ const onShowTables = useCallback(e => {
103
+ e.stopPropagation();
104
+ setIsShowTablesList(!isShowTableList);
16
105
  setIsShowSeaTableSetting(false);
106
+ // eslint-disable-next-line react-hooks/exhaustive-deps
107
+ }, [isShowTableList]);
108
+ const updatePageSettings = useCallback(updateProperties => {
109
+ if (timer.current) {
110
+ clearTimeout(timer.current);
111
+ }
112
+ timer.current = setTimeout(() => {
113
+ updateSeaTableTable(editor, updateProperties);
114
+ }, 300);
115
+ }, [editor]);
116
+ const onSelectTable = useCallback(item => {
117
+ const {
118
+ name,
119
+ _id
120
+ } = item;
121
+ setSelectedTableText(name);
122
+ const table = editor.tables.find(item => item._id === _id);
123
+ updatePageSettings({
124
+ table_id: _id,
125
+ filters: [],
126
+ filter_conjunction: 'And',
127
+ sorts: [],
128
+ shown_column_keys: table.columns.map(item => item.key),
129
+ show_record_numbers: false,
130
+ alternate_color: true,
131
+ select_column_display_option_color: true
132
+ });
133
+ // eslint-disable-next-line react-hooks/exhaustive-deps
134
+ }, [editor]);
135
+ const onFilter = useCallback(table => {
136
+ console.log('filter');
137
+ // eslint-disable-next-line react-hooks/exhaustive-deps
138
+ }, []);
139
+ const onSort = useCallback(table => {
140
+ console.log('onSort');
141
+ // eslint-disable-next-line react-hooks/exhaustive-deps
17
142
  }, []);
143
+ const onHiddenColumn = useCallback(table => {
144
+ console.log('onHiddenColumn');
145
+ // eslint-disable-next-line react-hooks/exhaustive-deps
146
+ }, []);
147
+ const onSettings = useCallback(table => {
148
+ console.log('onSettings');
149
+ setIsShowSeaTableSetting(!isShowSeaTableSetting);
150
+ setIsShowTablesList(false);
151
+ // eslint-disable-next-line react-hooks/exhaustive-deps
152
+ }, [isShowSeaTableSetting]);
18
153
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ElementPopover, null, /*#__PURE__*/React.createElement("div", {
19
- className: "seatable-op-menu",
154
+ className: "sdoc-seatable-hover-menu-container",
20
155
  style: menuPosition
21
- }, /*#__PURE__*/React.createElement("span", {
22
- className: "sdocfont sdoc-settings",
23
- onClick: onShowSettings
24
- }))), isShowSeaTableSetting && /*#__PURE__*/React.createElement(TableSettings, {
25
- editor: editor,
26
- element: element,
27
- onHideSettings: onHideSettings
28
- }));
156
+ }, /*#__PURE__*/React.createElement("div", {
157
+ className: "hover-menu-container"
158
+ }, /*#__PURE__*/React.createElement("div", {
159
+ className: "sdoc-seatable-hover-operation-item sdoc-seatable-hover-operation-lang"
160
+ }, /*#__PURE__*/React.createElement("div", {
161
+ role: "button",
162
+ className: "op-item ".concat(isShowTableList ? 'active' : ''),
163
+ onClick: onShowTables
164
+ }, /*#__PURE__*/React.createElement("span", null, selectedTableText), /*#__PURE__*/React.createElement("i", {
165
+ className: "sdocfont sdoc-drop-down icon-font"
166
+ }))), /*#__PURE__*/React.createElement("div", {
167
+ className: "sdoc-seatable-hover-operation-divider"
168
+ }), /*#__PURE__*/React.createElement("div", {
169
+ id: "sdoc_seatable_filter",
170
+ className: "sdoc-seatable-hover-operation-item"
171
+ }, /*#__PURE__*/React.createElement("div", {
172
+ role: "button",
173
+ className: "op-item",
174
+ onClick: onFilter
175
+ }, /*#__PURE__*/React.createElement("i", {
176
+ className: "sdocfont sdoc-filter1 icon-font"
177
+ })), isShowTooltip && /*#__PURE__*/React.createElement(Tooltip, {
178
+ target: "sdoc_seatable_filter",
179
+ placement: "top",
180
+ fade: true
181
+ }, t('filter'))), /*#__PURE__*/React.createElement("div", {
182
+ className: "sdoc-seatable-hover-operation-divider"
183
+ }), /*#__PURE__*/React.createElement("div", {
184
+ id: "sdoc_seatable_sort",
185
+ className: "sdoc-seatable-hover-operation-item"
186
+ }, /*#__PURE__*/React.createElement("div", {
187
+ role: "button",
188
+ className: "op-item",
189
+ onClick: onSort
190
+ }, /*#__PURE__*/React.createElement("i", {
191
+ className: "sdocfont sdoc-sort icon-font"
192
+ })), isShowTooltip && /*#__PURE__*/React.createElement(Tooltip, {
193
+ target: "sdoc_seatable_sort",
194
+ placement: "top",
195
+ fade: true
196
+ }, t('sort'))), /*#__PURE__*/React.createElement("div", {
197
+ className: "sdoc-seatable-hover-operation-divider"
198
+ }), /*#__PURE__*/React.createElement("div", {
199
+ id: "sdoc_seatable_hidden_column",
200
+ className: "sdoc-seatable-hover-operation-item"
201
+ }, /*#__PURE__*/React.createElement("div", {
202
+ role: "button",
203
+ className: "op-item",
204
+ onClick: onHiddenColumn
205
+ }, /*#__PURE__*/React.createElement("i", {
206
+ className: "sdocfont sdoc-eye-slash icon-font"
207
+ })), isShowTooltip && /*#__PURE__*/React.createElement(Tooltip, {
208
+ target: "sdoc_seatable_hidden_column",
209
+ placement: "top",
210
+ fade: true
211
+ }, t('hidden'))), /*#__PURE__*/React.createElement("div", {
212
+ className: "sdoc-seatable-hover-operation-divider"
213
+ }), /*#__PURE__*/React.createElement("div", {
214
+ id: "sdoc_seatable_settings",
215
+ className: "sdoc-seatable-hover-operation-item"
216
+ }, /*#__PURE__*/React.createElement("div", {
217
+ role: "button",
218
+ className: "op-item",
219
+ onClick: onSettings
220
+ }, /*#__PURE__*/React.createElement("i", {
221
+ className: "sdocfont sdoc-set-up icon-font"
222
+ })), isShowTooltip && /*#__PURE__*/React.createElement(Tooltip, {
223
+ target: "sdoc_seatable_settings",
224
+ placement: "top",
225
+ fade: true
226
+ }, t('setting'))), isShowTableList && /*#__PURE__*/React.createElement("div", {
227
+ className: "sdoc-seatable-setting-popver"
228
+ }, /*#__PURE__*/React.createElement(TablesList, {
229
+ tablesData: tablesData,
230
+ onSelectTable: onSelectTable,
231
+ selectedTableText: selectedTableText
232
+ })), isShowSeaTableSetting && /*#__PURE__*/React.createElement("div", {
233
+ className: "sdoc-seatable-setting-popver sdoc-seatable-setting-right-popver"
234
+ }, /*#__PURE__*/React.createElement(TablesSettings, {
235
+ settings: element,
236
+ updatePageSettings: updatePageSettings
237
+ }))))));
29
238
  }
@@ -6,7 +6,7 @@
6
6
  }
7
7
 
8
8
  .seatable-view-container.selected {
9
- border: 1px solid red;
9
+ border: 2px solid #007BFF;
10
10
  }
11
11
 
12
12
  .seatable-view-container .seatable-view-records {
@@ -130,7 +130,7 @@ function SeaTableTable(_ref) {
130
130
  top,
131
131
  left
132
132
  } = seaTableRef.current.getBoundingClientRect();
133
- const menuTop = top - 36; // top = top distance - menu height
133
+ const menuTop = top - 42; // top = top distance - menu height
134
134
  const newMenuPosition = {
135
135
  top: menuTop,
136
136
  left: left // left = code-block left distance
@@ -164,7 +164,7 @@ function SeaTableTable(_ref) {
164
164
  top,
165
165
  left
166
166
  } = seaTableRef.current.getBoundingClientRect();
167
- const menuTop = top - 36; // top = top distance - menu height
167
+ const menuTop = top - 42; // top = top distance - menu height
168
168
  const newMenuPosition = {
169
169
  top: menuTop,
170
170
  left: left // left = callout left distance
@@ -15,7 +15,6 @@
15
15
  .sdoc-table-alignment-menu .sdoc-dropdown-menu-item .sdoc-check-mark {
16
16
  display: none;
17
17
  font-size: 16px !important;
18
- color: #6f59ff;
19
18
  }
20
19
  .sdoc-table-alignment-menu .sdoc-dropdown-menu-item .sdoc-check-mark.active {
21
20
  display: inline;
@@ -3,12 +3,13 @@ import slugid from 'slugid';
3
3
  import { ReactEditor } from '@seafile/slate-react';
4
4
  import copy from 'copy-to-clipboard';
5
5
  import { toggleList } from '../../plugins/list/transforms';
6
- import { generateEmptyElement } from '../../core';
6
+ import { generateEmptyElement, findPath, isMultiLevelList } from '../../core';
7
7
  import { generateEmptyList } from '../../plugins/list/model';
8
8
  import { setClipboardCodeBlockData } from '../../plugins/code-block/helpers';
9
9
  import { ORDERED_LIST, UNORDERED_LIST, PARAGRAPH, CHECK_LIST_ITEM, IMAGE, TABLE, CODE_BLOCK, BLOCKQUOTE, LIST_ITEM_CORRELATION_TYPE, ADD_POSITION_OFFSET_TYPE, INSERT_POSITION, ELEMENT_TYPE, CALL_OUT } from '../../constants';
10
10
  import { EMPTY_SELECTED_RANGE } from '../../plugins/table/constants';
11
11
  import { unwrapCallout, wrapCallout } from '../../plugins/callout/helper';
12
+ import { convertToCheck } from '../../plugins/check-list/helpers';
12
13
  import { getHeaderHeight } from '../../../utils/dom-utils';
13
14
  export const onSetNodeType = (editor, element, type) => {
14
15
  if (!type) return;
@@ -21,6 +22,12 @@ export const onSetNodeType = (editor, element, type) => {
21
22
  return;
22
23
  }
23
24
  if (type === CHECK_LIST_ITEM) {
25
+ const path = findPath(editor, element);
26
+ const [targetNode, targetPath] = Editor.node(editor, [path[0]]) || [];
27
+ if (targetNode && [ORDERED_LIST, UNORDERED_LIST].includes(targetNode === null || targetNode === void 0 ? void 0 : targetNode.type) && !isMultiLevelList(targetNode)) {
28
+ convertToCheck(editor, targetNode, targetPath);
29
+ return;
30
+ }
24
31
  const newType = element.type === CHECK_LIST_ITEM ? PARAGRAPH : CHECK_LIST_ITEM;
25
32
  Transforms.setNodes(editor, {
26
33
  type: newType
@@ -3,8 +3,9 @@ import { UncontrolledPopover } from 'reactstrap';
3
3
  import { withTranslation } from 'react-i18next';
4
4
  import { ReactEditor, useSlateStatic } from '@seafile/slate-react';
5
5
  import { onSetNodeType } from './helpers';
6
- import { SIDE_TRANSFORM_MENUS_CONFIG, LIST_ITEM_SUPPORTED_TRANSFORMATION, LIST_ITEM_CORRELATION_TYPE, BLOCKQUOTE, CALL_OUT, HEADERS } from '../../constants';
6
+ import { SIDE_TRANSFORM_MENUS_CONFIG, LIST_ITEM_SUPPORTED_TRANSFORMATION, LIST_ITEM_CORRELATION_TYPE, BLOCKQUOTE, CALL_OUT, HEADERS, ORDERED_LIST, UNORDERED_LIST, CHECK_LIST_ITEM } from '../../constants';
7
7
  import DropdownMenuItem from '../../commons/dropdown-menu-item';
8
+ import { isMultiLevelList } from '../../core';
8
9
  const TransformMenus = _ref => {
9
10
  let {
10
11
  target,
@@ -37,6 +38,11 @@ const TransformMenus = _ref => {
37
38
  if (HEADERS.includes(highestNode.type)) {
38
39
  newSideMenusConfig = SIDE_TRANSFORM_MENUS_CONFIG.filter(item => item.type !== BLOCKQUOTE);
39
40
  }
41
+
42
+ // Multi-level list items cannot be converted to checks
43
+ if ([ORDERED_LIST, UNORDERED_LIST].includes(highestNode.type) && isMultiLevelList(highestNode)) {
44
+ newSideMenusConfig = SIDE_TRANSFORM_MENUS_CONFIG.filter(item => item.type !== CHECK_LIST_ITEM);
45
+ }
40
46
  }
41
47
  return newSideMenusConfig;
42
48
  // eslint-disable-next-line react-hooks/exhaustive-deps
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "1.0.27",
3
+ "version": "1.0.28-alpha.0",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",
@@ -16,7 +16,7 @@
16
16
  "Quote": "Quote",
17
17
  "Ordered_list": "Ordered list",
18
18
  "Unordered_list": "Unordered list",
19
- "Check_list_item": "Check list item",
19
+ "Check_list": "Check list",
20
20
  "Insert_image": "Insert image",
21
21
  "Insert_formula": "Insert formula",
22
22
  "Formula": "Formula",
@@ -16,7 +16,7 @@
16
16
  "Quote": "Цитата",
17
17
  "Ordered_list": "Нумерованный список",
18
18
  "Unordered_list": "Маркированный список",
19
- "Check_list": "Check list",
19
+ "Check_list": "Контрольный список",
20
20
  "Insert_image": "Вставить изображение",
21
21
  "Insert_formula": "Вставить формулу",
22
22
  "Formula": "Формула",
@@ -14,6 +14,14 @@
14
14
  />
15
15
  <missing-glyph />
16
16
 
17
+ <glyph glyph-name="sdoc-sort" unicode="&#58996;" d="M294.4 790.4l201.6-204.8c19.2-19.2 19.2-51.2 0-73.6-19.2-19.2-51.2-19.2-70.4 0L320 620.8v-604.8c0-25.6-22.4-48-48-48S224-9.6 224 16V620.8L118.4 512c-19.2-19.2-48-19.2-67.2-3.2l-3.2 3.2c-19.2 19.2-19.2 51.2 0 73.6l201.6 204.8c12.8 12.8 32 12.8 44.8 0zM752 800c25.6 0 48-22.4 48-48v-604.8l105.6 108.8c19.2 19.2 51.2 19.2 70.4 0 19.2-19.2 19.2-51.2 0-73.6l-201.6-204.8c-12.8-12.8-32-12.8-44.8 0l-201.6 204.8c-19.2 19.2-19.2 51.2 0 73.6l3.2 3.2c19.2 16 48 16 67.2-3.2l105.6-108.8V752c0 25.6 22.4 48 48 48z" horiz-adv-x="1024" />
18
+
19
+ <glyph glyph-name="sdoc-set-up" unicode="&#58997;" d="M598.52384 809.6l12.8-92.8 6.4-38.4 35.2-16c12.8-6.4 28.8-16 41.6-25.6l32-19.2 35.2 12.8 92.8 35.2 86.4-140.8-76.8-54.4-32-25.6 3.2-38.4v-44.8l-3.2-38.4 32-25.6 76.8-57.6-83.2-140.8-92.8 35.2-35.2 12.8-32-19.2c-12.8-9.6-28.8-19.2-41.6-25.6l-35.2-16-6.4-38.4-12.8-92.8h-172.8l-12.8 92.8-6.4 38.4-35.2 16c-12.8 6.4-28.8 16-41.6 25.6l-32 19.2-35.2-12.8-92.8-35.2-86.4 140.8L160.12384 297.6l32 25.6-3.2 38.4V384v22.4l3.2 38.4-32 25.6-76.8 57.6 83.2 140.8 92.8-35.2 35.2-12.8 32 19.2c12.8 9.6 28.8 19.2 41.6 25.6l35.2 16 6.4 38.4 12.8 92.8h176m12.8 83.2H416.12384c-32 0-57.6-22.4-60.8-51.2l-16-105.6c-19.2-9.6-35.2-19.2-54.4-32L182.52384 748.8c-9.6 3.2-16 3.2-22.4 3.2-22.4 0-41.6-9.6-54.4-28.8L6.52384 560c-12.8-28.8-6.4-60.8 16-80l86.4-67.2c0-9.6-3.2-22.4-3.2-28.8 0-9.6 0-19.2 3.2-28.8L22.52384 288c-22.4-19.2-28.8-51.2-16-76.8l96-163.2c9.6-19.2 32-32 54.4-32 6.4 0 12.8 0 22.4 3.2l102.4 41.6c16-12.8 35.2-22.4 54.4-28.8l16-105.6c3.2-28.8 28.8-51.2 60.8-51.2H608.12384c32 0 57.6 22.4 60.8 51.2l16 105.6c19.2 9.6 35.2 19.2 54.4 28.8l102.4-41.6c6.4-3.2 16-3.2 22.4-3.2 22.4 0 41.6 9.6 54.4 28.8l99.2 166.4c16 25.6 9.6 57.6-16 76.8l-86.4 67.2c0 9.6 3.2 19.2 3.2 28.8s0 22.4-3.2 28.8l86.4 67.2c22.4 19.2 28.8 51.2 16 76.8l-96 163.2c-9.6 19.2-32 32-54.4 32-6.4 0-12.8 0-22.4-3.2l-102.4-41.6c-16 12.8-35.2 22.4-54.4 28.8L672.12384 844.8C665.72384 873.6 640.12384 896 611.32384 896zM512.12384 512c70.4 0 128-57.6 128-128s-57.6-128-128-128-128 57.6-128 128 57.6 128 128 128m0 86.4a214.4 214.4 0 1 1 0-428.8 214.4 214.4 0 0 1 0 428.8z" horiz-adv-x="1026" />
20
+
21
+ <glyph glyph-name="sdoc-filter1" unicode="&#58994;" d="M617.6 160c28.8 0 54.4-22.4 54.4-48s-22.4-48-54.4-48h-214.4c-28.8 0-54.4 22.4-54.4 48s22.4 48 54.4 48h214.4z m169.6 272c25.6 0 44.8-22.4 44.8-48s-19.2-48-44.8-48H236.8c-25.6 0-44.8 22.4-44.8 48s19.2 48 44.8 48h550.4z m236.8 224c0-25.6-22.4-48-48-48h-928C22.4 608 0 630.4 0 656S22.4 704 48 704h931.2c22.4 0 44.8-22.4 44.8-48z" horiz-adv-x="1024" />
22
+
23
+ <glyph glyph-name="sdoc-eye-slash" unicode="&#58995;" d="M83.84448 790.4l156.8-124.8c73.6 57.6 166.4 99.2 275.2 99.2 134.4 0 243.2-64 320-137.6 76.8-73.6 131.2-163.2 153.6-224 6.4-12.8 6.4-28.8 0-41.6-22.4-51.2-64-124.8-124.8-192l140.8-112c19.2-16 22.4-44.8 6.4-67.2-16-19.2-48-22.4-67.2-6.4l-928 736C-2.55552 736-5.75552 764.8 10.24448 787.2s51.2 19.2 73.6 3.2z m32-256l73.6-60.8c-25.6-35.2-44.8-70.4-57.6-96 22.4-51.2 64-121.6 128-179.2 67.2-64 153.6-112 256-112 44.8 0 86.4 9.6 124.8 22.4l76.8-64c-57.6-32-124.8-51.2-201.6-51.2-134.4 0-243.2 64-320 137.6-76.8 73.6-131.2 163.2-153.6 224-6.4 12.8-6.4 28.8 0 41.6 12.8 41.6 38.4 89.6 73.6 137.6z m185.6-153.6l112-89.6c12.8-16 25.6-25.6 44.8-35.2l112-89.6c-19.2-3.2-35.2-6.4-54.4-6.4-118.4 0-214.4 99.2-214.4 220.8z m214.4 288c-76.8 0-144-25.6-198.4-64l67.2-51.2c35.2 28.8 80 44.8 131.2 44.8 118.4 0 214.4-99.2 214.4-220.8 0-32-6.4-60.8-19.2-89.6l86.4-70.4c48 54.4 83.2 112 102.4 153.6-22.4 51.2-64 121.6-128 179.2-64 67.2-150.4 118.4-256 118.4z m0-153.6h-3.2c3.2-9.6 3.2-19.2 3.2-28.8 0-12.8-3.2-25.6-6.4-38.4l134.4-108.8c3.2 12.8 3.2 22.4 3.2 35.2 3.2 80-57.6 140.8-131.2 140.8z" horiz-adv-x="1027" />
24
+
17
25
  <glyph glyph-name="sdoc-settings" unicode="&#58993;" d="M976 467.2c3.2-3.2 3.2-3.2 3.2-9.6L976 326.4c0-3.2-3.2-12.8-9.6-12.8l-108.8-38.4c-3.2-12.8-12.8-28.8-19.2-41.6l51.2-102.4c0-3.2 0-12.8-3.2-19.2l-96-96c-3.2-3.2-12.8-9.6-19.2-3.2L668.8 64c-12.8-9.6-28.8-12.8-41.6-19.2L588.8-64c0-3.2-3.2-9.6-12.8-9.6H444.8c-3.2 0-12.8 3.2-12.8 9.6l-38.4 108.8c-12.8 3.2-28.8 12.8-41.6 19.2l-102.4-51.2c-3.2 0-12.8 0-19.2 3.2l-96 96c-6.4 0-12.8 9.6-6.4 16l51.2 102.4c-9.6 12.8-12.8 28.8-19.2 41.6L51.2 310.4c-3.2 0-9.6 3.2-9.6 12.8V454.4c0 3.2 3.2 12.8 9.6 12.8L160 508.8c3.2 12.8 9.6 28.8 19.2 41.6L128 656c-6.4 6.4-6.4 12.8 0 12.8l96 96c3.2 9.6 9.6 9.6 16 3.2l102.4-51.2c12.8 9.6 28.8 12.8 41.6 19.2l38.4 112c0 3.2 3.2 9.6 12.8 9.6h128c3.2 0 12.8-3.2 12.8-9.6l38.4-108.8c12.8-3.2 28.8-12.8 41.6-19.2l102.4 51.2c3.2 0 12.8 0 19.2-3.2l96-96c3.2-3.2 9.6-12.8 3.2-19.2l-51.2-102.4c9.6-12.8 12.8-28.8 19.2-41.6L976 467.2zM566.4 614.4c-176 48-329.6-108.8-288-288 19.2-76.8 86.4-140.8 160-160 176-48 329.6 108.8 288 288-19.2 80-80 140.8-160 160z" horiz-adv-x="1024" />
18
26
 
19
27
  <glyph glyph-name="sdoc-seatable-table" unicode="&#58991;" d="M384 896c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64H64c-35.2 0-64 28.8-64 64V832C0 867.2 28.8 896 64 896h320z m-32-96H96v-256h256V800z m608 96c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64H640c-35.2 0-64 28.8-64 64V832c0 35.2 28.8 64 64 64h320z m-32-96h-256v-256h256V800zM384 320c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64H64c-35.2 0-64 28.8-64 64V256c0 35.2 28.8 64 64 64h320z m-32-96H96v-256h256v256z m608 96c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64H640c-35.2 0-64 28.8-64 64V256c0 35.2 28.8 64 64 64h320z m-32-96h-256v-256h256v256z" horiz-adv-x="1024" />
@@ -1,14 +1,11 @@
1
1
  @font-face {
2
- font-family: "sdocfont";
3
- /* Project id 4097705 */
4
- src: url('./sdoc-editor-font/iconfont.eot?t=1719382079268');
5
- /* IE9 */
6
- src: url('./sdoc-editor-font/iconfont.eot?t=1719382079268#iefix') format('embedded-opentype'),
7
- /* IE6-IE8 */
8
- url('./sdoc-editor-font/iconfont.woff2?t=1719382079268') format('woff2'),
9
- url('./sdoc-editor-font/iconfont.woff?t=1719382079268') format('woff'),
10
- url('./sdoc-editor-font/iconfont.ttf?t=1719382079268') format('truetype'),
11
- url('./sdoc-editor-font/iconfont.svg?t=1719382079268#sdocfont') format('svg');
2
+ font-family: "sdocfont"; /* Project id 4097705 */
3
+ src: url('./sdoc-editor-font/iconfont.eot?t=1721201136436'); /* IE9 */
4
+ src: url('./sdoc-editor-font/iconfont.eot?t=1721201136436#iefix') format('embedded-opentype'), /* IE6-IE8 */
5
+ url('./sdoc-editor-font/iconfont.woff2?t=1721201136436') format('woff2'),
6
+ url('./sdoc-editor-font/iconfont.woff?t=1721201136436') format('woff'),
7
+ url('./sdoc-editor-font/iconfont.ttf?t=1721201136436') format('truetype'),
8
+ url('./sdoc-editor-font/iconfont.svg?t=1721201136436#sdocfont') format('svg');
12
9
  }
13
10
 
14
11
  .sdocfont {
@@ -19,6 +16,22 @@
19
16
  -moz-osx-font-smoothing: grayscale;
20
17
  }
21
18
 
19
+ .sdoc-sort:before {
20
+ content: "\e674";
21
+ }
22
+
23
+ .sdoc-set-up:before {
24
+ content: "\e675";
25
+ }
26
+
27
+ .sdoc-filter1:before {
28
+ content: "\e672";
29
+ }
30
+
31
+ .sdoc-eye-slash:before {
32
+ content: "\e673";
33
+ }
34
+
22
35
  .sdoc-settings:before {
23
36
  content: "\e671";
24
37
  }
@@ -466,3 +479,4 @@
466
479
  .sdoc-user:before {
467
480
  content: "\e629";
468
481
  }
482
+