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

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 (320) hide show
  1. package/README.md +56 -37
  2. package/dist/custom-elements.json +1807 -1807
  3. package/dist/storybook/assets/{ActionBar.stories-hJ_5cm-P.js → ActionBar.stories-BZAVK1QG.js} +1 -1
  4. package/dist/storybook/assets/{ActionItem.stories-Bjx2803w.js → ActionItem.stories-BqiWvlWi.js} +1 -1
  5. package/dist/storybook/assets/{Avatar.stories-Cj0YgZ6f.js → Avatar.stories-DkdB6hd_.js} +1 -1
  6. package/dist/storybook/assets/{AvatarGroup.stories-Lh_sQFCU.js → AvatarGroup.stories-DODqaIix.js} +1 -1
  7. package/dist/storybook/assets/{Badge.stories-BL7RUibx.js → Badge.stories-DZoum08S.js} +1 -1
  8. package/dist/storybook/assets/{Button-BPHNcxqK.js → Button-BkmBgNO-.js} +1 -1
  9. package/dist/storybook/assets/{Button.stories-CAYO4gdU.js → Button.stories-BFhCL2dp.js} +1 -1
  10. package/dist/storybook/assets/{ButtonGroup.stories-Cd13Us5K.js → ButtonGroup.stories-DlTGTvkq.js} +1 -1
  11. package/dist/storybook/assets/{Celebrate.stories-D_KE3Qze.js → Celebrate.stories-m4d4zTEz.js} +1 -1
  12. package/dist/storybook/assets/{Checkbox.stories-Aj1xgZVn.js → Checkbox.stories-Y253YeU7.js} +1 -1
  13. package/dist/storybook/assets/{CircularProgress.stories-BecV_v6d.js → CircularProgress.stories-6BD8uV5G.js} +1 -1
  14. package/dist/storybook/assets/{ClipboardMixin.stories-DU-WiZ2f.js → ClipboardMixin.stories-BkH66rIU.js} +1 -1
  15. package/dist/storybook/assets/{Color-6BZIO3FS-BYl4KZZn.js → Color-6BZIO3FS-iG0OjPBU.js} +1 -1
  16. package/dist/storybook/assets/{Colors.stories-BMUVUy2q.js → Colors.stories-BxiyQnEg.js} +1 -1
  17. package/dist/storybook/assets/{CombinedEffects.stories-FHcPKFm6.js → CombinedEffects.stories-Bs3U7qRl.js} +1 -1
  18. package/dist/storybook/assets/{ComponentStatesMixin-EMUnfT5y.js → ComponentStatesMixin-DampYb5c.js} +1 -1
  19. package/dist/storybook/assets/{ComponentStatesMixin.stories-SXq0kzS9.js → ComponentStatesMixin.stories-CZ2OW7as.js} +1 -1
  20. package/dist/storybook/assets/{CopyToClipboard.stories-u43lhvcI.js → CopyToClipboard.stories-CdlghjaE.js} +1 -1
  21. package/dist/storybook/assets/{Debounce.stories-BdCn5qgO.js → Debounce.stories-CymT8PnT.js} +1 -1
  22. package/dist/storybook/assets/{DocsRenderer-LL677BLK-DxiEJ_jx.js → DocsRenderer-LL677BLK-dqHCo-GE.js} +3 -3
  23. package/dist/storybook/assets/{Dropdown.stories-BWSRwjIF.js → Dropdown.stories-B6JwKg-I.js} +1 -1
  24. package/dist/storybook/assets/{EmptyState.stories-BpobeZL5.js → EmptyState.stories-Bk229lPH.js} +1 -1
  25. package/dist/storybook/assets/{Events.stories-CP5kMzpr.js → Events.stories-C8-k9cx8.js} +1 -1
  26. package/dist/storybook/assets/{Heading.stories-CbJD-oTB.js → Heading.stories-DIdnAQRG.js} +1 -1
  27. package/dist/storybook/assets/{HueRipple.stories-BOABJ7zw.js → HueRipple.stories-B1gXAEaH.js} +1 -1
  28. package/dist/storybook/assets/{Icon.stories-CWlUHL4j.js → Icon.stories--1VJ0_yt.js} +1 -1
  29. package/dist/storybook/assets/{IconButton.stories-BWBs-OLT.js → IconButton.stories-CS2rEIir.js} +1 -1
  30. package/dist/storybook/assets/{LinearProgress.stories-LZ0GZoxF.js → LinearProgress.stories-Bx0CQQls.js} +1 -1
  31. package/dist/storybook/assets/{Pagination.stories-CbLaR3P9.js → Pagination.stories-B4AogTXB.js} +1 -1
  32. package/dist/storybook/assets/{Popover.stories-JHrWqYZw.js → Popover.stories-BR88DPgU.js} +1 -1
  33. package/dist/storybook/assets/{ReadyMixin-B1H2a9x8.js → ReadyMixin-n6qZO39Y.js} +1 -1
  34. package/dist/storybook/assets/{RovingTabindexMixin.stories-UMHpYG73.js → RovingTabindexMixin.stories-1xTJSMSv.js} +1 -1
  35. package/dist/storybook/assets/{Rtc.stories-VQtNSlls.js → Rtc.stories-Rt0A_rUZ.js} +1 -1
  36. package/dist/storybook/assets/{ScrollShadow.stories-CYdi8Tgp.js → ScrollShadow.stories-CjLdJyYu.js} +1 -1
  37. package/dist/storybook/assets/{Switch.stories-D8F2hZCf.js → Switch.stories-CF8wO4v2.js} +1 -1
  38. package/dist/storybook/assets/{Tab.stories-wgBP0lTj.js → Tab.stories-C8XNshog.js} +1 -1
  39. package/dist/storybook/assets/{Tabs.stories-C00rr5sf.js → Tabs.stories-B01l4rQx.js} +1 -1
  40. package/dist/storybook/assets/{Throttle.stories-BhQEfJbS.js → Throttle.stories-Bpi0K5j9.js} +1 -1
  41. package/dist/storybook/assets/{Tooltip.stories-CGoZ5qTn.js → Tooltip.stories-BC4zMiZ1.js} +1 -1
  42. package/dist/storybook/assets/{Upload.stories-B3K-HAXw.js → Upload.stories-2pWv_fZ1.js} +1 -1
  43. package/dist/storybook/assets/{UploadItem.stories-71ArSoUh.js → UploadItem.stories-aLeAUM7y.js} +1 -1
  44. package/dist/storybook/assets/{Welcome.stories-CihlfFXS.js → Welcome.stories-DJV83eb7.js} +1 -1
  45. package/dist/storybook/assets/{Widget.stories-1u4KbiJM.js → Widget.stories-Cz0i2o6L.js} +1 -1
  46. package/dist/storybook/assets/{WithTooltip-65CFNBJE-B3Jitxw9.js → WithTooltip-65CFNBJE-D8QwVYG8.js} +1 -1
  47. package/dist/storybook/assets/{blocks-C1HaXuQB.js → blocks-BFmpEZRy.js} +5 -5
  48. package/dist/storybook/assets/{formatter-EIJCOSYU-Dy9Lt9fs.js → formatter-EIJCOSYU-CdwdJOPy.js} +1 -1
  49. package/dist/storybook/assets/if-defined-gbJXriW-.js +1 -0
  50. package/dist/storybook/assets/{iframe-Dx6IxWXF.js → iframe-CyssRDCd.js} +4 -4
  51. package/dist/storybook/assets/{index-OrjedSVh.js → index-B82i8dhg.js} +1 -1
  52. package/dist/storybook/assets/{onFind-YTqjw6W0.js → onFind-BFI1uIxr.js} +1 -1
  53. package/dist/storybook/assets/{onFind.stories-DEvwTrmx.js → onFind.stories-zZjQs_Gn.js} +1 -1
  54. package/dist/storybook/assets/{onRemove.stories-D5mO-Lin.js → onRemove.stories-pFBwAIex.js} +1 -1
  55. package/dist/storybook/assets/{onVisible.stories-C3Rcz0Eb.js → onVisible.stories-5dErOVRq.js} +1 -1
  56. package/dist/storybook/assets/{style-map-CiMHry7H.js → style-map-D0EcLEWO.js} +1 -1
  57. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-DIZnuhb2.js → syntaxhighlighter-ED5Y7EFY--2h_dVga.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/src/legacy/tool-ui/src/AnalyticsWidget.css +1 -1
  62. package/src/legacy/tool-ui/src/Board.css +1 -1
  63. package/src/legacy/tool-ui/src/BulkUpload.css +1 -1
  64. package/src/legacy/tool-ui/src/ComboInput.css +1 -1
  65. package/src/legacy/tool-ui/src/Compat.css +5 -5
  66. package/src/legacy/tool-ui/src/ContentEditDrawer.css +1 -1
  67. package/src/legacy/tool-ui/src/Dialog.css +1 -1
  68. package/src/legacy/tool-ui/src/FormFilter.css +1 -1
  69. package/src/legacy/tool-ui/src/Icon/index.css +1 -1
  70. package/src/legacy/tool-ui/src/ImageEditor.css +1 -1
  71. package/src/legacy/tool-ui/src/Incompatible.css +2 -2
  72. package/src/legacy/tool-ui/src/LinkCarousel.css +1 -1
  73. package/src/legacy/tool-ui/src/Page.css +1 -1
  74. package/src/legacy/tool-ui/src/RepeatableContentInputGroup.css +1 -1
  75. package/src/legacy/tool-ui/src/RichText.css +1 -1
  76. package/src/legacy/tool-ui/src/SearchWidget.css +2 -2
  77. package/src/legacy/tool-ui/src/SearchWidgetAdvanced.css +1 -1
  78. package/src/legacy/tool-ui/src/Widget.css +1 -1
  79. package/src/legacy/tool-ui/src/main/webapp/dist/v5.5e5d7f655e174ddd85f5.css +5 -0
  80. package/dist/storybook/assets/if-defined-CA2KmTqA.js +0 -1
  81. package/docs/adr/0001-retire-cms-ui-package-fold-under-src-legacy.md +0 -78
  82. package/docs/adr/0002-yarn-workspaces-preserve-cms-ui-deps.md +0 -130
  83. package/docs/adr/0003-bundle-equivalence-as-fold-acceptance-criterion.md +0 -286
  84. package/src/legacy/tool-ui/src/main/resources/settings.properties +0 -1
  85. package/src/legacy/tool-ui/src/main/webapp/WEB-INF/web.xml +0 -81
  86. package/src/legacy/tool-ui/src/main/webapp/dist/v5.5e3fdf0f0b20b4e3c170.css +0 -5
  87. package/src/legacy/tool-ui/src/main/webapp/script/bsp-uploader.js +0 -170
  88. package/src/legacy/tool-ui/src/main/webapp/script/bsp-utils.js +0 -393
  89. package/src/legacy/tool-ui/src/main/webapp/script/content/layout-element.js +0 -141
  90. package/src/legacy/tool-ui/src/main/webapp/script/input/query.js +0 -78
  91. package/src/legacy/tool-ui/src/main/webapp/script/input/workflow.js +0 -718
  92. package/src/legacy/tool-ui/src/main/webapp/script/jquery.extra.js +0 -633
  93. package/src/legacy/tool-ui/src/main/webapp/script/v3/Dropbox.js +0 -18
  94. package/src/legacy/tool-ui/src/main/webapp/script/v3/EditFieldUpdate.js +0 -406
  95. package/src/legacy/tool-ui/src/main/webapp/script/v3/EditFieldUpdateCache.js +0 -1
  96. package/src/legacy/tool-ui/src/main/webapp/script/v3/Notification.js +0 -151
  97. package/src/legacy/tool-ui/src/main/webapp/script/v3/content/edit.js +0 -194
  98. package/src/legacy/tool-ui/src/main/webapp/script/v3/content/state.js +0 -785
  99. package/src/legacy/tool-ui/src/main/webapp/script/v3/csrf.js +0 -35
  100. package/src/legacy/tool-ui/src/main/webapp/script/v3/dashboard.js +0 -65
  101. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/dataTransfer.js +0 -129
  102. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/file.js +0 -433
  103. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/object.js +0 -743
  104. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/read-only.js +0 -17
  105. package/src/legacy/tool-ui/src/main/webapp/script/v3/jquery.frame.js +0 -478
  106. package/src/legacy/tool-ui/src/main/webapp/script/v3/jquery.repeatable.js +0 -2406
  107. package/src/legacy/tool-ui/src/main/webapp/script/v3/plugin/popup.d.ts +0 -2
  108. package/src/legacy/tool-ui/src/main/webapp/script/v3/plugin/popup.js +0 -446
  109. package/src/legacy/tool-ui/src/main/webapp/script/v3/search-filters.js +0 -62
  110. package/src/legacy/tool-ui/src/main/webapp/script/v3/search.js +0 -53
  111. package/src/legacy/tool-ui/src/main/webapp/script/v3.js +0 -1049
  112. package/src/legacy/tool-ui/src/main/webapp/v4/Admin.js +0 -16
  113. package/src/legacy/tool-ui/src/main/webapp/v4/AutoExpand.js +0 -84
  114. package/src/legacy/tool-ui/src/main/webapp/v4/AutoSubmit.js +0 -68
  115. package/src/legacy/tool-ui/src/main/webapp/v4/Bridge.js +0 -536
  116. package/src/legacy/tool-ui/src/main/webapp/v4/CheckboxInput.js +0 -22
  117. package/src/legacy/tool-ui/src/main/webapp/v4/ColorInput.js +0 -5
  118. package/src/legacy/tool-ui/src/main/webapp/v4/ColorInputSpectrum.js +0 -107
  119. package/src/legacy/tool-ui/src/main/webapp/v4/ComboInput.js +0 -1491
  120. package/src/legacy/tool-ui/src/main/webapp/v4/CommunityWidget.js +0 -29
  121. package/src/legacy/tool-ui/src/main/webapp/v4/ContentEdit.js +0 -2427
  122. package/src/legacy/tool-ui/src/main/webapp/v4/ContentLock.js +0 -470
  123. package/src/legacy/tool-ui/src/main/webapp/v4/ContentReporting.js +0 -32
  124. package/src/legacy/tool-ui/src/main/webapp/v4/DataTable.js +0 -31
  125. package/src/legacy/tool-ui/src/main/webapp/v4/DateStringField.js +0 -485
  126. package/src/legacy/tool-ui/src/main/webapp/v4/Entry.js +0 -264
  127. package/src/legacy/tool-ui/src/main/webapp/v4/ExternalItemAuth.js +0 -16
  128. package/src/legacy/tool-ui/src/main/webapp/v4/Form.js +0 -31
  129. package/src/legacy/tool-ui/src/main/webapp/v4/Hierarchy.js +0 -100
  130. package/src/legacy/tool-ui/src/main/webapp/v4/Icon.ts +0 -49
  131. package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditor.js +0 -2403
  132. package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditorBundle.js +0 -5
  133. package/src/legacy/tool-ui/src/main/webapp/v4/LinkCarousel.js +0 -40
  134. package/src/legacy/tool-ui/src/main/webapp/v4/LinkList.js +0 -14
  135. package/src/legacy/tool-ui/src/main/webapp/v4/LinkTable.js +0 -123
  136. package/src/legacy/tool-ui/src/main/webapp/v4/Location.js +0 -19
  137. package/src/legacy/tool-ui/src/main/webapp/v4/LocationMap.js +0 -148
  138. package/src/legacy/tool-ui/src/main/webapp/v4/LookingGlass.js +0 -24
  139. package/src/legacy/tool-ui/src/main/webapp/v4/Message.js +0 -14
  140. package/src/legacy/tool-ui/src/main/webapp/v4/NumberBar.js +0 -32
  141. package/src/legacy/tool-ui/src/main/webapp/v4/Page.js +0 -890
  142. package/src/legacy/tool-ui/src/main/webapp/v4/Preview.js +0 -758
  143. package/src/legacy/tool-ui/src/main/webapp/v4/PreviewEditor.js +0 -86
  144. package/src/legacy/tool-ui/src/main/webapp/v4/PreviewOverlay.js +0 -1005
  145. package/src/legacy/tool-ui/src/main/webapp/v4/PubSub.js +0 -47
  146. package/src/legacy/tool-ui/src/main/webapp/v4/QueryField.js +0 -211
  147. package/src/legacy/tool-ui/src/main/webapp/v4/RegionMap.js +0 -215
  148. package/src/legacy/tool-ui/src/main/webapp/v4/RepeatableContentInputGroup.js +0 -160
  149. package/src/legacy/tool-ui/src/main/webapp/v4/RichTextEditor.js +0 -154
  150. package/src/legacy/tool-ui/src/main/webapp/v4/SearchFields.js +0 -281
  151. package/src/legacy/tool-ui/src/main/webapp/v4/SearchResult.js +0 -255
  152. package/src/legacy/tool-ui/src/main/webapp/v4/SharePreview.js +0 -56
  153. package/src/legacy/tool-ui/src/main/webapp/v4/Sortable.js +0 -874
  154. package/src/legacy/tool-ui/src/main/webapp/v4/StyleEmbeddedContent.js +0 -100
  155. package/src/legacy/tool-ui/src/main/webapp/v4/StyleguidePresets.js +0 -357
  156. package/src/legacy/tool-ui/src/main/webapp/v4/TabContainer.js +0 -360
  157. package/src/legacy/tool-ui/src/main/webapp/v4/Taxonomy.js +0 -27
  158. package/src/legacy/tool-ui/src/main/webapp/v4/ThemeBundleEditor.js +0 -224
  159. package/src/legacy/tool-ui/src/main/webapp/v4/TimedContent.js +0 -147
  160. package/src/legacy/tool-ui/src/main/webapp/v4/TimedContentBundle.js +0 -8
  161. package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditor.js +0 -2417
  162. package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditorBundle.js +0 -8
  163. package/src/legacy/tool-ui/src/main/webapp/v4/ViewMirror.js +0 -52
  164. package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.d.ts +0 -13
  165. package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.js +0 -177
  166. package/src/legacy/tool-ui/src/main/webapp/v4/Widget.js +0 -90
  167. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/fileMock.js +0 -1
  168. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/styleMock.js +0 -1
  169. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/textArea.mock.js +0 -20
  170. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/globals.js +0 -770
  171. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/ProseMirror.test.js +0 -16
  172. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/index.html +0 -54
  173. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/comment_manager/CommentManager.test.js +0 -29
  174. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/comment_manager/index.html +0 -35
  175. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/custom_keyboard/CustomKeyboard.js +0 -42
  176. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/custom_keyboard/index.html +0 -37
  177. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/EnhancementManager.test.js +0 -288
  178. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/block.html +0 -38
  179. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/inline.html +0 -38
  180. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/no-popups.html +0 -38
  181. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/list_manager/ListManager.js +0 -257
  182. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/list_manager/index.html +0 -38
  183. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/hierarchal.html +0 -33
  184. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/index.html +0 -33
  185. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/menubar.test.js +0 -195
  186. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/small.html +0 -34
  187. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/tags.html +0 -34
  188. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/PlaceholderManager.test.js +0 -134
  189. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/has-editable-placeholder.html +0 -32
  190. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/has-text.html +0 -34
  191. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/index.html +0 -31
  192. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/table_manager/TableManager.test.js +0 -63
  193. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/table_manager/existing.html +0 -48
  194. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/TrackManager.test.js +0 -291
  195. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/existing.html +0 -39
  196. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/insert.html +0 -37
  197. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/Sortable.test.js +0 -105
  198. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/ProseMirror.test.js +0 -41
  199. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/codemirror-shim.test.js +0 -72
  200. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/collab_manager/CollabManager.test.js +0 -46
  201. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/enhancement_manager/EnhancementManager.test.js +0 -84
  202. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/list_manager/ListManager.test.js +0 -54
  203. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/menubar/menubar.test.js +0 -183
  204. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/spellcheck/SpellCheck.test.js +0 -45
  205. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/settings/BSSerializer.test.js +0 -346
  206. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/settings/menuItemsBuilder.test.js +0 -226
  207. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/utilities.test.js +0 -118
  208. package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/Appetizeio.js +0 -5
  209. package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/AppetizeioEmbedded.js +0 -113
  210. package/src/legacy/tool-ui/src/main/webapp/v4/compat/Fetch.js +0 -16
  211. package/src/legacy/tool-ui/src/main/webapp/v4/compat/jquery.js +0 -32
  212. package/src/legacy/tool-ui/src/main/webapp/v4/compat/requirejs.js +0 -13
  213. package/src/legacy/tool-ui/src/main/webapp/v4/dom/Tether.js +0 -1
  214. package/src/legacy/tool-ui/src/main/webapp/v4/dom/TetherLayout.js +0 -1
  215. package/src/legacy/tool-ui/src/main/webapp/v4/dom/closest.js +0 -1
  216. package/src/legacy/tool-ui/src/main/webapp/v4/dom/create.js +0 -1
  217. package/src/legacy/tool-ui/src/main/webapp/v4/dom/find.js +0 -1
  218. package/src/legacy/tool-ui/src/main/webapp/v4/dom/findAll.js +0 -1
  219. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifClick.js +0 -1
  220. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifMatches.js +0 -1
  221. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifUnmodified.js +0 -1
  222. package/src/legacy/tool-ui/src/main/webapp/v4/dom/index.js +0 -5
  223. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertBefore.js +0 -1
  224. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertFirst.js +0 -1
  225. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertLast.js +0 -1
  226. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onFind.js +0 -1
  227. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onFindOnce.js +0 -1
  228. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onRTEReady.js +0 -1
  229. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onRemove.js +0 -1
  230. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onVisible.js +0 -1
  231. package/src/legacy/tool-ui/src/main/webapp/v4/dom/previousUntil.js +0 -1
  232. package/src/legacy/tool-ui/src/main/webapp/v4/dom/resolveIconCompat.js +0 -40
  233. package/src/legacy/tool-ui/src/main/webapp/v4/rtc/Socket.js +0 -1
  234. package/src/legacy/tool-ui/src/main/webapp/v4/rtc/index.js +0 -1
  235. package/src/legacy/tool-ui/src/main/webapp/v4/rte/ProseMirror.js +0 -909
  236. package/src/legacy/tool-ui/src/main/webapp/v4/rte/README.md +0 -68
  237. package/src/legacy/tool-ui/src/main/webapp/v4/rte/codemirror-shim.d.ts +0 -8
  238. package/src/legacy/tool-ui/src/main/webapp/v4/rte/codemirror-shim.js +0 -274
  239. package/src/legacy/tool-ui/src/main/webapp/v4/rte/collab-workflow.jpeg +0 -0
  240. package/src/legacy/tool-ui/src/main/webapp/v4/rte/interchangeable.ts +0 -250
  241. package/src/legacy/tool-ui/src/main/webapp/v4/rte/mention.js +0 -90
  242. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/PluginProvider.js +0 -124
  243. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/README.md +0 -46
  244. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/AIInlineManager.ts +0 -124
  245. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/views/AIInlineView.ts +0 -1019
  246. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_manager/AiManager.ts +0 -199
  247. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/CollabManager.js +0 -339
  248. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/views/AvatarView.js +0 -96
  249. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/comment_manager/CommentManager.js +0 -348
  250. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/CustomKeyboard.js +0 -110
  251. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/README.md +0 -29
  252. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/EnhancementManager.js +0 -428
  253. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/README.md +0 -63
  254. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/commands.js +0 -690
  255. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/constants.js +0 -12
  256. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/enhancement-creation.jpeg +0 -0
  257. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/index.js +0 -15
  258. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/rte-flow.jpeg +0 -0
  259. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/ActionButtonView.js +0 -86
  260. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/BlockSubmenuView.js +0 -60
  261. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/EnhancementView.js +0 -208
  262. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/PreviewView.js +0 -102
  263. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/SubmenuView.js +0 -365
  264. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/FindReplaceManager.js +0 -239
  265. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/views/FindView.js +0 -604
  266. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/FullscreenManager.js +0 -57
  267. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/README.md +0 -26
  268. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/commands.js +0 -16
  269. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/index.js +0 -4
  270. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/views/FullscreenView.js +0 -474
  271. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/html_editor_manager/htmlEditorManager.js +0 -66
  272. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/html_editor_manager/views/HtmlEditorView.js +0 -97
  273. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/ListManager.js +0 -342
  274. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/README.md +0 -50
  275. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/commands.js +0 -207
  276. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/constants.js +0 -26
  277. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/index.js +0 -4
  278. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/Menubar.js +0 -485
  279. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/README.md +0 -40
  280. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/views/MenuView.js +0 -842
  281. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/paste_manager/PasteManager.js +0 -368
  282. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/placeholder_manager/PlaceHolderManager.js +0 -128
  283. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/raw_text_manager/README.md +0 -13
  284. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/raw_text_manager/RawTextManager.js +0 -96
  285. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/index.js +0 -3
  286. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck-plugin.js +0 -280
  287. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck-service.js +0 -94
  288. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/TableManager.js +0 -57
  289. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/commands.js +0 -97
  290. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableSizerView.js +0 -88
  291. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableView.js +0 -613
  292. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/track_manager/README.md +0 -13
  293. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/track_manager/TrackManager.js +0 -905
  294. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/BSSerializer.js +0 -819
  295. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/README.md +0 -80
  296. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/commands.js +0 -98
  297. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/constants.d.ts +0 -84
  298. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/constants.js +0 -87
  299. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/index.js +0 -13
  300. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/keymapBuilder.js +0 -223
  301. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/menuItemsBuilder.js +0 -559
  302. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/schemaBuilder.js +0 -1281
  303. package/src/legacy/tool-ui/src/main/webapp/v4/rte/utilities.d.ts +0 -4
  304. package/src/legacy/tool-ui/src/main/webapp/v4/rte/utilities.js +0 -359
  305. package/src/legacy/tool-ui/src/main/webapp/v4/theme/ColorRotator.js +0 -1
  306. package/src/legacy/tool-ui/src/main/webapp/v4/util/debounce.js +0 -1
  307. package/src/legacy/tool-ui/src/main/webapp/v4/util/getComponentKey.js +0 -1
  308. package/src/legacy/tool-ui/src/main/webapp/v4/util/noise.js +0 -1
  309. package/src/legacy/tool-ui/src/main/webapp/v4/util/repaint.js +0 -1
  310. package/src/legacy/tool-ui/src/main/webapp/v4/util/storage.js +0 -1
  311. package/src/legacy/tool-ui/src/main/webapp/v4/util/throttle.js +0 -1
  312. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentContent.js +0 -33
  313. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentDeskDashboard.js +0 -217
  314. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssociatedContentWidget.js +0 -7
  315. package/src/legacy/tool-ui/src/main/webapp/v4/widget/BulkUpload.js +0 -19
  316. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Calendar.js +0 -7
  317. package/src/legacy/tool-ui/src/main/webapp/v4/widget/ClosableWindow.js +0 -13
  318. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchAssignments.js +0 -25
  319. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchContent.js +0 -33
  320. 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
- }