@manuscripts/body-editor 3.12.67 → 3.13.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 (289) hide show
  1. package/dist/cjs/components/toolbar/type-selector/styles.js +2 -1
  2. package/dist/cjs/versions.js +1 -1
  3. package/dist/es/components/toolbar/type-selector/styles.js +2 -1
  4. package/dist/es/versions.js +1 -1
  5. package/dist/types/components/toolbar/type-selector/styles.d.ts +2 -2
  6. package/dist/types/lib/footnotes.d.ts +4 -2
  7. package/dist/types/lib/utils.d.ts +5 -4
  8. package/dist/types/versions.d.ts +1 -1
  9. package/package.json +37 -36
  10. package/{dist/es/lib/statistics.js → src/__mocks__/styleMock.ts} +2 -14
  11. package/src/assets.ts +20 -0
  12. package/src/classes/collabProvider.ts +38 -0
  13. package/src/clipboard.ts +54 -0
  14. package/src/commands.ts +2109 -0
  15. package/src/components/ChangeHandlingForm.tsx +54 -0
  16. package/src/components/LanguageDropdown/index.tsx +343 -0
  17. package/src/components/affiliations/AffiliationForm.tsx +238 -0
  18. package/src/components/affiliations/AffiliationItem.tsx +151 -0
  19. package/src/components/affiliations/AffiliationList.tsx +71 -0
  20. package/src/components/affiliations/AffiliationsModal.tsx +676 -0
  21. package/src/components/affiliations/AffiliationsPanel.tsx +76 -0
  22. package/src/components/affiliations/CreateAffiliationModal.tsx +135 -0
  23. package/src/components/authors/AuthorDetailsForm.tsx +438 -0
  24. package/src/components/authors/AuthorList.tsx +81 -0
  25. package/src/components/authors/AuthorsModal.tsx +642 -0
  26. package/src/components/authors/AuthorsPanel.tsx +69 -0
  27. package/src/components/authors/CreateAuthorModal.tsx +172 -0
  28. package/src/components/authors/CreditDrawer.tsx +71 -0
  29. package/src/components/authors/DraggableAuthor.tsx +228 -0
  30. package/src/components/authors/useManageAffiliations.tsx +77 -0
  31. package/src/components/authors/useManageCredit.tsx +63 -0
  32. package/src/components/authors-affiliations/AuthorsAndAffiliationsModals.tsx +170 -0
  33. package/src/components/authors-affiliations/GenericPanel.tsx +164 -0
  34. package/src/components/authors-affiliations/ModalTabs.tsx +100 -0
  35. package/src/components/awards/AwardForm.tsx +338 -0
  36. package/src/components/awards/AwardModal.tsx +120 -0
  37. package/src/components/awards/DeleteAwardDiaolog.tsx +52 -0
  38. package/src/components/dialog/ConfirmationDialog.tsx +131 -0
  39. package/src/components/form/CreateModalStyles.tsx +37 -0
  40. package/src/components/form/FormFooter.tsx +54 -0
  41. package/src/components/form/FormPlaceholder.tsx +71 -0
  42. package/src/components/form/ModalFormActions.tsx +88 -0
  43. package/src/components/form/UnsavedLabel.tsx +49 -0
  44. package/src/components/hooks/use-debounce.ts +56 -0
  45. package/src/components/hooks/useAffiliationShowsErrorIndicator.ts +51 -0
  46. package/src/components/hooks/useAuthorShowsErrorIndicator.ts +73 -0
  47. package/src/components/keyboard-shortcuts-modal/FormattedShortcut.tsx +56 -0
  48. package/src/components/keyboard-shortcuts-modal/KeyboardShortcutsModal.tsx +283 -0
  49. package/src/components/keyboard-shortcuts-modal/keyboard-shortcuts.ts +304 -0
  50. package/src/components/keywords/AddKeywordInline.tsx +284 -0
  51. package/src/components/keywords/DeleteKeywordDialog.tsx +52 -0
  52. package/src/components/modal-drawer/GenericDrawer.tsx +65 -0
  53. package/src/components/modal-drawer/GenericDrawerGroup.tsx +125 -0
  54. package/src/components/outline/DraggableTree.tsx +438 -0
  55. package/src/components/outline/ManuscriptOutline.tsx +127 -0
  56. package/src/components/outline/Outline.tsx +141 -0
  57. package/src/components/references/BibliographyItemSource.ts +80 -0
  58. package/src/components/references/CitationEditor.tsx +301 -0
  59. package/src/components/references/CitationViewer.tsx +62 -0
  60. package/src/components/references/ImportBibliographyForm.tsx +232 -0
  61. package/src/components/references/ImportBibliographyModal.tsx +159 -0
  62. package/src/components/references/ReferenceForm/PersonDropDown.tsx +93 -0
  63. package/src/components/references/ReferenceForm/ReferenceForm.tsx +701 -0
  64. package/src/components/references/ReferenceForm/config.ts +133 -0
  65. package/src/components/references/ReferenceForm/styled-components.ts +156 -0
  66. package/src/components/references/ReferenceLine.tsx +43 -0
  67. package/src/components/references/ReferenceSearch.tsx +163 -0
  68. package/src/components/references/ReferenceSearchResults.tsx +113 -0
  69. package/src/components/references/ReferenceSearchResultsPlaceholder.tsx +71 -0
  70. package/src/components/references/ReferenceSearchSection.tsx +124 -0
  71. package/src/components/references/ReferencesEditor.tsx +61 -0
  72. package/src/components/references/ReferencesModal.tsx +352 -0
  73. package/src/components/references/SearchInput.tsx +98 -0
  74. package/src/components/toolbar/InsertEmbedDialog.tsx +222 -0
  75. package/src/components/toolbar/InsertTableDialog.tsx +208 -0
  76. package/src/components/toolbar/ListMenuItem.tsx +203 -0
  77. package/src/components/toolbar/helpers.ts +547 -0
  78. package/src/components/toolbar/type-selector/OptionComponent.tsx +89 -0
  79. package/src/components/toolbar/type-selector/TypeSelector.tsx +157 -0
  80. package/src/components/toolbar/type-selector/styles.ts +79 -0
  81. package/src/components/views/CrossReferenceItems.tsx +199 -0
  82. package/src/components/views/DeleteEmbedDialog.tsx +83 -0
  83. package/src/components/views/DeleteFootnoteDialog.tsx +54 -0
  84. package/src/components/views/FigureDropdown.tsx +423 -0
  85. package/src/components/views/FootnotesSelector.tsx +255 -0
  86. package/src/components/views/InsertSpecialCharacter.tsx +245 -0
  87. package/src/components/views/LinkForm.tsx +220 -0
  88. package/src/components/views/TableCellContextMenu.tsx +241 -0
  89. package/src/configs/ManuscriptsEditor.ts +140 -0
  90. package/src/configs/editor-plugins.ts +119 -0
  91. package/src/configs/editor-views.ts +139 -0
  92. package/src/icons.ts +62 -0
  93. package/src/index.ts +65 -0
  94. package/src/keys/highlight.ts +65 -0
  95. package/src/keys/index.ts +33 -0
  96. package/src/keys/keyword.ts +69 -0
  97. package/src/keys/list.ts +156 -0
  98. package/src/keys/misc.ts +112 -0
  99. package/src/keys/title.ts +221 -0
  100. package/src/lib/__tests__/__fixtures__/doc.json +388 -0
  101. package/src/lib/__tests__/__snapshots__/paste.test.ts.snap +24 -0
  102. package/src/lib/__tests__/authors.test.ts +202 -0
  103. package/src/lib/__tests__/helpers.test.ts +46 -0
  104. package/src/lib/__tests__/paste.test.ts +57 -0
  105. package/src/lib/__tests__/plugins.test.ts +176 -0
  106. package/src/lib/__tests__/url.test.ts +31 -0
  107. package/src/lib/array-reducer.ts +68 -0
  108. package/src/lib/authors-and-affiliations.ts +81 -0
  109. package/src/lib/authors.ts +67 -0
  110. package/src/lib/capabilities.ts +55 -0
  111. package/src/lib/codemirror.ts +37 -0
  112. package/src/lib/comments.ts +123 -0
  113. package/src/lib/context-menu.ts +745 -0
  114. package/src/lib/copy.ts +30 -0
  115. package/src/lib/crossref.ts +90 -0
  116. package/src/lib/dnd.ts +29 -0
  117. package/src/lib/doc.ts +167 -0
  118. package/src/lib/dompurify.ts +28 -0
  119. package/src/lib/files.ts +180 -0
  120. package/src/lib/footnotes.ts +83 -0
  121. package/src/lib/get-media-type.ts +105 -0
  122. package/src/lib/helpers.ts +199 -0
  123. package/src/lib/hierarchy.ts +117 -0
  124. package/src/lib/languages.ts +37 -0
  125. package/src/lib/lists.ts +56 -0
  126. package/src/lib/math.ts +111 -0
  127. package/src/lib/media.ts +334 -0
  128. package/src/lib/navigation-utils.ts +235 -0
  129. package/src/lib/normalize.ts +70 -0
  130. package/src/lib/paste.ts +304 -0
  131. package/src/lib/placeholder.ts +32 -0
  132. package/src/lib/platform.ts +18 -0
  133. package/src/lib/plugins.ts +22 -0
  134. package/src/lib/popper.ts +180 -0
  135. package/src/lib/position-menu.ts +184 -0
  136. package/src/lib/references.ts +94 -0
  137. package/src/lib/template.ts +29 -0
  138. package/src/lib/track-changes-utils.ts +34 -0
  139. package/{dist/types/lib/statistics.d.ts → src/lib/url.ts} +11 -8
  140. package/src/lib/use-do-with-debounce.ts +39 -0
  141. package/src/lib/utils.ts +323 -0
  142. package/src/lib/view.ts +100 -0
  143. package/src/menus.tsx +684 -0
  144. package/src/node-type-icons.tsx +83 -0
  145. package/src/plugins/__tests__/__fixtures__/deleted-footnote.json +140 -0
  146. package/src/plugins/__tests__/__fixtures__/inserted-footnote.json +153 -0
  147. package/src/plugins/__tests__/footnotes.test.ts +67 -0
  148. package/src/plugins/accessibility_element.ts +219 -0
  149. package/src/plugins/add-subtitle.ts +102 -0
  150. package/src/plugins/affiliations.ts +136 -0
  151. package/src/plugins/alt-titles.ts +219 -0
  152. package/src/plugins/bibliography.ts +235 -0
  153. package/src/plugins/comments.ts +328 -0
  154. package/src/plugins/cross-references.ts +70 -0
  155. package/src/plugins/detect-inconsistency/detect-inconsistency-utils.ts +102 -0
  156. package/src/plugins/detect-inconsistency/index.ts +55 -0
  157. package/src/plugins/detect-inconsistency/validators.ts +283 -0
  158. package/src/plugins/doi.ts +66 -0
  159. package/src/plugins/editor-props.ts +39 -0
  160. package/src/plugins/elements.ts +60 -0
  161. package/src/plugins/footnotes.ts +298 -0
  162. package/src/plugins/link.ts +53 -0
  163. package/src/plugins/lock-body.ts +136 -0
  164. package/src/plugins/move-node.ts +55 -0
  165. package/src/plugins/objects.ts +125 -0
  166. package/src/plugins/paragraphs.ts +90 -0
  167. package/src/plugins/persist.ts +64 -0
  168. package/src/plugins/persistent-cursor.ts +66 -0
  169. package/src/plugins/placeholder.ts +219 -0
  170. package/src/plugins/prevent-empty.ts +50 -0
  171. package/src/plugins/search-replace/index.ts +157 -0
  172. package/src/plugins/search-replace/lib.ts +95 -0
  173. package/src/plugins/section_category.ts +212 -0
  174. package/src/plugins/section_title/autocompletion.ts +87 -0
  175. package/src/plugins/section_title/index.ts +105 -0
  176. package/src/plugins/selected-suggestion.ts +243 -0
  177. package/src/plugins/tables-cursor-fix.ts +143 -0
  178. package/src/plugins/translations.ts +263 -0
  179. package/src/rules.ts +60 -0
  180. package/src/selection.ts +112 -0
  181. package/src/testing/default-capabilities.ts +48 -0
  182. package/src/testing/default-editor-data.ts +73 -0
  183. package/src/testing/empty-editor-doc.json +62 -0
  184. package/src/testing/polyfill-dom.ts +43 -0
  185. package/src/testing/section-categories.json +161 -0
  186. package/src/testing/setup-editor.ts +55 -0
  187. package/src/tests.ts +42 -0
  188. package/src/toolbar.tsx +259 -0
  189. package/src/types/@citation-js/core.d.ts +16 -0
  190. package/src/types/@citation-js/index.d.ts +16 -0
  191. package/src/types/@citation-js/plugin-bibtex.d.ts +16 -0
  192. package/src/types/@citation-js/plugin-csl.d.ts +16 -0
  193. package/src/types/@citation-js/plugin-doi.d.ts +16 -0
  194. package/src/types/@citation-js/plugin-enw.d.ts +16 -0
  195. package/src/types/@citation-js/plugin-pubmed.d.ts +16 -0
  196. package/src/types/@citation-js/plugin-ris.d.ts +16 -0
  197. package/src/types/citeproc.d.ts +124 -0
  198. package/src/types/css.d.ts +16 -0
  199. package/src/types/json.d.ts +17 -0
  200. package/src/types/prosemirror-dev-tools.d.ts +16 -0
  201. package/src/types/prosemirror-dropcursor.d.ts +16 -0
  202. package/src/types/styled-components.d.ts +23 -0
  203. package/src/types.ts +49 -0
  204. package/src/useEditor.ts +244 -0
  205. package/src/versions.ts +3 -0
  206. package/src/views/ReactSubView.tsx +145 -0
  207. package/src/views/abstracts.ts +46 -0
  208. package/src/views/accessibility_element.ts +86 -0
  209. package/src/views/affiliations.ts +254 -0
  210. package/src/views/alt_title.ts +85 -0
  211. package/src/views/alt_titles_section.ts +97 -0
  212. package/src/views/attachment.ts +160 -0
  213. package/src/views/attachments.ts +72 -0
  214. package/src/views/author_notes.ts +96 -0
  215. package/src/views/award.ts +194 -0
  216. package/src/views/awards.ts +59 -0
  217. package/src/views/base_node_view.ts +85 -0
  218. package/src/views/bibliography_element.ts +313 -0
  219. package/src/views/block_view.ts +100 -0
  220. package/src/views/blockquote_element.ts +26 -0
  221. package/src/views/blockquote_element_editable.ts +24 -0
  222. package/src/views/box_element.ts +33 -0
  223. package/src/views/caption.ts +37 -0
  224. package/src/views/caption_title.ts +33 -0
  225. package/src/views/citation.ts +67 -0
  226. package/src/views/citation_editable.ts +312 -0
  227. package/src/views/contributors.ts +341 -0
  228. package/src/views/creators.ts +82 -0
  229. package/src/views/cross_reference.ts +74 -0
  230. package/src/views/cross_reference_editable.ts +113 -0
  231. package/src/views/editable_block.ts +141 -0
  232. package/src/views/embed.ts +345 -0
  233. package/src/views/empty.ts +26 -0
  234. package/src/views/equation.ts +47 -0
  235. package/src/views/equation_editable.ts +84 -0
  236. package/src/views/equation_element.ts +29 -0
  237. package/src/views/equation_element_editable.ts +21 -0
  238. package/src/views/figure.ts +84 -0
  239. package/src/views/figure_editable.ts +361 -0
  240. package/src/views/figure_element.ts +197 -0
  241. package/src/views/figure_element_editable.ts +21 -0
  242. package/src/views/footnote.ts +236 -0
  243. package/src/views/footnotes_element.ts +54 -0
  244. package/src/views/general_table_footnote.ts +140 -0
  245. package/src/views/hero_image.ts +76 -0
  246. package/src/views/hero_image_editable.ts +21 -0
  247. package/src/views/image_element.ts +373 -0
  248. package/src/views/image_element_editable.ts +21 -0
  249. package/src/views/inline_equation.ts +47 -0
  250. package/src/views/inline_equation_editable.ts +70 -0
  251. package/src/views/inline_footnote.ts +264 -0
  252. package/src/views/inline_footnote_editable.ts +20 -0
  253. package/src/views/keyword.ts +127 -0
  254. package/src/views/keyword_group.ts +109 -0
  255. package/src/views/link.ts +27 -0
  256. package/src/views/link_editable.ts +169 -0
  257. package/src/views/list.ts +46 -0
  258. package/src/views/list_item.ts +26 -0
  259. package/src/views/paragraph.ts +26 -0
  260. package/src/views/paragraph_editable.ts +21 -0
  261. package/src/views/placeholder.ts +35 -0
  262. package/src/views/placeholder_element.ts +38 -0
  263. package/src/views/placeholder_element_editable.ts +21 -0
  264. package/src/views/pullquote_element.ts +106 -0
  265. package/src/views/pullquote_element_editable.ts +24 -0
  266. package/src/views/quote_image_editable.ts +84 -0
  267. package/src/views/section.ts +64 -0
  268. package/src/views/section_label.ts +20 -0
  269. package/src/views/section_title.ts +87 -0
  270. package/src/views/section_title_editable.ts +21 -0
  271. package/src/views/subtitle.ts +42 -0
  272. package/src/views/subtitle_editable.ts +20 -0
  273. package/src/views/subtitles.ts +34 -0
  274. package/src/views/subtitles_editable.ts +21 -0
  275. package/src/views/supplement.ts +236 -0
  276. package/src/views/supplement_editable.ts +20 -0
  277. package/src/views/supplements.ts +65 -0
  278. package/src/views/supplements_editable.ts +21 -0
  279. package/src/views/table_cell.ts +150 -0
  280. package/src/views/table_element.ts +33 -0
  281. package/src/views/table_element_editable.ts +21 -0
  282. package/src/views/table_element_footer.ts +41 -0
  283. package/src/views/title.ts +46 -0
  284. package/src/views/title_editable.ts +20 -0
  285. package/src/views/trans_graphical_abstract.ts +55 -0
  286. package/src/views/trans_graphical_abstract_editable.ts +21 -0
  287. package/src/views/translated_abstract.ts +53 -0
  288. package/src/views/translated_abstract_editable.ts +21 -0
  289. package/dist/cjs/lib/statistics.js +0 -38
@@ -0,0 +1,140 @@
1
+ /*!
2
+ * © 2019 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import 'prosemirror-view/style/prosemirror.css'
18
+
19
+ import {
20
+ ManuscriptNode,
21
+ ManuscriptNodeType,
22
+ schema,
23
+ SectionCategory,
24
+ UserProfile,
25
+ } from '@manuscripts/transform'
26
+ import { EditorState } from 'prosemirror-state'
27
+ import { EditorView } from 'prosemirror-view'
28
+ import { Location, NavigateFunction } from 'react-router-dom'
29
+ import { DefaultTheme } from 'styled-components'
30
+
31
+ import { CollabProvider } from '../classes/collabProvider'
32
+ import { clipboardParser } from '../clipboard'
33
+ import { Dispatch } from '../commands'
34
+ import { Language } from '../lib/languages'
35
+ import { Capabilities } from '../lib/capabilities'
36
+ import { transformCopied } from '../lib/copy'
37
+ import { FileAttachment, FileManagement } from '../lib/files'
38
+ import { handleScrollToSelectedTarget } from '../lib/helpers'
39
+ import { handlePaste, transformPasted, transformPastedHTML } from '../lib/paste'
40
+ import { INIT_META } from '../lib/plugins'
41
+ import { PopperManager } from '../lib/popper'
42
+ import plugins from './editor-plugins'
43
+ import views from './editor-views'
44
+
45
+ export type FetchOEmbedHtml = (
46
+ url: string,
47
+ maxWidth: number,
48
+ maxHeight: number
49
+ ) => Promise<string | undefined>
50
+
51
+ export type CSLProps = {
52
+ style?: string
53
+ locale?: string
54
+ }
55
+
56
+ export interface EditorProps {
57
+ attributes?: { [key: string]: string }
58
+ locale: string
59
+ theme: DefaultTheme
60
+ getCurrentUser: () => UserProfile
61
+
62
+ projectID: string
63
+ doc: ManuscriptNode
64
+ getFiles: () => FileAttachment[]
65
+ fileManagement: FileManagement
66
+
67
+ popper: PopperManager
68
+
69
+ getCapabilities: () => Capabilities
70
+ userID: string
71
+ debug: boolean
72
+ cslProps: CSLProps
73
+ languages: Language[]
74
+ sectionCategories: Map<string, SectionCategory>
75
+ collabProvider?: CollabProvider
76
+ navigate: NavigateFunction
77
+ location: Location
78
+ isComparingMode?: boolean
79
+ dispatch?: Dispatch
80
+ onEditorClick: (event: Event) => void
81
+ lockBody: boolean
82
+ isViewingMode?: boolean
83
+ hiddenNodeTypes?: ManuscriptNodeType[] | undefined
84
+ fetchOEmbedHtml: FetchOEmbedHtml
85
+ }
86
+
87
+ export type ExternalProps = Omit<EditorProps, 'popper' | 'dispatch'>
88
+
89
+ export const createEditorState = (props: EditorProps) =>
90
+ EditorState.create({
91
+ doc: props.doc,
92
+ schema,
93
+ plugins: plugins(props),
94
+ })
95
+
96
+ export const createEditorView = (
97
+ props: EditorProps,
98
+ root: HTMLElement,
99
+ state: EditorState,
100
+ dispatch: Dispatch
101
+ ) => {
102
+ const view = new EditorView(root, {
103
+ state,
104
+ editable: () => props.getCapabilities().editArticle,
105
+ scrollMargin: {
106
+ top: 100,
107
+ bottom: 100,
108
+ left: 0,
109
+ right: 0,
110
+ },
111
+ dispatchTransaction: dispatch,
112
+ nodeViews: views(props, dispatch),
113
+ attributes: props.attributes,
114
+ transformPastedHTML,
115
+ transformPasted,
116
+ handlePaste,
117
+ clipboardParser,
118
+ handleScrollToSelection: handleScrollToSelectedTarget,
119
+ transformCopied,
120
+ handleClickOn: (view, pos, node, nodePos, event) => {
121
+ props.onEditorClick(event)
122
+ // This to prevent changing editor selection when clicking on table cell context menu button
123
+ if (
124
+ event?.target &&
125
+ (event.target as HTMLElement).classList.contains(
126
+ 'table-context-menu-button'
127
+ )
128
+ ) {
129
+ return true
130
+ }
131
+ },
132
+ })
133
+
134
+ // running an init transaction allowing plugins to caught up with the document for the first time
135
+ const tr = view.state.tr.setMeta(INIT_META, true)
136
+
137
+ const nextState = view.state.apply(tr)
138
+ view.updateState(nextState)
139
+ return view
140
+ }
@@ -0,0 +1,119 @@
1
+ /*!
2
+ * © 2026 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import 'prosemirror-gapcursor/style/gapcursor.css'
18
+ import 'prosemirror-tables/style/tables.css'
19
+
20
+ import {
21
+ trackChangesPlugin,
22
+ TrackChangesStatus,
23
+ } from '@manuscripts/track-changes-plugin'
24
+ import { collab } from 'prosemirror-collab'
25
+ import { dropCursor } from 'prosemirror-dropcursor'
26
+ import { history } from 'prosemirror-history'
27
+ import { tableEditing } from 'prosemirror-tables'
28
+
29
+ import keys from '../keys'
30
+ import accessibility_element from '../plugins/accessibility_element'
31
+ import add_subtitle from '../plugins/add-subtitle'
32
+ import affiliations from '../plugins/affiliations'
33
+ import alt_titles from '../plugins/alt-titles'
34
+ import bibliography from '../plugins/bibliography'
35
+ import comments from '../plugins/comments'
36
+ import cross_references from '../plugins/cross-references'
37
+ import detect_inconsistency from '../plugins/detect-inconsistency'
38
+ import doi from '../plugins/doi'
39
+ import editorProps from '../plugins/editor-props'
40
+ import elements from '../plugins/elements'
41
+ import footnotes from '../plugins/footnotes'
42
+ import link from '../plugins/link'
43
+ import lock_body from '../plugins/lock-body'
44
+ import move_node from '../plugins/move-node'
45
+ import objects from '../plugins/objects'
46
+ import paragraphs from '../plugins/paragraphs'
47
+ import persist from '../plugins/persist'
48
+ import persistent_cursor from '../plugins/persistent-cursor'
49
+ import placeholder from '../plugins/placeholder'
50
+ import prevent_empty from '../plugins/prevent-empty'
51
+ import search_replace from '../plugins/search-replace'
52
+ import section_title from '../plugins/section_title'
53
+ import section_category from '../plugins/section_category'
54
+ import selected_suggestion from '../plugins/selected-suggestion'
55
+ import table_editing_fix from '../plugins/tables-cursor-fix'
56
+ import translations from '../plugins/translations'
57
+ import rules from '../rules'
58
+ import { EditorProps } from './ManuscriptsEditor'
59
+
60
+ export default (props: EditorProps) => {
61
+ const allPlugins = [
62
+ rules,
63
+ ...keys,
64
+ dropCursor(),
65
+ history(),
66
+ trackChangesPlugin({
67
+ userID: props.userID,
68
+ debug: props.debug,
69
+ initialStatus:
70
+ props.isViewingMode || props.isComparingMode
71
+ ? TrackChangesStatus.viewSnapshots
72
+ : props.getCapabilities().editWithoutTracking
73
+ ? TrackChangesStatus.disabled
74
+ : TrackChangesStatus.enabled,
75
+ }),
76
+ section_title(),
77
+ table_editing_fix(),
78
+ elements(),
79
+ persist(),
80
+ bibliography(props),
81
+ objects(),
82
+ affiliations(),
83
+ comments(),
84
+ paragraphs(),
85
+ placeholder(),
86
+ add_subtitle(props),
87
+ translations(props),
88
+ tableEditing(),
89
+ selected_suggestion(),
90
+ footnotes(props),
91
+ editorProps(props),
92
+ doi(),
93
+ section_category(props),
94
+ cross_references(),
95
+ detect_inconsistency(props),
96
+ search_replace(),
97
+ lock_body(),
98
+ alt_titles(),
99
+ accessibility_element(),
100
+ prevent_empty(),
101
+ move_node(),
102
+ link(),
103
+ ]
104
+
105
+ // @ts-ignore
106
+ if (!window.Cypress) {
107
+ allPlugins.push(persistent_cursor())
108
+ // this is a temporal workaround until cypress tests are switched to working with prosemirrors selection instead of browsers direct selection
109
+ // this plugin is incompatible with current implementation of our tests in cypress,
110
+ // which relies on browser native Selection.AddRange and Range APIs
111
+ } else {
112
+ console.warn('Skipping cursor imitation plugin for automated testing runs.')
113
+ }
114
+ if (props.collabProvider) {
115
+ allPlugins.push(collab({ version: props.collabProvider.currentVersion }))
116
+ }
117
+
118
+ return allPlugins
119
+ }
@@ -0,0 +1,139 @@
1
+ /*!
2
+ * © 2019 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ManuscriptNodeView, Nodes } from '@manuscripts/transform'
17
+
18
+ import { Dispatch } from '../commands'
19
+ import { NodeViewCreator } from '../types'
20
+ import abstracts from '../views/abstracts'
21
+ import accessibilityElement from '../views/accessibility_element'
22
+ import affiliations from '../views/affiliations'
23
+ import alt_title from '../views/alt_title'
24
+ import alt_titles_section from '../views/alt_titles_section'
25
+ import attachment from '../views/attachment'
26
+ import attachments from '../views/attachments'
27
+ import authorNotes from '../views/author_notes'
28
+ import award from '../views/award'
29
+ import awards from '../views/awards'
30
+ import bibliographyElement from '../views/bibliography_element'
31
+ import blockquoteElement from '../views/blockquote_element_editable'
32
+ import boxElement from '../views/box_element'
33
+ import caption from '../views/caption'
34
+ import captionTitle from '../views/caption_title'
35
+ import citation from '../views/citation_editable'
36
+ import contributors from '../views/contributors'
37
+ import crossReference from '../views/cross_reference_editable'
38
+ import embed from '../views/embed'
39
+ import empty from '../views/empty'
40
+ import equation from '../views/equation_editable'
41
+ import equationElement from '../views/equation_element_editable'
42
+ import figure from '../views/figure_editable'
43
+ import figureElement from '../views/figure_element_editable'
44
+ import footnote from '../views/footnote'
45
+ import footnotesElement from '../views/footnotes_element'
46
+ import generalTableFootnote from '../views/general_table_footnote'
47
+ import heroImage from '../views/hero_image_editable'
48
+ import imageElement from '../views/image_element_editable'
49
+ import inlineEquation from '../views/inline_equation_editable'
50
+ import inlineFootnote from '../views/inline_footnote_editable'
51
+ import keyword from '../views/keyword'
52
+ import keywordGroup from '../views/keyword_group'
53
+ import link from '../views/link_editable'
54
+ import list from '../views/list'
55
+ import list_item from '../views/list_item'
56
+ import paragraph from '../views/paragraph_editable'
57
+ import placeholder from '../views/placeholder'
58
+ import placeholderElement from '../views/placeholder_element_editable'
59
+ import pullquoteElement from '../views/pullquote_element_editable'
60
+ import quoteImage from '../views/quote_image_editable'
61
+ import section from '../views/section'
62
+ import sectionLabel from '../views/section_label'
63
+ import sectionTitle from '../views/section_title_editable'
64
+ import subtitle from '../views/subtitle_editable'
65
+ import subtitles from '../views/subtitles_editable'
66
+ import supplement from '../views/supplement_editable'
67
+ import supplements from '../views/supplements_editable'
68
+ import tableCell from '../views/table_cell'
69
+ import tableElement from '../views/table_element_editable'
70
+ import tableElementFooter from '../views/table_element_footer'
71
+ import title from '../views/title_editable'
72
+ import transAbstract from '../views/translated_abstract_editable'
73
+ import transGraphicalAbstract from '../views/trans_graphical_abstract_editable'
74
+ import { EditorProps } from './ManuscriptsEditor'
75
+
76
+ export default (
77
+ props: EditorProps,
78
+ dispatch: Dispatch
79
+ ): Partial<Record<Nodes, NodeViewCreator<ManuscriptNodeView>>> => {
80
+ return {
81
+ title: title(props, dispatch),
82
+ subtitles: subtitles(props, dispatch),
83
+ subtitle: subtitle(props, dispatch),
84
+ alt_title: alt_title(props),
85
+ alt_titles: alt_titles_section(props),
86
+ bibliography_element: bibliographyElement(props, dispatch),
87
+ blockquote_element: blockquoteElement(props),
88
+ quote_image: quoteImage(props, dispatch),
89
+ box_element: boxElement(props),
90
+ caption_title: captionTitle(props),
91
+ caption: caption(props),
92
+ citation: citation(props, dispatch),
93
+ cross_reference: crossReference(props, dispatch),
94
+ contributors: contributors(props, dispatch),
95
+ affiliations: affiliations(props, dispatch),
96
+ embed: embed(props, dispatch),
97
+ equation: equation(props),
98
+ equation_element: equationElement(props),
99
+ figure: figure(props, dispatch),
100
+ figure_element: figureElement(props, dispatch),
101
+ image_element: imageElement(props, dispatch),
102
+ footnote: footnote(props),
103
+ footnotes_element: footnotesElement(props),
104
+ general_table_footnote: generalTableFootnote(props, dispatch),
105
+ inline_equation: inlineEquation(props),
106
+ inline_footnote: inlineFootnote(props, dispatch),
107
+ keyword: keyword(props, dispatch),
108
+ keyword_group: keywordGroup(props, dispatch),
109
+ link: link(props, dispatch),
110
+ list: list(props),
111
+ list_item: list_item(props),
112
+ paragraph: paragraph(props),
113
+ placeholder: placeholder(props),
114
+ placeholder_element: placeholderElement(props),
115
+ section: section(props),
116
+ graphical_abstract_section: section(props),
117
+ pullquote_element: pullquoteElement(props),
118
+ section_title: sectionTitle(props),
119
+ section_label: sectionLabel(props),
120
+ table_element: tableElement(props),
121
+ table_cell: tableCell(props),
122
+ table_header: tableCell(props),
123
+ table_element_footer: tableElementFooter(props),
124
+ comments: empty('comments'),
125
+ supplements: supplements(props, dispatch),
126
+ supplement: supplement(props, dispatch),
127
+ author_notes: authorNotes(props, dispatch),
128
+ awards: awards(props, dispatch),
129
+ award: award(props, dispatch),
130
+ long_desc: accessibilityElement(props, dispatch),
131
+ alt_text: accessibilityElement(props, dispatch),
132
+ hero_image: heroImage(props, dispatch),
133
+ abstracts: abstracts(props),
134
+ trans_abstract: transAbstract(props),
135
+ trans_graphical_abstract: transGraphicalAbstract(props),
136
+ attachment: attachment(props, dispatch),
137
+ attachments: attachments(props, dispatch),
138
+ }
139
+ }
package/src/icons.ts ADDED
@@ -0,0 +1,62 @@
1
+ /*!
2
+ * © 2024 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import {
17
+ AddAuthorIcon,
18
+ AlertIcon,
19
+ ArrowDownCircleIcon,
20
+ ArrowUpIcon,
21
+ DeleteIcon,
22
+ DraggableIcon,
23
+ EditIcon,
24
+ FileCorruptedIcon,
25
+ FileMainDocumentIcon,
26
+ ImageDefaultIcon,
27
+ ImageLeftIcon,
28
+ ImageRightIcon,
29
+ LinkIcon,
30
+ LockIcon,
31
+ ORCIDIcon as ORCID,
32
+ PlusIcon,
33
+ ScrollIcon,
34
+ SectionCategoryIcon,
35
+ TickIcon,
36
+ TranslateIcon,
37
+ } from '@manuscripts/style-guide'
38
+ import React, { createElement } from 'react'
39
+ import { renderToStaticMarkup } from 'react-dom/server'
40
+
41
+ const renderIcon = (c: React.FC) => renderToStaticMarkup(createElement(c))
42
+
43
+ export const addAuthorIcon = renderIcon(AddAuthorIcon)
44
+ export const arrowDown = renderIcon(ArrowDownCircleIcon)
45
+ export const arrowUp = renderIcon(ArrowUpIcon)
46
+ export const alertIcon = renderIcon(AlertIcon)
47
+ export const deleteIcon = renderIcon(DeleteIcon)
48
+ export const editIcon = renderIcon(EditIcon)
49
+ export const sectionCategoryIcon = renderIcon(SectionCategoryIcon)
50
+ export const scrollIcon = renderIcon(ScrollIcon)
51
+ export const lockIcon = renderIcon(LockIcon)
52
+ export const plusIcon = renderIcon(PlusIcon)
53
+ export const imageRightIcon = renderIcon(ImageRightIcon)
54
+ export const imageLeftIcon = renderIcon(ImageLeftIcon)
55
+ export const imageDefaultIcon = renderIcon(ImageDefaultIcon)
56
+ export const fileCorruptedIcon = renderIcon(FileCorruptedIcon)
57
+ export const draggableIcon = renderIcon(DraggableIcon)
58
+ export const translateIcon = renderIcon(TranslateIcon)
59
+ export const linkIcon = renderIcon(LinkIcon)
60
+ export const fileMainDocumentIcon = renderIcon(FileMainDocumentIcon)
61
+ export const tickIcon = renderIcon(TickIcon)
62
+ export const ORCIDIcon = renderIcon(ORCID)
package/src/index.ts ADDED
@@ -0,0 +1,65 @@
1
+ /*!
2
+ * © 2019 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ export * from './commands'
18
+ export { ManuscriptOutline } from './components/outline/ManuscriptOutline'
19
+ export { OutlineItemIcon } from './components/outline/Outline'
20
+ export { TypeSelector } from './components/toolbar/type-selector/TypeSelector'
21
+ export { default as LanguageDropdown } from './components/LanguageDropdown'
22
+ export {
23
+ KeyboardShortcutsModal,
24
+ openKeyboardShortcuts,
25
+ } from './components/keyboard-shortcuts-modal/KeyboardShortcutsModal'
26
+ export * from './components/toolbar/ListMenuItem'
27
+ export * from './components/toolbar/InsertTableDialog'
28
+ export * from './menus'
29
+ export { CollabProvider } from './classes/collabProvider'
30
+ export { PopperManager } from './lib/popper'
31
+ export * from './toolbar'
32
+ export * from './lib/capabilities'
33
+ export * from './lib/navigation-utils'
34
+ export * from './lib/comments'
35
+ export * from './lib/files'
36
+ export * from './lib/footnotes'
37
+ export * from './lib/template'
38
+ export * from './lib/doc'
39
+ export * from './lib/media'
40
+ export type { FetchOEmbedHtml } from './configs/ManuscriptsEditor'
41
+ export * from './plugins/comments'
42
+ export { selectedSuggestionKey } from './plugins/selected-suggestion'
43
+ export * from './selection'
44
+ export * from './lib/utils'
45
+ export * from './lib/track-changes-utils'
46
+ export * from './useEditor'
47
+ export * from './lib/math'
48
+ export * from './lib/get-media-type'
49
+ export { objectsKey as objectsPluginKey } from './plugins/objects'
50
+ export { footnotesKey as footnotesPluginKey } from './plugins/footnotes'
51
+ export { bibliographyKey as bibliographyPluginKey } from './plugins/bibliography'
52
+ export {
53
+ searchReplaceKey as searchReplacePluginKey,
54
+ SearchReplacePluginState,
55
+ } from './plugins/search-replace'
56
+ export { detectInconsistencyKey as detectInconsistencyPluginKey } from './plugins/detect-inconsistency'
57
+ export { getNewMatch, getClosestMatch } from './plugins/search-replace/lib'
58
+ export { metadata, bibliographyItemTypes } from './lib/references'
59
+ export {
60
+ authorLabel,
61
+ affiliationLabel,
62
+ AffiliationAttrs,
63
+ ContributorAttrs,
64
+ } from './lib/authors'
65
+ export type { Inconsistency } from './plugins/detect-inconsistency'
@@ -0,0 +1,65 @@
1
+ /*!
2
+ * © 2019 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import {
18
+ isHighlightMarkerNode,
19
+ ManuscriptEditorState,
20
+ } from '@manuscripts/transform'
21
+ import { Selection } from 'prosemirror-state'
22
+
23
+ import { Dispatch, isTextSelection } from '../commands'
24
+ import { EditorAction } from '../types'
25
+
26
+ const skipHighlightNode =
27
+ (dir: number): EditorAction =>
28
+ (state: ManuscriptEditorState, dispatch?: Dispatch) => {
29
+ const { selection, tr } = state
30
+
31
+ if (isTextSelection(selection)) {
32
+ const { $anchor, $cursor } = selection
33
+
34
+ if ($cursor) {
35
+ const adjacentNode = dir === -1 ? $cursor.nodeBefore : $cursor.nodeAfter
36
+
37
+ if (adjacentNode && isHighlightMarkerNode(adjacentNode)) {
38
+ const $adjacentPos = tr.doc.resolve($anchor.pos + dir)
39
+
40
+ const adjacentSelection = Selection.findFrom($adjacentPos, dir, true)
41
+
42
+ if (adjacentSelection) {
43
+ // TODO: handle multiple adjacent markers
44
+
45
+ tr.setSelection(adjacentSelection)
46
+
47
+ if (dispatch) {
48
+ dispatch(tr)
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ return false
56
+ }
57
+
58
+ const highlightKeymap: { [key: string]: EditorAction } = {
59
+ Backspace: skipHighlightNode(-1),
60
+ Delete: skipHighlightNode(1),
61
+ ArrowLeft: skipHighlightNode(-1),
62
+ ArrowRight: skipHighlightNode(1),
63
+ }
64
+
65
+ export default highlightKeymap
@@ -0,0 +1,33 @@
1
+ /*!
2
+ * © 2019 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { baseKeymap } from 'prosemirror-commands'
18
+ import { keymap } from 'prosemirror-keymap'
19
+
20
+ import highlightKeymap from './highlight'
21
+ import keywordKeymap from './keyword'
22
+ import listKeymap from './list'
23
+ import miscKeymap from './misc'
24
+ import titleKeymap from './title'
25
+
26
+ export default [
27
+ keymap(keywordKeymap),
28
+ keymap(listKeymap),
29
+ keymap(titleKeymap),
30
+ keymap(miscKeymap),
31
+ keymap(baseKeymap),
32
+ keymap(highlightKeymap),
33
+ ]