@brightspot/ui 3.0.1 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/README.md +56 -37
  2. package/dist/storybook/assets/{ActionBar.stories-BTkFDNZF.js → ActionBar.stories-IDc5Jeit.js} +1 -1
  3. package/dist/storybook/assets/{ActionItem.stories-BY1vOUMp.js → ActionItem.stories-FKbziuZR.js} +1 -1
  4. package/dist/storybook/assets/{Avatar.stories-BViF7cJM.js → Avatar.stories-BsAnn4F7.js} +1 -1
  5. package/dist/storybook/assets/{AvatarGroup.stories-DBLtdzWj.js → AvatarGroup.stories-BmNNGA4K.js} +1 -1
  6. package/dist/storybook/assets/{Badge.stories-BJzAykeL.js → Badge.stories-BMb_-0Io.js} +1 -1
  7. package/dist/storybook/assets/{Button-BS_DVZrR.js → Button-D3vjfsjz.js} +1 -1
  8. package/dist/storybook/assets/{Button.stories-CMa8tsGq.js → Button.stories-VndkwLDv.js} +1 -1
  9. package/dist/storybook/assets/{ButtonGroup.stories-Dorf10Q3.js → ButtonGroup.stories-BvbNykTx.js} +1 -1
  10. package/dist/storybook/assets/{Celebrate.stories-C0RndH03.js → Celebrate.stories-DrrL3txs.js} +1 -1
  11. package/dist/storybook/assets/{Checkbox.stories-DuM_lJ8J.js → Checkbox.stories-BS4H3-cO.js} +1 -1
  12. package/dist/storybook/assets/{CircularProgress.stories-Bv2S_R-k.js → CircularProgress.stories-YQfbjx-O.js} +1 -1
  13. package/dist/storybook/assets/{ClipboardMixin.stories-Bd1tO-g7.js → ClipboardMixin.stories-DjsApoGs.js} +1 -1
  14. package/dist/storybook/assets/{Color-6BZIO3FS-CKpudxYg.js → Color-6BZIO3FS-D23VaL29.js} +1 -1
  15. package/dist/storybook/assets/{Colors.stories-CLQ--V38.js → Colors.stories-B0Eo-AgP.js} +1 -1
  16. package/dist/storybook/assets/{CombinedEffects.stories-DnT8sQ2Z.js → CombinedEffects.stories-CJv4PhDZ.js} +1 -1
  17. package/dist/storybook/assets/{ComponentStatesMixin-Rv-1Sy61.js → ComponentStatesMixin-Bn8b1Qpq.js} +1 -1
  18. package/dist/storybook/assets/{ComponentStatesMixin.stories-DNs2OQFK.js → ComponentStatesMixin.stories-CM9Nn1Vr.js} +1 -1
  19. package/dist/storybook/assets/{CopyToClipboard.stories-Bz6tBGbk.js → CopyToClipboard.stories-DdwTxinQ.js} +1 -1
  20. package/dist/storybook/assets/{Debounce.stories-B2zRBNPi.js → Debounce.stories-bdqs8xGz.js} +1 -1
  21. package/dist/storybook/assets/{DocsRenderer-LL677BLK-DW8rd1PO.js → DocsRenderer-LL677BLK-CdjX43FI.js} +3 -3
  22. package/dist/storybook/assets/{Dropdown.stories-hnwE4FQe.js → Dropdown.stories-wY7jzy1b.js} +1 -1
  23. package/dist/storybook/assets/{EmptyState.stories-D8NwBW4d.js → EmptyState.stories-FpHAx68-.js} +1 -1
  24. package/dist/storybook/assets/{Events.stories-uC-17Dli.js → Events.stories-gJAakVdu.js} +1 -1
  25. package/dist/storybook/assets/{Heading.stories-gU4dU4SQ.js → Heading.stories-BqFtaYkf.js} +1 -1
  26. package/dist/storybook/assets/{HueRipple.stories-C9mL5X65.js → HueRipple.stories-Bk1g8tT8.js} +1 -1
  27. package/dist/storybook/assets/{Icon.stories-CODM5nby.js → Icon.stories-sxRLpE9W.js} +1 -1
  28. package/dist/storybook/assets/{IconButton.stories-B2ua_wfB.js → IconButton.stories-DjmbahEP.js} +1 -1
  29. package/dist/storybook/assets/{LinearProgress.stories-orcCd9Ym.js → LinearProgress.stories-DwJQwdLl.js} +1 -1
  30. package/dist/storybook/assets/{Pagination.stories-C4ygdgfN.js → Pagination.stories-Cp-E5mN-.js} +1 -1
  31. package/dist/storybook/assets/{Popover.stories-BCIIWmTA.js → Popover.stories-BRW3tYFh.js} +1 -1
  32. package/dist/storybook/assets/{ReadyMixin-Cxdzrrfi.js → ReadyMixin-Btxswj_k.js} +1 -1
  33. package/dist/storybook/assets/{RovingTabindexMixin.stories-DOwFdYhD.js → RovingTabindexMixin.stories-CU7heX4w.js} +1 -1
  34. package/dist/storybook/assets/{Rtc.stories-CHCfV1TF.js → Rtc.stories-CGkrXg7-.js} +1 -1
  35. package/dist/storybook/assets/{ScrollShadow.stories-BVa9OI5n.js → ScrollShadow.stories-HPqnieYi.js} +1 -1
  36. package/dist/storybook/assets/{Switch.stories-iU97zahz.js → Switch.stories-SIix50Dz.js} +1 -1
  37. package/dist/storybook/assets/{Tab.stories-Bibe-F62.js → Tab.stories-BJ0Dl--1.js} +1 -1
  38. package/dist/storybook/assets/{Tabs.stories-CF4_aHnK.js → Tabs.stories-DEV7dhqr.js} +1 -1
  39. package/dist/storybook/assets/{Throttle.stories-DIuUxjiJ.js → Throttle.stories-5l5dcEMx.js} +1 -1
  40. package/dist/storybook/assets/{Tooltip.stories-vob7VYrU.js → Tooltip.stories-CJrvBRM9.js} +1 -1
  41. package/dist/storybook/assets/{Upload.stories-2Tow92Sk.js → Upload.stories-HAndUW3D.js} +1 -1
  42. package/dist/storybook/assets/{UploadItem.stories-BDmgA2i-.js → UploadItem.stories-B-8IM6rL.js} +1 -1
  43. package/dist/storybook/assets/{Welcome.stories-CxDC5l_l.js → Welcome.stories-Cy7QZEXf.js} +1 -1
  44. package/dist/storybook/assets/{Widget.stories-Dj_P7LE4.js → Widget.stories-DyTOXrSZ.js} +1 -1
  45. package/dist/storybook/assets/{WithTooltip-65CFNBJE-C1mqF-R9.js → WithTooltip-65CFNBJE-BF-px3XD.js} +1 -1
  46. package/dist/storybook/assets/{blocks-CDIBgsPi.js → blocks-B-r6Fucc.js} +5 -5
  47. package/dist/storybook/assets/{formatter-EIJCOSYU-DlWS8Eh5.js → formatter-EIJCOSYU-BhTCWHea.js} +1 -1
  48. package/dist/storybook/assets/if-defined-CxLwFifW.js +1 -0
  49. package/dist/storybook/assets/{iframe-BgFj0b5u.css → iframe-D0roG0J-.css} +1 -1
  50. package/dist/storybook/assets/{iframe-B3sUtE0N.js → iframe-XJ17FJi7.js} +3 -3
  51. package/dist/storybook/assets/{index-CP948hPJ.js → index-CQ_bLab5.js} +1 -1
  52. package/dist/storybook/assets/{onFind-DtBCGkmC.js → onFind-RCD4BqgZ.js} +1 -1
  53. package/dist/storybook/assets/{onFind.stories-CdMaO-FL.js → onFind.stories-CD7vXuRn.js} +1 -1
  54. package/dist/storybook/assets/{onRemove.stories-CnNXun2Y.js → onRemove.stories-Dm8HrW-w.js} +1 -1
  55. package/dist/storybook/assets/{onVisible.stories-ZnFebS7S.js → onVisible.stories-CigtHPTK.js} +1 -1
  56. package/dist/storybook/assets/{style-map-Imekj22o.js → style-map-C3PJ2niZ.js} +1 -1
  57. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-CqsAEB33.js → syntaxhighlighter-ED5Y7EFY-DIlzdeob.js} +1 -1
  58. package/dist/storybook/iframe.html +3 -3
  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 +20 -4
  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 +173 -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 +82 -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 +893 -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 +179 -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 +87 -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/webapp/dist/011a678e3efe41981754.png +1 -0
  300. package/src/legacy/tool-ui/src/main/webapp/dist/1173.080a90c5923854fc48e6.js +2 -0
  301. package/src/legacy/tool-ui/src/main/webapp/dist/1173.080a90c5923854fc48e6.js.LICENSE.txt +10 -0
  302. package/src/legacy/tool-ui/src/main/webapp/dist/194137260531ee29a5f2.svg +1 -0
  303. package/src/legacy/tool-ui/src/main/webapp/dist/1946.156c6821383df2638492.js +1 -0
  304. package/src/legacy/tool-ui/src/main/webapp/dist/1950.3594aaa4f20df28f39d9.js +1 -0
  305. package/src/legacy/tool-ui/src/main/webapp/dist/1e8408af1a34bdf61457.png +1 -0
  306. package/src/legacy/tool-ui/src/main/webapp/dist/2111.3956b5196a514b2c0131.js +1 -0
  307. package/src/legacy/tool-ui/src/main/webapp/dist/2111.a937b0cafa8cf7c039d2.css +1 -0
  308. package/src/legacy/tool-ui/src/main/webapp/dist/2129.6b044e5564dd3dbb2f94.js +1 -0
  309. package/src/legacy/tool-ui/src/main/webapp/dist/2314.420883b6638f35f40e70.js +1 -0
  310. package/src/legacy/tool-ui/src/main/webapp/dist/2456.5bcfb782c2ec27de32ed.js +1 -0
  311. package/src/legacy/tool-ui/src/main/webapp/dist/2537.e8f1359bedd328bf57f4.js +1 -0
  312. package/src/legacy/tool-ui/src/main/webapp/dist/2565.4ca31a6a46de85cd3b31.js +1 -0
  313. package/src/legacy/tool-ui/src/main/webapp/dist/270.3011484ff80f3093083a.js +1 -0
  314. package/src/legacy/tool-ui/src/main/webapp/dist/2825.c1342ac2662d11fd4125.js +1 -0
  315. package/src/legacy/tool-ui/src/main/webapp/dist/2947.f96d21c44c05980974ef.js +1 -0
  316. package/src/legacy/tool-ui/src/main/webapp/dist/3532.c358dfbb2cde0f802c7f.js +1 -0
  317. package/src/legacy/tool-ui/src/main/webapp/dist/3543.2d704cf9e170322468e7.js +2 -0
  318. package/src/legacy/tool-ui/src/main/webapp/dist/3543.2d704cf9e170322468e7.js.LICENSE.txt +1 -0
  319. package/src/legacy/tool-ui/src/main/webapp/dist/3611.61837ffa933f74502094.js +1 -0
  320. package/src/legacy/tool-ui/src/main/webapp/dist/3790.74b7037d430ed0a47d0c.js +1 -0
  321. package/src/legacy/tool-ui/src/main/webapp/dist/3995.afbec58662cafb46ec2c.js +1 -0
  322. package/src/legacy/tool-ui/src/main/webapp/dist/4017.c3ed1ca3be18b5c080c8.js +1 -0
  323. package/src/legacy/tool-ui/src/main/webapp/dist/4093.152620c022c3013502b7.js +1 -0
  324. package/src/legacy/tool-ui/src/main/webapp/dist/4114.57fe159e416e716f8cbc.js +1 -0
  325. package/src/legacy/tool-ui/src/main/webapp/dist/4168.a224af7c5c5f6f2ddd7b.js +1 -0
  326. package/src/legacy/tool-ui/src/main/webapp/dist/4374.37147747a254da8f5f8a.js +1 -0
  327. package/src/legacy/tool-ui/src/main/webapp/dist/4450.16dd5684292fd0a7ea7f.js +1 -0
  328. package/src/legacy/tool-ui/src/main/webapp/dist/4478.93f64e6a6ccb35a6c6d4.js +1 -0
  329. package/src/legacy/tool-ui/src/main/webapp/dist/44b38a404dec4643c46b.png +1 -0
  330. package/src/legacy/tool-ui/src/main/webapp/dist/4582.243dbaa3d8a8648f6f40.js +1 -0
  331. package/src/legacy/tool-ui/src/main/webapp/dist/4709.4f6b707e225e481a928e.js +1 -0
  332. package/src/legacy/tool-ui/src/main/webapp/dist/4790.10d75f7c7f8e54ce83a1.js +1 -0
  333. package/src/legacy/tool-ui/src/main/webapp/dist/4795.034ebc93a67b7a3d6536.js +1 -0
  334. package/src/legacy/tool-ui/src/main/webapp/dist/4850.6b944738520f69c98070.js +1 -0
  335. package/src/legacy/tool-ui/src/main/webapp/dist/4a4ee777ddc0d4cedee4.png +1 -0
  336. package/src/legacy/tool-ui/src/main/webapp/dist/5001.a61ae5608398d5d98ab1.js +1 -0
  337. package/src/legacy/tool-ui/src/main/webapp/dist/5030.1e8b82e1444067d492b1.js +1 -0
  338. package/src/legacy/tool-ui/src/main/webapp/dist/5055.620ccb3717b4a6427f09.js +1 -0
  339. package/src/legacy/tool-ui/src/main/webapp/dist/5098.33613009827cfc80aafb.js +1 -0
  340. package/src/legacy/tool-ui/src/main/webapp/dist/5385.6656501b67424994820b.js +1 -0
  341. package/src/legacy/tool-ui/src/main/webapp/dist/5598.d84773ca53126661bdca.js +2 -0
  342. package/src/legacy/tool-ui/src/main/webapp/dist/5598.d84773ca53126661bdca.js.LICENSE.txt +11 -0
  343. package/src/legacy/tool-ui/src/main/webapp/dist/5617.c81ecb679371ca302f1f.js +1 -0
  344. package/src/legacy/tool-ui/src/main/webapp/dist/5718.449113ae2463a3bb8a83.js +2 -0
  345. package/src/legacy/tool-ui/src/main/webapp/dist/5718.449113ae2463a3bb8a83.js.LICENSE.txt +8 -0
  346. package/src/legacy/tool-ui/src/main/webapp/dist/6047.291dd2d4b3f79be2c64d.js +1 -0
  347. package/src/legacy/tool-ui/src/main/webapp/dist/6086.7ca02b827506f29db590.js +1 -0
  348. package/src/legacy/tool-ui/src/main/webapp/dist/6216.cf8adc1990ee1111f065.js +1 -0
  349. package/src/legacy/tool-ui/src/main/webapp/dist/6497.b7d8dcbf0e7c8d8d538d.js +1 -0
  350. package/src/legacy/tool-ui/src/main/webapp/dist/6565.0e5abc3bd344c53ae154.js +1 -0
  351. package/src/legacy/tool-ui/src/main/webapp/dist/7033.4cd6efbe12e7aaa35745.js +1 -0
  352. package/src/legacy/tool-ui/src/main/webapp/dist/7202.1e5b8f21215ea6eae20a.js +1 -0
  353. package/src/legacy/tool-ui/src/main/webapp/dist/7361.793163ca71dfac69d9eb.js +1 -0
  354. package/src/legacy/tool-ui/src/main/webapp/dist/75.e45c9aec6e7409bfe21d.js +1 -0
  355. package/src/legacy/tool-ui/src/main/webapp/dist/7524.2990be869cf0a2988d17.js +1 -0
  356. package/src/legacy/tool-ui/src/main/webapp/dist/7554.bb243c1fb06a125f6353.js +1 -0
  357. package/src/legacy/tool-ui/src/main/webapp/dist/7718.a937b0cafa8cf7c039d2.css +1 -0
  358. package/src/legacy/tool-ui/src/main/webapp/dist/7718.f5996ddd99f2353c7785.js +1 -0
  359. package/src/legacy/tool-ui/src/main/webapp/dist/7741.0b2789c4e783af835763.js +1 -0
  360. package/src/legacy/tool-ui/src/main/webapp/dist/7769.d47f40cc83035fc2392a.js +1 -0
  361. package/src/legacy/tool-ui/src/main/webapp/dist/7863.2a1d1fd229778a47e10b.js +1 -0
  362. package/src/legacy/tool-ui/src/main/webapp/dist/7923.8a92f55de8387f7a8a35.js +1 -0
  363. package/src/legacy/tool-ui/src/main/webapp/dist/8684.7171c731d38a9873d6df.js +1 -0
  364. package/src/legacy/tool-ui/src/main/webapp/dist/8752.3d02a0f42ec39786fdf0.js +1 -0
  365. package/src/legacy/tool-ui/src/main/webapp/dist/8897.bfeed19f2a4acbb6d67c.js +1 -0
  366. package/src/legacy/tool-ui/src/main/webapp/dist/8934.e90ceca8169fc25e4e1b.js +1 -0
  367. package/src/legacy/tool-ui/src/main/webapp/dist/9277.88b2d89b3ba1c24e7f93.js +2 -0
  368. package/src/legacy/tool-ui/src/main/webapp/dist/9277.88b2d89b3ba1c24e7f93.js.LICENSE.txt +9 -0
  369. package/src/legacy/tool-ui/src/main/webapp/dist/9360.bb0352313d610cae11de.js +2 -0
  370. package/src/legacy/tool-ui/src/main/webapp/dist/9360.bb0352313d610cae11de.js.LICENSE.txt +33 -0
  371. package/src/legacy/tool-ui/src/main/webapp/dist/9561.64eab18c8c1bbc4ad8ec.js +1 -0
  372. package/src/legacy/tool-ui/src/main/webapp/dist/9576.174d6a99544d17e7416d.js +1 -0
  373. package/src/legacy/tool-ui/src/main/webapp/dist/983.eedba1cd484aa5bee0c4.js +1 -0
  374. package/src/legacy/tool-ui/src/main/webapp/dist/Appetizeio.185641211f7c0e42a455.js +1 -0
  375. package/src/legacy/tool-ui/src/main/webapp/dist/CISpectrum.74db7dc80b3a6797a167.js +1 -0
  376. package/src/legacy/tool-ui/src/main/webapp/dist/Chart.223ea4ee9e3e32b67a26.js +1 -0
  377. package/src/legacy/tool-ui/src/main/webapp/dist/ChartCompat.4dd096dd030942227ec6.js +1 -0
  378. package/src/legacy/tool-ui/src/main/webapp/dist/CodeMirror.5ddffe054374f883d6f8.js +1 -0
  379. package/src/legacy/tool-ui/src/main/webapp/dist/ImageEditor.14e3b3035666436f53a5.js +1 -0
  380. package/src/legacy/tool-ui/src/main/webapp/dist/LocationMap.72a510c0f5ff236f596e.js +1 -0
  381. package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.e8521581e28e90ef6f30.js +500 -0
  382. package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.e8521581e28e90ef6f30.js.LICENSE.txt +8 -0
  383. package/src/legacy/tool-ui/src/main/webapp/dist/RegionMap.f6f963eda2cb616b9661.js +1 -0
  384. package/src/legacy/tool-ui/src/main/webapp/dist/TimedContent.4bb4dc83ffbe4019dd7b.js +1 -0
  385. package/src/legacy/tool-ui/src/main/webapp/dist/VideoEditor.11c89dda5cf125738a33.js +2 -0
  386. package/src/legacy/tool-ui/src/main/webapp/dist/VideoEditor.11c89dda5cf125738a33.js.LICENSE.txt +23 -0
  387. package/src/legacy/tool-ui/src/main/webapp/dist/c6e9c007f41bd4d26c20.png +1 -0
  388. package/src/legacy/tool-ui/src/main/webapp/dist/iframeResizer.contentWindow.map +1 -0
  389. package/src/legacy/tool-ui/src/main/webapp/dist/iframeResizer.contentWindow.min.js +2 -0
  390. package/src/legacy/tool-ui/src/main/webapp/dist/iframeResizer.contentWindow.min.js.LICENSE.txt +7 -0
  391. package/src/legacy/tool-ui/src/main/webapp/dist/lucide.woff2 +0 -0
  392. package/src/legacy/tool-ui/src/main/webapp/dist/preview.d46d98e5ca9dba0a0f5a.js +1 -0
  393. package/src/legacy/tool-ui/src/main/webapp/dist/v4.a6f53058dbb04a69aa5c.css +3 -0
  394. package/src/legacy/tool-ui/src/main/webapp/dist/v4.de442a0b430071a7803d.js +92 -0
  395. package/src/legacy/tool-ui/src/main/webapp/dist/v4.de442a0b430071a7803d.js.LICENSE.txt +71 -0
  396. package/src/legacy/tool-ui/src/main/webapp/dist/v5.5ce74760f3fb482bec5e.js +92 -0
  397. package/src/legacy/tool-ui/src/main/webapp/dist/v5.5ce74760f3fb482bec5e.js.LICENSE.txt +78 -0
  398. package/src/legacy/tool-ui/src/main/webapp/dist/v5.68dab4082aba302779ed.css +5 -0
  399. package/src/legacy/tool-ui/src/main/webapp/style/v3/ExternalPreviewFrame.less +6 -0
  400. package/src/legacy/tool-ui/src/main/webapp/style/v3/WidgetSearchAdvancedQuery.less +24 -0
  401. package/src/legacy/tool-ui/src/main/webapp/style/v3/element.less +11 -0
  402. package/src/legacy/tool-ui/src/main/webapp/style/v3/icon/ajax-loader.gif +0 -0
  403. package/src/legacy/tool-ui/src/main/webapp/style/v3/index.less +98 -0
  404. package/src/legacy/tool-ui/src/main/webapp/style/v3/repeatable.less +89 -0
  405. package/src/legacy/tool-ui/src/main/webapp/style/v3/variables.less +53 -0
  406. package/src/legacy/tool-ui/src/main/webapp/v4/ActionBar.less +44 -0
  407. package/src/legacy/tool-ui/src/main/webapp/v4/Admin.less +253 -0
  408. package/src/legacy/tool-ui/src/main/webapp/v4/AdobeStock.less +20 -0
  409. package/src/legacy/tool-ui/src/main/webapp/v4/Apis.less +43 -0
  410. package/src/legacy/tool-ui/src/main/webapp/v4/AutoExpand.less +36 -0
  411. package/src/legacy/tool-ui/src/main/webapp/v4/Avatar.less +30 -0
  412. package/src/legacy/tool-ui/src/main/webapp/v4/BackgroundTasks.less +52 -0
  413. package/src/legacy/tool-ui/src/main/webapp/v4/Badge.less +10 -0
  414. package/src/legacy/tool-ui/src/main/webapp/v4/Board.less +311 -0
  415. package/src/legacy/tool-ui/src/main/webapp/v4/BulletedList.less +17 -0
  416. package/src/legacy/tool-ui/src/main/webapp/v4/Button.less +105 -0
  417. package/src/legacy/tool-ui/src/main/webapp/v4/CIGCluster.less +55 -0
  418. package/src/legacy/tool-ui/src/main/webapp/v4/Card.less +53 -0
  419. package/src/legacy/tool-ui/src/main/webapp/v4/Checkbox.less +99 -0
  420. package/src/legacy/tool-ui/src/main/webapp/v4/Collections.less +49 -0
  421. package/src/legacy/tool-ui/src/main/webapp/v4/ColorInputSpectrum.less +319 -0
  422. package/src/legacy/tool-ui/src/main/webapp/v4/ComboInput.less +403 -0
  423. package/src/legacy/tool-ui/src/main/webapp/v4/CommunityWidget.less +73 -0
  424. package/src/legacy/tool-ui/src/main/webapp/v4/Compat.less +7 -0
  425. package/src/legacy/tool-ui/src/main/webapp/v4/ContentEdit.less +1512 -0
  426. package/src/legacy/tool-ui/src/main/webapp/v4/ContentEditDrawer.less +329 -0
  427. package/src/legacy/tool-ui/src/main/webapp/v4/ContentEditSites.less +5 -0
  428. package/src/legacy/tool-ui/src/main/webapp/v4/ContentForm.less +174 -0
  429. package/src/legacy/tool-ui/src/main/webapp/v4/ContentInputGroup.less +669 -0
  430. package/src/legacy/tool-ui/src/main/webapp/v4/ContentReporting.less +39 -0
  431. package/src/legacy/tool-ui/src/main/webapp/v4/ContentSelector.less +268 -0
  432. package/src/legacy/tool-ui/src/main/webapp/v4/ContentSummary.less +238 -0
  433. package/src/legacy/tool-ui/src/main/webapp/v4/ContentTools.less +73 -0
  434. package/src/legacy/tool-ui/src/main/webapp/v4/ContentType.less +24 -0
  435. package/src/legacy/tool-ui/src/main/webapp/v4/CopyToClipboard.less +20 -0
  436. package/src/legacy/tool-ui/src/main/webapp/v4/DashboardRow.less +40 -0
  437. package/src/legacy/tool-ui/src/main/webapp/v4/DashboardWidget.less +193 -0
  438. package/src/legacy/tool-ui/src/main/webapp/v4/DataTable.less +52 -0
  439. package/src/legacy/tool-ui/src/main/webapp/v4/DateStringField.less +148 -0
  440. package/src/legacy/tool-ui/src/main/webapp/v4/DateTimeInput.less +58 -0
  441. package/src/legacy/tool-ui/src/main/webapp/v4/Diff.less +322 -0
  442. package/src/legacy/tool-ui/src/main/webapp/v4/Downloads.css +11 -0
  443. package/src/legacy/tool-ui/src/main/webapp/v4/Draggable.less +42 -0
  444. package/src/legacy/tool-ui/src/main/webapp/v4/Dropdown.less +76 -0
  445. package/src/legacy/tool-ui/src/main/webapp/v4/EmbeddedInputGroup.less +141 -0
  446. package/src/legacy/tool-ui/src/main/webapp/v4/Entry.less +157 -0
  447. package/src/legacy/tool-ui/src/main/webapp/v4/ExternalItemImport.less +3 -0
  448. package/src/legacy/tool-ui/src/main/webapp/v4/FileInput.less +194 -0
  449. package/src/legacy/tool-ui/src/main/webapp/v4/FormFilter.less +189 -0
  450. package/src/legacy/tool-ui/src/main/webapp/v4/Frame.less +26 -0
  451. package/src/legacy/tool-ui/src/main/webapp/v4/GraphQLApis.less +4 -0
  452. package/src/legacy/tool-ui/src/main/webapp/v4/Grid.less +48 -0
  453. package/src/legacy/tool-ui/src/main/webapp/v4/Guide.less +209 -0
  454. package/src/legacy/tool-ui/src/main/webapp/v4/GuideField.less +108 -0
  455. package/src/legacy/tool-ui/src/main/webapp/v4/Hierarchy.less +89 -0
  456. package/src/legacy/tool-ui/src/main/webapp/v4/Highlight.less +5 -0
  457. package/src/legacy/tool-ui/src/main/webapp/v4/Icon.less +53 -0
  458. package/src/legacy/tool-ui/src/main/webapp/v4/IconButton.less +111 -0
  459. package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditor.less +922 -0
  460. package/src/legacy/tool-ui/src/main/webapp/v4/Input.less +15 -0
  461. package/src/legacy/tool-ui/src/main/webapp/v4/InputRow.less +35 -0
  462. package/src/legacy/tool-ui/src/main/webapp/v4/Label.less +12 -0
  463. package/src/legacy/tool-ui/src/main/webapp/v4/LabeledCheckbox.less +35 -0
  464. package/src/legacy/tool-ui/src/main/webapp/v4/Link.less +93 -0
  465. package/src/legacy/tool-ui/src/main/webapp/v4/LinkCarousel.less +143 -0
  466. package/src/legacy/tool-ui/src/main/webapp/v4/LinkList.less +150 -0
  467. package/src/legacy/tool-ui/src/main/webapp/v4/LinkTable.less +112 -0
  468. package/src/legacy/tool-ui/src/main/webapp/v4/LocationMap.less +62 -0
  469. package/src/legacy/tool-ui/src/main/webapp/v4/LookingGlass.less +30 -0
  470. package/src/legacy/tool-ui/src/main/webapp/v4/Message.less +189 -0
  471. package/src/legacy/tool-ui/src/main/webapp/v4/Month.less +102 -0
  472. package/src/legacy/tool-ui/src/main/webapp/v4/Notification.less +278 -0
  473. package/src/legacy/tool-ui/src/main/webapp/v4/NumberBar.less +21 -0
  474. package/src/legacy/tool-ui/src/main/webapp/v4/NumberedList.less +17 -0
  475. package/src/legacy/tool-ui/src/main/webapp/v4/Page.less +922 -0
  476. package/src/legacy/tool-ui/src/main/webapp/v4/PaginatedResult.less +89 -0
  477. package/src/legacy/tool-ui/src/main/webapp/v4/Pagination.less +80 -0
  478. package/src/legacy/tool-ui/src/main/webapp/v4/Popup.less +415 -0
  479. package/src/legacy/tool-ui/src/main/webapp/v4/PrePublish.less +5 -0
  480. package/src/legacy/tool-ui/src/main/webapp/v4/Preview.less +495 -0
  481. package/src/legacy/tool-ui/src/main/webapp/v4/ProfileDropdown.less +66 -0
  482. package/src/legacy/tool-ui/src/main/webapp/v4/QueryField.less +147 -0
  483. package/src/legacy/tool-ui/src/main/webapp/v4/RadialProgressBar.less +20 -0
  484. package/src/legacy/tool-ui/src/main/webapp/v4/Repeatable.less +102 -0
  485. package/src/legacy/tool-ui/src/main/webapp/v4/RepeatableContentInputGroup.less +731 -0
  486. package/src/legacy/tool-ui/src/main/webapp/v4/RepeatableContentSelector.less +296 -0
  487. package/src/legacy/tool-ui/src/main/webapp/v4/RepeatableTextInput.less +156 -0
  488. package/src/legacy/tool-ui/src/main/webapp/v4/Reset.less +373 -0
  489. package/src/legacy/tool-ui/src/main/webapp/v4/Revision.less +50 -0
  490. package/src/legacy/tool-ui/src/main/webapp/v4/RichText.less +32 -0
  491. package/src/legacy/tool-ui/src/main/webapp/v4/RichTextEditor.less +197 -0
  492. package/src/legacy/tool-ui/src/main/webapp/v4/SearchFields.less +403 -0
  493. package/src/legacy/tool-ui/src/main/webapp/v4/SearchInput.less +65 -0
  494. package/src/legacy/tool-ui/src/main/webapp/v4/SearchResult.less +479 -0
  495. package/src/legacy/tool-ui/src/main/webapp/v4/SearchWidget.less +697 -0
  496. package/src/legacy/tool-ui/src/main/webapp/v4/SearchWidgetAdvanced.less +115 -0
  497. package/src/legacy/tool-ui/src/main/webapp/v4/SharePreview.less +95 -0
  498. package/src/legacy/tool-ui/src/main/webapp/v4/Sortable.less +242 -0
  499. package/src/legacy/tool-ui/src/main/webapp/v4/StandardForm.less +12 -0
  500. package/src/legacy/tool-ui/src/main/webapp/v4/StyleEmbeddedContent.less +131 -0
  501. package/src/legacy/tool-ui/src/main/webapp/v4/Suggestions.less +121 -0
  502. package/src/legacy/tool-ui/src/main/webapp/v4/TabBar.less +258 -0
  503. package/src/legacy/tool-ui/src/main/webapp/v4/TabContainer.less +26 -0
  504. package/src/legacy/tool-ui/src/main/webapp/v4/Taxonomy.less +84 -0
  505. package/src/legacy/tool-ui/src/main/webapp/v4/Text.less +41 -0
  506. package/src/legacy/tool-ui/src/main/webapp/v4/TextInput.less +32 -0
  507. package/src/legacy/tool-ui/src/main/webapp/v4/ThemeBundleEditor.less +106 -0
  508. package/src/legacy/tool-ui/src/main/webapp/v4/TimedContent.less +202 -0
  509. package/src/legacy/tool-ui/src/main/webapp/v4/TreeList.less +93 -0
  510. package/src/legacy/tool-ui/src/main/webapp/v4/Utils.css +14 -0
  511. package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditor.less +737 -0
  512. package/src/legacy/tool-ui/src/main/webapp/v4/ViewMirror.less +42 -0
  513. package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.less +147 -0
  514. package/src/legacy/tool-ui/src/main/webapp/v4/Viewers.less +70 -0
  515. package/src/legacy/tool-ui/src/main/webapp/v4/Week.less +32 -0
  516. package/src/legacy/tool-ui/src/main/webapp/v4/Widget.less +224 -0
  517. package/src/legacy/tool-ui/src/main/webapp/v4/Workflow.less +153 -0
  518. package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/AppetizeioEmbedded.less +77 -0
  519. package/src/legacy/tool-ui/src/main/webapp/v4/bsp-rings-bg.svg +9 -0
  520. package/src/legacy/tool-ui/src/main/webapp/v4/graphql/GraphQL.less +171 -0
  521. package/src/legacy/tool-ui/src/main/webapp/v4/mail-publishing/MailPublishing.less +38 -0
  522. package/src/legacy/tool-ui/src/main/webapp/v4/rte/Mention.less +35 -0
  523. package/src/legacy/tool-ui/src/main/webapp/v4/rte/ProseMirror.less +759 -0
  524. package/src/legacy/tool-ui/src/main/webapp/v4/rte/ProseMirrorContainer.less +29 -0
  525. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/views/AIInline.less +244 -0
  526. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/views/AvatarView.less +11 -0
  527. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/views/CollabEditing.less +18 -0
  528. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/CustomKeyboard.less +21 -0
  529. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/Enhancement.less +67 -0
  530. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/PreviewView.less +45 -0
  531. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/ProsemirrorEnhancementMenu.less +113 -0
  532. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/views/ProseMirrorFindReplace.less +174 -0
  533. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/views/FullscreenView.less +383 -0
  534. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/ListManager.less +42 -0
  535. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/views/MenuView.less +821 -0
  536. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/paste_manager/views/PastePopup.less +5 -0
  537. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck.less +73 -0
  538. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/ProseMirror-table.less +137 -0
  539. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableSizerPopup.less +19 -0
  540. package/src/legacy/tool-ui/src/main/webapp/v4/theme/Theme.less +224 -0
  541. package/src/legacy/tool-ui/src/main/webapp/v4/translation/Translation.less +114 -0
  542. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AnalyticsWidget.less +18 -0
  543. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentContent.less +19 -0
  544. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentDeskDashboard.less +410 -0
  545. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentDeskRelatedWidget.less +3 -0
  546. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentFilters.less +23 -0
  547. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssociatedContentWidget.less +92 -0
  548. package/src/legacy/tool-ui/src/main/webapp/v4/widget/BulkUpload.less +65 -0
  549. package/src/legacy/tool-ui/src/main/webapp/v4/widget/BulkWorkflow.less +103 -0
  550. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Calendar.less +109 -0
  551. package/src/legacy/tool-ui/src/main/webapp/v4/widget/CalendarAccessOverview.less +26 -0
  552. package/src/legacy/tool-ui/src/main/webapp/v4/widget/CalendarEventSummary.less +15 -0
  553. package/src/legacy/tool-ui/src/main/webapp/v4/widget/ClosableWindow.less +3 -0
  554. package/src/legacy/tool-ui/src/main/webapp/v4/widget/ContentColors.less +17 -0
  555. package/src/legacy/tool-ui/src/main/webapp/v4/widget/ContentTemplatesWidget.less +123 -0
  556. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Conversation.less +537 -0
  557. package/src/legacy/tool-ui/src/main/webapp/v4/widget/CopySiteWidget.less +13 -0
  558. package/src/legacy/tool-ui/src/main/webapp/v4/widget/FormSubmission.less +3 -0
  559. package/src/legacy/tool-ui/src/main/webapp/v4/widget/LiveBlog.less +158 -0
  560. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchAssignments.less +16 -0
  561. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchContent.less +10 -0
  562. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Revisions.less +280 -0
  563. package/src/legacy/tool-ui/src/main/webapp/v4/widget/SavedSearch.less +13 -0
  564. package/src/legacy/tool-ui/src/main/webapp/v4/widget/SemRushDashboardWidget.less +6 -0
  565. package/src/legacy/tool-ui/src/main/webapp/v4/widget/SlackAuthentication.less +13 -0
  566. package/src/legacy/tool-ui/src/main/webapp/v4/widget/WorkStreams.less +39 -0
  567. package/src/legacy/tool-ui/src/platform.ts +25 -0
  568. package/src/legacy/tool-ui/src/rtc/Socket.ts +205 -0
  569. package/src/legacy/tool-ui/src/rtc/index.ts +276 -0
  570. package/src/legacy/tool-ui/src/table/README.md +3 -0
  571. package/src/legacy/tool-ui/src/table/index.ts +107 -0
  572. package/src/legacy/tool-ui/src/theme/ColorRotator.ts +32 -0
  573. package/src/legacy/tool-ui/src/theme/Theme.ts +516 -0
  574. package/src/legacy/tool-ui/src/theme/index.ts +7 -0
  575. package/src/legacy/tool-ui/src/util/README.md +42 -0
  576. package/src/legacy/tool-ui/src/util/debounce.ts +22 -0
  577. package/src/legacy/tool-ui/src/util/getComponentKey.ts +25 -0
  578. package/src/legacy/tool-ui/src/util/noise.ts +51 -0
  579. package/src/legacy/tool-ui/src/util/repaint.ts +17 -0
  580. package/src/legacy/tool-ui/src/util/storage.ts +21 -0
  581. package/src/legacy/tool-ui/src/util/string.ts +15 -0
  582. package/src/legacy/tool-ui/src/util/svg.ts +46 -0
  583. package/src/legacy/tool-ui/src/util/throttle.ts +37 -0
  584. package/src/legacy/tool-ui/src/util/transition.ts +5 -0
  585. package/src/legacy/tool-ui/src/v5.css +149 -0
  586. package/src/legacy/tool-ui/src/v5.ts +2081 -0
  587. package/src/legacy/tool-ui/src/widget/README.md +27 -0
  588. package/src/legacy/tool-ui/src/widget/index.ts +160 -0
  589. package/dist/storybook/assets/if-defined-DxmT9CH8.js +0 -1
@@ -0,0 +1,530 @@
1
+ import { FocusableElement, tabbable } from 'tabbable'
2
+ import { isMac } from './platform'
3
+
4
+ /**
5
+ * Built-in focus region IDs for the CMS.
6
+ *
7
+ * These correspond to the built-in entries in
8
+ * {@code FocusRegionJavaScriptGlobals}. Custom regions can use any
9
+ * string ID — they do not need to be added to this enum.
10
+ *
11
+ * NOTE: Members are listed in default navigation order to match
12
+ * the sort order values in {@code FocusRegionJavaScriptGlobals}
13
+ * and the {@code DEFAULT_REGION_ORDER} fallback array below.
14
+ */
15
+ enum RegionId {
16
+ ModalClose = 'modal-close',
17
+ PageHeader = 'page-header',
18
+ PageNav = 'page-nav',
19
+ PageGuide = 'page-guide',
20
+ PageAskAi = 'page-ask-ai',
21
+ LeftNav = 'left-nav',
22
+ ContentEditTop = 'content-edit-top',
23
+ PageMain = 'page-main',
24
+ ContentEditDrawer = 'content-edit-drawer',
25
+ ContentEditPreview = 'content-edit-preview',
26
+ ContentEditRight = 'content-edit-right',
27
+ ContentEditToolbar = 'content-edit-toolbar',
28
+ }
29
+
30
+ /**
31
+ * Configuration for a focus region.
32
+ *
33
+ * The {@link id} accepts any string, allowing custom regions to participate
34
+ * in keyboard navigation without modifying core CMS code.
35
+ */
36
+ interface FocusRegionConfig {
37
+ id: string
38
+ element: HTMLElement
39
+ preferredFocus?: () => HTMLElement | null // Optional: element to focus within the region
40
+ label?: string // Optional: human-readable label override for skip links
41
+
42
+ /**
43
+ * Optional function to determine if the region is currently hidden.
44
+ */
45
+ isHidden?: () => boolean
46
+ }
47
+
48
+ /**
49
+ * The data attribute used for declarative focus region registration.
50
+ *
51
+ * Backend Java code can render an element with this attribute and the
52
+ * frontend will automatically register it as a focus region:
53
+ *
54
+ * {@code <div data-focus-region="my-region" role="region" aria-label="My Region">}
55
+ */
56
+ const FOCUS_REGION_ATTR = 'data-focus-region'
57
+ const FOCUS_REGION_SELECTOR = `[${FOCUS_REGION_ATTR}]`
58
+
59
+ /**
60
+ * Manages keyboard navigation between focus regions in the CMS.
61
+ * Allows users to press Alt+Tab to cycle through page regions within
62
+ * a specific layer (e.g., an open dialog or the main document body).
63
+ */
64
+ class FocusRegionManager {
65
+ /**
66
+ * Default region order used as a fallback when the backend configuration
67
+ * is not available.
68
+ */
69
+ private static readonly DEFAULT_REGION_ORDER: ReadonlyArray<string> = [
70
+ RegionId.ModalClose,
71
+ RegionId.PageHeader,
72
+ RegionId.PageNav,
73
+ RegionId.PageGuide,
74
+ RegionId.PageAskAi,
75
+ RegionId.LeftNav,
76
+ RegionId.ContentEditTop,
77
+ RegionId.PageMain,
78
+ RegionId.ContentEditDrawer,
79
+ RegionId.ContentEditPreview,
80
+ RegionId.ContentEditRight,
81
+ RegionId.ContentEditToolbar,
82
+ ]
83
+
84
+ /**
85
+ * Resolves the region order from the backend configuration
86
+ * ({@code window.BRIGHTSPOT.focusRegions}). The backend provides a
87
+ * map of region ID → numeric sort order; this method sorts entries
88
+ * by value and returns the IDs in order. Falls back to
89
+ * {@link DEFAULT_REGION_ORDER} if the backend config is unavailable.
90
+ *
91
+ * Called once at class load time — the backend config must be present
92
+ * in the page before v5.js loads for it to take effect.
93
+ */
94
+ private static resolveRegionOrder(): ReadonlyArray<string> {
95
+ const focusRegions = window.BRIGHTSPOT?.focusRegions as
96
+ | Record<string, unknown>
97
+ | undefined
98
+
99
+ if (
100
+ !focusRegions ||
101
+ typeof focusRegions !== 'object' ||
102
+ Object.keys(focusRegions).length === 0
103
+ ) {
104
+ return FocusRegionManager.DEFAULT_REGION_ORDER
105
+ }
106
+
107
+ const entries = Object.entries(focusRegions)
108
+ const invalidEntries = entries.filter(
109
+ ([, v]) => typeof v !== 'number' || !isFinite(v as number),
110
+ )
111
+
112
+ if (invalidEntries.length > 0) {
113
+ console.warn(
114
+ 'FocusRegionManager: focusRegions config contains non-numeric values; falling back to default order.',
115
+ Object.fromEntries(invalidEntries),
116
+ )
117
+ return FocusRegionManager.DEFAULT_REGION_ORDER
118
+ }
119
+
120
+ return (entries as [string, number][])
121
+ .sort((a, b) => a[1] - b[1])
122
+ .map(([id]) => id)
123
+ }
124
+
125
+ /**
126
+ * Defines the order of regions for keyboard navigation.
127
+ * Sourced from the backend via {@code window.BRIGHTSPOT.focusRegions},
128
+ * with a hardcoded fallback.
129
+ */
130
+ private static readonly REGION_ORDER: ReadonlyArray<string> =
131
+ FocusRegionManager.resolveRegionOrder()
132
+
133
+ private registeredRegions: Map<HTMLElement, Map<string, FocusRegionConfig>> =
134
+ new Map()
135
+
136
+ /**
137
+ * Tracks the last focused element per region per layer.
138
+ * Structure: Layer → RegionId → Last Focused Element
139
+ */
140
+ private lastFocusedElements: Map<HTMLElement, Map<string, HTMLElement>> =
141
+ new Map()
142
+ private keyboardHandler: ((e: KeyboardEvent) => void) | null = null
143
+
144
+ private constructor() {
145
+ this.initKeyboardListeners()
146
+ }
147
+
148
+ private static instance: FocusRegionManager | null = null
149
+
150
+ /**
151
+ * Retrieves the singleton instance of FocusRegionManager.
152
+ */
153
+ static getInstance(): FocusRegionManager {
154
+ if (!this.instance) {
155
+ this.instance = new FocusRegionManager()
156
+ }
157
+ return this.instance
158
+ }
159
+
160
+ /**
161
+ * Registers a focus region for keyboard navigation.
162
+ * Regions are associated with their closest layer (e.g., a dialog or the main document body).
163
+ */
164
+ register(config: FocusRegionConfig): void {
165
+ if (!config.id || !config.element) {
166
+ console.warn(
167
+ 'FocusRegionManager: Invalid config provided to register()',
168
+ config,
169
+ )
170
+ return
171
+ }
172
+
173
+ // Find the layer for this region and any existing regions within that layer
174
+ // Priority: fullscreen container > open dialog > document.body
175
+ const layer =
176
+ config.element.closest<HTMLElement>(
177
+ '.ProseMirror-fullscreen-container',
178
+ ) ??
179
+ config.element.closest<HTMLElement>('dialog[open]') ??
180
+ document.body
181
+ const regions = this.registeredRegions.get(layer) || new Map()
182
+
183
+ regions.set(config.id, config)
184
+ this.registeredRegions.set(layer, regions)
185
+ }
186
+
187
+ /**
188
+ * Registers a focus region from a DOM element that has a
189
+ * {@code data-focus-region} attribute. This is the declarative
190
+ * counterpart to {@link register}, used by the auto-discovery system.
191
+ *
192
+ * If the element has already been registered imperatively (e.g., by
193
+ * code in v5.ts with custom {@code isHidden} or {@code preferredFocus}
194
+ * callbacks), the imperative registration takes precedence.
195
+ */
196
+ registerFromAttribute(element: HTMLElement): void {
197
+ const id = element.getAttribute(FOCUS_REGION_ATTR)
198
+ if (!id) return
199
+
200
+ // Find the layer for this element
201
+ const layer =
202
+ element.closest<HTMLElement>('.ProseMirror-fullscreen-container') ??
203
+ element.closest<HTMLElement>('dialog[open]') ??
204
+ document.body
205
+ const regions = this.registeredRegions.get(layer)
206
+
207
+ // Don't overwrite an existing imperative registration for the same ID
208
+ if (regions?.has(id)) return
209
+
210
+ if (!FocusRegionManager.REGION_ORDER.includes(id)) {
211
+ console.warn(
212
+ `FocusRegionManager: region "${id}" is not in REGION_ORDER and will be excluded from navigation.`,
213
+ )
214
+ return
215
+ }
216
+
217
+ this.register({ id, element })
218
+ }
219
+
220
+ /**
221
+ * Destroys all regions associated with a specific layer (e.g., when dialog is closed).
222
+ */
223
+ destroyLayer(layer: HTMLElement): void {
224
+ this.registeredRegions.delete(layer)
225
+ this.lastFocusedElements.delete(layer)
226
+ }
227
+
228
+ /**
229
+ * Checks if a region is currently visible and should be included in navigation.
230
+ */
231
+ private isRegionVisible(config: FocusRegionConfig): boolean {
232
+ const element = config.element
233
+
234
+ if (
235
+ !element.isConnected ||
236
+ element.hasAttribute('inert') ||
237
+ element.hidden ||
238
+ !element.checkVisibility({
239
+ visibilityProperty: true,
240
+ opacityProperty: true,
241
+ })
242
+ ) {
243
+ return false
244
+ }
245
+
246
+ if (config.isHidden && config.isHidden()) {
247
+ return false
248
+ }
249
+
250
+ if (!this.hasFocusableDescendants(element)) {
251
+ return false
252
+ }
253
+
254
+ return true
255
+ }
256
+
257
+ /**
258
+ * Returns all registered regions that are currently visible in the specified layer,
259
+ * sorted according to REGION_ORDER.
260
+ */
261
+ getVisibleRegions(layer: HTMLElement): FocusRegionConfig[] {
262
+ if (!layer || !layer.isConnected || !this.registeredRegions.has(layer)) {
263
+ console.warn(
264
+ 'FocusRegionManager: Specified layer is not valid for getting visible regions',
265
+ layer,
266
+ )
267
+ return []
268
+ }
269
+ return (
270
+ FocusRegionManager.REGION_ORDER.filter((id) =>
271
+ this.registeredRegions.get(layer)?.has(id),
272
+ )
273
+ // we can be confident the following get calls won't return undefined due to the filter above
274
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
275
+ .map((id) => this.registeredRegions.get(layer)!.get(id)!)
276
+ .filter((config) => this.isRegionVisible(config))
277
+ )
278
+ }
279
+
280
+ /**
281
+ * Returns the index of the currently focused region within the provided regions array.
282
+ */
283
+ private getCurrentIndex(regions: FocusRegionConfig[]): number {
284
+ const currentFocus = document.activeElement as HTMLElement | null
285
+ const currentRegion = regions.findIndex((region) =>
286
+ region.element.contains(currentFocus),
287
+ )
288
+
289
+ return currentRegion
290
+ }
291
+
292
+ /**
293
+ * Saves the currently focused element for its containing region.
294
+ */
295
+ private saveCurrentFocus(
296
+ layer: HTMLElement,
297
+ regions: FocusRegionConfig[],
298
+ ): void {
299
+ const activeElement = document.activeElement as HTMLElement
300
+ if (activeElement === document.body) return
301
+
302
+ const currentRegion = regions.find((region) =>
303
+ region.element.contains(activeElement),
304
+ )
305
+ if (!currentRegion) return
306
+
307
+ let layerMap = this.lastFocusedElements.get(layer)
308
+ if (!layerMap) {
309
+ layerMap = new Map()
310
+ this.lastFocusedElements.set(layer, layerMap)
311
+ }
312
+ layerMap.set(currentRegion.id, activeElement)
313
+ }
314
+
315
+ /**
316
+ * Navigates to the next available focus region in the specified layer.
317
+ */
318
+ nextRegion(layer: HTMLElement): void {
319
+ const regions = this.getVisibleRegions(layer)
320
+ if (regions.length === 0) return
321
+ this.saveCurrentFocus(layer, regions)
322
+ const nextIndex = (this.getCurrentIndex(regions) + 1) % regions.length
323
+ this.focusRegion(regions[nextIndex], layer)
324
+ }
325
+
326
+ /**
327
+ * Navigates to the previous available focus region in the specified layer.
328
+ */
329
+ previousRegion(layer: HTMLElement): void {
330
+ const regions = this.getVisibleRegions(layer)
331
+ if (regions.length === 0) return
332
+ this.saveCurrentFocus(layer, regions)
333
+ const currentIndex = this.getCurrentIndex(regions)
334
+ const prevIndex = currentIndex < 1 ? regions.length - 1 : currentIndex - 1
335
+ this.focusRegion(regions[prevIndex], layer)
336
+ }
337
+
338
+ /**
339
+ * Focuses a specific region using the following priority:
340
+ * 1. Last focused element in the region (if previously visited)
341
+ * 2. preferredFocus (if specified)
342
+ * 3. First tabbable element in the region
343
+ * 4. The region element itself
344
+ */
345
+ focusRegion(config: FocusRegionConfig, layer: HTMLElement): void {
346
+ let targetElement: FocusableElement | null = null
347
+
348
+ const lastFocused = this.lastFocusedElements.get(layer)?.get(config.id)
349
+ if (lastFocused?.isConnected && this.isElementFocusable(lastFocused)) {
350
+ targetElement = lastFocused
351
+ }
352
+
353
+ if (!targetElement) {
354
+ const preferredFocus = config.preferredFocus?.()
355
+ if (
356
+ preferredFocus &&
357
+ preferredFocus.isConnected &&
358
+ this.isElementFocusable(preferredFocus)
359
+ ) {
360
+ targetElement = preferredFocus
361
+ }
362
+ }
363
+
364
+ if (!targetElement) {
365
+ try {
366
+ const tabbableElements = tabbable(config.element)
367
+ for (const el of tabbableElements) {
368
+ if (this.isElementFocusable(el as HTMLElement)) {
369
+ targetElement = el
370
+ break
371
+ }
372
+ }
373
+ } catch (e) {
374
+ console.warn('FocusRegionManager: Error finding tabbable elements', e)
375
+ }
376
+ }
377
+
378
+ if (!targetElement) {
379
+ targetElement = config.element
380
+ }
381
+
382
+ try {
383
+ targetElement?.focus()
384
+ targetElement?.scrollIntoView({ behavior: 'smooth', block: 'nearest' })
385
+ targetElement?.classList.add('is-focusRegionTarget')
386
+ setTimeout(() => {
387
+ targetElement?.classList.remove('is-focusRegionTarget')
388
+ targetElement?.classList.add('was-focusRegionTarget')
389
+ targetElement?.addEventListener(
390
+ 'transitionend',
391
+ () => {
392
+ targetElement?.classList.remove('was-focusRegionTarget')
393
+ },
394
+ { once: true },
395
+ )
396
+ }, 500)
397
+ } catch (e) {
398
+ console.warn(
399
+ 'FocusRegionManager: Error focusing element',
400
+ e,
401
+ targetElement,
402
+ )
403
+ }
404
+ }
405
+
406
+ private isElementFocusable(element: HTMLElement): boolean {
407
+ return (
408
+ !element.hasAttribute('inert') &&
409
+ !element.hidden &&
410
+ element.checkVisibility({
411
+ visibilityProperty: true,
412
+ opacityProperty: true,
413
+ })
414
+ )
415
+ }
416
+
417
+ private hasFocusableDescendants(element: HTMLElement): boolean {
418
+ try {
419
+ const tabbableElements = tabbable(element)
420
+ for (const el of tabbableElements) {
421
+ if (this.isElementFocusable(el as HTMLElement)) {
422
+ return true
423
+ }
424
+ }
425
+ } catch (e) {
426
+ console.warn(
427
+ 'FocusRegionManager: Error finding tabbable elements',
428
+ e,
429
+ element,
430
+ )
431
+ }
432
+ return false
433
+ }
434
+
435
+ /**
436
+ * Finds the topmost layer (fullscreen container, open dialog, or body) for focus navigation.
437
+ */
438
+ getTopLayer(): HTMLElement {
439
+ const fullscreenContainer = document.querySelector<HTMLElement>(
440
+ '.ProseMirror-fullscreen-container:not(.hide)',
441
+ )
442
+ if (fullscreenContainer) {
443
+ return fullscreenContainer
444
+ }
445
+
446
+ const openDialogs =
447
+ document.querySelectorAll<HTMLDialogElement>('dialog[open]')
448
+ return openDialogs.length > 0
449
+ ? openDialogs[openDialogs.length - 1]
450
+ : document.body
451
+ }
452
+
453
+ /**
454
+ * Resolves a human-readable label for a region, using:
455
+ * 1. config.label (explicit override)
456
+ * 2. element aria-label attribute
457
+ * 3. Text content of the element referenced by aria-labelledby
458
+ * Returns null if no label can be resolved.
459
+ */
460
+ getRegionLabel(config: FocusRegionConfig): string | null {
461
+ if (config.label) {
462
+ return config.label
463
+ }
464
+
465
+ const element = config.element
466
+ const ariaLabel = element.getAttribute('aria-label')
467
+ if (ariaLabel) {
468
+ return ariaLabel
469
+ }
470
+
471
+ const labelledBy = element.getAttribute('aria-labelledby')
472
+ if (labelledBy) {
473
+ const labelEl = document.getElementById(labelledBy)
474
+ if (labelEl?.textContent) {
475
+ return labelEl.textContent.trim()
476
+ }
477
+ }
478
+
479
+ return null
480
+ }
481
+
482
+ private isLayerRegistered(layer: HTMLElement): boolean {
483
+ return this.registeredRegions.has(layer)
484
+ }
485
+
486
+ /**
487
+ * Checks if the given keyboard event matches the region-navigation shortcut.
488
+ * - macOS: Alt+Tab / Alt+Shift+Tab
489
+ * - Windows/Linux: F6 / Shift+F6 (Alt+Tab is intercepted by the OS)
490
+ */
491
+ private isRegionShortcut(e: KeyboardEvent): boolean {
492
+ if (e.altKey && e.key === 'Tab') return true
493
+ if (!isMac && e.key === 'F6') return true
494
+ return false
495
+ }
496
+
497
+ /**
498
+ * Handles keyboard navigation between the focus regions.
499
+ */
500
+ private initKeyboardListeners(): void {
501
+ this.keyboardHandler = (e: KeyboardEvent) => {
502
+ if (this.isRegionShortcut(e)) {
503
+ const topLayer = this.getTopLayer()
504
+ if (!this.isLayerRegistered(topLayer)) {
505
+ console.warn(
506
+ 'FocusRegionManager: No registered regions for the current layer',
507
+ topLayer,
508
+ )
509
+ return
510
+ }
511
+
512
+ // At this point we know we will perform custom navigation, so it is
513
+ // safe to override the browser's default behavior.
514
+ e.preventDefault()
515
+ e.stopPropagation()
516
+
517
+ if (e.shiftKey) {
518
+ this.previousRegion(topLayer)
519
+ } else {
520
+ this.nextRegion(topLayer)
521
+ }
522
+ }
523
+ }
524
+
525
+ document.addEventListener('keydown', this.keyboardHandler, true)
526
+ }
527
+ }
528
+
529
+ export const focusRegionManager = FocusRegionManager.getInstance()
530
+ export { RegionId, FOCUS_REGION_SELECTOR, type FocusRegionConfig }
@@ -0,0 +1,93 @@
1
+ btu-form-filter {
2
+ @apply grid items-center [grid-template-columns:0fr_auto];
3
+ }
4
+
5
+ btu-form-filter.is-open {
6
+ @apply w-full [grid-template-columns:1fr_auto];
7
+ }
8
+
9
+ .FormFilter-container {
10
+ @apply min-w-0 origin-right scale-x-0 opacity-0 transition-[opacity,_transform] duration-200;
11
+ }
12
+
13
+ .FormFilter-container.is-open {
14
+ @apply mx-2 scale-x-100 opacity-100;
15
+ }
16
+
17
+ .FormFilter-container > label {
18
+ @apply absolute top-[50%] z-[1] ms-4 translate-y-[-50%] after:btu-icon after:btu-icon-search;
19
+ }
20
+
21
+ .FormFilter-container input {
22
+ @apply border-transparent bg-gray-100 !ps-11 focus:border-primary-600;
23
+ }
24
+
25
+ .FormFilter-icon {
26
+ @apply btu-button btu-button-text-hidden btu-button-fill-none btu-button-gray after:btu-icon after:btu-icon-search;
27
+ }
28
+
29
+ .FormFilter-icon.is-open {
30
+ @apply btu-button-pressed after:btu-icon-x;
31
+ }
32
+
33
+ .CIG.is-filtering {
34
+ > *,
35
+ > .Tab > *,
36
+ .PluginItem:not(.is-filterResult) {
37
+ @apply !hidden;
38
+ }
39
+
40
+ > .Tab {
41
+ @apply block;
42
+ }
43
+ }
44
+
45
+ .CIG.is-filtering .CIG-row.is-filterResult {
46
+ @apply !flex;
47
+ }
48
+
49
+ .CIG-title.is-filterResult {
50
+ @apply bg-gray-50 after:text-gray-400;
51
+
52
+ .CIG-titleText {
53
+ @apply text-gray-400;
54
+ }
55
+ }
56
+
57
+ .CIG.is-filtering .is-filterResult,
58
+ .CIG.is-filtering :has(.is-filterResult):not([hidden]) {
59
+ @apply !block;
60
+
61
+ &.CIG-row[data-tab]:not(.has-title),
62
+ &.Tab[data-tab],
63
+ &.CIG-title[data-tab] {
64
+ @apply relative mt-[calc(theme(spacing.7)_*_1.6)];
65
+ }
66
+
67
+ &.CIG-row[data-tab]:not(.has-title)::before,
68
+ &.Tab[data-tab]::after,
69
+ &.CIG-title[data-tab]::after {
70
+ @apply absolute top-[calc(theme(spacing.4)_*_-1.6)] w-full border-b-[1px] border-b-gray-300 text-xs uppercase leading-3 content-[attr(data-tab)];
71
+ }
72
+
73
+ &.CIG-title[data-tab]::after {
74
+ @apply left-0;
75
+ }
76
+
77
+ &.Tab[data-tab]::after,
78
+ &.CIG-row[data-tab]:not(.has-title)::before {
79
+ @apply left-[calc(theme(spacing.3)_*_-1)];
80
+ }
81
+
82
+ &.CIG-title {
83
+ @apply pointer-events-none;
84
+ }
85
+
86
+ .CIG-titleToggle {
87
+ @apply invisible;
88
+ }
89
+ }
90
+
91
+ .CIG.is-loading {
92
+ @apply visible block min-h-[80vh] before:btu-loader before:absolute before:left-[50%] before:top-[50%] before:z-10 before:size-[--loader-size] before:translate-x-[-50%] before:translate-y-[-50%];
93
+ }