@manuscripts/body-editor 2.3.2 → 2.3.3-LEAN-4053.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.
Files changed (79) hide show
  1. package/dist/cjs/commands.js +93 -181
  2. package/dist/cjs/components/views/DeleteFootnoteDialog.js +2 -2
  3. package/dist/cjs/components/views/FootnotesSelector.js +17 -18
  4. package/dist/cjs/configs/editor-plugins.js +0 -2
  5. package/dist/cjs/configs/editor-views.js +6 -4
  6. package/dist/cjs/icons.js +8 -0
  7. package/dist/cjs/index.js +1 -0
  8. package/dist/cjs/lib/context-menu.js +13 -91
  9. package/dist/cjs/lib/doc.js +27 -4
  10. package/dist/cjs/lib/footnotes.js +31 -122
  11. package/dist/cjs/menus.js +1 -1
  12. package/dist/cjs/plugins/footnotes.js +177 -0
  13. package/dist/cjs/plugins/placeholder.js +19 -12
  14. package/dist/cjs/testing/default-editor-data.js +1 -1
  15. package/dist/cjs/testing/setup-editor.js +1 -0
  16. package/dist/cjs/versions.js +1 -1
  17. package/dist/cjs/views/editable_block.js +1 -1
  18. package/dist/cjs/views/footnote.js +85 -15
  19. package/dist/cjs/views/footnotes_element.js +8 -2
  20. package/dist/cjs/views/general_table_footnote.js +78 -0
  21. package/dist/cjs/views/inline_footnote.js +78 -124
  22. package/dist/cjs/views/table_element_footer.js +2 -5
  23. package/dist/es/commands.js +92 -179
  24. package/dist/es/components/views/DeleteFootnoteDialog.js +2 -2
  25. package/dist/es/components/views/FootnotesSelector.js +17 -18
  26. package/dist/es/configs/editor-plugins.js +0 -2
  27. package/dist/es/configs/editor-views.js +4 -2
  28. package/dist/es/icons.js +5 -0
  29. package/dist/es/index.js +1 -0
  30. package/dist/es/lib/context-menu.js +16 -91
  31. package/dist/es/lib/doc.js +25 -4
  32. package/dist/es/lib/footnotes.js +28 -116
  33. package/dist/es/menus.js +1 -1
  34. package/dist/es/plugins/footnotes.js +174 -0
  35. package/dist/es/plugins/placeholder.js +20 -11
  36. package/dist/es/testing/default-editor-data.js +1 -1
  37. package/dist/es/testing/setup-editor.js +1 -0
  38. package/dist/es/versions.js +1 -1
  39. package/dist/es/views/editable_block.js +1 -1
  40. package/dist/es/views/footnote.js +86 -15
  41. package/dist/es/views/footnotes_element.js +8 -2
  42. package/dist/es/views/general_table_footnote.js +71 -0
  43. package/dist/es/views/inline_footnote.js +82 -128
  44. package/dist/es/views/table_element_footer.js +4 -5
  45. package/dist/types/commands.d.ts +9 -13
  46. package/dist/types/components/views/DeleteFootnoteDialog.d.ts +0 -2
  47. package/dist/types/components/views/FootnotesSelector.d.ts +7 -6
  48. package/dist/types/configs/editor-views.d.ts +22 -35
  49. package/dist/types/icons.d.ts +2 -0
  50. package/dist/types/index.d.ts +1 -0
  51. package/dist/types/lib/context-menu.d.ts +1 -3
  52. package/dist/types/lib/doc.d.ts +2 -0
  53. package/dist/types/lib/footnotes.d.ts +8 -19
  54. package/dist/types/plugins/{footnotes/index.d.ts → footnotes.d.ts} +16 -10
  55. package/dist/types/plugins/placeholder.d.ts +0 -2
  56. package/dist/types/versions.d.ts +1 -1
  57. package/dist/types/views/footnote.d.ts +12 -6
  58. package/dist/types/views/footnotes_element.d.ts +1 -0
  59. package/dist/types/views/{table_element_footer_editable.d.ts → general_table_footnote.d.ts} +10 -2
  60. package/dist/types/views/inline_footnote.d.ts +8 -14
  61. package/dist/types/views/table_element_footer.d.ts +2 -2
  62. package/package.json +2 -2
  63. package/styles/Editor.css +33 -64
  64. package/dist/cjs/plugins/footnotes/index.js +0 -215
  65. package/dist/cjs/plugins/footnotes/widgets.js +0 -136
  66. package/dist/cjs/plugins/table-footnote.js +0 -46
  67. package/dist/cjs/views/footnote_editable.js +0 -21
  68. package/dist/cjs/views/footnotes_element_editable.js +0 -22
  69. package/dist/cjs/views/table_element_footer_editable.js +0 -20
  70. package/dist/es/plugins/footnotes/index.js +0 -211
  71. package/dist/es/plugins/footnotes/widgets.js +0 -127
  72. package/dist/es/plugins/table-footnote.js +0 -44
  73. package/dist/es/views/footnote_editable.js +0 -19
  74. package/dist/es/views/footnotes_element_editable.js +0 -20
  75. package/dist/es/views/table_element_footer_editable.js +0 -18
  76. package/dist/types/plugins/footnotes/widgets.d.ts +0 -22
  77. package/dist/types/plugins/table-footnote.d.ts +0 -3
  78. package/dist/types/views/footnote_editable.d.ts +0 -51
  79. package/dist/types/views/footnotes_element_editable.d.ts +0 -51
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.autoComplete = exports.mergeCellsWithSpace = exports.addColumns = exports.addRows = exports.insertTableFootnote = exports.addInlineComment = exports.addNodeComment = exports.createAndFillTableElement = exports.selectAllIsolating = exports.ignoreAtomBlockNodeForward = exports.isAtEndOfTextBlock = exports.ignoreMetaNodeBackspaceCommand = exports.ignoreAtomBlockNodeBackward = exports.isTextSelection = exports.isAtStartOfTextBlock = exports.insertTOCSection = exports.insertBibliographySection = exports.insertList = exports.insertKeywords = exports.insertContributors = exports.insertAbstract = exports.insertBackMatterSection = exports.insertSection = exports.insertGraphicalAbstract = exports.insertInlineFootnote = exports.insertFootnote = exports.createFootnote = exports.insertInlineEquation = exports.insertCrossReference = exports.insertInlineCitation = exports.insertLink = exports.insertSectionLabel = exports.findPosBeforeFirstSubsection = exports.insertBreak = exports.deleteBlock = exports.insertBlock = exports.insertSupplement = exports.insertTable = exports.insertFigure = exports.insertGeneralFootnote = exports.undoFootnoteDelete = exports.createBlock = exports.createSelection = exports.canInsert = exports.blockActive = exports.isNodeSelection = exports.markActive = exports.addToStart = void 0;
18
+ exports.autoComplete = exports.mergeCellsWithSpace = exports.addColumns = exports.addRows = exports.addInlineComment = exports.addNodeComment = exports.createAndFillTableElement = exports.selectAllIsolating = exports.ignoreAtomBlockNodeForward = exports.isAtEndOfTextBlock = exports.ignoreMetaNodeBackspaceCommand = exports.ignoreAtomBlockNodeBackward = exports.isTextSelection = exports.isAtStartOfTextBlock = exports.insertTOCSection = exports.insertBibliographySection = exports.insertList = exports.insertKeywords = exports.insertContributors = exports.insertAbstract = exports.insertBackMatterSection = exports.insertSection = exports.insertGraphicalAbstract = exports.insertInlineFootnote = exports.insertFootnotesElement = exports.insertTableElementFooter = exports.insertInlineEquation = exports.insertCrossReference = exports.insertInlineCitation = exports.insertLink = exports.insertSectionLabel = exports.findPosBeforeFirstSubsection = exports.insertBreak = exports.deleteBlock = exports.insertBlock = exports.insertSupplement = exports.insertTable = exports.insertFigure = exports.insertGeneralTableFootnote = exports.insertInlineTableFootnote = exports.createBlock = exports.createSelection = exports.canInsert = exports.blockActive = exports.isNodeSelection = exports.markActive = exports.addToStart = void 0;
19
19
  const json_schema_1 = require("@manuscripts/json-schema");
20
20
  const track_changes_plugin_1 = require("@manuscripts/track-changes-plugin");
21
21
  const transform_1 = require("@manuscripts/transform");
@@ -34,7 +34,6 @@ const track_changes_utils_1 = require("./lib/track-changes-utils");
34
34
  const utils_1 = require("./lib/utils");
35
35
  const comments_2 = require("./plugins/comments");
36
36
  const editor_props_1 = require("./plugins/editor-props");
37
- const footnotes_2 = require("./plugins/footnotes");
38
37
  const autocompletion_1 = require("./plugins/section_title/autocompletion");
39
38
  const addToStart = (state, dispatch) => {
40
39
  const { selection } = state;
@@ -160,48 +159,40 @@ const createBlock = (nodeType, position, state, dispatch, attrs) => {
160
159
  }
161
160
  };
162
161
  exports.createBlock = createBlock;
163
- const undoFootnoteDelete = (tr, footnote, position) => {
164
- const updatedAttrs = Object.assign(Object.assign({}, footnote.node.attrs), { dataTracked: null });
165
- tr.setNodeMarkup(position, undefined, updatedAttrs, footnote.node.marks);
166
- };
167
- exports.undoFootnoteDelete = undoFootnoteDelete;
168
- const insertGeneralFootnote = (tableElementNode, position, view, tableElementFooter) => {
169
- const { state, dispatch } = view;
170
- const paragraph = state.schema.nodes.paragraph.create({
171
- placeholder: 'Add general note here',
172
- });
173
- const generalNote = state.schema.nodes.general_table_footnote.create({}, [
174
- paragraph,
175
- ]);
176
- const tableColGroup = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.table_colgroup)[0];
177
- const table = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.table)[0];
178
- const tr = state.tr;
179
- const pos = (tableElementFooter === null || tableElementFooter === void 0 ? void 0 : tableElementFooter.length)
180
- ? position + tableElementFooter[0].pos + 2
181
- : position +
182
- (!tableColGroup
183
- ? table.pos + table.node.nodeSize
184
- : tableColGroup.pos + tableColGroup.node.nodeSize);
185
- if (tableElementFooter === null || tableElementFooter === void 0 ? void 0 : tableElementFooter.length) {
186
- if ((0, track_changes_utils_1.isDeleted)(tableElementFooter[0].node)) {
187
- const tableElementFooterPos = tr.mapping.map(position + tableElementFooter[0].pos + 1);
188
- (0, exports.undoFootnoteDelete)(tr, tableElementFooter[0], tableElementFooterPos);
189
- }
190
- tr.insert(pos, generalNote);
162
+ const insertInlineTableFootnote = (state, dispatch) => {
163
+ const $pos = state.selection.$to;
164
+ const table = (0, prosemirror_utils_1.findParentNodeOfTypeClosestToPos)($pos, transform_1.schema.nodes.table);
165
+ if (!table) {
166
+ return false;
191
167
  }
192
- else {
193
- const tableElementFooter = transform_1.schema.nodes.table_element_footer.create({
194
- id: (0, transform_1.generateNodeID)(transform_1.schema.nodes.table_element_footer),
195
- }, [generalNote]);
196
- tr.insert(pos, tableElementFooter);
168
+ if (!dispatch) {
169
+ return true;
197
170
  }
198
- if (dispatch && pos) {
199
- const selection = (0, exports.createSelection)(state.schema.nodes.paragraph, pos, tr.doc);
200
- view === null || view === void 0 ? void 0 : view.focus();
201
- dispatch(tr.setSelection(selection).scrollIntoView());
171
+ return (0, exports.insertInlineFootnote)(state, dispatch);
172
+ };
173
+ exports.insertInlineTableFootnote = insertInlineTableFootnote;
174
+ const insertGeneralTableFootnote = (state, dispatch) => {
175
+ const $pos = state.selection.$to;
176
+ const container = (0, prosemirror_utils_1.findParentNodeOfTypeClosestToPos)($pos, transform_1.schema.nodes.table_element);
177
+ const existing = (0, prosemirror_utils_1.findChildrenByType)(container.node, transform_1.schema.nodes.general_table_footnote);
178
+ if (existing) {
179
+ return false;
180
+ }
181
+ if (!dispatch) {
182
+ return true;
202
183
  }
184
+ const tr = state.tr;
185
+ const footer = (0, exports.insertTableElementFooter)(tr, [container.node, container.pos]);
186
+ const pos = footer.pos + 1;
187
+ const node = transform_1.schema.nodes.general_table_footnote.create({}, [
188
+ transform_1.schema.nodes.paragraph.create(),
189
+ ]);
190
+ tr.insert(pos, node);
191
+ const selection = prosemirror_state_1.TextSelection.create(tr.doc, pos + 1);
192
+ tr.setSelection(selection).scrollIntoView();
193
+ dispatch(tr);
203
194
  };
204
- exports.insertGeneralFootnote = insertGeneralFootnote;
195
+ exports.insertGeneralTableFootnote = insertGeneralTableFootnote;
205
196
  const insertFigure = (file, state, dispatch) => {
206
197
  const position = findBlockInsertPosition(state);
207
198
  if (position === null || !dispatch) {
@@ -402,81 +393,72 @@ const insertInlineEquation = (state, dispatch) => {
402
393
  return true;
403
394
  };
404
395
  exports.insertInlineEquation = insertInlineEquation;
405
- const createFootnote = (state, kind) => {
406
- return transform_1.schema.nodes.footnote.createAndFill({
407
- id: (0, transform_1.generateNodeID)(transform_1.schema.nodes.footnote),
408
- kind,
409
- });
396
+ const insertTableElementFooter = (tr, table) => {
397
+ const footer = (0, prosemirror_utils_1.findChildrenByType)(table[0], transform_1.schema.nodes.table_element_footer)[0];
398
+ if (footer) {
399
+ const pos = tr.mapping.map(table[1] + footer.pos + 1);
400
+ if ((0, track_changes_utils_1.isDeleted)(footer.node)) {
401
+ reinstateNode(tr, footer.node, pos);
402
+ }
403
+ return {
404
+ node: footer.node,
405
+ pos,
406
+ };
407
+ }
408
+ const pos = tr.mapping.map(table[1] + table[0].nodeSize - 2);
409
+ const node = transform_1.schema.nodes.table_element_footer.create();
410
+ tr.insert(pos, node);
411
+ return {
412
+ node,
413
+ pos,
414
+ };
410
415
  };
411
- exports.createFootnote = createFootnote;
412
- const insertFootnote = (state, tr, footnote) => {
413
- const footnotesSection = (0, prosemirror_utils_1.findChildrenByType)(tr.doc, transform_1.schema.nodes.footnotes_section)[0];
414
- let selectionPos = 0;
415
- if (!footnotesSection) {
416
- const section = state.schema.nodes.footnotes_section.create({}, [
417
- state.schema.nodes.section_title.create({}, state.schema.text('Footnotes')),
418
- state.schema.nodes.footnotes_element.create({}, footnote),
419
- ]);
420
- const backmatter = (0, prosemirror_utils_1.findChildrenByType)(tr.doc, transform_1.schema.nodes.backmatter)[0];
421
- const sectionPos = backmatter.pos + 1;
422
- tr.insert(sectionPos, section);
423
- let footnotePos = 0;
424
- section.descendants((n, pos) => {
425
- if ((0, transform_1.isFootnoteNode)(n)) {
426
- footnotePos = pos;
427
- n.descendants((childNode, childPos) => {
428
- if ((0, transform_1.isParagraphNode)(childNode)) {
429
- footnotePos += childPos;
430
- }
431
- });
432
- }
433
- });
434
- selectionPos = sectionPos + footnotePos;
416
+ exports.insertTableElementFooter = insertTableElementFooter;
417
+ const insertFootnotesElement = (tr, container) => {
418
+ let pos;
419
+ if ((0, transform_1.isTableElementNode)(container[0])) {
420
+ const footer = (0, exports.insertTableElementFooter)(tr, container);
421
+ pos = footer.pos + footer.node.nodeSize - 1;
435
422
  }
436
423
  else {
437
- const footnoteElement = (0, prosemirror_utils_1.findChildrenByType)(footnotesSection.node, transform_1.schema.nodes.footnotes_element).pop();
438
- if (footnoteElement) {
439
- if ((0, track_changes_utils_1.isDeleted)(footnoteElement.node)) {
440
- const footnoteElementPos = footnotesSection.pos + footnoteElement.pos + 1;
441
- (0, exports.undoFootnoteDelete)(tr, footnoteElement, footnoteElementPos);
442
- const updatedAttrs = Object.assign(Object.assign({}, footnoteElement.node.attrs), { dataTracked: null });
443
- tr.setNodeMarkup(footnoteElementPos, undefined, updatedAttrs, footnoteElement.node.marks);
444
- }
445
- const pos = footnotesSection.pos +
446
- footnoteElement.pos +
447
- footnoteElement.node.nodeSize -
448
- 1;
449
- tr.insert(pos, footnote);
450
- selectionPos = pos + 2;
451
- }
452
- else {
453
- const footnoteElement = transform_1.schema.nodes.footnotes_element.create({}, footnote);
454
- const pos = footnotesSection.pos + footnotesSection.node.nodeSize - 1;
455
- tr.insert(pos, footnoteElement);
456
- selectionPos = pos + 2;
457
- }
424
+ const section = (0, doc_1.insertFootnotesSection)(tr);
425
+ pos = section.pos + section.node.nodeSize - 1;
458
426
  }
459
- if (selectionPos) {
460
- const selection = prosemirror_state_1.TextSelection.near(tr.doc.resolve(selectionPos));
461
- tr.setSelection(selection).scrollIntoView();
462
- }
463
- return tr;
427
+ const node = transform_1.schema.nodes.footnotes_element.create();
428
+ tr.insert(pos, node);
429
+ return [node, pos];
464
430
  };
465
- exports.insertFootnote = insertFootnote;
466
- const insertInlineFootnote = (kind) => (state, dispatch) => {
467
- const fnState = footnotes_2.footnotesKey.getState(state);
468
- const hasUnusedNodes = fnState && fnState.unusedFootnotes.size > 0;
469
- const footnote = !hasUnusedNodes
470
- ? (0, exports.createFootnote)(state, kind)
471
- : null;
472
- const insertedAt = state.selection.to;
473
- let tr = state.tr;
474
- const node = state.schema.nodes.inline_footnote.create({
431
+ exports.insertFootnotesElement = insertFootnotesElement;
432
+ const insertInlineFootnote = (state, dispatch) => {
433
+ const pos = state.selection.to;
434
+ const tr = state.tr;
435
+ const container = (0, footnotes_1.findFootnotesContainerNode)(state.doc, pos);
436
+ const fn = (0, footnotes_1.getFootnotesElementState)(state, container.node.attrs.id);
437
+ const hasUnusedFootnotes = fn && fn.unusedFootnoteIDs.size > 0;
438
+ const footnote = !hasUnusedFootnotes && (0, footnotes_1.createFootnote)();
439
+ const node = transform_1.schema.nodes.inline_footnote.create({
475
440
  rids: footnote ? [footnote.attrs.id] : [],
476
441
  });
477
- tr.insert(insertedAt, node);
442
+ tr.insert(pos, node);
478
443
  if (footnote) {
479
- tr = (0, exports.insertFootnote)(state, tr, footnote);
444
+ let element;
445
+ if (fn) {
446
+ element = [fn.element[0], tr.mapping.map(fn.element[1])];
447
+ }
448
+ else {
449
+ element = (0, exports.insertFootnotesElement)(tr, [container.node, container.pos]);
450
+ }
451
+ if ((0, track_changes_utils_1.isDeleted)(element[0])) {
452
+ reinstateNode(tr, element[0], element[1]);
453
+ }
454
+ const fnPos = element[1] + element[0].nodeSize - 1;
455
+ tr.insert(fnPos, footnote);
456
+ const selection = prosemirror_state_1.TextSelection.create(tr.doc, fnPos + 2);
457
+ tr.setSelection(selection).scrollIntoView();
458
+ }
459
+ else {
460
+ const selection = prosemirror_state_1.NodeSelection.create(tr.doc, pos);
461
+ tr.setSelection(selection).scrollIntoView();
480
462
  }
481
463
  if (dispatch) {
482
464
  dispatch(tr);
@@ -484,6 +466,10 @@ const insertInlineFootnote = (kind) => (state, dispatch) => {
484
466
  return true;
485
467
  };
486
468
  exports.insertInlineFootnote = insertInlineFootnote;
469
+ const reinstateNode = (tr, node, pos) => {
470
+ const attrs = Object.assign(Object.assign({}, node.attrs), { dataTracked: null });
471
+ tr.setNodeMarkup(pos, null, attrs);
472
+ };
487
473
  const insertGraphicalAbstract = (state, dispatch, view) => {
488
474
  if ((0, utils_1.getChildOfType)(state.doc, transform_1.schema.nodes.graphical_abstract_section, true)) {
489
475
  return false;
@@ -1018,80 +1004,6 @@ const addInlineComment = (state, dispatch) => {
1018
1004
  return false;
1019
1005
  };
1020
1006
  exports.addInlineComment = addInlineComment;
1021
- const insertTableFootnote = (tableElementNode, position, view, inlineFootnote) => {
1022
- const { state, dispatch } = view;
1023
- const tr = state.tr;
1024
- const footnote = transform_1.schema.nodes.footnote.createAndFill({
1025
- id: (0, transform_1.generateNodeID)(transform_1.schema.nodes.footnote),
1026
- kind: 'footnote',
1027
- });
1028
- const insertedAt = state.selection.to;
1029
- let footnoteIndex;
1030
- if (inlineFootnote) {
1031
- const contents = inlineFootnote.node.attrs.contents.split(',').map(Number);
1032
- footnoteIndex = Math.max(...contents) + 1;
1033
- tr.setNodeMarkup(inlineFootnote.pos, undefined, {
1034
- rids: [...inlineFootnote.node.attrs.rids, footnote.attrs.id],
1035
- contents: inlineFootnote.node.attrs.contents + ',' + footnoteIndex,
1036
- });
1037
- }
1038
- else {
1039
- const inlineFootnotes = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.inline_footnote);
1040
- footnoteIndex =
1041
- inlineFootnotes.filter(({ pos }) => position + pos <= insertedAt).length +
1042
- 1;
1043
- const inlineFootnoteNode = state.schema.nodes.inline_footnote.create({
1044
- rids: [footnote.attrs.id],
1045
- contents: footnoteIndex === -1 ? inlineFootnotes.length : footnoteIndex,
1046
- });
1047
- tr.insert(insertedAt, inlineFootnoteNode);
1048
- }
1049
- let insertionPos = position;
1050
- const footnotesElement = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.footnotes_element).pop();
1051
- if (footnotesElement) {
1052
- if ((0, track_changes_utils_1.isDeleted)(footnotesElement.node)) {
1053
- const footnotesElementPos = tr.mapping.map(position + footnotesElement.pos + 1);
1054
- (0, exports.undoFootnoteDelete)(tr, footnotesElement, footnotesElementPos);
1055
- }
1056
- const footnotePos = (0, footnotes_1.getNewFootnotePos)(footnotesElement, footnoteIndex);
1057
- insertionPos = tr.mapping.map(position + footnotePos);
1058
- tr.insert(insertionPos, footnote);
1059
- }
1060
- else {
1061
- const footnoteElement = state.schema.nodes.footnotes_element.create({}, footnote);
1062
- const tableElementFooter = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.table_element_footer)[0];
1063
- if (tableElementFooter) {
1064
- if ((0, track_changes_utils_1.isDeleted)(tableElementFooter.node)) {
1065
- const tableElementFooterPos = tr.mapping.map(position + tableElementFooter.pos + 1);
1066
- (0, exports.undoFootnoteDelete)(tr, tableElementFooter, tableElementFooterPos);
1067
- }
1068
- const pos = tableElementFooter.pos;
1069
- insertionPos = position + pos + tableElementFooter.node.nodeSize;
1070
- tr.insert(tr.mapping.map(insertionPos), footnoteElement);
1071
- }
1072
- else {
1073
- const tableElementFooter = transform_1.schema.nodes.table_element_footer.create({
1074
- id: (0, transform_1.generateNodeID)(transform_1.schema.nodes.table_element_footer),
1075
- }, [footnoteElement]);
1076
- const tableColGroup = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.table_colgroup)[0];
1077
- const table = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.table)[0];
1078
- if (tableColGroup) {
1079
- insertionPos =
1080
- position + tableColGroup.pos + tableColGroup.node.nodeSize;
1081
- tr.insert(tr.mapping.map(insertionPos), tableElementFooter);
1082
- }
1083
- else {
1084
- insertionPos = position + table.pos + table.node.nodeSize;
1085
- tr.insert(tr.mapping.map(insertionPos), tableElementFooter);
1086
- }
1087
- }
1088
- }
1089
- dispatch(tr);
1090
- const textSelection = prosemirror_state_1.TextSelection.near(view.state.tr.doc.resolve(insertionPos + 1));
1091
- view.focus();
1092
- dispatch(view.state.tr.setSelection(textSelection).scrollIntoView());
1093
- };
1094
- exports.insertTableFootnote = insertTableFootnote;
1095
1007
  const addRows = (direction) => (state, dispatch) => {
1096
1008
  if (dispatch) {
1097
1009
  const { tr } = state;
@@ -26,7 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.DeleteFootnoteDialog = void 0;
27
27
  const style_guide_1 = require("@manuscripts/style-guide");
28
28
  const react_1 = __importStar(require("react"));
29
- const DeleteFootnoteDialog = ({ footnoteType, footnoteMessage, handleDelete, }) => {
29
+ const DeleteFootnoteDialog = ({ handleDelete, }) => {
30
30
  const [isOpen, setOpen] = (0, react_1.useState)(true);
31
31
  return (react_1.default.createElement(style_guide_1.Dialog, { className: "delete-footnote-dialog", isOpen: isOpen, actions: {
32
32
  primary: {
@@ -40,6 +40,6 @@ const DeleteFootnoteDialog = ({ footnoteType, footnoteMessage, handleDelete, })
40
40
  action: () => setOpen(false),
41
41
  title: 'Cancel',
42
42
  },
43
- }, category: style_guide_1.Category.confirmation, header: `Delete ${footnoteType}`, message: `${footnoteMessage}` }));
43
+ }, category: style_guide_1.Category.confirmation, header: `Delete footnote`, message: `This action will entirely remove the footnote from the list because it will no longer be used.` }));
44
44
  };
45
45
  exports.DeleteFootnoteDialog = DeleteFootnoteDialog;
@@ -76,12 +76,12 @@ const AddNewFootnote = (0, styled_components_1.default)(style_guide_1.ButtonGrou
76
76
  }
77
77
  }
78
78
  `;
79
- const FootnotesSelector = ({ notes, inlineFootnote, onAdd, onInsert, onCancel, addNewLabel }) => {
79
+ const FootnotesSelector = ({ footnotes, inlineFootnote, labels, onAdd, onInsert, onCancel, addNewLabel, }) => {
80
80
  let selectedNotesMap;
81
81
  if (inlineFootnote) {
82
82
  const rids = inlineFootnote.attrs.rids;
83
- const selectedNotes = notes.filter(({ node }) => rids.includes(node.attrs.id));
84
- selectedNotesMap = new Map(selectedNotes.map(({ node }) => [node.attrs.id, node]));
83
+ const selectedNotes = footnotes.filter((node) => rids.includes(node.attrs.id));
84
+ selectedNotesMap = new Map(selectedNotes.map((node) => [node.attrs.id, node]));
85
85
  }
86
86
  const [selections, setSelections] = (0, react_1.useState)(new Map(selectedNotesMap));
87
87
  const toggleSelection = (item) => {
@@ -99,11 +99,11 @@ const FootnotesSelector = ({ notes, inlineFootnote, onAdd, onInsert, onCancel, a
99
99
  return selections.has(item.attrs.id);
100
100
  };
101
101
  const handleClick = () => {
102
- return onInsert(notes.filter(({ node }) => selections.has(node.attrs.id)));
102
+ return onInsert(footnotes.filter((node) => selections.has(node.attrs.id)));
103
103
  };
104
104
  return (react_1.default.createElement(Container, null,
105
105
  react_1.default.createElement(NotesContainer, null,
106
- react_1.default.createElement(FootnotesList, { notes: notes, inlineFootnote: inlineFootnote, isSelected: isSelected, onSelect: toggleSelection })),
106
+ react_1.default.createElement(FootnotesList, { footnotes: footnotes, inlineFootnote: inlineFootnote, labels: labels, isSelected: isSelected, onSelect: toggleSelection })),
107
107
  react_1.default.createElement(Actions, null,
108
108
  react_1.default.createElement(AddNewFootnote, null,
109
109
  react_1.default.createElement(style_guide_1.IconTextButton, { onClick: onAdd },
@@ -114,29 +114,28 @@ const FootnotesSelector = ({ notes, inlineFootnote, onAdd, onInsert, onCancel, a
114
114
  react_1.default.createElement(style_guide_1.PrimaryButton, { onClick: handleClick, disabled: selections.size === 0 && !inlineFootnote }, inlineFootnote ? 'Update' : 'Insert')))));
115
115
  };
116
116
  exports.FootnotesSelector = FootnotesSelector;
117
- const FootnotesList = ({ notes, isSelected, onSelect, inlineFootnote }) => {
117
+ const FootnotesList = ({ footnotes, inlineFootnote, labels, isSelected, onSelect }) => {
118
+ const rids = inlineFootnote === null || inlineFootnote === void 0 ? void 0 : inlineFootnote.attrs.rids;
118
119
  const selectedNotes = [];
119
120
  const remainingNotes = [];
120
- notes.forEach((note) => {
121
- const isNoteSelected = inlineFootnote && inlineFootnote.attrs.rids.includes(note.node.attrs.id);
121
+ footnotes.forEach((footnote) => {
122
+ const isNoteSelected = rids === null || rids === void 0 ? void 0 : rids.includes(footnote.attrs.id);
122
123
  if (isNoteSelected) {
123
- selectedNotes.push(note);
124
+ selectedNotes.push(footnote);
124
125
  }
125
126
  else {
126
- remainingNotes.push(note);
127
+ remainingNotes.push(footnote);
127
128
  }
128
129
  });
129
130
  return (react_1.default.createElement(NotesListContainer, null,
130
- selectedNotes.map((note) => (react_1.default.createElement(FootnoteItem, { key: note.node.attrs.id, note: note, isSelected: isSelected, onSelect: onSelect }))),
131
+ selectedNotes.map((footnote) => (react_1.default.createElement(FootnoteItem, { key: footnote.attrs.id, footnote: footnote, label: labels.get(footnote.attrs.id), isSelected: isSelected, onSelect: onSelect }))),
131
132
  selectedNotes.length > 0 && remainingNotes.length > 0 && react_1.default.createElement(Separator, null),
132
- remainingNotes.map((note) => (react_1.default.createElement(FootnoteItem, { key: note.node.attrs.id, note: note, isSelected: isSelected, onSelect: onSelect })))));
133
+ remainingNotes.map((footnote) => (react_1.default.createElement(FootnoteItem, { key: footnote.attrs.id, footnote: footnote, label: labels.get(footnote.attrs.id), isSelected: isSelected, onSelect: onSelect })))));
133
134
  };
134
- const FootnoteItem = ({ note, isSelected, onSelect }) => {
135
- var _a;
136
- const { node, index } = note;
137
- return (react_1.default.createElement(FootnoteItemContainer, { onClick: () => onSelect(node) },
138
- react_1.default.createElement(StatusIcon, null, isSelected(node) ? (react_1.default.createElement(style_guide_1.AddedIcon, { "data-cy": 'plus-icon-ok' })) : (react_1.default.createElement(style_guide_1.AddIcon, { "data-cy": 'plus-icon' }))),
139
- react_1.default.createElement(NoteText, null, (index ? index + '. ' : '') + ((_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.textContent))));
135
+ const FootnoteItem = ({ footnote, label, isSelected, onSelect }) => {
136
+ return (react_1.default.createElement(FootnoteItemContainer, { onClick: () => onSelect(footnote) },
137
+ react_1.default.createElement(StatusIcon, null, isSelected(footnote) ? (react_1.default.createElement(style_guide_1.AddedIcon, { "data-cy": 'plus-icon-ok' })) : (react_1.default.createElement(style_guide_1.AddIcon, { "data-cy": 'plus-icon' }))),
138
+ react_1.default.createElement(NoteText, null, (label ? label + '. ' : '') + footnote.textContent)));
140
139
  };
141
140
  const Separator = styled_components_1.default.div `
142
141
  height: 0;
@@ -41,7 +41,6 @@ const section_title_1 = __importDefault(require("../plugins/section_title"));
41
41
  const section_category_1 = __importDefault(require("../plugins/section-category"));
42
42
  const sections_1 = __importDefault(require("../plugins/sections"));
43
43
  const selected_suggestion_1 = __importDefault(require("../plugins/selected-suggestion"));
44
- const table_footnote_1 = __importDefault(require("../plugins/table-footnote"));
45
44
  const tables_cursor_fix_1 = __importDefault(require("../plugins/tables-cursor-fix"));
46
45
  const toc_1 = __importDefault(require("../plugins/toc"));
47
46
  const rules_1 = __importDefault(require("../rules"));
@@ -73,7 +72,6 @@ exports.default = (props) => {
73
72
  (0, prosemirror_tables_1.tableEditing)(),
74
73
  (0, selected_suggestion_1.default)(),
75
74
  (0, footnotes_1.default)(props),
76
- (0, table_footnote_1.default)(),
77
75
  (0, editor_props_1.default)(props),
78
76
  (0, doi_1.default)(),
79
77
  (0, section_category_1.default)(props),
@@ -31,8 +31,9 @@ const equation_editable_1 = __importDefault(require("../views/equation_editable"
31
31
  const equation_element_editable_1 = __importDefault(require("../views/equation_element_editable"));
32
32
  const figure_editable_1 = __importDefault(require("../views/figure_editable"));
33
33
  const figure_element_editable_1 = __importDefault(require("../views/figure_element_editable"));
34
- const footnote_editable_1 = __importDefault(require("../views/footnote_editable"));
34
+ const footnote_1 = __importDefault(require("../views/footnote"));
35
35
  const footnotes_element_1 = __importDefault(require("../views/footnotes_element"));
36
+ const general_table_footnote_1 = __importDefault(require("../views/general_table_footnote"));
36
37
  const inline_equation_editable_1 = __importDefault(require("../views/inline_equation_editable"));
37
38
  const inline_footnote_editable_1 = __importDefault(require("../views/inline_footnote_editable"));
38
39
  const keyword_1 = __importDefault(require("../views/keyword"));
@@ -49,7 +50,7 @@ const section_label_1 = __importDefault(require("../views/section_label"));
49
50
  const section_title_editable_1 = __importDefault(require("../views/section_title_editable"));
50
51
  const table_cell_1 = __importDefault(require("../views/table_cell"));
51
52
  const table_element_editable_1 = __importDefault(require("../views/table_element_editable"));
52
- const table_element_footer_editable_1 = __importDefault(require("../views/table_element_footer_editable"));
53
+ const table_element_footer_1 = __importDefault(require("../views/table_element_footer"));
53
54
  const title_editable_1 = __importDefault(require("../views/title_editable"));
54
55
  const toc_element_editable_1 = __importDefault(require("../views/toc_element_editable"));
55
56
  exports.default = (props, dispatch) => {
@@ -66,8 +67,9 @@ exports.default = (props, dispatch) => {
66
67
  equation_element: (0, equation_element_editable_1.default)(props),
67
68
  figure: (0, figure_editable_1.default)(props, dispatch),
68
69
  figure_element: (0, figure_element_editable_1.default)(props, dispatch),
69
- footnote: (0, footnote_editable_1.default)(props),
70
+ footnote: (0, footnote_1.default)(props),
70
71
  footnotes_element: (0, footnotes_element_1.default)(props),
72
+ general_table_footnote: (0, general_table_footnote_1.default)(props, dispatch),
71
73
  inline_equation: (0, inline_equation_editable_1.default)(props),
72
74
  inline_footnote: (0, inline_footnote_editable_1.default)(props, dispatch),
73
75
  keyword: (0, keyword_1.default)(props, dispatch),
@@ -85,7 +87,7 @@ exports.default = (props, dispatch) => {
85
87
  table_element: (0, table_element_editable_1.default)(props),
86
88
  table_cell: (0, table_cell_1.default)(props),
87
89
  table_header: (0, table_cell_1.default)(props),
88
- table_element_footer: (0, table_element_footer_editable_1.default)(props),
90
+ table_element_footer: (0, table_element_footer_1.default)(props),
89
91
  toc_element: (0, toc_element_editable_1.default)(props),
90
92
  comments: (0, empty_1.default)('comments'),
91
93
  supplements: (0, empty_1.default)('supplements'),
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteIcon = exports.alertIcon = void 0;
4
+ const style_guide_1 = require("@manuscripts/style-guide");
5
+ const react_1 = require("react");
6
+ const server_1 = require("react-dom/server");
7
+ exports.alertIcon = (0, server_1.renderToStaticMarkup)((0, react_1.createElement)(style_guide_1.AlertIcon));
8
+ exports.deleteIcon = (0, server_1.renderToStaticMarkup)((0, react_1.createElement)(style_guide_1.DeleteIcon));
package/dist/cjs/index.js CHANGED
@@ -47,6 +47,7 @@ Object.defineProperty(exports, "PopperManager", { enumerable: true, get: functio
47
47
  __exportStar(require("./toolbar"), exports);
48
48
  __exportStar(require("./lib/comments"), exports);
49
49
  __exportStar(require("./lib/files"), exports);
50
+ __exportStar(require("./lib/footnotes"), exports);
50
51
  __exportStar(require("./lib/doc"), exports);
51
52
  __exportStar(require("./plugins/comments"), exports);
52
53
  var selected_suggestion_1 = require("./plugins/selected-suggestion");