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

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 (725) hide show
  1. package/dist/custom-elements.json +1842 -1842
  2. package/dist/storybook/assets/{ActionBar.stories-CXEvFUN5.js → ActionBar.stories-hJ_5cm-P.js} +1 -1
  3. package/dist/storybook/assets/{ActionItem.stories-8-qQmVGz.js → ActionItem.stories-Bjx2803w.js} +1 -1
  4. package/dist/storybook/assets/{Avatar.stories-LOTCiTgV.js → Avatar.stories-Cj0YgZ6f.js} +1 -1
  5. package/dist/storybook/assets/{AvatarGroup.stories-N17TVn4O.js → AvatarGroup.stories-Lh_sQFCU.js} +1 -1
  6. package/dist/storybook/assets/{Badge.stories-2IRfk8Ri.js → Badge.stories-BL7RUibx.js} +1 -1
  7. package/dist/storybook/assets/{Button-CQ2CjiFm.js → Button-BPHNcxqK.js} +1 -1
  8. package/dist/storybook/assets/{Button.stories-DwyviUHj.js → Button.stories-CAYO4gdU.js} +1 -1
  9. package/dist/storybook/assets/{ButtonGroup.stories-D6nkkXxD.js → ButtonGroup.stories-Cd13Us5K.js} +1 -1
  10. package/dist/storybook/assets/{Celebrate.stories-DtKNptXA.js → Celebrate.stories-D_KE3Qze.js} +1 -1
  11. package/dist/storybook/assets/{Checkbox.stories--fetKLgV.js → Checkbox.stories-Aj1xgZVn.js} +1 -1
  12. package/dist/storybook/assets/{CircularProgress.stories-vK3MWdEg.js → CircularProgress.stories-BecV_v6d.js} +1 -1
  13. package/dist/storybook/assets/{ClipboardMixin.stories-BXOX2e9A.js → ClipboardMixin.stories-DU-WiZ2f.js} +1 -1
  14. package/dist/storybook/assets/{Color-6BZIO3FS-DIO6ExZa.js → Color-6BZIO3FS-BYl4KZZn.js} +1 -1
  15. package/dist/storybook/assets/{Colors.stories-Z-o0Dmyi.js → Colors.stories-BMUVUy2q.js} +1 -1
  16. package/dist/storybook/assets/{CombinedEffects.stories-BIvRmEL2.js → CombinedEffects.stories-FHcPKFm6.js} +1 -1
  17. package/dist/storybook/assets/{ComponentStatesMixin-BeLIKOsg.js → ComponentStatesMixin-EMUnfT5y.js} +1 -1
  18. package/dist/storybook/assets/{ComponentStatesMixin.stories-u03jgLUU.js → ComponentStatesMixin.stories-SXq0kzS9.js} +1 -1
  19. package/dist/storybook/assets/{CopyToClipboard.stories-D23guAYu.js → CopyToClipboard.stories-u43lhvcI.js} +1 -1
  20. package/dist/storybook/assets/{Debounce.stories-Bz3JaQJY.js → Debounce.stories-BdCn5qgO.js} +1 -1
  21. package/dist/storybook/assets/{DocsRenderer-LL677BLK-CaEKjMeC.js → DocsRenderer-LL677BLK-DxiEJ_jx.js} +3 -3
  22. package/dist/storybook/assets/{Dropdown.stories-CNxtx8UX.js → Dropdown.stories-BWSRwjIF.js} +1 -1
  23. package/dist/storybook/assets/{EmptyState.stories-Ck5T6q1T.js → EmptyState.stories-BpobeZL5.js} +1 -1
  24. package/dist/storybook/assets/{Events.stories-Cx10pvVB.js → Events.stories-CP5kMzpr.js} +1 -1
  25. package/dist/storybook/assets/{Heading.stories-mbkSoA5r.js → Heading.stories-CbJD-oTB.js} +1 -1
  26. package/dist/storybook/assets/{HueRipple.stories-B-DDviMh.js → HueRipple.stories-BOABJ7zw.js} +1 -1
  27. package/dist/storybook/assets/{Icon.stories-Dodo1jjZ.js → Icon.stories-CWlUHL4j.js} +1 -1
  28. package/dist/storybook/assets/{IconButton.stories-eAU6vNiX.js → IconButton.stories-BWBs-OLT.js} +1 -1
  29. package/dist/storybook/assets/{LinearProgress.stories-BqAUCgwy.js → LinearProgress.stories-LZ0GZoxF.js} +1 -1
  30. package/dist/storybook/assets/{Pagination.stories-CVK8mlEU.js → Pagination.stories-CbLaR3P9.js} +1 -1
  31. package/dist/storybook/assets/{Popover.stories-CC2R-jiv.js → Popover.stories-JHrWqYZw.js} +1 -1
  32. package/dist/storybook/assets/{ReadyMixin-CAkCCAOH.js → ReadyMixin-B1H2a9x8.js} +1 -1
  33. package/dist/storybook/assets/{RovingTabindexMixin.stories-Dgm5izU_.js → RovingTabindexMixin.stories-UMHpYG73.js} +1 -1
  34. package/dist/storybook/assets/{Rtc.stories-D9uVCq71.js → Rtc.stories-VQtNSlls.js} +1 -1
  35. package/dist/storybook/assets/{ScrollShadow.stories-D5GJ6Zes.js → ScrollShadow.stories-CYdi8Tgp.js} +1 -1
  36. package/dist/storybook/assets/{Switch.stories-D7HV0v6i.js → Switch.stories-D8F2hZCf.js} +1 -1
  37. package/dist/storybook/assets/{Tab.stories-CwHBngmO.js → Tab.stories-wgBP0lTj.js} +1 -1
  38. package/dist/storybook/assets/{Tabs.stories-D87ILflp.js → Tabs.stories-C00rr5sf.js} +1 -1
  39. package/dist/storybook/assets/{Throttle.stories-C13Vl7yt.js → Throttle.stories-BhQEfJbS.js} +1 -1
  40. package/dist/storybook/assets/{Tooltip.stories-BRmAKppC.js → Tooltip.stories-CGoZ5qTn.js} +1 -1
  41. package/dist/storybook/assets/{Upload.stories-CvceXasD.js → Upload.stories-B3K-HAXw.js} +1 -1
  42. package/dist/storybook/assets/{UploadItem.stories-BF6c7tVM.js → UploadItem.stories-71ArSoUh.js} +1 -1
  43. package/dist/storybook/assets/{Welcome.stories-Ciht_H8A.js → Welcome.stories-CihlfFXS.js} +1 -1
  44. package/dist/storybook/assets/{Widget.stories-30UYw1gn.js → Widget.stories-1u4KbiJM.js} +1 -1
  45. package/dist/storybook/assets/{WithTooltip-65CFNBJE-Q8AG_oZS.js → WithTooltip-65CFNBJE-B3Jitxw9.js} +1 -1
  46. package/dist/storybook/assets/{blocks-DIrsUt2U.js → blocks-C1HaXuQB.js} +5 -5
  47. package/dist/storybook/assets/{formatter-EIJCOSYU-BcNb3EA1.js → formatter-EIJCOSYU-Dy9Lt9fs.js} +1 -1
  48. package/dist/storybook/assets/if-defined-CA2KmTqA.js +1 -0
  49. package/dist/storybook/assets/{iframe-BgFj0b5u.css → iframe-D0roG0J-.css} +1 -1
  50. package/dist/storybook/assets/{iframe-D5Uwm8Zd.js → iframe-Dx6IxWXF.js} +4 -4
  51. package/dist/storybook/assets/{index-BOlx3-q7.js → index-OrjedSVh.js} +1 -1
  52. package/dist/storybook/assets/{onFind-Cp2DO8R2.js → onFind-YTqjw6W0.js} +1 -1
  53. package/dist/storybook/assets/{onFind.stories-BDK06xaW.js → onFind.stories-DEvwTrmx.js} +1 -1
  54. package/dist/storybook/assets/{onRemove.stories-TSKvqih3.js → onRemove.stories-D5mO-Lin.js} +1 -1
  55. package/dist/storybook/assets/{onVisible.stories-DiOPobn8.js → onVisible.stories-C3Rcz0Eb.js} +1 -1
  56. package/dist/storybook/assets/{style-map-Cy6U2K_U.js → style-map-CiMHry7H.js} +1 -1
  57. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-NNCQVsSv.js → syntaxhighlighter-ED5Y7EFY-DIZnuhb2.js} +1 -1
  58. package/dist/storybook/iframe.html +2 -2
  59. package/dist/storybook/project.json +1 -1
  60. package/dist/tailwind.config.d.ts +4 -1
  61. package/dist/tailwind.config.d.ts.map +1 -1
  62. package/dist/tailwind.config.js +0 -2
  63. package/dist/tailwind.config.js.map +1 -1
  64. package/dist/tailwind.config.ts +0 -2
  65. package/package.json +2 -2
  66. package/src/legacy/tool-ui/src/AIInline.css +123 -0
  67. package/src/legacy/tool-ui/src/ActionBar.css +41 -0
  68. package/src/legacy/tool-ui/src/Admin.css +258 -0
  69. package/src/legacy/tool-ui/src/AdobeStock.css +3 -0
  70. package/src/legacy/tool-ui/src/AnalyticsWidget.css +34 -0
  71. package/src/legacy/tool-ui/src/AnalyticsWidget.ts +158 -0
  72. package/src/legacy/tool-ui/src/Apis.css +31 -0
  73. package/src/legacy/tool-ui/src/AppetizeioEmbedded.css +58 -0
  74. package/src/legacy/tool-ui/src/AssociatedContentWidget.css +68 -0
  75. package/src/legacy/tool-ui/src/AutoExpand.css +33 -0
  76. package/src/legacy/tool-ui/src/Avatar.css +31 -0
  77. package/src/legacy/tool-ui/src/BackgroundTasks.css +29 -0
  78. package/src/legacy/tool-ui/src/Base.css +80 -0
  79. package/src/legacy/tool-ui/src/Board.css +160 -0
  80. package/src/legacy/tool-ui/src/Board.ts +515 -0
  81. package/src/legacy/tool-ui/src/BroadcastAlertBanner.ts +93 -0
  82. package/src/legacy/tool-ui/src/BulkUpload.css +51 -0
  83. package/src/legacy/tool-ui/src/BulkWorkflow.css +47 -0
  84. package/src/legacy/tool-ui/src/BulkWorkflow.ts +110 -0
  85. package/src/legacy/tool-ui/src/BulletedList.css +11 -0
  86. package/src/legacy/tool-ui/src/CIGCluster/README.md +32 -0
  87. package/src/legacy/tool-ui/src/CIGCluster/index.ts +144 -0
  88. package/src/legacy/tool-ui/src/CIGCluster.css +60 -0
  89. package/src/legacy/tool-ui/src/Calendar.css +110 -0
  90. package/src/legacy/tool-ui/src/Card.css +28 -0
  91. package/src/legacy/tool-ui/src/Celebrate.ts +87 -0
  92. package/src/legacy/tool-ui/src/Chart.ts +53 -0
  93. package/src/legacy/tool-ui/src/ChartCompat.ts +413 -0
  94. package/src/legacy/tool-ui/src/ChartTable.ts +22 -0
  95. package/src/legacy/tool-ui/src/Checkbox.css +22 -0
  96. package/src/legacy/tool-ui/src/CodeMirror.css +161 -0
  97. package/src/legacy/tool-ui/src/Collections.css +74 -0
  98. package/src/legacy/tool-ui/src/ColorInputSpectrum.css +140 -0
  99. package/src/legacy/tool-ui/src/ComboInput.css +253 -0
  100. package/src/legacy/tool-ui/src/Compat.css +383 -0
  101. package/src/legacy/tool-ui/src/ComponentStatesMixin.ts +27 -0
  102. package/src/legacy/tool-ui/src/ContentColors.css +19 -0
  103. package/src/legacy/tool-ui/src/ContentEdit.css +1065 -0
  104. package/src/legacy/tool-ui/src/ContentEditDrawer.css +274 -0
  105. package/src/legacy/tool-ui/src/ContentEditDrawer.ts +217 -0
  106. package/src/legacy/tool-ui/src/ContentEditPanel.ts +188 -0
  107. package/src/legacy/tool-ui/src/ContentEditSites.ts +101 -0
  108. package/src/legacy/tool-ui/src/ContentForm.css +87 -0
  109. package/src/legacy/tool-ui/src/ContentForm.ts +104 -0
  110. package/src/legacy/tool-ui/src/ContentInputGroup.css +678 -0
  111. package/src/legacy/tool-ui/src/ContentInputGroup.ts +86 -0
  112. package/src/legacy/tool-ui/src/ContentReporting.css +54 -0
  113. package/src/legacy/tool-ui/src/ContentSelector.css +215 -0
  114. package/src/legacy/tool-ui/src/ContentSelectorActions.ts +428 -0
  115. package/src/legacy/tool-ui/src/ContentSummary.css +176 -0
  116. package/src/legacy/tool-ui/src/ContentSummary.ts +223 -0
  117. package/src/legacy/tool-ui/src/ContentTemplatesWidget.css +54 -0
  118. package/src/legacy/tool-ui/src/ContentTools.css +109 -0
  119. package/src/legacy/tool-ui/src/ContentType.css +27 -0
  120. package/src/legacy/tool-ui/src/Conversation.css +325 -0
  121. package/src/legacy/tool-ui/src/Conversation.ts +836 -0
  122. package/src/legacy/tool-ui/src/CopySiteWidget.css +8 -0
  123. package/src/legacy/tool-ui/src/CopyToClipboard/README.md +23 -0
  124. package/src/legacy/tool-ui/src/CopyToClipboard/index.ts +54 -0
  125. package/src/legacy/tool-ui/src/CopyToClipboard.css +10 -0
  126. package/src/legacy/tool-ui/src/Crosslinker.css +486 -0
  127. package/src/legacy/tool-ui/src/Crosslinker.ts +46 -0
  128. package/src/legacy/tool-ui/src/CustomKeyboard.css +25 -0
  129. package/src/legacy/tool-ui/src/DashboardRow.css +54 -0
  130. package/src/legacy/tool-ui/src/DashboardWidget.css +444 -0
  131. package/src/legacy/tool-ui/src/DateStringField.css +78 -0
  132. package/src/legacy/tool-ui/src/DateTimeInput.css +11 -0
  133. package/src/legacy/tool-ui/src/Dialog.css +441 -0
  134. package/src/legacy/tool-ui/src/Diff.css +280 -0
  135. package/src/legacy/tool-ui/src/Diff.ts +89 -0
  136. package/src/legacy/tool-ui/src/Downloads.css +7 -0
  137. package/src/legacy/tool-ui/src/Dropdown.css +63 -0
  138. package/src/legacy/tool-ui/src/EditFieldUpdateCache.ts +129 -0
  139. package/src/legacy/tool-ui/src/EmbeddedInputGroup/README.md +3 -0
  140. package/src/legacy/tool-ui/src/EmbeddedInputGroup/index.ts +189 -0
  141. package/src/legacy/tool-ui/src/EmbeddedInputGroup.css +75 -0
  142. package/src/legacy/tool-ui/src/Enhancement.css +135 -0
  143. package/src/legacy/tool-ui/src/Entry.ts +875 -0
  144. package/src/legacy/tool-ui/src/EventEmitterMixin.ts +71 -0
  145. package/src/legacy/tool-ui/src/ExternalCalendars.ts +34 -0
  146. package/src/legacy/tool-ui/src/ExternalItemObjects.ts +36 -0
  147. package/src/legacy/tool-ui/src/FileInput.css +150 -0
  148. package/src/legacy/tool-ui/src/FocusRegions.ts +530 -0
  149. package/src/legacy/tool-ui/src/FormFilter.css +93 -0
  150. package/src/legacy/tool-ui/src/FullscreenView.css +152 -0
  151. package/src/legacy/tool-ui/src/GCA.css +9 -0
  152. package/src/legacy/tool-ui/src/Global.d.ts +219 -0
  153. package/src/legacy/tool-ui/src/GraphQL.css +74 -0
  154. package/src/legacy/tool-ui/src/GraphQLApis.css +4 -0
  155. package/src/legacy/tool-ui/src/Guide.css +193 -0
  156. package/src/legacy/tool-ui/src/GuideField.css +25 -0
  157. package/src/legacy/tool-ui/src/Hierarchy.css +68 -0
  158. package/src/legacy/tool-ui/src/Icon/index.css +11 -0
  159. package/src/legacy/tool-ui/src/Icon/index.ts +69 -0
  160. package/src/legacy/tool-ui/src/ImageEditor.css +522 -0
  161. package/src/legacy/tool-ui/src/ImageRecognition.css +11 -0
  162. package/src/legacy/tool-ui/src/Incompatible.css +42 -0
  163. package/src/legacy/tool-ui/src/InputRow.css +26 -0
  164. package/src/legacy/tool-ui/src/Label.css +33 -0
  165. package/src/legacy/tool-ui/src/LabeledCheckbox.css +13 -0
  166. package/src/legacy/tool-ui/src/Link.css +4 -0
  167. package/src/legacy/tool-ui/src/LinkCarousel.css +77 -0
  168. package/src/legacy/tool-ui/src/LinkList.css +53 -0
  169. package/src/legacy/tool-ui/src/LinkTable.css +105 -0
  170. package/src/legacy/tool-ui/src/ListManager.css +27 -0
  171. package/src/legacy/tool-ui/src/LiveBlog.css +290 -0
  172. package/src/legacy/tool-ui/src/LiveBlog.ts +47 -0
  173. package/src/legacy/tool-ui/src/Loader.svg +16 -0
  174. package/src/legacy/tool-ui/src/LocationMap.css +25 -0
  175. package/src/legacy/tool-ui/src/LookingGlass.css +31 -0
  176. package/src/legacy/tool-ui/src/LucideDynamicLoader.ts +31 -0
  177. package/src/legacy/tool-ui/src/MailPublishing.css +32 -0
  178. package/src/legacy/tool-ui/src/Mention.css +34 -0
  179. package/src/legacy/tool-ui/src/MenuView.css +659 -0
  180. package/src/legacy/tool-ui/src/Message.css +239 -0
  181. package/src/legacy/tool-ui/src/Month.css +65 -0
  182. package/src/legacy/tool-ui/src/NavRail/index.css +47 -0
  183. package/src/legacy/tool-ui/src/NavRail/index.ts +40 -0
  184. package/src/legacy/tool-ui/src/Notification.css +197 -0
  185. package/src/legacy/tool-ui/src/Notifications.ts +139 -0
  186. package/src/legacy/tool-ui/src/Page.css +884 -0
  187. package/src/legacy/tool-ui/src/PageNav.ts +108 -0
  188. package/src/legacy/tool-ui/src/PaginatedResult.css +20 -0
  189. package/src/legacy/tool-ui/src/Pagination.css +119 -0
  190. package/src/legacy/tool-ui/src/PastePopup.css +11 -0
  191. package/src/legacy/tool-ui/src/PlaceholderEditableMixin.ts +86 -0
  192. package/src/legacy/tool-ui/src/Popup.css +413 -0
  193. package/src/legacy/tool-ui/src/PostPublish.ts +12 -0
  194. package/src/legacy/tool-ui/src/PrePublish.ts +63 -0
  195. package/src/legacy/tool-ui/src/Preview.css +134 -0
  196. package/src/legacy/tool-ui/src/PrivilegeAccessWidget.css +27 -0
  197. package/src/legacy/tool-ui/src/ProfileDropdown.css +95 -0
  198. package/src/legacy/tool-ui/src/ProseMirror-table.css +159 -0
  199. package/src/legacy/tool-ui/src/ProseMirror.css +180 -0
  200. package/src/legacy/tool-ui/src/ProseMirrorContainer.css +40 -0
  201. package/src/legacy/tool-ui/src/ProseMirrorEnhancementMenu.css +68 -0
  202. package/src/legacy/tool-ui/src/ProseMirrorFindReplace.css +132 -0
  203. package/src/legacy/tool-ui/src/QueryField.css +77 -0
  204. package/src/legacy/tool-ui/src/README.md +235 -0
  205. package/src/legacy/tool-ui/src/RadialProgressBar.css +11 -0
  206. package/src/legacy/tool-ui/src/RadialProgressBar.ts +73 -0
  207. package/src/legacy/tool-ui/src/Radio.css +22 -0
  208. package/src/legacy/tool-ui/src/RepeatableContentInputGroup.css +470 -0
  209. package/src/legacy/tool-ui/src/RepeatableContentSelector.css +177 -0
  210. package/src/legacy/tool-ui/src/RepeatableTextInput.css +71 -0
  211. package/src/legacy/tool-ui/src/Revision.css +70 -0
  212. package/src/legacy/tool-ui/src/Revisions.css +292 -0
  213. package/src/legacy/tool-ui/src/RichText.css +15 -0
  214. package/src/legacy/tool-ui/src/SearchControlsToggle.ts +90 -0
  215. package/src/legacy/tool-ui/src/SearchFields.css +109 -0
  216. package/src/legacy/tool-ui/src/SearchInput.css +27 -0
  217. package/src/legacy/tool-ui/src/SearchResult.css +523 -0
  218. package/src/legacy/tool-ui/src/SearchWidget.css +441 -0
  219. package/src/legacy/tool-ui/src/SearchWidget.ts +154 -0
  220. package/src/legacy/tool-ui/src/SearchWidgetAdvanced.css +109 -0
  221. package/src/legacy/tool-ui/src/SharePreview.css +71 -0
  222. package/src/legacy/tool-ui/src/SkipLinks.css +23 -0
  223. package/src/legacy/tool-ui/src/SkipLinks.ts +112 -0
  224. package/src/legacy/tool-ui/src/SlackAuthentication.css +9 -0
  225. package/src/legacy/tool-ui/src/Sortable.css +50 -0
  226. package/src/legacy/tool-ui/src/Spellcheck.css +34 -0
  227. package/src/legacy/tool-ui/src/StyleEmbeddedContent.css +62 -0
  228. package/src/legacy/tool-ui/src/Suggestions.css +53 -0
  229. package/src/legacy/tool-ui/src/Suggestions.ts +209 -0
  230. package/src/legacy/tool-ui/src/TabBar.css +174 -0
  231. package/src/legacy/tool-ui/src/TabContainer.css +40 -0
  232. package/src/legacy/tool-ui/src/Table.css +107 -0
  233. package/src/legacy/tool-ui/src/TableSizerPopup.css +42 -0
  234. package/src/legacy/tool-ui/src/Taxonomy.css +60 -0
  235. package/src/legacy/tool-ui/src/TextInput.css +40 -0
  236. package/src/legacy/tool-ui/src/Theme.css +64 -0
  237. package/src/legacy/tool-ui/src/ThemeBundleEditor.css +93 -0
  238. package/src/legacy/tool-ui/src/TimedContent.css +74 -0
  239. package/src/legacy/tool-ui/src/Toggleable/README.md +90 -0
  240. package/src/legacy/tool-ui/src/Toggleable/index.ts +230 -0
  241. package/src/legacy/tool-ui/src/Translation.css +115 -0
  242. package/src/legacy/tool-ui/src/Translation.ts +20 -0
  243. package/src/legacy/tool-ui/src/TreeList.css +45 -0
  244. package/src/legacy/tool-ui/src/Types.ts +44 -0
  245. package/src/legacy/tool-ui/src/Utilities.css +7 -0
  246. package/src/legacy/tool-ui/src/ViewMirror.css +7 -0
  247. package/src/legacy/tool-ui/src/ViewPreview.css +59 -0
  248. package/src/legacy/tool-ui/src/ViewWatchers.css +69 -0
  249. package/src/legacy/tool-ui/src/Viewers.css +21 -0
  250. package/src/legacy/tool-ui/src/Week.css +23 -0
  251. package/src/legacy/tool-ui/src/Widget.css +622 -0
  252. package/src/legacy/tool-ui/src/WorkStreams.css +97 -0
  253. package/src/legacy/tool-ui/src/Workflow.css +100 -0
  254. package/src/legacy/tool-ui/src/Workstreams.ts +52 -0
  255. package/src/legacy/tool-ui/src/WrappingMixin.ts +77 -0
  256. package/src/legacy/tool-ui/src/additional-tailwind-classes.txt +205 -0
  257. package/src/legacy/tool-ui/src/bsp-tracking.d.ts +27 -0
  258. package/src/legacy/tool-ui/src/dialog/README.md +83 -0
  259. package/src/legacy/tool-ui/src/dialog/index.ts +465 -0
  260. package/src/legacy/tool-ui/src/dom/README.md +63 -0
  261. package/src/legacy/tool-ui/src/dom/Tether.ts +135 -0
  262. package/src/legacy/tool-ui/src/dom/TetherLayout.ts +149 -0
  263. package/src/legacy/tool-ui/src/dom/aria.ts +123 -0
  264. package/src/legacy/tool-ui/src/dom/closest.ts +5 -0
  265. package/src/legacy/tool-ui/src/dom/create.ts +46 -0
  266. package/src/legacy/tool-ui/src/dom/find.ts +5 -0
  267. package/src/legacy/tool-ui/src/dom/findAll.ts +5 -0
  268. package/src/legacy/tool-ui/src/dom/focusable.ts +29 -0
  269. package/src/legacy/tool-ui/src/dom/ifClick.ts +18 -0
  270. package/src/legacy/tool-ui/src/dom/ifMatches.ts +17 -0
  271. package/src/legacy/tool-ui/src/dom/ifUnmodified.ts +16 -0
  272. package/src/legacy/tool-ui/src/dom/insertBefore.ts +4 -0
  273. package/src/legacy/tool-ui/src/dom/insertFirst.ts +4 -0
  274. package/src/legacy/tool-ui/src/dom/insertLast.ts +4 -0
  275. package/src/legacy/tool-ui/src/dom/keyboard.ts +176 -0
  276. package/src/legacy/tool-ui/src/dom/onFind.ts +277 -0
  277. package/src/legacy/tool-ui/src/dom/onFindOnce.ts +31 -0
  278. package/src/legacy/tool-ui/src/dom/onRTEReady.ts +105 -0
  279. package/src/legacy/tool-ui/src/dom/onRemove.ts +27 -0
  280. package/src/legacy/tool-ui/src/dom/onVisible.ts +29 -0
  281. package/src/legacy/tool-ui/src/dom/popupMenu.d.ts +6 -0
  282. package/src/legacy/tool-ui/src/dom/popupMenu.js +282 -0
  283. package/src/legacy/tool-ui/src/dom/previousUntil.ts +22 -0
  284. package/src/legacy/tool-ui/src/dropdown/README.md +9 -0
  285. package/src/legacy/tool-ui/src/dropdown/index.ts +105 -0
  286. package/src/legacy/tool-ui/src/form/CodeInput/CodeMirror.less +168 -0
  287. package/src/legacy/tool-ui/src/form/CodeInput/CodeMirror.ts +15 -0
  288. package/src/legacy/tool-ui/src/form/CodeInput/index.ts +86 -0
  289. package/src/legacy/tool-ui/src/form/FormFilter/README.md +31 -0
  290. package/src/legacy/tool-ui/src/form/FormFilter/index.ts +340 -0
  291. package/src/legacy/tool-ui/src/form/Input/index.less +43 -0
  292. package/src/legacy/tool-ui/src/form/Input/index.ts +92 -0
  293. package/src/legacy/tool-ui/src/form/SearchInput/README.md +23 -0
  294. package/src/legacy/tool-ui/src/form/SearchInput/index.ts +89 -0
  295. package/src/legacy/tool-ui/src/form/TextAreaInput/index.less +11 -0
  296. package/src/legacy/tool-ui/src/form/TextAreaInput/index.ts +36 -0
  297. package/src/legacy/tool-ui/src/graphql/GraphQL.ts +49 -0
  298. package/src/legacy/tool-ui/src/graphql/GraphQLPreview.ts +23 -0
  299. package/src/legacy/tool-ui/src/main/resources/settings.properties +1 -0
  300. package/src/legacy/tool-ui/src/main/webapp/WEB-INF/web.xml +81 -0
  301. package/src/legacy/tool-ui/src/main/webapp/script/bsp-uploader.js +170 -0
  302. package/src/legacy/tool-ui/src/main/webapp/script/bsp-utils.js +393 -0
  303. package/src/legacy/tool-ui/src/main/webapp/script/content/layout-element.js +141 -0
  304. package/src/legacy/tool-ui/src/main/webapp/script/input/query.js +78 -0
  305. package/src/legacy/tool-ui/src/main/webapp/script/input/workflow.js +718 -0
  306. package/src/legacy/tool-ui/src/main/webapp/script/jquery.extra.js +633 -0
  307. package/src/legacy/tool-ui/src/main/webapp/script/v3/Dropbox.js +18 -0
  308. package/src/legacy/tool-ui/src/main/webapp/script/v3/EditFieldUpdate.js +406 -0
  309. package/src/legacy/tool-ui/src/main/webapp/script/v3/EditFieldUpdateCache.js +1 -0
  310. package/src/legacy/tool-ui/src/main/webapp/script/v3/Notification.js +151 -0
  311. package/src/legacy/tool-ui/src/main/webapp/script/v3/content/edit.js +194 -0
  312. package/src/legacy/tool-ui/src/main/webapp/script/v3/content/state.js +785 -0
  313. package/src/legacy/tool-ui/src/main/webapp/script/v3/csrf.js +35 -0
  314. package/src/legacy/tool-ui/src/main/webapp/script/v3/dashboard.js +65 -0
  315. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/dataTransfer.js +129 -0
  316. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/file.js +433 -0
  317. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/object.js +743 -0
  318. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/read-only.js +17 -0
  319. package/src/legacy/tool-ui/src/main/webapp/script/v3/jquery.frame.js +478 -0
  320. package/src/legacy/tool-ui/src/main/webapp/script/v3/jquery.repeatable.js +2406 -0
  321. package/src/legacy/tool-ui/src/main/webapp/script/v3/plugin/popup.d.ts +2 -0
  322. package/src/legacy/tool-ui/src/main/webapp/script/v3/plugin/popup.js +446 -0
  323. package/src/legacy/tool-ui/src/main/webapp/script/v3/search-filters.js +62 -0
  324. package/src/legacy/tool-ui/src/main/webapp/script/v3/search.js +53 -0
  325. package/src/legacy/tool-ui/src/main/webapp/script/v3.js +1049 -0
  326. package/src/legacy/tool-ui/src/main/webapp/style/v3/ExternalPreviewFrame.less +6 -0
  327. package/src/legacy/tool-ui/src/main/webapp/style/v3/WidgetSearchAdvancedQuery.less +24 -0
  328. package/src/legacy/tool-ui/src/main/webapp/style/v3/element.less +11 -0
  329. package/src/legacy/tool-ui/src/main/webapp/style/v3/icon/ajax-loader.gif +0 -0
  330. package/src/legacy/tool-ui/src/main/webapp/style/v3/index.less +98 -0
  331. package/src/legacy/tool-ui/src/main/webapp/style/v3/repeatable.less +89 -0
  332. package/src/legacy/tool-ui/src/main/webapp/style/v3/variables.less +53 -0
  333. package/src/legacy/tool-ui/src/main/webapp/v4/ActionBar.less +44 -0
  334. package/src/legacy/tool-ui/src/main/webapp/v4/Admin.js +16 -0
  335. package/src/legacy/tool-ui/src/main/webapp/v4/Admin.less +253 -0
  336. package/src/legacy/tool-ui/src/main/webapp/v4/AdobeStock.less +20 -0
  337. package/src/legacy/tool-ui/src/main/webapp/v4/Apis.less +43 -0
  338. package/src/legacy/tool-ui/src/main/webapp/v4/AutoExpand.js +84 -0
  339. package/src/legacy/tool-ui/src/main/webapp/v4/AutoExpand.less +36 -0
  340. package/src/legacy/tool-ui/src/main/webapp/v4/AutoSubmit.js +68 -0
  341. package/src/legacy/tool-ui/src/main/webapp/v4/Avatar.less +30 -0
  342. package/src/legacy/tool-ui/src/main/webapp/v4/BackgroundTasks.less +52 -0
  343. package/src/legacy/tool-ui/src/main/webapp/v4/Badge.less +10 -0
  344. package/src/legacy/tool-ui/src/main/webapp/v4/Board.less +311 -0
  345. package/src/legacy/tool-ui/src/main/webapp/v4/Bridge.js +536 -0
  346. package/src/legacy/tool-ui/src/main/webapp/v4/BulletedList.less +17 -0
  347. package/src/legacy/tool-ui/src/main/webapp/v4/Button.less +105 -0
  348. package/src/legacy/tool-ui/src/main/webapp/v4/CIGCluster.less +55 -0
  349. package/src/legacy/tool-ui/src/main/webapp/v4/Card.less +53 -0
  350. package/src/legacy/tool-ui/src/main/webapp/v4/Checkbox.less +99 -0
  351. package/src/legacy/tool-ui/src/main/webapp/v4/CheckboxInput.js +22 -0
  352. package/src/legacy/tool-ui/src/main/webapp/v4/Collections.less +49 -0
  353. package/src/legacy/tool-ui/src/main/webapp/v4/ColorInput.js +5 -0
  354. package/src/legacy/tool-ui/src/main/webapp/v4/ColorInputSpectrum.js +107 -0
  355. package/src/legacy/tool-ui/src/main/webapp/v4/ColorInputSpectrum.less +319 -0
  356. package/src/legacy/tool-ui/src/main/webapp/v4/ComboInput.js +1491 -0
  357. package/src/legacy/tool-ui/src/main/webapp/v4/ComboInput.less +403 -0
  358. package/src/legacy/tool-ui/src/main/webapp/v4/CommunityWidget.js +29 -0
  359. package/src/legacy/tool-ui/src/main/webapp/v4/CommunityWidget.less +73 -0
  360. package/src/legacy/tool-ui/src/main/webapp/v4/Compat.less +7 -0
  361. package/src/legacy/tool-ui/src/main/webapp/v4/ContentEdit.js +2427 -0
  362. package/src/legacy/tool-ui/src/main/webapp/v4/ContentEdit.less +1512 -0
  363. package/src/legacy/tool-ui/src/main/webapp/v4/ContentEditDrawer.less +329 -0
  364. package/src/legacy/tool-ui/src/main/webapp/v4/ContentEditSites.less +5 -0
  365. package/src/legacy/tool-ui/src/main/webapp/v4/ContentForm.less +174 -0
  366. package/src/legacy/tool-ui/src/main/webapp/v4/ContentInputGroup.less +669 -0
  367. package/src/legacy/tool-ui/src/main/webapp/v4/ContentLock.js +470 -0
  368. package/src/legacy/tool-ui/src/main/webapp/v4/ContentReporting.js +32 -0
  369. package/src/legacy/tool-ui/src/main/webapp/v4/ContentReporting.less +39 -0
  370. package/src/legacy/tool-ui/src/main/webapp/v4/ContentSelector.less +268 -0
  371. package/src/legacy/tool-ui/src/main/webapp/v4/ContentSummary.less +238 -0
  372. package/src/legacy/tool-ui/src/main/webapp/v4/ContentTools.less +73 -0
  373. package/src/legacy/tool-ui/src/main/webapp/v4/ContentType.less +24 -0
  374. package/src/legacy/tool-ui/src/main/webapp/v4/CopyToClipboard.less +20 -0
  375. package/src/legacy/tool-ui/src/main/webapp/v4/DashboardRow.less +40 -0
  376. package/src/legacy/tool-ui/src/main/webapp/v4/DashboardWidget.less +193 -0
  377. package/src/legacy/tool-ui/src/main/webapp/v4/DataTable.js +31 -0
  378. package/src/legacy/tool-ui/src/main/webapp/v4/DataTable.less +52 -0
  379. package/src/legacy/tool-ui/src/main/webapp/v4/DateStringField.js +485 -0
  380. package/src/legacy/tool-ui/src/main/webapp/v4/DateStringField.less +148 -0
  381. package/src/legacy/tool-ui/src/main/webapp/v4/DateTimeInput.less +58 -0
  382. package/src/legacy/tool-ui/src/main/webapp/v4/Diff.less +322 -0
  383. package/src/legacy/tool-ui/src/main/webapp/v4/Downloads.css +11 -0
  384. package/src/legacy/tool-ui/src/main/webapp/v4/Draggable.less +42 -0
  385. package/src/legacy/tool-ui/src/main/webapp/v4/Dropdown.less +76 -0
  386. package/src/legacy/tool-ui/src/main/webapp/v4/EmbeddedInputGroup.less +141 -0
  387. package/src/legacy/tool-ui/src/main/webapp/v4/Entry.js +264 -0
  388. package/src/legacy/tool-ui/src/main/webapp/v4/Entry.less +157 -0
  389. package/src/legacy/tool-ui/src/main/webapp/v4/ExternalItemAuth.js +16 -0
  390. package/src/legacy/tool-ui/src/main/webapp/v4/ExternalItemImport.less +3 -0
  391. package/src/legacy/tool-ui/src/main/webapp/v4/FileInput.less +194 -0
  392. package/src/legacy/tool-ui/src/main/webapp/v4/Form.js +31 -0
  393. package/src/legacy/tool-ui/src/main/webapp/v4/FormFilter.less +189 -0
  394. package/src/legacy/tool-ui/src/main/webapp/v4/Frame.less +26 -0
  395. package/src/legacy/tool-ui/src/main/webapp/v4/GraphQLApis.less +4 -0
  396. package/src/legacy/tool-ui/src/main/webapp/v4/Grid.less +48 -0
  397. package/src/legacy/tool-ui/src/main/webapp/v4/Guide.less +209 -0
  398. package/src/legacy/tool-ui/src/main/webapp/v4/GuideField.less +108 -0
  399. package/src/legacy/tool-ui/src/main/webapp/v4/Hierarchy.js +100 -0
  400. package/src/legacy/tool-ui/src/main/webapp/v4/Hierarchy.less +89 -0
  401. package/src/legacy/tool-ui/src/main/webapp/v4/Highlight.less +5 -0
  402. package/src/legacy/tool-ui/src/main/webapp/v4/Icon.less +53 -0
  403. package/src/legacy/tool-ui/src/main/webapp/v4/Icon.ts +49 -0
  404. package/src/legacy/tool-ui/src/main/webapp/v4/IconButton.less +111 -0
  405. package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditor.js +2403 -0
  406. package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditor.less +922 -0
  407. package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditorBundle.js +5 -0
  408. package/src/legacy/tool-ui/src/main/webapp/v4/Input.less +15 -0
  409. package/src/legacy/tool-ui/src/main/webapp/v4/InputRow.less +35 -0
  410. package/src/legacy/tool-ui/src/main/webapp/v4/Label.less +12 -0
  411. package/src/legacy/tool-ui/src/main/webapp/v4/LabeledCheckbox.less +35 -0
  412. package/src/legacy/tool-ui/src/main/webapp/v4/Link.less +93 -0
  413. package/src/legacy/tool-ui/src/main/webapp/v4/LinkCarousel.js +40 -0
  414. package/src/legacy/tool-ui/src/main/webapp/v4/LinkCarousel.less +143 -0
  415. package/src/legacy/tool-ui/src/main/webapp/v4/LinkList.js +14 -0
  416. package/src/legacy/tool-ui/src/main/webapp/v4/LinkList.less +150 -0
  417. package/src/legacy/tool-ui/src/main/webapp/v4/LinkTable.js +123 -0
  418. package/src/legacy/tool-ui/src/main/webapp/v4/LinkTable.less +112 -0
  419. package/src/legacy/tool-ui/src/main/webapp/v4/Location.js +19 -0
  420. package/src/legacy/tool-ui/src/main/webapp/v4/LocationMap.js +148 -0
  421. package/src/legacy/tool-ui/src/main/webapp/v4/LocationMap.less +62 -0
  422. package/src/legacy/tool-ui/src/main/webapp/v4/LookingGlass.js +24 -0
  423. package/src/legacy/tool-ui/src/main/webapp/v4/LookingGlass.less +30 -0
  424. package/src/legacy/tool-ui/src/main/webapp/v4/Message.js +14 -0
  425. package/src/legacy/tool-ui/src/main/webapp/v4/Message.less +189 -0
  426. package/src/legacy/tool-ui/src/main/webapp/v4/Month.less +102 -0
  427. package/src/legacy/tool-ui/src/main/webapp/v4/Notification.less +278 -0
  428. package/src/legacy/tool-ui/src/main/webapp/v4/NumberBar.js +32 -0
  429. package/src/legacy/tool-ui/src/main/webapp/v4/NumberBar.less +21 -0
  430. package/src/legacy/tool-ui/src/main/webapp/v4/NumberedList.less +17 -0
  431. package/src/legacy/tool-ui/src/main/webapp/v4/Page.js +890 -0
  432. package/src/legacy/tool-ui/src/main/webapp/v4/Page.less +922 -0
  433. package/src/legacy/tool-ui/src/main/webapp/v4/PaginatedResult.less +89 -0
  434. package/src/legacy/tool-ui/src/main/webapp/v4/Pagination.less +80 -0
  435. package/src/legacy/tool-ui/src/main/webapp/v4/Popup.less +415 -0
  436. package/src/legacy/tool-ui/src/main/webapp/v4/PrePublish.less +5 -0
  437. package/src/legacy/tool-ui/src/main/webapp/v4/Preview.js +758 -0
  438. package/src/legacy/tool-ui/src/main/webapp/v4/Preview.less +495 -0
  439. package/src/legacy/tool-ui/src/main/webapp/v4/PreviewEditor.js +86 -0
  440. package/src/legacy/tool-ui/src/main/webapp/v4/PreviewOverlay.js +1005 -0
  441. package/src/legacy/tool-ui/src/main/webapp/v4/ProfileDropdown.less +66 -0
  442. package/src/legacy/tool-ui/src/main/webapp/v4/PubSub.js +47 -0
  443. package/src/legacy/tool-ui/src/main/webapp/v4/QueryField.js +211 -0
  444. package/src/legacy/tool-ui/src/main/webapp/v4/QueryField.less +147 -0
  445. package/src/legacy/tool-ui/src/main/webapp/v4/RadialProgressBar.less +20 -0
  446. package/src/legacy/tool-ui/src/main/webapp/v4/RegionMap.js +215 -0
  447. package/src/legacy/tool-ui/src/main/webapp/v4/Repeatable.less +102 -0
  448. package/src/legacy/tool-ui/src/main/webapp/v4/RepeatableContentInputGroup.js +160 -0
  449. package/src/legacy/tool-ui/src/main/webapp/v4/RepeatableContentInputGroup.less +731 -0
  450. package/src/legacy/tool-ui/src/main/webapp/v4/RepeatableContentSelector.less +296 -0
  451. package/src/legacy/tool-ui/src/main/webapp/v4/RepeatableTextInput.less +156 -0
  452. package/src/legacy/tool-ui/src/main/webapp/v4/Reset.less +373 -0
  453. package/src/legacy/tool-ui/src/main/webapp/v4/Revision.less +50 -0
  454. package/src/legacy/tool-ui/src/main/webapp/v4/RichText.less +32 -0
  455. package/src/legacy/tool-ui/src/main/webapp/v4/RichTextEditor.js +154 -0
  456. package/src/legacy/tool-ui/src/main/webapp/v4/RichTextEditor.less +197 -0
  457. package/src/legacy/tool-ui/src/main/webapp/v4/SearchFields.js +281 -0
  458. package/src/legacy/tool-ui/src/main/webapp/v4/SearchFields.less +403 -0
  459. package/src/legacy/tool-ui/src/main/webapp/v4/SearchInput.less +65 -0
  460. package/src/legacy/tool-ui/src/main/webapp/v4/SearchResult.js +255 -0
  461. package/src/legacy/tool-ui/src/main/webapp/v4/SearchResult.less +479 -0
  462. package/src/legacy/tool-ui/src/main/webapp/v4/SearchWidget.less +697 -0
  463. package/src/legacy/tool-ui/src/main/webapp/v4/SearchWidgetAdvanced.less +115 -0
  464. package/src/legacy/tool-ui/src/main/webapp/v4/SharePreview.js +56 -0
  465. package/src/legacy/tool-ui/src/main/webapp/v4/SharePreview.less +95 -0
  466. package/src/legacy/tool-ui/src/main/webapp/v4/Sortable.js +874 -0
  467. package/src/legacy/tool-ui/src/main/webapp/v4/Sortable.less +242 -0
  468. package/src/legacy/tool-ui/src/main/webapp/v4/StandardForm.less +12 -0
  469. package/src/legacy/tool-ui/src/main/webapp/v4/StyleEmbeddedContent.js +100 -0
  470. package/src/legacy/tool-ui/src/main/webapp/v4/StyleEmbeddedContent.less +131 -0
  471. package/src/legacy/tool-ui/src/main/webapp/v4/StyleguidePresets.js +357 -0
  472. package/src/legacy/tool-ui/src/main/webapp/v4/Suggestions.less +121 -0
  473. package/src/legacy/tool-ui/src/main/webapp/v4/TabBar.less +258 -0
  474. package/src/legacy/tool-ui/src/main/webapp/v4/TabContainer.js +360 -0
  475. package/src/legacy/tool-ui/src/main/webapp/v4/TabContainer.less +26 -0
  476. package/src/legacy/tool-ui/src/main/webapp/v4/Taxonomy.js +27 -0
  477. package/src/legacy/tool-ui/src/main/webapp/v4/Taxonomy.less +84 -0
  478. package/src/legacy/tool-ui/src/main/webapp/v4/Text.less +41 -0
  479. package/src/legacy/tool-ui/src/main/webapp/v4/TextInput.less +32 -0
  480. package/src/legacy/tool-ui/src/main/webapp/v4/ThemeBundleEditor.js +224 -0
  481. package/src/legacy/tool-ui/src/main/webapp/v4/ThemeBundleEditor.less +106 -0
  482. package/src/legacy/tool-ui/src/main/webapp/v4/TimedContent.js +147 -0
  483. package/src/legacy/tool-ui/src/main/webapp/v4/TimedContent.less +202 -0
  484. package/src/legacy/tool-ui/src/main/webapp/v4/TimedContentBundle.js +8 -0
  485. package/src/legacy/tool-ui/src/main/webapp/v4/TreeList.less +93 -0
  486. package/src/legacy/tool-ui/src/main/webapp/v4/Utils.css +14 -0
  487. package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditor.js +2417 -0
  488. package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditor.less +737 -0
  489. package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditorBundle.js +8 -0
  490. package/src/legacy/tool-ui/src/main/webapp/v4/ViewMirror.js +52 -0
  491. package/src/legacy/tool-ui/src/main/webapp/v4/ViewMirror.less +42 -0
  492. package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.d.ts +13 -0
  493. package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.js +177 -0
  494. package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.less +147 -0
  495. package/src/legacy/tool-ui/src/main/webapp/v4/Viewers.less +70 -0
  496. package/src/legacy/tool-ui/src/main/webapp/v4/Week.less +32 -0
  497. package/src/legacy/tool-ui/src/main/webapp/v4/Widget.js +90 -0
  498. package/src/legacy/tool-ui/src/main/webapp/v4/Widget.less +224 -0
  499. package/src/legacy/tool-ui/src/main/webapp/v4/Workflow.less +153 -0
  500. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/fileMock.js +1 -0
  501. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/styleMock.js +1 -0
  502. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/textArea.mock.js +20 -0
  503. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/globals.js +770 -0
  504. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/ProseMirror.test.js +16 -0
  505. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/index.html +54 -0
  506. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/comment_manager/CommentManager.test.js +29 -0
  507. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/comment_manager/index.html +35 -0
  508. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/custom_keyboard/CustomKeyboard.js +42 -0
  509. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/custom_keyboard/index.html +37 -0
  510. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/EnhancementManager.test.js +288 -0
  511. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/block.html +38 -0
  512. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/inline.html +38 -0
  513. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/no-popups.html +38 -0
  514. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/list_manager/ListManager.js +257 -0
  515. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/list_manager/index.html +38 -0
  516. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/hierarchal.html +33 -0
  517. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/index.html +33 -0
  518. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/menubar.test.js +195 -0
  519. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/small.html +34 -0
  520. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/tags.html +34 -0
  521. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/PlaceholderManager.test.js +134 -0
  522. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/has-editable-placeholder.html +32 -0
  523. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/has-text.html +34 -0
  524. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/index.html +31 -0
  525. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/table_manager/TableManager.test.js +63 -0
  526. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/table_manager/existing.html +48 -0
  527. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/TrackManager.test.js +291 -0
  528. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/existing.html +39 -0
  529. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/insert.html +37 -0
  530. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/Sortable.test.js +105 -0
  531. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/ProseMirror.test.js +41 -0
  532. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/codemirror-shim.test.js +72 -0
  533. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/collab_manager/CollabManager.test.js +46 -0
  534. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/enhancement_manager/EnhancementManager.test.js +84 -0
  535. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/list_manager/ListManager.test.js +54 -0
  536. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/menubar/menubar.test.js +183 -0
  537. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/spellcheck/SpellCheck.test.js +45 -0
  538. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/settings/BSSerializer.test.js +346 -0
  539. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/settings/menuItemsBuilder.test.js +226 -0
  540. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/utilities.test.js +118 -0
  541. package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/Appetizeio.js +5 -0
  542. package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/AppetizeioEmbedded.js +113 -0
  543. package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/AppetizeioEmbedded.less +77 -0
  544. package/src/legacy/tool-ui/src/main/webapp/v4/bsp-rings-bg.svg +9 -0
  545. package/src/legacy/tool-ui/src/main/webapp/v4/compat/Fetch.js +16 -0
  546. package/src/legacy/tool-ui/src/main/webapp/v4/compat/jquery.js +32 -0
  547. package/src/legacy/tool-ui/src/main/webapp/v4/compat/requirejs.js +13 -0
  548. package/src/legacy/tool-ui/src/main/webapp/v4/dom/Tether.js +1 -0
  549. package/src/legacy/tool-ui/src/main/webapp/v4/dom/TetherLayout.js +1 -0
  550. package/src/legacy/tool-ui/src/main/webapp/v4/dom/closest.js +1 -0
  551. package/src/legacy/tool-ui/src/main/webapp/v4/dom/create.js +1 -0
  552. package/src/legacy/tool-ui/src/main/webapp/v4/dom/find.js +1 -0
  553. package/src/legacy/tool-ui/src/main/webapp/v4/dom/findAll.js +1 -0
  554. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifClick.js +1 -0
  555. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifMatches.js +1 -0
  556. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifUnmodified.js +1 -0
  557. package/src/legacy/tool-ui/src/main/webapp/v4/dom/index.js +5 -0
  558. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertBefore.js +1 -0
  559. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertFirst.js +1 -0
  560. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertLast.js +1 -0
  561. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onFind.js +1 -0
  562. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onFindOnce.js +1 -0
  563. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onRTEReady.js +1 -0
  564. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onRemove.js +1 -0
  565. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onVisible.js +1 -0
  566. package/src/legacy/tool-ui/src/main/webapp/v4/dom/previousUntil.js +1 -0
  567. package/src/legacy/tool-ui/src/main/webapp/v4/dom/resolveIconCompat.js +40 -0
  568. package/src/legacy/tool-ui/src/main/webapp/v4/graphql/GraphQL.less +171 -0
  569. package/src/legacy/tool-ui/src/main/webapp/v4/mail-publishing/MailPublishing.less +38 -0
  570. package/src/legacy/tool-ui/src/main/webapp/v4/rtc/Socket.js +1 -0
  571. package/src/legacy/tool-ui/src/main/webapp/v4/rtc/index.js +1 -0
  572. package/src/legacy/tool-ui/src/main/webapp/v4/rte/Mention.less +35 -0
  573. package/src/legacy/tool-ui/src/main/webapp/v4/rte/ProseMirror.js +909 -0
  574. package/src/legacy/tool-ui/src/main/webapp/v4/rte/ProseMirror.less +759 -0
  575. package/src/legacy/tool-ui/src/main/webapp/v4/rte/ProseMirrorContainer.less +29 -0
  576. package/src/legacy/tool-ui/src/main/webapp/v4/rte/README.md +68 -0
  577. package/src/legacy/tool-ui/src/main/webapp/v4/rte/codemirror-shim.d.ts +8 -0
  578. package/src/legacy/tool-ui/src/main/webapp/v4/rte/codemirror-shim.js +274 -0
  579. package/src/legacy/tool-ui/src/main/webapp/v4/rte/collab-workflow.jpeg +0 -0
  580. package/src/legacy/tool-ui/src/main/webapp/v4/rte/interchangeable.ts +250 -0
  581. package/src/legacy/tool-ui/src/main/webapp/v4/rte/mention.js +90 -0
  582. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/PluginProvider.js +124 -0
  583. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/README.md +46 -0
  584. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/AIInlineManager.ts +124 -0
  585. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/views/AIInline.less +244 -0
  586. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/views/AIInlineView.ts +1019 -0
  587. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_manager/AiManager.ts +199 -0
  588. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/CollabManager.js +339 -0
  589. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/views/AvatarView.js +96 -0
  590. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/views/AvatarView.less +11 -0
  591. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/views/CollabEditing.less +18 -0
  592. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/comment_manager/CommentManager.js +348 -0
  593. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/CustomKeyboard.js +110 -0
  594. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/CustomKeyboard.less +21 -0
  595. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/README.md +29 -0
  596. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/EnhancementManager.js +428 -0
  597. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/README.md +63 -0
  598. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/commands.js +690 -0
  599. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/constants.js +12 -0
  600. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/enhancement-creation.jpeg +0 -0
  601. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/index.js +15 -0
  602. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/rte-flow.jpeg +0 -0
  603. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/ActionButtonView.js +86 -0
  604. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/BlockSubmenuView.js +60 -0
  605. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/Enhancement.less +67 -0
  606. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/EnhancementView.js +208 -0
  607. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/PreviewView.js +102 -0
  608. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/PreviewView.less +45 -0
  609. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/ProsemirrorEnhancementMenu.less +113 -0
  610. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/SubmenuView.js +365 -0
  611. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/FindReplaceManager.js +239 -0
  612. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/views/FindView.js +604 -0
  613. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/views/ProseMirrorFindReplace.less +174 -0
  614. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/FullscreenManager.js +57 -0
  615. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/README.md +26 -0
  616. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/commands.js +16 -0
  617. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/index.js +4 -0
  618. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/views/FullscreenView.js +474 -0
  619. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/views/FullscreenView.less +383 -0
  620. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/html_editor_manager/htmlEditorManager.js +66 -0
  621. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/html_editor_manager/views/HtmlEditorView.js +97 -0
  622. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/ListManager.js +342 -0
  623. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/ListManager.less +42 -0
  624. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/README.md +50 -0
  625. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/commands.js +207 -0
  626. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/constants.js +26 -0
  627. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/index.js +4 -0
  628. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/Menubar.js +485 -0
  629. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/README.md +40 -0
  630. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/views/MenuView.js +842 -0
  631. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/views/MenuView.less +821 -0
  632. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/paste_manager/PasteManager.js +368 -0
  633. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/paste_manager/views/PastePopup.less +5 -0
  634. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/placeholder_manager/PlaceHolderManager.js +128 -0
  635. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/raw_text_manager/README.md +13 -0
  636. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/raw_text_manager/RawTextManager.js +96 -0
  637. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/index.js +3 -0
  638. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck-plugin.js +280 -0
  639. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck-service.js +94 -0
  640. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck.less +73 -0
  641. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/TableManager.js +57 -0
  642. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/commands.js +97 -0
  643. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/ProseMirror-table.less +137 -0
  644. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableSizerPopup.less +19 -0
  645. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableSizerView.js +88 -0
  646. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableView.js +613 -0
  647. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/track_manager/README.md +13 -0
  648. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/track_manager/TrackManager.js +905 -0
  649. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/BSSerializer.js +819 -0
  650. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/README.md +80 -0
  651. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/commands.js +98 -0
  652. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/constants.d.ts +84 -0
  653. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/constants.js +87 -0
  654. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/index.js +13 -0
  655. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/keymapBuilder.js +223 -0
  656. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/menuItemsBuilder.js +559 -0
  657. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/schemaBuilder.js +1281 -0
  658. package/src/legacy/tool-ui/src/main/webapp/v4/rte/utilities.d.ts +4 -0
  659. package/src/legacy/tool-ui/src/main/webapp/v4/rte/utilities.js +359 -0
  660. package/src/legacy/tool-ui/src/main/webapp/v4/theme/ColorRotator.js +1 -0
  661. package/src/legacy/tool-ui/src/main/webapp/v4/theme/Theme.less +224 -0
  662. package/src/legacy/tool-ui/src/main/webapp/v4/translation/Translation.less +114 -0
  663. package/src/legacy/tool-ui/src/main/webapp/v4/util/debounce.js +1 -0
  664. package/src/legacy/tool-ui/src/main/webapp/v4/util/getComponentKey.js +1 -0
  665. package/src/legacy/tool-ui/src/main/webapp/v4/util/noise.js +1 -0
  666. package/src/legacy/tool-ui/src/main/webapp/v4/util/repaint.js +1 -0
  667. package/src/legacy/tool-ui/src/main/webapp/v4/util/storage.js +1 -0
  668. package/src/legacy/tool-ui/src/main/webapp/v4/util/throttle.js +1 -0
  669. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AnalyticsWidget.less +18 -0
  670. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentContent.js +33 -0
  671. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentContent.less +19 -0
  672. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentDeskDashboard.js +217 -0
  673. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentDeskDashboard.less +410 -0
  674. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentDeskRelatedWidget.less +3 -0
  675. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentFilters.less +23 -0
  676. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssociatedContentWidget.js +7 -0
  677. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssociatedContentWidget.less +92 -0
  678. package/src/legacy/tool-ui/src/main/webapp/v4/widget/BulkUpload.js +19 -0
  679. package/src/legacy/tool-ui/src/main/webapp/v4/widget/BulkUpload.less +65 -0
  680. package/src/legacy/tool-ui/src/main/webapp/v4/widget/BulkWorkflow.less +103 -0
  681. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Calendar.js +7 -0
  682. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Calendar.less +109 -0
  683. package/src/legacy/tool-ui/src/main/webapp/v4/widget/CalendarAccessOverview.less +26 -0
  684. package/src/legacy/tool-ui/src/main/webapp/v4/widget/CalendarEventSummary.less +15 -0
  685. package/src/legacy/tool-ui/src/main/webapp/v4/widget/ClosableWindow.js +13 -0
  686. package/src/legacy/tool-ui/src/main/webapp/v4/widget/ClosableWindow.less +3 -0
  687. package/src/legacy/tool-ui/src/main/webapp/v4/widget/ContentColors.less +17 -0
  688. package/src/legacy/tool-ui/src/main/webapp/v4/widget/ContentTemplatesWidget.less +123 -0
  689. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Conversation.less +537 -0
  690. package/src/legacy/tool-ui/src/main/webapp/v4/widget/CopySiteWidget.less +13 -0
  691. package/src/legacy/tool-ui/src/main/webapp/v4/widget/FormSubmission.less +3 -0
  692. package/src/legacy/tool-ui/src/main/webapp/v4/widget/LiveBlog.less +158 -0
  693. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchAssignments.js +25 -0
  694. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchAssignments.less +16 -0
  695. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchContent.js +33 -0
  696. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchContent.less +10 -0
  697. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Revisions.js +61 -0
  698. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Revisions.less +280 -0
  699. package/src/legacy/tool-ui/src/main/webapp/v4/widget/SavedSearch.less +13 -0
  700. package/src/legacy/tool-ui/src/main/webapp/v4/widget/SemRushDashboardWidget.less +6 -0
  701. package/src/legacy/tool-ui/src/main/webapp/v4/widget/SlackAuthentication.less +13 -0
  702. package/src/legacy/tool-ui/src/main/webapp/v4/widget/WorkStreams.less +39 -0
  703. package/src/legacy/tool-ui/src/platform.ts +25 -0
  704. package/src/legacy/tool-ui/src/rtc/Socket.ts +205 -0
  705. package/src/legacy/tool-ui/src/rtc/index.ts +276 -0
  706. package/src/legacy/tool-ui/src/table/README.md +3 -0
  707. package/src/legacy/tool-ui/src/table/index.ts +107 -0
  708. package/src/legacy/tool-ui/src/theme/ColorRotator.ts +32 -0
  709. package/src/legacy/tool-ui/src/theme/Theme.ts +516 -0
  710. package/src/legacy/tool-ui/src/theme/index.ts +7 -0
  711. package/src/legacy/tool-ui/src/util/README.md +42 -0
  712. package/src/legacy/tool-ui/src/util/debounce.ts +22 -0
  713. package/src/legacy/tool-ui/src/util/getComponentKey.ts +25 -0
  714. package/src/legacy/tool-ui/src/util/noise.ts +51 -0
  715. package/src/legacy/tool-ui/src/util/repaint.ts +17 -0
  716. package/src/legacy/tool-ui/src/util/storage.ts +21 -0
  717. package/src/legacy/tool-ui/src/util/string.ts +15 -0
  718. package/src/legacy/tool-ui/src/util/svg.ts +46 -0
  719. package/src/legacy/tool-ui/src/util/throttle.ts +37 -0
  720. package/src/legacy/tool-ui/src/util/transition.ts +5 -0
  721. package/src/legacy/tool-ui/src/v5.css +149 -0
  722. package/src/legacy/tool-ui/src/v5.ts +2059 -0
  723. package/src/legacy/tool-ui/src/widget/README.md +27 -0
  724. package/src/legacy/tool-ui/src/widget/index.ts +160 -0
  725. package/dist/storybook/assets/if-defined-C1_PRAyA.js +0 -1
@@ -0,0 +1,1019 @@
1
+ import { getPluginState } from '../../../utilities'
2
+ import { html, render, TemplateResult } from 'lit-html'
3
+ import { DOMParser as ProseDOMParser, Schema } from 'prosemirror-model'
4
+ import { EditorView } from 'prosemirror-view'
5
+ import { getLegacyHTMLTextForProsemirror } from '../../../codemirror-shim'
6
+ import create from '../../../../../../../dom/create'
7
+ import moment from 'moment'
8
+ import Cookies from 'js-cookie'
9
+ import DOMPurify from 'dompurify'
10
+
11
+ if (!window.BRIGHTSPOT?.ui.cms.enableV5UI) {
12
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
13
+ // @ts-ignore
14
+ await import('./AIInline.less')
15
+ }
16
+
17
+ const BASE_CLASS = 'ProseMirrorAIInline-container'
18
+ const PROMPT_PLACEHOLDER = window.RTE_PROMPT_PLACEHOLDER
19
+ const PROMPT_PREFIX = window.RTE_PROMPT_PREFIX
20
+ const PROMPT_RETRY = window.RTE_PROMPT_RETRY
21
+ const WORKING_ON_IT_TEXT = window.RTE_WORKING_ON_IT
22
+ const ACCEPT_BUTTON_TEXT = window.RTE_ACCEPT
23
+ const DISCARD_BUTTON_TEXT = window.RTE_DISCARD
24
+ const TRY_AGAIN_BUTTON_TEXT = window.RTE_TRY_AGAIN
25
+ const COLLAPSED_CLASS = 'collapsed'
26
+ const CHAT_PAGE_RESPONSES_PATH = (
27
+ window.BRIGHTSPOT?.web?.pagePaths as Record<string, string>
28
+ )?.['com.psddev.ai.chat.ChatPageResponses']
29
+ const PROMPT_SUGGESTIONS_PATH = (
30
+ window.BRIGHTSPOT?.web?.pagePaths as Record<string, string>
31
+ )?.['com.psddev.ai.chat.PromptPage']
32
+
33
+ interface CompliantTagNameMap extends Map<string, string> {
34
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
+ [key: string]: any
36
+ }
37
+
38
+ /**
39
+ * AI Inline widget for the ProseMirror RTE editor.
40
+ * Provides AI-powered text suggestions and editing functionality.
41
+ */
42
+ class AIInlineView {
43
+ private focused = false
44
+ private isLoading = false
45
+ private retry = false
46
+ private suggestionsFetched = false
47
+ private readonly editorView: EditorView
48
+ private readonly myKey: string
49
+ private readonly userLabel: string
50
+ private readonly userId: string
51
+ private readonly compliantTagNameMap: CompliantTagNameMap
52
+ private readonly dom: HTMLDivElement
53
+ private readonly field: string
54
+ private readonly textArea: HTMLTextAreaElement | null
55
+ private readonly loadingOverlay: HTMLDivElement
56
+ private readonly loadingPromptEle: HTMLDivElement | null
57
+ private readonly objectId?: string
58
+ private readonly typeId?: string
59
+ private readonly contentState?: string
60
+ private inputEle?: HTMLInputElement
61
+ private submitButtonEle?: HTMLButtonElement
62
+ private acceptRejectContainerEle?: HTMLDivElement
63
+ private suggestionsContainer: HTMLElement | null = null
64
+ private sendTrackingEvent?: (interaction: string) => void
65
+ private chatId?: string
66
+ private responseId?: string
67
+ private lastPrompt?: string
68
+ private lastSelectedContent?: string
69
+ private lastSelectionFrom?: number
70
+ private lastSelectionTo?: number
71
+
72
+ constructor(
73
+ editorView: EditorView,
74
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
+ myKey: any,
76
+ userLabel: string,
77
+ userId: string,
78
+ compliantTagNameMap: CompliantTagNameMap,
79
+ ) {
80
+ this.editorView = editorView
81
+ this.myKey = myKey
82
+ this.userLabel = userLabel
83
+ this.userId = userId
84
+ this.compliantTagNameMap = compliantTagNameMap
85
+
86
+ const editorDom = this.editorView.dom
87
+ const contentForm =
88
+ editorDom.parentElement?.closest<HTMLElement>('.ContentEdit')
89
+ const cig = editorDom.closest<HTMLElement>('.CIG')
90
+ const cigRowParent = editorDom.closest<HTMLElement>('.CIG-row')
91
+
92
+ this.objectId = cig?.dataset?.objectId
93
+ this.typeId = contentForm?.dataset?.typeId
94
+ this.field = cigRowParent?.dataset?.field || ''
95
+ this.contentState = contentForm?.querySelector<HTMLInputElement>(
96
+ `input[name="${contentForm?.dataset?.contentId}/oldValues"]`,
97
+ )?.value
98
+ this.textArea = cigRowParent?.querySelector('textarea') || null
99
+
100
+ this.dom = create('div', {
101
+ class: `${BASE_CLASS} ${COLLAPSED_CLASS}`,
102
+ })
103
+
104
+ render(this.template(), this.dom)
105
+
106
+ this.inputEle =
107
+ this.dom.querySelector<HTMLInputElement>(
108
+ `input.${BASE_CLASS}-inputContainer-input`,
109
+ ) ?? undefined
110
+
111
+ // Create loading overlay as a sibling element (not inside the container)
112
+ this.loadingOverlay = create(
113
+ 'div',
114
+ { class: 'ProseMirrorAIInline-loadingOverlay' },
115
+ [
116
+ create('div', { class: 'ProseMirrorAIInline-loadingOverlay-prompt' }),
117
+ create('div', { class: 'ProseMirrorAIInline-loadingOverlay-spinner' }, [
118
+ create('div', {
119
+ class: 'ProseMirrorAIInline-loadingOverlay-spinner-icon',
120
+ }),
121
+ create(
122
+ 'div',
123
+ { class: 'ProseMirrorAIInline-loadingOverlay-spinner-text' },
124
+ WORKING_ON_IT_TEXT,
125
+ ),
126
+ ]),
127
+ ],
128
+ )
129
+
130
+ this.loadingPromptEle = this.loadingOverlay.querySelector<HTMLDivElement>(
131
+ '.ProseMirrorAIInline-loadingOverlay-prompt',
132
+ )
133
+
134
+ this.submitButtonEle =
135
+ this.dom.querySelector<HTMLButtonElement>(
136
+ `button.${BASE_CLASS}-inputContainer-submitButton`,
137
+ ) ?? undefined
138
+
139
+ // Create the accept/reject container imperatively (not in lit-html template)
140
+ // so it persists across re-renders when attached to the toolbar button
141
+ this.acceptRejectContainerEle = this.createAcceptRejectContainer()
142
+
143
+ this.inputEle?.addEventListener('focus', (evt: Event) => {
144
+ evt.preventDefault()
145
+ })
146
+
147
+ // We want to keep the top of the AI Inline Editing widget
148
+ // anchored to the bottom of the toolbar, but the toolbar
149
+ // contracts and expands when our editorView contracts and
150
+ // expands (e.g. user toggles preview pane), so this will
151
+ // ensure the top of the widget remains anchored by letting us
152
+ // know when the editorView has implicitly resized itself.
153
+ const ro = new ResizeObserver(() => {
154
+ this.render()
155
+ })
156
+
157
+ ro.observe(this.editorView.dom)
158
+
159
+ this.render()
160
+ this.initTracking()
161
+ }
162
+
163
+ /**
164
+ * Our AI Inline widget markup.
165
+ */
166
+ private template = (): TemplateResult => html`
167
+ <div class="${BASE_CLASS}-inputContainer">
168
+ <input
169
+ class="${BASE_CLASS}-inputContainer-input"
170
+ type="text"
171
+ data-hide-word-count="true"
172
+ placeholder="${PROMPT_PLACEHOLDER}"
173
+ @keydown=${(e: KeyboardEvent) => {
174
+ if (e.key === 'Enter') {
175
+ e.preventDefault()
176
+ this.sendTrackingEvent?.('submit inline prompt')
177
+ this.submitSuggestion(
178
+ this.editorView,
179
+ this.editorView.state.schema,
180
+ this.inputEle?.value,
181
+ )
182
+ }
183
+ }}
184
+ />
185
+ <button
186
+ type="button"
187
+ class="${BASE_CLASS}-inputContainer-submitButton"
188
+ aria-label=${window.BRIGHTSPOT?.ai?.submitSuggestion}
189
+ title=${window.BRIGHTSPOT?.ai?.submitSuggestion}
190
+ @click=${() => {
191
+ if (this.isLoading) {
192
+ this.cancelSuggestion()
193
+ } else {
194
+ this.sendTrackingEvent?.('submit inline prompt')
195
+ this.submitSuggestion(
196
+ this.editorView,
197
+ this.editorView.state.schema,
198
+ this.inputEle?.value,
199
+ )
200
+ }
201
+ }}
202
+ ></button>
203
+ </div>
204
+ `
205
+
206
+ /**
207
+ * Creates the accept/reject container element imperatively.
208
+ * This is done outside of lit-html so it persists across re-renders.
209
+ */
210
+ private createAcceptRejectContainer(): HTMLDivElement {
211
+ const acceptButton = create('button', {}, [
212
+ create('span', { class: `${BASE_CLASS}-actions-accept-icon` }),
213
+ ACCEPT_BUTTON_TEXT,
214
+ ])
215
+ acceptButton.addEventListener('click', this.handleAccept)
216
+
217
+ const discardButton = create('button', {}, [
218
+ create('span', { class: `${BASE_CLASS}-actions-rejectAll-icon` }),
219
+ DISCARD_BUTTON_TEXT,
220
+ ])
221
+ discardButton.addEventListener('click', this.handleDiscard)
222
+
223
+ const tryAgainButton = create('button', {}, [
224
+ create('span', { class: `${BASE_CLASS}-actions-tryAgain-icon` }),
225
+ TRY_AGAIN_BUTTON_TEXT,
226
+ ])
227
+ tryAgainButton.addEventListener('click', this.handleTryAgain)
228
+
229
+ const container = create(
230
+ 'div',
231
+ {
232
+ class: `${BASE_CLASS}-acceptRejectContainer`,
233
+ hidden: '',
234
+ },
235
+ [
236
+ create('ul', { class: `${BASE_CLASS}-actions`, role: 'menu' }, [
237
+ create(
238
+ 'li',
239
+ {
240
+ class: `${BASE_CLASS}-actions-accept ProseMirrorToolbar-action`,
241
+ role: 'menuitem',
242
+ },
243
+ [acceptButton],
244
+ ),
245
+ create(
246
+ 'li',
247
+ {
248
+ class: `${BASE_CLASS}-actions-rejectAll ProseMirrorToolbar-action`,
249
+ role: 'menuitem',
250
+ },
251
+ [discardButton],
252
+ ),
253
+ create(
254
+ 'li',
255
+ {
256
+ class: `${BASE_CLASS}-actions-tryAgain ProseMirrorToolbar-action`,
257
+ role: 'menuitem',
258
+ },
259
+ [tryAgainButton],
260
+ ),
261
+ ]),
262
+ ],
263
+ )
264
+
265
+ // Stop click events from propagating to the toolbar button (which would toggle AI inline off)
266
+ container.addEventListener('click', (evt: Event) => {
267
+ evt.stopPropagation()
268
+ })
269
+
270
+ return container
271
+ }
272
+
273
+ /**
274
+ * Hides the accept/reject container and resets the input field.
275
+ */
276
+ private hideAcceptRejectContainer(): void {
277
+ if (this.inputEle) {
278
+ this.inputEle.value = ''
279
+ this.inputEle.placeholder = PROMPT_PLACEHOLDER
280
+ }
281
+
282
+ if (this.acceptRejectContainerEle) {
283
+ this.acceptRejectContainerEle.setAttribute('hidden', '')
284
+ }
285
+ this.dom.classList.remove('has-suggestions')
286
+ }
287
+
288
+ /**
289
+ * Shows the accept/reject container, recreating and reattaching if needed.
290
+ */
291
+ private showAcceptRejectContainer(): void {
292
+ // Recreate the container if it was removed from the DOM (e.g., toolbar re-render)
293
+ if (!this.acceptRejectContainerEle?.isConnected) {
294
+ this.acceptRejectContainerEle = this.createAcceptRejectContainer()
295
+ }
296
+
297
+ // Attach to AI inline toolbar button if not already attached
298
+ if (
299
+ !this.acceptRejectContainerEle.parentElement?.matches(
300
+ "[data-rte-style='rte2-toolbar-ai-inline']",
301
+ )
302
+ ) {
303
+ const aiInlineButton = this.editorView.dom
304
+ .closest('.ProseMirrorContainer')
305
+ ?.querySelector("[data-rte-style='rte2-toolbar-ai-inline']")
306
+ aiInlineButton?.appendChild(this.acceptRejectContainerEle)
307
+ }
308
+
309
+ this.attachAcceptRejectTracking(this.acceptRejectContainerEle)
310
+ this.acceptRejectContainerEle.removeAttribute('hidden')
311
+ this.dom.classList.add('has-suggestions')
312
+ }
313
+
314
+ /**
315
+ * Accepts the suggested text by removing deleted content and keeping inserted content.
316
+ */
317
+ private handleAccept = (evt: Event): void => {
318
+ evt.preventDefault()
319
+
320
+ const { state, dispatch } = this.editorView
321
+ const { tr, schema } = state
322
+
323
+ // Find and delete content marked for deletion
324
+ let startPosDel: number | null = null
325
+ let endPosDel: number | null = null
326
+ tr.doc.descendants((node, pos) => {
327
+ node.marks.forEach((mark) => {
328
+ if (mark.type === schema.marks.aiInlineDel) {
329
+ if (startPosDel === null) {
330
+ startPosDel = pos > 0 ? pos - 1 : pos
331
+ }
332
+ endPosDel = pos + node.nodeSize
333
+ }
334
+ })
335
+ })
336
+
337
+ if (startPosDel !== null && endPosDel !== null) {
338
+ tr.delete(startPosDel, endPosDel)
339
+ }
340
+
341
+ // Remove insertion marks from the kept text
342
+ tr.doc.descendants((node, pos) => {
343
+ node.marks.forEach((mark) => {
344
+ if (mark.type === schema.marks.aiInlineIns) {
345
+ tr.removeMark(pos, pos + node.nodeSize, schema.marks.aiInlineIns)
346
+ }
347
+ })
348
+ })
349
+
350
+ this.hideAcceptRejectContainer()
351
+ dispatch(tr)
352
+ }
353
+
354
+ /**
355
+ * Rejects the suggested text by removing inserted content and keeping original content.
356
+ */
357
+ private handleDiscard = (evt: Event): void => {
358
+ evt.preventDefault()
359
+
360
+ const { state, dispatch } = this.editorView
361
+ const { tr, schema } = state
362
+
363
+ // Find and delete inserted content
364
+ let startPosIns: number | null = null
365
+ let endPosIns: number | null = null
366
+ tr.doc.descendants((node, pos) => {
367
+ node.marks.forEach((mark) => {
368
+ if (mark.type === schema.marks.aiInlineIns) {
369
+ if (startPosIns === null) {
370
+ startPosIns = pos > 0 ? pos - 1 : pos
371
+ }
372
+ endPosIns = pos + node.nodeSize
373
+ if (endPosIns < tr.doc.content.size) {
374
+ endPosIns += 1
375
+ }
376
+ }
377
+ })
378
+ })
379
+
380
+ if (startPosIns !== null && endPosIns !== null) {
381
+ tr.delete(startPosIns, endPosIns)
382
+ }
383
+
384
+ // Remove deletion marks from the kept text
385
+ tr.doc.descendants((node, pos) => {
386
+ node.marks.forEach((mark) => {
387
+ if (mark.type === schema.marks.aiInlineDel) {
388
+ tr.removeMark(pos, pos + node.nodeSize, schema.marks.aiInlineDel)
389
+ }
390
+ })
391
+ })
392
+
393
+ this.hideAcceptRejectContainer()
394
+ dispatch(tr)
395
+ }
396
+
397
+ /**
398
+ * Discards current suggestion and retries with the last prompt.
399
+ */
400
+ private handleTryAgain = (evt: Event): void => {
401
+ evt.preventDefault()
402
+
403
+ const { state, dispatch } = this.editorView
404
+ const { tr, schema } = state
405
+
406
+ // Find and delete inserted content
407
+ let startPosIns: number | null = null
408
+ let endPosIns: number | null = null
409
+ tr.doc.descendants((node, pos) => {
410
+ node.marks.forEach((mark) => {
411
+ if (mark.type === schema.marks.aiInlineIns) {
412
+ if (startPosIns === null) {
413
+ startPosIns = pos > 0 ? pos - 1 : pos
414
+ }
415
+ endPosIns = pos + node.nodeSize
416
+ if (endPosIns < tr.doc.content.size) {
417
+ endPosIns += 1
418
+ }
419
+ }
420
+ })
421
+ })
422
+
423
+ if (startPosIns !== null && endPosIns !== null) {
424
+ tr.delete(startPosIns, endPosIns)
425
+ }
426
+
427
+ // Remove deletion marks but keep the text
428
+ tr.doc.descendants((node, pos) => {
429
+ node.marks.forEach((mark) => {
430
+ if (mark.type === schema.marks.aiInlineDel) {
431
+ tr.removeMark(pos, pos + node.nodeSize, schema.marks.aiInlineDel)
432
+ }
433
+ })
434
+ })
435
+
436
+ // Hide the accept/reject container (but don't reset input)
437
+ if (this.acceptRejectContainerEle) {
438
+ this.acceptRejectContainerEle.setAttribute('hidden', '')
439
+ }
440
+ this.dom.classList.remove('has-suggestions')
441
+
442
+ this.retry = true
443
+ dispatch(tr)
444
+
445
+ // Re-run the last prompt
446
+ if (this.lastPrompt) {
447
+ this.submitSuggestion(
448
+ this.editorView,
449
+ this.editorView.state.schema,
450
+ this.lastPrompt,
451
+ )
452
+ }
453
+ }
454
+
455
+ /**
456
+ * Fetches and displays prompt suggestions automatically
457
+ */
458
+ private fetchPromptSuggestions = (): void => {
459
+ const query = new URLSearchParams({
460
+ id: this.objectId || '',
461
+ typeId: this.typeId || '',
462
+ field: this.field,
463
+ })
464
+
465
+ const url = PROMPT_SUGGESTIONS_PATH + '?' + query
466
+ fetch(url, {
467
+ method: 'GET',
468
+ })
469
+ .then((response) => {
470
+ if (!response.ok) {
471
+ throw new Error('Network response was not ok: ' + response.statusText)
472
+ }
473
+ return response.text()
474
+ })
475
+ .then((suggestionsHTML) => {
476
+ const suggestionsDom = new DOMParser().parseFromString(
477
+ suggestionsHTML,
478
+ 'text/html',
479
+ )
480
+
481
+ // Get the suggestions container from the parsed HTML
482
+ this.suggestionsContainer = suggestionsDom.querySelector(
483
+ '.ProseMirrorAIInline-container-suggestions-dropdown',
484
+ )
485
+ if (!this.suggestionsContainer) {
486
+ console.error('Suggestions container not found in response')
487
+ return
488
+ }
489
+
490
+ // Append the suggestions container to the AI Inline container (this.dom)
491
+ this.dom.appendChild(this.suggestionsContainer)
492
+ // Make suggestions always visible
493
+ this.suggestionsContainer.removeAttribute('hidden')
494
+
495
+ const suggestionsList = this.suggestionsContainer.querySelector(
496
+ '.ProseMirrorAIInline-container-suggestions-list',
497
+ )
498
+
499
+ if (suggestionsList) {
500
+ // Add click handlers to each suggestion button
501
+ suggestionsList
502
+ .querySelectorAll<HTMLButtonElement>(
503
+ '.ProseMirrorAIInline-container-suggestions-list-item:not(.is-empty) button[data-prompt]',
504
+ )
505
+ .forEach((button) => {
506
+ button.addEventListener('click', () => {
507
+ this.sendTrackingEvent?.('click inline prompt suggestion')
508
+ this.submitSuggestion(
509
+ this.editorView,
510
+ this.editorView.state.schema,
511
+ button.dataset.prompt,
512
+ )
513
+ })
514
+ })
515
+ }
516
+ })
517
+ .catch((error) => {
518
+ console.error('Fetch error: ', error)
519
+ })
520
+ }
521
+
522
+ /**
523
+ * Handles the suggestion button click event.
524
+ */
525
+ private async submitSuggestion(
526
+ view: EditorView,
527
+ schema: Schema,
528
+ prompt?: string,
529
+ ): Promise<void> {
530
+ if (!prompt) return
531
+
532
+ // Store the prompt for "Try Again" functionality
533
+ this.lastPrompt = prompt
534
+
535
+ this.isLoading = true
536
+ this.dom.classList.add('is-loading')
537
+
538
+ // Insert loading overlay after the container if not already in DOM
539
+ if (this.loadingOverlay && !this.loadingOverlay.parentElement) {
540
+ this.dom.insertAdjacentElement('afterend', this.loadingOverlay)
541
+ }
542
+
543
+ this.loadingOverlay?.classList.add('is-loading')
544
+ if (this.loadingPromptEle) {
545
+ this.loadingPromptEle.textContent = prompt
546
+ }
547
+
548
+ // Capture retry state at the start (before it gets reset)
549
+ const isRetry = this.retry
550
+
551
+ // Store selection positions on first submission, reuse on retry
552
+ let from: number
553
+ let to: number
554
+ let selectedContent: string
555
+
556
+ if (
557
+ isRetry &&
558
+ this.lastSelectedContent !== undefined &&
559
+ this.lastSelectionFrom !== undefined &&
560
+ this.lastSelectionTo !== undefined
561
+ ) {
562
+ // Reuse stored values on retry
563
+ selectedContent = this.lastSelectedContent
564
+ from = this.lastSelectionFrom
565
+ to = this.lastSelectionTo
566
+ } else {
567
+ // Store values on first submission
568
+ const state = view.state
569
+ const selection = state.selection
570
+ from = selection.from
571
+ to = selection.to
572
+ const slice = state.doc.slice(from, to)
573
+ selectedContent = slice.content.textBetween(0, slice.content.size)
574
+
575
+ this.lastSelectedContent = selectedContent
576
+ this.lastSelectionFrom = from
577
+ this.lastSelectionTo = to
578
+ }
579
+
580
+ // Build full prompt once
581
+ let fullPrompt = PROMPT_PREFIX + prompt + ' | ' + selectedContent
582
+
583
+ // Add retry prefix if applicable
584
+ if (this.retry) {
585
+ fullPrompt = PROMPT_RETRY + fullPrompt
586
+ this.retry = false
587
+ }
588
+
589
+ const query = new URLSearchParams({
590
+ id: this.objectId || '',
591
+ typeId: this.typeId || '',
592
+ field: this.field,
593
+ state: this.contentState || '',
594
+ prompt: fullPrompt,
595
+ })
596
+
597
+ this.disableInput(true)
598
+
599
+ // Update UI to show loading state
600
+ const inputElement = this.inputEle
601
+ const originalPlaceholder = inputElement?.placeholder || ''
602
+ const originalValue = inputElement?.value || ''
603
+
604
+ if (inputElement) {
605
+ inputElement.value = ''
606
+ inputElement.placeholder = WORKING_ON_IT_TEXT
607
+ }
608
+ this.submitButtonEle?.classList.add('is-loading')
609
+
610
+ const tempDiv = create('div')
611
+
612
+ try {
613
+ // Make a single request and wait for complete response (no polling needed)
614
+ const response = await fetch(CHAT_PAGE_RESPONSES_PATH, {
615
+ method: 'POST',
616
+ credentials: 'include',
617
+ body: query,
618
+ headers: {
619
+ 'Brightspot-CSRF': Cookies.get('bsp.csrf') || '',
620
+ },
621
+ })
622
+
623
+ const text = await response.text()
624
+
625
+ const rteTagNames = new Set(
626
+ ((window.RICH_TEXT_ELEMENTS as Array<{ tag: string }>) || []).map((e) =>
627
+ e.tag.toLowerCase(),
628
+ ),
629
+ )
630
+
631
+ tempDiv.innerHTML = DOMPurify.sanitize(text, {
632
+ CUSTOM_ELEMENT_HANDLING: {
633
+ tagNameCheck: (tagName: string) =>
634
+ rteTagNames.has(tagName.toLowerCase()), // Allow all registered RichTextElement custom elements
635
+ attributeNameCheck: () => true, // Allow all attributes on custom elements (class, id, label, data-*, etc.)
636
+ allowCustomizedBuiltInElements: true,
637
+ },
638
+ ADD_ATTR: ['link-data', 'data-cms-id', 'data-cms-href'], // Allow Brightspot-specific attributes on standard elements
639
+ })
640
+ } catch (error) {
641
+ console.error('Error fetching AI suggestion:', error)
642
+ this.disableInput(false)
643
+ this.isLoading = false
644
+ return
645
+ } finally {
646
+ // Always restore UI state
647
+ this.submitButtonEle?.classList.remove('is-loading')
648
+ this.dom.classList.remove('is-loading')
649
+ this.loadingOverlay?.classList.remove('is-loading')
650
+ if (inputElement) {
651
+ inputElement.value = originalValue
652
+ inputElement.placeholder = originalPlaceholder
653
+ }
654
+ }
655
+
656
+ // Set the chatId once
657
+ if (!this.chatId) {
658
+ this.chatId =
659
+ tempDiv.querySelector<HTMLElement>('.chatData')?.dataset.chatId
660
+ }
661
+
662
+ // If loading is false, the suggestion was cancelled
663
+ if (!this.isLoading) {
664
+ this.disableInput(false)
665
+ return
666
+ }
667
+
668
+ const responses = tempDiv.querySelectorAll('.AIChat-responseText')
669
+
670
+ if (responses.length > 0) {
671
+ // Get the most recent response
672
+ const recentResponse = responses[responses.length - 1]
673
+ const response = recentResponse?.innerHTML || ''
674
+ this.responseId =
675
+ recentResponse?.closest<HTMLElement>(
676
+ '.AIChat-response',
677
+ )?.dataset.responseId
678
+
679
+ const domFragment = create('div')
680
+ domFragment.innerHTML = getLegacyHTMLTextForProsemirror(
681
+ response,
682
+ view.state.schema,
683
+ this.compliantTagNameMap,
684
+ true,
685
+ )
686
+
687
+ const parsedSlice = ProseDOMParser.fromSchema(schema).parseSlice(
688
+ domFragment,
689
+ {
690
+ preserveWhitespace: 'full',
691
+ },
692
+ )
693
+
694
+ // Create transaction from current state (important for retry after document changes)
695
+ const tr = view.state.tr
696
+ const docSize = view.state.doc.content.size
697
+
698
+ // Clamp positions to valid document range (important for retry after document changes)
699
+ const clampedFrom = Math.min(from, docSize)
700
+ const clampedTo = Math.min(to, docSize)
701
+
702
+ try {
703
+ // Add aiInlineDel mark to the to be replaced text
704
+ tr.addMark(clampedFrom, clampedTo, schema.marks.aiInlineDel.create())
705
+
706
+ // Insert the response after the current selection
707
+ tr.replace(clampedTo, clampedTo, parsedSlice)
708
+
709
+ // Add aiInlineIns mark to the suggested text
710
+ const insertEnd = tr.mapping.map(clampedTo)
711
+ tr.addMark(clampedTo, insertEnd, schema.marks.aiInlineIns.create())
712
+
713
+ this.trackAiUsage(this.textArea, this.chatId, this.responseId)
714
+
715
+ this.disableInput(false)
716
+ this.isLoading = false
717
+
718
+ view.dispatch(tr)
719
+
720
+ // Add AI highlighting in a separate transaction by finding nodes with aiInlineIns
721
+ const time = moment().format('MM/D/YYYY h:mm:ss A')
722
+ const aiMark = schema.marks.ai.create({
723
+ 'data-user-label': this.userLabel,
724
+ 'data-time': time,
725
+ 'data-user-id': this.userId,
726
+ 'data-response-id': this.responseId,
727
+ 'data-chat-id': this.chatId,
728
+ title: `${this.userLabel}: ${time}`,
729
+ })
730
+
731
+ // Document state after all changes have been made
732
+ const tr2 = view.state.tr
733
+ view.state.doc.descendants((node, pos) => {
734
+ if (node.marks.some((m) => m.type === schema.marks.aiInlineIns)) {
735
+ tr2.addMark(pos, pos + node.nodeSize, aiMark)
736
+ }
737
+ })
738
+
739
+ if (tr2.steps.length > 0) {
740
+ view.dispatch(tr2)
741
+ }
742
+
743
+ this.showAcceptRejectContainer()
744
+ } catch (err) {
745
+ console.error('Error creating/dispatching transaction:', err)
746
+ this.disableInput(false)
747
+ this.isLoading = false
748
+ }
749
+ } else {
750
+ // No responses received, re-enable inputs
751
+ this.disableInput(false)
752
+ this.isLoading = false
753
+ }
754
+ }
755
+
756
+ // Disable input and buttons while suggestion is active
757
+ private cancelSuggestion = async (): Promise<void> => {
758
+ this.isLoading = false
759
+
760
+ const query = new URLSearchParams({
761
+ id: this.objectId || '',
762
+ typeId: this.typeId || '',
763
+ field: this.field,
764
+ state: this.contentState || '',
765
+ action: 'cancel',
766
+ })
767
+
768
+ await fetch(CHAT_PAGE_RESPONSES_PATH, {
769
+ method: 'POST',
770
+ credentials: 'include',
771
+ body: query,
772
+ headers: {
773
+ 'Brightspot-CSRF': Cookies.get('bsp.csrf') || '',
774
+ },
775
+ })
776
+
777
+ this.dom.classList.remove('is-loading')
778
+ if (this.loadingOverlay) {
779
+ this.loadingOverlay.classList.remove('is-loading')
780
+ }
781
+ if (this.submitButtonEle) {
782
+ this.submitButtonEle.classList.remove('is-loading')
783
+ }
784
+ if (this.inputEle) {
785
+ this.inputEle.placeholder = PROMPT_PLACEHOLDER
786
+ }
787
+
788
+ this.disableInput(false)
789
+ }
790
+
791
+ // Log the fact that AI Chat was activated on a particular field.
792
+ private trackAiUsage = (
793
+ textarea: HTMLTextAreaElement | null,
794
+ chatId: string | undefined,
795
+ responseId: string | undefined,
796
+ ): void => {
797
+ if (textarea && chatId && responseId) {
798
+ // Find the main object's ID
799
+ const contentEditForm = document.querySelector<HTMLFormElement>(
800
+ 'form.ContentEdit[data-content-id]',
801
+ )
802
+
803
+ if (!contentEditForm) return
804
+
805
+ let objectId: string
806
+ if (contentEditForm.classList.contains('is-draft')) {
807
+ objectId = contentEditForm.dataset.revisionId || ''
808
+ } else {
809
+ objectId = contentEditForm.dataset.contentId || ''
810
+ }
811
+
812
+ // Find the field's full internal name path
813
+ let fieldName = ''
814
+ let parents = this.getParents(textarea, '.inputContainer')
815
+ parents = parents.reverse()
816
+ for (const parent of parents) {
817
+ if (parent instanceof HTMLElement) {
818
+ fieldName = fieldName.concat(parent.dataset.name + '*')
819
+ }
820
+ }
821
+
822
+ if (objectId && fieldName) {
823
+ // Add hidden input to page that BE can interpret
824
+ const hiddenInput = create('input', {
825
+ type: 'hidden',
826
+ name: objectId + '/aiGeneratedField|' + fieldName,
827
+ value: chatId,
828
+ })
829
+
830
+ const prePublish = contentEditForm.querySelector<HTMLElement>(
831
+ 'div.PrePublish[data-prepublish]',
832
+ )
833
+ if (prePublish) {
834
+ prePublish
835
+ .querySelector<HTMLFormElement>('form.PrePublishForm')
836
+ ?.prepend(hiddenInput)
837
+ } else {
838
+ contentEditForm.prepend(hiddenInput)
839
+ }
840
+
841
+ // Notify BE to mark this response as being used
842
+ const baseUrl = (
843
+ window.BRIGHTSPOT?.web?.pagePaths as Record<string, string>
844
+ )['com.psddev.ai.cms.tracking.FlagUsedResponsePage']
845
+ const params = new URLSearchParams({
846
+ chatId: chatId,
847
+ responseId: responseId,
848
+ })
849
+ const url = `${baseUrl}?${params}`
850
+
851
+ fetch(url, {
852
+ method: 'get',
853
+ })
854
+ .then((response) => {
855
+ if (!response.ok) {
856
+ throw new Error(
857
+ 'Network response was not ok: ' + response.statusText,
858
+ )
859
+ }
860
+ return response.text()
861
+ })
862
+ .catch((error) => {
863
+ console.error('Fetch error: ', error)
864
+ })
865
+ }
866
+ }
867
+ }
868
+
869
+ private disableInput = (disable: boolean): void => {
870
+ if (this.inputEle) {
871
+ this.inputEle.disabled = disable
872
+ }
873
+
874
+ // Disable/enable suggestion buttons
875
+ if (this.suggestionsContainer) {
876
+ const suggestionButtons =
877
+ this.suggestionsContainer.querySelectorAll<HTMLButtonElement>(
878
+ '.ProseMirrorAIInline-container-suggestions-list-item:not(.is-empty) button[data-prompt]',
879
+ )
880
+ suggestionButtons.forEach((button) => {
881
+ button.disabled = disable
882
+ if (disable) {
883
+ button.classList.add('is-disabled')
884
+ } else {
885
+ button.classList.remove('is-disabled')
886
+ }
887
+ })
888
+ }
889
+ }
890
+
891
+ private getParents = (elem: Element, selector: string): Element[] => {
892
+ // Set up a parent array
893
+ const parents: Element[] = []
894
+
895
+ // Push each parent element to the array
896
+ for (
897
+ ;
898
+ elem && elem !== document.documentElement;
899
+ elem = <Element>elem.parentNode
900
+ ) {
901
+ if (selector) {
902
+ if (elem.matches(selector)) {
903
+ parents.push(elem)
904
+ }
905
+ continue
906
+ }
907
+ parents.push(elem)
908
+ }
909
+
910
+ // Return our parent array
911
+ return parents
912
+ }
913
+
914
+ /**
915
+ * Renders the AI Inline by displaying it if our plugin state
916
+ * has an active state. Also anchors the top of the widget to the bottom
917
+ * of the toolbar, whose height expands and contracts with the UI.
918
+ */
919
+ private render(): void {
920
+ const pluginState = getPluginState(this.editorView, this.myKey)
921
+ const aiInlineEnabled = pluginState
922
+ ?.get('activeStates')
923
+ ?.get('toggleAIInline')
924
+
925
+ // Check if there are nodes with meta aiInlineDel or aiInlineIns in the doc
926
+ let aiInlineNodeFound = false
927
+ const { doc } = this.editorView.state
928
+ doc.descendants((node) => {
929
+ if (
930
+ node?.type?.name &&
931
+ (node.marks || []).some(
932
+ (mark) =>
933
+ mark.attrs &&
934
+ (mark.attrs.aiInlineDel ||
935
+ mark.attrs.aiInlineIns ||
936
+ mark.type?.name === 'aiInlineDel' ||
937
+ mark.type?.name === 'aiInlineIns'),
938
+ )
939
+ ) {
940
+ aiInlineNodeFound = true
941
+ return false
942
+ }
943
+ return true
944
+ })
945
+
946
+ if (aiInlineEnabled) {
947
+ this.dom.classList.remove(COLLAPSED_CLASS)
948
+ if (!this.focused) {
949
+ this.inputEle?.focus()
950
+ this.focused = true
951
+ }
952
+
953
+ // Load suggestions on first open
954
+ if (!this.suggestionsFetched) {
955
+ this.suggestionsFetched = true
956
+ this.fetchPromptSuggestions()
957
+ }
958
+
959
+ if (aiInlineNodeFound) {
960
+ this.showAcceptRejectContainer()
961
+ }
962
+ } else {
963
+ this.dom.classList.add(COLLAPSED_CLASS)
964
+ this.focused = false
965
+ }
966
+ }
967
+
968
+ update(): void {
969
+ this.render()
970
+ }
971
+
972
+ // Tracking: The standard trackingManager.track() pattern relies on onFind to
973
+ // discover elements, but ProseMirror containers are excluded from onFind's observation
974
+ // scope. Instead, we call trackingManager.sendData() directly with manual click listeners.
975
+ private async initTracking(): Promise<void> {
976
+ const analytics = await import(
977
+ /* webpackIgnore: true */ 'bsp-tracking'
978
+ ).catch(() => null)
979
+ if (!analytics) return
980
+
981
+ const { trackingManager } = analytics
982
+ this.sendTrackingEvent = (interaction: string) => {
983
+ trackingManager?.sendData('click', {
984
+ feature: 'ai_create',
985
+ interaction: interaction,
986
+ })
987
+ }
988
+
989
+ this.editorView.dom
990
+ .closest('.ProseMirrorContainer')
991
+ ?.querySelector('a.rte2-toolbar-ai-inline')
992
+ ?.addEventListener('click', () =>
993
+ this.sendTrackingEvent?.('click AI inline (rte toolbar)'),
994
+ )
995
+
996
+ // Attach to existing accept/reject container (if already created)
997
+ this.attachAcceptRejectTracking(this.acceptRejectContainerEle)
998
+ }
999
+
1000
+ private attachAcceptRejectTracking(container?: HTMLElement): void {
1001
+ if (!container || !this.sendTrackingEvent) return
1002
+ if (container.dataset.trackingAttached) return
1003
+ container.dataset.trackingAttached = 'true'
1004
+
1005
+ container
1006
+ .querySelector(`.${BASE_CLASS}-actions-accept button`)
1007
+ ?.addEventListener('click', () =>
1008
+ this.sendTrackingEvent?.('accept inline response'),
1009
+ )
1010
+
1011
+ container
1012
+ .querySelector(`.${BASE_CLASS}-actions-rejectAll button`)
1013
+ ?.addEventListener('click', () =>
1014
+ this.sendTrackingEvent?.('reject inline response'),
1015
+ )
1016
+ }
1017
+ }
1018
+
1019
+ export { AIInlineView }