@manuscripts/article-editor 1.15.3 → 1.15.5

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 (49) hide show
  1. package/dist/cjs/quarterback/QuarterBackDataSource.js +9 -11
  2. package/dist/cjs/quarterback/QuarterBackDataSource.js.map +1 -1
  3. package/dist/cjs/quarterback/useLoadDoc.js +7 -7
  4. package/dist/cjs/quarterback/useLoadDoc.js.map +1 -1
  5. package/dist/es/quarterback/QuarterBackDataSource.js +9 -11
  6. package/dist/es/quarterback/QuarterBackDataSource.js.map +1 -1
  7. package/dist/es/quarterback/useLoadDoc.js +7 -4
  8. package/dist/es/quarterback/useLoadDoc.js.map +1 -1
  9. package/package.json +2 -2
  10. package/dist/cjs/components/comments/CommentActions.js +0 -59
  11. package/dist/cjs/components/comments/CommentActions.js.map +0 -1
  12. package/dist/cjs/components/comments/CommentBody.js +0 -97
  13. package/dist/cjs/components/comments/CommentBody.js.map +0 -1
  14. package/dist/cjs/components/comments/CommentResolveButton.js +0 -56
  15. package/dist/cjs/components/comments/CommentResolveButton.js.map +0 -1
  16. package/dist/cjs/components/comments/CommentThread.js +0 -122
  17. package/dist/cjs/components/comments/CommentThread.js.map +0 -1
  18. package/dist/cjs/components/comments/CommentsPanel.js +0 -134
  19. package/dist/cjs/components/comments/CommentsPanel.js.map +0 -1
  20. package/dist/cjs/components/comments/CommentsPlaceholder.js +0 -44
  21. package/dist/cjs/components/comments/CommentsPlaceholder.js.map +0 -1
  22. package/dist/cjs/lib/comments.js +0 -29
  23. package/dist/cjs/lib/comments.js.map +0 -1
  24. package/dist/cjs/store/ParentObserver.js +0 -40
  25. package/dist/cjs/store/ParentObserver.js.map +0 -1
  26. package/dist/es/components/comments/CommentActions.js +0 -52
  27. package/dist/es/components/comments/CommentActions.js.map +0 -1
  28. package/dist/es/components/comments/CommentBody.js +0 -67
  29. package/dist/es/components/comments/CommentBody.js.map +0 -1
  30. package/dist/es/components/comments/CommentResolveButton.js +0 -49
  31. package/dist/es/components/comments/CommentResolveButton.js.map +0 -1
  32. package/dist/es/components/comments/CommentThread.js +0 -93
  33. package/dist/es/components/comments/CommentThread.js.map +0 -1
  34. package/dist/es/components/comments/CommentsPanel.js +0 -104
  35. package/dist/es/components/comments/CommentsPanel.js.map +0 -1
  36. package/dist/es/components/comments/CommentsPlaceholder.js +0 -37
  37. package/dist/es/components/comments/CommentsPlaceholder.js.map +0 -1
  38. package/dist/es/lib/comments.js +0 -23
  39. package/dist/es/lib/comments.js.map +0 -1
  40. package/dist/es/store/ParentObserver.js +0 -36
  41. package/dist/es/store/ParentObserver.js.map +0 -1
  42. package/dist/types/components/comments/CommentActions.d.ts +0 -24
  43. package/dist/types/components/comments/CommentBody.d.ts +0 -21
  44. package/dist/types/components/comments/CommentResolveButton.d.ts +0 -18
  45. package/dist/types/components/comments/CommentThread.d.ts +0 -22
  46. package/dist/types/components/comments/CommentsPanel.d.ts +0 -2
  47. package/dist/types/components/comments/CommentsPlaceholder.d.ts +0 -14
  48. package/dist/types/lib/comments.d.ts +0 -21
  49. package/dist/types/store/ParentObserver.d.ts +0 -33
@@ -1,134 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.CommentsPanel = void 0;
30
- /*!
31
- * The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://mpapp-public.gitlab.io/manuscripts-frontend/LICENSE. The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover use of software over a computer network and provide for limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.
32
- *
33
- * Software distributed under the License is distributed on an “AS IS” basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
34
- *
35
- * The Original Code is manuscripts-frontend.
36
- *
37
- * The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
38
- *
39
- * All portions of the code written by Atypon Systems LLC are Copyright (c) 2019 Atypon Systems LLC. All Rights Reserved.
40
- */
41
- const body_editor_1 = require("@manuscripts/body-editor");
42
- const style_guide_1 = require("@manuscripts/style-guide");
43
- const prosemirror_state_1 = require("prosemirror-state");
44
- const react_1 = __importStar(require("react"));
45
- const styled_components_1 = __importDefault(require("styled-components"));
46
- const comments_1 = require("../../lib/comments");
47
- const store_1 = require("../../store");
48
- const CommentThread_1 = require("./CommentThread");
49
- const track_changes_plugin_1 = require("@manuscripts/track-changes-plugin");
50
- const CommentsPlaceholder_1 = require("./CommentsPlaceholder");
51
- const Header = styled_components_1.default.div `
52
- display: flex;
53
- justify-content: flex-end;
54
- padding: 12px;
55
- `;
56
- const CheckboxLabelText = styled_components_1.default.div `
57
- color: ${(props) => props.theme.colors.text.primary} !important;
58
- `;
59
- const scrollIntoView = (element) => {
60
- const rect = element.getBoundingClientRect();
61
- if (rect.bottom > window.innerHeight || rect.top < 150) {
62
- element.scrollIntoView();
63
- }
64
- };
65
- const CommentsPanel = () => {
66
- const [{ view, newCommentID, selectedCommentKey }] = (0, store_1.useStore)((state) => ({
67
- view: state.view,
68
- newCommentID: state.newCommentID,
69
- selectedCommentKey: state.selectedCommentKey,
70
- }));
71
- const [showResolved, setShowResolved] = (0, react_1.useState)(true);
72
- const comments = (0, react_1.useMemo)(() => view?.state ? body_editor_1.commentsKey.getState(view.state)?.comments : undefined, [view?.state]);
73
- const trees = (0, react_1.useMemo)(() => comments ? (0, comments_1.buildCommentTrees)([...comments.values()], newCommentID) : [], [comments, newCommentID]);
74
- const selectedRef = (0, react_1.useCallback)((e) => {
75
- if (e) {
76
- scrollIntoView(e);
77
- }
78
- }, []);
79
- const setSelectedComment = (comment) => {
80
- if (!view) {
81
- return;
82
- }
83
- const tr = view.state.tr;
84
- (0, body_editor_1.setCommentSelection)(tr, comment.key, comment.node.attrs.id, false);
85
- if ((0, body_editor_1.isNodeComment)(comment)) {
86
- tr.setSelection(prosemirror_state_1.NodeSelection.create(view.state.doc, comment.target.pos));
87
- }
88
- else {
89
- const range = comment.range;
90
- const from = range.pos;
91
- const to = from + range.size;
92
- tr.setSelection(prosemirror_state_1.TextSelection.create(view.state.doc, from, to));
93
- }
94
- tr.scrollIntoView();
95
- view.focus();
96
- view.dispatch(tr);
97
- };
98
- const handleSave = (attrs) => {
99
- const comment = comments?.get(attrs.id);
100
- if (!comment) {
101
- return;
102
- }
103
- const tr = view.state.tr;
104
- tr.setNodeMarkup(comment.pos, undefined, attrs);
105
- (0, body_editor_1.clearCommentSelection)(tr);
106
- view.dispatch((0, track_changes_plugin_1.skipTracking)(tr));
107
- };
108
- const handleDelete = (id) => {
109
- const comment = comments?.get(id);
110
- if (!comment) {
111
- return;
112
- }
113
- const tr = view.state.tr;
114
- tr.delete(comment.pos, comment.pos + comment.node.nodeSize);
115
- (0, body_editor_1.clearCommentSelection)(tr);
116
- view.dispatch((0, track_changes_plugin_1.skipTracking)(tr));
117
- };
118
- if (!view) {
119
- return null;
120
- }
121
- if (!trees.length) {
122
- return react_1.default.createElement(CommentsPlaceholder_1.CommentsPlaceholder, null);
123
- }
124
- return (react_1.default.createElement(react_1.default.Fragment, null,
125
- react_1.default.createElement(Header, null,
126
- react_1.default.createElement(style_guide_1.CheckboxLabel, null,
127
- react_1.default.createElement(style_guide_1.CheckboxField, { name: 'show-resolved', checked: showResolved, onChange: (e) => setShowResolved(e.target.checked) }),
128
- react_1.default.createElement(CheckboxLabelText, null, "See resolved"))),
129
- trees
130
- .filter((c) => showResolved || !c.comment.node.attrs.resolved)
131
- .map((c) => (react_1.default.createElement(CommentThread_1.CommentThread, { key: c.comment.node.attrs.id, ref: selectedCommentKey === c.comment.key ? selectedRef : null, tree: c, isSelected: selectedCommentKey === c.comment.key, onSelect: () => setSelectedComment(c.comment), onSave: handleSave, onDelete: handleDelete })))));
132
- };
133
- exports.CommentsPanel = CommentsPanel;
134
- //# sourceMappingURL=CommentsPanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommentsPanel.js","sourceRoot":"","sources":["../../../../src/components/comments/CommentsPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.CommentsPlaceholder = exports.Message = void 0;
7
- /*!
8
- * The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://mpapp-public.gitlab.io/manuscripts-frontend/LICENSE. The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover use of software over a computer network and provide for limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.
9
- *
10
- * Software distributed under the License is distributed on an “AS IS” basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
11
- *
12
- * The Original Code is manuscripts-frontend.
13
- *
14
- * The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
15
- *
16
- * All portions of the code written by Atypon Systems LLC are Copyright (c) 2024 Atypon Systems LLC. All Rights Reserved.
17
- */
18
- const react_1 = __importDefault(require("react"));
19
- const styled_components_1 = __importDefault(require("styled-components"));
20
- const Container = styled_components_1.default.div `
21
- display: flex;
22
- flex-direction: column;
23
- align-items: center;
24
- justify-content: center;
25
- margin-top: 50px;
26
- `;
27
- exports.Message = styled_components_1.default.div `
28
- font-size: ${(props) => props.theme.font.size.medium};
29
- font-weight: ${(props) => props.theme.font.weight.light};
30
- color: ${(props) => props.theme.colors.text.secondary};
31
- text-align: center;
32
- margin: ${(props) => props.theme.grid.unit * 5}px;
33
- `;
34
- const PlaceholderGraphic = () => (react_1.default.createElement("svg", { width: "300", height: "300", viewBox: "0 0 300 300", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
35
- react_1.default.createElement("rect", { width: "300", height: "300", fill: "url(#pattern0_6815_691)" }),
36
- react_1.default.createElement("defs", null,
37
- react_1.default.createElement("pattern", { id: "pattern0_6815_691", patternContentUnits: "objectBoundingBox", width: "1", height: "1" },
38
- react_1.default.createElement("use", { xlinkHref: "#image0_6815_691", transform: "scale(0.00333333)" })),
39
- react_1.default.createElement("image", { id: "image0_6815_691", width: "300", height: "300", xlinkHref: "data:image/png;base64,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" }))));
40
- const CommentsPlaceholder = () => (react_1.default.createElement(Container, null,
41
- react_1.default.createElement(PlaceholderGraphic, null),
42
- react_1.default.createElement(exports.Message, null, "Discuss this manuscript with your collaborators by creating a comment.")));
43
- exports.CommentsPlaceholder = CommentsPlaceholder;
44
- //# sourceMappingURL=CommentsPlaceholder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommentsPlaceholder.js","sourceRoot":"","sources":["../../../../src/components/comments/CommentsPlaceholder.tsx"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;GAUG;AACH,kDAAyB;AACzB,0EAAsC;AAEtC,MAAM,SAAS,GAAG,2BAAM,CAAC,GAAG,CAAA;;;;;;CAM3B,CAAA;AAEY,QAAA,OAAO,GAAG,2BAAM,CAAC,GAAG,CAAA;eAClB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;iBACrC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;WAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;;YAE3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;CAC/C,CAAA;AAED,MAAM,kBAAkB,GAAa,GAAG,EAAE,CAAC,CACzC,uCACE,KAAK,EAAC,KAAK,EACX,MAAM,EAAC,KAAK,EACZ,OAAO,EAAC,aAAa,EACrB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B;IAElC,wCAAM,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,IAAI,EAAC,yBAAyB,GAAG;IAChE;QACE,2CACE,EAAE,EAAC,mBAAmB,EACtB,mBAAmB,EAAC,mBAAmB,EACvC,KAAK,EAAC,GAAG,EACT,MAAM,EAAC,GAAG;YAEV,uCAAK,SAAS,EAAC,kBAAkB,EAAC,SAAS,EAAC,mBAAmB,GAAG,CAC1D;QACV,yCACE,EAAE,EAAC,iBAAiB,EACpB,KAAK,EAAC,KAAK,EACX,MAAM,EAAC,KAAK,EACZ,SAAS,EAAC,w8hCAAw8hC,GACl9hC,CACG,CACH,CACP,CAAA;AAEM,MAAM,mBAAmB,GAAa,GAAG,EAAE,CAAC,CACjD,8BAAC,SAAS;IACR,8BAAC,kBAAkB,OAAG;IACtB,8BAAC,eAAO,iFAEE,CACA,CACb,CAAA;AAPY,QAAA,mBAAmB,uBAO/B"}
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildAuthorName = exports.buildCommentTrees = exports.getAuthorID = void 0;
4
- const getAuthorID = (comment) => {
5
- const contributions = comment.node.attrs.contributions;
6
- if (!contributions?.length) {
7
- return undefined;
8
- }
9
- return contributions[0].profileID;
10
- };
11
- exports.getAuthorID = getAuthorID;
12
- const buildCommentTrees = (comments, newCommentID) => {
13
- return comments.map((c) => ({
14
- comment: c,
15
- isNew: newCommentID === c.node.attrs.id,
16
- children: [],
17
- }));
18
- };
19
- exports.buildCommentTrees = buildCommentTrees;
20
- const buildAuthorName = (user) => {
21
- if (!user) {
22
- return '';
23
- }
24
- return [user.bibliographicName.given, user.bibliographicName.family]
25
- .filter(Boolean)
26
- .join(' ');
27
- };
28
- exports.buildAuthorName = buildAuthorName;
29
- //# sourceMappingURL=comments.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../../src/lib/comments.ts"],"names":[],"mappings":";;;AAoBO,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAA;IACtD,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE;QAC1B,OAAO,SAAS,CAAA;KACjB;IACD,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACnC,CAAC,CAAA;AANY,QAAA,WAAW,eAMvB;AAEM,MAAM,iBAAiB,GAAG,CAC/B,QAAmB,EACnB,YAAqB,EACN,EAAE;IACjB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,YAAY,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACvC,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC,CAAA;AACL,CAAC,CAAA;AATY,QAAA,iBAAiB,qBAS7B;AAEM,MAAM,eAAe,GAAG,CAAC,IAA6B,EAAE,EAAE;IAC/D,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,CAAA;KACV;IACD,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;SACjE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC,CAAA;AAPY,QAAA,eAAe,mBAO3B"}
@@ -1,40 +0,0 @@
1
- "use strict";
2
- /*!
3
- * The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://mpapp-public.gitlab.io/manuscripts-frontend/LICENSE. The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover use of software over a computer network and provide for limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.
4
- *
5
- * Software distributed under the License is distributed on an “AS IS” basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
6
- *
7
- * The Original Code is manuscripts-frontend.
8
- *
9
- * The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
10
- *
11
- * All portions of the code written by Atypon Systems LLC are Copyright (c) 2022 Atypon Systems LLC. All Rights Reserved.
12
- */
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.ParentObserver = void 0;
15
- class ParentObserver {
16
- constructor() {
17
- this.observer = undefined;
18
- this.onUpdate = (observer) => {
19
- this.observer = observer;
20
- };
21
- this.update = (partialState) => {
22
- if (this.observer) {
23
- this.observer(partialState);
24
- }
25
- };
26
- this.storeObserver = (state) => {
27
- this.storeListener && this.storeListener(state); // storeListener shoudldn't be directly assigned to storeObserver to avoid potential order of execution problems
28
- };
29
- this.onStoreInternalUpdate = (fn) => {
30
- // it's supposed to be listened by the parent so there is only a single listener
31
- this.storeListener = fn;
32
- };
33
- this.detach = () => {
34
- this.storeListener = undefined;
35
- this.observer = undefined;
36
- };
37
- }
38
- }
39
- exports.ParentObserver = ParentObserver;
40
- //# sourceMappingURL=ParentObserver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ParentObserver.js","sourceRoot":"","sources":["../../../src/store/ParentObserver.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAcH,MAAa,cAAc;IAA3B;QACU,aAAQ,GAA0B,SAAS,CAAA;QAGnD,aAAQ,GAAG,CAAC,QAAmB,EAAE,EAAE;YACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAC1B,CAAC,CAAA;QAED,WAAM,GAAG,CAAC,YAAwC,EAAE,EAAE;YACpD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;aAC5B;QACH,CAAC,CAAA;QAED,kBAAa,GAAG,CAAC,KAAY,EAAE,EAAE;YAC/B,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA,CAAC,gHAAgH;QAClK,CAAC,CAAA;QAED,0BAAqB,GAAG,CAAC,EAA0B,EAAE,EAAE;YACrD,gFAAgF;YAChF,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACzB,CAAC,CAAA;QAED,WAAM,GAAG,GAAG,EAAE;YACZ,IAAI,CAAC,aAAa,GAAG,SAAS,CAAA;YAC9B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;QAC3B,CAAC,CAAA;IACH,CAAC;CAAA;AA3BD,wCA2BC"}
@@ -1,52 +0,0 @@
1
- /*!
2
- * The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://mpapp-public.gitlab.io/manuscripts-frontend/LICENSE. The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover use of software over a computer network and provide for limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.
3
- *
4
- * Software distributed under the License is distributed on an “AS IS” basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
5
- *
6
- * The Original Code is manuscripts-frontend.
7
- *
8
- * The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
9
- *
10
- * All portions of the code written by Atypon Systems LLC are Copyright (c) 2024 Atypon Systems LLC. All Rights Reserved.
11
- */
12
- import { DotsIcon, DropdownContainer, DropdownList, useDropdown, } from '@manuscripts/style-guide';
13
- import React from 'react';
14
- import styled from 'styled-components';
15
- import { CommentResolveButton } from './CommentResolveButton';
16
- export const ActionsIcon = styled.button `
17
- border: none;
18
- background: transparent;
19
- cursor: pointer;
20
- padding: 0 8px;
21
- margin-top: -8px;
22
- &:focus {
23
- outline: none;
24
- }
25
- &:hover svg circle {
26
- fill: #1a9bc7;
27
- }
28
- `;
29
- export const CommentAction = styled.div `
30
- font-family: ${(props) => props.theme.font.family.Lato};
31
- cursor: pointer;
32
- font-size: 16px;
33
- line-height: 24px;
34
- color: ${(props) => props.theme.colors.text.primary};
35
- padding: 16px;
36
- &:hover,
37
- &:focus {
38
- background: #f2fbfc;
39
- }
40
- `;
41
- export const CommentActions = ({ comment, isResolveEnabled, isActionsEnabled, onEdit, onDelete, toggleResolve, }) => {
42
- const { isOpen, toggleOpen, wrapperRef } = useDropdown();
43
- return (React.createElement(React.Fragment, null,
44
- isResolveEnabled && (React.createElement(CommentResolveButton, { comment: comment, onClick: toggleResolve })),
45
- isActionsEnabled && (React.createElement(DropdownContainer, { ref: wrapperRef },
46
- React.createElement(ActionsIcon, { onClick: toggleOpen },
47
- React.createElement(DotsIcon, null)),
48
- isOpen && (React.createElement(DropdownList, { direction: 'right', width: 125, onClick: toggleOpen },
49
- React.createElement(CommentAction, { onClick: onEdit }, "Edit"),
50
- React.createElement(CommentAction, { onClick: onDelete }, "Delete")))))));
51
- };
52
- //# sourceMappingURL=CommentActions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommentActions.js","sourceRoot":"","sources":["../../../../src/components/comments/CommentActions.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;;;;;;;;CAYvC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;iBACtB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;;;;WAI7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;;;;;;CAMpD,CAAA;AAWD,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAC5D,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,EACN,QAAQ,EACR,aAAa,GACd,EAAE,EAAE;IACH,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAA;IAExD,OAAO,CACL;QACG,gBAAgB,IAAI,CACnB,oBAAC,oBAAoB,IAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAI,CACnE;QACA,gBAAgB,IAAI,CACnB,oBAAC,iBAAiB,IAAC,GAAG,EAAE,UAAU;YAChC,oBAAC,WAAW,IAAC,OAAO,EAAE,UAAU;gBAC9B,oBAAC,QAAQ,OAAG,CACA;YACb,MAAM,IAAI,CACT,oBAAC,YAAY,IAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU;gBAC/D,oBAAC,aAAa,IAAC,OAAO,EAAE,MAAM,WAAsB;gBACpD,oBAAC,aAAa,IAAC,OAAO,EAAE,QAAQ,aAAwB,CAC3C,CAChB,CACiB,CACrB,CACA,CACJ,CAAA;AACH,CAAC,CAAA"}
@@ -1,67 +0,0 @@
1
- import { ButtonGroup, PrimaryButton, SecondaryButton, } from '@manuscripts/style-guide';
2
- import React, { useCallback, useRef } from 'react';
3
- import styled from 'styled-components';
4
- const CommentContent = styled.div `
5
- cursor: pointer;
6
- `;
7
- const CommentEditor = styled.textarea `
8
- cursor: text;
9
- font-family: ${(props) => props.theme.font.family.sans};
10
- color: ${(props) => props.theme.colors.text.primary};
11
- margin: ${(props) => props.theme.grid.unit * 2}px 0;
12
- resize: none;
13
-
14
- width: 100%;
15
- outline: 0;
16
- border: 1px solid #e2e2e2;
17
- border-radius: 6px;
18
-
19
- &:focus {
20
- background: #f2fbfc;
21
- border: 1px solid #bce7f6;
22
- border-radius: 6px;
23
- }
24
-
25
- box-sizing: border-box;
26
- padding: 3px 16px 3px 16px;
27
- font-style: normal;
28
- font-weight: normal;
29
- font-size: 14px;
30
- line-height: 24px;
31
- `;
32
- const CommentViewer = styled.div `
33
- flex: 1;
34
-
35
- font-family: ${(props) => props.theme.font.family.sans};
36
- line-height: 1.06;
37
- letter-spacing: -0.2px;
38
- color: ${(props) => props.theme.colors.text.primary};
39
- margin: ${(props) => props.theme.grid.unit * 2}px 0;
40
- `;
41
- const EditorActions = styled(ButtonGroup) `
42
- & button:not(:last-of-type) {
43
- margin-right: 4px;
44
- }
45
- `;
46
- export const CommentBody = ({ comment, isEditing, onSave, onCancel, onSelect, }) => {
47
- const editor = useRef(null);
48
- const handleSave = () => {
49
- if (editor.current) {
50
- onSave(editor.current.value);
51
- }
52
- };
53
- const ref = useCallback((e) => {
54
- if (e && editor.current !== e) {
55
- e.focus();
56
- }
57
- editor.current = e;
58
- }, []);
59
- return (React.createElement(React.Fragment, null, isEditing ? (React.createElement(React.Fragment, null,
60
- React.createElement(CommentEditor, { ref: ref, defaultValue: comment.node.attrs.contents }),
61
- React.createElement(EditorActions, null,
62
- React.createElement(SecondaryButton, { onClick: onCancel }, "Cancel"),
63
- React.createElement(PrimaryButton, { onClick: handleSave }, "Save")))) : (React.createElement(React.Fragment, null,
64
- React.createElement(CommentContent, { onClick: onSelect },
65
- React.createElement(CommentViewer, null, comment.node.attrs.contents))))));
66
- };
67
- //# sourceMappingURL=CommentBody.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommentBody.js","sourceRoot":"","sources":["../../../../src/components/comments/CommentBody.tsx"],"names":[],"mappings":"AAYA,OAAO,EACL,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAEtC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;;CAEhC,CAAA;AAED,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAA;;iBAEpB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;WAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;YACzC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;CAoB/C,CAAA;AAED,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;;;iBAGf,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;;;WAG7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;YACzC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;CAC/C,CAAA;AAED,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;;;;CAIxC,CAAA;AAUD,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EACtD,OAAO,EACP,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,MAAM,CAA6B,IAAI,CAAC,CAAA;IAEvD,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;SAC7B;IACH,CAAC,CAAA;IAED,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5B,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE;YAC7B,CAAC,CAAC,KAAK,EAAE,CAAA;SACV;QACD,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;IACpB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CACL,0CACG,SAAS,CAAC,CAAC,CAAC,CACX;QACE,oBAAC,aAAa,IACZ,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAC1B;QACjB,oBAAC,aAAa;YACZ,oBAAC,eAAe,IAAC,OAAO,EAAE,QAAQ,aAA0B;YAC5D,oBAAC,aAAa,IAAC,OAAO,EAAE,UAAU,WAAsB,CAC1C,CACf,CACJ,CAAC,CAAC,CAAC,CACF;QACE,oBAAC,cAAc,IAAC,OAAO,EAAE,QAAQ;YAC/B,oBAAC,aAAa,QAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAiB,CAC7C,CAChB,CACJ,CACA,CACJ,CAAA;AACH,CAAC,CAAA"}
@@ -1,49 +0,0 @@
1
- /*!
2
- * The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://mpapp-public.gitlab.io/manuscripts-frontend/LICENSE. The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover use of software over a computer network and provide for limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.
3
- *
4
- * Software distributed under the License is distributed on an “AS IS” basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
5
- *
6
- * The Original Code is manuscripts-frontend.
7
- *
8
- * The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
9
- *
10
- * All portions of the code written by Atypon Systems LLC are Copyright (c) 2024 Atypon Systems LLC. All Rights Reserved.
11
- */
12
- import { CommentResolveIcon, Tooltip } from '@manuscripts/style-guide';
13
- import React from 'react';
14
- import styled from 'styled-components';
15
- const Button = styled.button `
16
- display: flex;
17
- align-items: center;
18
- width: 24px;
19
- height: 24px;
20
- border-radius: 12px;
21
- border: none;
22
- background: #ffffff;
23
- padding: 0;
24
- cursor: pointer;
25
-
26
- &.resolved {
27
- background: #f2fbfc;
28
- border: 1px solid #bce7f6;
29
- path {
30
- fill: #1a9bc7;
31
- }
32
- }
33
-
34
- &:not([disabled]):hover,
35
- &:not([disabled]):active {
36
- path {
37
- fill: #1a9bc7;
38
- }
39
- background: #f2fbfc;
40
- border: 1px solid #c9c9c9;
41
- }
42
- `;
43
- export const CommentResolveButton = ({ comment, onClick, }) => {
44
- return (React.createElement(React.Fragment, null,
45
- React.createElement(Button, { className: comment.node.attrs.resolved ? 'resolved' : '', "data-tooltip-id": comment.node.attrs.id, onClick: onClick },
46
- React.createElement(CommentResolveIcon, null)),
47
- React.createElement(Tooltip, { id: comment.node.attrs.id, place: "bottom" }, (comment.node.attrs.resolved && 'Unresolve') || 'Resolve')));
48
- };
49
- //# sourceMappingURL=CommentResolveButton.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommentResolveButton.js","sourceRoot":"","sources":["../../../../src/components/comments/CommentResolveButton.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AACtE,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAEtC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B3B,CAAA;AAOD,MAAM,CAAC,MAAM,oBAAoB,GAAwC,CAAC,EACxE,OAAO,EACP,OAAO,GACR,EAAE,EAAE;IACH,OAAO,CACL;QACE,oBAAC,MAAM,IACL,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,qBACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EACtC,OAAO,EAAE,OAAO;YAEhB,oBAAC,kBAAkB,OAAG,CACf;QACT,oBAAC,OAAO,IAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAC,QAAQ,IAC/C,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,IAAI,SAAS,CAClD,CACT,CACJ,CAAA;AACH,CAAC,CAAA"}
@@ -1,93 +0,0 @@
1
- import { AvatarIcon, RelativeDate, usePermissions, } from '@manuscripts/style-guide';
2
- import React, { forwardRef, useState } from 'react';
3
- import styled from 'styled-components';
4
- import { buildAuthorName, getAuthorID } from '../../lib/comments';
5
- import { useStore } from '../../store';
6
- import { CommentActions } from './CommentActions';
7
- import { CommentBody } from './CommentBody';
8
- const Container = styled.div `
9
- padding: 16px;
10
- background-color: ${(props) => (props.isSelected ? '#f2fbfc' : '#ffffff')};
11
- border: 1px solid ${(props) => (props.isSelected ? '#bce7f6' : '#e2e2e2')};
12
- border-left-width: 4px;
13
- margin-bottom: 16px;
14
- `;
15
- const CommentHeader = styled.div `
16
- display: flex;
17
- margin-bottom: 16px;
18
- `;
19
- const CommentMetadata = styled.div `
20
- flex: 1;
21
- padding-left: 8px;
22
- padding-right: 8px;
23
- `;
24
- const CommentAuthor = styled.div `
25
- color: #353535;
26
- font-weight: 400;
27
- max-width: 200px;
28
- white-space: nowrap;
29
- overflow: hidden;
30
- text-overflow: ellipsis;
31
- `;
32
- const CommentTarget = styled.div `
33
- font-size: 14px;
34
- color: #353535;
35
- background-color: #ffeebf;
36
- padding: 4px 8px;
37
- margin-top: 16px;
38
- margin-bottom: 16px;
39
- `;
40
- const Timestamp = styled(RelativeDate) `
41
- font-size: 12px;
42
- line-height: 16px;
43
- font-weight: 400;
44
- color: #6e6e6e;
45
- `;
46
- export const CommentThread = forwardRef((props, ref) => {
47
- const { tree, isSelected, onSelect, onSave, onDelete } = props;
48
- const can = usePermissions();
49
- const [{ user, collaboratorsById }] = useStore((state) => ({
50
- user: state.user,
51
- collaboratorsById: state.collaboratorsById,
52
- }));
53
- const authorID = getAuthorID(tree.comment);
54
- const authorName = authorID
55
- ? buildAuthorName(collaboratorsById.get(authorID))
56
- : '';
57
- const timestamp = tree.comment.node.attrs.contributions?.[0].timestamp;
58
- const isOwn = authorID === user._id;
59
- const isResolveEnabled = isOwn
60
- ? can.resolveOwnComment
61
- : can.resolveOthersComment;
62
- const isActionsEnabled = isOwn
63
- ? can.handleOwnComments
64
- : can.handleOthersComments;
65
- const [isEditing, setEditing] = useState(false);
66
- const handleEdit = () => setEditing(true);
67
- const handleSave = (contents) => {
68
- onSave({
69
- ...tree.comment.node.attrs,
70
- contents,
71
- });
72
- setEditing(false);
73
- };
74
- const handleCancel = () => {
75
- setEditing(false);
76
- };
77
- const handleToggleResolve = () => {
78
- onSave({
79
- ...tree.comment.node.attrs,
80
- resolved: !tree.comment.node.attrs.resolved,
81
- });
82
- };
83
- return (React.createElement(Container, { "data-cy": "comment", isSelected: isSelected, ref: ref },
84
- React.createElement(CommentHeader, { "data-cy": "comment-header" },
85
- authorName && React.createElement(AvatarIcon, { width: 20, height: 20 }),
86
- React.createElement(CommentMetadata, null,
87
- React.createElement(CommentAuthor, null, authorName),
88
- timestamp && React.createElement(Timestamp, { date: timestamp * 1000 })),
89
- React.createElement(CommentActions, { comment: tree.comment, isResolveEnabled: isResolveEnabled, isActionsEnabled: isActionsEnabled, onDelete: () => onDelete(tree.comment.node.attrs.id), onEdit: handleEdit, toggleResolve: handleToggleResolve })),
90
- tree.comment.node.attrs.originalText && (React.createElement(CommentTarget, null, tree.comment.node.attrs.originalText)),
91
- React.createElement(CommentBody, { comment: tree.comment, isEditing: tree.isNew || isEditing, onSave: handleSave, onCancel: handleCancel, onSelect: onSelect })));
92
- });
93
- //# sourceMappingURL=CommentThread.js.map