@brightspot/ui 3.0.1-cms-ui-migration.1 → 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 (303) hide show
  1. package/README.md +54 -35
  2. package/dist/custom-elements.json +2536 -2536
  3. package/dist/storybook/assets/{ActionBar.stories-BhdqLyzJ.js → ActionBar.stories-CSxtZl7v.js} +1 -1
  4. package/dist/storybook/assets/{ActionItem.stories-17zjMCkO.js → ActionItem.stories-BWcMRMP3.js} +1 -1
  5. package/dist/storybook/assets/{Avatar.stories-C5m3-zOH.js → Avatar.stories-CYTUGXzH.js} +1 -1
  6. package/dist/storybook/assets/{AvatarGroup.stories-DE88PJ6w.js → AvatarGroup.stories-CSYBYo_5.js} +1 -1
  7. package/dist/storybook/assets/{Badge.stories-D905HmvO.js → Badge.stories-LuF4BuVr.js} +1 -1
  8. package/dist/storybook/assets/{Button-ANyLESGb.js → Button-CrXCMxHb.js} +1 -1
  9. package/dist/storybook/assets/{Button.stories-DbH6q5L3.js → Button.stories-JVwxdrdM.js} +1 -1
  10. package/dist/storybook/assets/{ButtonGroup.stories-loqgAB7p.js → ButtonGroup.stories-qtq64a1H.js} +1 -1
  11. package/dist/storybook/assets/{Celebrate.stories-CRO3rSgp.js → Celebrate.stories-DjTtaSd6.js} +1 -1
  12. package/dist/storybook/assets/{Checkbox.stories-SZtgfbFe.js → Checkbox.stories-v1Pr5mL6.js} +1 -1
  13. package/dist/storybook/assets/{CircularProgress.stories-VayPxO4M.js → CircularProgress.stories-DkV7PJ4D.js} +1 -1
  14. package/dist/storybook/assets/{ClipboardMixin.stories-0EB2O2zT.js → ClipboardMixin.stories-Dh5c7uSM.js} +1 -1
  15. package/dist/storybook/assets/{Color-6BZIO3FS-CFpcD80i.js → Color-6BZIO3FS-B1gcREt6.js} +1 -1
  16. package/dist/storybook/assets/{Colors.stories-BJGM6xnp.js → Colors.stories-DnubtRqn.js} +1 -1
  17. package/dist/storybook/assets/{CombinedEffects.stories-DUwocYcn.js → CombinedEffects.stories-By6akSve.js} +1 -1
  18. package/dist/storybook/assets/{ComponentStatesMixin-MUqdPCf7.js → ComponentStatesMixin-CPLGv3h-.js} +1 -1
  19. package/dist/storybook/assets/{ComponentStatesMixin.stories-DjrxNwE7.js → ComponentStatesMixin.stories-CiQ_lyhm.js} +1 -1
  20. package/dist/storybook/assets/{CopyToClipboard.stories-DptOcPq6.js → CopyToClipboard.stories-cJ7rl3mj.js} +1 -1
  21. package/dist/storybook/assets/{Debounce.stories-BbcIWmhD.js → Debounce.stories-Bw-goobU.js} +1 -1
  22. package/dist/storybook/assets/{DocsRenderer-LL677BLK-Yy8fjeNG.js → DocsRenderer-LL677BLK-CNW57dGQ.js} +3 -3
  23. package/dist/storybook/assets/{Dropdown.stories-Du3LrBR6.js → Dropdown.stories-CwC3HXXd.js} +1 -1
  24. package/dist/storybook/assets/{EmptyState.stories-Dy9P8aOY.js → EmptyState.stories-BUEJwuhP.js} +1 -1
  25. package/dist/storybook/assets/{Events.stories-DvdVQxDf.js → Events.stories-D1mf9buv.js} +1 -1
  26. package/dist/storybook/assets/{Heading.stories-BQ1jFOKn.js → Heading.stories-DO906G4P.js} +1 -1
  27. package/dist/storybook/assets/{HueRipple.stories-CrZFjnRl.js → HueRipple.stories-BOySRSZB.js} +1 -1
  28. package/dist/storybook/assets/{Icon.stories-C2Tj8Lx1.js → Icon.stories-BsqgTbdG.js} +1 -1
  29. package/dist/storybook/assets/{IconButton.stories-DFqouOJb.js → IconButton.stories-aza1AAKk.js} +1 -1
  30. package/dist/storybook/assets/{LinearProgress.stories-DtNw3QX3.js → LinearProgress.stories-CDYmiiex.js} +1 -1
  31. package/dist/storybook/assets/{Pagination.stories-CFiZ9APs.js → Pagination.stories-LXB-x7YB.js} +1 -1
  32. package/dist/storybook/assets/{Popover.stories-DkkTuYag.js → Popover.stories-DY1HesPJ.js} +1 -1
  33. package/dist/storybook/assets/{ReadyMixin-BA01Vm_B.js → ReadyMixin-DmOC67IJ.js} +1 -1
  34. package/dist/storybook/assets/{RovingTabindexMixin.stories-BesAqt48.js → RovingTabindexMixin.stories-BWy0Rq8d.js} +1 -1
  35. package/dist/storybook/assets/{Rtc.stories-iTw43rjp.js → Rtc.stories-DrmdqqbI.js} +1 -1
  36. package/dist/storybook/assets/{ScrollShadow.stories-QYqQCcAo.js → ScrollShadow.stories-DiKFPazh.js} +1 -1
  37. package/dist/storybook/assets/{Switch.stories-BKArq9Mk.js → Switch.stories-BgFnw8_z.js} +1 -1
  38. package/dist/storybook/assets/{Tab.stories-8UdDPvE5.js → Tab.stories-c2wLMooF.js} +1 -1
  39. package/dist/storybook/assets/{Tabs.stories-BPGMZ552.js → Tabs.stories-CjH8seNP.js} +1 -1
  40. package/dist/storybook/assets/{Throttle.stories-CYl5d0r6.js → Throttle.stories-CXysc_QE.js} +1 -1
  41. package/dist/storybook/assets/{Tooltip.stories-cZ0zSlwX.js → Tooltip.stories-6qzyByPm.js} +1 -1
  42. package/dist/storybook/assets/{Upload.stories-CPC7N0Ed.js → Upload.stories-BLxykydQ.js} +1 -1
  43. package/dist/storybook/assets/{UploadItem.stories-D0LClT0a.js → UploadItem.stories-CcfcqdJW.js} +1 -1
  44. package/dist/storybook/assets/{Welcome.stories-C8JUaRas.js → Welcome.stories-CzYS_3fH.js} +1 -1
  45. package/dist/storybook/assets/{Widget.stories-C1FxF24-.js → Widget.stories-Du7T4LAI.js} +1 -1
  46. package/dist/storybook/assets/{WithTooltip-65CFNBJE-BMBo-fie.js → WithTooltip-65CFNBJE-D4LfXdYt.js} +1 -1
  47. package/dist/storybook/assets/{blocks-BTsuXRXZ.js → blocks-DR3fGePu.js} +5 -5
  48. package/dist/storybook/assets/{formatter-EIJCOSYU-BJ1Cwrpx.js → formatter-EIJCOSYU-Cf01216O.js} +1 -1
  49. package/dist/storybook/assets/if-defined-DaMmbcIU.js +1 -0
  50. package/dist/storybook/assets/{iframe-B3YWTqkR.js → iframe-CQArUhO8.js} +4 -4
  51. package/dist/storybook/assets/{iframe-BgFj0b5u.css → iframe-D0roG0J-.css} +1 -1
  52. package/dist/storybook/assets/{index-BBUTVEdP.js → index-B1uI_67G.js} +1 -1
  53. package/dist/storybook/assets/{onFind-NC0lGo-r.js → onFind-BpFkN2Rh.js} +1 -1
  54. package/dist/storybook/assets/{onFind.stories-CqbwQgQF.js → onFind.stories-Cxdeg69X.js} +1 -1
  55. package/dist/storybook/assets/{onRemove.stories-Y8Ycs77o.js → onRemove.stories-BHEWpNrE.js} +1 -1
  56. package/dist/storybook/assets/{onVisible.stories-CcLUE35q.js → onVisible.stories-DFJ3S_ZS.js} +1 -1
  57. package/dist/storybook/assets/{style-map-MSB_ngx3.js → style-map-DJ83UC3V.js} +1 -1
  58. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-BjkjEDMG.js → syntaxhighlighter-ED5Y7EFY-zYN83mxK.js} +1 -1
  59. package/dist/storybook/iframe.html +2 -2
  60. package/dist/storybook/project.json +1 -1
  61. package/dist/tailwind.config.d.ts +4 -1
  62. package/dist/tailwind.config.d.ts.map +1 -1
  63. package/dist/tailwind.config.js +0 -2
  64. package/dist/tailwind.config.js.map +1 -1
  65. package/dist/tailwind.config.ts +0 -2
  66. package/package.json +16 -2
  67. package/dist/storybook/assets/if-defined-BPCd2NXs.js +0 -1
  68. package/src/legacy/tool-ui/src/main/resources/settings.properties +0 -1
  69. package/src/legacy/tool-ui/src/main/webapp/WEB-INF/web.xml +0 -81
  70. package/src/legacy/tool-ui/src/main/webapp/script/bsp-uploader.js +0 -170
  71. package/src/legacy/tool-ui/src/main/webapp/script/bsp-utils.js +0 -393
  72. package/src/legacy/tool-ui/src/main/webapp/script/content/layout-element.js +0 -141
  73. package/src/legacy/tool-ui/src/main/webapp/script/input/query.js +0 -78
  74. package/src/legacy/tool-ui/src/main/webapp/script/input/workflow.js +0 -718
  75. package/src/legacy/tool-ui/src/main/webapp/script/jquery.extra.js +0 -633
  76. package/src/legacy/tool-ui/src/main/webapp/script/v3/Dropbox.js +0 -18
  77. package/src/legacy/tool-ui/src/main/webapp/script/v3/EditFieldUpdate.js +0 -406
  78. package/src/legacy/tool-ui/src/main/webapp/script/v3/EditFieldUpdateCache.js +0 -1
  79. package/src/legacy/tool-ui/src/main/webapp/script/v3/Notification.js +0 -151
  80. package/src/legacy/tool-ui/src/main/webapp/script/v3/content/edit.js +0 -194
  81. package/src/legacy/tool-ui/src/main/webapp/script/v3/content/state.js +0 -785
  82. package/src/legacy/tool-ui/src/main/webapp/script/v3/csrf.js +0 -35
  83. package/src/legacy/tool-ui/src/main/webapp/script/v3/dashboard.js +0 -65
  84. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/dataTransfer.js +0 -129
  85. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/file.js +0 -433
  86. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/object.js +0 -743
  87. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/read-only.js +0 -17
  88. package/src/legacy/tool-ui/src/main/webapp/script/v3/jquery.frame.js +0 -478
  89. package/src/legacy/tool-ui/src/main/webapp/script/v3/jquery.repeatable.js +0 -2406
  90. package/src/legacy/tool-ui/src/main/webapp/script/v3/plugin/popup.d.ts +0 -2
  91. package/src/legacy/tool-ui/src/main/webapp/script/v3/plugin/popup.js +0 -446
  92. package/src/legacy/tool-ui/src/main/webapp/script/v3/search-filters.js +0 -62
  93. package/src/legacy/tool-ui/src/main/webapp/script/v3/search.js +0 -53
  94. package/src/legacy/tool-ui/src/main/webapp/script/v3.js +0 -1049
  95. package/src/legacy/tool-ui/src/main/webapp/v4/Admin.js +0 -16
  96. package/src/legacy/tool-ui/src/main/webapp/v4/AutoExpand.js +0 -84
  97. package/src/legacy/tool-ui/src/main/webapp/v4/AutoSubmit.js +0 -68
  98. package/src/legacy/tool-ui/src/main/webapp/v4/Bridge.js +0 -536
  99. package/src/legacy/tool-ui/src/main/webapp/v4/CheckboxInput.js +0 -22
  100. package/src/legacy/tool-ui/src/main/webapp/v4/ColorInput.js +0 -5
  101. package/src/legacy/tool-ui/src/main/webapp/v4/ColorInputSpectrum.js +0 -107
  102. package/src/legacy/tool-ui/src/main/webapp/v4/ComboInput.js +0 -1491
  103. package/src/legacy/tool-ui/src/main/webapp/v4/CommunityWidget.js +0 -29
  104. package/src/legacy/tool-ui/src/main/webapp/v4/ContentEdit.js +0 -2427
  105. package/src/legacy/tool-ui/src/main/webapp/v4/ContentLock.js +0 -470
  106. package/src/legacy/tool-ui/src/main/webapp/v4/ContentReporting.js +0 -32
  107. package/src/legacy/tool-ui/src/main/webapp/v4/DataTable.js +0 -31
  108. package/src/legacy/tool-ui/src/main/webapp/v4/DateStringField.js +0 -485
  109. package/src/legacy/tool-ui/src/main/webapp/v4/Entry.js +0 -264
  110. package/src/legacy/tool-ui/src/main/webapp/v4/ExternalItemAuth.js +0 -16
  111. package/src/legacy/tool-ui/src/main/webapp/v4/Form.js +0 -31
  112. package/src/legacy/tool-ui/src/main/webapp/v4/Hierarchy.js +0 -100
  113. package/src/legacy/tool-ui/src/main/webapp/v4/Icon.ts +0 -49
  114. package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditor.js +0 -2403
  115. package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditorBundle.js +0 -5
  116. package/src/legacy/tool-ui/src/main/webapp/v4/LinkCarousel.js +0 -40
  117. package/src/legacy/tool-ui/src/main/webapp/v4/LinkList.js +0 -14
  118. package/src/legacy/tool-ui/src/main/webapp/v4/LinkTable.js +0 -123
  119. package/src/legacy/tool-ui/src/main/webapp/v4/Location.js +0 -19
  120. package/src/legacy/tool-ui/src/main/webapp/v4/LocationMap.js +0 -148
  121. package/src/legacy/tool-ui/src/main/webapp/v4/LookingGlass.js +0 -24
  122. package/src/legacy/tool-ui/src/main/webapp/v4/Message.js +0 -14
  123. package/src/legacy/tool-ui/src/main/webapp/v4/NumberBar.js +0 -32
  124. package/src/legacy/tool-ui/src/main/webapp/v4/Page.js +0 -890
  125. package/src/legacy/tool-ui/src/main/webapp/v4/Preview.js +0 -758
  126. package/src/legacy/tool-ui/src/main/webapp/v4/PreviewEditor.js +0 -86
  127. package/src/legacy/tool-ui/src/main/webapp/v4/PreviewOverlay.js +0 -1005
  128. package/src/legacy/tool-ui/src/main/webapp/v4/PubSub.js +0 -47
  129. package/src/legacy/tool-ui/src/main/webapp/v4/QueryField.js +0 -211
  130. package/src/legacy/tool-ui/src/main/webapp/v4/RegionMap.js +0 -215
  131. package/src/legacy/tool-ui/src/main/webapp/v4/RepeatableContentInputGroup.js +0 -160
  132. package/src/legacy/tool-ui/src/main/webapp/v4/RichTextEditor.js +0 -154
  133. package/src/legacy/tool-ui/src/main/webapp/v4/SearchFields.js +0 -281
  134. package/src/legacy/tool-ui/src/main/webapp/v4/SearchResult.js +0 -255
  135. package/src/legacy/tool-ui/src/main/webapp/v4/SharePreview.js +0 -56
  136. package/src/legacy/tool-ui/src/main/webapp/v4/Sortable.js +0 -874
  137. package/src/legacy/tool-ui/src/main/webapp/v4/StyleEmbeddedContent.js +0 -100
  138. package/src/legacy/tool-ui/src/main/webapp/v4/StyleguidePresets.js +0 -357
  139. package/src/legacy/tool-ui/src/main/webapp/v4/TabContainer.js +0 -360
  140. package/src/legacy/tool-ui/src/main/webapp/v4/Taxonomy.js +0 -27
  141. package/src/legacy/tool-ui/src/main/webapp/v4/ThemeBundleEditor.js +0 -224
  142. package/src/legacy/tool-ui/src/main/webapp/v4/TimedContent.js +0 -147
  143. package/src/legacy/tool-ui/src/main/webapp/v4/TimedContentBundle.js +0 -8
  144. package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditor.js +0 -2417
  145. package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditorBundle.js +0 -8
  146. package/src/legacy/tool-ui/src/main/webapp/v4/ViewMirror.js +0 -52
  147. package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.d.ts +0 -13
  148. package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.js +0 -177
  149. package/src/legacy/tool-ui/src/main/webapp/v4/Widget.js +0 -90
  150. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/fileMock.js +0 -1
  151. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/styleMock.js +0 -1
  152. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/textArea.mock.js +0 -20
  153. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/globals.js +0 -770
  154. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/ProseMirror.test.js +0 -16
  155. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/index.html +0 -54
  156. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/comment_manager/CommentManager.test.js +0 -29
  157. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/comment_manager/index.html +0 -35
  158. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/custom_keyboard/CustomKeyboard.js +0 -42
  159. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/custom_keyboard/index.html +0 -37
  160. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/EnhancementManager.test.js +0 -288
  161. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/block.html +0 -38
  162. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/inline.html +0 -38
  163. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/no-popups.html +0 -38
  164. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/list_manager/ListManager.js +0 -257
  165. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/list_manager/index.html +0 -38
  166. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/hierarchal.html +0 -33
  167. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/index.html +0 -33
  168. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/menubar.test.js +0 -195
  169. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/small.html +0 -34
  170. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/tags.html +0 -34
  171. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/PlaceholderManager.test.js +0 -134
  172. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/has-editable-placeholder.html +0 -32
  173. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/has-text.html +0 -34
  174. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/index.html +0 -31
  175. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/table_manager/TableManager.test.js +0 -63
  176. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/table_manager/existing.html +0 -48
  177. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/TrackManager.test.js +0 -291
  178. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/existing.html +0 -39
  179. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/insert.html +0 -37
  180. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/Sortable.test.js +0 -105
  181. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/ProseMirror.test.js +0 -41
  182. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/codemirror-shim.test.js +0 -72
  183. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/collab_manager/CollabManager.test.js +0 -46
  184. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/enhancement_manager/EnhancementManager.test.js +0 -84
  185. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/list_manager/ListManager.test.js +0 -54
  186. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/menubar/menubar.test.js +0 -183
  187. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/spellcheck/SpellCheck.test.js +0 -45
  188. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/settings/BSSerializer.test.js +0 -346
  189. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/settings/menuItemsBuilder.test.js +0 -226
  190. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/utilities.test.js +0 -118
  191. package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/Appetizeio.js +0 -5
  192. package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/AppetizeioEmbedded.js +0 -113
  193. package/src/legacy/tool-ui/src/main/webapp/v4/compat/Fetch.js +0 -16
  194. package/src/legacy/tool-ui/src/main/webapp/v4/compat/jquery.js +0 -32
  195. package/src/legacy/tool-ui/src/main/webapp/v4/compat/requirejs.js +0 -13
  196. package/src/legacy/tool-ui/src/main/webapp/v4/dom/Tether.js +0 -1
  197. package/src/legacy/tool-ui/src/main/webapp/v4/dom/TetherLayout.js +0 -1
  198. package/src/legacy/tool-ui/src/main/webapp/v4/dom/closest.js +0 -1
  199. package/src/legacy/tool-ui/src/main/webapp/v4/dom/create.js +0 -1
  200. package/src/legacy/tool-ui/src/main/webapp/v4/dom/find.js +0 -1
  201. package/src/legacy/tool-ui/src/main/webapp/v4/dom/findAll.js +0 -1
  202. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifClick.js +0 -1
  203. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifMatches.js +0 -1
  204. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifUnmodified.js +0 -1
  205. package/src/legacy/tool-ui/src/main/webapp/v4/dom/index.js +0 -5
  206. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertBefore.js +0 -1
  207. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertFirst.js +0 -1
  208. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertLast.js +0 -1
  209. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onFind.js +0 -1
  210. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onFindOnce.js +0 -1
  211. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onRTEReady.js +0 -1
  212. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onRemove.js +0 -1
  213. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onVisible.js +0 -1
  214. package/src/legacy/tool-ui/src/main/webapp/v4/dom/previousUntil.js +0 -1
  215. package/src/legacy/tool-ui/src/main/webapp/v4/dom/resolveIconCompat.js +0 -40
  216. package/src/legacy/tool-ui/src/main/webapp/v4/rtc/Socket.js +0 -1
  217. package/src/legacy/tool-ui/src/main/webapp/v4/rtc/index.js +0 -1
  218. package/src/legacy/tool-ui/src/main/webapp/v4/rte/ProseMirror.js +0 -909
  219. package/src/legacy/tool-ui/src/main/webapp/v4/rte/README.md +0 -68
  220. package/src/legacy/tool-ui/src/main/webapp/v4/rte/codemirror-shim.d.ts +0 -8
  221. package/src/legacy/tool-ui/src/main/webapp/v4/rte/codemirror-shim.js +0 -274
  222. package/src/legacy/tool-ui/src/main/webapp/v4/rte/collab-workflow.jpeg +0 -0
  223. package/src/legacy/tool-ui/src/main/webapp/v4/rte/interchangeable.ts +0 -250
  224. package/src/legacy/tool-ui/src/main/webapp/v4/rte/mention.js +0 -90
  225. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/PluginProvider.js +0 -124
  226. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/README.md +0 -46
  227. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/AIInlineManager.ts +0 -124
  228. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/views/AIInlineView.ts +0 -1019
  229. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_manager/AiManager.ts +0 -199
  230. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/CollabManager.js +0 -339
  231. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/views/AvatarView.js +0 -96
  232. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/comment_manager/CommentManager.js +0 -348
  233. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/CustomKeyboard.js +0 -110
  234. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/README.md +0 -29
  235. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/EnhancementManager.js +0 -428
  236. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/README.md +0 -63
  237. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/commands.js +0 -690
  238. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/constants.js +0 -12
  239. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/enhancement-creation.jpeg +0 -0
  240. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/index.js +0 -15
  241. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/rte-flow.jpeg +0 -0
  242. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/ActionButtonView.js +0 -86
  243. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/BlockSubmenuView.js +0 -60
  244. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/EnhancementView.js +0 -208
  245. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/PreviewView.js +0 -102
  246. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/SubmenuView.js +0 -365
  247. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/FindReplaceManager.js +0 -239
  248. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/views/FindView.js +0 -604
  249. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/FullscreenManager.js +0 -57
  250. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/README.md +0 -26
  251. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/commands.js +0 -16
  252. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/index.js +0 -4
  253. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/views/FullscreenView.js +0 -474
  254. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/html_editor_manager/htmlEditorManager.js +0 -66
  255. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/html_editor_manager/views/HtmlEditorView.js +0 -97
  256. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/ListManager.js +0 -342
  257. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/README.md +0 -50
  258. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/commands.js +0 -207
  259. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/constants.js +0 -26
  260. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/index.js +0 -4
  261. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/Menubar.js +0 -485
  262. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/README.md +0 -40
  263. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/views/MenuView.js +0 -842
  264. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/paste_manager/PasteManager.js +0 -368
  265. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/placeholder_manager/PlaceHolderManager.js +0 -128
  266. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/raw_text_manager/README.md +0 -13
  267. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/raw_text_manager/RawTextManager.js +0 -96
  268. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/index.js +0 -3
  269. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck-plugin.js +0 -280
  270. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck-service.js +0 -94
  271. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/TableManager.js +0 -57
  272. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/commands.js +0 -97
  273. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableSizerView.js +0 -88
  274. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableView.js +0 -613
  275. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/track_manager/README.md +0 -13
  276. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/track_manager/TrackManager.js +0 -905
  277. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/BSSerializer.js +0 -819
  278. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/README.md +0 -80
  279. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/commands.js +0 -98
  280. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/constants.d.ts +0 -84
  281. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/constants.js +0 -87
  282. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/index.js +0 -13
  283. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/keymapBuilder.js +0 -223
  284. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/menuItemsBuilder.js +0 -559
  285. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/schemaBuilder.js +0 -1281
  286. package/src/legacy/tool-ui/src/main/webapp/v4/rte/utilities.d.ts +0 -4
  287. package/src/legacy/tool-ui/src/main/webapp/v4/rte/utilities.js +0 -359
  288. package/src/legacy/tool-ui/src/main/webapp/v4/theme/ColorRotator.js +0 -1
  289. package/src/legacy/tool-ui/src/main/webapp/v4/util/debounce.js +0 -1
  290. package/src/legacy/tool-ui/src/main/webapp/v4/util/getComponentKey.js +0 -1
  291. package/src/legacy/tool-ui/src/main/webapp/v4/util/noise.js +0 -1
  292. package/src/legacy/tool-ui/src/main/webapp/v4/util/repaint.js +0 -1
  293. package/src/legacy/tool-ui/src/main/webapp/v4/util/storage.js +0 -1
  294. package/src/legacy/tool-ui/src/main/webapp/v4/util/throttle.js +0 -1
  295. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentContent.js +0 -33
  296. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentDeskDashboard.js +0 -217
  297. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssociatedContentWidget.js +0 -7
  298. package/src/legacy/tool-ui/src/main/webapp/v4/widget/BulkUpload.js +0 -19
  299. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Calendar.js +0 -7
  300. package/src/legacy/tool-ui/src/main/webapp/v4/widget/ClosableWindow.js +0 -13
  301. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchAssignments.js +0 -25
  302. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchContent.js +0 -33
  303. 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
- }