@seafile/sdoc-editor 2.0.134-alpha.4 → 2.0.135

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.
package/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2025 Seafile Ltd.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
@@ -13,14 +13,12 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm
13
13
  var _react = _interopRequireWildcard(require("react"));
14
14
  var _reactI18next = require("react-i18next");
15
15
  var _reactstrap = require("reactstrap");
16
- var _commentEditor = require("@seafile/comment-editor");
17
16
  var _dayjs = _interopRequireDefault(require("dayjs"));
18
17
  var _tooltip = _interopRequireDefault(require("../../components/tooltip"));
19
18
  var _context2 = _interopRequireDefault(require("../../context"));
20
- var _useCollaborators2 = require("../../hooks/use-collaborators");
21
19
  var _mdToHtml = _interopRequireDefault(require("../../slate-convert/md-to-html"));
22
20
  var _notificationHooks = require("../hooks/notification-hooks");
23
- var _useParticipants = require("../hooks/use-participants");
21
+ var _commentEditor = _interopRequireDefault(require("./comment-editor"));
24
22
  var _commentImagePreviewer = _interopRequireDefault(require("./comment-image-previewer"));
25
23
  var CommentItemContent = function CommentItemContent(_ref) {
26
24
  var isActive = _ref.isActive,
@@ -31,11 +29,6 @@ var CommentItemContent = function CommentItemContent(_ref) {
31
29
  onDeleteComment = _ref.onDeleteComment,
32
30
  t = _ref.t,
33
31
  targetId = _ref.targetId;
34
- var _useParticipantsConte = (0, _useParticipants.useParticipantsContext)(),
35
- addParticipants = _useParticipantsConte.addParticipants,
36
- participants = _useParticipantsConte.participants;
37
- var _useCollaborators = (0, _useCollaborators2.useCollaborators)(),
38
- collaborators = _useCollaborators.collaborators;
39
32
  var _useState = (0, _react.useState)(false),
40
33
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
41
34
  isDropdownOpen = _useState2[0],
@@ -126,18 +119,6 @@ var CommentItemContent = function CommentItemContent(_ref) {
126
119
  setImageUrl(event.target.src);
127
120
  }
128
121
  }, []);
129
- var commentEditorProps = {
130
- className: 'pb-3',
131
- addParticipants: addParticipants,
132
- participants: participants,
133
- collaborators: collaborators,
134
- content: comment.comment,
135
- insertContent: updateContent,
136
- hiddenComment: setIsEditing,
137
- api: {
138
- uploadLocalImage: _context2["default"].uploadLocalImage
139
- }
140
- };
141
122
  return /*#__PURE__*/_react["default"].createElement("div", {
142
123
  className: "comment-item"
143
124
  }, /*#__PURE__*/_react["default"].createElement("div", {
@@ -206,7 +187,12 @@ var CommentItemContent = function CommentItemContent(_ref) {
206
187
  dangerouslySetInnerHTML: {
207
188
  __html: editorContent
208
189
  }
209
- })), isEditing && /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, commentEditorProps), imageUrl && /*#__PURE__*/_react["default"].createElement(_commentImagePreviewer["default"], {
190
+ })), isEditing && /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
191
+ className: "pb-3",
192
+ content: comment.comment,
193
+ updateContent: updateContent,
194
+ setIsEditing: setIsEditing
195
+ }), imageUrl && /*#__PURE__*/_react["default"].createElement(_commentImagePreviewer["default"], {
210
196
  imageUrl: imageUrl,
211
197
  toggle: function toggle() {
212
198
  return setImageUrl('');
@@ -12,13 +12,11 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm
12
12
  var _react = _interopRequireWildcard(require("react"));
13
13
  var _reactI18next = require("react-i18next");
14
14
  var _reactstrap = require("reactstrap");
15
- var _commentEditor = require("@seafile/comment-editor");
16
15
  var _dayjs = _interopRequireDefault(require("dayjs"));
17
16
  var _context2 = _interopRequireDefault(require("../../context"));
18
- var _useCollaborators2 = require("../../hooks/use-collaborators");
19
17
  var _mdToHtml = _interopRequireDefault(require("../../slate-convert/md-to-html"));
20
- var _useParticipants = require("../hooks/use-participants");
21
18
  var _commentDeletePopover = _interopRequireDefault(require("./comment-delete-popover"));
19
+ var _commentEditor = _interopRequireDefault(require("./comment-editor"));
22
20
  var _commentImagePreviewer = _interopRequireDefault(require("./comment-image-previewer"));
23
21
  var CommentItemReply = function CommentItemReply(_ref) {
24
22
  var isActive = _ref.isActive,
@@ -27,11 +25,6 @@ var CommentItemReply = function CommentItemReply(_ref) {
27
25
  deleteReply = _ref.deleteReply,
28
26
  updateReply = _ref.updateReply,
29
27
  t = _ref.t;
30
- var _useParticipantsConte = (0, _useParticipants.useParticipantsContext)(),
31
- addParticipants = _useParticipantsConte.addParticipants,
32
- participants = _useParticipantsConte.participants;
33
- var _useCollaborators = (0, _useCollaborators2.useCollaborators)(),
34
- collaborators = _useCollaborators.collaborators;
35
28
  var _useState = (0, _react.useState)(false),
36
29
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
37
30
  isDropdownOpen = _useState2[0],
@@ -108,19 +101,6 @@ var CommentItemReply = function CommentItemReply(_ref) {
108
101
  setImageUrl(event.target.src);
109
102
  }
110
103
  }, []);
111
- var commentEditorProps = {
112
- type: 'reply',
113
- className: 'pb-3',
114
- addParticipants: addParticipants,
115
- participants: participants,
116
- collaborators: collaborators,
117
- content: editorContent,
118
- insertContent: updateContent,
119
- hiddenComment: setIsEditing,
120
- api: {
121
- uploadLocalImage: _context2["default"].uploadLocalImage
122
- }
123
- };
124
104
  return /*#__PURE__*/_react["default"].createElement("div", {
125
105
  className: "comment-item",
126
106
  ref: itemRef
@@ -170,7 +150,13 @@ var CommentItemReply = function CommentItemReply(_ref) {
170
150
  dangerouslySetInnerHTML: {
171
151
  __html: editorContent
172
152
  }
173
- })), isEditing && /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, commentEditorProps), isShowDeletePopover && isActive && /*#__PURE__*/_react["default"].createElement(_commentDeletePopover["default"], {
153
+ })), isEditing && /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
154
+ className: "pb-3",
155
+ type: "reply",
156
+ content: editorContent,
157
+ updateContent: updateContent,
158
+ setIsEditing: setIsEditing
159
+ }), isShowDeletePopover && isActive && /*#__PURE__*/_react["default"].createElement(_commentDeletePopover["default"], {
174
160
  parentDom: itemRef.current,
175
161
  type: "reply",
176
162
  deleteConfirm: _deleteReply,
@@ -14,16 +14,14 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm
14
14
  var _react = _interopRequireWildcard(require("react"));
15
15
  var _reactI18next = require("react-i18next");
16
16
  var _reactstrap = require("reactstrap");
17
- var _commentEditor = require("@seafile/comment-editor");
18
17
  var _classnames = _interopRequireDefault(require("classnames"));
19
18
  var _dayjs = _interopRequireDefault(require("dayjs"));
20
19
  var _slugid = _interopRequireDefault(require("slugid"));
21
20
  var _context2 = _interopRequireDefault(require("../../context"));
22
- var _useCollaborators2 = require("../../hooks/use-collaborators");
23
21
  var _useSelectionPosition = require("../../hooks/use-selection-position");
24
22
  var _helper = require("../helper");
25
23
  var _useCommentContext2 = require("../hooks/comment-hooks/use-comment-context");
26
- var _useParticipants = require("../hooks/use-participants");
24
+ var _commentEditor = _interopRequireDefault(require("./comment-editor"));
27
25
  var _commentItemWrapper = _interopRequireDefault(require("./comment-item-wrapper"));
28
26
  require("./comment-list.css");
29
27
  var CommentList = function CommentList(_ref) {
@@ -43,12 +41,7 @@ var CommentList = function CommentList(_ref) {
43
41
  t = _ref.t;
44
42
  var commentPopover = (0, _react.useRef)(null);
45
43
  var commentDetailRef = (0, _react.useRef)(null);
46
- var _useParticipantsConte = (0, _useParticipants.useParticipantsContext)(),
47
- addParticipants = _useParticipantsConte.addParticipants,
48
- participants = _useParticipantsConte.participants;
49
- var _useCollaborators = (0, _useCollaborators2.useCollaborators)(),
50
- collaborators = _useCollaborators.collaborators;
51
- var position = (0, _useSelectionPosition.useCommentListPosition)(activeElementIds, isContextComment, isClickedContextComment, commentedDom, commentDetail, closeComment);
44
+ var position = (0, _useSelectionPosition.useCommentListPosition)(activeElementIds, isContextComment, isClickedContextComment, commentedDom, commentDetail, closeComment, editor);
52
45
  var _useCommentContext = (0, _useCommentContext2.useCommentContext)(),
53
46
  dispatch = _useCommentContext.dispatch;
54
47
  var _useState = (0, _react.useState)(false),
@@ -209,17 +202,12 @@ var CommentList = function CommentList(_ref) {
209
202
  style: {
210
203
  paddingTop: isEmptyComment ? '16px' : ''
211
204
  }
212
- }, isEmptyComment && /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, {
213
- addParticipants: addParticipants,
214
- participants: participants,
215
- collaborators: collaborators,
205
+ }, isEmptyComment && /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
216
206
  type: "comment",
217
207
  insertContent: addNewComment,
218
208
  hiddenComment: hiddenComment,
219
- closePanel: closeComment,
220
- api: {
221
- uploadLocalImage: _context2["default"].uploadLocalImage
222
- }
209
+ isContextComment: isContextComment,
210
+ closeComment: closeComment
223
211
  }), !isEmptyComment && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !isActiveEditor && /*#__PURE__*/_react["default"].createElement(_reactstrap.Input, {
224
212
  value: inputContent !== null && inputContent !== void 0 && inputContent.trim() ? '.....' : '',
225
213
  readOnly: true,
@@ -227,40 +215,29 @@ var CommentList = function CommentList(_ref) {
227
215
  onFocus: function onFocus() {
228
216
  setActiveCommentKey(index);
229
217
  }
230
- }), isActiveEditor && /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, {
218
+ }), isActiveEditor && /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
231
219
  type: "reply",
232
220
  placeholder: 'Enter_reply_shift_Enter_for_new_line_Enter_to_send',
233
- addParticipants: addParticipants,
234
- participants: participants,
235
- collaborators: collaborators,
236
- content: commentInputs[item.id] || '',
221
+ commentContent: commentInputs[item.id] || '',
237
222
  insertContent: function insertContent(value) {
238
223
  return handleReplySubmit(value, item.id);
239
224
  },
240
225
  onContentChange: function onContentChange(content) {
241
226
  return handleInputChange(item.id, content);
242
227
  },
243
- hiddenComment: hiddenComment,
244
- api: {
245
- uploadLocalImage: _context2["default"].uploadLocalImage
246
- }
228
+ hiddenComment: hiddenComment
247
229
  }))));
248
230
  }), Object.values(commentDetail).length === 0 && /*#__PURE__*/_react["default"].createElement("div", {
249
231
  className: "non-global-comment-input-wrapper",
250
232
  style: {
251
233
  paddingTop: isEmptyComment ? '16px' : ''
252
234
  }
253
- }, isEmptyComment && /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, {
235
+ }, isEmptyComment && /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
254
236
  type: "comment",
255
- addParticipants: addParticipants,
256
- participants: participants,
257
- collaborators: collaborators,
258
237
  insertContent: addNewComment,
259
238
  hiddenComment: hiddenComment,
260
- closePanel: closeComment,
261
- api: {
262
- uploadLocalImage: _context2["default"].uploadLocalImage
263
- }
239
+ isContextComment: isContextComment,
240
+ closeComment: closeComment
264
241
  }), !isEmptyComment && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !showEditor && /*#__PURE__*/_react["default"].createElement(_reactstrap.Input, {
265
242
  value: inputContent !== null && inputContent !== void 0 && inputContent.trim() ? '.....' : '',
266
243
  readOnly: true,
@@ -268,21 +245,15 @@ var CommentList = function CommentList(_ref) {
268
245
  onFocus: function onFocus() {
269
246
  setShowEditor(true);
270
247
  }
271
- }), showEditor && /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, {
248
+ }), showEditor && /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
272
249
  type: "reply",
273
250
  placeholder: 'Enter_reply_shift_Enter_for_new_line_Enter_to_send',
274
- addParticipants: addParticipants,
275
- participants: participants,
276
- collaborators: collaborators,
277
- content: inputContent,
251
+ commentContent: inputContent,
278
252
  insertContent: replyComment,
279
253
  onContentChange: function onContentChange(content) {
280
254
  setInputContent(content);
281
255
  },
282
- hiddenComment: hiddenComment,
283
- api: {
284
- uploadLocalImage: _context2["default"].uploadLocalImage
285
- }
256
+ hiddenComment: hiddenComment
286
257
  }))));
287
258
  };
288
259
  var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(CommentList);
@@ -194,7 +194,7 @@ var EditorComment = function EditorComment(_ref) {
194
194
  className: "comment-container-main"
195
195
  }), /*#__PURE__*/_react["default"].createElement("div", {
196
196
  className: (0, _classnames["default"])('comment-container-right', {
197
- 'isContextComment': isContextComment
197
+ 'is-context-comment': isContextComment
198
198
  })
199
199
  }, /*#__PURE__*/_react["default"].createElement(_elementsCommentCount["default"], {
200
200
  elementCommentsMap: element_comments_map,
@@ -6,11 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports["default"] = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
- var _commentEditor = require("@seafile/comment-editor");
10
9
  var _classnames = _interopRequireDefault(require("classnames"));
11
- var _context = _interopRequireDefault(require("../../../context"));
12
- var _useCollaborators2 = require("../../../hooks/use-collaborators");
13
- var _useParticipants = require("../../hooks/use-participants");
10
+ var _commentEditor = _interopRequireDefault(require("../comment-editor"));
14
11
  var GlobalCommentEditor = function GlobalCommentEditor(_ref) {
15
12
  var isScrollDisplayed = _ref.isScrollDisplayed,
16
13
  globalCommentContent = _ref.globalCommentContent,
@@ -18,32 +15,20 @@ var GlobalCommentEditor = function GlobalCommentEditor(_ref) {
18
15
  insertDocComment = _ref.insertDocComment,
19
16
  hiddenCommentEditor = _ref.hiddenCommentEditor,
20
17
  onContentChange = _ref.onContentChange;
21
- var _useParticipantsConte = (0, _useParticipants.useParticipantsContext)(),
22
- addParticipants = _useParticipantsConte.addParticipants,
23
- participants = _useParticipantsConte.participants;
24
- var _useCollaborators = (0, _useCollaborators2.useCollaborators)(),
25
- collaborators = _useCollaborators.collaborators;
26
- var commentEditorProps = {
27
- type: type,
28
- className: 'sdoc-doc-comment-editor',
29
- hiddenUserInfo: true,
30
- content: globalCommentContent,
31
- insertContent: insertDocComment,
32
- onContentChange: onContentChange,
33
- hiddenComment: hiddenCommentEditor,
34
- addParticipants: addParticipants,
35
- collaborators: collaborators,
36
- participants: participants,
37
- api: {
38
- uploadLocalImage: _context["default"].uploadLocalImage
39
- }
40
- };
41
18
  return /*#__PURE__*/_react["default"].createElement("div", {
42
19
  className: (0, _classnames["default"])('sdoc-doc-comment-editor-container', 'sdoc-comment-list-container', {
43
20
  'scrolled': isScrollDisplayed
44
21
  })
45
22
  }, /*#__PURE__*/_react["default"].createElement("div", {
46
23
  className: "sdoc-doc-comment-editor-content"
47
- }, /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, commentEditorProps)));
24
+ }, /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
25
+ type: type,
26
+ className: "sdoc-doc-comment-editor",
27
+ commentContent: globalCommentContent,
28
+ hiddenUserInfo: true,
29
+ insertContent: insertDocComment,
30
+ hiddenComment: hiddenCommentEditor,
31
+ onContentChange: onContentChange
32
+ })));
48
33
  };
49
34
  var _default = exports["default"] = GlobalCommentEditor;
@@ -321,6 +321,6 @@
321
321
  font-weight: unset;
322
322
  }
323
323
 
324
- .sdoc-comment-drawer .sdoc-comment-list-container .global-comment-item-detail-wrapper .comment-item:not(:last-child){
324
+ .sdoc-comment-drawer .sdoc-comment-list-container .global-comment-item-detail-wrapper .comment-item:not(:last-child) {
325
325
  margin-bottom: 16px;
326
326
  }
@@ -4,13 +4,14 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.useCursorPosition = exports.updateElementsAttrs = exports.updateCommentedElementsAttrs = exports.getSelectionRange = exports.getSelectedElemIds = exports.getPrimaryElementId = exports.getElementCommentCountTop = exports.getDomById = exports.getCursorPosition = exports.getCommentedTextsByElementId = exports.getAvatarUrl = void 0;
7
+ exports.useCursorPosition = exports.updateElementsAttrs = exports.updateCommentedElementsAttrs = exports.getSelectionRange = exports.getSelectedElemIds = exports.getPrimaryElementId = exports.getElementCommentCountTop = exports.getDomById = exports.getCursorPosition = exports.getCommentedTextsByElementId = exports.getAvatarUrl = exports.commentContainerWikiTransfer = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
9
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
10
10
  var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
11
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
12
12
  var _slate = require("@seafile/slate");
13
13
  var _slateReact = require("@seafile/slate-react");
14
+ var _constants = require("../constants");
14
15
  var _context = _interopRequireDefault(require("../context"));
15
16
  var _core = require("../extension/core");
16
17
  var _useScrollContext = require("../hooks/use-scroll-context");
@@ -56,6 +57,24 @@ var getAvatarUrl = exports.getAvatarUrl = function getAvatarUrl() {
56
57
  var avatarUrl = "".concat(server, "/media/avatars/default.png");
57
58
  return avatarUrl;
58
59
  };
60
+ var commentContainerWikiTransfer = exports.commentContainerWikiTransfer = function commentContainerWikiTransfer(result, value) {
61
+ var newResult;
62
+ var isWikiTitleIcon = document.querySelector('.wiki-page-icon-wrapper');
63
+ var isWikiTitleCover = document.getElementById('wiki-page-cover');
64
+ if (isWikiTitleIcon && !isWikiTitleCover) {
65
+ // 90 is icon height in wiki
66
+ newResult = result - value - 90;
67
+ } else if (!isWikiTitleIcon && isWikiTitleCover) {
68
+ // 203 is icon height in wiki
69
+ newResult = result - value - 203;
70
+ } else if (isWikiTitleIcon && isWikiTitleCover) {
71
+ // 205 is icon and cover height in wiki
72
+ newResult = result - value - 205;
73
+ } else {
74
+ newResult = result - value;
75
+ }
76
+ return newResult;
77
+ };
59
78
  var getElementCommentCountTop = exports.getElementCommentCountTop = function getElementCommentCountTop(editor, element, scrollTop) {
60
79
  var minY;
61
80
  var children = element.children || [];
@@ -71,7 +90,13 @@ var getElementCommentCountTop = exports.getElementCommentCountTop = function get
71
90
  if (!minY) minY = y;
72
91
  minY = Math.min(minY, y);
73
92
  });
74
- return minY - 93 + scrollTop; // 100: header height(56) + toolbar height(37)
93
+ var resultY;
94
+ resultY = minY - 93 + scrollTop; // 100: header height(56) + toolbar height(37)
95
+ if (editor.editorType === _constants.WIKI_EDITOR) {
96
+ // 55 is basic top title height in wiki
97
+ resultY = commentContainerWikiTransfer(resultY, 55);
98
+ }
99
+ return resultY;
75
100
  };
76
101
  var getSelectedElemIds = exports.getSelectedElemIds = function getSelectedElemIds(editor) {
77
102
  var selection = editor.selection;
@@ -18,7 +18,7 @@ var _constants = require("../constants");
18
18
  var _context = _interopRequireDefault(require("../context"));
19
19
  var _extension = require("../extension");
20
20
  var _insertElementDialog = _interopRequireDefault(require("../extension/commons/insert-element-dialog"));
21
- var _core = require("../extension/core");
21
+ var _helpers = require("../extension/plugins/ai/ai-module/helpers");
22
22
  var _useColorContext = require("../hooks/use-color-context");
23
23
  var _useScrollContext = require("../hooks/use-scroll-context");
24
24
  var _layout = require("../layout");
@@ -34,7 +34,9 @@ var WikiEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
34
34
  document = _ref.document,
35
35
  isReloading = _ref.isReloading,
36
36
  isWikiReadOnly = _ref.isWikiReadOnly,
37
- scrollRef = _ref.scrollRef;
37
+ scrollRef = _ref.scrollRef,
38
+ showComment = _ref.showComment,
39
+ isShowRightPanel = _ref.isShowRightPanel;
38
40
  var validEditor = (0, _react.useMemo)(function () {
39
41
  if (propsEditor) return propsEditor;
40
42
  var defaultEditor = (0, _extension.createDefaultEditor)();
@@ -90,6 +92,18 @@ var WikiEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
90
92
  (0, _react.useEffect)(function () {
91
93
  var eventBus = _eventBus["default"].getInstance();
92
94
  eventBus.subscribe(_constants.INTERNAL_EVENT.REFRESH_DOCUMENT, onRefreshDocument);
95
+
96
+ // Remove Marks on special conditions like unexpected exit or refresh page using AI or context comment
97
+ var hasSpecialMark = !_slate.Editor.nodes(validEditor, {
98
+ at: [],
99
+ match: function match(n) {
100
+ return _slate.Text.isText(n) && (n.sdoc_ai === true || n.comment === true);
101
+ }
102
+ }).next().done;
103
+ if (hasSpecialMark) {
104
+ (0, _helpers.removeMarks)(validEditor);
105
+ }
106
+ // eslint-disable-next-line react-hooks/exhaustive-deps
93
107
  }, [onRefreshDocument]);
94
108
 
95
109
  // The parent component can call the method of this component through ref
@@ -162,7 +176,7 @@ var WikiEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
162
176
  editor: validEditor,
163
177
  slateValue: slateValue,
164
178
  updateSlateValue: onValueChange,
165
- showComment: false
179
+ showComment: showComment
166
180
  })), /*#__PURE__*/_react["default"].createElement(_wikiOutline["default"], {
167
181
  doc: slateValue
168
182
  }))))), /*#__PURE__*/_react["default"].createElement(_insertElementDialog["default"], {
@@ -156,7 +156,7 @@ var TextStyleMenuList = function TextStyleMenuList(_ref) {
156
156
  tipMessage: t('Reduce_font_size')
157
157
  }, /*#__PURE__*/_react["default"].createElement("i", {
158
158
  className: "sdocfont sdoc-reduce-font-size"
159
- }))), idPrefix && ![_constants.DOCUMENT_PLUGIN_EDITOR, _constants.WIKI_EDITOR].includes(editor.editorType) && /*#__PURE__*/_react["default"].createElement(_commentContextMenu["default"], null), idPrefix && enableSeafileAI && /*#__PURE__*/_react["default"].createElement(_aiMenu.AIContextMenu, {
159
+ }))), idPrefix && ![_constants.DOCUMENT_PLUGIN_EDITOR].includes(editor.editorType) && /*#__PURE__*/_react["default"].createElement(_commentContextMenu["default"], null), idPrefix && enableSeafileAI && /*#__PURE__*/_react["default"].createElement(_aiMenu.AIContextMenu, {
160
160
  isRichEditor: isRichEditor
161
161
  }));
162
162
  };
@@ -0,0 +1,50 @@
1
+ .sdoc-whiteboard-hover-menu-container {
2
+ position: absolute;
3
+ height: 42px;
4
+ z-index: 101;
5
+ width: auto;
6
+ }
7
+
8
+ .sdoc-whiteboard-hover-menu-container .hover-menu-container {
9
+ height: 36px;
10
+ background-color: #fff;
11
+ display: flex;
12
+ justify-content: flex-start;
13
+ align-items: center;
14
+ border-radius: 3px;
15
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
16
+ border: 1px solid #e8e8e8;
17
+ }
18
+
19
+ .sdoc-whiteboard-hover-menu-container .hover-menu-container>span {
20
+ padding: 0 8px;
21
+ }
22
+
23
+ .sdoc-whiteboard-hover-menu-container .hover-menu-container>span:not(:last-of-type) {
24
+ padding: 0 8px;
25
+ border-right: 1px solid #e5e5e5;
26
+ }
27
+
28
+ .sdoc-whiteboard-hover-menu-container .hover-menu-container .op-item {
29
+ position: relative;
30
+ font-size: 12px;
31
+ color: #212529;
32
+ padding: 0 5px;
33
+ border-radius: 2px;
34
+ min-width: 24px;
35
+ height: 24px;
36
+ display: inline-flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ }
40
+
41
+ .sdoc-whiteboard-hover-menu-container .hover-menu-container .op-item:hover {
42
+ color: #212529;
43
+ text-decoration: none;
44
+ background: #f1f1f1;
45
+ }
46
+
47
+ .sdoc-whiteboard-hover-menu-container .hover-menu-container .icon-font {
48
+ font-size: 12px;
49
+ color: #999999;
50
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _reactI18next = require("react-i18next");
12
+ var _tooltip = _interopRequireDefault(require("../../../../components/tooltip"));
13
+ var _commons = require("../../../commons");
14
+ require("./index.css");
15
+ var WhiteboardHoverMenu = function WhiteboardHoverMenu(_ref) {
16
+ var menuPosition = _ref.menuPosition,
17
+ onOpen = _ref.onOpen,
18
+ openFullscreen = _ref.openFullscreen,
19
+ onDeleteWhiteboard = _ref.onDeleteWhiteboard;
20
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
21
+ t = _useTranslation.t;
22
+ var _useState = (0, _react.useState)(false),
23
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
24
+ showTooltip = _useState2[0],
25
+ setShowTooltip = _useState2[1];
26
+ (0, _react.useEffect)(function () {
27
+ setShowTooltip(true);
28
+ }, []);
29
+ return /*#__PURE__*/_react["default"].createElement(_commons.ElementPopover, null, /*#__PURE__*/_react["default"].createElement("div", {
30
+ className: "sdoc-whiteboard-hover-menu-container",
31
+ style: menuPosition
32
+ }, /*#__PURE__*/_react["default"].createElement("div", {
33
+ className: "hover-menu-container"
34
+ }, /*#__PURE__*/_react["default"].createElement("span", {
35
+ className: "op-group-item"
36
+ }, /*#__PURE__*/_react["default"].createElement("span", {
37
+ id: "sdoc_whiteboard_open",
38
+ role: "button",
39
+ className: "op-item",
40
+ onClick: onOpen
41
+ }, /*#__PURE__*/_react["default"].createElement("span", {
42
+ className: "mr-1"
43
+ }, t('Open')))), /*#__PURE__*/_react["default"].createElement("span", {
44
+ className: "op-group-item"
45
+ }, /*#__PURE__*/_react["default"].createElement("span", {
46
+ id: "sdoc_whiteboard_delete",
47
+ role: "button",
48
+ className: "op-item",
49
+ onClick: onDeleteWhiteboard
50
+ }, /*#__PURE__*/_react["default"].createElement("i", {
51
+ className: "sdocfont sdoc-delete icon-font"
52
+ }), showTooltip && /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
53
+ target: "sdoc_whiteboard_delete",
54
+ placement: "top",
55
+ fade: true
56
+ }, t('Delete')))), /*#__PURE__*/_react["default"].createElement("span", {
57
+ className: "op-group-item"
58
+ }, /*#__PURE__*/_react["default"].createElement("span", {
59
+ id: "sdoc_whiteboard_full_screen_mode",
60
+ role: "button",
61
+ className: "op-item",
62
+ onClick: openFullscreen
63
+ }, /*#__PURE__*/_react["default"].createElement("i", {
64
+ className: "sdocfont sdoc-fullscreen icon-font"
65
+ }), showTooltip && /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
66
+ target: "sdoc_whiteboard_full_screen_mode",
67
+ placement: "top",
68
+ fade: true
69
+ }, t('Full_screen_mode')))))));
70
+ };
71
+ var _default = exports["default"] = WhiteboardHoverMenu;
@@ -1,17 +1,23 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
3
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.renderWhiteboard = renderWhiteboard;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
9
10
  var _react = _interopRequireWildcard(require("react"));
11
+ var _slate = require("@seafile/slate");
10
12
  var _slateReact = require("@seafile/slate-react");
11
13
  var _classnames = _interopRequireDefault(require("classnames"));
12
14
  var _constants = require("../../../constants");
13
15
  var _context = _interopRequireDefault(require("../../../context"));
16
+ var _useScrollContext = require("../../../hooks/use-scroll-context");
14
17
  var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
18
+ var _core = require("../../core");
19
+ var _utils = require("../../utils");
20
+ var _hoverMenu = _interopRequireDefault(require("./hover-menu"));
15
21
  require("./index.css");
16
22
  var Whiteboard = function Whiteboard(_ref) {
17
23
  var editor = _ref.editor,
@@ -21,7 +27,16 @@ var Whiteboard = function Whiteboard(_ref) {
21
27
  title = element.title,
22
28
  link = element.link;
23
29
  var whiteboardRef = (0, _react.useRef)();
30
+ var scrollRef = (0, _useScrollContext.useScrollContext)();
24
31
  var isSelected = (0, _slateReact.useSelected)();
32
+ var readOnly = (0, _slateReact.useReadOnly)();
33
+ var _useState = (0, _react.useState)({
34
+ top: '',
35
+ left: ''
36
+ }),
37
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
38
+ menuPosition = _useState2[0],
39
+ setMenuPosition = _useState2[1];
25
40
  (0, _react.useEffect)(function () {
26
41
  var handleMessage = function handleMessage(event) {
27
42
  var _event$data;
@@ -47,6 +62,14 @@ var Whiteboard = function Whiteboard(_ref) {
47
62
  unsubscribeResizeArticle();
48
63
  };
49
64
  }, []);
65
+ var onDeleteWhiteboard = (0, _react.useCallback)(function () {
66
+ var path = _slateReact.ReactEditor.findPath(editor, element);
67
+ _slate.Transforms.removeNodes(editor, {
68
+ at: path
69
+ });
70
+ (0, _core.focusEditor)(editor);
71
+ _slate.Transforms.select(editor, editor.selection);
72
+ }, [editor, element]);
50
73
  var handleDoubleClick = function handleDoubleClick(event) {
51
74
  event.preventDefault();
52
75
  var siteRoot = _context["default"].getSetting('siteRoot');
@@ -54,7 +77,45 @@ var Whiteboard = function Whiteboard(_ref) {
54
77
  window.open(url, '_blank');
55
78
  return;
56
79
  };
57
- return /*#__PURE__*/_react["default"].createElement("div", {
80
+ var handleScroll = (0, _react.useCallback)(function (e) {
81
+ if (readOnly) return;
82
+ if (!isSelected) return;
83
+ if (e.currentTarget.scrollTop) {
84
+ var _menuPosition = (0, _utils.getMenuPosition)(whiteboardRef.current, editor);
85
+ setMenuPosition(_menuPosition);
86
+ }
87
+ }, [editor, isSelected, readOnly]);
88
+ (0, _react.useEffect)(function () {
89
+ if (readOnly) return;
90
+ var observerRefValue = null;
91
+ if (scrollRef.current) {
92
+ scrollRef.current.addEventListener('scroll', handleScroll);
93
+ observerRefValue = scrollRef.current;
94
+ }
95
+ return function () {
96
+ observerRefValue.removeEventListener('scroll', handleScroll);
97
+ };
98
+ }, [handleScroll, readOnly, scrollRef]);
99
+ var handleOnClick = (0, _react.useCallback)(function () {
100
+ if (readOnly) return;
101
+ if (isSelected) {
102
+ var _menuPosition2 = (0, _utils.getMenuPosition)(whiteboardRef.current, editor);
103
+ setMenuPosition(_menuPosition2);
104
+ }
105
+ }, [editor, isSelected, readOnly]);
106
+ var openFullscreen = function openFullscreen() {
107
+ if (whiteboardRef.current.requestFullscreen) {
108
+ // Chrome
109
+ whiteboardRef.current.requestFullscreen();
110
+ } else if (whiteboardRef.current.webkitRequestFullscreen) {
111
+ // Safari
112
+ whiteboardRef.current.webkitRequestFullscreen();
113
+ } else if (whiteboardRef.current.msRequestFullscreen) {
114
+ // IE11
115
+ whiteboardRef.current.msRequestFullscreen();
116
+ }
117
+ };
118
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
58
119
  className: (0, _classnames["default"])('sdoc-whiteboard-container', {
59
120
  'isSelected': isSelected
60
121
  }),
@@ -69,7 +130,13 @@ var Whiteboard = function Whiteboard(_ref) {
69
130
  ref: whiteboardRef
70
131
  }), /*#__PURE__*/_react["default"].createElement("div", {
71
132
  className: "iframe-overlay",
72
- onDoubleClick: handleDoubleClick
133
+ onDoubleClick: handleDoubleClick,
134
+ onClick: handleOnClick
135
+ })), isSelected && !readOnly && /*#__PURE__*/_react["default"].createElement(_hoverMenu["default"], {
136
+ menuPosition: menuPosition,
137
+ onOpen: handleDoubleClick,
138
+ openFullscreen: openFullscreen,
139
+ onDeleteWhiteboard: onDeleteWhiteboard
73
140
  }));
74
141
  };
75
142
  function renderWhiteboard(props, editor) {
@@ -15,13 +15,17 @@ var PluginsContext = /*#__PURE__*/_react["default"].createContext(null);
15
15
  var PluginsProvider = exports.PluginsProvider = function PluginsProvider(_ref) {
16
16
  var showComment = _ref.showComment,
17
17
  propsPlugins = _ref.plugins,
18
- children = _ref.children;
18
+ children = _ref.children,
19
+ setIsShowRightPanel = _ref.setIsShowRightPanel;
19
20
  var _useState = (0, _react.useState)(''),
20
21
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
21
22
  displayName = _useState2[0],
22
23
  setDisplayName = _useState2[1];
23
24
  var closePlugin = (0, _react.useCallback)(function () {
24
25
  setDisplayName('');
26
+ // Deal with comment component in wiki
27
+ setIsShowRightPanel && setIsShowRightPanel(false);
28
+ // eslint-disable-next-line react-hooks/exhaustive-deps
25
29
  }, []);
26
30
  var plugins = (0, _react.useMemo)(function () {
27
31
  var allPlugins = propsPlugins;
@@ -4,8 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.useCommentListPosition = void 0;
7
+ var _helper = require("../comment/helper");
8
+ var _constants = require("../constants");
7
9
  var _useScrollContext = require("./use-scroll-context");
8
- var useCommentListPosition = exports.useCommentListPosition = function useCommentListPosition(selectedElementIds, isContextComment, isClickedContextComment, commentedDom, commentDetail, closeComment) {
10
+ var useCommentListPosition = exports.useCommentListPosition = function useCommentListPosition(selectedElementIds, isContextComment, isClickedContextComment, commentedDom, commentDetail, closeComment, editor) {
9
11
  var _document$querySelect;
10
12
  var headerHeight = 100;
11
13
  var scrollRef = (0, _useScrollContext.useScrollContext)();
@@ -51,7 +53,12 @@ var useCommentListPosition = exports.useCommentListPosition = function useCommen
51
53
  }
52
54
  }
53
55
  var editorArticleRight = document.getElementById('sdoc-editor-print-wrapper').getBoundingClientRect().right;
54
- var topPara = rect.bottom - headerHeight + 10 + scrollTop;
56
+ var topPara;
57
+ topPara = rect.bottom - headerHeight + 10 + scrollTop;
58
+ if (editor.editorType === _constants.WIKI_EDITOR) {
59
+ // 55 is basic top title height in wiki
60
+ topPara = (0, _helper.commentContainerWikiTransfer)(topPara, 55);
61
+ }
55
62
  var rightPara = editorArticleRight - rect.left - 300; // 300 is comment container's width
56
63
  return {
57
64
  right: rightPara,
@@ -63,6 +70,10 @@ var useCommentListPosition = exports.useCommentListPosition = function useCommen
63
70
  if (!selectionPosition) closeComment();
64
71
  if (selectionPosition && selectionPosition.y !== 0) {
65
72
  selectionPosition.y = selectionPosition.y - headerHeight + scrollTop;
73
+ if (editor.editorType === _constants.WIKI_EDITOR) {
74
+ // 47 is top nav bar height in wiki
75
+ selectionPosition.y = (0, _helper.commentContainerWikiTransfer)(selectionPosition.y, 47);
76
+ }
66
77
  }
67
78
  return {
68
79
  x: selectionPosition === null || selectionPosition === void 0 ? void 0 : selectionPosition.x,
package/dist/index.js CHANGED
@@ -10,6 +10,12 @@ Object.defineProperty(exports, "CollaboratorsProvider", {
10
10
  return _useCollaborators.CollaboratorsProvider;
11
11
  }
12
12
  });
13
+ Object.defineProperty(exports, "CommentContextProvider", {
14
+ enumerable: true,
15
+ get: function get() {
16
+ return _provider["default"];
17
+ }
18
+ });
13
19
  Object.defineProperty(exports, "DiffViewer", {
14
20
  enumerable: true,
15
21
  get: function get() {
@@ -88,6 +94,12 @@ Object.defineProperty(exports, "RevisionEditor", {
88
94
  return _revisionEditor["default"];
89
95
  }
90
96
  });
97
+ Object.defineProperty(exports, "RightPanel", {
98
+ enumerable: true,
99
+ get: function get() {
100
+ return _index["default"];
101
+ }
102
+ });
91
103
  Object.defineProperty(exports, "SDocEditor", {
92
104
  enumerable: true,
93
105
  get: function get() {
@@ -244,6 +256,7 @@ Object.defineProperty(exports, "withSocketIO", {
244
256
  return _socket.withSocketIO;
245
257
  }
246
258
  });
259
+ var _provider = _interopRequireDefault(require("./comment/provider"));
247
260
  var _fileLoading = _interopRequireDefault(require("./components/file-loading"));
248
261
  var _loading = _interopRequireDefault(require("./components/loading"));
249
262
  var _toast = _interopRequireDefault(require("./components/toast"));
@@ -260,6 +273,7 @@ var _useCollaborators = require("./hooks/use-collaborators");
260
273
  var _usePlugins = require("./hooks/use-plugins");
261
274
  var _nodeId = _interopRequireDefault(require("./node-id"));
262
275
  var _outline = _interopRequireDefault(require("./outline"));
276
+ var _index = _interopRequireDefault(require("./right-panel/index"));
263
277
  var _slateConvert = require("./slate-convert");
264
278
  var _socket = require("./socket");
265
279
  var _commonUtils = require("./utils/common-utils");
@@ -17,7 +17,8 @@ var _fullWidthMode = require("../utils/full-width-mode");
17
17
  var _localStorageUtils = _interopRequireDefault(require("../utils/local-storage-utils"));
18
18
  function ArticleContainer(_ref) {
19
19
  var editor = _ref.editor,
20
- children = _ref.children;
20
+ children = _ref.children,
21
+ isShowCommentPanelInWiki = _ref.isShowCommentPanelInWiki;
21
22
  var scrollRef = (0, _useScrollContext.useScrollContext)();
22
23
  var articleRef = (0, _react.useRef)(null);
23
24
  var _useState = (0, _react.useState)({}),
@@ -63,7 +64,6 @@ function ArticleContainer(_ref) {
63
64
  };
64
65
  }, [editor.editorType, handleWindowResize]);
65
66
  (0, _react.useEffect)(function () {
66
- if (editor.editorType === _constants.WIKI_EDITOR) return;
67
67
  if (editor.editorType === _constants.DOCUMENT_PLUGIN_EDITOR) return;
68
68
  handleWindowResize();
69
69
  window.addEventListener('resize', handleWindowResize);
@@ -73,7 +73,7 @@ function ArticleContainer(_ref) {
73
73
  // eslint-disable-next-line react-hooks/exhaustive-deps
74
74
  }, []);
75
75
  var articleStyle = editor.getArticleStyle && editor.getArticleStyle();
76
- var articleContainerStyle = editor.getArticleStyle ? {
76
+ var articleContainerStyle = editor.editorType !== _constants.WIKI_EDITOR && editor.getArticleStyle ? {
77
77
  width: articleStyle.width
78
78
  } : containerStyle;
79
79
  return /*#__PURE__*/_react["default"].createElement("div", {
@@ -9,6 +9,8 @@ exports["default"] = void 0;
9
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
10
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
11
11
  var _react = _interopRequireWildcard(require("react"));
12
+ var _comment = _interopRequireDefault(require("../comment"));
13
+ var _commentOperation = _interopRequireDefault(require("../comment/components/comment-operation"));
12
14
  var _constants = require("../constants");
13
15
  var _usePlugins2 = require("../hooks/use-plugins");
14
16
  var _eventBus = _interopRequireDefault(require("../utils/event-bus"));
@@ -27,6 +29,16 @@ var RightPanel = function RightPanel(_ref) {
27
29
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
28
30
  width = _useState2[0],
29
31
  setWidth = _useState2[1];
32
+ if (editor.editorType === _constants.WIKI_EDITOR) {
33
+ plugins = [{
34
+ name: 'sdoc-comment',
35
+ icon: /*#__PURE__*/_react["default"].createElement(_commentOperation["default"], null),
36
+ resizable_width: true,
37
+ display_type: _constants.PLUGIN_DISPLAY_TYPE.RIGHT_PANEL,
38
+ component: _comment["default"]
39
+ }];
40
+ displayPluginName = 'sdoc-comment';
41
+ }
30
42
  var panelWrapperStyle = (0, _react.useMemo)(function () {
31
43
  if (!displayPluginName) return null;
32
44
  var style = {
@@ -10,9 +10,9 @@ var _localStorageUtils = _interopRequireDefault(require("./local-storage-utils")
10
10
  var getStyleByDefaultMode = exports.getStyleByDefaultMode = function getStyleByDefaultMode(scrollRef, editor) {
11
11
  var sdocStorage = _localStorageUtils["default"].getItem(_constants.SDOC_STORAGE) || {};
12
12
  var isShowOutline = sdocStorage.outlineOpen;
13
- var containerStyle = {
13
+ var containerStyle = editor.editorType !== _constants.WIKI_EDITOR ? {
14
14
  width: _constants.ARTICLE_DEFAULT_WIDTH
15
- };
15
+ } : {};
16
16
 
17
17
  // Has outline
18
18
  if (isShowOutline && editor.editorType !== _constants.WIKI_EDITOR) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "2.0.134-alpha.4",
3
+ "version": "2.0.135",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -17,7 +17,6 @@
17
17
  "license": "ISC",
18
18
  "description": "",
19
19
  "dependencies": {
20
- "@seafile/comment-editor": "^0.0.1-alpha.79",
21
20
  "@seafile/print-js": "1.6.6",
22
21
  "@seafile/react-image-lightbox": "4.0.2",
23
22
  "@seafile/slate": "0.91.8",
@@ -70,5 +69,6 @@
70
69
  },
71
70
  "publishConfig": {
72
71
  "access": "public"
73
- }
74
- }
72
+ },
73
+ "gitHead": "1557e2e40dd8beaa1be653cdee381b75c9a8b9c5"
74
+ }