@manuscripts/article-editor 4.0.2-LEAN-4612.0 → 4.0.2-LEAN-4533.1
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/dist/cjs/EditorApp.js +8 -1
- package/dist/cjs/EditorApp.js.map +1 -1
- package/dist/cjs/Main.js +3 -3
- package/dist/cjs/Main.js.map +1 -1
- package/dist/cjs/components/inspector/SnapshotsList.js +14 -2
- package/dist/cjs/components/inspector/SnapshotsList.js.map +1 -1
- package/dist/cjs/components/projects/EditorElement.js +5 -4
- package/dist/cjs/components/projects/EditorElement.js.map +1 -1
- package/dist/cjs/components/projects/Inspector.js +7 -1
- package/dist/cjs/components/projects/Inspector.js.map +1 -1
- package/dist/cjs/components/projects/ManuscriptPageContainer.js +4 -3
- package/dist/cjs/components/projects/ManuscriptPageContainer.js.map +1 -1
- package/dist/cjs/components/tools/CompareDocumentsModal.js +170 -0
- package/dist/cjs/components/tools/CompareDocumentsModal.js.map +1 -0
- package/dist/cjs/components/track-changes/SortByDropdown.js +1 -1
- package/dist/cjs/components/track-changes/TrackChangesPanel.js +16 -3
- package/dist/cjs/components/track-changes/TrackChangesPanel.js.map +1 -1
- package/dist/cjs/components/track-changes/suggestion-list/Suggestion.js +7 -3
- package/dist/cjs/components/track-changes/suggestion-list/Suggestion.js.map +1 -1
- package/dist/cjs/components/track-changes/suggestion-list/SuggestionList.js +6 -2
- package/dist/cjs/components/track-changes/suggestion-list/SuggestionList.js.map +1 -1
- package/dist/cjs/hooks/use-compare-documents.js +69 -0
- package/dist/cjs/hooks/use-compare-documents.js.map +1 -0
- package/dist/cjs/hooks/use-create-editor.js +30 -13
- package/dist/cjs/hooks/use-create-editor.js.map +1 -1
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/comparison/compare-documents.js +53 -0
- package/dist/cjs/lib/comparison/compare-documents.js.map +1 -0
- package/dist/cjs/lib/comparison/compare-paragraph-like.js +388 -0
- package/dist/cjs/lib/comparison/compare-paragraph-like.js.map +1 -0
- package/dist/cjs/lib/comparison/compare-table-element.js +567 -0
- package/dist/cjs/lib/comparison/compare-table-element.js.map +1 -0
- package/dist/cjs/lib/comparison/create-dataTracked-attrs.js +60 -0
- package/dist/cjs/lib/comparison/create-dataTracked-attrs.js.map +1 -0
- package/dist/cjs/lib/comparison/distribute-nodes.js +131 -0
- package/dist/cjs/lib/comparison/distribute-nodes.js.map +1 -0
- package/dist/cjs/lib/comparison/rebuild-nodes-tree.js +76 -0
- package/dist/cjs/lib/comparison/rebuild-nodes-tree.js.map +1 -0
- package/dist/cjs/store/Store.js +7 -2
- package/dist/cjs/store/Store.js.map +1 -1
- package/dist/es/EditorApp.js +8 -1
- package/dist/es/EditorApp.js.map +1 -1
- package/dist/es/Main.js +3 -3
- package/dist/es/Main.js.map +1 -1
- package/dist/es/components/inspector/SnapshotsList.js +15 -3
- package/dist/es/components/inspector/SnapshotsList.js.map +1 -1
- package/dist/es/components/projects/EditorElement.js +5 -4
- package/dist/es/components/projects/EditorElement.js.map +1 -1
- package/dist/es/components/projects/Inspector.js +7 -1
- package/dist/es/components/projects/Inspector.js.map +1 -1
- package/dist/es/components/projects/ManuscriptPageContainer.js +4 -3
- package/dist/es/components/projects/ManuscriptPageContainer.js.map +1 -1
- package/dist/es/components/tools/CompareDocumentsModal.js +140 -0
- package/dist/es/components/tools/CompareDocumentsModal.js.map +1 -0
- package/dist/es/components/track-changes/SortByDropdown.js +1 -1
- package/dist/es/components/track-changes/TrackChangesPanel.js +16 -3
- package/dist/es/components/track-changes/TrackChangesPanel.js.map +1 -1
- package/dist/es/components/track-changes/suggestion-list/Suggestion.js +7 -3
- package/dist/es/components/track-changes/suggestion-list/Suggestion.js.map +1 -1
- package/dist/es/components/track-changes/suggestion-list/SuggestionList.js +6 -2
- package/dist/es/components/track-changes/suggestion-list/SuggestionList.js.map +1 -1
- package/dist/es/hooks/use-compare-documents.js +65 -0
- package/dist/es/hooks/use-compare-documents.js.map +1 -0
- package/dist/es/hooks/use-create-editor.js +31 -14
- package/dist/es/hooks/use-create-editor.js.map +1 -1
- package/dist/es/index.js +3 -3
- package/dist/es/index.js.map +1 -1
- package/dist/es/lib/comparison/compare-documents.js +48 -0
- package/dist/es/lib/comparison/compare-documents.js.map +1 -0
- package/dist/es/lib/comparison/compare-paragraph-like.js +378 -0
- package/dist/es/lib/comparison/compare-paragraph-like.js.map +1 -0
- package/dist/es/lib/comparison/compare-table-element.js +559 -0
- package/dist/es/lib/comparison/compare-table-element.js.map +1 -0
- package/dist/es/lib/comparison/create-dataTracked-attrs.js +54 -0
- package/dist/es/lib/comparison/create-dataTracked-attrs.js.map +1 -0
- package/dist/es/lib/comparison/distribute-nodes.js +127 -0
- package/dist/es/lib/comparison/distribute-nodes.js.map +1 -0
- package/dist/es/lib/comparison/rebuild-nodes-tree.js +72 -0
- package/dist/es/lib/comparison/rebuild-nodes-tree.js.map +1 -0
- package/dist/es/store/Store.js +7 -2
- package/dist/es/store/Store.js.map +1 -1
- package/dist/types/EditorApp.d.ts +2 -1
- package/dist/types/Main.d.ts +1 -1
- package/dist/types/components/projects/Inspector.d.ts +1 -1
- package/dist/types/components/projects/ManuscriptPageContainer.d.ts +1 -1
- package/dist/types/components/tools/CompareDocumentsModal.d.ts +11 -0
- package/dist/types/components/track-changes/TrackChangesPanel.d.ts +1 -1
- package/dist/types/components/track-changes/suggestion-list/Suggestion.d.ts +1 -1
- package/dist/types/components/track-changes/suggestion-list/SuggestionList.d.ts +3 -3
- package/dist/types/hooks/use-compare-documents.d.ts +24 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/lib/comparison/compare-documents.d.ts +16 -0
- package/dist/types/lib/comparison/compare-paragraph-like.d.ts +23 -0
- package/dist/types/lib/comparison/compare-table-element.d.ts +21 -0
- package/dist/types/lib/comparison/create-dataTracked-attrs.d.ts +15 -0
- package/dist/types/lib/comparison/distribute-nodes.d.ts +19 -0
- package/dist/types/lib/comparison/rebuild-nodes-tree.d.ts +14 -0
- package/dist/types/store/Store.d.ts +3 -1
- package/package.json +6 -4
@@ -0,0 +1,140 @@
|
|
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) 2025 Atypon Systems LLC. All Rights Reserved.
|
11
|
+
*/
|
12
|
+
import { CloseButton, ModalBody, ModalContainer, ModalHeader, PrimaryButton, SecondaryButton, StyledModal, } from '@manuscripts/style-guide';
|
13
|
+
import React, { useState } from 'react';
|
14
|
+
import styled from 'styled-components';
|
15
|
+
export const CompareDocumentsModal = ({ snapshots, loading = false, error = null, onCancel, submissionID, }) => {
|
16
|
+
const [isOpen, setOpen] = useState(true);
|
17
|
+
const [originalDocId, setOriginalDocId] = useState('');
|
18
|
+
const [comparisonDocId, setComparisonDocId] = useState('');
|
19
|
+
const handleCompare = () => {
|
20
|
+
setOpen(false);
|
21
|
+
window.open(`/editor/${submissionID}/compare/${originalDocId}/${comparisonDocId}`, '_blank');
|
22
|
+
handleClose();
|
23
|
+
};
|
24
|
+
const handleClose = () => {
|
25
|
+
setOpen(false);
|
26
|
+
onCancel();
|
27
|
+
};
|
28
|
+
return (React.createElement(StyledModal, { isOpen: isOpen, onRequestClose: handleClose, shouldCloseOnOverlayClick: true },
|
29
|
+
React.createElement(StyledModalContainer, null,
|
30
|
+
React.createElement(StyledModalHeader, null,
|
31
|
+
React.createElement(ModalTitle, null, "Compare Documents"),
|
32
|
+
React.createElement(CloseButton, { onClick: handleClose })),
|
33
|
+
React.createElement(StyledModalBody, null, loading ? (React.createElement(LoadingContainer, null,
|
34
|
+
React.createElement(LoadingText, null, "Loading snapshots..."))) : error ? (React.createElement(ErrorMessage, null, error)) : (React.createElement(React.Fragment, null,
|
35
|
+
React.createElement(DocumentSelectContainer, null,
|
36
|
+
React.createElement(SelectContainer, null,
|
37
|
+
React.createElement(InputLabel, { htmlFor: "original-document" }, "Original Version"),
|
38
|
+
React.createElement(Select, { id: "original-document", value: originalDocId, onChange: (e) => setOriginalDocId(e.target.value) },
|
39
|
+
React.createElement("option", { value: "" }, "Select a version"),
|
40
|
+
snapshots.map((snapshot) => (React.createElement("option", { key: snapshot.id, value: snapshot.id, disabled: snapshot.id === comparisonDocId },
|
41
|
+
snapshot.name,
|
42
|
+
" (",
|
43
|
+
snapshot.createdAt,
|
44
|
+
")"))))),
|
45
|
+
React.createElement(SelectContainer, null,
|
46
|
+
React.createElement(InputLabel, { htmlFor: "comparison-document" }, "Version to Compare"),
|
47
|
+
React.createElement(Select, { id: "comparison-document", value: comparisonDocId, onChange: (e) => setComparisonDocId(e.target.value) },
|
48
|
+
React.createElement("option", { value: "" }, "Select a version"),
|
49
|
+
snapshots.map((snapshot) => (React.createElement("option", { key: snapshot.id, value: snapshot.id, disabled: snapshot.id === originalDocId },
|
50
|
+
snapshot.name,
|
51
|
+
" (",
|
52
|
+
snapshot.createdAt,
|
53
|
+
")")))))),
|
54
|
+
React.createElement(ButtonContainer, null,
|
55
|
+
React.createElement(SecondaryButton, { onClick: handleClose }, "Cancel"),
|
56
|
+
React.createElement(PrimaryButton, { onClick: handleCompare, disabled: !originalDocId ||
|
57
|
+
!comparisonDocId ||
|
58
|
+
originalDocId === comparisonDocId }, "Compare"))))))));
|
59
|
+
};
|
60
|
+
const DocumentSelectContainer = styled.div `
|
61
|
+
display: flex;
|
62
|
+
flex-direction: column;
|
63
|
+
gap: ${(props) => props.theme.grid.unit * 2}px;
|
64
|
+
`;
|
65
|
+
const SelectContainer = styled.div `
|
66
|
+
display: flex;
|
67
|
+
flex-direction: column;
|
68
|
+
gap: ${(props) => props.theme.grid.unit}px;
|
69
|
+
margin-bottom: ${(props) => props.theme.grid.unit * 2}px;
|
70
|
+
`;
|
71
|
+
const InputLabel = styled.label `
|
72
|
+
font-size: ${(props) => props.theme.font.size.normal};
|
73
|
+
font-weight: ${(props) => props.theme.font.weight.medium};
|
74
|
+
color: ${(props) => props.theme.colors.text.primary};
|
75
|
+
margin-bottom: ${(props) => props.theme.grid.unit}px;
|
76
|
+
`;
|
77
|
+
const Select = styled.select `
|
78
|
+
width: 100%;
|
79
|
+
height: 36px;
|
80
|
+
padding: 0 ${(props) => props.theme.grid.unit * 2}px;
|
81
|
+
border: 1px solid ${(props) => props.theme.colors.border.secondary};
|
82
|
+
border-radius: ${(props) => props.theme.grid.radius.small};
|
83
|
+
background-color: ${(props) => props.theme.colors.background.primary};
|
84
|
+
font-size: ${(props) => props.theme.font.size.normal};
|
85
|
+
color: ${(props) => props.theme.colors.text.primary};
|
86
|
+
appearance: none;
|
87
|
+
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='6' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6 6L0 0h12z' fill='%23666'/%3E%3C/svg%3E");
|
88
|
+
background-repeat: no-repeat;
|
89
|
+
background-position: right ${(props) => props.theme.grid.unit * 2}px center;
|
90
|
+
`;
|
91
|
+
const ButtonContainer = styled.div `
|
92
|
+
display: flex;
|
93
|
+
justify-content: flex-end;
|
94
|
+
gap: ${(props) => props.theme.grid.unit * 2}px;
|
95
|
+
padding-top: ${(props) => props.theme.grid.unit * 2}px;
|
96
|
+
border-top: 1px solid ${(props) => props.theme.colors.border.tertiary};
|
97
|
+
`;
|
98
|
+
const StyledModalBody = styled(ModalBody) `
|
99
|
+
width: 400px;
|
100
|
+
padding: ${(props) => props.theme.grid.unit * 3}px;
|
101
|
+
flex-direction: column;
|
102
|
+
height: 250px;
|
103
|
+
justify-content: end;
|
104
|
+
margin-bottom: 15px;
|
105
|
+
`;
|
106
|
+
const StyledModalContainer = styled(ModalContainer) `
|
107
|
+
margin: auto;
|
108
|
+
position: relative;
|
109
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
110
|
+
`;
|
111
|
+
const ModalTitle = styled.h2 `
|
112
|
+
font-size: ${(props) => props.theme.font.size.medium};
|
113
|
+
font-weight: ${(props) => props.theme.font.weight.bold};
|
114
|
+
color: ${(props) => props.theme.colors.text.primary};
|
115
|
+
margin-left: ${(props) => props.theme.grid.unit * 2}px;
|
116
|
+
`;
|
117
|
+
const StyledModalHeader = styled(ModalHeader) `
|
118
|
+
width: 100%;
|
119
|
+
display: flex;
|
120
|
+
justify-content: space-between;
|
121
|
+
align-items: center;
|
122
|
+
border-bottom: 1px solid ${(props) => props.theme.colors.border.tertiary};
|
123
|
+
`;
|
124
|
+
const LoadingContainer = styled.div `
|
125
|
+
display: flex;
|
126
|
+
justify-content: center;
|
127
|
+
align-items: center;
|
128
|
+
height: 60px;
|
129
|
+
`;
|
130
|
+
const LoadingText = styled.div `
|
131
|
+
font-size: ${(props) => props.theme.font.size.normal};
|
132
|
+
color: ${(props) => props.theme.colors.text.secondary};
|
133
|
+
text-align: center;
|
134
|
+
`;
|
135
|
+
const ErrorMessage = styled.div `
|
136
|
+
color: ${(props) => props.theme.colors.text.error};
|
137
|
+
margin: ${(props) => props.theme.grid.unit * 2}px 0;
|
138
|
+
text-align: center;
|
139
|
+
`;
|
140
|
+
//# sourceMappingURL=CompareDocumentsModal.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CompareDocumentsModal.js","sourceRoot":"","sources":["../../../../src/components/tools/CompareDocumentsModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,WAAW,EACX,SAAS,EACT,cAAc,EACd,WAAW,EACX,aAAa,EACb,eAAe,EACf,WAAW,GACZ,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAYtC,MAAM,CAAC,MAAM,qBAAqB,GAAyC,CAAC,EAC1E,SAAS,EACT,OAAO,GAAG,KAAK,EACf,KAAK,GAAG,IAAI,EACZ,QAAQ,EACR,YAAY,GACb,EAAE,EAAE;IACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IACxC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAA;IAC9D,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAA;IAElE,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,OAAO,CAAC,KAAK,CAAC,CAAA;QACd,MAAM,CAAC,IAAI,CACT,WAAW,YAAY,YAAY,aAAa,IAAI,eAAe,EAAE,EACrE,QAAQ,CACT,CAAA;QACD,WAAW,EAAE,CAAA;IACf,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,OAAO,CAAC,KAAK,CAAC,CAAA;QACd,QAAQ,EAAE,CAAA;IACZ,CAAC,CAAA;IAED,OAAO,CACL,oBAAC,WAAW,IACV,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,WAAW,EAC3B,yBAAyB,EAAE,IAAI;QAE/B,oBAAC,oBAAoB;YACnB,oBAAC,iBAAiB;gBAChB,oBAAC,UAAU,4BAA+B;gBAC1C,oBAAC,WAAW,IAAC,OAAO,EAAE,WAAW,GAAI,CACnB;YACpB,oBAAC,eAAe,QACb,OAAO,CAAC,CAAC,CAAC,CACT,oBAAC,gBAAgB;gBACf,oBAAC,WAAW,+BAAmC,CAC9B,CACpB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACV,oBAAC,YAAY,QAAE,KAAK,CAAgB,CACrC,CAAC,CAAC,CAAC,CACF;gBACE,oBAAC,uBAAuB;oBACtB,oBAAC,eAAe;wBACd,oBAAC,UAAU,IAAC,OAAO,EAAC,mBAAmB,uBAE1B;wBACb,oBAAC,MAAM,IACL,EAAE,EAAC,mBAAmB,EACtB,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;4BAEjD,gCAAQ,KAAK,EAAC,EAAE,uBAA0B;4BACzC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC3B,gCACE,GAAG,EAAE,QAAQ,CAAC,EAAE,EAChB,KAAK,EAAE,QAAQ,CAAC,EAAE,EAClB,QAAQ,EAAE,QAAQ,CAAC,EAAE,KAAK,eAAe;gCAExC,QAAQ,CAAC,IAAI;;gCAAI,QAAQ,CAAC,SAAS;oCAC7B,CACV,CAAC,CACK,CACO;oBAElB,oBAAC,eAAe;wBACd,oBAAC,UAAU,IAAC,OAAO,EAAC,qBAAqB,yBAE5B;wBACb,oBAAC,MAAM,IACL,EAAE,EAAC,qBAAqB,EACxB,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;4BAEnD,gCAAQ,KAAK,EAAC,EAAE,uBAA0B;4BACzC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC3B,gCACE,GAAG,EAAE,QAAQ,CAAC,EAAE,EAChB,KAAK,EAAE,QAAQ,CAAC,EAAE,EAClB,QAAQ,EAAE,QAAQ,CAAC,EAAE,KAAK,aAAa;gCAEtC,QAAQ,CAAC,IAAI;;gCAAI,QAAQ,CAAC,SAAS;oCAC7B,CACV,CAAC,CACK,CACO,CACM;gBAE1B,oBAAC,eAAe;oBACd,oBAAC,eAAe,IAAC,OAAO,EAAE,WAAW,aAA0B;oBAC/D,oBAAC,aAAa,IACZ,OAAO,EAAE,aAAa,EACtB,QAAQ,EACN,CAAC,aAAa;4BACd,CAAC,eAAe;4BAChB,aAAa,KAAK,eAAe,cAIrB,CACA,CACjB,CACJ,CACe,CACG,CACX,CACf,CAAA;AACH,CAAC,CAAA;AAED,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAA;;;SAGjC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;CAC5C,CAAA;AAED,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA;;;SAGzB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;mBACtB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;CACtD,CAAA;AAED,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAA;eAChB,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,MAAM;WAC/C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;mBAClC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;CAClD,CAAA;AAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;;;eAGb,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;sBAC7B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS;mBACjD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;sBACrC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO;eACvD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;WAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;;;;+BAItB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;CAClE,CAAA;AAED,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA;;;SAGzB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;iBAC5B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;0BAC3B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ;CACtE,CAAA;AAED,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;;aAE5B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;;;;;CAKhD,CAAA;AAED,MAAM,oBAAoB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;;;;CAIlD,CAAA;AAED,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAA;eACb,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,IAAI;WAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;iBACpC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;CACpD,CAAA;AAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;;;;;6BAKhB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ;CACzE,CAAA;AAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;CAKlC,CAAA;AAED,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA;eACf,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;WAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;;CAEtD,CAAA;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;WACpB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK;YACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;;CAE/C,CAAA"}
|
@@ -52,7 +52,7 @@ const Label = styled.div `
|
|
52
52
|
const Container = styled(DropdownContainer) `
|
53
53
|
padding-top: ${(props) => props.theme.grid.unit * 4}px;
|
54
54
|
padding-left: ${(props) => props.theme.grid.unit * 4}px;
|
55
|
-
|
55
|
+
width: fit-content;
|
56
56
|
.dropdown-toggle {
|
57
57
|
border: none;
|
58
58
|
background: transparent !important;
|
@@ -7,7 +7,7 @@
|
|
7
7
|
*
|
8
8
|
* The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
|
9
9
|
*
|
10
|
-
* All portions of the code written by Atypon Systems LLC are Copyright (c)
|
10
|
+
* All portions of the code written by Atypon Systems LLC are Copyright (c) 2025 Atypon Systems LLC. All Rights Reserved.
|
11
11
|
*/
|
12
12
|
import { CHANGE_STATUS, ChangeSet, trackCommands, } from '@manuscripts/track-changes-plugin';
|
13
13
|
import React, { useCallback, useState } from 'react';
|
@@ -18,10 +18,11 @@ import { SuggestionList } from './suggestion-list/SuggestionList';
|
|
18
18
|
import { setChangeStatus, setSelectedSuggestion } from './utils';
|
19
19
|
export const TrackChangesPanel = () => {
|
20
20
|
const [sortBy, setSortBy] = useState('in Context');
|
21
|
-
const [{ trackState, selectedSuggestionID }, _, getState] = useStore((store) => ({
|
21
|
+
const [{ trackState, selectedSuggestionID, isComparingMode }, _, getState] = useStore((store) => ({
|
22
22
|
// @TODO - check if trackstate actually issues some updates and we listen to them
|
23
23
|
trackState: store.trackState,
|
24
24
|
selectedSuggestionID: store.selectedSuggestionID,
|
25
|
+
isComparingMode: store.isComparingMode,
|
25
26
|
}));
|
26
27
|
const handleSelect = useCallback((suggestions) => {
|
27
28
|
setSelectedSuggestion(suggestions, getState);
|
@@ -48,6 +49,18 @@ export const TrackChangesPanel = () => {
|
|
48
49
|
}, []);
|
49
50
|
return (React.createElement(React.Fragment, null,
|
50
51
|
React.createElement(SortByDropdown, { sortBy: sortBy, setSortBy: setSortBy }),
|
51
|
-
React.createElement(SuggestionList, { type: "all", changes: changeSet?.groupChanges || [], selectionID: selectedSuggestionID, title: "Suggestions", sortBy: sortBy, onAccept:
|
52
|
+
React.createElement(SuggestionList, { type: "all", changes: changeSet?.groupChanges || [], selectionID: selectedSuggestionID, title: "Suggestions", sortBy: sortBy, onAccept: (change) => {
|
53
|
+
if (!isComparingMode) {
|
54
|
+
handleAccept(change);
|
55
|
+
}
|
56
|
+
}, onReject: (change) => {
|
57
|
+
if (!isComparingMode) {
|
58
|
+
handleReject(change);
|
59
|
+
}
|
60
|
+
}, onAcceptAll: isComparingMode
|
61
|
+
? undefined
|
62
|
+
: changeSet?.pending.length
|
63
|
+
? handleAcceptAll
|
64
|
+
: undefined, onSelect: handleSelect })));
|
52
65
|
};
|
53
66
|
//# sourceMappingURL=TrackChangesPanel.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"TrackChangesPanel.js","sourceRoot":"","sources":["../../../../src/components/track-changes/TrackChangesPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,aAAa,EACb,SAAS,EAET,aAAa,GACd,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEpD,OAAO,UAAU,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEhE,MAAM,CAAC,MAAM,iBAAiB,GAAa,GAAG,EAAE;IAC9C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAA;IAElD,MAAM,CAAC,EAAE,UAAU,EAAE,oBAAoB,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,
|
1
|
+
{"version":3,"file":"TrackChangesPanel.js","sourceRoot":"","sources":["../../../../src/components/track-changes/TrackChangesPanel.tsx"],"names":[],"mappings":"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"}
|
@@ -7,10 +7,11 @@
|
|
7
7
|
*
|
8
8
|
* The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
|
9
9
|
*
|
10
|
-
* All portions of the code written by Atypon Systems LLC are Copyright (c)
|
10
|
+
* All portions of the code written by Atypon Systems LLC are Copyright (c) 2025 Atypon Systems LLC. All Rights Reserved.
|
11
11
|
*/
|
12
12
|
import React, { useEffect, useRef, useState } from 'react';
|
13
13
|
import styled from 'styled-components';
|
14
|
+
import { useStore } from '../../../store';
|
14
15
|
import TrackModal from '../TrackModal';
|
15
16
|
import SuggestionActions from './SuggestionActions';
|
16
17
|
import { SuggestionSnippet } from './SuggestionSnippet';
|
@@ -23,6 +24,9 @@ const scrollIntoView = (element) => {
|
|
23
24
|
export const Suggestion = ({ suggestions, isSelected, onAccept, onReject, onSelect, }) => {
|
24
25
|
const wrapperRef = useRef(null);
|
25
26
|
const [trackModalVisible, setModalVisible] = useState(false);
|
27
|
+
const [{ isComparingMode }] = useStore((store) => ({
|
28
|
+
isComparingMode: store.isComparingMode,
|
29
|
+
}));
|
26
30
|
const handleClick = (e) => {
|
27
31
|
e.preventDefault();
|
28
32
|
setModalVisible(true);
|
@@ -38,8 +42,8 @@ export const Suggestion = ({ suggestions, isSelected, onAccept, onReject, onSele
|
|
38
42
|
return (React.createElement(Wrapper, { "data-cy": "suggestion", isFocused: isSelected, ref: wrapperRef },
|
39
43
|
React.createElement(FocusHandle, { href: "#", onClick: handleClick },
|
40
44
|
React.createElement(SuggestionSnippet, { suggestions: suggestions })),
|
41
|
-
React.createElement(Actions, null,
|
42
|
-
React.createElement(SuggestionActions, { suggestions: suggestions, handleAccept: onAccept, handleReject: onReject })),
|
45
|
+
!isComparingMode && (React.createElement(Actions, null,
|
46
|
+
React.createElement(SuggestionActions, { suggestions: suggestions, handleAccept: onAccept, handleReject: onReject }))),
|
43
47
|
trackModalVisible && (React.createElement(TrackModal, { ref: wrapperRef, isVisible: trackModalVisible, changeId: suggestions[0].id, setVisible: setModalVisible }))));
|
44
48
|
};
|
45
49
|
const Actions = styled.div `
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Suggestion.js","sourceRoot":"","sources":["../../../../../src/components/track-changes/suggestion-list/Suggestion.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAEtC,OAAO,UAAU,MAAM,eAAe,CAAA;AACtC,OAAO,iBAAiB,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,MAAM,cAAc,GAAG,CAAC,OAAoB,EAAE,EAAE;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAA;IAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE;QACtD,OAAO,CAAC,cAAc,EAAE,CAAA;KACzB;AACH,CAAC,CAAA;AAUD,MAAM,CAAC,MAAM,UAAU,GAAoB,CAAC,EAC1C,WAAW,EACX,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IAC9C,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;
|
1
|
+
{"version":3,"file":"Suggestion.js","sourceRoot":"","sources":["../../../../../src/components/track-changes/suggestion-list/Suggestion.tsx"],"names":[],"mappings":"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"}
|
@@ -1,15 +1,19 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import styled from 'styled-components';
|
3
|
+
import { useStore } from '../../../store';
|
3
4
|
import { InspectorSection } from '../../InspectorSection';
|
4
5
|
import { Suggestion } from './Suggestion';
|
5
6
|
export const SuggestionList = ({ changes, selectionID, title, type, sortBy, onAccept, onReject, onAcceptAll, onSelect, }) => {
|
7
|
+
const [{ isComparingMode }] = useStore((store) => ({
|
8
|
+
isComparingMode: store.isComparingMode,
|
9
|
+
}));
|
6
10
|
const changesByDate = (a, b) => b[0].dataTracked.updatedAt - a[0].dataTracked.updatedAt;
|
7
11
|
const changesByContext = (a, b) => a[0].from - b[0].from;
|
8
12
|
const sortedChanges = changes
|
9
13
|
.slice()
|
10
14
|
.sort(sortBy === 'Date' ? changesByDate : changesByContext);
|
11
|
-
return (React.createElement(InspectorSection, { title: title.concat(changes.length ? ` (${changes.length})` : ''), approveAll: onAcceptAll, fixed: true },
|
12
|
-
React.createElement(List, { "data-cy": "suggestions-list", "data-cy-type": type }, sortedChanges.map((c) => (React.createElement(Suggestion, { key: c[0].id, suggestions: c, isSelected: selectionID === c[0].id, onAccept: () => onAccept(c), onReject: () => onReject(c), onSelect: () => onSelect && onSelect(c) }))))));
|
15
|
+
return (React.createElement(InspectorSection, { title: title.concat(changes.length ? ` (${changes.length})` : ''), approveAll: !isComparingMode ? onAcceptAll : undefined, fixed: true },
|
16
|
+
React.createElement(List, { "data-cy": "suggestions-list", "data-cy-type": type }, sortedChanges.map((c) => (React.createElement(Suggestion, { key: c[0].id, suggestions: c, isSelected: selectionID === c[0].id, onAccept: () => !isComparingMode && onAccept(c), onReject: () => !isComparingMode && onReject(c), onSelect: () => onSelect && onSelect(c) }))))));
|
13
17
|
};
|
14
18
|
const List = styled.ul `
|
15
19
|
list-style: none;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SuggestionList.js","sourceRoot":"","sources":["../../../../../src/components/track-changes/suggestion-list/SuggestionList.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAEtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAczC,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAC5D,OAAO,EACP,WAAW,EACX,KAAK,EACL,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,aAAa,GAAG,CAAC,CAAa,EAAE,CAAa,EAAE,EAAE,CACrD,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAA;IAEzD,MAAM,gBAAgB,GAAG,CAAC,CAAa,EAAE,CAAa,EAAE,EAAE,CACxD,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEvB,MAAM,aAAa,GAAG,OAAO;SAC1B,KAAK,EAAE;SACP,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAA;IAE7D,OAAO,CACL,oBAAC,gBAAgB,IACf,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EACjE,UAAU,EAAE,WAAW,
|
1
|
+
{"version":3,"file":"SuggestionList.js","sourceRoot":"","sources":["../../../../../src/components/track-changes/suggestion-list/SuggestionList.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAczC,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAC5D,OAAO,EACP,WAAW,EACX,KAAK,EACL,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjD,eAAe,EAAE,KAAK,CAAC,eAAe;KACvC,CAAC,CAAC,CAAA;IAEH,MAAM,aAAa,GAAG,CAAC,CAAa,EAAE,CAAa,EAAE,EAAE,CACrD,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAA;IAEzD,MAAM,gBAAgB,GAAG,CAAC,CAAa,EAAE,CAAa,EAAE,EAAE,CACxD,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEvB,MAAM,aAAa,GAAG,OAAO;SAC1B,KAAK,EAAE;SACP,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAA;IAE7D,OAAO,CACL,oBAAC,gBAAgB,IACf,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EACjE,UAAU,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EACtD,KAAK,EAAE,IAAI;QAEX,oBAAC,IAAI,eAAS,kBAAkB,kBAAe,IAAI,IAChD,aAAa,CAAC,GAAG,CAAC,CAAC,CAAa,EAAE,EAAE,CAAC,CACpC,oBAAC,UAAU,IACT,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EACZ,WAAW,EAAE,CAAC,EACd,UAAU,EAAE,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EACnC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,eAAe,IAAI,QAAQ,CAAC,CAAC,CAAC,EAC/C,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,eAAe,IAAI,QAAQ,CAAC,CAAC,CAAC,EAC/C,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,GACvC,CACH,CAAC,CACG,CACU,CACpB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAA;;;;;CAKrB,CAAA"}
|
@@ -0,0 +1,65 @@
|
|
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) 2025 Atypon Systems LLC. All Rights Reserved.
|
11
|
+
*/
|
12
|
+
import { useEffect, useState } from 'react';
|
13
|
+
import { compareDocuments } from '../lib/comparison/compare-documents';
|
14
|
+
export const useCompareDocuments = ({ originalId, comparisonId, getSnapshot, }) => {
|
15
|
+
const [comparedDoc, setComparedDoc] = useState(null);
|
16
|
+
const [isLoading, setIsLoading] = useState(false);
|
17
|
+
const [error, setError] = useState(null);
|
18
|
+
const isComparingMode = Boolean(originalId && comparisonId);
|
19
|
+
useEffect(() => {
|
20
|
+
const fetchAndCompareDocuments = async () => {
|
21
|
+
if (!originalId || !comparisonId) {
|
22
|
+
setComparedDoc(null);
|
23
|
+
setError(null);
|
24
|
+
return;
|
25
|
+
}
|
26
|
+
setIsLoading(true);
|
27
|
+
setError(null);
|
28
|
+
try {
|
29
|
+
const [originalSnapshot, comparisonSnapshot] = await Promise.all([
|
30
|
+
getSnapshot(originalId),
|
31
|
+
getSnapshot(comparisonId),
|
32
|
+
]);
|
33
|
+
if (!originalSnapshot || !comparisonSnapshot) {
|
34
|
+
throw new Error('Failed to fetch one or both snapshots');
|
35
|
+
}
|
36
|
+
const comparedDocument = compareDocuments(originalSnapshot, comparisonSnapshot);
|
37
|
+
setComparedDoc(comparedDocument);
|
38
|
+
}
|
39
|
+
catch (err) {
|
40
|
+
console.error('Error comparing documents:', err);
|
41
|
+
setError(err instanceof Error ? err.message : 'Unknown error occurred');
|
42
|
+
setComparedDoc(null);
|
43
|
+
}
|
44
|
+
finally {
|
45
|
+
setIsLoading(false);
|
46
|
+
}
|
47
|
+
};
|
48
|
+
fetchAndCompareDocuments();
|
49
|
+
}, [originalId, comparisonId, getSnapshot]);
|
50
|
+
// Reset state when exiting comparison mode
|
51
|
+
useEffect(() => {
|
52
|
+
if (!isComparingMode) {
|
53
|
+
setComparedDoc(null);
|
54
|
+
setError(null);
|
55
|
+
setIsLoading(false);
|
56
|
+
}
|
57
|
+
}, [isComparingMode]);
|
58
|
+
return {
|
59
|
+
comparedDoc,
|
60
|
+
isComparingMode,
|
61
|
+
isLoading,
|
62
|
+
error,
|
63
|
+
};
|
64
|
+
};
|
65
|
+
//# sourceMappingURL=use-compare-documents.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"use-compare-documents.js","sourceRoot":"","sources":["../../../src/hooks/use-compare-documents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAStE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAClC,UAAU,EACV,YAAY,EACZ,WAAW,GACc,EAAE,EAAE;IAC7B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAA;IAC3E,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEvD,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,IAAI,YAAY,CAAC,CAAA;IAE3D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,wBAAwB,GAAG,KAAK,IAAI,EAAE;YAC1C,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE;gBAChC,cAAc,CAAC,IAAI,CAAC,CAAA;gBACpB,QAAQ,CAAC,IAAI,CAAC,CAAA;gBACd,OAAM;aACP;YAED,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,QAAQ,CAAC,IAAI,CAAC,CAAA;YAEd,IAAI;gBACF,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC/D,WAAW,CAAC,UAAU,CAAC;oBACvB,WAAW,CAAC,YAAY,CAAC;iBAC1B,CAAC,CAAA;gBAEF,IAAI,CAAC,gBAAgB,IAAI,CAAC,kBAAkB,EAAE;oBAC5C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;iBACzD;gBAED,MAAM,gBAAgB,GAAG,gBAAgB,CACvC,gBAAgB,EAChB,kBAAkB,CACnB,CAAA;gBACD,cAAc,CAAC,gBAAgB,CAAC,CAAA;aACjC;YAAC,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAA;gBAChD,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAA;gBACvE,cAAc,CAAC,IAAI,CAAC,CAAA;aACrB;oBAAS;gBACR,YAAY,CAAC,KAAK,CAAC,CAAA;aACpB;QACH,CAAC,CAAA;QAED,wBAAwB,EAAE,CAAA;IAC5B,CAAC,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAA;IAE3C,2CAA2C;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE;YACpB,cAAc,CAAC,IAAI,CAAC,CAAA;YACpB,QAAQ,CAAC,IAAI,CAAC,CAAA;YACd,YAAY,CAAC,KAAK,CAAC,CAAA;SACpB;IACH,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAA;IAErB,OAAO;QACL,WAAW;QACX,eAAe;QACf,SAAS;QACT,KAAK;KACN,CAAA;AACH,CAAC,CAAA"}
|
@@ -7,20 +7,21 @@
|
|
7
7
|
*
|
8
8
|
* The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
|
9
9
|
*
|
10
|
-
* All portions of the code written by Atypon Systems LLC are Copyright (c)
|
10
|
+
* All portions of the code written by Atypon Systems LLC are Copyright (c) 2025 Atypon Systems LLC. All Rights Reserved.
|
11
11
|
*/
|
12
12
|
import { useEditor } from '@manuscripts/body-editor';
|
13
13
|
import { getCapabilities as getActionCapabilities } from '@manuscripts/style-guide';
|
14
14
|
import { useEffect, useMemo } from 'react';
|
15
|
-
import { useLocation, useNavigate } from 'react-router-dom';
|
15
|
+
import { useLocation, useNavigate, useParams } from 'react-router-dom';
|
16
16
|
import { useApi } from '../api/Api';
|
17
17
|
import { StepsExchanger } from '../api/StepsExchanger';
|
18
18
|
import { getConfig } from '../config';
|
19
19
|
import { useStore } from '../store';
|
20
20
|
import { theme } from '../theme/theme';
|
21
|
+
import { useCompareDocuments } from './use-compare-documents';
|
21
22
|
import { useInspectorTabsContext } from './use-inspector-tabs-context';
|
22
23
|
export const useCreateEditor = () => {
|
23
|
-
const [{ doc, initialDocVersion, projectID, manuscriptID, user, fileManagement, style, locale, sectionCategories, isViewingMode, }, dispatch, getState,] = useStore((store) => ({
|
24
|
+
const [{ doc, initialDocVersion, projectID, manuscriptID, user, fileManagement, style, locale, sectionCategories, isViewingMode, getSnapshot, }, dispatch, getState,] = useStore((store) => ({
|
24
25
|
doc: store.doc,
|
25
26
|
initialDocVersion: store.initialDocVersion,
|
26
27
|
projectID: store.projectID,
|
@@ -31,22 +32,36 @@ export const useCreateEditor = () => {
|
|
31
32
|
locale: store.cslLocale,
|
32
33
|
sectionCategories: store.sectionCategories,
|
33
34
|
isViewingMode: store.isViewingMode,
|
35
|
+
getSnapshot: store.getSnapshot,
|
34
36
|
}));
|
35
37
|
const api = useApi();
|
38
|
+
const params = useParams();
|
39
|
+
const { comparedDoc, isComparingMode } = useCompareDocuments({
|
40
|
+
originalId: params.originalId,
|
41
|
+
comparisonId: params.comparisonId,
|
42
|
+
getSnapshot,
|
43
|
+
});
|
44
|
+
useEffect(() => {
|
45
|
+
dispatch({ isComparingMode });
|
46
|
+
}, [isComparingMode, dispatch]);
|
36
47
|
const updateVersion = (v) => dispatch({ initialDocVersion: v });
|
37
|
-
const stepsExchanger = useMemo(() =>
|
48
|
+
const stepsExchanger = useMemo(() => isComparingMode
|
49
|
+
? undefined
|
50
|
+
: new StepsExchanger(projectID, manuscriptID, initialDocVersion, api, updateVersion),
|
38
51
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
39
|
-
[projectID, manuscriptID, api]);
|
52
|
+
[projectID, manuscriptID, api, isComparingMode]);
|
40
53
|
useEffect(() => {
|
41
|
-
stepsExchanger
|
54
|
+
if (stepsExchanger) {
|
55
|
+
stepsExchanger.isThrottling.onChange((value) => {
|
56
|
+
dispatch({
|
57
|
+
preventUnload: value,
|
58
|
+
});
|
59
|
+
});
|
42
60
|
dispatch({
|
43
|
-
|
61
|
+
beforeUnload: () => stepsExchanger.flush(),
|
44
62
|
});
|
45
|
-
|
46
|
-
|
47
|
-
beforeUnload: () => stepsExchanger.flush(),
|
48
|
-
});
|
49
|
-
return () => stepsExchanger.stop();
|
63
|
+
return () => stepsExchanger.stop();
|
64
|
+
}
|
50
65
|
}, [dispatch, stepsExchanger]);
|
51
66
|
const getCapabilities = useMemo(() => (project, user, permittedActions) => getActionCapabilities(project, user, undefined, permittedActions, isViewingMode), [isViewingMode]);
|
52
67
|
const config = getConfig();
|
@@ -58,7 +73,7 @@ export const useCreateEditor = () => {
|
|
58
73
|
spellcheck: 'true',
|
59
74
|
tabindex: '2',
|
60
75
|
},
|
61
|
-
doc,
|
76
|
+
doc: comparedDoc || doc,
|
62
77
|
userID: user._id,
|
63
78
|
debug: config.environment === 'development',
|
64
79
|
// @TODO - move primaryLanguageCode to be an attribute on ManuscriptNode
|
@@ -79,10 +94,12 @@ export const useCreateEditor = () => {
|
|
79
94
|
return getState().files;
|
80
95
|
},
|
81
96
|
fileManagement: fileManagement,
|
82
|
-
collabProvider: stepsExchanger,
|
97
|
+
collabProvider: isComparingMode ? undefined : stepsExchanger,
|
83
98
|
sectionCategories: sectionCategories,
|
84
99
|
navigate: useNavigate(),
|
85
100
|
location: useLocation(),
|
101
|
+
isComparingMode,
|
102
|
+
submissionId: params.id,
|
86
103
|
lockBody: config.features.lockBody,
|
87
104
|
isViewingMode,
|
88
105
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"use-create-editor.js","sourceRoot":"","sources":["../../../src/hooks/use-create-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEpD,OAAO,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AACnF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;
|
1
|
+
{"version":3,"file":"use-create-editor.js","sourceRoot":"","sources":["../../../src/hooks/use-create-editor.ts"],"names":[],"mappings":"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"}
|
package/dist/es/index.js
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
*
|
8
8
|
* The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
|
9
9
|
*
|
10
|
-
* All portions of the code written by Atypon Systems LLC are Copyright (c)
|
10
|
+
* All portions of the code written by Atypon Systems LLC are Copyright (c) 2025 Atypon Systems LLC. All Rights Reserved.
|
11
11
|
*/
|
12
12
|
import './lib/fonts';
|
13
13
|
import React, { Suspense } from 'react';
|
@@ -17,12 +17,12 @@ import Main from './Main';
|
|
17
17
|
import { ThemeProvider } from './theme/ThemeProvider';
|
18
18
|
export { ProjectRole } from './lib/roles';
|
19
19
|
export { getUserRole } from './lib/roles';
|
20
|
-
const ManuscriptEditor = ({ fileManagement, files, manuscriptID, projectID, permittedActions, getAuthToken, config, observer, }) => {
|
20
|
+
const ManuscriptEditor = ({ fileManagement, files, manuscriptID, projectID, permittedActions, getAuthToken, config, observer, submissionID, }) => {
|
21
21
|
setConfig(config);
|
22
22
|
return (React.createElement(React.Fragment, null,
|
23
23
|
React.createElement(ThemeProvider, null,
|
24
24
|
React.createElement(Suspense, { fallback: React.createElement(LoadingPage, { className: 'loader' }, "Loading...") },
|
25
|
-
React.createElement(Main, { fileManagement: fileManagement, files: files, manuscriptID: manuscriptID, projectID: projectID, permittedActions: permittedActions, getAuthToken: getAuthToken, observer: observer }))),
|
25
|
+
React.createElement(Main, { fileManagement: fileManagement, files: files, manuscriptID: manuscriptID, projectID: projectID, permittedActions: permittedActions, getAuthToken: getAuthToken, observer: observer, submissionID: submissionID }))),
|
26
26
|
React.createElement("div", { id: "menu" }),
|
27
27
|
React.createElement("div", { id: "notifications" }),
|
28
28
|
React.createElement("div", { id: "size" })));
|
package/dist/es/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAA2B,SAAS,EAAE,MAAM,UAAU,CAAA;AAE7D,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AASzC,MAAM,gBAAgB,GAElB,CAAC,EACH,cAAc,EACd,KAAK,EACL,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,MAAM,EACN,QAAQ,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAA2B,SAAS,EAAE,MAAM,UAAU,CAAA;AAE7D,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AASzC,MAAM,gBAAgB,GAElB,CAAC,EACH,cAAc,EACd,KAAK,EACL,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,YAAY,GACb,EAAE,EAAE;IACH,SAAS,CAAC,MAAM,CAAC,CAAA;IACjB,OAAO,CACL;QACE,oBAAC,aAAa;YACZ,oBAAC,QAAQ,IACP,QAAQ,EAAE,oBAAC,WAAW,IAAC,SAAS,EAAE,QAAQ,iBAA0B;gBAEpE,oBAAC,IAAI,IACH,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,GAC1B,CACO,CACG;QAChB,6BAAK,EAAE,EAAC,MAAM,GAAO;QACrB,6BAAK,EAAE,EAAC,eAAe,GAAO;QAC9B,6BAAK,EAAE,EAAC,MAAM,GAAO,CACpB,CACJ,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAC3C,gBAAgB,EAChB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IACb,mHAAmH;IACnH,mIAAmI;IACnI,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAA,CAAC,sCAAsC;AACtF,CAAC,CACF,CAAA"}
|
@@ -0,0 +1,48 @@
|
|
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) 2025 Atypon Systems LLC. All Rights Reserved.
|
11
|
+
*/
|
12
|
+
import { schema } from '@manuscripts/transform';
|
13
|
+
import { isEqual } from 'lodash';
|
14
|
+
import { createComparisonSetAttrsDataTracked } from './create-dataTracked-attrs';
|
15
|
+
import { distributeNodesForComparison } from './distribute-nodes';
|
16
|
+
import { rebuildDocNodeTree } from './rebuild-nodes-tree';
|
17
|
+
// The entry point for the comparison mode, which is used to compare two ManuscriptNode trees
|
18
|
+
// It distributes the nodes, rebuilds the nodes tree and then creates a new ManuscriptNode tree
|
19
|
+
export const compareDocuments = (originalSnapshot, comparisonSnapshot) => {
|
20
|
+
const originalDocument = schema.nodeFromJSON(originalSnapshot.snapshot);
|
21
|
+
const comparisonDocument = schema.nodeFromJSON(comparisonSnapshot.snapshot);
|
22
|
+
const distributedNodes = distributeNodesForComparison(originalDocument, comparisonDocument);
|
23
|
+
const distributedNodesArray = [];
|
24
|
+
distributedNodes.forEach((_, key) => {
|
25
|
+
distributedNodesArray.push(rebuildDocNodeTree(key, distributedNodes));
|
26
|
+
});
|
27
|
+
const manuscript = schema.nodes.manuscript.create(comparisonDocument.attrs, distributedNodesArray);
|
28
|
+
return manuscript;
|
29
|
+
};
|
30
|
+
// Compares the attributes of two nodes and returns a new node with the updated attributes
|
31
|
+
export const compareSingleNodeAttrs = (originalNode, comparisonNode, nodeType, rebuiltChildren) => {
|
32
|
+
const originalAttrs = originalNode?.attrs || {};
|
33
|
+
const comparisonAttrs = comparisonNode?.attrs || {};
|
34
|
+
if (!isEqual(originalAttrs, comparisonAttrs)) {
|
35
|
+
return nodeType.create({
|
36
|
+
...comparisonAttrs,
|
37
|
+
dataTracked: [createComparisonSetAttrsDataTracked('', originalAttrs)],
|
38
|
+
}, rebuiltChildren.length > 0
|
39
|
+
? rebuiltChildren
|
40
|
+
: comparisonNode?.content || null);
|
41
|
+
}
|
42
|
+
else {
|
43
|
+
return nodeType.create(comparisonAttrs, rebuiltChildren.length > 0
|
44
|
+
? rebuiltChildren
|
45
|
+
: comparisonNode?.content || null);
|
46
|
+
}
|
47
|
+
};
|
48
|
+
//# sourceMappingURL=compare-documents.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"compare-documents.js","sourceRoot":"","sources":["../../../../src/lib/comparison/compare-documents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAkB,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAIhC,OAAO,EAAE,mCAAmC,EAAE,MAAM,4BAA4B,CAAA;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,6FAA6F;AAC7F,+FAA+F;AAC/F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,gBAAoC,EACpC,kBAAsC,EACtC,EAAE;IACF,MAAM,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACvE,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IAE3E,MAAM,gBAAgB,GAAG,4BAA4B,CACnD,gBAAgB,EAChB,kBAAkB,CACnB,CAAA;IACD,MAAM,qBAAqB,GAAqB,EAAE,CAAA;IAClD,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QAClC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAC/C,kBAAkB,CAAC,KAAK,EACxB,qBAAqB,CACtB,CAAA;IAED,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAED,0FAA0F;AAC1F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,YAA4B,EAC5B,cAA8B,EAC9B,QAAkB,EAClB,eAAiC,EACjB,EAAE;IAClB,MAAM,aAAa,GAAG,YAAY,EAAE,KAAK,IAAI,EAAE,CAAA;IAC/C,MAAM,eAAe,GAAG,cAAc,EAAE,KAAK,IAAI,EAAE,CAAA;IACnD,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE;QAC5C,OAAO,QAAQ,CAAC,MAAM,CACpB;YACE,GAAG,eAAe;YAClB,WAAW,EAAE,CAAC,mCAAmC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;SACtE,EACD,eAAe,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,cAAc,EAAE,OAAO,IAAI,IAAI,CACpC,CAAA;KACF;SAAM;QACL,OAAO,QAAQ,CAAC,MAAM,CACpB,eAAe,EACf,eAAe,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,cAAc,EAAE,OAAO,IAAI,IAAI,CACpC,CAAA;KACF;AACH,CAAC,CAAA"}
|