@manuscripts/body-editor 1.7.29-LEAN-3321-1 → 1.7.30

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.
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.deleteIcon = exports.alertIcon = exports.editAttrsTrackingIcon = exports.commentIcon = exports.editIcon = void 0;
18
+ exports.alertIcon = exports.editAttrsTrackingIcon = exports.commentIcon = exports.editIcon = void 0;
19
19
  exports.editIcon = `
20
20
  <svg
21
21
  width="14"
@@ -118,49 +118,3 @@ exports.alertIcon = `
118
118
  />
119
119
  </svg>
120
120
  `;
121
- exports.deleteIcon = `
122
- <svg
123
- width="13"
124
- height="15"
125
- viewBox="0 0 13 15"
126
- fill="none"
127
- xmlns="http://www.w3.org/2000/svg"
128
- >
129
- <path
130
- fill-rule="evenodd"
131
- clip-rule="evenodd"
132
- d="M2.00001 3C2 3.00135 2 3.00269 2 3.00404V13.004C2 13.5563 2.44772 14.004 3 14.004H10C10.5523 14.004 11 13.5563 11 13.004V3.00404C11 3.00269 11 3.00135 11 3C11.5978 3.34581 12 3.99215 12 4.73244V13.004C12 14.1086 11.1046 15.004 10 15.004H3C1.89543 15.004 1 14.1086 1 13.004V4.73244C1 3.99215 1.4022 3.34581 2.00001 3Z"
133
- fill="#C9C9C9"
134
- />
135
- <path
136
- fill-rule="evenodd"
137
- clip-rule="evenodd"
138
- d="M4.5 0C3.67157 0 3 0.671573 3 1.5V3.5C3 4.32843 3.67157 5 4.5 5H8.5C9.32843 5 10 4.32843 10 3.5V1.5C10 0.671573 9.32843 0 8.5 0H4.5ZM9 1.5C9 1.22386 8.77614 1 8.5 1H4.5C4.22386 1 4 1.22386 4 1.5C4 1.77614 4.22386 2 4.5 2H8.5C8.77614 2 9 1.77614 9 1.5Z"
139
- fill="#C9C9C9"
140
- />
141
- <rect
142
- y="2"
143
- width="13"
144
- height="3"
145
- rx="1.5"
146
- fill="#C9C9C9"
147
- />
148
- <path
149
- fill-rule="evenodd"
150
- clip-rule="evenodd"
151
- d="M8 7.5C8 7.22386 8.22386 7 8.5 7C8.77614 7 9 7.22386 9 7.5V11.5C9 11.7761 8.77614 12 8.5 12C8.22386 12 8 11.7761 8 11.5V7.5Z"
152
- fill="#C9C9C9"
153
- />
154
- <path
155
- fill-rule="evenodd"
156
- clip-rule="evenodd"
157
- d="M4 7.5C4 7.22386 4.22386 7 4.5 7C4.77614 7 5 7.22386 5 7.5V11.5C5 11.7761 4.77614 12 4.5 12C4.22386 12 4 11.7761 4 11.5V7.5Z"
158
- fill="#C9C9C9"
159
- />
160
- <path
161
- fill-rule="evenodd"
162
- clip-rule="evenodd"
163
- d="M11.5 3C11.7761 3 12 3.22386 12 3.5C12 3.77614 11.7761 4 11.5 4L1.5 4C1.22386 4 1 3.77614 1 3.5C1 3.22386 1.22386 3 1.5 3L11.5 3Z"
164
- fill="white"
165
- />
166
- </svg>`;
@@ -69,7 +69,7 @@ exports.default = (props) => {
69
69
  (0, prosemirror_tables_1.tableEditing)(),
70
70
  (0, highlight_1.default)(props),
71
71
  (0, selected_suggestion_ui_1.default)(props),
72
- (0, footnotes_1.default)(props),
72
+ (0, footnotes_1.default)(),
73
73
  (0, table_footnote_1.default)(),
74
74
  ];
75
75
  if (props.collabProvider) {
@@ -142,7 +142,7 @@ class ContextMenu {
142
142
  this.addPopperEventListeners();
143
143
  };
144
144
  this.showEditMenu = (target) => {
145
- var _a, _b;
145
+ var _a;
146
146
  const menu = document.createElement('div');
147
147
  menu.className = 'menu';
148
148
  const $pos = this.resolvePos();
@@ -174,17 +174,11 @@ class ContextMenu {
174
174
  }));
175
175
  }
176
176
  if (type === transform_1.schema.nodes.table_element) {
177
- const isInTable = (0, prosemirror_utils_1.hasParentNodeOfType)(transform_1.schema.nodes.table_element)(this.view.state.selection);
177
+ const isInTable = (0, prosemirror_utils_1.hasParentNodeOfType)(transform_1.schema.nodes.table)(this.view.state.selection);
178
178
  const tableElementFooter = (0, prosemirror_utils_1.findChildrenByType)(this.node, transform_1.schema.nodes.table_element_footer);
179
- const generalFootnote = (_a = tableElementFooter[0]) === null || _a === void 0 ? void 0 : _a.node.firstChild;
180
- let isDeletedOrRejected = false;
181
- if (generalFootnote) {
182
- isDeletedOrRejected =
183
- (0, track_changes_utils_1.isDeleted)(generalFootnote) || (0, track_changes_utils_1.isRejectedInsert)(generalFootnote);
184
- }
185
179
  const hasGeneralNote = tableElementFooter.length &&
186
- ((_b = tableElementFooter[0].node.firstChild) === null || _b === void 0 ? void 0 : _b.type) === transform_1.schema.nodes.paragraph;
187
- if (!hasGeneralNote || isDeletedOrRejected) {
180
+ ((_a = tableElementFooter[0].node.firstChild) === null || _a === void 0 ? void 0 : _a.type) === transform_1.schema.nodes.paragraph;
181
+ if (!hasGeneralNote) {
188
182
  menu.appendChild(this.createMenuSection((section) => {
189
183
  section.appendChild(this.createMenuItem('Add General Note', () => {
190
184
  (0, commands_1.insertGeneralFootnote)(this.node, this.getPos(), this.view, tableElementFooter);
@@ -14,9 +14,6 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
- var __importDefault = (this && this.__importDefault) || function (mod) {
18
- return (mod && mod.__esModule) ? mod : { "default": mod };
19
- };
20
17
  Object.defineProperty(exports, "__esModule", { value: true });
21
18
  exports.uncitedFootnoteWidget = exports.buildPluginState = exports.footnotesKey = void 0;
22
19
  const transform_1 = require("@manuscripts/transform");
@@ -25,9 +22,7 @@ const prosemirror_state_1 = require("prosemirror-state");
25
22
  const prosemirror_utils_1 = require("prosemirror-utils");
26
23
  const prosemirror_view_1 = require("prosemirror-view");
27
24
  const assets_1 = require("../../assets");
28
- const DeleteFootnoteDialog_1 = require("../../components/views/DeleteFootnoteDialog");
29
25
  const utils_1 = require("../../lib/utils");
30
- const ReactSubView_1 = __importDefault(require("../../views/ReactSubView"));
31
26
  const placeholder_1 = require("../placeholder");
32
27
  const footnotes_utils_1 = require("./footnotes-utils");
33
28
  exports.footnotesKey = new prosemirror_state_1.PluginKey('footnotes');
@@ -73,70 +68,7 @@ const uncitedFootnoteWidget = () => () => {
73
68
  return element;
74
69
  };
75
70
  exports.uncitedFootnoteWidget = uncitedFootnoteWidget;
76
- const getInlineFootnote = (view, id) => {
77
- let inlineFootnote = null;
78
- let footnotePosition = null;
79
- view.state.doc.descendants((node, pos) => {
80
- var _a;
81
- const footnote = node;
82
- if ((_a = footnote.attrs.rids) === null || _a === void 0 ? void 0 : _a.includes(id)) {
83
- inlineFootnote = footnote;
84
- footnotePosition = pos;
85
- return false;
86
- }
87
- });
88
- return { node: inlineFootnote, pos: footnotePosition };
89
- };
90
- const deleteFootnoteWidget = (node, props, footnoteType, footnoteMessage, id) => (view, getPos) => {
91
- const deleteBtn = document.createElement('span');
92
- deleteBtn.className = 'delete-icon';
93
- deleteBtn.innerHTML = assets_1.deleteIcon;
94
- deleteBtn.addEventListener('click', () => {
95
- const handleDelete = () => {
96
- const tr = view.state.tr;
97
- const pos = getPos();
98
- if (node.type === transform_1.schema.nodes.table_element_footer) {
99
- let isAllGeneralFootnotes = true;
100
- node.content.forEach((item) => {
101
- if (item.type !== transform_1.schema.nodes.paragraph) {
102
- isAllGeneralFootnotes = false;
103
- return;
104
- }
105
- });
106
- if (isAllGeneralFootnotes && pos) {
107
- tr.delete(pos, pos + node.nodeSize - 1);
108
- }
109
- else {
110
- node.content.forEach((item) => {
111
- if (item.type === transform_1.schema.nodes.paragraph && pos) {
112
- tr.delete(pos - 1, pos + item.nodeSize + 1);
113
- }
114
- });
115
- }
116
- }
117
- if (node.type === transform_1.schema.nodes.footnote && pos) {
118
- const inlineFootnotes = getInlineFootnote(view, id);
119
- tr.setSelection(prosemirror_state_1.TextSelection.near(view.state.doc.resolve(0))).delete(pos - 1, pos + node.nodeSize);
120
- if (inlineFootnotes.node) {
121
- const pos = inlineFootnotes.pos;
122
- const nodeSize = inlineFootnotes.node.nodeSize;
123
- if (pos && nodeSize) {
124
- tr.delete(pos, pos + nodeSize);
125
- }
126
- }
127
- }
128
- view.dispatch(tr);
129
- };
130
- const componentProps = {
131
- footnoteType: footnoteType,
132
- footnoteMessage: footnoteMessage,
133
- handleDelete: handleDelete,
134
- };
135
- (0, ReactSubView_1.default)(Object.assign(Object.assign({}, props), { dispatch: view.dispatch }), DeleteFootnoteDialog_1.DeleteFootnoteDialog, componentProps, node, () => getPos(), view);
136
- });
137
- return deleteBtn;
138
- };
139
- exports.default = (props) => {
71
+ exports.default = () => {
140
72
  return new prosemirror_state_1.Plugin({
141
73
  key: exports.footnotesKey,
142
74
  state: {
@@ -169,7 +101,6 @@ exports.default = (props) => {
169
101
  decorations: (state) => {
170
102
  const decorations = [];
171
103
  const isInTableElementFooter = (0, prosemirror_utils_1.hasParentNodeOfType)(transform_1.schema.nodes.table_element_footer)(state.selection);
172
- const isInTableElement = (0, prosemirror_utils_1.hasParentNodeOfType)(transform_1.schema.nodes.table_element)(state.selection);
173
104
  if (isInTableElementFooter) {
174
105
  const parent = (0, utils_1.findParentNodeWithIdValue)(state.selection);
175
106
  if (parent) {
@@ -180,7 +111,6 @@ exports.default = (props) => {
180
111
  }
181
112
  const { labels } = exports.footnotesKey.getState(state);
182
113
  let tableInlineFootnoteIds = undefined;
183
- const can = props.getCapabilities();
184
114
  state.doc.descendants((node, pos, parent) => {
185
115
  var _a;
186
116
  if ((0, transform_1.isFootnoteNode)(node)) {
@@ -201,37 +131,6 @@ exports.default = (props) => {
201
131
  decorations.push(prosemirror_view_1.Decoration.widget(pos + node.nodeSize - 1, (0, exports.uncitedFootnoteWidget)()));
202
132
  }
203
133
  }
204
- if (can.editArticle) {
205
- if (isInTableElement) {
206
- const isGeneralFootnote = node.type === transform_1.schema.nodes.paragraph;
207
- const isTableFootnote = node.type === transform_1.schema.nodes.footnote;
208
- const footnote = (() => {
209
- switch (node.type) {
210
- case transform_1.schema.nodes.footnote:
211
- return {
212
- type: 'table footnote',
213
- message: 'This action will entirely remove the table footnote from the list because it will no longer be used.',
214
- };
215
- default:
216
- return {
217
- type: 'table general note',
218
- message: 'This action will entirely remove the table general note.',
219
- };
220
- }
221
- })();
222
- if (isTableFootnote) {
223
- decorations.push(prosemirror_view_1.Decoration.widget(pos + 2, deleteFootnoteWidget(node, props, footnote.type, footnote.message, node.attrs.id), {
224
- key: node.attrs.id,
225
- }));
226
- }
227
- else if (isGeneralFootnote &&
228
- (parent === null || parent === void 0 ? void 0 : parent.type) === transform_1.schema.nodes.table_element_footer) {
229
- decorations.push(prosemirror_view_1.Decoration.widget(pos + 1, deleteFootnoteWidget(parent, props, footnote.type, footnote.message, parent.attrs.id), {
230
- key: parent.attrs.id,
231
- }));
232
- }
233
- }
234
- }
235
134
  if (node.type === transform_1.schema.nodes.footnotes_element) {
236
135
  if ((parent === null || parent === void 0 ? void 0 : parent.type) === transform_1.schema.nodes.table_element_footer) {
237
136
  decorations.push(prosemirror_view_1.Decoration.node(pos, pos + node.nodeSize, {
@@ -14,11 +14,11 @@ const isInlineFootnoteChange = (step, oldState, newState) => {
14
14
  exports.default = () => {
15
15
  return new prosemirror_state_1.Plugin({
16
16
  appendTransaction(transactions, oldState, newState) {
17
- const tableInlineFootnoteChange = transactions.find((tr) => tr.steps.find((s) => {
17
+ const tableInlineFootnoteChange = transactions.find((tr) => tr.steps.find((s, i) => {
18
18
  var _a;
19
19
  if (s instanceof prosemirror_transform_1.ReplaceStep) {
20
20
  const step = s;
21
- const $pos = oldState.doc.resolve(step.from);
21
+ const $pos = tr.docs[i].resolve(step.from);
22
22
  return (((_a = $pos.node($pos.depth - 2)) === null || _a === void 0 ? void 0 : _a.type) === transform_1.schema.nodes.table &&
23
23
  isInlineFootnoteChange(step, oldState, newState));
24
24
  }
package/dist/es/assets.js CHANGED
@@ -115,49 +115,3 @@ export const alertIcon = `
115
115
  />
116
116
  </svg>
117
117
  `;
118
- export const deleteIcon = `
119
- <svg
120
- width="13"
121
- height="15"
122
- viewBox="0 0 13 15"
123
- fill="none"
124
- xmlns="http://www.w3.org/2000/svg"
125
- >
126
- <path
127
- fill-rule="evenodd"
128
- clip-rule="evenodd"
129
- d="M2.00001 3C2 3.00135 2 3.00269 2 3.00404V13.004C2 13.5563 2.44772 14.004 3 14.004H10C10.5523 14.004 11 13.5563 11 13.004V3.00404C11 3.00269 11 3.00135 11 3C11.5978 3.34581 12 3.99215 12 4.73244V13.004C12 14.1086 11.1046 15.004 10 15.004H3C1.89543 15.004 1 14.1086 1 13.004V4.73244C1 3.99215 1.4022 3.34581 2.00001 3Z"
130
- fill="#C9C9C9"
131
- />
132
- <path
133
- fill-rule="evenodd"
134
- clip-rule="evenodd"
135
- d="M4.5 0C3.67157 0 3 0.671573 3 1.5V3.5C3 4.32843 3.67157 5 4.5 5H8.5C9.32843 5 10 4.32843 10 3.5V1.5C10 0.671573 9.32843 0 8.5 0H4.5ZM9 1.5C9 1.22386 8.77614 1 8.5 1H4.5C4.22386 1 4 1.22386 4 1.5C4 1.77614 4.22386 2 4.5 2H8.5C8.77614 2 9 1.77614 9 1.5Z"
136
- fill="#C9C9C9"
137
- />
138
- <rect
139
- y="2"
140
- width="13"
141
- height="3"
142
- rx="1.5"
143
- fill="#C9C9C9"
144
- />
145
- <path
146
- fill-rule="evenodd"
147
- clip-rule="evenodd"
148
- d="M8 7.5C8 7.22386 8.22386 7 8.5 7C8.77614 7 9 7.22386 9 7.5V11.5C9 11.7761 8.77614 12 8.5 12C8.22386 12 8 11.7761 8 11.5V7.5Z"
149
- fill="#C9C9C9"
150
- />
151
- <path
152
- fill-rule="evenodd"
153
- clip-rule="evenodd"
154
- d="M4 7.5C4 7.22386 4.22386 7 4.5 7C4.77614 7 5 7.22386 5 7.5V11.5C5 11.7761 4.77614 12 4.5 12C4.22386 12 4 11.7761 4 11.5V7.5Z"
155
- fill="#C9C9C9"
156
- />
157
- <path
158
- fill-rule="evenodd"
159
- clip-rule="evenodd"
160
- d="M11.5 3C11.7761 3 12 3.22386 12 3.5C12 3.77614 11.7761 4 11.5 4L1.5 4C1.22386 4 1 3.77614 1 3.5C1 3.22386 1.22386 3 1.5 3L11.5 3Z"
161
- fill="white"
162
- />
163
- </svg>`;
@@ -64,7 +64,7 @@ export default (props) => {
64
64
  tableEditing(),
65
65
  highlights(props),
66
66
  selected_suggestion_ui(props),
67
- footnotes(props),
67
+ footnotes(),
68
68
  table_footnote(),
69
69
  ];
70
70
  if (props.collabProvider) {
@@ -135,7 +135,7 @@ export class ContextMenu {
135
135
  this.addPopperEventListeners();
136
136
  };
137
137
  this.showEditMenu = (target) => {
138
- var _a, _b;
138
+ var _a;
139
139
  const menu = document.createElement('div');
140
140
  menu.className = 'menu';
141
141
  const $pos = this.resolvePos();
@@ -167,17 +167,11 @@ export class ContextMenu {
167
167
  }));
168
168
  }
169
169
  if (type === schema.nodes.table_element) {
170
- const isInTable = hasParentNodeOfType(schema.nodes.table_element)(this.view.state.selection);
170
+ const isInTable = hasParentNodeOfType(schema.nodes.table)(this.view.state.selection);
171
171
  const tableElementFooter = findChildrenByType(this.node, schema.nodes.table_element_footer);
172
- const generalFootnote = (_a = tableElementFooter[0]) === null || _a === void 0 ? void 0 : _a.node.firstChild;
173
- let isDeletedOrRejected = false;
174
- if (generalFootnote) {
175
- isDeletedOrRejected =
176
- isDeleted(generalFootnote) || isRejectedInsert(generalFootnote);
177
- }
178
172
  const hasGeneralNote = tableElementFooter.length &&
179
- ((_b = tableElementFooter[0].node.firstChild) === null || _b === void 0 ? void 0 : _b.type) === schema.nodes.paragraph;
180
- if (!hasGeneralNote || isDeletedOrRejected) {
173
+ ((_a = tableElementFooter[0].node.firstChild) === null || _a === void 0 ? void 0 : _a.type) === schema.nodes.paragraph;
174
+ if (!hasGeneralNote) {
181
175
  menu.appendChild(this.createMenuSection((section) => {
182
176
  section.appendChild(this.createMenuItem('Add General Note', () => {
183
177
  insertGeneralFootnote(this.node, this.getPos(), this.view, tableElementFooter);
@@ -15,13 +15,11 @@
15
15
  */
16
16
  import { isFootnoteNode, isInlineFootnoteNode, schema, } from '@manuscripts/transform';
17
17
  import { isEqual } from 'lodash';
18
- import { NodeSelection, Plugin, PluginKey, TextSelection, } from 'prosemirror-state';
18
+ import { NodeSelection, Plugin, PluginKey } from 'prosemirror-state';
19
19
  import { hasParentNodeOfType } from 'prosemirror-utils';
20
20
  import { Decoration, DecorationSet } from 'prosemirror-view';
21
- import { alertIcon, deleteIcon } from '../../assets';
22
- import { DeleteFootnoteDialog, } from '../../components/views/DeleteFootnoteDialog';
21
+ import { alertIcon } from '../../assets';
23
22
  import { findParentNodeWithIdValue } from '../../lib/utils';
24
- import ReactSubView from '../../views/ReactSubView';
25
23
  import { placeholderWidget } from '../placeholder';
26
24
  import { findTableInlineFootnoteIds } from './footnotes-utils';
27
25
  export const footnotesKey = new PluginKey('footnotes');
@@ -65,70 +63,7 @@ export const uncitedFootnoteWidget = () => () => {
65
63
  element.innerHTML = alertIcon;
66
64
  return element;
67
65
  };
68
- const getInlineFootnote = (view, id) => {
69
- let inlineFootnote = null;
70
- let footnotePosition = null;
71
- view.state.doc.descendants((node, pos) => {
72
- var _a;
73
- const footnote = node;
74
- if ((_a = footnote.attrs.rids) === null || _a === void 0 ? void 0 : _a.includes(id)) {
75
- inlineFootnote = footnote;
76
- footnotePosition = pos;
77
- return false;
78
- }
79
- });
80
- return { node: inlineFootnote, pos: footnotePosition };
81
- };
82
- const deleteFootnoteWidget = (node, props, footnoteType, footnoteMessage, id) => (view, getPos) => {
83
- const deleteBtn = document.createElement('span');
84
- deleteBtn.className = 'delete-icon';
85
- deleteBtn.innerHTML = deleteIcon;
86
- deleteBtn.addEventListener('click', () => {
87
- const handleDelete = () => {
88
- const tr = view.state.tr;
89
- const pos = getPos();
90
- if (node.type === schema.nodes.table_element_footer) {
91
- let isAllGeneralFootnotes = true;
92
- node.content.forEach((item) => {
93
- if (item.type !== schema.nodes.paragraph) {
94
- isAllGeneralFootnotes = false;
95
- return;
96
- }
97
- });
98
- if (isAllGeneralFootnotes && pos) {
99
- tr.delete(pos, pos + node.nodeSize - 1);
100
- }
101
- else {
102
- node.content.forEach((item) => {
103
- if (item.type === schema.nodes.paragraph && pos) {
104
- tr.delete(pos - 1, pos + item.nodeSize + 1);
105
- }
106
- });
107
- }
108
- }
109
- if (node.type === schema.nodes.footnote && pos) {
110
- const inlineFootnotes = getInlineFootnote(view, id);
111
- tr.setSelection(TextSelection.near(view.state.doc.resolve(0))).delete(pos - 1, pos + node.nodeSize);
112
- if (inlineFootnotes.node) {
113
- const pos = inlineFootnotes.pos;
114
- const nodeSize = inlineFootnotes.node.nodeSize;
115
- if (pos && nodeSize) {
116
- tr.delete(pos, pos + nodeSize);
117
- }
118
- }
119
- }
120
- view.dispatch(tr);
121
- };
122
- const componentProps = {
123
- footnoteType: footnoteType,
124
- footnoteMessage: footnoteMessage,
125
- handleDelete: handleDelete,
126
- };
127
- ReactSubView(Object.assign(Object.assign({}, props), { dispatch: view.dispatch }), DeleteFootnoteDialog, componentProps, node, () => getPos(), view);
128
- });
129
- return deleteBtn;
130
- };
131
- export default (props) => {
66
+ export default () => {
132
67
  return new Plugin({
133
68
  key: footnotesKey,
134
69
  state: {
@@ -161,7 +96,6 @@ export default (props) => {
161
96
  decorations: (state) => {
162
97
  const decorations = [];
163
98
  const isInTableElementFooter = hasParentNodeOfType(schema.nodes.table_element_footer)(state.selection);
164
- const isInTableElement = hasParentNodeOfType(schema.nodes.table_element)(state.selection);
165
99
  if (isInTableElementFooter) {
166
100
  const parent = findParentNodeWithIdValue(state.selection);
167
101
  if (parent) {
@@ -172,7 +106,6 @@ export default (props) => {
172
106
  }
173
107
  const { labels } = footnotesKey.getState(state);
174
108
  let tableInlineFootnoteIds = undefined;
175
- const can = props.getCapabilities();
176
109
  state.doc.descendants((node, pos, parent) => {
177
110
  var _a;
178
111
  if (isFootnoteNode(node)) {
@@ -193,37 +126,6 @@ export default (props) => {
193
126
  decorations.push(Decoration.widget(pos + node.nodeSize - 1, uncitedFootnoteWidget()));
194
127
  }
195
128
  }
196
- if (can.editArticle) {
197
- if (isInTableElement) {
198
- const isGeneralFootnote = node.type === schema.nodes.paragraph;
199
- const isTableFootnote = node.type === schema.nodes.footnote;
200
- const footnote = (() => {
201
- switch (node.type) {
202
- case schema.nodes.footnote:
203
- return {
204
- type: 'table footnote',
205
- message: 'This action will entirely remove the table footnote from the list because it will no longer be used.',
206
- };
207
- default:
208
- return {
209
- type: 'table general note',
210
- message: 'This action will entirely remove the table general note.',
211
- };
212
- }
213
- })();
214
- if (isTableFootnote) {
215
- decorations.push(Decoration.widget(pos + 2, deleteFootnoteWidget(node, props, footnote.type, footnote.message, node.attrs.id), {
216
- key: node.attrs.id,
217
- }));
218
- }
219
- else if (isGeneralFootnote &&
220
- (parent === null || parent === void 0 ? void 0 : parent.type) === schema.nodes.table_element_footer) {
221
- decorations.push(Decoration.widget(pos + 1, deleteFootnoteWidget(parent, props, footnote.type, footnote.message, parent.attrs.id), {
222
- key: parent.attrs.id,
223
- }));
224
- }
225
- }
226
- }
227
129
  if (node.type === schema.nodes.footnotes_element) {
228
130
  if ((parent === null || parent === void 0 ? void 0 : parent.type) === schema.nodes.table_element_footer) {
229
131
  decorations.push(Decoration.node(pos, pos + node.nodeSize, {
@@ -12,11 +12,11 @@ const isInlineFootnoteChange = (step, oldState, newState) => {
12
12
  export default () => {
13
13
  return new Plugin({
14
14
  appendTransaction(transactions, oldState, newState) {
15
- const tableInlineFootnoteChange = transactions.find((tr) => tr.steps.find((s) => {
15
+ const tableInlineFootnoteChange = transactions.find((tr) => tr.steps.find((s, i) => {
16
16
  var _a;
17
17
  if (s instanceof ReplaceStep) {
18
18
  const step = s;
19
- const $pos = oldState.doc.resolve(step.from);
19
+ const $pos = tr.docs[i].resolve(step.from);
20
20
  return (((_a = $pos.node($pos.depth - 2)) === null || _a === void 0 ? void 0 : _a.type) === schema.nodes.table &&
21
21
  isInlineFootnoteChange(step, oldState, newState));
22
22
  }
@@ -17,4 +17,3 @@ export declare const editIcon = "\n <svg\n width=\"14\"\n height=\"14\"\n
17
17
  export declare const commentIcon = "\n<svg\n width=\"20\"\n height=\"15\"\n viewBox=\"0 0 20 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M7.94841 4.18311C7.98238 3.9602 8 3.73191 8 3.49951C8 3.22073 7.97465 2.94787 7.92613 2.68311H13.5C14.8854 2.68311 16.25 3.6425 16.25 5.09977V9.02453L19.1086 12.9949C19.2731 13.2233 19.2958 13.5245 19.1675 13.775C19.0392 14.0255 18.7814 14.1831 18.5 14.1831H5.5C4.11463 14.1831 2.75 13.2237 2.75 11.7664V7.93729C2.9939 7.97821 3.24446 7.99951 3.5 7.99951C3.75553 7.99951 4.00609 7.97821 4.25 7.93729V11.7664C4.25 12.1508 4.67537 12.6831 5.5 12.6831H17.0358L14.8913 9.70467C14.7994 9.57703 14.75 9.42372 14.75 9.26644V5.09977C14.75 4.71538 14.3246 4.18311 13.5 4.18311H7.94841Z\"\n fill=\"#FFBD26\"\n />\n <path\n d=\"M11.5 6.99951H8.5\"\n stroke=\"#FFBD26\"\n stroke-width=\"1.5\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 9.99951H7\"\n stroke=\"#FFBD26\"\n stroke-width=\"1.5\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M3.5 1L3.5 6\"\n stroke=\"#FFBD26\"\n stroke-width=\"1.5\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M6 3.5L1 3.5\"\n stroke=\"#FFBD26\"\n stroke-width=\"1.5\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n";
18
18
  export declare const editAttrsTrackingIcon = "\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 2L14 4L9 9L6 10L7 7L12 2Z\"\n stroke=\"#353535\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M13 10V11.5C13 12.328 12.328 13 11.5 13H4.5C3.672 13 3 12.328 3 11.5V4.5C3 3.672 3.672 3 4.5 3H6\"\n stroke=\"#353535\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n";
19
19
  export declare const alertIcon = "\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M6 12C2.68629 12 1.18852e-06 9.31371 1.47821e-06 6C1.7679e-06 2.68629 2.68629 1.39444e-07 6 4.29138e-07C9.31371 7.18831e-07 12 2.68629 12 6C12 9.31371 9.31371 12 6 12ZM6.74998 2.99996L6.75 6.37462C6.75 6.78819 6.41522 7.12243 6.00166 7.12334C5.58681 7.12426 5.25001 6.78821 5.25001 6.37335L5.25 3.00082C5.25 2.58629 5.58629 2.25037 6.00082 2.25083C6.4147 2.25128 6.74998 2.58607 6.74998 2.99996ZM6.75 8.99263C6.75 9.46884 6.47288 9.75 5.99853 9.75C5.52419 9.75 5.25 9.47179 5.25 8.99558C5.25 8.51937 5.52421 8.25 5.99855 8.25C6.47289 8.25 6.75 8.51642 6.75 8.99263Z\"\n fill=\"#FE8F1F\"\n />\n </svg>\n";
20
- export declare const deleteIcon = "\n <svg \n width=\"13\" \n height=\"15\" \n viewBox=\"0 0 13 15\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path \n fill-rule=\"evenodd\" \n clip-rule=\"evenodd\" \n d=\"M2.00001 3C2 3.00135 2 3.00269 2 3.00404V13.004C2 13.5563 2.44772 14.004 3 14.004H10C10.5523 14.004 11 13.5563 11 13.004V3.00404C11 3.00269 11 3.00135 11 3C11.5978 3.34581 12 3.99215 12 4.73244V13.004C12 14.1086 11.1046 15.004 10 15.004H3C1.89543 15.004 1 14.1086 1 13.004V4.73244C1 3.99215 1.4022 3.34581 2.00001 3Z\" \n fill=\"#C9C9C9\"\n />\n <path \n fill-rule=\"evenodd\" \n clip-rule=\"evenodd\" \n d=\"M4.5 0C3.67157 0 3 0.671573 3 1.5V3.5C3 4.32843 3.67157 5 4.5 5H8.5C9.32843 5 10 4.32843 10 3.5V1.5C10 0.671573 9.32843 0 8.5 0H4.5ZM9 1.5C9 1.22386 8.77614 1 8.5 1H4.5C4.22386 1 4 1.22386 4 1.5C4 1.77614 4.22386 2 4.5 2H8.5C8.77614 2 9 1.77614 9 1.5Z\" \n fill=\"#C9C9C9\"\n />\n <rect \n y=\"2\" \n width=\"13\" \n height=\"3\" \n rx=\"1.5\" \n fill=\"#C9C9C9\"\n />\n <path \n fill-rule=\"evenodd\" \n clip-rule=\"evenodd\" \n d=\"M8 7.5C8 7.22386 8.22386 7 8.5 7C8.77614 7 9 7.22386 9 7.5V11.5C9 11.7761 8.77614 12 8.5 12C8.22386 12 8 11.7761 8 11.5V7.5Z\" \n fill=\"#C9C9C9\"\n />\n <path \n fill-rule=\"evenodd\" \n clip-rule=\"evenodd\" \n d=\"M4 7.5C4 7.22386 4.22386 7 4.5 7C4.77614 7 5 7.22386 5 7.5V11.5C5 11.7761 4.77614 12 4.5 12C4.22386 12 4 11.7761 4 11.5V7.5Z\" \n fill=\"#C9C9C9\"\n />\n <path \n fill-rule=\"evenodd\" \n clip-rule=\"evenodd\" \n d=\"M11.5 3C11.7761 3 12 3.22386 12 3.5C12 3.77614 11.7761 4 11.5 4L1.5 4C1.22386 4 1 3.77614 1 3.5C1 3.22386 1.22386 3 1.5 3L11.5 3Z\" \n fill=\"white\"\n />\n</svg>";
@@ -22,7 +22,7 @@ import { Plugin } from 'prosemirror-state';
22
22
  import { CollabProvider } from '../classes/collabProvider';
23
23
  import { PopperManager } from '../lib/popper';
24
24
  import { CSLProps } from './ManuscriptsEditor';
25
- export interface PluginProps {
25
+ interface PluginProps {
26
26
  getManuscript: () => Manuscript;
27
27
  setComment: (comment?: CommentAnnotation) => void;
28
28
  setSelectedComment: (id?: string) => void;
@@ -15,7 +15,6 @@
15
15
  */
16
16
  import { InlineFootnoteNode, ManuscriptNode } from '@manuscripts/transform';
17
17
  import { Plugin, PluginKey } from 'prosemirror-state';
18
- import { PluginProps } from '../../configs/editor-plugins';
19
18
  interface PluginState {
20
19
  nodes: [InlineFootnoteNode, number][];
21
20
  labels: Map<string, string>;
@@ -23,5 +22,5 @@ interface PluginState {
23
22
  export declare const footnotesKey: PluginKey<PluginState>;
24
23
  export declare const buildPluginState: (doc: ManuscriptNode) => PluginState;
25
24
  export declare const uncitedFootnoteWidget: () => () => HTMLSpanElement;
26
- declare const _default: (props: PluginProps) => Plugin<PluginState>;
25
+ declare const _default: () => Plugin<PluginState>;
27
26
  export default _default;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@manuscripts/body-editor",
3
3
  "description": "Prosemirror components for editing and viewing manuscripts",
4
- "version": "1.7.29-LEAN-3321-1",
4
+ "version": "1.7.30",
5
5
  "repository": "github:Atypon-OpenSource/manuscripts-body-editor",
6
6
  "license": "Apache-2.0",
7
7
  "main": "dist/cjs",
@@ -31,9 +31,9 @@
31
31
  "@manuscripts/assets": "^0.6.4",
32
32
  "@manuscripts/json-schema": "^2.2.7",
33
33
  "@manuscripts/library": "^1.3.6",
34
- "@manuscripts/style-guide": "1.8.4-LEAN-3321-0",
34
+ "@manuscripts/style-guide": "1.8.4",
35
35
  "@manuscripts/track-changes-plugin": "1.7.8",
36
- "@manuscripts/transform": "2.1.10-LEAN-3321",
36
+ "@manuscripts/transform": "^2.1.10",
37
37
  "astrocite-eutils": "^0.16.4",
38
38
  "axios": "^1.6.7",
39
39
  "mathjax-full": "^3.2.2",
@@ -112,4 +112,4 @@
112
112
  "@types/react": "^17.0.2",
113
113
  "prosemirror-tables": "^1.3.5"
114
114
  }
115
- }
115
+ }
package/styles/Editor.css CHANGED
@@ -942,16 +942,13 @@
942
942
  vertical-align: super;
943
943
  font-size: 75%;
944
944
  }
945
- .ProseMirror .deleted.pending.footnote::before, .ProseMirror .deleted.accepted.footnote::before {
946
- text-decoration: line-through;
947
- }
948
945
 
949
946
  .ProseMirror .table-footer {
950
947
  font-size: 14px;
951
948
  padding-top: 8px;
952
949
  }
953
950
 
954
- .ProseMirror .table-footnotes-element:has(> div):not(:first-child)::before {
951
+ .ProseMirror .table-footnotes-element:not(:first-child)::before {
955
952
  content: '';
956
953
  border-bottom: 1px dashed #C9C9C9;
957
954
  display: block;
@@ -961,30 +958,8 @@
961
958
  .ProseMirror .table-footnotes-element {
962
959
  counter-reset: table_footnote;
963
960
  }
964
- .delete-footnote-dialog button:first-child {
965
- width: 96px;
966
- }
967
- .delete-footnote-dialog button:not(:first-child) {
968
- width: 79px;
969
- }
970
- .table-footer .delete-icon {
971
- display: none;
972
- position: absolute;
973
- right: -20px;
974
- top: -13px;
975
- cursor: pointer;
976
- z-index: 1;
977
- }
978
- .table-footer .delete-icon:hover svg path {
979
- fill: #353535;
980
- }
981
- .ProseMirror .table-footer .table-footnotes-element > div {
982
- position: relative;
983
- }
984
- .table-footnotes-element .delete-icon {
985
- display: none !important;
986
- }
987
- .ProseMirror .table-footer .table-footnotes-element > div:not(:has(.unctied-table-footnote)) p::before {
961
+
962
+ .ProseMirror .table-footnotes-element > div:not(:has(.unctied-table-footnote)) p::before {
988
963
  counter-increment: table_footnote;
989
964
  content: counter(table_footnote);
990
965
  display: inline-block;
@@ -1004,14 +979,9 @@
1004
979
  background-color: #f2fbfc;
1005
980
  padding: 4px;
1006
981
  }
1007
-
1008
- .ProseMirror .table-footer .footnote-selected .delete-icon ,.ProseMirror .table-footer .footnote-selected .deleted.rejected .delete-icon {
1009
- display: block;
1010
- }
1011
982
  .table-footer > div > p {
1012
983
  padding-bottom: 10px;
1013
984
  }
1014
-
1015
985
  .ProseMirror .table-footnotes-element .footnote-selected {
1016
986
  border: 1px solid #bce7f6;
1017
987
  }
@@ -1019,16 +989,8 @@
1019
989
  border-left: 1px solid #bce7f6;
1020
990
  border-right: 1px solid #bce7f6;
1021
991
  }
1022
- .table-footer > div:has(> p.footnote-selected) > p:first-child .delete-icon {
1023
- z-index: 2;
1024
- display: block;
1025
- }
1026
992
  .table-footer > div:has(> p.footnote-selected) > p:first-child {
1027
993
  border-top: 1px solid #bce7f6;
1028
- position: relative;
1029
- }
1030
- .table-footer > div:has(> p.footnote-selected) > p:last-of-type {
1031
- border-bottom: 1px solid #bce7f6;
1032
994
  }
1033
995
  .table-footer > div:has(> p.footnote-selected) > p:last-child {
1034
996
  border-bottom: 1px solid #bce7f6;
@@ -1070,4 +1032,4 @@
1070
1032
  }
1071
1033
  .highlight {
1072
1034
  background-color: #ffeebf !important;
1073
- }
1035
+ }
@@ -1,45 +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
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.DeleteFootnoteDialog = void 0;
27
- const style_guide_1 = require("@manuscripts/style-guide");
28
- const react_1 = __importStar(require("react"));
29
- const DeleteFootnoteDialog = ({ footnoteType, footnoteMessage, handleDelete, }) => {
30
- const [isOpen, setOpen] = (0, react_1.useState)(true);
31
- return (react_1.default.createElement(style_guide_1.Dialog, { className: "delete-footnote-dialog", isOpen: isOpen, actions: {
32
- primary: {
33
- action: () => {
34
- setOpen(false);
35
- handleDelete();
36
- },
37
- title: 'Delete',
38
- },
39
- secondary: {
40
- action: () => setOpen(false),
41
- title: 'Cancel',
42
- },
43
- }, category: style_guide_1.Category.confirmation, header: `Delete ${footnoteType}`, message: `${footnoteMessage}` }));
44
- };
45
- exports.DeleteFootnoteDialog = DeleteFootnoteDialog;
@@ -1,18 +0,0 @@
1
- import { Category, Dialog } from '@manuscripts/style-guide';
2
- import React, { useState } from 'react';
3
- export const DeleteFootnoteDialog = ({ footnoteType, footnoteMessage, handleDelete, }) => {
4
- const [isOpen, setOpen] = useState(true);
5
- return (React.createElement(Dialog, { className: "delete-footnote-dialog", isOpen: isOpen, actions: {
6
- primary: {
7
- action: () => {
8
- setOpen(false);
9
- handleDelete();
10
- },
11
- title: 'Delete',
12
- },
13
- secondary: {
14
- action: () => setOpen(false),
15
- title: 'Cancel',
16
- },
17
- }, category: Category.confirmation, header: `Delete ${footnoteType}`, message: `${footnoteMessage}` }));
18
- };
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- export interface DeleteFootnoteDialogProps {
3
- footnoteType: string;
4
- footnoteMessage: string;
5
- handleDelete: () => void;
6
- }
7
- export declare const DeleteFootnoteDialog: React.FC<DeleteFootnoteDialogProps>;