@brightspot/ui 3.0.1-cms-ui-migration.2 → 3.0.1-cms-ui-migration.3

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 (297) hide show
  1. package/README.md +54 -35
  2. package/dist/custom-elements.json +1924 -1924
  3. package/dist/storybook/assets/{ActionBar.stories-hJ_5cm-P.js → ActionBar.stories-CSxtZl7v.js} +1 -1
  4. package/dist/storybook/assets/{ActionItem.stories-Bjx2803w.js → ActionItem.stories-BWcMRMP3.js} +1 -1
  5. package/dist/storybook/assets/{Avatar.stories-Cj0YgZ6f.js → Avatar.stories-CYTUGXzH.js} +1 -1
  6. package/dist/storybook/assets/{AvatarGroup.stories-Lh_sQFCU.js → AvatarGroup.stories-CSYBYo_5.js} +1 -1
  7. package/dist/storybook/assets/{Badge.stories-BL7RUibx.js → Badge.stories-LuF4BuVr.js} +1 -1
  8. package/dist/storybook/assets/{Button-BPHNcxqK.js → Button-CrXCMxHb.js} +1 -1
  9. package/dist/storybook/assets/{Button.stories-CAYO4gdU.js → Button.stories-JVwxdrdM.js} +1 -1
  10. package/dist/storybook/assets/{ButtonGroup.stories-Cd13Us5K.js → ButtonGroup.stories-qtq64a1H.js} +1 -1
  11. package/dist/storybook/assets/{Celebrate.stories-D_KE3Qze.js → Celebrate.stories-DjTtaSd6.js} +1 -1
  12. package/dist/storybook/assets/{Checkbox.stories-Aj1xgZVn.js → Checkbox.stories-v1Pr5mL6.js} +1 -1
  13. package/dist/storybook/assets/{CircularProgress.stories-BecV_v6d.js → CircularProgress.stories-DkV7PJ4D.js} +1 -1
  14. package/dist/storybook/assets/{ClipboardMixin.stories-DU-WiZ2f.js → ClipboardMixin.stories-Dh5c7uSM.js} +1 -1
  15. package/dist/storybook/assets/{Color-6BZIO3FS-BYl4KZZn.js → Color-6BZIO3FS-B1gcREt6.js} +1 -1
  16. package/dist/storybook/assets/{Colors.stories-BMUVUy2q.js → Colors.stories-DnubtRqn.js} +1 -1
  17. package/dist/storybook/assets/{CombinedEffects.stories-FHcPKFm6.js → CombinedEffects.stories-By6akSve.js} +1 -1
  18. package/dist/storybook/assets/{ComponentStatesMixin-EMUnfT5y.js → ComponentStatesMixin-CPLGv3h-.js} +1 -1
  19. package/dist/storybook/assets/{ComponentStatesMixin.stories-SXq0kzS9.js → ComponentStatesMixin.stories-CiQ_lyhm.js} +1 -1
  20. package/dist/storybook/assets/{CopyToClipboard.stories-u43lhvcI.js → CopyToClipboard.stories-cJ7rl3mj.js} +1 -1
  21. package/dist/storybook/assets/{Debounce.stories-BdCn5qgO.js → Debounce.stories-Bw-goobU.js} +1 -1
  22. package/dist/storybook/assets/{DocsRenderer-LL677BLK-DxiEJ_jx.js → DocsRenderer-LL677BLK-CNW57dGQ.js} +3 -3
  23. package/dist/storybook/assets/{Dropdown.stories-BWSRwjIF.js → Dropdown.stories-CwC3HXXd.js} +1 -1
  24. package/dist/storybook/assets/{EmptyState.stories-BpobeZL5.js → EmptyState.stories-BUEJwuhP.js} +1 -1
  25. package/dist/storybook/assets/{Events.stories-CP5kMzpr.js → Events.stories-D1mf9buv.js} +1 -1
  26. package/dist/storybook/assets/{Heading.stories-CbJD-oTB.js → Heading.stories-DO906G4P.js} +1 -1
  27. package/dist/storybook/assets/{HueRipple.stories-BOABJ7zw.js → HueRipple.stories-BOySRSZB.js} +1 -1
  28. package/dist/storybook/assets/{Icon.stories-CWlUHL4j.js → Icon.stories-BsqgTbdG.js} +1 -1
  29. package/dist/storybook/assets/{IconButton.stories-BWBs-OLT.js → IconButton.stories-aza1AAKk.js} +1 -1
  30. package/dist/storybook/assets/{LinearProgress.stories-LZ0GZoxF.js → LinearProgress.stories-CDYmiiex.js} +1 -1
  31. package/dist/storybook/assets/{Pagination.stories-CbLaR3P9.js → Pagination.stories-LXB-x7YB.js} +1 -1
  32. package/dist/storybook/assets/{Popover.stories-JHrWqYZw.js → Popover.stories-DY1HesPJ.js} +1 -1
  33. package/dist/storybook/assets/{ReadyMixin-B1H2a9x8.js → ReadyMixin-DmOC67IJ.js} +1 -1
  34. package/dist/storybook/assets/{RovingTabindexMixin.stories-UMHpYG73.js → RovingTabindexMixin.stories-BWy0Rq8d.js} +1 -1
  35. package/dist/storybook/assets/{Rtc.stories-VQtNSlls.js → Rtc.stories-DrmdqqbI.js} +1 -1
  36. package/dist/storybook/assets/{ScrollShadow.stories-CYdi8Tgp.js → ScrollShadow.stories-DiKFPazh.js} +1 -1
  37. package/dist/storybook/assets/{Switch.stories-D8F2hZCf.js → Switch.stories-BgFnw8_z.js} +1 -1
  38. package/dist/storybook/assets/{Tab.stories-wgBP0lTj.js → Tab.stories-c2wLMooF.js} +1 -1
  39. package/dist/storybook/assets/{Tabs.stories-C00rr5sf.js → Tabs.stories-CjH8seNP.js} +1 -1
  40. package/dist/storybook/assets/{Throttle.stories-BhQEfJbS.js → Throttle.stories-CXysc_QE.js} +1 -1
  41. package/dist/storybook/assets/{Tooltip.stories-CGoZ5qTn.js → Tooltip.stories-6qzyByPm.js} +1 -1
  42. package/dist/storybook/assets/{Upload.stories-B3K-HAXw.js → Upload.stories-BLxykydQ.js} +1 -1
  43. package/dist/storybook/assets/{UploadItem.stories-71ArSoUh.js → UploadItem.stories-CcfcqdJW.js} +1 -1
  44. package/dist/storybook/assets/{Welcome.stories-CihlfFXS.js → Welcome.stories-CzYS_3fH.js} +1 -1
  45. package/dist/storybook/assets/{Widget.stories-1u4KbiJM.js → Widget.stories-Du7T4LAI.js} +1 -1
  46. package/dist/storybook/assets/{WithTooltip-65CFNBJE-B3Jitxw9.js → WithTooltip-65CFNBJE-D4LfXdYt.js} +1 -1
  47. package/dist/storybook/assets/{blocks-C1HaXuQB.js → blocks-DR3fGePu.js} +5 -5
  48. package/dist/storybook/assets/{formatter-EIJCOSYU-Dy9Lt9fs.js → formatter-EIJCOSYU-Cf01216O.js} +1 -1
  49. package/dist/storybook/assets/if-defined-DaMmbcIU.js +1 -0
  50. package/dist/storybook/assets/{iframe-Dx6IxWXF.js → iframe-CQArUhO8.js} +4 -4
  51. package/dist/storybook/assets/{index-OrjedSVh.js → index-B1uI_67G.js} +1 -1
  52. package/dist/storybook/assets/{onFind-YTqjw6W0.js → onFind-BpFkN2Rh.js} +1 -1
  53. package/dist/storybook/assets/{onFind.stories-DEvwTrmx.js → onFind.stories-Cxdeg69X.js} +1 -1
  54. package/dist/storybook/assets/{onRemove.stories-D5mO-Lin.js → onRemove.stories-BHEWpNrE.js} +1 -1
  55. package/dist/storybook/assets/{onVisible.stories-C3Rcz0Eb.js → onVisible.stories-DFJ3S_ZS.js} +1 -1
  56. package/dist/storybook/assets/{style-map-CiMHry7H.js → style-map-DJ83UC3V.js} +1 -1
  57. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-DIZnuhb2.js → syntaxhighlighter-ED5Y7EFY-zYN83mxK.js} +1 -1
  58. package/dist/storybook/iframe.html +1 -1
  59. package/dist/storybook/project.json +1 -1
  60. package/package.json +16 -2
  61. package/dist/storybook/assets/if-defined-CA2KmTqA.js +0 -1
  62. package/src/legacy/tool-ui/src/main/resources/settings.properties +0 -1
  63. package/src/legacy/tool-ui/src/main/webapp/WEB-INF/web.xml +0 -81
  64. package/src/legacy/tool-ui/src/main/webapp/script/bsp-uploader.js +0 -170
  65. package/src/legacy/tool-ui/src/main/webapp/script/bsp-utils.js +0 -393
  66. package/src/legacy/tool-ui/src/main/webapp/script/content/layout-element.js +0 -141
  67. package/src/legacy/tool-ui/src/main/webapp/script/input/query.js +0 -78
  68. package/src/legacy/tool-ui/src/main/webapp/script/input/workflow.js +0 -718
  69. package/src/legacy/tool-ui/src/main/webapp/script/jquery.extra.js +0 -633
  70. package/src/legacy/tool-ui/src/main/webapp/script/v3/Dropbox.js +0 -18
  71. package/src/legacy/tool-ui/src/main/webapp/script/v3/EditFieldUpdate.js +0 -406
  72. package/src/legacy/tool-ui/src/main/webapp/script/v3/EditFieldUpdateCache.js +0 -1
  73. package/src/legacy/tool-ui/src/main/webapp/script/v3/Notification.js +0 -151
  74. package/src/legacy/tool-ui/src/main/webapp/script/v3/content/edit.js +0 -194
  75. package/src/legacy/tool-ui/src/main/webapp/script/v3/content/state.js +0 -785
  76. package/src/legacy/tool-ui/src/main/webapp/script/v3/csrf.js +0 -35
  77. package/src/legacy/tool-ui/src/main/webapp/script/v3/dashboard.js +0 -65
  78. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/dataTransfer.js +0 -129
  79. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/file.js +0 -433
  80. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/object.js +0 -743
  81. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/read-only.js +0 -17
  82. package/src/legacy/tool-ui/src/main/webapp/script/v3/jquery.frame.js +0 -478
  83. package/src/legacy/tool-ui/src/main/webapp/script/v3/jquery.repeatable.js +0 -2406
  84. package/src/legacy/tool-ui/src/main/webapp/script/v3/plugin/popup.d.ts +0 -2
  85. package/src/legacy/tool-ui/src/main/webapp/script/v3/plugin/popup.js +0 -446
  86. package/src/legacy/tool-ui/src/main/webapp/script/v3/search-filters.js +0 -62
  87. package/src/legacy/tool-ui/src/main/webapp/script/v3/search.js +0 -53
  88. package/src/legacy/tool-ui/src/main/webapp/script/v3.js +0 -1049
  89. package/src/legacy/tool-ui/src/main/webapp/v4/Admin.js +0 -16
  90. package/src/legacy/tool-ui/src/main/webapp/v4/AutoExpand.js +0 -84
  91. package/src/legacy/tool-ui/src/main/webapp/v4/AutoSubmit.js +0 -68
  92. package/src/legacy/tool-ui/src/main/webapp/v4/Bridge.js +0 -536
  93. package/src/legacy/tool-ui/src/main/webapp/v4/CheckboxInput.js +0 -22
  94. package/src/legacy/tool-ui/src/main/webapp/v4/ColorInput.js +0 -5
  95. package/src/legacy/tool-ui/src/main/webapp/v4/ColorInputSpectrum.js +0 -107
  96. package/src/legacy/tool-ui/src/main/webapp/v4/ComboInput.js +0 -1491
  97. package/src/legacy/tool-ui/src/main/webapp/v4/CommunityWidget.js +0 -29
  98. package/src/legacy/tool-ui/src/main/webapp/v4/ContentEdit.js +0 -2427
  99. package/src/legacy/tool-ui/src/main/webapp/v4/ContentLock.js +0 -470
  100. package/src/legacy/tool-ui/src/main/webapp/v4/ContentReporting.js +0 -32
  101. package/src/legacy/tool-ui/src/main/webapp/v4/DataTable.js +0 -31
  102. package/src/legacy/tool-ui/src/main/webapp/v4/DateStringField.js +0 -485
  103. package/src/legacy/tool-ui/src/main/webapp/v4/Entry.js +0 -264
  104. package/src/legacy/tool-ui/src/main/webapp/v4/ExternalItemAuth.js +0 -16
  105. package/src/legacy/tool-ui/src/main/webapp/v4/Form.js +0 -31
  106. package/src/legacy/tool-ui/src/main/webapp/v4/Hierarchy.js +0 -100
  107. package/src/legacy/tool-ui/src/main/webapp/v4/Icon.ts +0 -49
  108. package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditor.js +0 -2403
  109. package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditorBundle.js +0 -5
  110. package/src/legacy/tool-ui/src/main/webapp/v4/LinkCarousel.js +0 -40
  111. package/src/legacy/tool-ui/src/main/webapp/v4/LinkList.js +0 -14
  112. package/src/legacy/tool-ui/src/main/webapp/v4/LinkTable.js +0 -123
  113. package/src/legacy/tool-ui/src/main/webapp/v4/Location.js +0 -19
  114. package/src/legacy/tool-ui/src/main/webapp/v4/LocationMap.js +0 -148
  115. package/src/legacy/tool-ui/src/main/webapp/v4/LookingGlass.js +0 -24
  116. package/src/legacy/tool-ui/src/main/webapp/v4/Message.js +0 -14
  117. package/src/legacy/tool-ui/src/main/webapp/v4/NumberBar.js +0 -32
  118. package/src/legacy/tool-ui/src/main/webapp/v4/Page.js +0 -890
  119. package/src/legacy/tool-ui/src/main/webapp/v4/Preview.js +0 -758
  120. package/src/legacy/tool-ui/src/main/webapp/v4/PreviewEditor.js +0 -86
  121. package/src/legacy/tool-ui/src/main/webapp/v4/PreviewOverlay.js +0 -1005
  122. package/src/legacy/tool-ui/src/main/webapp/v4/PubSub.js +0 -47
  123. package/src/legacy/tool-ui/src/main/webapp/v4/QueryField.js +0 -211
  124. package/src/legacy/tool-ui/src/main/webapp/v4/RegionMap.js +0 -215
  125. package/src/legacy/tool-ui/src/main/webapp/v4/RepeatableContentInputGroup.js +0 -160
  126. package/src/legacy/tool-ui/src/main/webapp/v4/RichTextEditor.js +0 -154
  127. package/src/legacy/tool-ui/src/main/webapp/v4/SearchFields.js +0 -281
  128. package/src/legacy/tool-ui/src/main/webapp/v4/SearchResult.js +0 -255
  129. package/src/legacy/tool-ui/src/main/webapp/v4/SharePreview.js +0 -56
  130. package/src/legacy/tool-ui/src/main/webapp/v4/Sortable.js +0 -874
  131. package/src/legacy/tool-ui/src/main/webapp/v4/StyleEmbeddedContent.js +0 -100
  132. package/src/legacy/tool-ui/src/main/webapp/v4/StyleguidePresets.js +0 -357
  133. package/src/legacy/tool-ui/src/main/webapp/v4/TabContainer.js +0 -360
  134. package/src/legacy/tool-ui/src/main/webapp/v4/Taxonomy.js +0 -27
  135. package/src/legacy/tool-ui/src/main/webapp/v4/ThemeBundleEditor.js +0 -224
  136. package/src/legacy/tool-ui/src/main/webapp/v4/TimedContent.js +0 -147
  137. package/src/legacy/tool-ui/src/main/webapp/v4/TimedContentBundle.js +0 -8
  138. package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditor.js +0 -2417
  139. package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditorBundle.js +0 -8
  140. package/src/legacy/tool-ui/src/main/webapp/v4/ViewMirror.js +0 -52
  141. package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.d.ts +0 -13
  142. package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.js +0 -177
  143. package/src/legacy/tool-ui/src/main/webapp/v4/Widget.js +0 -90
  144. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/fileMock.js +0 -1
  145. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/styleMock.js +0 -1
  146. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/textArea.mock.js +0 -20
  147. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/globals.js +0 -770
  148. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/ProseMirror.test.js +0 -16
  149. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/index.html +0 -54
  150. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/comment_manager/CommentManager.test.js +0 -29
  151. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/comment_manager/index.html +0 -35
  152. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/custom_keyboard/CustomKeyboard.js +0 -42
  153. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/custom_keyboard/index.html +0 -37
  154. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/EnhancementManager.test.js +0 -288
  155. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/block.html +0 -38
  156. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/inline.html +0 -38
  157. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/no-popups.html +0 -38
  158. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/list_manager/ListManager.js +0 -257
  159. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/list_manager/index.html +0 -38
  160. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/hierarchal.html +0 -33
  161. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/index.html +0 -33
  162. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/menubar.test.js +0 -195
  163. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/small.html +0 -34
  164. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/tags.html +0 -34
  165. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/PlaceholderManager.test.js +0 -134
  166. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/has-editable-placeholder.html +0 -32
  167. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/has-text.html +0 -34
  168. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/index.html +0 -31
  169. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/table_manager/TableManager.test.js +0 -63
  170. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/table_manager/existing.html +0 -48
  171. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/TrackManager.test.js +0 -291
  172. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/existing.html +0 -39
  173. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/insert.html +0 -37
  174. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/Sortable.test.js +0 -105
  175. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/ProseMirror.test.js +0 -41
  176. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/codemirror-shim.test.js +0 -72
  177. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/collab_manager/CollabManager.test.js +0 -46
  178. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/enhancement_manager/EnhancementManager.test.js +0 -84
  179. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/list_manager/ListManager.test.js +0 -54
  180. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/menubar/menubar.test.js +0 -183
  181. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/spellcheck/SpellCheck.test.js +0 -45
  182. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/settings/BSSerializer.test.js +0 -346
  183. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/settings/menuItemsBuilder.test.js +0 -226
  184. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/utilities.test.js +0 -118
  185. package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/Appetizeio.js +0 -5
  186. package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/AppetizeioEmbedded.js +0 -113
  187. package/src/legacy/tool-ui/src/main/webapp/v4/compat/Fetch.js +0 -16
  188. package/src/legacy/tool-ui/src/main/webapp/v4/compat/jquery.js +0 -32
  189. package/src/legacy/tool-ui/src/main/webapp/v4/compat/requirejs.js +0 -13
  190. package/src/legacy/tool-ui/src/main/webapp/v4/dom/Tether.js +0 -1
  191. package/src/legacy/tool-ui/src/main/webapp/v4/dom/TetherLayout.js +0 -1
  192. package/src/legacy/tool-ui/src/main/webapp/v4/dom/closest.js +0 -1
  193. package/src/legacy/tool-ui/src/main/webapp/v4/dom/create.js +0 -1
  194. package/src/legacy/tool-ui/src/main/webapp/v4/dom/find.js +0 -1
  195. package/src/legacy/tool-ui/src/main/webapp/v4/dom/findAll.js +0 -1
  196. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifClick.js +0 -1
  197. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifMatches.js +0 -1
  198. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifUnmodified.js +0 -1
  199. package/src/legacy/tool-ui/src/main/webapp/v4/dom/index.js +0 -5
  200. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertBefore.js +0 -1
  201. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertFirst.js +0 -1
  202. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertLast.js +0 -1
  203. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onFind.js +0 -1
  204. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onFindOnce.js +0 -1
  205. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onRTEReady.js +0 -1
  206. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onRemove.js +0 -1
  207. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onVisible.js +0 -1
  208. package/src/legacy/tool-ui/src/main/webapp/v4/dom/previousUntil.js +0 -1
  209. package/src/legacy/tool-ui/src/main/webapp/v4/dom/resolveIconCompat.js +0 -40
  210. package/src/legacy/tool-ui/src/main/webapp/v4/rtc/Socket.js +0 -1
  211. package/src/legacy/tool-ui/src/main/webapp/v4/rtc/index.js +0 -1
  212. package/src/legacy/tool-ui/src/main/webapp/v4/rte/ProseMirror.js +0 -909
  213. package/src/legacy/tool-ui/src/main/webapp/v4/rte/README.md +0 -68
  214. package/src/legacy/tool-ui/src/main/webapp/v4/rte/codemirror-shim.d.ts +0 -8
  215. package/src/legacy/tool-ui/src/main/webapp/v4/rte/codemirror-shim.js +0 -274
  216. package/src/legacy/tool-ui/src/main/webapp/v4/rte/collab-workflow.jpeg +0 -0
  217. package/src/legacy/tool-ui/src/main/webapp/v4/rte/interchangeable.ts +0 -250
  218. package/src/legacy/tool-ui/src/main/webapp/v4/rte/mention.js +0 -90
  219. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/PluginProvider.js +0 -124
  220. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/README.md +0 -46
  221. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/AIInlineManager.ts +0 -124
  222. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/views/AIInlineView.ts +0 -1019
  223. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_manager/AiManager.ts +0 -199
  224. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/CollabManager.js +0 -339
  225. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/views/AvatarView.js +0 -96
  226. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/comment_manager/CommentManager.js +0 -348
  227. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/CustomKeyboard.js +0 -110
  228. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/README.md +0 -29
  229. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/EnhancementManager.js +0 -428
  230. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/README.md +0 -63
  231. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/commands.js +0 -690
  232. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/constants.js +0 -12
  233. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/enhancement-creation.jpeg +0 -0
  234. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/index.js +0 -15
  235. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/rte-flow.jpeg +0 -0
  236. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/ActionButtonView.js +0 -86
  237. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/BlockSubmenuView.js +0 -60
  238. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/EnhancementView.js +0 -208
  239. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/PreviewView.js +0 -102
  240. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/SubmenuView.js +0 -365
  241. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/FindReplaceManager.js +0 -239
  242. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/views/FindView.js +0 -604
  243. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/FullscreenManager.js +0 -57
  244. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/README.md +0 -26
  245. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/commands.js +0 -16
  246. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/index.js +0 -4
  247. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/views/FullscreenView.js +0 -474
  248. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/html_editor_manager/htmlEditorManager.js +0 -66
  249. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/html_editor_manager/views/HtmlEditorView.js +0 -97
  250. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/ListManager.js +0 -342
  251. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/README.md +0 -50
  252. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/commands.js +0 -207
  253. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/constants.js +0 -26
  254. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/index.js +0 -4
  255. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/Menubar.js +0 -485
  256. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/README.md +0 -40
  257. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/views/MenuView.js +0 -842
  258. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/paste_manager/PasteManager.js +0 -368
  259. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/placeholder_manager/PlaceHolderManager.js +0 -128
  260. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/raw_text_manager/README.md +0 -13
  261. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/raw_text_manager/RawTextManager.js +0 -96
  262. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/index.js +0 -3
  263. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck-plugin.js +0 -280
  264. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck-service.js +0 -94
  265. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/TableManager.js +0 -57
  266. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/commands.js +0 -97
  267. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableSizerView.js +0 -88
  268. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableView.js +0 -613
  269. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/track_manager/README.md +0 -13
  270. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/track_manager/TrackManager.js +0 -905
  271. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/BSSerializer.js +0 -819
  272. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/README.md +0 -80
  273. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/commands.js +0 -98
  274. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/constants.d.ts +0 -84
  275. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/constants.js +0 -87
  276. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/index.js +0 -13
  277. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/keymapBuilder.js +0 -223
  278. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/menuItemsBuilder.js +0 -559
  279. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/schemaBuilder.js +0 -1281
  280. package/src/legacy/tool-ui/src/main/webapp/v4/rte/utilities.d.ts +0 -4
  281. package/src/legacy/tool-ui/src/main/webapp/v4/rte/utilities.js +0 -359
  282. package/src/legacy/tool-ui/src/main/webapp/v4/theme/ColorRotator.js +0 -1
  283. package/src/legacy/tool-ui/src/main/webapp/v4/util/debounce.js +0 -1
  284. package/src/legacy/tool-ui/src/main/webapp/v4/util/getComponentKey.js +0 -1
  285. package/src/legacy/tool-ui/src/main/webapp/v4/util/noise.js +0 -1
  286. package/src/legacy/tool-ui/src/main/webapp/v4/util/repaint.js +0 -1
  287. package/src/legacy/tool-ui/src/main/webapp/v4/util/storage.js +0 -1
  288. package/src/legacy/tool-ui/src/main/webapp/v4/util/throttle.js +0 -1
  289. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentContent.js +0 -33
  290. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentDeskDashboard.js +0 -217
  291. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssociatedContentWidget.js +0 -7
  292. package/src/legacy/tool-ui/src/main/webapp/v4/widget/BulkUpload.js +0 -19
  293. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Calendar.js +0 -7
  294. package/src/legacy/tool-ui/src/main/webapp/v4/widget/ClosableWindow.js +0 -13
  295. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchAssignments.js +0 -25
  296. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchContent.js +0 -33
  297. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Revisions.js +0 -61
@@ -1,905 +0,0 @@
1
- import { Plugin, PluginKey, TextSelection } from 'prosemirror-state'
2
- import { ChangeSet } from 'prosemirror-changeset'
3
- //import { DefaultEncoder } from 'prosemirror-changeset/src/diff.ts' // Use this when converting to TypeScript
4
-
5
- const key = new PluginKey('track')
6
- const incompatibleMarks = ['comment']
7
- const PENDING = RTE_PENDING || 'Pending' /* global RTE_PENDING */
8
-
9
- const removeEntireLine = (previousNode) => {
10
- return (
11
- previousNode?.isBlock &&
12
- previousNode?.content.size > 0 &&
13
- previousNode?.content.content.every((n) =>
14
- n.marks.some((mark) => mark.type.name === 'del'),
15
- )
16
- )
17
- }
18
-
19
- const removeMark = (tr, node, markType, from, to) => {
20
- if (node.isBlock) {
21
- const marks = node.marks.slice().filter((mark) => mark.type !== markType)
22
- tr = tr.setNodeMarkup(from, node.type, node.attrs, marks)
23
- } else {
24
- tr = tr.removeMark(from, to, markType)
25
- }
26
- return tr
27
- }
28
-
29
- const isAllInserts = (slice) => {
30
- let isAllInserts = true
31
-
32
- slice.content.descendants((child) => {
33
- if (child.type.name !== 'line' && isAllInserts) {
34
- isAllInserts = child.marks.some((mark) => mark.type.name === 'ins')
35
- }
36
- })
37
-
38
- return isAllInserts
39
- }
40
-
41
- /**
42
- * The 'id' of the Enhancement is copied as a 'data-' attribute on the
43
- * 'ins' and 'del' marks for identification when an Enhancement is moved.
44
- */
45
- const marksHaveSameTargetId = (nodeA, nodeB) => {
46
- const markA = nodeA.marks.find(
47
- (mark) => mark.attrs['data-target-id'] !== undefined,
48
- )
49
- const markB = nodeB.marks.find(
50
- (mark) => mark.attrs['data-target-id'] !== undefined,
51
- )
52
- return (
53
- markA &&
54
- markB &&
55
- markA.attrs['data-target-id'] === markB.attrs['data-target-id']
56
- )
57
- }
58
-
59
- /**
60
- * Command triggered when user engages tracking. Dispatches
61
- * a meta update to toggle the tracking state.
62
- */
63
- const doTrack = () => {
64
- return function (state, dispatch, doc) {
65
- const isActive = state.track$.get('activeStates').get('trackChanges')
66
- const storage = window.sessionStorage
67
- const contentId = doc.props.props.ctx.name
68
- const toggleKey = 'BSP.TrackChanges.toggleOn.' + contentId
69
- if (isActive) {
70
- PubSub.publish('disengageTrackManager')
71
- storage.removeItem(toggleKey)
72
- } else {
73
- PubSub.publish('engageTrackManager')
74
- storage.setItem(toggleKey, 1)
75
- }
76
-
77
- dispatch(
78
- state.tr.setMeta(key, {
79
- toggleTracking: true,
80
- }),
81
- )
82
- }
83
- }
84
-
85
- const togglePreview = () => {
86
- return function (state, dispatch, editorView) {
87
- dispatch(
88
- state.tr.setMeta(key, {
89
- togglePreview: true,
90
- }),
91
- )
92
-
93
- editorView.dom.classList.toggle('ProseMirror-previewMode')
94
- }
95
- }
96
-
97
- /**
98
- * This method does the actual work of deleting marks and nodes
99
- * as appropriate for the type of action.
100
- *
101
- * @param {ProseMirror.EditorState} state
102
- * @param {ProseMirror.Dispatch} dispatch
103
- * @param {string} type Indicates the type of action - should be `accept`
104
- * or `reject`
105
- */
106
- const handleAcceptReject = (state, dispatch, view, type) => {
107
- const trackChangesState = state.track$.get('activeStates').get('trackChanges')
108
- state.track$.get('activeStates').set('trackChanges', false)
109
- const { $cursor, ranges } = state.selection
110
- let tr = state.tr
111
- const insertMark = state.schema.marks.ins
112
- const deleteMark = state.schema.marks.del
113
- let removeMarkType = insertMark
114
- let removeNodeType = deleteMark
115
-
116
- if (type === 'reject') {
117
- removeMarkType = deleteMark
118
- removeNodeType = insertMark
119
- }
120
- // User has clicked onto the editor but did not select any text.
121
- if ($cursor) {
122
- if (
123
- removeMarkType.isInSet(
124
- state.storedMarks ||
125
- $cursor.marksAcross(state.selection.$cursor) ||
126
- $cursor.marks(),
127
- )
128
- ) {
129
- const nodeWithMark = state.doc.nodeAt($cursor.pos)
130
- state.doc.descendants((node, pos, parent) => {
131
- if (nodeWithMark === node) {
132
- tr = tr.removeMark(pos, pos + node.nodeSize, removeMarkType)
133
- }
134
- })
135
- }
136
- if (
137
- removeNodeType.isInSet(
138
- state.storedMarks ||
139
- $cursor.marksAcross(state.selection.$cursor) ||
140
- $cursor.marks(),
141
- )
142
- ) {
143
- const nodeWithMark = state.doc.nodeAt($cursor.pos)
144
- state.doc.descendants((node, pos, parent) => {
145
- if (nodeWithMark === node) {
146
- tr = tr.delete(pos, pos + node.nodeSize)
147
- }
148
- })
149
- }
150
- } else {
151
- // We keep track of all the different nodes when user has highlighted
152
- // a selection because the user could highlight both nodes that are marked
153
- // for insertion as well as deletion in 1 highlight. We are using a set
154
- // to make sure only unique nodes are stored.
155
- let numDeleted = 0
156
- let lastLineDeleted = 0
157
- state.selection.content().content.descendants((nodeWithMark) => {
158
- const marks = nodeWithMark.marks
159
- if (removeMarkType.isInSet(marks)) {
160
- state.doc.descendants((node, pos) => {
161
- if (nodeWithMark === node) {
162
- const from = pos - numDeleted
163
- tr = removeMark(
164
- tr,
165
- node,
166
- removeMarkType,
167
- from,
168
- from + node.nodeSize,
169
- )
170
- }
171
- })
172
- }
173
-
174
- if (removeNodeType.isInSet(marks)) {
175
- state.doc.descendants((node, pos, parent) => {
176
- // If a line has been deleted, we don't want to delete any nodes inside again
177
- if (nodeWithMark === node && pos > lastLineDeleted) {
178
- const previousNode = state.doc.nodeAt(pos - 1)
179
- if (previousNode === parent && removeEntireLine(previousNode)) {
180
- tr = tr.delete(
181
- pos - 1 - numDeleted,
182
- pos - 1 + parent.nodeSize - numDeleted,
183
- )
184
- numDeleted = numDeleted + parent.nodeSize
185
- lastLineDeleted = pos - 1 + parent.nodeSize
186
- } else {
187
- tr = tr.delete(pos - numDeleted, pos + node.nodeSize - numDeleted)
188
- numDeleted = numDeleted + node.nodeSize
189
- }
190
- }
191
- })
192
- }
193
- })
194
- }
195
-
196
- dispatch(tr)
197
- state = view.state
198
- tr = state.tr
199
- tr = tr.setMeta(key, {
200
- toggleTracking: true,
201
- })
202
- dispatch(tr)
203
- state.track$.get('activeStates').set('trackChanges', trackChangesState)
204
- }
205
-
206
- /**
207
- * The command fired when users accept tracked changes. Insert marks will be removed
208
- * and nodes with delete marks around them will be removed entirely. When a user
209
- * clicks onto a node with either mark, we will delete the entire mark/remove the node, accordingly.
210
- * When the user selects text/node, we will delete the entire mark/remove the node, accordingly, even
211
- * if the user only selected part of the mark.
212
- */
213
- const acceptChanges = () => {
214
- return function (state, dispatch, view) {
215
- handleAcceptReject(state, dispatch, view, 'accept')
216
- }
217
- }
218
-
219
- /**
220
- * The command fire when users reject all changes.
221
- */
222
- const rejectChangesAll = () => {
223
- return function (state, dispatch, view) {
224
- const trackChangesState = state.track$
225
- .get('activeStates')
226
- .get('trackChanges')
227
- state.track$.get('activeStates').set('trackChanges', false)
228
- const delType = state.schema.marks.del
229
- let tr = state.tr
230
- let numDeleted = 0
231
- state.doc.descendants((node, pos) => {
232
- const marks = node.marks
233
- const hasDel = marks.some((mark) => {
234
- return mark.type.name === 'del'
235
- })
236
- if (hasDel) {
237
- tr = removeMark(
238
- tr,
239
- node,
240
- delType,
241
- pos - numDeleted,
242
- pos + node.nodeSize - numDeleted,
243
- )
244
- }
245
- const hasIns = marks.some((mark) => {
246
- return mark.type.name === 'ins'
247
- })
248
- if (hasIns) {
249
- tr = tr.delete(pos - numDeleted, pos + node.nodeSize - numDeleted)
250
- numDeleted = numDeleted + node.nodeSize
251
- }
252
- })
253
-
254
- dispatch(tr)
255
- state = view.state
256
- tr = state.tr
257
- tr = tr.setMeta(key, 'triggerUpdate')
258
- dispatch(tr)
259
- tr = tr.setMeta(key, {
260
- toggleTracking: true,
261
- })
262
- dispatch(tr)
263
- state.track$.get('activeStates').set('trackChanges', trackChangesState)
264
- }
265
- }
266
-
267
- /**
268
- * The command fired when users accept all changes.
269
- */
270
- const acceptChangesAll = () => {
271
- return function (state, dispatch, view) {
272
- const trackChangesState = state.track$
273
- .get('activeStates')
274
- .get('trackChanges')
275
- state.track$.get('activeStates').set('trackChanges', false)
276
- const insType = state.schema.marks.ins
277
- let tr = state.tr
278
- let numDeleted = 0
279
- let lastLineDeleted = 0
280
- state.doc.descendants((node, pos, parent) => {
281
- const marks = node.marks
282
- const hasIns = marks.some((mark) => mark.type.name === 'ins')
283
- if (hasIns) {
284
- const from = pos - numDeleted
285
- tr = removeMark(tr, node, insType, from, from + node.nodeSize)
286
- }
287
- const hasDel = marks.some((mark) => {
288
- return mark.type.name === 'del'
289
- })
290
- // If a line has been deleted, we don't want to delete any nodes inside again
291
- if (hasDel && pos > lastLineDeleted) {
292
- const previousNode = state.doc.nodeAt(pos - 1)
293
- if (previousNode === parent && removeEntireLine(previousNode)) {
294
- tr = tr.delete(
295
- pos - 1 - numDeleted,
296
- pos - 1 + parent.nodeSize - numDeleted,
297
- )
298
- numDeleted = numDeleted + parent.nodeSize
299
- lastLineDeleted = pos - 1 + parent.nodeSize
300
- } else {
301
- tr = tr.delete(pos - numDeleted, pos + node.nodeSize - numDeleted)
302
- numDeleted = numDeleted + node.nodeSize
303
- }
304
- }
305
- })
306
-
307
- dispatch(tr)
308
- state = view.state
309
- tr = state.tr
310
- tr = tr.setMeta(key, 'triggerUpdate')
311
- dispatch(tr)
312
- tr = tr.setMeta(key, {
313
- toggleTracking: true,
314
- })
315
- dispatch(tr)
316
- state.track$.get('activeStates').set('trackChanges', trackChangesState)
317
- }
318
- }
319
-
320
- /**
321
- * The command fired when users reject tracked changes. Delete marks will be removed
322
- * and nodes with ins marks around them will be removed entirely. When a user
323
- * clicks onto a node with either mark, we will delete the entire mark/remove the node, accordingly.
324
- * When the user selects text/node, we will delete the entire mark/remove the node, accordingly, even
325
- * if the user only selected part of the mark.
326
- */
327
- const rejectChanges = () => {
328
- return function (state, dispatch, view) {
329
- handleAcceptReject(state, dispatch, view, 'reject')
330
- }
331
- }
332
-
333
- const handleInsertion = (change, newState, markType, tr, userLabel, userId) => {
334
- const { fromB, toB } = change
335
- const slice = newState.doc.slice(fromB, toB)
336
- const markedBlocks = []
337
-
338
- const mark = markType.create({
339
- 'data-user-label': userLabel,
340
- 'data-time': PENDING,
341
- 'data-user-id': userId,
342
- title: `${userLabel}: ${PENDING}`,
343
- })
344
-
345
- // The set of "return" checks are for RTE editor inserts that should go through
346
- // without being wrapped in 'ins' tag for tracking.
347
- if (
348
- [...incompatibleMarks].some((mark) => {
349
- return newState.doc.rangeHasMark(
350
- change.fromB,
351
- change.toB,
352
- newState.schema.marks[mark],
353
- )
354
- })
355
- ) {
356
- return tr
357
- }
358
-
359
- // Slice is nothing but new inserts.
360
- if (isAllInserts(slice)) {
361
- return tr
362
- }
363
-
364
- tr = tr.addMark(fromB, toB, mark)
365
-
366
- // Block nodes won't have mark applied with 'addMark' method so must alternatively add
367
- // via the 'setNodeMarkup' method.
368
- slice.content.forEach((node, offset) => {
369
- tr.doc.forEach((child, offset, index) => {
370
- if (
371
- child.isBlock &&
372
- child.attrs.id &&
373
- node.eq(child) &&
374
- !markedBlocks.includes(child)
375
- ) {
376
- markedBlocks.push(child)
377
- const mark = markType.create({
378
- 'data-user-label': userLabel,
379
- 'data-time': PENDING,
380
- 'data-user-id': userId,
381
- 'data-target-id': node?.attrs?.id,
382
- title: `${userLabel}: ${PENDING}`,
383
- })
384
- const marks = node.marks.slice()
385
- marks.push(mark)
386
- tr = tr.setNodeMarkup(offset, node.type, node.attrs, marks)
387
- }
388
- })
389
- })
390
-
391
- return tr
392
- }
393
-
394
- const handleDeletion = (
395
- changes,
396
- change,
397
- oldState,
398
- newState,
399
- markType,
400
- markTypeDeleted,
401
- tr,
402
- transactions,
403
- index,
404
- userLabel,
405
- originalTransaction,
406
- userId,
407
- ) => {
408
- const meta = transactions[index].getMeta(key)
409
- if (meta && meta.hasOwnProperty('acceptDeletion')) {
410
- return tr
411
- }
412
- const { fromA, toA } = change
413
- const slice = oldState.doc.slice(fromA, toA)
414
- const markedBlocks = []
415
- let replaceOffset = 0
416
-
417
- const mark = markTypeDeleted.create({
418
- 'data-user-label': userLabel,
419
- 'data-time': PENDING,
420
- 'data-user-id': userId,
421
- title: `${userLabel}: ${PENDING}`,
422
- })
423
-
424
- // The set of "return" checks are for RTE editor deletes that should go through
425
- // without being wrapped in 'del' tag for tracking.
426
- if (
427
- [...incompatibleMarks].some((mark) => {
428
- return oldState.doc.rangeHasMark(
429
- change.fromA,
430
- change.toA,
431
- oldState.schema.marks[mark],
432
- )
433
- })
434
- ) {
435
- return tr
436
- }
437
-
438
- // Slice is nothing but new inserts.
439
- if (isAllInserts(slice)) {
440
- return tr
441
- }
442
-
443
- // Classify whether the slice contains incompatible marks (e.g. comment) and/or
444
- // non-incompatible text nodes to decide how to handle deletion tracking.
445
- let hasIncompatible = false
446
- let hasNonIncompatibleText = false
447
- slice.content.descendants((child) => {
448
- if (child.isText) {
449
- const isIncompat = incompatibleMarks.some((name) =>
450
- oldState.schema.marks[name].isInSet(child.marks),
451
- )
452
- if (isIncompat) hasIncompatible = true
453
- else hasNonIncompatibleText = true
454
- }
455
- })
456
-
457
- // All incompatible (e.g. cursor backspace within a comment): let deletion run untracked.
458
- if (hasIncompatible && !hasNonIncompatibleText) {
459
- return tr
460
- }
461
-
462
- const isMixed = hasIncompatible && hasNonIncompatibleText
463
-
464
- // An already marked node that was moved (up|down).
465
- if (
466
- slice.size === 1 &&
467
- slice.content.firstChild.marks.some(
468
- (mark) => mark.type.name === markType.name,
469
- )
470
- ) {
471
- return tr
472
- }
473
-
474
- const nodeType = slice.content.firstChild.type
475
- if (
476
- nodeType.name === 'bspBreak' ||
477
- nodeType.name === 'listItem' ||
478
- nodeType.name === 'listItemDiv' ||
479
- nodeType.name === 'orderedList' ||
480
- nodeType.name === 'table' ||
481
- nodeType.name === 'tableCell' ||
482
- nodeType.name === 'tableRow' ||
483
- nodeType.name === 'unorderedList' ||
484
- nodeType.name === 'ul' ||
485
- nodeType.name === 'ol' ||
486
- nodeType.groups.indexOf('aligned') > -1
487
- ) {
488
- return tr
489
- }
490
-
491
- // When a enhancement is moved via the up|down arrows there are 2 steps in transaction
492
- // accounting for a delete and an insert and if so we must account for the potential offset.
493
- if (changes.length > 1) {
494
- // Pressing the down arrow does a delete and then an insert. Pressing the up arrow does
495
- // the opposite so the offset needs to reflect if an actual insert was done prior.
496
- replaceOffset = tr.steps.length === 0 ? 0 : 1
497
- }
498
-
499
- // N.B. Can not use ProseMirror 'insert' since only a Slice will potentially join when cut
500
- // between block nodes and the 'insert' command only takes a Fragment|Node.
501
- tr = tr.replaceRange(fromA + replaceOffset, fromA + replaceOffset, slice)
502
-
503
- // Mixed case: selection spans comment-marked and non-comment text. Apply del marks only
504
- // to non-comment text nodes; leave comment nodes untouched.
505
- if (isMixed) {
506
- const searchStart = fromA + replaceOffset
507
- const searchEnd = searchStart + slice.content.size
508
- tr.doc.nodesBetween(searchStart, searchEnd, (node, pos) => {
509
- if (node.isText) {
510
- const isIncompat = incompatibleMarks.some((name) =>
511
- oldState.schema.marks[name].isInSet(node.marks),
512
- )
513
- if (!isIncompat) {
514
- // Clamp to [searchStart, searchEnd] — adjacent text nodes may have been merged
515
- // by replaceRange, extending the node beyond the re-inserted range.
516
- const markFrom = Math.max(pos, searchStart)
517
- const markTo = Math.min(pos + node.nodeSize, searchEnd)
518
- tr = tr.addMark(markFrom, markTo, mark)
519
- }
520
- }
521
- })
522
-
523
- // Delete any ins-marked nodes within the range; leave comment nodes in place.
524
- const mixedDeletions = []
525
- tr.doc.nodesBetween(searchStart, searchEnd, (node, pos) => {
526
- if (node.marks.some((m) => m.type.name === 'ins')) {
527
- mixedDeletions.push({ from: pos, to: pos + node.nodeSize })
528
- return false
529
- }
530
- })
531
- mixedDeletions.sort((a, b) => b.from - a.from)
532
- mixedDeletions.forEach((range) => {
533
- tr = tr.delete(range.from, range.to)
534
- })
535
-
536
- return tr
537
- }
538
-
539
- tr = tr.addMark(fromA, toA, mark)
540
-
541
- // Block nodes won't have mark applied with 'addMark' method so must alternatively add the
542
- // mark via the 'setNodeMarkup' method.
543
- slice.content.forEach((node, offset) => {
544
- tr.doc.forEach((child, offset, index) => {
545
- if (
546
- child.isBlock &&
547
- child.attrs.id &&
548
- node.eq(child) &&
549
- !markedBlocks.includes(child)
550
- ) {
551
- markedBlocks.push(child)
552
- const mark = markTypeDeleted.create({
553
- 'data-user-label': userLabel,
554
- 'data-time': PENDING,
555
- 'data-user-id': userId,
556
- 'data-target-id': node?.attrs?.id,
557
- title: `${userLabel}: ${PENDING}`,
558
- })
559
- const marks = node.marks.slice()
560
- marks.push(mark)
561
- tr = tr.setNodeMarkup(offset, node.type, node.attrs, marks)
562
- }
563
- })
564
- })
565
-
566
- // Now truly delete any inserts or incompatible marks from selection.
567
- const deletions = []
568
- const searchStart = fromA + replaceOffset
569
- const searchEnd = searchStart + slice.content.size
570
- tr.doc.nodesBetween(searchStart, searchEnd, (node, pos) => {
571
- if (
572
- node.marks.some(
573
- (mark) =>
574
- mark.type.name === 'ins' ||
575
- incompatibleMarks.includes(mark.type.name),
576
- )
577
- ) {
578
- deletions.push({ from: pos, to: pos + node.nodeSize })
579
- return false // don't descend into nodes we'll delete
580
- }
581
- })
582
-
583
- // Reverse order to avoid offset issues when deleting multiple nodes
584
- deletions.sort((a, b) => b.from - a.from)
585
-
586
- deletions.forEach((range) => {
587
- tr = tr.delete(range.from, range.to)
588
- })
589
-
590
- return tr
591
- }
592
-
593
- /**
594
- * Tallies the number of tracked change marks.
595
- *
596
- * @param {ProseMirror.Model.Node} doc The top-level node.
597
- * @return {number} The number of tracked change marks.
598
- */
599
- const getNumTrackedChanges = (doc) => {
600
- let numChanges = 0
601
- const targetIds = new Set()
602
- doc.descendants((node) => {
603
- const marks = node.marks
604
- for (let mark of marks) {
605
- if (mark.type.name === 'ins' || mark.type.name === 'del') {
606
- const dataTargetId = mark.attrs?.['data-target-id']
607
- if (dataTargetId && dataTargetId.length > 0) {
608
- if (targetIds.has(mark.attrs['data-target-id'])) {
609
- continue
610
- } else {
611
- targetIds.add(mark.attrs['data-target-id'])
612
- }
613
- }
614
-
615
- numChanges++
616
- }
617
- }
618
- })
619
- return numChanges
620
- }
621
-
622
- /**
623
- * The track plugin.
624
- *
625
- * @param {*} schema The RTE schema.
626
- */
627
- const trackPlugin = (schema, userLabel, ctx) => {
628
- return new Plugin({
629
- key,
630
- state: {
631
- init(state) {
632
- const pluginState = new Map()
633
- const activeStates = new Map()
634
- const disabledStates = new Map()
635
- const metaData = new Map()
636
- activeStates.set('trackChanges', false)
637
- activeStates.set('acceptChanges', false)
638
- activeStates.set('togglePreview', false)
639
- disabledStates.set('acceptChanges', true)
640
- disabledStates.set('rejectChanges', true)
641
- const numChanges = getNumTrackedChanges(state.doc)
642
- const toggleTrackChangesKey = 'BSP.TrackChanges.toggleOn.' + ctx.name
643
- if (window.sessionStorage.getItem(toggleTrackChangesKey)) {
644
- const subscription = PubSub.subscribe('rteLoaded', (rte) => {
645
- PubSub.publish('engageTrackManager')
646
- rte.view.dispatch(
647
- rte.view.state.tr.setMeta(key, {
648
- toggleTracking: true,
649
- }),
650
- )
651
- subscription.remove()
652
- })
653
- }
654
- if (numChanges) {
655
- disabledStates.set('acceptChangesAll', false)
656
- activeStates.set('acceptChangesAll', true)
657
- disabledStates.set('rejectChangesAll', false)
658
- activeStates.set('rejectChangesAll', true)
659
- metaData.set('acceptChangesAll', numChanges)
660
- metaData.set('rejectChangesAll', numChanges)
661
- } else {
662
- disabledStates.set('acceptChangesAll', true)
663
- activeStates.set('acceptChangesAll', false)
664
- metaData.set('acceptChangesAll', 0)
665
- disabledStates.set('rejectChangesAll', true)
666
- activeStates.set('rejectChangesAll', false)
667
- metaData.set('rejectChangesAll', 0)
668
- }
669
- pluginState.set('activeStates', activeStates)
670
- pluginState.set('disabledStates', disabledStates)
671
- pluginState.set('metaData', metaData)
672
- return pluginState
673
- },
674
- apply(transaction, value, oldState, newState) {
675
- const pluginState = value
676
- const meta = transaction.getMeta(key)
677
- if (meta && meta.hasOwnProperty('toggleTracking')) {
678
- const currentTrackState = pluginState
679
- const newCurrentTrackState = !currentTrackState
680
- .get('activeStates')
681
- .get('trackChanges')
682
- pluginState
683
- .get('activeStates')
684
- .set('trackChanges', newCurrentTrackState)
685
- }
686
- if (meta && meta.hasOwnProperty('togglePreview')) {
687
- const currentTrackState = pluginState
688
- const newCurrentPreviewState = !currentTrackState
689
- .get('activeStates')
690
- .get('togglePreview')
691
- pluginState
692
- .get('activeStates')
693
- .set('togglePreview', newCurrentPreviewState)
694
- }
695
- const markType = schema.marks.ins
696
- const markTypeDelete = schema.marks.del
697
- const { $cursor, empty, ranges } = newState.selection
698
- if (empty && $cursor) {
699
- if (
700
- markType.isInSet(newState.storedMarks || $cursor.marks()) ||
701
- markTypeDelete.isInSet(newState.storedMarks || $cursor.marks())
702
- ) {
703
- pluginState.get('activeStates').set('acceptChanges', true)
704
- pluginState.get('activeStates').set('rejectChanges', true)
705
- pluginState.get('disabledStates').set('acceptChanges', false)
706
- pluginState.get('disabledStates').set('rejectChanges', false)
707
- } else {
708
- pluginState.get('activeStates').set('acceptChanges', false)
709
- pluginState.get('activeStates').set('rejectChanges', false)
710
- pluginState.get('disabledStates').set('acceptChanges', true)
711
- pluginState.get('disabledStates').set('rejectChanges', true)
712
- }
713
- } else {
714
- if (ranges) {
715
- ranges.forEach((range) => {
716
- const { $from, $to } = range
717
- const has =
718
- newState.doc.rangeHasMark($from.pos, $to.pos, markType) ||
719
- newState.doc.rangeHasMark($from.pos, $to.pos, markTypeDelete)
720
- if (has) {
721
- pluginState.get('activeStates').set('acceptChanges', true)
722
- pluginState.get('activeStates').set('rejectChanges', true)
723
- pluginState.get('disabledStates').set('acceptChanges', false)
724
- pluginState.get('disabledStates').set('rejectChanges', false)
725
- } else {
726
- pluginState.get('activeStates').set('acceptChanges', true)
727
- pluginState.get('activeStates').set('rejectChanges', true)
728
- pluginState.get('disabledStates').set('acceptChanges', true)
729
- pluginState.get('disabledStates').set('rejectChanges', true)
730
- }
731
- })
732
- }
733
- }
734
-
735
- let numTrackChanges = getNumTrackedChanges(newState.doc)
736
- if (numTrackChanges) {
737
- pluginState.get('disabledStates').set('acceptChangesAll', false)
738
- pluginState.get('activeStates').set('acceptChangesAll', true)
739
- pluginState.get('metaData').set('acceptChangesAll', numTrackChanges)
740
- pluginState.get('disabledStates').set('rejectChangesAll', false)
741
- pluginState.get('activeStates').set('rejectChangesAll', true)
742
- pluginState.get('metaData').set('rejectChangesAll', numTrackChanges)
743
- } else {
744
- pluginState.get('disabledStates').set('acceptChangesAll', true)
745
- pluginState.get('activeStates').set('acceptChangesAll', false)
746
- pluginState.get('metaData').set('acceptChangesAll', 0)
747
- pluginState.get('disabledStates').set('rejectChangesAll', true)
748
- pluginState.get('activeStates').set('rejectChangesAll', false)
749
- pluginState.get('metaData').set('rejectChangesAll', 0)
750
- }
751
-
752
- transaction.setMeta('prevStateFromTo', {
753
- prevFrom: oldState.selection.from,
754
- prevTo: oldState.selection.to,
755
- })
756
-
757
- pluginState.set('prevPosition', oldState.selection.from)
758
- return pluginState
759
- },
760
- },
761
- appendTransaction(transactions, oldState, newState) {
762
- const historyPlugin = newState.history$
763
- if (
764
- historyPlugin &&
765
- historyPlugin.undone &&
766
- historyPlugin.undone.eventCount
767
- ) {
768
- return
769
- }
770
- const schema = newState.config.schema
771
- const markType = schema.marks.ins
772
- const markTypeDeleted = schema.marks.del
773
- const pluginState = newState[key.key]
774
- const userId = ctx.dataset.userId
775
-
776
- const isTracking = pluginState.get('activeStates').get('trackChanges')
777
-
778
- if (!isTracking || transactions[0].meta.appendedTransaction) {
779
- return
780
- }
781
-
782
- let tr = newState.tr
783
- transactions.forEach((transaction, index) => {
784
- if (transaction.meta.removeFromTracking) {
785
- return
786
- }
787
-
788
- // Copy of PM DefaultEncoder updated so compareTokens always returns null for whole word replacement
789
- const changeSet = ChangeSet.create(oldState.doc, undefined, {
790
- // Standard behavior: returns just the character, ignoring marks.
791
- encodeCharacter: (char) => char,
792
- // Standard behavior: returns the node type name.
793
- encodeNodeStart: (node) => node.type.name,
794
- // Standard behavior: returns a fixed value (e.g., -1) for all node ends.
795
- encodeNodeEnd: (node) => {
796
- const type = node.type
797
- let cache =
798
- type.schema.cached.changeSetIDs ||
799
- (type.schema.cached.changeSetIDs = Object.create(null))
800
- let id = cache[type.name]
801
- if (id === null)
802
- cache[type.name] = id =
803
- Object.keys(type.schema.nodes).indexOf(type.name) + 1
804
- return id
805
- },
806
- // Brightspot overriden so diff always returns false for whole word replacement.
807
- compareTokens: (a, b) => false,
808
- }).addSteps(newState.doc, transaction.mapping.maps)
809
-
810
- if (changeSet.changes.length) {
811
- if (
812
- changeSet.changes[0].inserted.length &&
813
- changeSet.changes[0].deleted.length
814
- ) {
815
- // User highlighted text and then typed over it
816
- changeSet.changes.forEach((change) => {
817
- change.inserted.forEach((span) => {
818
- tr = handleInsertion(
819
- change,
820
- newState,
821
- markType,
822
- tr,
823
- userLabel,
824
- userId,
825
- )
826
- tr = handleDeletion(
827
- changeSet.changes,
828
- change,
829
- oldState,
830
- newState,
831
- markType,
832
- markTypeDeleted,
833
- tr,
834
- transactions,
835
- index,
836
- userLabel,
837
- transaction,
838
- userId,
839
- )
840
- })
841
- })
842
- } else {
843
- changeSet.changes.forEach((change) => {
844
- change.inserted.forEach((span) => {
845
- tr = handleInsertion(
846
- change,
847
- newState,
848
- markType,
849
- tr,
850
- userLabel,
851
- userId,
852
- )
853
- })
854
-
855
- change.deleted.forEach((span) => {
856
- tr = handleDeletion(
857
- changeSet.changes,
858
- change,
859
- oldState,
860
- newState,
861
- markType,
862
- markTypeDeleted,
863
- tr,
864
- transactions,
865
- index,
866
- userLabel,
867
- transaction,
868
- userId,
869
- )
870
- })
871
- })
872
- }
873
- }
874
- })
875
-
876
- // ProseMirror defaults the cursor to the right of inserted content, but with Track
877
- // enabled when the user hits [Backspace] the cursor should move to the left.
878
- if (this.keyDown === 'Backspace' && tr.steps.length > 0) {
879
- const from = tr.steps[0].from
880
- const selection = new TextSelection(
881
- tr.doc.resolve(from),
882
- tr.doc.resolve(from),
883
- )
884
- tr = tr.setSelection(selection)
885
- }
886
- this.keyDown = undefined
887
-
888
- return tr
889
- },
890
- props: {
891
- handleKeyDown(view, event) {
892
- this.keyDown = event.key
893
- },
894
- },
895
- })
896
- }
897
- export {
898
- trackPlugin,
899
- doTrack,
900
- rejectChanges,
901
- acceptChanges,
902
- togglePreview,
903
- acceptChangesAll,
904
- rejectChangesAll,
905
- }