@finsemble/finsemble-ui 7.0.1 → 7.1.0

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 (788) hide show
  1. package/package.json +13 -11
  2. package/react/actions/favoriteActions.d.ts +1 -0
  3. package/react/actions/favoriteActions.js +1 -0
  4. package/react/actions/favoriteActions.js.map +1 -1
  5. package/react/actions/menuActions.d.ts +1 -0
  6. package/react/actions/menuActions.js +1 -0
  7. package/react/actions/menuActions.js.map +1 -1
  8. package/react/actions/rootActions.d.ts +1 -0
  9. package/react/actions/rootActions.js +1 -0
  10. package/react/actions/rootActions.js.map +1 -1
  11. package/react/actions/searchActions.d.ts +1 -0
  12. package/react/actions/searchActions.js +1 -0
  13. package/react/actions/searchActions.js.map +1 -1
  14. package/react/actions/toolbarActions.d.ts +34 -0
  15. package/react/actions/toolbarActions.js +17 -0
  16. package/react/actions/toolbarActions.js.map +1 -1
  17. package/react/actions/workspaceActions.d.ts +1 -0
  18. package/react/actions/workspaceActions.js +1 -0
  19. package/react/actions/workspaceActions.js.map +1 -1
  20. package/react/assets/css/advancedAppLauncher.css +22 -19
  21. package/react/assets/css/appCatalog.css +67 -72
  22. package/react/assets/css/authentication.css +4 -3
  23. package/react/assets/css/button.css +3 -10
  24. package/react/assets/css/core/formElements.css +1 -1
  25. package/react/assets/css/core/icons.css +3 -2
  26. package/react/assets/css/core/notifications.css +2 -2
  27. package/react/assets/css/core/windowFrame.css +9 -9
  28. package/react/assets/css/dashbar.css +1 -1
  29. package/react/assets/css/defaultTheme.css +9 -53
  30. package/react/assets/css/dialogs.css +13 -11
  31. package/react/assets/css/favorites.css +3 -1
  32. package/react/assets/css/finsemble.css +3 -2
  33. package/react/assets/css/font-finance.css +233 -120
  34. package/react/assets/css/fonts/Open_Sans/OpenSans-Definition.css +10 -10
  35. package/react/assets/css/linkerWindow.css +2 -2
  36. package/react/assets/css/menus.css +10 -10
  37. package/react/assets/css/notificationsCenter.css +16 -31
  38. package/react/assets/css/processMonitor.css +7 -4
  39. package/react/assets/css/search.css +1 -1
  40. package/react/assets/css/shared/animations.css +10 -4
  41. package/react/assets/css/shared/common.css +2 -2
  42. package/react/assets/css/tags.css +10 -10
  43. package/react/assets/css/toolbar.css +22 -19
  44. package/react/assets/css/userPreferences.css +12 -14
  45. package/react/assets/css/windowTitleBar.css +75 -36
  46. package/react/componentTemplateGenerator.js +3 -2
  47. package/react/componentTemplateGenerator.js.map +1 -1
  48. package/react/components/FinsembleProvider.d.ts +7 -0
  49. package/react/components/FinsembleProvider.js +2 -0
  50. package/react/components/FinsembleProvider.js.map +1 -1
  51. package/react/components/appCatalog/AppCatalog.d.ts +4 -0
  52. package/react/components/appCatalog/AppCatalog.js +4 -0
  53. package/react/components/appCatalog/AppCatalog.js.map +1 -1
  54. package/react/components/appCatalog/AppCatalogComponent.d.ts +58 -0
  55. package/react/components/appCatalog/AppCatalogComponent.js +70 -1
  56. package/react/components/appCatalog/AppCatalogComponent.js.map +1 -1
  57. package/react/components/appCatalog/components/AppCard.d.ts +35 -0
  58. package/react/components/appCatalog/components/AppCard.js +42 -0
  59. package/react/components/appCatalog/components/AppCard.js.map +1 -1
  60. package/react/components/appCatalog/components/AppResults.d.ts +10 -0
  61. package/react/components/appCatalog/components/AppResults.js +24 -0
  62. package/react/components/appCatalog/components/AppResults.js.map +1 -1
  63. package/react/components/appCatalog/components/Carousel.d.ts +26 -0
  64. package/react/components/appCatalog/components/Carousel.js +34 -0
  65. package/react/components/appCatalog/components/Carousel.js.map +1 -1
  66. package/react/components/appCatalog/components/EmptyResults.d.ts +4 -0
  67. package/react/components/appCatalog/components/EmptyResults.js +8 -0
  68. package/react/components/appCatalog/components/EmptyResults.js.map +1 -1
  69. package/react/components/appCatalog/components/Hero.d.ts +15 -0
  70. package/react/components/appCatalog/components/Hero.js +15 -0
  71. package/react/components/appCatalog/components/Hero.js.map +1 -1
  72. package/react/components/appCatalog/components/Home.d.ts +6 -4
  73. package/react/components/appCatalog/components/Home.js +10 -0
  74. package/react/components/appCatalog/components/Home.js.map +1 -1
  75. package/react/components/appCatalog/components/SearchBar.d.ts +31 -0
  76. package/react/components/appCatalog/components/SearchBar.js +33 -0
  77. package/react/components/appCatalog/components/SearchBar.js.map +1 -1
  78. package/react/components/appCatalog/components/Showcase/AppDescription.d.ts +5 -0
  79. package/react/components/appCatalog/components/Showcase/AppDescription.js +9 -0
  80. package/react/components/appCatalog/components/Showcase/AppDescription.js.map +1 -1
  81. package/react/components/appCatalog/components/Showcase/AppDevNotes.d.ts +7 -0
  82. package/react/components/appCatalog/components/Showcase/AppDevNotes.js +15 -0
  83. package/react/components/appCatalog/components/Showcase/AppDevNotes.js.map +1 -1
  84. package/react/components/appCatalog/components/Showcase/AppShowcase.d.ts +17 -0
  85. package/react/components/appCatalog/components/Showcase/AppShowcase.js +25 -0
  86. package/react/components/appCatalog/components/Showcase/AppShowcase.js.map +1 -1
  87. package/react/components/appCatalog/components/Showcase/Header.d.ts +7 -0
  88. package/react/components/appCatalog/components/Showcase/Header.js +12 -0
  89. package/react/components/appCatalog/components/Showcase/Header.js.map +1 -1
  90. package/react/components/appCatalog/components/Showcase/ImageCarousel.d.ts +7 -0
  91. package/react/components/appCatalog/components/Showcase/ImageCarousel.js +11 -0
  92. package/react/components/appCatalog/components/Showcase/ImageCarousel.js.map +1 -1
  93. package/react/components/appCatalog/components/Showcase/Modal.d.ts +10 -0
  94. package/react/components/appCatalog/components/Showcase/Modal.js +10 -0
  95. package/react/components/appCatalog/components/Showcase/Modal.js.map +1 -1
  96. package/react/components/appCatalog/components/Showcase/ReleaseNotes.d.ts +5 -0
  97. package/react/components/appCatalog/components/Showcase/ReleaseNotes.js +9 -0
  98. package/react/components/appCatalog/components/Showcase/ReleaseNotes.js.map +1 -1
  99. package/react/components/appCatalog/components/Showcase/SupportNotes.d.ts +6 -0
  100. package/react/components/appCatalog/components/Showcase/SupportNotes.js +11 -0
  101. package/react/components/appCatalog/components/Showcase/SupportNotes.js.map +1 -1
  102. package/react/components/appCatalog/components/Showcase/VersionNotes.d.ts +5 -0
  103. package/react/components/appCatalog/components/Showcase/VersionNotes.js +9 -0
  104. package/react/components/appCatalog/components/Showcase/VersionNotes.js.map +1 -1
  105. package/react/components/appCatalog/components/Tag.d.ts +6 -0
  106. package/react/components/appCatalog/components/Tag.js +10 -0
  107. package/react/components/appCatalog/components/Tag.js.map +1 -1
  108. package/react/components/appCatalog/components/Toast.d.ts +5 -0
  109. package/react/components/appCatalog/components/Toast.js +9 -0
  110. package/react/components/appCatalog/components/Toast.js.map +1 -1
  111. package/react/components/appCatalog/components/helpers.js +1 -0
  112. package/react/components/appCatalog/components/helpers.js.map +1 -1
  113. package/react/components/appCatalog/modules/AppDirectory.d.ts +5 -0
  114. package/react/components/appCatalog/modules/AppDirectory.js +5 -0
  115. package/react/components/appCatalog/modules/AppDirectory.js.map +1 -1
  116. package/react/components/appCatalog/modules/FDC3.d.ts +37 -0
  117. package/react/components/appCatalog/modules/FDC3.js +40 -0
  118. package/react/components/appCatalog/modules/FDC3.js.map +1 -1
  119. package/react/components/appCatalog/stores/appStore.js +1 -0
  120. package/react/components/appCatalog/stores/appStore.js.map +1 -1
  121. package/react/components/appCatalog/stores/storeActions.d.ts +91 -0
  122. package/react/components/appCatalog/stores/storeActions.js +116 -1
  123. package/react/components/appCatalog/stores/storeActions.js.map +1 -1
  124. package/react/components/common/Checkbox.d.ts +1 -0
  125. package/react/components/common/Checkbox.js +2 -2
  126. package/react/components/common/Checkbox.js.map +1 -1
  127. package/react/components/common/ColorPicker.d.ts +5 -0
  128. package/react/components/common/ColorPicker.js +40 -0
  129. package/react/components/common/ColorPicker.js.map +1 -1
  130. package/react/components/common/DropZone.d.ts +11 -0
  131. package/react/components/common/DropZone.js +21 -1
  132. package/react/components/common/DropZone.js.map +1 -1
  133. package/react/components/common/DropdownButton.d.ts +4 -0
  134. package/react/components/common/DropdownButton.js +4 -0
  135. package/react/components/common/DropdownButton.js.map +1 -1
  136. package/react/components/common/ErrorBoundary.d.ts +18 -0
  137. package/react/components/common/ErrorBoundary.js +21 -0
  138. package/react/components/common/ErrorBoundary.js.map +1 -1
  139. package/react/components/common/FileInput.d.ts +8 -1
  140. package/react/components/common/FileInput.js +19 -4
  141. package/react/components/common/FileInput.js.map +1 -1
  142. package/react/components/common/FinsembleIcon.d.ts +10 -0
  143. package/react/components/common/FinsembleIcon.js +51 -2
  144. package/react/components/common/FinsembleIcon.js.map +1 -1
  145. package/react/components/common/FinsembleSelect.js +5 -1
  146. package/react/components/common/FinsembleSelect.js.map +1 -1
  147. package/react/components/common/FinsembleToggleButtonBar.js +1 -1
  148. package/react/components/common/FinsembleToggleButtonBar.js.map +1 -1
  149. package/react/components/common/InputTable.d.ts +7 -0
  150. package/react/components/common/InputTable.js +7 -0
  151. package/react/components/common/InputTable.js.map +1 -1
  152. package/react/components/common/Tab.js +3 -0
  153. package/react/components/common/Tab.js.map +1 -1
  154. package/react/components/common/TimeSelect.js +24 -0
  155. package/react/components/common/TimeSelect.js.map +1 -1
  156. package/react/components/common/Tooltip.js +2 -0
  157. package/react/components/common/Tooltip.js.map +1 -1
  158. package/react/components/common/css/accordion.css +9 -6
  159. package/react/components/common/css/application-edit-page.css +39 -44
  160. package/react/components/common/css/button.css +10 -5
  161. package/react/components/common/css/color-picker.css +3 -3
  162. package/react/components/common/css/drop-zone.css +2 -6
  163. package/react/components/common/css/file-input.css +5 -5
  164. package/react/components/common/css/header.css +3 -2
  165. package/react/components/common/css/icon.css +1 -1
  166. package/react/components/common/css/loading-spinner.css +7 -12
  167. package/react/components/common/css/selector.css +4 -4
  168. package/react/components/common/css/styles.css +22 -16
  169. package/react/components/common/css/tab.css +8 -8
  170. package/react/components/common/css/time-select.css +1 -0
  171. package/react/components/common/css/toggle.css +4 -4
  172. package/react/components/common/css/tooltip.css +2 -3
  173. package/react/components/common/file_helpers.js +2 -0
  174. package/react/components/common/file_helpers.js.map +1 -1
  175. package/react/components/common/helpers.js +1 -0
  176. package/react/components/common/helpers.js.map +1 -1
  177. package/react/components/common/stories/ColorPicker.stories.js +3 -0
  178. package/react/components/common/stories/ColorPicker.stories.js.map +1 -1
  179. package/react/components/common/stories/FileInput.stories.d.ts +3 -1
  180. package/react/components/common/stories/FileInput.stories.js +12 -0
  181. package/react/components/common/stories/FileInput.stories.js.map +1 -1
  182. package/react/components/common/tests/Accordion.spec.js +6 -0
  183. package/react/components/common/tests/Accordion.spec.js.map +1 -1
  184. package/react/components/common/tests/Checkbox.spec.js +1 -0
  185. package/react/components/common/tests/Checkbox.spec.js.map +1 -1
  186. package/react/components/common/tests/ColorPicker.spec.js +6 -0
  187. package/react/components/common/tests/ColorPicker.spec.js.map +1 -1
  188. package/react/components/common/tests/DropZone.spec.js +1 -0
  189. package/react/components/common/tests/DropZone.spec.js.map +1 -1
  190. package/react/components/common/tests/FileInput.spec.js +22 -0
  191. package/react/components/common/tests/FileInput.spec.js.map +1 -1
  192. package/react/components/common/tests/FinsembleSelect.spec.js +1 -0
  193. package/react/components/common/tests/FinsembleSelect.spec.js.map +1 -1
  194. package/react/components/common/tests/FinsembleToggle.spec.js +1 -0
  195. package/react/components/common/tests/FinsembleToggle.spec.js.map +1 -1
  196. package/react/components/common/tests/FinsembleToggleButtonBar.spec.js +1 -0
  197. package/react/components/common/tests/FinsembleToggleButtonBar.spec.js.map +1 -1
  198. package/react/components/common/tests/TimeSelect.spec.js +4 -0
  199. package/react/components/common/tests/TimeSelect.spec.js.map +1 -1
  200. package/react/components/common/tests/Tooltip.spec.js +16 -0
  201. package/react/components/common/tests/Tooltip.spec.js.map +1 -1
  202. package/react/components/favorites/FavoriteMaker.d.ts +8 -0
  203. package/react/components/favorites/FavoriteMaker.js +9 -0
  204. package/react/components/favorites/FavoriteMaker.js.map +1 -1
  205. package/react/components/favorites/FavoritesShell.d.ts +4 -0
  206. package/react/components/favorites/FavoritesShell.js +13 -1
  207. package/react/components/favorites/FavoritesShell.js.map +1 -1
  208. package/react/components/favorites/FavoritesShell.spec.js +3 -0
  209. package/react/components/favorites/FavoritesShell.spec.js.map +1 -1
  210. package/react/components/fdc3Resolver/ResolverContainer.js +8 -0
  211. package/react/components/fdc3Resolver/ResolverContainer.js.map +1 -1
  212. package/react/components/fdc3Resolver/ResolverDialog.css +16 -3
  213. package/react/components/fdc3Resolver/ResolverDialog.js +7 -2
  214. package/react/components/fdc3Resolver/ResolverDialog.js.map +1 -1
  215. package/react/components/fdc3Resolver/ResolverDialog.spec.js +3 -2
  216. package/react/components/fdc3Resolver/ResolverDialog.spec.js.map +1 -1
  217. package/react/components/fdc3Resolver/ResolverDialog.stories.js +2 -0
  218. package/react/components/fdc3Resolver/ResolverDialog.stories.js.map +1 -1
  219. package/react/components/icon/Icon.d.ts +13 -0
  220. package/react/components/icon/Icon.js +34 -0
  221. package/react/components/icon/Icon.js.map +1 -1
  222. package/react/components/legacyControls/FinsembleDialog.d.ts +4 -0
  223. package/react/components/legacyControls/FinsembleDialog.js +15 -0
  224. package/react/components/legacyControls/FinsembleDialog.js.map +1 -1
  225. package/react/components/legacyControls/FinsembleDialogButton.d.ts +3 -0
  226. package/react/components/legacyControls/FinsembleDialogButton.js +6 -1
  227. package/react/components/legacyControls/FinsembleDialogButton.js.map +1 -1
  228. package/react/components/legacyControls/FinsembleDialogQuestion.d.ts +7 -0
  229. package/react/components/legacyControls/FinsembleDialogQuestion.js +7 -0
  230. package/react/components/legacyControls/FinsembleDialogQuestion.js.map +1 -1
  231. package/react/components/legacyControls/FinsembleDialogTextInput.d.ts +3 -0
  232. package/react/components/legacyControls/FinsembleDialogTextInput.js +14 -0
  233. package/react/components/legacyControls/FinsembleDialogTextInput.js.map +1 -1
  234. package/react/components/legacyControls/FinsembleDnDContext.d.ts +19 -0
  235. package/react/components/legacyControls/FinsembleDnDContext.js +126 -1
  236. package/react/components/legacyControls/FinsembleDnDContext.js.map +1 -1
  237. package/react/components/legacyControls/FinsembleDraggable.d.ts +3 -0
  238. package/react/components/legacyControls/FinsembleDraggable.js +3 -0
  239. package/react/components/legacyControls/FinsembleDraggable.js.map +1 -1
  240. package/react/components/legacyControls/FinsembleHoverDetector.d.ts +15 -0
  241. package/react/components/legacyControls/FinsembleHoverDetector.js +26 -1
  242. package/react/components/legacyControls/FinsembleHoverDetector.js.map +1 -1
  243. package/react/components/legacyControls/FinsembleMenuSection.d.ts +4 -0
  244. package/react/components/legacyControls/FinsembleMenuSection.js +38 -0
  245. package/react/components/legacyControls/FinsembleMenuSection.js.map +1 -1
  246. package/react/components/legacyControls/tests/FinsembleDialogButton.spec.js +1 -0
  247. package/react/components/legacyControls/tests/FinsembleDialogButton.spec.js.map +1 -1
  248. package/react/components/legacyControls/tests/FinsembleDialogTextInput.spec.js +1 -0
  249. package/react/components/legacyControls/tests/FinsembleDialogTextInput.spec.js.map +1 -1
  250. package/react/components/linker/LinkerMenu.d.ts +3 -0
  251. package/react/components/linker/LinkerMenu.js +21 -0
  252. package/react/components/linker/LinkerMenu.js.map +1 -1
  253. package/react/components/linker/LinkerMenuDeprecated.d.ts +3 -0
  254. package/react/components/linker/LinkerMenuDeprecated.js +9 -0
  255. package/react/components/linker/LinkerMenuDeprecated.js.map +1 -1
  256. package/react/components/menu/Menu.d.ts +15 -0
  257. package/react/components/menu/Menu.js +15 -0
  258. package/react/components/menu/Menu.js.map +1 -1
  259. package/react/components/menu/MenuAutoResizer.d.ts +7 -0
  260. package/react/components/menu/MenuAutoResizer.js +27 -0
  261. package/react/components/menu/MenuAutoResizer.js.map +1 -1
  262. package/react/components/menu/MenuContent.d.ts +4 -0
  263. package/react/components/menu/MenuContent.js +4 -0
  264. package/react/components/menu/MenuContent.js.map +1 -1
  265. package/react/components/menu/MenuHotKey.d.ts +14 -0
  266. package/react/components/menu/MenuHotKey.js +15 -0
  267. package/react/components/menu/MenuHotKey.js.map +1 -1
  268. package/react/components/menu/MenuItem.d.ts +8 -0
  269. package/react/components/menu/MenuItem.js +13 -2
  270. package/react/components/menu/MenuItem.js.map +1 -1
  271. package/react/components/menu/MenuPortal.js +112 -2
  272. package/react/components/menu/MenuPortal.js.map +1 -1
  273. package/react/components/menu/MenuShell.d.ts +16 -0
  274. package/react/components/menu/MenuShell.js +26 -0
  275. package/react/components/menu/MenuShell.js.map +1 -1
  276. package/react/components/menu/MenuToggle.d.ts +3 -0
  277. package/react/components/menu/MenuToggle.js +3 -0
  278. package/react/components/menu/MenuToggle.js.map +1 -1
  279. package/react/components/menu/keyboardNavigation.d.ts +12 -0
  280. package/react/components/menu/keyboardNavigation.js +55 -0
  281. package/react/components/menu/keyboardNavigation.js.map +1 -1
  282. package/react/components/menu/menuContext.d.ts +6 -0
  283. package/react/components/menu/menuContext.js +6 -0
  284. package/react/components/menu/menuContext.js.map +1 -1
  285. package/react/components/menu/menuHelpers.d.ts +22 -0
  286. package/react/components/menu/menuHelpers.js +58 -1
  287. package/react/components/menu/menuHelpers.js.map +1 -1
  288. package/react/components/notifications/components/drawer/DrawerControls.js +8 -0
  289. package/react/components/notifications/components/drawer/DrawerControls.js.map +1 -1
  290. package/react/components/notifications/components/drawer/DrawerHeader.js +5 -0
  291. package/react/components/notifications/components/drawer/DrawerHeader.js.map +1 -1
  292. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js +18 -0
  293. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js.map +1 -1
  294. package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js +3 -0
  295. package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js.map +1 -1
  296. package/react/components/notifications/components/shared/CheckButton.js +1 -1
  297. package/react/components/notifications/components/shared/CheckButton.js.map +1 -1
  298. package/react/components/notifications/components/shared/NotificationCardShell.d.ts +9 -0
  299. package/react/components/notifications/components/shared/NotificationCardShell.js +13 -6
  300. package/react/components/notifications/components/shared/NotificationCardShell.js.map +1 -1
  301. package/react/components/notifications/components/shared/OverflowMenu.d.ts +4 -0
  302. package/react/components/notifications/components/shared/OverflowMenu.js +16 -2
  303. package/react/components/notifications/components/shared/OverflowMenu.js.map +1 -1
  304. package/react/components/notifications/components/views/CardView.js +3 -0
  305. package/react/components/notifications/components/views/CardView.js.map +1 -1
  306. package/react/components/notifications/components/views/ListView.js +8 -0
  307. package/react/components/notifications/components/views/ListView.js.map +1 -1
  308. package/react/components/notifications/notificationsContext.d.ts +4 -0
  309. package/react/components/notifications/notificationsContext.js +4 -0
  310. package/react/components/notifications/notificationsContext.js.map +1 -1
  311. package/react/components/notifications/types.d.ts +3 -0
  312. package/react/components/notifications/utils.d.ts +4 -0
  313. package/react/components/notifications/utils.js +4 -0
  314. package/react/components/notifications/utils.js.map +1 -1
  315. package/react/components/processMonitor/ProcessMonitor.d.ts +3 -0
  316. package/react/components/processMonitor/ProcessMonitor.js +17 -2
  317. package/react/components/processMonitor/ProcessMonitor.js.map +1 -1
  318. package/react/components/processMonitor/components/ChildWindow.d.ts +3 -0
  319. package/react/components/processMonitor/components/ChildWindow.js +5 -0
  320. package/react/components/processMonitor/components/ChildWindow.js.map +1 -1
  321. package/react/components/processMonitor/components/ListHeader.d.ts +5 -0
  322. package/react/components/processMonitor/components/ListHeader.js +7 -0
  323. package/react/components/processMonitor/components/ListHeader.js.map +1 -1
  324. package/react/components/processMonitor/components/ProcessStatistics.js +12 -1
  325. package/react/components/processMonitor/components/ProcessStatistics.js.map +1 -1
  326. package/react/components/processMonitor/constants.js +6 -0
  327. package/react/components/processMonitor/constants.js.map +1 -1
  328. package/react/components/processMonitor/helpers.d.ts +13 -0
  329. package/react/components/processMonitor/helpers.js +23 -3
  330. package/react/components/processMonitor/helpers.js.map +1 -1
  331. package/react/components/processMonitor/stores/ProcessMonitorStore.d.ts +39 -0
  332. package/react/components/processMonitor/stores/ProcessMonitorStore.js +50 -0
  333. package/react/components/processMonitor/stores/ProcessMonitorStore.js.map +1 -1
  334. package/react/components/quickComponentForm/QuickComponentForm.d.ts +3 -0
  335. package/react/components/quickComponentForm/QuickComponentForm.js +20 -0
  336. package/react/components/quickComponentForm/QuickComponentForm.js.map +1 -1
  337. package/react/components/quickComponentForm/quickComponent.css +1 -1
  338. package/react/components/sdd/AddApp.d.ts +4 -2
  339. package/react/components/sdd/AddApp.js +57 -49
  340. package/react/components/sdd/AddApp.js.map +1 -1
  341. package/react/components/sdd/AppEditAccess.js +8 -0
  342. package/react/components/sdd/AppEditAccess.js.map +1 -1
  343. package/react/components/sdd/AppEditPage.d.ts +2 -1
  344. package/react/components/sdd/AppEditPage.js +148 -361
  345. package/react/components/sdd/AppEditPage.js.map +1 -1
  346. package/react/components/sdd/Appearance.css +1 -1
  347. package/react/components/sdd/Appearance.js +3 -0
  348. package/react/components/sdd/Appearance.js.map +1 -1
  349. package/react/components/sdd/Application.js +39 -7
  350. package/react/components/sdd/Application.js.map +1 -1
  351. package/react/components/sdd/Applications.js +89 -13
  352. package/react/components/sdd/Applications.js.map +1 -1
  353. package/react/components/sdd/AssetsPage.css +3 -3
  354. package/react/components/sdd/EditPreload.js +10 -0
  355. package/react/components/sdd/EditPreload.js.map +1 -1
  356. package/react/components/sdd/ExportCloud.js +4 -0
  357. package/react/components/sdd/ExportCloud.js.map +1 -1
  358. package/react/components/sdd/Publish.js +2 -0
  359. package/react/components/sdd/Publish.js.map +1 -1
  360. package/react/components/sdd/PublishProgress.js +11 -1
  361. package/react/components/sdd/PublishProgress.js.map +1 -1
  362. package/react/components/sdd/SmartDesktopDesigner.js +17 -0
  363. package/react/components/sdd/SmartDesktopDesigner.js.map +1 -1
  364. package/react/components/sdd/ThemePage.css +6 -23
  365. package/react/components/sdd/ThemePage.js +1 -1
  366. package/react/components/sdd/ThemePage.js.map +1 -1
  367. package/react/components/sdd/Themes.js +2 -0
  368. package/react/components/sdd/Themes.js.map +1 -1
  369. package/react/components/sdd/Toolbar.js +7 -0
  370. package/react/components/sdd/Toolbar.js.map +1 -1
  371. package/react/components/sdd/appEditPage/Behavior.d.ts +34 -0
  372. package/react/components/sdd/appEditPage/Behavior.js +134 -0
  373. package/react/components/sdd/appEditPage/Behavior.js.map +1 -0
  374. package/react/components/sdd/appEditPage/Component.d.ts +22 -0
  375. package/react/components/sdd/appEditPage/Component.js +76 -0
  376. package/react/components/sdd/appEditPage/Component.js.map +1 -0
  377. package/react/components/sdd/appEditPage/DebugToolkit.d.ts +9 -0
  378. package/react/components/sdd/appEditPage/DebugToolkit.js +20 -0
  379. package/react/components/sdd/appEditPage/DebugToolkit.js.map +1 -0
  380. package/react/components/sdd/appEditPage/Interop.d.ts +10 -0
  381. package/react/components/sdd/appEditPage/Interop.js +40 -0
  382. package/react/components/sdd/appEditPage/Interop.js.map +1 -0
  383. package/react/components/sdd/appEditPage/Position.d.ts +18 -0
  384. package/react/components/sdd/appEditPage/Position.js +72 -0
  385. package/react/components/sdd/appEditPage/Position.js.map +1 -0
  386. package/react/components/sdd/appEditPage/Preloads.d.ts +9 -0
  387. package/react/components/sdd/appEditPage/Preloads.js +16 -0
  388. package/react/components/sdd/appEditPage/Preloads.js.map +1 -0
  389. package/react/components/sdd/appEditPage/SelectConnect.d.ts +15 -0
  390. package/react/components/sdd/appEditPage/SelectConnect.js +28 -0
  391. package/react/components/sdd/appEditPage/SelectConnect.js.map +1 -0
  392. package/react/components/sdd/appEditPage/Workspace.d.ts +12 -0
  393. package/react/components/sdd/appEditPage/Workspace.js +30 -0
  394. package/react/components/sdd/appEditPage/Workspace.js.map +1 -0
  395. package/react/components/sdd/common/getCSSVars.js +7 -2
  396. package/react/components/sdd/common/getCSSVars.js.map +1 -1
  397. package/react/components/sdd/common/setPreloadDefaults.js +4 -0
  398. package/react/components/sdd/common/setPreloadDefaults.js.map +1 -1
  399. package/react/components/sdd/css/addApp.css +18 -5
  400. package/react/components/sdd/css/appearance.css +6 -0
  401. package/react/components/sdd/css/applications.css +27 -14
  402. package/react/components/sdd/css/authentication.css +7 -6
  403. package/react/components/sdd/css/buttons.css +1 -1
  404. package/react/components/sdd/css/export.css +5 -3
  405. package/react/components/sdd/css/getting-started.css +2 -2
  406. package/react/components/sdd/css/nav.css +8 -11
  407. package/react/components/sdd/css/project-header.css +5 -7
  408. package/react/components/sdd/css/styles.css +29 -23
  409. package/react/components/sdd/css/views.css +4 -3
  410. package/react/components/sdd/fixtures/apps.js +12 -0
  411. package/react/components/sdd/fixtures/apps.js.map +1 -1
  412. package/react/components/sdd/fixtures/configTemplate.js +1 -0
  413. package/react/components/sdd/fixtures/configTemplate.js.map +1 -1
  414. package/react/components/sdd/fixtures/publishProgress.js +40 -0
  415. package/react/components/sdd/fixtures/publishProgress.js.map +1 -1
  416. package/react/components/sdd/sdd_helpers.d.ts +6 -0
  417. package/react/components/sdd/sdd_helpers.js +6 -0
  418. package/react/components/sdd/sdd_helpers.js.map +1 -1
  419. package/react/components/sdd/smartDesktopClient.d.ts +303 -0
  420. package/react/components/sdd/smartDesktopClient.js +334 -1
  421. package/react/components/sdd/smartDesktopClient.js.map +1 -1
  422. package/react/components/sdd/smartDesktopClient.spec.js +5 -2
  423. package/react/components/sdd/smartDesktopClient.spec.js.map +1 -1
  424. package/react/components/sdd/stories/AddApp.stories.d.ts +2 -1
  425. package/react/components/sdd/stories/AddApp.stories.js +8 -0
  426. package/react/components/sdd/stories/AddApp.stories.js.map +1 -1
  427. package/react/components/sdd/stories/AppEditPage.stories.d.ts +3 -1
  428. package/react/components/sdd/stories/AppEditPage.stories.js +3 -0
  429. package/react/components/sdd/stories/AppEditPage.stories.js.map +1 -1
  430. package/react/components/sdd/stories/Appearance.stories.js +1 -0
  431. package/react/components/sdd/stories/Appearance.stories.js.map +1 -1
  432. package/react/components/sdd/tests/AddApp.spec.js +40 -3
  433. package/react/components/sdd/tests/AddApp.spec.js.map +1 -1
  434. package/react/components/sdd/tests/AppEditPage.spec.js +16 -0
  435. package/react/components/sdd/tests/AppEditPage.spec.js.map +1 -1
  436. package/react/components/sdd/tests/Application.spec.js +33 -438
  437. package/react/components/sdd/tests/Application.spec.js.map +1 -1
  438. package/react/components/sdd/tests/Applications.spec.d.ts +1 -1
  439. package/react/components/sdd/tests/Applications.spec.js +29 -5
  440. package/react/components/sdd/tests/Applications.spec.js.map +1 -1
  441. package/react/components/sdd/tests/Authentication.spec.js +7 -0
  442. package/react/components/sdd/tests/Authentication.spec.js.map +1 -1
  443. package/react/components/sdd/tests/ContentHeader.spec.js +2 -0
  444. package/react/components/sdd/tests/ContentHeader.spec.js.map +1 -1
  445. package/react/components/sdd/tests/EditPreload.spec.js +13 -0
  446. package/react/components/sdd/tests/EditPreload.spec.js.map +1 -1
  447. package/react/components/sdd/tests/Export.spec.js +2 -1
  448. package/react/components/sdd/tests/Export.spec.js.map +1 -1
  449. package/react/components/sdd/tests/ItemList.spec.js +4 -0
  450. package/react/components/sdd/tests/ItemList.spec.js.map +1 -1
  451. package/react/components/sdd/tests/OptionalSettingsView.spec.js +29 -0
  452. package/react/components/sdd/tests/OptionalSettingsView.spec.js.map +1 -1
  453. package/react/components/sdd/tests/ProjectErrors.spec.js +2 -0
  454. package/react/components/sdd/tests/ProjectErrors.spec.js.map +1 -1
  455. package/react/components/sdd/tests/Themes.spec.js +1 -1
  456. package/react/components/sdd/tests/Themes.spec.js.map +1 -1
  457. package/react/components/sdd/tests/Toolbar.spec.js +53 -0
  458. package/react/components/sdd/tests/Toolbar.spec.js.map +1 -1
  459. package/react/components/sdd/tests/a11y_helper.js +8 -0
  460. package/react/components/sdd/tests/a11y_helper.js.map +1 -1
  461. package/react/components/search/Highlight.d.ts +6 -0
  462. package/react/components/search/Highlight.js +19 -0
  463. package/react/components/search/Highlight.js.map +1 -1
  464. package/react/components/search/SearchBestMatch.d.ts +4 -0
  465. package/react/components/search/SearchBestMatch.js +11 -0
  466. package/react/components/search/SearchBestMatch.js.map +1 -1
  467. package/react/components/search/SearchInput.d.ts +5 -0
  468. package/react/components/search/SearchInput.js +6 -0
  469. package/react/components/search/SearchInput.js.map +1 -1
  470. package/react/components/search/SearchProviderResults.js +2 -0
  471. package/react/components/search/SearchProviderResults.js.map +1 -1
  472. package/react/components/search/SearchResult.js +6 -0
  473. package/react/components/search/SearchResult.js.map +1 -1
  474. package/react/components/search/SearchResult.spec.js +7 -0
  475. package/react/components/search/SearchResult.spec.js.map +1 -1
  476. package/react/components/search/SearchResult.stories.js +4 -0
  477. package/react/components/search/SearchResult.stories.js.map +1 -1
  478. package/react/components/search/SearchResults.js +5 -1
  479. package/react/components/search/SearchResults.js.map +1 -1
  480. package/react/components/search/SearchResults.spec.js +7 -0
  481. package/react/components/search/SearchResults.spec.js.map +1 -1
  482. package/react/components/shared/Animate.d.ts +5 -0
  483. package/react/components/shared/Animate.js +12 -1
  484. package/react/components/shared/Animate.js.map +1 -1
  485. package/react/components/shared/DefaultDropdownButton.js +9 -0
  486. package/react/components/shared/DefaultDropdownButton.js.map +1 -1
  487. package/react/components/shared/Tag.d.ts +0 -4
  488. package/react/components/shared/Tag.js +4 -0
  489. package/react/components/shared/Tag.js.map +1 -1
  490. package/react/components/shared/TagsMenu.d.ts +6 -0
  491. package/react/components/shared/TagsMenu.js +7 -0
  492. package/react/components/shared/TagsMenu.js.map +1 -1
  493. package/react/components/shared/addProtocolToValidURL.d.ts +6 -0
  494. package/react/components/shared/addProtocolToValidURL.js +6 -0
  495. package/react/components/shared/addProtocolToValidURL.js.map +1 -1
  496. package/react/components/shared/openQuitConfirmationDialog.d.ts +1 -1
  497. package/react/components/shared/openQuitConfirmationDialog.js +4 -4
  498. package/react/components/shared/openQuitConfirmationDialog.js.map +1 -1
  499. package/react/components/shared/tests/addProtocolToValidURL.spec.js +1 -0
  500. package/react/components/shared/tests/addProtocolToValidURL.spec.js.map +1 -1
  501. package/react/components/shared/validateURL.d.ts +18 -0
  502. package/react/components/shared/validateURL.js +24 -5
  503. package/react/components/shared/validateURL.js.map +1 -1
  504. package/react/components/singleInputDialog/SingleInputDialog.css +1 -1
  505. package/react/components/singleInputDialog/SingleInputDialog.d.ts +3 -0
  506. package/react/components/singleInputDialog/SingleInputDialog.js +44 -0
  507. package/react/components/singleInputDialog/SingleInputDialog.js.map +1 -1
  508. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js +6 -0
  509. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js.map +1 -1
  510. package/react/components/system/System.d.ts +22 -0
  511. package/react/components/system/System.js +23 -1
  512. package/react/components/system/System.js.map +1 -1
  513. package/react/components/system/System.stories.js +1 -0
  514. package/react/components/system/System.stories.js.map +1 -1
  515. package/react/components/system/SystemTrayComponentShell.d.ts +6 -0
  516. package/react/components/system/SystemTrayComponentShell.js +9 -0
  517. package/react/components/system/SystemTrayComponentShell.js.map +1 -1
  518. package/react/components/toolbar/AutoArrange.d.ts +5 -0
  519. package/react/components/toolbar/AutoArrange.js +8 -1
  520. package/react/components/toolbar/AutoArrange.js.map +1 -1
  521. package/react/components/toolbar/AutoArrange.spec.js +1 -0
  522. package/react/components/toolbar/AutoArrange.spec.js.map +1 -1
  523. package/react/components/toolbar/AutoArrange.stories.js +1 -0
  524. package/react/components/toolbar/AutoArrange.stories.js.map +1 -1
  525. package/react/components/toolbar/DragHandle.d.ts +4 -0
  526. package/react/components/toolbar/DragHandle.js +11 -0
  527. package/react/components/toolbar/DragHandle.js.map +1 -1
  528. package/react/components/toolbar/DragHandle.spec.js +1 -0
  529. package/react/components/toolbar/DragHandle.spec.js.map +1 -1
  530. package/react/components/toolbar/DragHandle.stories.js +1 -0
  531. package/react/components/toolbar/DragHandle.stories.js.map +1 -1
  532. package/react/components/toolbar/MinimizeAll.d.ts +4 -0
  533. package/react/components/toolbar/MinimizeAll.js +7 -1
  534. package/react/components/toolbar/MinimizeAll.js.map +1 -1
  535. package/react/components/toolbar/MinimizeAll.spec.js +1 -0
  536. package/react/components/toolbar/MinimizeAll.spec.js.map +1 -1
  537. package/react/components/toolbar/MinimizeAll.stories.js +1 -0
  538. package/react/components/toolbar/MinimizeAll.stories.js.map +1 -1
  539. package/react/components/toolbar/NotificationControl.d.ts +5 -0
  540. package/react/components/toolbar/NotificationControl.js +8 -1
  541. package/react/components/toolbar/NotificationControl.js.map +1 -1
  542. package/react/components/toolbar/RevealAll.d.ts +4 -0
  543. package/react/components/toolbar/RevealAll.js +7 -1
  544. package/react/components/toolbar/RevealAll.js.map +1 -1
  545. package/react/components/toolbar/RevealAll.spec.js +1 -0
  546. package/react/components/toolbar/RevealAll.spec.js.map +1 -1
  547. package/react/components/toolbar/RevealAll.stories.js +1 -0
  548. package/react/components/toolbar/RevealAll.stories.js.map +1 -1
  549. package/react/components/toolbar/SddButton.d.ts +4 -0
  550. package/react/components/toolbar/SddButton.js +4 -0
  551. package/react/components/toolbar/SddButton.js.map +1 -1
  552. package/react/components/toolbar/ToolbarIcon.d.ts +4 -0
  553. package/react/components/toolbar/ToolbarIcon.js +4 -0
  554. package/react/components/toolbar/ToolbarIcon.js.map +1 -1
  555. package/react/components/toolbar/ToolbarSection.d.ts +7 -0
  556. package/react/components/toolbar/ToolbarSection.js +19 -1
  557. package/react/components/toolbar/ToolbarSection.js.map +1 -1
  558. package/react/components/toolbar/ToolbarShell.d.ts +5 -0
  559. package/react/components/toolbar/ToolbarShell.js +7 -0
  560. package/react/components/toolbar/ToolbarShell.js.map +1 -1
  561. package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.d.ts +16 -0
  562. package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.js +20 -0
  563. package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.js.map +1 -1
  564. package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.d.ts +52 -0
  565. package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.js +58 -0
  566. package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.js.map +1 -1
  567. package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.d.ts +5 -0
  568. package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.js +5 -0
  569. package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.js.map +1 -1
  570. package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.d.ts +27 -0
  571. package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.js +49 -0
  572. package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.js.map +1 -1
  573. package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.d.ts +13 -0
  574. package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.js +14 -0
  575. package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.js.map +1 -1
  576. package/react/components/toolbar/advancedAppLauncher/components/Content.d.ts +5 -0
  577. package/react/components/toolbar/advancedAppLauncher/components/Content.js +19 -0
  578. package/react/components/toolbar/advancedAppLauncher/components/Content.js.map +1 -1
  579. package/react/components/toolbar/advancedAppLauncher/components/FilterSort.d.ts +4 -0
  580. package/react/components/toolbar/advancedAppLauncher/components/FilterSort.js +4 -0
  581. package/react/components/toolbar/advancedAppLauncher/components/FilterSort.js.map +1 -1
  582. package/react/components/toolbar/advancedAppLauncher/components/FoldersList.d.ts +16 -0
  583. package/react/components/toolbar/advancedAppLauncher/components/FoldersList.js +39 -0
  584. package/react/components/toolbar/advancedAppLauncher/components/FoldersList.js.map +1 -1
  585. package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.d.ts +4 -0
  586. package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.js +9 -0
  587. package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.js.map +1 -1
  588. package/react/components/toolbar/advancedAppLauncher/components/SearchBox.js +3 -0
  589. package/react/components/toolbar/advancedAppLauncher/components/SearchBox.js.map +1 -1
  590. package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.d.ts +6 -0
  591. package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.js +7 -0
  592. package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.js.map +1 -1
  593. package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.d.ts +5 -0
  594. package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.js +5 -0
  595. package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.js.map +1 -1
  596. package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.d.ts +5 -0
  597. package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.js +5 -0
  598. package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.js.map +1 -1
  599. package/react/components/toolbar/advancedAppLauncher/modules/FDC3.d.ts +37 -0
  600. package/react/components/toolbar/advancedAppLauncher/modules/FDC3.js +40 -0
  601. package/react/components/toolbar/advancedAppLauncher/modules/FDC3.js.map +1 -1
  602. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.d.ts +3 -0
  603. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js +82 -0
  604. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js.map +1 -1
  605. package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.d.ts +10 -0
  606. package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.js +11 -0
  607. package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.js.map +1 -1
  608. package/react/components/toolbar/appLauncher/AppLauncherMenu.d.ts +18 -0
  609. package/react/components/toolbar/appLauncher/AppLauncherMenu.js +20 -0
  610. package/react/components/toolbar/appLauncher/AppLauncherMenu.js.map +1 -1
  611. package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.d.ts +9 -0
  612. package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.js +12 -0
  613. package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.js.map +1 -1
  614. package/react/components/toolbar/appLauncher/appLauncher.css +1 -1
  615. package/react/components/toolbar/appLauncher/components/componentList.d.ts +3 -0
  616. package/react/components/toolbar/appLauncher/components/componentList.js +17 -3
  617. package/react/components/toolbar/appLauncher/components/componentList.js.map +1 -1
  618. package/react/components/toolbar/appLauncher/stores/appLauncherStore.d.ts +6 -0
  619. package/react/components/toolbar/appLauncher/stores/appLauncherStore.js +26 -0
  620. package/react/components/toolbar/appLauncher/stores/appLauncherStore.js.map +1 -1
  621. package/react/components/toolbar/dashbar/Dashbar.js +70 -3
  622. package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
  623. package/react/components/toolbar/dashbar/DashbarItem.js +5 -0
  624. package/react/components/toolbar/dashbar/DashbarItem.js.map +1 -1
  625. package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.d.ts +7 -0
  626. package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.js +7 -0
  627. package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.js.map +1 -1
  628. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.d.ts +16 -0
  629. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js +20 -0
  630. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js.map +1 -1
  631. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.d.ts +26 -0
  632. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.js +29 -0
  633. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.js.map +1 -1
  634. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.d.ts +5 -0
  635. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.js +6 -0
  636. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.js.map +1 -1
  637. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.d.ts +76 -0
  638. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js +140 -1
  639. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js.map +1 -1
  640. package/react/components/toolbar/workspaceManagementMenu/workspaceManagementMenu.css +8 -18
  641. package/react/components/userPreferences/NotificationsPreferencesContext.d.ts +4 -0
  642. package/react/components/userPreferences/NotificationsPreferencesContext.js +4 -0
  643. package/react/components/userPreferences/NotificationsPreferencesContext.js.map +1 -1
  644. package/react/components/userPreferences/UserPreferenceTypes.d.ts +3 -0
  645. package/react/components/userPreferences/UserPreferences.d.ts +8 -0
  646. package/react/components/userPreferences/UserPreferences.js +8 -0
  647. package/react/components/userPreferences/UserPreferences.js.map +1 -1
  648. package/react/components/userPreferences/UserPreferencesBase.js +4 -0
  649. package/react/components/userPreferences/UserPreferencesBase.js.map +1 -1
  650. package/react/components/userPreferences/components/ContentSection.d.ts +5 -0
  651. package/react/components/userPreferences/components/LeftNav.d.ts +4 -0
  652. package/react/components/userPreferences/components/content/DashbarEditor.js +3 -0
  653. package/react/components/userPreferences/components/content/DashbarEditor.js.map +1 -1
  654. package/react/components/userPreferences/components/content/Notifications.js +3 -0
  655. package/react/components/userPreferences/components/content/Notifications.js.map +1 -1
  656. package/react/components/userPreferences/components/content/Workspaces.d.ts +12 -0
  657. package/react/components/userPreferences/components/content/Workspaces.js +36 -3
  658. package/react/components/userPreferences/components/content/Workspaces.js.map +1 -1
  659. package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js +3 -0
  660. package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js.map +1 -1
  661. package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.js +3 -0
  662. package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.js.map +1 -1
  663. package/react/components/userPreferences/components/content/notificationViews/NotificationsSourcesPreferences.js +3 -0
  664. package/react/components/userPreferences/components/content/notificationViews/NotificationsSourcesPreferences.js.map +1 -1
  665. package/react/components/userPreferences/components/general/ScheduledClose.js +11 -0
  666. package/react/components/userPreferences/components/general/ScheduledClose.js.map +1 -1
  667. package/react/components/userPreferences/components/workspaces/WorkspaceItem.d.ts +1 -1
  668. package/react/components/userPreferences/components/workspaces/WorkspaceItem.js +20 -10
  669. package/react/components/userPreferences/components/workspaces/WorkspaceItem.js.map +1 -1
  670. package/react/components/userPreferences/stores/UserPreferencesStore.d.ts +17 -0
  671. package/react/components/userPreferences/stores/UserPreferencesStore.js +27 -0
  672. package/react/components/userPreferences/stores/UserPreferencesStore.js.map +1 -1
  673. package/react/components/userPreferences/tests/NotificationsPreferencesHome.spec.js +1 -0
  674. package/react/components/userPreferences/tests/NotificationsPreferencesHome.spec.js.map +1 -1
  675. package/react/components/userPreferences/tests/Workspace.spec.js +20 -0
  676. package/react/components/userPreferences/tests/Workspace.spec.js.map +1 -1
  677. package/react/components/windowTitleBar/WindowTitleBarShell.d.ts +111 -0
  678. package/react/components/windowTitleBar/WindowTitleBarShell.js +218 -47
  679. package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
  680. package/react/components/windowTitleBar/components/center/Tab.d.ts +3 -0
  681. package/react/components/windowTitleBar/components/center/Tab.js +3 -0
  682. package/react/components/windowTitleBar/components/center/Tab.js.map +1 -1
  683. package/react/components/windowTitleBar/components/center/TabList.d.ts +90 -0
  684. package/react/components/windowTitleBar/components/center/TabList.js +170 -4
  685. package/react/components/windowTitleBar/components/center/TabList.js.map +1 -1
  686. package/react/components/windowTitleBar/components/left/LinkerButton.d.ts +9 -1
  687. package/react/components/windowTitleBar/components/left/LinkerButton.js +25 -9
  688. package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
  689. package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.d.ts +47 -0
  690. package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.js +76 -1
  691. package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.js.map +1 -1
  692. package/react/components/windowTitleBar/components/left/LinkerGroups.d.ts +4 -0
  693. package/react/components/windowTitleBar/components/left/LinkerGroups.js +5 -0
  694. package/react/components/windowTitleBar/components/left/LinkerGroups.js.map +1 -1
  695. package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.d.ts +18 -0
  696. package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.js +49 -0
  697. package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.js.map +1 -1
  698. package/react/components/windowTitleBar/components/left/ShareButton.d.ts +17 -0
  699. package/react/components/windowTitleBar/components/left/ShareButton.js +39 -0
  700. package/react/components/windowTitleBar/components/left/ShareButton.js.map +1 -1
  701. package/react/components/windowTitleBar/components/right/AlwaysOnTopButton.js +4 -0
  702. package/react/components/windowTitleBar/components/right/AlwaysOnTopButton.js.map +1 -1
  703. package/react/components/windowTitleBar/components/right/CloseButton.d.ts +27 -0
  704. package/react/components/windowTitleBar/components/right/CloseButton.js +27 -0
  705. package/react/components/windowTitleBar/components/right/CloseButton.js.map +1 -1
  706. package/react/components/windowTitleBar/components/right/GroupingButton.d.ts +37 -0
  707. package/react/components/windowTitleBar/components/right/GroupingButton.js +40 -0
  708. package/react/components/windowTitleBar/components/right/GroupingButton.js.map +1 -1
  709. package/react/components/windowTitleBar/components/right/MaximizeButton.d.ts +46 -0
  710. package/react/components/windowTitleBar/components/right/MaximizeButton.js +54 -0
  711. package/react/components/windowTitleBar/components/right/MaximizeButton.js.map +1 -1
  712. package/react/components/windowTitleBar/components/right/MinimizeButton.d.ts +26 -0
  713. package/react/components/windowTitleBar/components/right/MinimizeButton.js +26 -0
  714. package/react/components/windowTitleBar/components/right/MinimizeButton.js.map +1 -1
  715. package/react/components/windowTitleBar/components/windowTitle.d.ts +40 -0
  716. package/react/components/windowTitleBar/components/windowTitle.js +172 -10
  717. package/react/components/windowTitleBar/components/windowTitle.js.map +1 -1
  718. package/react/components/windowTitleBar/stores/windowTitleBarStore.d.ts +5 -0
  719. package/react/components/windowTitleBar/stores/windowTitleBarStore.js +72 -1
  720. package/react/components/windowTitleBar/stores/windowTitleBarStore.js.map +1 -1
  721. package/react/components/yesNoDialog/YesNoDialog.css +1 -1
  722. package/react/components/yesNoDialog/YesNoDialog.d.ts +3 -0
  723. package/react/components/yesNoDialog/YesNoDialog.js +63 -0
  724. package/react/components/yesNoDialog/YesNoDialog.js.map +1 -1
  725. package/react/components/yesNoDialog/YesNoDialog.spec.js +4 -0
  726. package/react/components/yesNoDialog/YesNoDialog.spec.js.map +1 -1
  727. package/react/components/yesNoDialog/timer.js +2 -0
  728. package/react/components/yesNoDialog/timer.js.map +1 -1
  729. package/react/enzymeSetup.js +5 -0
  730. package/react/enzymeSetup.js.map +1 -1
  731. package/react/hooks/useDashbar.js +10 -0
  732. package/react/hooks/useDashbar.js.map +1 -1
  733. package/react/hooks/useDeepEffect.d.ts +4 -0
  734. package/react/hooks/useDeepEffect.js +21 -0
  735. package/react/hooks/useDeepEffect.js.map +1 -1
  736. package/react/hooks/useFavorites.d.ts +15 -0
  737. package/react/hooks/useFavorites.js +3 -0
  738. package/react/hooks/useFavorites.js.map +1 -1
  739. package/react/hooks/useFavoritesShell.d.ts +4 -0
  740. package/react/hooks/useFavoritesShell.js +23 -0
  741. package/react/hooks/useFavoritesShell.js.map +1 -1
  742. package/react/hooks/useHotkey.d.ts +6 -0
  743. package/react/hooks/useHotkey.js +9 -0
  744. package/react/hooks/useHotkey.js.map +1 -1
  745. package/react/hooks/useLinker.js +14 -0
  746. package/react/hooks/useLinker.js.map +1 -1
  747. package/react/hooks/useMenu.d.ts +29 -0
  748. package/react/hooks/useMenu.js +12 -1
  749. package/react/hooks/useMenu.js.map +1 -1
  750. package/react/hooks/useNotifications.d.ts +44 -0
  751. package/react/hooks/useNotifications.js +100 -4
  752. package/react/hooks/useNotifications.js.map +1 -1
  753. package/react/hooks/useOutsideClickDetector.d.ts +3 -0
  754. package/react/hooks/useOutsideClickDetector.js +3 -0
  755. package/react/hooks/useOutsideClickDetector.js.map +1 -1
  756. package/react/hooks/usePubSub.d.ts +17 -0
  757. package/react/hooks/usePubSub.js +18 -0
  758. package/react/hooks/usePubSub.js.map +1 -1
  759. package/react/hooks/useSearch.d.ts +5 -0
  760. package/react/hooks/useSearch.js +30 -0
  761. package/react/hooks/useSearch.js.map +1 -1
  762. package/react/hooks/useToolbar.js +52 -0
  763. package/react/hooks/useToolbar.js.map +1 -1
  764. package/react/reducers/favoriteReducer.d.ts +3 -0
  765. package/react/reducers/linkerReducer.d.ts +3 -0
  766. package/react/reducers/linkerReducer.js +4 -0
  767. package/react/reducers/linkerReducer.js.map +1 -1
  768. package/react/reducers/menuReducer.d.ts +28 -0
  769. package/react/reducers/menuReducer.js +34 -0
  770. package/react/reducers/menuReducer.js.map +1 -1
  771. package/react/reducers/rootReducer.js +3 -0
  772. package/react/reducers/rootReducer.js.map +1 -1
  773. package/react/reducers/searchReducer.d.ts +7 -0
  774. package/react/reducers/searchReducer.js +6 -0
  775. package/react/reducers/searchReducer.js.map +1 -1
  776. package/react/reducers/workspaceReducer.js +1 -0
  777. package/react/reducers/workspaceReducer.js.map +1 -1
  778. package/react/store.d.ts +4 -0
  779. package/react/store.js +11 -0
  780. package/react/store.js.map +1 -1
  781. package/react/tsconfig.tsbuildinfo +1 -1
  782. package/react/types/fdc3.d.ts +2 -0
  783. package/react/types/linkerTypes.d.ts +13 -0
  784. package/react/types/linkerTypes.js +1 -0
  785. package/react/types/linkerTypes.js.map +1 -1
  786. package/react/types/smartDesktopDesignerTypes.d.ts +5 -0
  787. package/react/types/smartDesktopDesignerTypes.js.map +1 -1
  788. package/react/types/workspaceTypes.d.ts +8 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TabList.js","sourceRoot":"","sources":["../../../../../src/components/windowTitleBar/components/center/TabList.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport Tab from \"./Tab\";\nimport { FinsembleHoverDetector } from \"../../../legacyControls/FinsembleHoverDetector\";\nimport { Store, Actions } from \"../../stores/windowTitleBarStore\";\nimport { Title } from \"../windowTitle\";\nimport _throttle from \"lodash/throttle\";\nimport { TabListProps, TabListState, GetTabWidthParams, TabProperties } from \"../../../../types/windowTitleBar\";\nimport { WindowIdentifier } from \"@finsemble/finsemble-api\";\n\nlet TAB_WIDTH = 300;\n// Next two items are for calculating how large the title should be within a tab.\nconst ICON_AREA = 16;\nconst CLOSE_BUTTON_MARGIN = 12;\nconst MINIMUM_TAB_SIZE = 100;\n\nconst stopTilingOrTabbing = (\n\tparams: {\n\t\tmousePosition?: {\n\t\t\tx: number;\n\t\t\ty: number;\n\t\t};\n\t\taction?: string;\n\t\tallowDropOnSelf?: boolean;\n\t},\n\tcb?: () => void\n) => {\n\tconst transmitAndQueryStop = () => {\n\t\t// docking service has a responder for the query\n\t\tFSBL.Clients.RouterClient.query(\"DockingService.stopTilingOrTabbing\", params, () => {\n\t\t\tcb?.();\n\t\t});\n\t\t// WindowTitleBarShell is listening for transmit events so that it knows when tiling/tabbing has stopped\n\t\tFSBL.Clients.RouterClient.transmit(\"DockingService.stopTilingOrTabbing\", params);\n\t};\n\t// Get the mouse position if not passed in.\n\tif (!params.mousePosition) {\n\t\tfin.desktop.System.getMousePosition((position) => {\n\t\t\tparams.mousePosition = position;\n\t\t\ttransmitAndQueryStop();\n\t\t\t// If allowDropOnSelf is true, it came from a tab/window drop event. Run the callback.\n\t\t\tif (!params.allowDropOnSelf) cb?.();\n\t\t});\n\t} else {\n\t\ttransmitAndQueryStop();\n\t\t// If allowDropOnSelf is true, it came from a tab/window drop event. Run the callback.\n\t\tif (!params.allowDropOnSelf) cb?.();\n\t}\n};\n\nconst isPointInBox = (\n\tpoint: {\n\t\tx: number;\n\t\ty: number;\n\t},\n\tbox: {\n\t\ttop: number;\n\t\tleft: number;\n\t\tbottom?: number;\n\t\tright?: number;\n\t\twidth: number;\n\t\theight: number;\n\t}\n): boolean => {\n\tif (!box.bottom) box.bottom = box.top + box.height;\n\tif (!box.right) box.right = box.left + box.width;\n\treturn point.x > box.left && point.x < box.right && point.y < box.bottom && point.y > box.top;\n};\n\nexport class TabList extends React.Component<TabListProps, TabListState> {\n\tmousePositionOnDragEnd: { x: number; y: number };\n\n\tonWindowResizeThrottled: (this: Window, ev: UIEvent) => any;\n\n\tconstructor(props: TabListProps) {\n\t\tsuper(props);\n\t\tlet initialState = Store.getValues([\"activeTab\", \"tabs\"]);\n\t\tlet activeIdentifier = finsembleWindow.identifier as typeof finsembleWindow.identifier & { title: string };\n\n\t\tif (activeIdentifier) {\n\t\t\tactiveIdentifier.title = finsembleWindow.windowOptions.title;\n\t\t}\n\t\tthis.state = {\n\t\t\ttranslateX: 0,\n\t\t\ttabs: initialState.tabs,\n\t\t\tactiveTab: activeIdentifier as TabProperties,\n\t\t\tboundingBox: {\n\t\t\t\tright: 0,\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\tbottom: 0,\n\t\t\t\theight: 0,\n\t\t\t\twidth: 0,\n\t\t\t},\n\t\t\tiAmDragging: false,\n\t\t\thoverState: \"false\",\n\t\t\ttabWidth: TAB_WIDTH,\n\t\t\thoveredTabIndex: undefined,\n\t\t};\n\t\tthis.onWindowResizeThrottled = () => {};\n\t\tthis.bindCorrectContext();\n\t\tthis.mousePositionOnDragEnd = {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t};\n\t}\n\n\t/**\n\t * Make sure that _this_ is correct inside of our event handlers.\n\t */\n\tbindCorrectContext() {\n\t\tthis.startDrag = this.startDrag.bind(this);\n\t\tthis.stopDrag = this.stopDrag.bind(this);\n\t\tthis.cancelTabbing = this.cancelTabbing.bind(this);\n\t\tthis.drop = this.drop.bind(this);\n\t\tthis.dragOver = this.dragOver.bind(this);\n\t\tthis.dragLeave = this.dragLeave.bind(this);\n\t\tthis.onMouseWheel = this.onMouseWheel.bind(this);\n\t\tthis.renderTitle = this.renderTitle.bind(this);\n\t\tthis.renderTabs = this.renderTabs.bind(this);\n\t\tthis.findTabIndex = this.findTabIndex.bind(this);\n\t\tthis.setActiveTab = this.setActiveTab.bind(this);\n\t\tthis.onTabAdded = this.onTabAdded.bind(this);\n\t\tthis.onTabClosed = this.onTabClosed.bind(this);\n\t\tthis.setActiveTab = this.setActiveTab.bind(this);\n\t\tthis.onTabsChanged = this.onTabsChanged.bind(this);\n\t\tthis.onTabDraggedOver = this.onTabDraggedOver.bind(this);\n\t\tthis.isTabRegionOverflowing = this.isTabRegionOverflowing.bind(this);\n\t\tthis.onWindowResize = this.onWindowResize.bind(this);\n\t\tthis.onWindowResizeThrottled = _throttle(this.onWindowResize, 100);\n\t\tthis.getTabWidth = this.getTabWidth.bind(this);\n\t\tthis.setTabListTranslateX = this.setTabListTranslateX.bind(this);\n\t\tthis.onTabListTranslateChanged = this.onTabListTranslateChanged.bind(this);\n\t}\n\n\tgetTabWidth(params: GetTabWidthParams = {}) {\n\t\tlet { boundingBox, tabList } = params;\n\t\tif (typeof tabList === \"undefined\") {\n\t\t\ttabList = this.state.tabs;\n\t\t}\n\t\tif (typeof boundingBox === \"undefined\") {\n\t\t\tboundingBox = (this.refs.Me as HTMLElement).getBoundingClientRect();\n\t\t}\n\t\tif (typeof boundingBox.right === \"undefined\") {\n\t\t\treturn TAB_WIDTH;\n\t\t}\n\t\tlet containerWidth = boundingBox.right - boundingBox.left;\n\t\tlet newTabWidth = containerWidth / tabList.length;\n\n\t\treturn newTabWidth < MINIMUM_TAB_SIZE ? MINIMUM_TAB_SIZE : newTabWidth;\n\t}\n\n\t/**\n\t * Resize handler. Calculates the space that the center-region is taking up. May be used to scale tabs proportionally.\n\t */\n\tonWindowResize() {\n\t\tlet bounds = (this.refs.Me as HTMLElement).getBoundingClientRect();\n\t\tthis.setState({\n\t\t\tboundingBox: bounds,\n\t\t\ttabWidth: this.getTabWidth(),\n\t\t});\n\t}\n\n\tfindTabIndex(tab: TabProperties) {\n\t\treturn this.state.tabs.findIndex((el) => tab.windowName === el.windowName);\n\t}\n\n\t/**\n\t *\n\t * Function that's called when this component fires the onDragStart event, this will start the tiling or tabbing process\n\t *\n\t * @param e The SyntheticEvent created by React when the startdrag event is called\n\t * @memberof windowTitleBar\n\t */\n\tstartDrag(e: React.DragEvent<HTMLDivElement>, windowIdentifier: WindowIdentifier) {\n\t\tthis.setState({\n\t\t\tiAmDragging: true,\n\t\t});\n\t\te.dataTransfer.setData(\"application/fsbl-tab-data\", JSON.stringify(windowIdentifier));\n\t\tFSBL.Clients.RouterClient.transmit(\"DockingService.startTilingOrTabbing\", {\n\t\t\twindowIdentifier,\n\t\t});\n\t}\n\n\t/**\n\t * Called when the react component detects a drop (or stop drag, which is equivalent)\n\t *\n\t * @param e The SyntheticEvent created by React when the stopdrag event is called\n\t * @memberof windowTitleBar\n\t */\n\tstopDrag(e: React.DragEvent<HTMLDivElement>) {\n\t\t// We don't want onDropHandler() in windowTitleBarComponent.jsx\n\t\t// to handle this drop event, so we call event.stopPropagation().\n\t\te.stopPropagation();\n\t\tFSBL.Clients.Logger.system.debug(\"Tab stopDrag.\");\n\t\tthis.mousePositionOnDragEnd = {\n\t\t\tx: e.nativeEvent.screenX,\n\t\t\ty: e.nativeEvent.screenY,\n\t\t};\n\n\t\tconst { boundingBox } = this.state;\n\t\tfinsembleWindow.getBounds((err, bounds) => {\n\t\t\t// We ONLY want to know if we're in the tab region!\n\t\t\tconst tabRegion = {\n\t\t\t\ttop: boundingBox.top + (bounds?.top ?? 0),\n\t\t\t\tbottom: boundingBox.bottom + (bounds?.top ?? 0),\n\t\t\t\tleft: boundingBox.left + (bounds?.left ?? 0),\n\t\t\t\tright: boundingBox.right + (bounds?.left ?? 0),\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t};\n\t\t\tif (!isPointInBox(this.mousePositionOnDragEnd, tabRegion)) {\n\t\t\t\t// allow for a 50ms delay so this message goes after a drop message from a target window if tabbing\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tstopTilingOrTabbing({\n\t\t\t\t\t\tmousePosition: this.mousePositionOnDragEnd,\n\t\t\t\t\t});\n\t\t\t\t}, 50);\n\t\t\t\tthis.setState({\n\t\t\t\t\tiAmDragging: false,\n\t\t\t\t});\n\t\t\t\tthis.onWindowResize();\n\t\t\t} else {\n\t\t\t\t// sometimes a tab gets dropped in a bad spot where no action gets taken and we get stuck in tiling mode\n\t\t\t\t// to make sure nothing bad happens, call cancel after a similar 50ms delay\n\t\t\t\t// If some action was taken, this will be ignored by Finsemble\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tFSBL.Clients.RouterClient.transmit(\"DockingService.cancelTilingOrTabbing\", {\n\t\t\t\t\t\twindowIdentifier: this.state.activeTab,\n\t\t\t\t\t});\n\t\t\t\t}, 50);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Helper function that will pull data from a drop event, parse it, and return it.\n\t * @param {event} e\n\t */\n\textractWindowIdentifier(e: React.DragEvent<HTMLElement>) {\n\t\ttry {\n\t\t\tlet identifier = JSON.parse(e.dataTransfer.getData(\"application/fsbl-tab-data\"));\n\t\t\t// If the \"identifier\" is formed properly, it'll have this properly. Otherwise, it's something else (e.g., share data, image, etc).\n\t\t\tif (typeof identifier.windowName !== \"undefined\") {\n\t\t\t\treturn identifier;\n\t\t\t} else if (identifier.waitForIdentifier) {\n\t\t\t\treturn identifier;\n\t\t\t} else {\n\t\t\t\tFSBL.Clients.Logger.system.error(\n\t\t\t\t\t\"Malformed drop object detected in windowTitleBar. Check tab dropping code. Expected windowIdentifier, got \",\n\t\t\t\t\tidentifier\n\t\t\t\t);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t} catch (e2) {\n\t\t\tFSBL.Clients.Logger.system.error(\n\t\t\t\t\"Error in 'extractWindowIdentifier'. Check TabRegion.jsx. Either there was no data in the event, or it was a circular object that caused JSON.parse to fail. Javascript Error:\",\n\t\t\t\te2\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Called when a drop event occurs on the tab region. We (hope) that this came from a tab. Could be a share icon, an image, something else - that's why we check to see if the identifier exists before doing anything.\n\t * @param {event} e\n\t */\n\tdrop(e?: React.DragEvent<HTMLElement>) {\n\t\tlet identifier: any;\n\t\tif (e) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tidentifier = this.extractWindowIdentifier(e);\n\t\t}\n\t\tFSBL.Clients.Logger.system.debug(\"Tab drag drop.\");\n\t\tif (!identifier) return; // the dropped item is not a tab\n\t\tif (this.state.tabs.length === 1 && identifier.windowName === finsembleWindow.name) {\n\t\t\t// The source and destination tabs are the same\n\t\t\t//\n\t\t\t// Cancel the tabbing event\n\t\t\tFSBL.Clients.RouterClient.transmit(\"DockingService.cancelTilingOrTabbing\", {\n\t\t\t\twindowIdentifier: this.state.activeTab,\n\t\t\t});\n\t\t\t// But also set \"iAmDragging\" to false in order to allow other tabs to be dragged in here\n\t\t\tthis.setState({\n\t\t\t\tiAmDragging: false,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tstopTilingOrTabbing({ allowDropOnSelf: true, action: \"tabbing\" }, () => {\n\t\t\tFSBL.Clients.RouterClient.transmit(\"tabbingDragEnd\", { success: true });\n\t\t\tif (identifier && identifier.windowName) {\n\t\t\t\t// Calls a method defined inside of windowTitleBar.jsx.\n\t\t\t\tthis.onTabAdded(identifier, this.state.hoveredTabIndex);\n\t\t\t} else if (identifier && identifier.waitForIdentifier) {\n\t\t\t\tlet subscribeId: { subscribeID: string; topic: string };\n\t\t\t\tlet tabIdentifierSubscriber = (err: StandardError, response: { data: TabProperties }) => {\n\t\t\t\t\tif (!response.data.windowName) return;\n\t\t\t\t\tFSBL.Clients.RouterClient.unsubscribe(subscribeId);\n\t\t\t\t\tthis.onTabAdded(response.data, this.state.hoveredTabIndex);\n\t\t\t\t};\n\t\t\t\tsubscribeId = FSBL.Clients.RouterClient.subscribe(`Finsemble.${identifier.guid}`, tabIdentifierSubscriber);\n\t\t\t} else {\n\t\t\t\tFSBL.Clients.Logger.system.error(\n\t\t\t\t\t\"Unexpected drop event on window title bar. Check the 'drop' method on TabRegion.jsx.\"\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tisTabRegionOverflowing() {\n\t\tlet lastTab = {\n\t\t\tright: this.state.tabs.length * this.state.tabWidth,\n\t\t};\n\t\treturn lastTab.right + this.state.translateX > this.state.boundingBox.right - this.state.boundingBox.left;\n\t}\n\n\t/**\n\t * Event handler for when a user wheels inside of the tab region. We translate the deltaY that the event provides into horizontal movement. The translateX value that we return will be used in the render method below.\n\t * @param {event} e\n\t * This should probably be refactored into separate handlers for scroll and mousewheel to account for the differences in event properties.\n\t */\n\tonMouseWheel(e: React.WheelEvent) {\n\t\te.preventDefault();\n\t\tlet numTabs = this.state.tabs.length;\n\t\tlet translateX = 0;\n\t\t// If there's more than one tab, do some calculations, otherwise we aren't going to scroll this region, no matter how much the user wants us to.\n\t\tif (numTabs > 1) {\n\t\t\tlet currentX = (this.refs.Me as HTMLElement).scrollLeft;\n\t\t\tlet { boundingBox } = this.state;\n\t\t\t// Figure out position of first tab and last tab.\n\t\t\tlet firstTab = {\n\t\t\t\tleft: 0 + boundingBox.left,\n\t\t\t};\n\t\t\tlet lastTab = {\n\t\t\t\tright: numTabs * this.state.tabWidth,\n\t\t\t};\n\t\t\tlet deltaX = this.state.tabWidth / 3;\n\t\t\tif (e.nativeEvent.deltaY < 0) {\n\t\t\t\tdeltaX = 0 - deltaX;\n\t\t\t}\n\t\t\t// Mouses with high sensitivity will cause massive scroll amounts. We don't want to scroll more than one tab's width in a single mouse wheel, otherwise you risk missing a tab.\n\t\t\tif (Math.abs(deltaX) > this.state.tabWidth) {\n\t\t\t\tlet isNegative = false;\n\t\t\t\tif (deltaX < 0) {\n\t\t\t\t\tisNegative = true;\n\t\t\t\t}\n\t\t\t\tdeltaX = isNegative ? 0 - this.state.tabWidth : this.state.tabWidth;\n\t\t\t}\n\n\t\t\t// when we set scrollLeft on the element, this event fires. But there's no actual event. so stop.\n\t\t\tif (!e.nativeEvent.deltaY) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet originalDeltaY = e.nativeEvent.deltaY;\n\t\t\tlet deltaY = originalDeltaY;\n\t\t\tif (Math.abs(originalDeltaY) > this.state.tabWidth / 3) {\n\t\t\t\tdeltaY = this.state.tabWidth / 3;\n\t\t\t\tif (originalDeltaY < 0) {\n\t\t\t\t\tdeltaY = 0 - deltaY;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttranslateX = deltaY + currentX;\n\t\t\tlet newRightForLastTab = lastTab.right + translateX;\n\t\t\tlet newLeftForFirstTab = firstTab.left + translateX;\n\t\t\t// Do not let the left of the first tab move to the right of the left edge of the bounding box.\n\t\t\tif (newLeftForFirstTab < 0) {\n\t\t\t\treturn this.scrollToFirstTab();\n\t\t\t} else if (e.nativeEvent.deltaY < 0 && newRightForLastTab <= boundingBox.right) {\n\t\t\t\t// ONLY IF the user is scrolling from right-to-left (deltaY will be negative). IF they try to do that, do not allow the right edge of the last tab to detach.\n\t\t\t\treturn this.scrollToLastTab();\n\t\t\t}\n\t\t\t// Else, the translation is okay. We're in the middle of our list and the first and last tabs aren't being rendered improperly.\n\t\t\ttranslateX < 0 ? (translateX = 0) : translateX;\n\t\t\tthis.setState({ translateX });\n\t\t}\n\t}\n\n\t/**\n\t * Scrolls to our active tab.\n\t */\n\tscrollToActiveTab() {\n\t\tthis.scrollToTab(this.state.activeTab);\n\t}\n\n\t/**\n\t * Scrolls to the first tab in our list of tabs.\n\t */\n\tscrollToFirstTab() {\n\t\tlet firstTab = this.state.tabs[0];\n\t\tthis.scrollToTab(firstTab);\n\t}\n\n\t/**\n\t * Scrolls to the last tab in our list of tabs\n\t */\n\tscrollToLastTab() {\n\t\tlet lastTab = this.state.tabs[this.state.tabs.length - 1];\n\t\tthis.scrollToTab(lastTab);\n\t}\n\n\t/**\n\t * Function that will horizontally scroll the tab region so that the right edge of the tab lines up with the right edge of the tab region.\n\t * @param {} tab\n\t */\n\tscrollToTab(tab: TabProperties) {\n\t\t// 'BoundingBox' is just the boundingClientRect of the tab region. It is, in essence, the center part of the windowTitleBar.\n\t\tlet { boundingBox } = this.state;\n\n\t\tlet tabIndex = this.state.tabs.findIndex((el) => el.windowName === tab.windowName);\n\t\tif (tabIndex > -1) {\n\t\t\tlet leftEdgeOfTab = tabIndex * this.state.tabWidth;\n\t\t\tlet rightEdgeOfTab = leftEdgeOfTab + this.state.tabWidth;\n\t\t\tlet translateX = rightEdgeOfTab;\n\t\t\t// Our translation is this: Take the right edge of the bounding box, and subtract the left edge. This gives us the 0 point for the box. Then, we subtract the right edge of the tab. The result is a number that we use to shift the entire element and align the right edge of the tab with the right edge of the bounding box. We also account for the 30 px region on the right.\n\n\t\t\t// If there's no overflow, we don't scroll.\n\t\t\tif (rightEdgeOfTab < boundingBox.right) {\n\t\t\t\ttranslateX = 0;\n\t\t\t} else {\n\t\t\t\t// Our translation is this: Take the right edge of the bounding box, and subtract the left edge. This gives us the 0 point for the box. Then, we subtract the right edge of the tab. The result is a number that we use to shift the entire element and align the right edge of the tab with the right edge of the bounding box.\n\t\t\t\ttranslateX = boundingBox.right - boundingBox.left - rightEdgeOfTab;\n\t\t\t\t// If there's no overflow, we don't scroll.\n\t\t\t\tif (rightEdgeOfTab < boundingBox.right) {\n\t\t\t\t\ttranslateX = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.setTabListTranslateX(translateX);\n\t\t}\n\t}\n\n\tsetTabListTranslateX(translateX: number) {\n\t\tActions.setTabListScrollPosition(translateX);\n\t}\n\n\t/**\n\t * Someone is dragging _something_ over the tab region. We respond by rendering the ghost tab.\n\t * @param {event} e\n\t */\n\tdragOver(e: React.DragEvent) {\n\t\te.preventDefault();\n\t}\n\n\t/**\n\t * Triggered when the user moves their mouse out of the tabRegion after a dragOver event happens. When they leave, we hide our placeholder tab.\n\t * @param {event} e\n\t */\n\tdragLeave(e: React.DragEvent<HTMLDivElement>) {\n\t\tlet boundingRect = this.state.boundingBox;\n\t\tif (!isPointInBox({ x: e.screenX, y: e.screenY }, boundingRect)) {\n\t\t\tthis.setState({\n\t\t\t\thoveredTabIndex: undefined,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Set to a timeout. An event is sent to the RouterClient which will be handled by the drop handler on the window.\n\t * In the event that a drop handler never fires to stop tiling or tabbing, this will take care of it.\n\t *\n\t * @memberof windowTitleBar\n\t */\n\tcancelTabbing() {\n\t\tstopTilingOrTabbing({ allowDropOnSelf: true });\n\t\tthis.onWindowResize();\n\t}\n\n\t/**\n\t * Basically exists just to keep the render method clean. Gives conditional classes to the active tab.\n\t * @param {tab} tab\n\t */\n\tgetTabClasses(tab: TabProperties) {\n\t\tlet classes = \"fsbl-tab\";\n\t\tlet tabIndex = this.findTabIndex(tab);\n\t\tif (tabIndex === this.state.hoveredTabIndex) classes = `${classes} ghost-tab`;\n\t\tif (this.state.activeTab && tab.windowName === this.state.activeTab.windowName) {\n\t\t\tclasses = `${classes} fsbl-active-tab`;\n\t\t}\n\t\treturn classes;\n\t}\n\n\tonTabDraggedOver(e: React.DragEvent<HTMLElement>, tabDraggedOver: TabProperties) {\n\t\te.preventDefault();\n\t\t// Find index of tab.\n\t\tlet tabIndex = this.findTabIndex(tabDraggedOver);\n\t\tthis.setState({\n\t\t\thoveredTabIndex: tabIndex,\n\t\t});\n\t}\n\n\t/**\n\t * OnClick handler for the close button on individual tabs.\n\t * @PLACEHOLDER will interact with tabbing API\n\t * @param {*} tab\n\t */\n\tonTabClosed(identifier: TabProperties) {\n\t\tActions.closeTab(identifier);\n\t}\n\n\t/**\n\t * drop handler for the tab region.\n\t * @param {*} tab\n\t */\n\tonTabAdded(identifier: TabProperties, newIndex: number | undefined) {\n\t\tif (newIndex === -1) {\n\t\t\tnewIndex = undefined;\n\t\t}\n\n\t\tlet myIdentifier = finsembleWindow.identifier as typeof finsembleWindow.identifier & { title: string };\n\t\tif (myIdentifier) {\n\t\t\tmyIdentifier.title = finsembleWindow.windowOptions.title;\n\t\t}\n\t\tif (this.state.tabs.length === 1 && identifier.windowName == myIdentifier.windowName) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof newIndex === \"number\") {\n\t\t\tActions.reorderTab(identifier, newIndex);\n\t\t}\n\t\tthis.setState({\n\t\t\thoveredTabIndex: undefined,\n\t\t});\n\t}\n\n\t/**\n\t * OnClick handler for individual tabs.\n\t * @PLACEHOLDER will interact with tabbing API\n\t * @param {*} tab\n\t */\n\tsetActiveTab(tab: TabProperties) {\n\t\tActions.setActiveTab(tab);\n\t}\n\n\tonTabsChanged(err: StandardError, response: { value: TabProperties[] }) {\n\t\tlet { value } = response;\n\t\tthis.setState({\n\t\t\ttabs: value,\n\t\t\ttabWidth: this.getTabWidth({ tabList: value }),\n\t\t});\n\t}\n\n\tonTabListTranslateChanged(err: StandardError, response: { value: number }) {\n\t\tlet { value } = response;\n\t\tthis.setState({\n\t\t\ttranslateX: value,\n\t\t});\n\t}\n\n\tUNSAFE_componentWillMount() {\n\t\t// Store.addListener({ field: \"activeTab\" }, this.onActiveTabChanged);\n\t\tStore.addListener({ field: \"tabs\" }, this.onTabsChanged);\n\t\tStore.addListener({ field: \"tabListTranslateX\" }, this.onTabListTranslateChanged);\n\t}\n\n\tcomponentDidMount() {\n\t\twindow.addEventListener(\"resize\", this.onWindowResizeThrottled);\n\t\tlet boundingBox = (this.refs.Me as HTMLElement).getBoundingClientRect();\n\t\tthis.setState({\n\t\t\tboundingBox: boundingBox,\n\t\t\ttabWidth: this.getTabWidth({ boundingBox }),\n\t\t});\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// Store.removeListener({ field: \"activeTab\" }, this.onActiveTabChanged);\n\t\tStore.removeListener({ field: \"tabs\" }, this.onTabsChanged);\n\t\tStore.removeListener({ field: \"tabListTranslateX\" }, this.onTabListTranslateChanged);\n\t\twindow.removeEventListener(\"resize\", this.onWindowResizeThrottled);\n\t}\n\n\thoverAction(newHoverState: string) {\n\t\tthis.setState({ hoverState: newHoverState });\n\t}\n\n\trender() {\n\t\tlet { translateX } = this.state;\n\t\ttranslateX = Math.abs(translateX);\n\t\t// If we have just 1 tab, we render the title. Unless someone is dragging a tab around - in that case, we will render the tab view, even though we only have 1.\n\n\t\tlet componentToRender = \"title\";\n\t\tif (this.state.tabs.length === 1 && this.props.listenForDragOver && !this.state.iAmDragging) {\n\t\t\tcomponentToRender = \"tabs\";\n\t\t}\n\t\tif (this.state.tabs.length > 1) {\n\t\t\tcomponentToRender = \"tabs\";\n\t\t}\n\t\t// Cleanup in case we were translated before closing the second to last tab. This left-aligns the title.\n\t\tif (componentToRender === \"title\") {\n\t\t\ttranslateX = 0;\n\t\t}\n\n\t\tif (this.refs.Me) {\n\t\t\t(this.refs.Me as HTMLElement).scrollLeft = translateX;\n\t\t}\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref=\"Me\"\n\t\t\t\tonDragLeave={this.dragLeave}\n\t\t\t\tclassName={this.props.className}\n\t\t\t\tonWheel={this.onMouseWheel}\n\t\t\t\tonScroll={(e) => {\n\t\t\t\t\tthis.onMouseWheel(e as unknown as React.WheelEvent);\n\t\t\t\t}}\n\t\t\t\tonDrop={this.drop}\n\t\t\t\tonDragOver={this.dragOver}\n\t\t\t>\n\t\t\t\t<div className=\"tab-region-wrapper\">\n\t\t\t\t\t{componentToRender === \"title\" && this.renderTitle()}\n\t\t\t\t\t{componentToRender === \"tabs\" && this.renderTabs()}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/**\n\t * Function to render the title. Helps keep the render code clean.\n\t */\n\trenderTitle() {\n\t\tconst windowIdentifier: WindowIdentifier = {\n\t\t\twindowName: finsembleWindow.name,\n\t\t\tuuid: finsembleWindow.uuid,\n\t\t};\n\t\treturn (\n\t\t\t<div\n\t\t\t\tdraggable=\"true\"\n\t\t\t\tonDragStart={(e) => {\n\t\t\t\t\tFSBL.Clients.Logger.system.debug(\"Tab drag start - TITLE\");\n\t\t\t\t\tlet activeIdentifier = finsembleWindow.identifier as typeof finsembleWindow.identifier & { title: string };\n\t\t\t\t\tactiveIdentifier.title = finsembleWindow.windowOptions.title;\n\t\t\t\t\tthis.startDrag(e, activeIdentifier);\n\t\t\t\t}}\n\t\t\t\tonDragEnd={this.stopDrag}\n\t\t\t\tdata-hover={this.state.hoverState}\n\t\t\t\tclassName={\"fsbl-header-title\"}\n\t\t\t>\n\t\t\t\t<FinsembleHoverDetector edge=\"top\" hoverAction={this.hoverAction.bind(this)} />\n\t\t\t\t<Title onUpdate={this.props.onTitleUpdated} windowIdentifier={windowIdentifier}></Title>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/**\n\t * Renders the array of tabs.\n\t * @param {*} props\n\t */\n\trenderTabs() {\n\t\tlet titleWidth = this.state.tabWidth - ICON_AREA - CLOSE_BUTTON_MARGIN;\n\n\t\treturn this.state.tabs.map((tab) => (\n\t\t\t<Tab\n\t\t\t\tdraggable=\"true\"\n\t\t\t\tkey={tab.windowName} // this is a unique identifier for React so it knows when to update the DOM\n\t\t\t\tclassName={this.getTabClasses(tab)}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tthis.setActiveTab(tab);\n\t\t\t\t}}\n\t\t\t\tonDragStart={(e, identifier) => {\n\t\t\t\t\tFSBL.Clients.Logger.system.debug(\"Tab drag - TAB\", identifier.windowName);\n\t\t\t\t\tthis.startDrag(e, identifier);\n\t\t\t\t}}\n\t\t\t\tonDrop={this.drop}\n\t\t\t\tonDragEnd={this.stopDrag}\n\t\t\t\tonTabClose={() => {\n\t\t\t\t\tthis.onTabClosed(tab);\n\t\t\t\t}}\n\t\t\t\tonTabDraggedOver={this.onTabDraggedOver}\n\t\t\t\tlistenForDragOver={this.props.listenForDragOver}\n\t\t\t\ttabWidth={this.state.tabWidth}\n\t\t\t\ttitleWidth={titleWidth}\n\t\t\t\twindowIdentifier={tab}\n\t\t\t/>\n\t\t));\n\t}\n}\n"]}
1
+ {"version":3,"file":"TabList.js","sourceRoot":"","sources":["../../../../../src/components/windowTitleBar/components/center/TabList.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport Tab from \"./Tab\";\nimport { FinsembleHoverDetector } from \"../../../legacyControls/FinsembleHoverDetector\";\nimport { Store, Actions } from \"../../stores/windowTitleBarStore\";\nimport { Title } from \"../windowTitle\";\nimport _throttle from \"lodash/throttle\";\nimport { TabListProps, TabListState, GetTabWidthParams, TabProperties } from \"../../../../types/windowTitleBar\";\nimport { WindowIdentifier } from \"@finsemble/finsemble-api\";\n\nlet TAB_WIDTH = 300;\n// Next two items are for calculating how large the title should be within a tab.\nconst ICON_AREA = 16;\nconst CLOSE_BUTTON_MARGIN = 12;\nconst MINIMUM_TAB_SIZE = 100;\n\nconst stopTilingOrTabbing = (\n\tparams: {\n\t\tmousePosition?: {\n\t\t\tx: number;\n\t\t\ty: number;\n\t\t};\n\t\taction?: string;\n\t\tallowDropOnSelf?: boolean;\n\t},\n\tcb?: () => void\n) => {\n\tconst transmitAndQueryStop = () => {\n\t\t// docking service has a responder for the query\n\t\tFSBL.Clients.RouterClient.query(\"DockingService.stopTilingOrTabbing\", params, () => {\n\t\t\tcb?.();\n\t\t});\n\t\t// WindowTitleBarShell is listening for transmit events so that it knows when tiling/tabbing has stopped\n\t\tFSBL.Clients.RouterClient.transmit(\"DockingService.stopTilingOrTabbing\", params);\n\t};\n\t// Get the mouse position if not passed in.\n\tif (!params.mousePosition) {\n\t\tfin.desktop.System.getMousePosition((position) => {\n\t\t\tparams.mousePosition = position;\n\t\t\ttransmitAndQueryStop();\n\t\t\t// If allowDropOnSelf is true, it came from a tab/window drop event. Run the callback.\n\t\t\tif (!params.allowDropOnSelf) cb?.();\n\t\t});\n\t} else {\n\t\ttransmitAndQueryStop();\n\t\t// If allowDropOnSelf is true, it came from a tab/window drop event. Run the callback.\n\t\tif (!params.allowDropOnSelf) cb?.();\n\t}\n};\n\nconst isPointInBox = (\n\tpoint: {\n\t\tx: number;\n\t\ty: number;\n\t},\n\tbox: {\n\t\ttop: number;\n\t\tleft: number;\n\t\tbottom?: number;\n\t\tright?: number;\n\t\twidth: number;\n\t\theight: number;\n\t}\n): boolean => {\n\tif (!box.bottom) box.bottom = box.top + box.height;\n\tif (!box.right) box.right = box.left + box.width;\n\treturn point.x > box.left && point.x < box.right && point.y < box.bottom && point.y > box.top;\n};\n\nexport class TabList extends React.Component<TabListProps, TabListState> {\n\tmousePositionOnDragEnd: { x: number; y: number };\n\n\tonWindowResizeThrottled: (this: Window, ev: UIEvent) => any;\n\n\tconstructor(props: TabListProps) {\n\t\tsuper(props);\n\t\tlet initialState = Store.getValues([\"activeTab\", \"tabs\"]);\n\t\tlet activeIdentifier = finsembleWindow.identifier as typeof finsembleWindow.identifier & { title: string };\n\n\t\tif (activeIdentifier) {\n\t\t\tactiveIdentifier.title = finsembleWindow.windowOptions.title;\n\t\t}\n\t\tthis.state = {\n\t\t\ttranslateX: 0,\n\t\t\ttabs: initialState.tabs,\n\t\t\tactiveTab: activeIdentifier as TabProperties,\n\t\t\tboundingBox: {\n\t\t\t\tright: 0,\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\tbottom: 0,\n\t\t\t\theight: 0,\n\t\t\t\twidth: 0,\n\t\t\t},\n\t\t\tiAmDragging: false,\n\t\t\thoverState: \"false\",\n\t\t\ttabWidth: TAB_WIDTH,\n\t\t\thoveredTabIndex: undefined,\n\t\t};\n\t\tthis.onWindowResizeThrottled = () => {};\n\t\tthis.bindCorrectContext();\n\t\tthis.mousePositionOnDragEnd = {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t};\n\t}\n\n\t/**\n\t * Make sure that _this_ is correct inside of our event handlers.\n\t */\n\tbindCorrectContext() {\n\t\tthis.startDrag = this.startDrag.bind(this);\n\t\tthis.stopDrag = this.stopDrag.bind(this);\n\t\tthis.cancelTabbing = this.cancelTabbing.bind(this);\n\t\tthis.drop = this.drop.bind(this);\n\t\tthis.dragOver = this.dragOver.bind(this);\n\t\tthis.dragLeave = this.dragLeave.bind(this);\n\t\tthis.onMouseWheel = this.onMouseWheel.bind(this);\n\t\tthis.renderTitle = this.renderTitle.bind(this);\n\t\tthis.renderTabs = this.renderTabs.bind(this);\n\t\tthis.findTabIndex = this.findTabIndex.bind(this);\n\t\tthis.setActiveTab = this.setActiveTab.bind(this);\n\t\tthis.onTabAdded = this.onTabAdded.bind(this);\n\t\tthis.onTabClosed = this.onTabClosed.bind(this);\n\t\tthis.setActiveTab = this.setActiveTab.bind(this);\n\t\tthis.onTabsChanged = this.onTabsChanged.bind(this);\n\t\tthis.onTabDraggedOver = this.onTabDraggedOver.bind(this);\n\t\tthis.isTabRegionOverflowing = this.isTabRegionOverflowing.bind(this);\n\t\tthis.onWindowResize = this.onWindowResize.bind(this);\n\t\tthis.onWindowResizeThrottled = _throttle(this.onWindowResize, 100);\n\t\tthis.getTabWidth = this.getTabWidth.bind(this);\n\t\tthis.setTabListTranslateX = this.setTabListTranslateX.bind(this);\n\t\tthis.onTabListTranslateChanged = this.onTabListTranslateChanged.bind(this);\n\t\tthis.changeTab = this.changeTab.bind(this);\n\t}\n\n\tgetTabWidth(params: GetTabWidthParams = {}) {\n\t\tlet { boundingBox, tabList } = params;\n\t\tif (typeof tabList === \"undefined\") {\n\t\t\ttabList = this.state.tabs;\n\t\t}\n\t\tif (typeof boundingBox === \"undefined\") {\n\t\t\tboundingBox = (this.refs.Me as HTMLElement).getBoundingClientRect();\n\t\t}\n\t\tif (typeof boundingBox.right === \"undefined\") {\n\t\t\treturn TAB_WIDTH;\n\t\t}\n\t\tlet containerWidth = boundingBox.right - boundingBox.left;\n\t\tlet newTabWidth = containerWidth / tabList.length;\n\n\t\treturn newTabWidth < MINIMUM_TAB_SIZE ? MINIMUM_TAB_SIZE : newTabWidth;\n\t}\n\n\t/**\n\t * Resize handler. Calculates the space that the center-region is taking up. May be used to scale tabs proportionally.\n\t */\n\tonWindowResize() {\n\t\tlet bounds = (this.refs.Me as HTMLElement).getBoundingClientRect();\n\t\tthis.setState({\n\t\t\tboundingBox: bounds,\n\t\t\ttabWidth: this.getTabWidth(),\n\t\t});\n\t}\n\n\tfindTabIndex(tab: TabProperties) {\n\t\treturn this.state.tabs.findIndex((el) => tab.windowName === el.windowName);\n\t}\n\n\t/**\n\t *\n\t * Function that's called when this component fires the onDragStart event, this will start the tiling or tabbing process\n\t *\n\t * @param e The SyntheticEvent created by React when the startdrag event is called\n\t * @memberof windowTitleBar\n\t */\n\tstartDrag(e: React.DragEvent<HTMLDivElement>, windowIdentifier: WindowIdentifier) {\n\t\tthis.setState({\n\t\t\tiAmDragging: true,\n\t\t});\n\t\te.dataTransfer.setData(\"application/fsbl-tab-data\", JSON.stringify(windowIdentifier));\n\t\tFSBL.Clients.RouterClient.transmit(\"DockingService.startTilingOrTabbing\", {\n\t\t\twindowIdentifier,\n\t\t});\n\t}\n\n\t/**\n\t * Called when the react component detects a drop (or stop drag, which is equivalent)\n\t *\n\t * @param e The SyntheticEvent created by React when the stopdrag event is called\n\t * @memberof windowTitleBar\n\t */\n\tstopDrag(e: React.DragEvent<HTMLDivElement>) {\n\t\t// We don't want onDropHandler() in windowTitleBarComponent.jsx\n\t\t// to handle this drop event, so we call event.stopPropagation().\n\t\te.stopPropagation();\n\t\tFSBL.Clients.Logger.system.debug(\"Tab stopDrag.\");\n\t\tthis.mousePositionOnDragEnd = {\n\t\t\tx: e.nativeEvent.screenX,\n\t\t\ty: e.nativeEvent.screenY,\n\t\t};\n\n\t\tconst { boundingBox } = this.state;\n\t\tfinsembleWindow.getBounds((err, bounds) => {\n\t\t\t// We ONLY want to know if we're in the tab region!\n\t\t\tconst tabRegion = {\n\t\t\t\ttop: boundingBox.top + (bounds?.top ?? 0),\n\t\t\t\tbottom: boundingBox.bottom + (bounds?.top ?? 0),\n\t\t\t\tleft: boundingBox.left + (bounds?.left ?? 0),\n\t\t\t\tright: boundingBox.right + (bounds?.left ?? 0),\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t};\n\t\t\tif (!isPointInBox(this.mousePositionOnDragEnd, tabRegion)) {\n\t\t\t\t// allow for a 50ms delay so this message goes after a drop message from a target window if tabbing\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tstopTilingOrTabbing({\n\t\t\t\t\t\tmousePosition: this.mousePositionOnDragEnd,\n\t\t\t\t\t});\n\t\t\t\t}, 50);\n\t\t\t\tthis.onWindowResize();\n\t\t\t} else {\n\t\t\t\t// sometimes a tab gets dropped in a bad spot where no action gets taken and we get stuck in tiling mode\n\t\t\t\t// to make sure nothing bad happens, call cancel after a similar 50ms delay\n\t\t\t\t// If some action was taken, this will be ignored by Finsemble\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tFSBL.Clients.RouterClient.transmit(\"DockingService.cancelTilingOrTabbing\", {\n\t\t\t\t\t\twindowIdentifier: this.state.activeTab,\n\t\t\t\t\t});\n\t\t\t\t}, 50);\n\t\t\t}\n\t\t\t// set the default state after dragging\n\t\t\tthis.setState({\n\t\t\t\tiAmDragging: false,\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Helper function that will pull data from a drop event, parse it, and return it.\n\t * @param {event} e\n\t */\n\textractWindowIdentifier(e: React.DragEvent<HTMLElement>) {\n\t\ttry {\n\t\t\tlet identifier = JSON.parse(e.dataTransfer.getData(\"application/fsbl-tab-data\"));\n\t\t\t// If the \"identifier\" is formed properly, it'll have this properly. Otherwise, it's something else (e.g., share data, image, etc).\n\t\t\tif (typeof identifier.windowName !== \"undefined\") {\n\t\t\t\treturn identifier;\n\t\t\t} else if (identifier.waitForIdentifier) {\n\t\t\t\treturn identifier;\n\t\t\t} else {\n\t\t\t\tFSBL.Clients.Logger.system.error(\n\t\t\t\t\t\"Malformed drop object detected in windowTitleBar. Check tab dropping code. Expected windowIdentifier, got \",\n\t\t\t\t\tidentifier\n\t\t\t\t);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t} catch (e2) {\n\t\t\tFSBL.Clients.Logger.system.error(\n\t\t\t\t\"Error in 'extractWindowIdentifier'. Check TabRegion.jsx. Either there was no data in the event, or it was a circular object that caused JSON.parse to fail. Javascript Error:\",\n\t\t\t\te2\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Called when a drop event occurs on the tab region. We (hope) that this came from a tab. Could be a share icon, an image, something else - that's why we check to see if the identifier exists before doing anything.\n\t * @param {event} e\n\t */\n\tdrop(e?: React.DragEvent<HTMLElement>) {\n\t\tlet identifier: any;\n\t\tif (e) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tidentifier = this.extractWindowIdentifier(e);\n\t\t}\n\t\tFSBL.Clients.Logger.system.debug(\"Tab drag drop.\");\n\t\tif (!identifier) return; // the dropped item is not a tab\n\t\tif (this.state.tabs.length === 1 && identifier.windowName === finsembleWindow.name) {\n\t\t\t// The source and destination tabs are the same\n\t\t\t//\n\t\t\t// Cancel the tabbing event\n\t\t\tFSBL.Clients.RouterClient.transmit(\"DockingService.cancelTilingOrTabbing\", {\n\t\t\t\twindowIdentifier: this.state.activeTab,\n\t\t\t});\n\t\t\t// But also set \"iAmDragging\" to false in order to allow other tabs to be dragged in here\n\t\t\tthis.setState({\n\t\t\t\tiAmDragging: false,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tstopTilingOrTabbing({ allowDropOnSelf: true, action: \"tabbing\" }, () => {\n\t\t\tFSBL.Clients.RouterClient.transmit(\"tabbingDragEnd\", { success: true });\n\t\t\tif (identifier && identifier.windowName) {\n\t\t\t\t// Calls a method defined inside of windowTitleBar.jsx.\n\t\t\t\tthis.onTabAdded(identifier, this.state.hoveredTabIndex);\n\t\t\t} else if (identifier && identifier.waitForIdentifier) {\n\t\t\t\tlet subscribeId: { subscribeID: string; topic: string };\n\t\t\t\tlet tabIdentifierSubscriber = (err: StandardError, response: { data: TabProperties }) => {\n\t\t\t\t\tif (!response.data.windowName) return;\n\t\t\t\t\tFSBL.Clients.RouterClient.unsubscribe(subscribeId);\n\t\t\t\t\tthis.onTabAdded(response.data, this.state.hoveredTabIndex);\n\t\t\t\t};\n\t\t\t\tsubscribeId = FSBL.Clients.RouterClient.subscribe(`Finsemble.${identifier.guid}`, tabIdentifierSubscriber);\n\t\t\t} else {\n\t\t\t\tFSBL.Clients.Logger.system.error(\n\t\t\t\t\t\"Unexpected drop event on window title bar. Check the 'drop' method on TabRegion.jsx.\"\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tisTabRegionOverflowing() {\n\t\tlet lastTab = {\n\t\t\tright: this.state.tabs.length * this.state.tabWidth,\n\t\t};\n\t\treturn lastTab.right + this.state.translateX > this.state.boundingBox.right - this.state.boundingBox.left;\n\t}\n\n\t/**\n\t * Event handler for when a user wheels inside of the tab region. We translate the deltaY that the event provides into horizontal movement. The translateX value that we return will be used in the render method below.\n\t * @param {event} e\n\t * This should probably be refactored into separate handlers for scroll and mousewheel to account for the differences in event properties.\n\t */\n\tonMouseWheel(e: React.WheelEvent) {\n\t\te.preventDefault();\n\t\tlet numTabs = this.state.tabs.length;\n\t\tlet translateX = 0;\n\t\t// If there's more than one tab, do some calculations, otherwise we aren't going to scroll this region, no matter how much the user wants us to.\n\t\tif (numTabs > 1) {\n\t\t\tlet currentX = (this.refs.Me as HTMLElement).scrollLeft;\n\t\t\tlet { boundingBox } = this.state;\n\t\t\t// Figure out position of first tab and last tab.\n\t\t\tlet firstTab = {\n\t\t\t\tleft: 0 + boundingBox.left,\n\t\t\t};\n\t\t\tlet lastTab = {\n\t\t\t\tright: numTabs * this.state.tabWidth,\n\t\t\t};\n\t\t\tlet deltaX = this.state.tabWidth / 3;\n\t\t\tif (e.nativeEvent.deltaY < 0) {\n\t\t\t\tdeltaX = 0 - deltaX;\n\t\t\t}\n\t\t\t// Mouses with high sensitivity will cause massive scroll amounts. We don't want to scroll more than one tab's width in a single mouse wheel, otherwise you risk missing a tab.\n\t\t\tif (Math.abs(deltaX) > this.state.tabWidth) {\n\t\t\t\tlet isNegative = false;\n\t\t\t\tif (deltaX < 0) {\n\t\t\t\t\tisNegative = true;\n\t\t\t\t}\n\t\t\t\tdeltaX = isNegative ? 0 - this.state.tabWidth : this.state.tabWidth;\n\t\t\t}\n\n\t\t\t// when we set scrollLeft on the element, this event fires. But there's no actual event. so stop.\n\t\t\tif (!e.nativeEvent.deltaY) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet originalDeltaY = e.nativeEvent.deltaY;\n\t\t\tlet deltaY = originalDeltaY;\n\t\t\tif (Math.abs(originalDeltaY) > this.state.tabWidth / 3) {\n\t\t\t\tdeltaY = this.state.tabWidth / 3;\n\t\t\t\tif (originalDeltaY < 0) {\n\t\t\t\t\tdeltaY = 0 - deltaY;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttranslateX = deltaY + currentX;\n\t\t\tlet newRightForLastTab = lastTab.right + translateX;\n\t\t\tlet newLeftForFirstTab = firstTab.left + translateX;\n\t\t\t// Do not let the left of the first tab move to the right of the left edge of the bounding box.\n\t\t\tif (newLeftForFirstTab < 0) {\n\t\t\t\treturn this.scrollToFirstTab();\n\t\t\t} else if (e.nativeEvent.deltaY < 0 && newRightForLastTab <= boundingBox.right) {\n\t\t\t\t// ONLY IF the user is scrolling from right-to-left (deltaY will be negative). IF they try to do that, do not allow the right edge of the last tab to detach.\n\t\t\t\treturn this.scrollToLastTab();\n\t\t\t}\n\t\t\t// Else, the translation is okay. We're in the middle of our list and the first and last tabs aren't being rendered improperly.\n\t\t\ttranslateX < 0 ? (translateX = 0) : translateX;\n\t\t\tthis.setState({ translateX });\n\t\t}\n\t}\n\n\t/**\n\t * Scrolls to our active tab.\n\t */\n\tscrollToActiveTab() {\n\t\tthis.scrollToTab(this.state.activeTab);\n\t}\n\n\t/**\n\t * Scrolls to the first tab in our list of tabs.\n\t */\n\tscrollToFirstTab() {\n\t\tlet firstTab = this.state.tabs[0];\n\t\tthis.scrollToTab(firstTab);\n\t}\n\n\t/**\n\t * Scrolls to the last tab in our list of tabs\n\t */\n\tscrollToLastTab() {\n\t\tlet lastTab = this.state.tabs[this.state.tabs.length - 1];\n\t\tthis.scrollToTab(lastTab);\n\t}\n\n\t/**\n\t * Function that will horizontally scroll the tab region so that the right edge of the tab lines up with the right edge of the tab region.\n\t * @param {} tab\n\t */\n\tscrollToTab(tab: TabProperties) {\n\t\t// 'BoundingBox' is just the boundingClientRect of the tab region. It is, in essence, the center part of the windowTitleBar.\n\t\tlet { boundingBox } = this.state;\n\n\t\tlet tabIndex = this.state.tabs.findIndex((el) => el.windowName === tab.windowName);\n\t\tif (tabIndex > -1) {\n\t\t\tlet leftEdgeOfTab = tabIndex * this.state.tabWidth;\n\t\t\tlet rightEdgeOfTab = leftEdgeOfTab + this.state.tabWidth;\n\t\t\tlet translateX = rightEdgeOfTab;\n\t\t\t// Our translation is this: Take the right edge of the bounding box, and subtract the left edge. This gives us the 0 point for the box. Then, we subtract the right edge of the tab. The result is a number that we use to shift the entire element and align the right edge of the tab with the right edge of the bounding box. We also account for the 30 px region on the right.\n\n\t\t\t// If there's no overflow, we don't scroll.\n\t\t\tif (rightEdgeOfTab < boundingBox.right) {\n\t\t\t\ttranslateX = 0;\n\t\t\t} else {\n\t\t\t\t// Our translation is this: Take the right edge of the bounding box, and subtract the left edge. This gives us the 0 point for the box. Then, we subtract the right edge of the tab. The result is a number that we use to shift the entire element and align the right edge of the tab with the right edge of the bounding box.\n\t\t\t\ttranslateX = boundingBox.right - boundingBox.left - rightEdgeOfTab;\n\t\t\t\t// If there's no overflow, we don't scroll.\n\t\t\t\tif (rightEdgeOfTab < boundingBox.right) {\n\t\t\t\t\ttranslateX = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.setTabListTranslateX(translateX);\n\t\t}\n\t}\n\n\tsetTabListTranslateX(translateX: number) {\n\t\tActions.setTabListScrollPosition(translateX);\n\t}\n\n\t/**\n\t * Someone is dragging _something_ over the tab region. We respond by rendering the ghost tab.\n\t * @param {event} e\n\t */\n\tdragOver(e: React.DragEvent) {\n\t\te.preventDefault();\n\t}\n\n\t/**\n\t * Triggered when the user moves their mouse out of the tabRegion after a dragOver event happens. When they leave, we hide our placeholder tab.\n\t * @param {event} e\n\t */\n\tdragLeave(e: React.DragEvent<HTMLDivElement>) {\n\t\tlet boundingRect = this.state.boundingBox;\n\t\tif (!isPointInBox({ x: e.screenX, y: e.screenY }, boundingRect)) {\n\t\t\tthis.setState({\n\t\t\t\thoveredTabIndex: undefined,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Set to a timeout. An event is sent to the RouterClient which will be handled by the drop handler on the window.\n\t * In the event that a drop handler never fires to stop tiling or tabbing, this will take care of it.\n\t *\n\t * @memberof windowTitleBar\n\t */\n\tcancelTabbing() {\n\t\tstopTilingOrTabbing({ allowDropOnSelf: true });\n\t\tthis.onWindowResize();\n\t}\n\n\t/**\n\t * Basically exists just to keep the render method clean. Gives conditional classes to the active tab.\n\t * @param {tab} tab\n\t */\n\tgetTabClasses(tab: TabProperties) {\n\t\tlet classes = \"fsbl-tab\";\n\t\tlet tabIndex = this.findTabIndex(tab);\n\t\tif (tabIndex === this.state.hoveredTabIndex) classes = `${classes} ghost-tab`;\n\t\tif (this.state.activeTab && tab.windowName === this.state.activeTab.windowName) {\n\t\t\tclasses = `${classes} fsbl-active-tab`;\n\t\t}\n\t\treturn classes;\n\t}\n\n\tonTabDraggedOver(e: React.DragEvent<HTMLElement>, tabDraggedOver: TabProperties) {\n\t\te.preventDefault();\n\t\t// Find index of tab.\n\t\tlet tabIndex = this.findTabIndex(tabDraggedOver);\n\t\tthis.setState({\n\t\t\thoveredTabIndex: tabIndex,\n\t\t});\n\t}\n\n\t/**\n\t * OnClick handler for the close button on individual tabs.\n\t * @PLACEHOLDER will interact with tabbing API\n\t * @param {*} tab\n\t */\n\tonTabClosed(identifier: TabProperties) {\n\t\tActions.closeTab(identifier);\n\t}\n\n\t/**\n\t * drop handler for the tab region.\n\t * @param {*} tab\n\t */\n\tonTabAdded(identifier: TabProperties, newIndex: number | undefined) {\n\t\tif (newIndex === -1) {\n\t\t\tnewIndex = undefined;\n\t\t}\n\n\t\tlet myIdentifier = finsembleWindow.identifier as typeof finsembleWindow.identifier & { title: string };\n\t\tif (myIdentifier) {\n\t\t\tmyIdentifier.title = finsembleWindow.windowOptions.title;\n\t\t}\n\t\tif (this.state.tabs.length === 1 && identifier.windowName == myIdentifier.windowName) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof newIndex === \"number\") {\n\t\t\tActions.reorderTab(identifier, newIndex);\n\t\t}\n\t\tthis.setState({\n\t\t\thoveredTabIndex: undefined,\n\t\t});\n\t}\n\n\t/**\n\t * OnClick handler for individual tabs.\n\t * @PLACEHOLDER will interact with tabbing API\n\t * @param {*} tab\n\t */\n\tsetActiveTab(tab: TabProperties) {\n\t\tActions.setActiveTab(tab);\n\t}\n\n\tonTabsChanged(err: StandardError, response: { value: TabProperties[] }) {\n\t\tlet { value } = response;\n\t\tthis.setState({\n\t\t\ttabs: value,\n\t\t\ttabWidth: this.getTabWidth({ tabList: value }),\n\t\t});\n\t}\n\n\tonTabListTranslateChanged(err: StandardError, response: { value: number }) {\n\t\tlet { value } = response;\n\t\tthis.setState({\n\t\t\ttranslateX: value,\n\t\t});\n\t}\n\n\t/**\n\t * Change active tab to the next one on either its left or right\n\t *\n\t * @param direction the direction the tab should change to (1 = right, -1 = left)\n\t */\n\tchangeTab(direction: 1 | -1) {\n\t\tconst { currentIndex } = Actions.findTab(this.state.activeTab);\n\n\t\tlet newIndex = currentIndex + direction;\n\t\tif (newIndex < 0) {\n\t\t\tnewIndex = this.state.tabs.length - 1;\n\t\t} else if (newIndex >= this.state.tabs.length) {\n\t\t\tnewIndex = 0;\n\t\t}\n\n\t\tActions.setActiveTab(this.state.tabs[newIndex]);\n\t}\n\n\tUNSAFE_componentWillMount() {\n\t\t// Store.addListener({ field: \"activeTab\" }, this.onActiveTabChanged);\n\t\tStore.addListener({ field: \"tabs\" }, this.onTabsChanged);\n\t\tStore.addListener({ field: \"tabListTranslateX\" }, this.onTabListTranslateChanged);\n\t}\n\n\tcomponentDidMount() {\n\t\twindow.addEventListener(\"resize\", this.onWindowResizeThrottled);\n\t\twindow.addEventListener(\"keydown\", (e) => {\n\t\t\tif (e.ctrlKey) {\n\t\t\t\t// On Mac or Windows, Ctrl+Tab changes tabs to the right\n\t\t\t\t// On Windows, Ctrl+PageDown changes tabs to the right\n\t\t\t\tif ((e.key === \"Tab\" && !e.shiftKey) || e.key === \"PageDown\") {\n\t\t\t\t\tthis.changeTab(1);\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t// On Mac or Windows, Ctrl+Shift+Tab changes tabs to the left\n\t\t\t\t\t// On Windows, Ctrl+PageUp changes tabs to the left\n\t\t\t\t} else if (e.key === \"PageUp\" || (e.key === \"Tab\" && e.shiftKey)) {\n\t\t\t\t\tthis.changeTab(-1);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t} else if (e.metaKey && e.altKey) {\n\t\t\t\t// On Mac, Cmd+Opt+Right changes tabs to the right\n\t\t\t\tif (e.key === \"ArrowRight\") {\n\t\t\t\t\tthis.changeTab(1);\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t// On Mac, Cmd+Opt+Left changes tabs to the left\n\t\t\t\t} else if (e.key === \"ArrowLeft\") {\n\t\t\t\t\tthis.changeTab(-1);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tlet boundingBox = (this.refs.Me as HTMLElement).getBoundingClientRect();\n\t\tthis.setState({\n\t\t\tboundingBox: boundingBox,\n\t\t\ttabWidth: this.getTabWidth({ boundingBox }),\n\t\t});\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// Store.removeListener({ field: \"activeTab\" }, this.onActiveTabChanged);\n\t\tStore.removeListener({ field: \"tabs\" }, this.onTabsChanged);\n\t\tStore.removeListener({ field: \"tabListTranslateX\" }, this.onTabListTranslateChanged);\n\t\twindow.removeEventListener(\"resize\", this.onWindowResizeThrottled);\n\t}\n\n\thoverAction(newHoverState: string) {\n\t\tthis.setState({ hoverState: newHoverState });\n\t}\n\n\trender() {\n\t\tlet { translateX } = this.state;\n\t\ttranslateX = Math.abs(translateX);\n\t\t// If we have just 1 tab, we render the title. Unless someone is dragging a tab around - in that case, we will render the tab view, even though we only have 1.\n\n\t\tlet componentToRender = \"title\";\n\t\tif (this.state.tabs.length === 1 && this.props.listenForDragOver && !this.state.iAmDragging) {\n\t\t\tcomponentToRender = \"tabs\";\n\t\t}\n\t\tif (this.state.tabs.length > 1) {\n\t\t\tcomponentToRender = \"tabs\";\n\t\t}\n\t\t// Cleanup in case we were translated before closing the second to last tab. This left-aligns the title.\n\t\tif (componentToRender === \"title\") {\n\t\t\ttranslateX = 0;\n\t\t}\n\n\t\tif (this.refs.Me) {\n\t\t\t(this.refs.Me as HTMLElement).scrollLeft = translateX;\n\t\t}\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref=\"Me\"\n\t\t\t\tonDragLeave={this.dragLeave}\n\t\t\t\tclassName={this.props.className}\n\t\t\t\tonWheel={this.onMouseWheel}\n\t\t\t\tonScroll={(e) => {\n\t\t\t\t\tthis.onMouseWheel(e as unknown as React.WheelEvent);\n\t\t\t\t}}\n\t\t\t\tonDrop={this.drop}\n\t\t\t\tonDragOver={this.dragOver}\n\t\t\t>\n\t\t\t\t<div className=\"tab-region-wrapper\">\n\t\t\t\t\t{componentToRender === \"title\" && this.renderTitle()}\n\t\t\t\t\t{componentToRender === \"tabs\" && this.renderTabs()}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/**\n\t * Function to render the title. Helps keep the render code clean.\n\t */\n\trenderTitle() {\n\t\tconst windowIdentifier: WindowIdentifier = {\n\t\t\twindowName: finsembleWindow.name,\n\t\t\tuuid: finsembleWindow.uuid,\n\t\t};\n\t\treturn (\n\t\t\t<div\n\t\t\t\tdraggable=\"true\"\n\t\t\t\tonDragStart={(e) => {\n\t\t\t\t\tFSBL.Clients.Logger.system.debug(\"Tab drag start - TITLE\");\n\t\t\t\t\tlet activeIdentifier = finsembleWindow.identifier as typeof finsembleWindow.identifier & { title: string };\n\t\t\t\t\tactiveIdentifier.title = finsembleWindow.windowOptions.title;\n\t\t\t\t\tthis.startDrag(e, activeIdentifier);\n\t\t\t\t}}\n\t\t\t\tonDragEnd={this.stopDrag}\n\t\t\t\tdata-hover={this.state.hoverState}\n\t\t\t\tclassName={\"fsbl-header-title\"}\n\t\t\t>\n\t\t\t\t<FinsembleHoverDetector edge=\"top\" hoverAction={this.hoverAction.bind(this)} />\n\t\t\t\t<Title onUpdate={this.props.onTitleUpdated} windowIdentifier={windowIdentifier}></Title>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/**\n\t * Renders the array of tabs.\n\t * @param {*} props\n\t */\n\trenderTabs() {\n\t\tlet titleWidth = this.state.tabWidth - ICON_AREA - CLOSE_BUTTON_MARGIN;\n\n\t\treturn this.state.tabs.map((tab) => (\n\t\t\t<Tab\n\t\t\t\tdraggable=\"true\"\n\t\t\t\tkey={tab.windowName} // this is a unique identifier for React so it knows when to update the DOM\n\t\t\t\tclassName={this.getTabClasses(tab)}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tthis.setActiveTab(tab);\n\t\t\t\t}}\n\t\t\t\tonDragStart={(e, identifier) => {\n\t\t\t\t\tFSBL.Clients.Logger.system.debug(\"Tab drag - TAB\", identifier.windowName);\n\t\t\t\t\tthis.startDrag(e, identifier);\n\t\t\t\t}}\n\t\t\t\tonDrop={this.drop}\n\t\t\t\tonDragEnd={this.stopDrag}\n\t\t\t\tonTabClose={() => {\n\t\t\t\t\tthis.onTabClosed(tab);\n\t\t\t\t}}\n\t\t\t\tonTabDraggedOver={this.onTabDraggedOver}\n\t\t\t\tlistenForDragOver={this.props.listenForDragOver}\n\t\t\t\ttabWidth={this.state.tabWidth}\n\t\t\t\ttitleWidth={titleWidth}\n\t\t\t\twindowIdentifier={tab}\n\t\t\t/>\n\t\t));\n\t}\n}\n"]}
@@ -1,2 +1,10 @@
1
+ /*!
2
+ * Copyright 2017 by ChartIQ, Inc.
3
+ * All rights reserved.
4
+ */
1
5
  import React from "react";
2
- export declare const LinkerButton: React.FunctionComponent;
6
+ interface LinkerButtonProps {
7
+ enableKeyboardShortcut?: boolean;
8
+ }
9
+ export declare const LinkerButton: React.FunctionComponent<LinkerButtonProps>;
10
+ export {};
@@ -1,3 +1,7 @@
1
+ /*!
2
+ * Copyright 2017 by ChartIQ, Inc.
3
+ * All rights reserved.
4
+ */
1
5
  import React, { useRef, useEffect } from "react";
2
6
  import { LinkerGroups } from "./LinkerGroups";
3
7
  import { useDispatch, useSelector, Provider } from "react-redux";
@@ -14,18 +18,22 @@ const LinkerButtonIcon = () => (React.createElement("svg", { width: "15px", heig
14
18
  React.createElement("g", { transform: "rotate(45 22.289 4.682)", fillRule: "nonzero", fill: "none" },
15
19
  React.createElement("use", { filter: "url(#prefix__a)", xlinkHref: "#prefix__b" }),
16
20
  React.createElement("use", { xlinkHref: "#prefix__b" }))));
17
- const LinkerButtonRedux = () => {
21
+ const LinkerButtonRedux = ({ enableKeyboardShortcut, }) => {
18
22
  const dispatch = useDispatch();
19
23
  const state = useSelector((currentState) => currentState);
20
24
  const buttonRef = useRef(null);
21
25
  const showLinkerWindow = () => {
22
26
  var _a, _b, _c;
27
+ // These action creators can now be imported from finsemble-api
23
28
  dispatch(actions.setActiveWindow({
24
29
  type: "linker/setActiveWindow",
25
30
  payload: {
26
31
  windowName: finsembleWindow.name,
27
32
  },
28
33
  }));
34
+ // The offset parent is needed so that the menu isn't shown relative to the icon.
35
+ // The HTMLElement.offsetParent read-only property returns a reference to the object which is the closest (nearest in the containment hierarchy) positioned containing element.
36
+ // Necessary to cast because refs are type "Element" (which could be an SVGElement...)
29
37
  const linkerButton = buttonRef.current;
30
38
  if (linkerButton) {
31
39
  const linkerButtonDiv = linkerButton;
@@ -43,20 +51,28 @@ const LinkerButtonRedux = () => {
43
51
  FSBL.Clients.LauncherClient.toggleWindowOnClick(linkerButtonDiv, wi, params);
44
52
  }
45
53
  };
54
+ // If this window is in the list of linker clients then display this button
46
55
  const displayMe = state.clients[finsembleWindow.name] !== undefined;
47
56
  useEffect(() => {
48
- window.addEventListener("keydown", (e) => {
49
- if (e.key === "l" && (e.ctrlKey || e.metaKey)) {
50
- showLinkerWindow();
51
- }
52
- });
57
+ enableKeyboardShortcut &&
58
+ window.addEventListener("keydown", (e) => {
59
+ if (e.key === "l" && (e.ctrlKey || e.metaKey)) {
60
+ showLinkerWindow();
61
+ }
62
+ });
53
63
  }, []);
54
64
  return (React.createElement(React.Fragment, null, displayMe && (React.createElement("div", { ref: buttonRef, title: "Link Data", className: "linkerSection" },
55
65
  React.createElement("div", { className: "fsbl-icon fsbl-linker", onClick: showLinkerWindow },
56
66
  React.createElement(LinkerButtonIcon, null)),
57
67
  React.createElement(LinkerGroups, null)))));
58
68
  };
59
- const WhichLinker = () => {
69
+ /**
70
+ * Picks whether to display the current or deprecated LinkerElement.
71
+ * If config `finsemble.servicesConfig.linker.enabled` is set to true then the deprecated version will be used.
72
+ *
73
+ * This code should be removed once the linkerClient is removed from Finsemble.
74
+ */
75
+ const WhichLinker = ({ enableKeyboardShortcut }) => {
60
76
  const [whichLinker, setWhichLinker] = React.useState("");
61
77
  useEffect(() => {
62
78
  (async () => {
@@ -73,8 +89,8 @@ const WhichLinker = () => {
73
89
  }, []);
74
90
  return (React.createElement(React.Fragment, null,
75
91
  whichLinker === "LinkerElement" && (React.createElement(Provider, { store: store },
76
- React.createElement(LinkerButtonRedux, null))),
92
+ React.createElement(LinkerButtonRedux, { enableKeyboardShortcut: enableKeyboardShortcut }))),
77
93
  whichLinker === "LinkerElementDeprecated" && React.createElement(LinkerButtonDeprecated, null)));
78
94
  };
79
- export const LinkerButton = () => React.createElement(WhichLinker, null);
95
+ export const LinkerButton = ({ enableKeyboardShortcut = true, }) => React.createElement(WhichLinker, { enableKeyboardShortcut: enableKeyboardShortcut });
80
96
  //# sourceMappingURL=LinkerButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkerButton.js","sourceRoot":"","sources":["../../../../../src/components/windowTitleBar/components/left/LinkerButton.tsx"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n */\nimport React, { useRef, useEffect } from \"react\";\nimport { LinkerGroups } from \"./LinkerGroups\";\nimport { useDispatch, useSelector, Provider } from \"react-redux\";\nimport { actions, LinkerStore, store } from \"../../../linker/remoteRedux\";\nimport { LinkerButton as LinkerButtonDeprecated } from \"./LinkerButtonDeprecated\";\nimport { services, ShowWindowParams } from \"@finsemble/finsemble-api\";\n\ntype SpawnParams = services.window.types.SpawnParams;\n\nconst LinkerButtonIcon = () => (\n\t<svg\n\t\twidth=\"15px\"\n\t\theight=\"15px\"\n\t\tviewBox=\"2 1 13 13\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\txmlnsXlink=\"http://www.w3.org/1999/xlink\"\n\t>\n\t\t<title>Linker</title>\n\t\t<defs>\n\t\t\t<path\n\t\t\t\tid=\"prefix__b\"\n\t\t\t\td=\"M17.925 15.425h-1v-2.5a2.5 2.5 0 0 0-5 0v2.5h-1v-2.5a3.5 3.5 0 1 1 7 0v2.5zm0 2v2.5a3.5 3.5 0 1 1-7 0v-2.5h1v2.5a2.5 2.5 0 0 0 5 0v-2.5h1zm-3.5-4a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-1 0v-5a.5.5 0 0 1 .5-.5z\"\n\t\t\t/>\n\t\t\t<filter id=\"prefix__a\" x=\"-28.6%\" y=\"-7.1%\" width=\"157.1%\" height=\"128.6%\">\n\t\t\t\t<feOffset dy=\"1\" in=\"SourceAlpha\" result=\"shadowOffsetOuter1\" />\n\t\t\t\t<feGaussianBlur in=\"shadowOffsetOuter1\" result=\"shadowBlurOuter1\" stdDeviation=\".5\" />\n\t\t\t\t<feColorMatrix in=\"shadowBlurOuter1\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0\" />\n\t\t\t</filter>\n\t\t</defs>\n\t\t<g transform=\"rotate(45 22.289 4.682)\" fillRule=\"nonzero\" fill=\"none\">\n\t\t\t<use filter=\"url(#prefix__a)\" xlinkHref=\"#prefix__b\" />\n\t\t\t<use xlinkHref=\"#prefix__b\" />\n\t\t</g>\n\t</svg>\n);\n\nconst LinkerButtonRedux: React.FunctionComponent = () => {\n\tconst dispatch = useDispatch();\n\tconst state: LinkerStore = useSelector((currentState: any) => currentState);\n\tconst buttonRef = useRef(null);\n\n\tconst showLinkerWindow = () => {\n\t\t// These action creators can now be imported from finsemble-api\n\t\tdispatch(\n\t\t\tactions.setActiveWindow({\n\t\t\t\ttype: \"linker/setActiveWindow\",\n\t\t\t\tpayload: {\n\t\t\t\t\twindowName: finsembleWindow.name,\n\t\t\t\t},\n\t\t\t})\n\t\t);\n\n\t\t// The offset parent is needed so that the menu isn't shown relative to the icon.\n\t\t// The HTMLElement.offsetParent read-only property returns a reference to the object which is the closest (nearest in the containment hierarchy) positioned containing element.\n\t\t// Necessary to cast because refs are type \"Element\" (which could be an SVGElement...)\n\n\t\tconst linkerButton = buttonRef.current;\n\t\tif (linkerButton) {\n\t\t\tconst linkerButtonDiv = linkerButton as HTMLElement;\n\t\t\tconst linkerParent = (linkerButtonDiv.offsetParent ?? linkerButtonDiv.parentElement) as HTMLElement;\n\n\t\t\tconst params: ShowWindowParams = {\n\t\t\t\tposition: \"relative\",\n\t\t\t\tleft: linkerParent?.offsetLeft ?? 0,\n\t\t\t\ttop: linkerParent?.offsetHeight ?? 0,\n\t\t\t\tforceOntoMonitor: true,\n\t\t\t\tspawnIfNotFound: false,\n\t\t\t};\n\t\t\tconst wi = {\n\t\t\t\tcomponentType: \"linkerWindow\",\n\t\t\t};\n\t\t\tFSBL.Clients.LauncherClient.toggleWindowOnClick(linkerButtonDiv, wi, params);\n\t\t}\n\t};\n\n\t// If this window is in the list of linker clients then display this button\n\tconst displayMe = state.clients[finsembleWindow.name] !== undefined;\n\n\tuseEffect(() => {\n\t\twindow.addEventListener(\"keydown\", (e) => {\n\t\t\tif (e.key === \"l\" && (e.ctrlKey || e.metaKey)) {\n\t\t\t\tshowLinkerWindow();\n\t\t\t}\n\t\t});\n\t}, []);\n\n\treturn (\n\t\t<>\n\t\t\t{displayMe && (\n\t\t\t\t<div ref={buttonRef} title=\"Link Data\" className=\"linkerSection\">\n\t\t\t\t\t<div className=\"fsbl-icon fsbl-linker\" onClick={showLinkerWindow}>\n\t\t\t\t\t\t<LinkerButtonIcon />\n\t\t\t\t\t</div>\n\t\t\t\t\t<LinkerGroups />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\n/**\n * Picks whether to display the current or deprecated LinkerElement.\n * If config `finsemble.servicesConfig.linker.enabled` is set to true then the deprecated version will be used.\n *\n * This code should be removed once the linkerClient is removed from Finsemble.\n */\nconst WhichLinker = () => {\n\tconst [whichLinker, setWhichLinker] = React.useState(\"\");\n\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\tconst { data } = await FSBL.Clients.ConfigClient.getValue({\n\t\t\t\tfield: \"finsemble.servicesConfig.linker.enabled\",\n\t\t\t});\n\t\t\tif (data) {\n\t\t\t\tsetWhichLinker(\"LinkerElementDeprecated\");\n\t\t\t} else {\n\t\t\t\tsetWhichLinker(\"LinkerElement\");\n\t\t\t}\n\t\t})();\n\t}, []);\n\n\treturn (\n\t\t<>\n\t\t\t{whichLinker === \"LinkerElement\" && (\n\t\t\t\t<Provider store={store}>\n\t\t\t\t\t<LinkerButtonRedux />\n\t\t\t\t</Provider>\n\t\t\t)}\n\t\t\t{whichLinker === \"LinkerElementDeprecated\" && <LinkerButtonDeprecated />}\n\t\t</>\n\t);\n};\n\nexport const LinkerButton: React.FunctionComponent = () => <WhichLinker />;\n"]}
1
+ {"version":3,"file":"LinkerButton.js","sourceRoot":"","sources":["../../../../../src/components/windowTitleBar/components/left/LinkerButton.tsx"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n */\nimport React, { useRef, useEffect } from \"react\";\nimport { LinkerGroups } from \"./LinkerGroups\";\nimport { useDispatch, useSelector, Provider } from \"react-redux\";\nimport { actions, LinkerStore, store } from \"../../../linker/remoteRedux\";\nimport { LinkerButton as LinkerButtonDeprecated } from \"./LinkerButtonDeprecated\";\nimport { services, ShowWindowParams } from \"@finsemble/finsemble-api\";\n\ntype SpawnParams = services.window.types.SpawnParams;\n\ninterface LinkerButtonProps {\n\tenableKeyboardShortcut?: boolean;\n}\n\nconst LinkerButtonIcon = () => (\n\t<svg\n\t\twidth=\"15px\"\n\t\theight=\"15px\"\n\t\tviewBox=\"2 1 13 13\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\txmlnsXlink=\"http://www.w3.org/1999/xlink\"\n\t>\n\t\t<title>Linker</title>\n\t\t<defs>\n\t\t\t<path\n\t\t\t\tid=\"prefix__b\"\n\t\t\t\td=\"M17.925 15.425h-1v-2.5a2.5 2.5 0 0 0-5 0v2.5h-1v-2.5a3.5 3.5 0 1 1 7 0v2.5zm0 2v2.5a3.5 3.5 0 1 1-7 0v-2.5h1v2.5a2.5 2.5 0 0 0 5 0v-2.5h1zm-3.5-4a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-1 0v-5a.5.5 0 0 1 .5-.5z\"\n\t\t\t/>\n\t\t\t<filter id=\"prefix__a\" x=\"-28.6%\" y=\"-7.1%\" width=\"157.1%\" height=\"128.6%\">\n\t\t\t\t<feOffset dy=\"1\" in=\"SourceAlpha\" result=\"shadowOffsetOuter1\" />\n\t\t\t\t<feGaussianBlur in=\"shadowOffsetOuter1\" result=\"shadowBlurOuter1\" stdDeviation=\".5\" />\n\t\t\t\t<feColorMatrix in=\"shadowBlurOuter1\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0\" />\n\t\t\t</filter>\n\t\t</defs>\n\t\t<g transform=\"rotate(45 22.289 4.682)\" fillRule=\"nonzero\" fill=\"none\">\n\t\t\t<use filter=\"url(#prefix__a)\" xlinkHref=\"#prefix__b\" />\n\t\t\t<use xlinkHref=\"#prefix__b\" />\n\t\t</g>\n\t</svg>\n);\n\nconst LinkerButtonRedux: React.FunctionComponent<LinkerButtonProps> = ({\n\tenableKeyboardShortcut,\n}: LinkerButtonProps) => {\n\tconst dispatch = useDispatch();\n\tconst state: LinkerStore = useSelector((currentState: any) => currentState);\n\tconst buttonRef = useRef(null);\n\n\tconst showLinkerWindow = () => {\n\t\t// These action creators can now be imported from finsemble-api\n\t\tdispatch(\n\t\t\tactions.setActiveWindow({\n\t\t\t\ttype: \"linker/setActiveWindow\",\n\t\t\t\tpayload: {\n\t\t\t\t\twindowName: finsembleWindow.name,\n\t\t\t\t},\n\t\t\t})\n\t\t);\n\n\t\t// The offset parent is needed so that the menu isn't shown relative to the icon.\n\t\t// The HTMLElement.offsetParent read-only property returns a reference to the object which is the closest (nearest in the containment hierarchy) positioned containing element.\n\t\t// Necessary to cast because refs are type \"Element\" (which could be an SVGElement...)\n\n\t\tconst linkerButton = buttonRef.current;\n\t\tif (linkerButton) {\n\t\t\tconst linkerButtonDiv = linkerButton as HTMLElement;\n\t\t\tconst linkerParent = (linkerButtonDiv.offsetParent ?? linkerButtonDiv.parentElement) as HTMLElement;\n\n\t\t\tconst params: ShowWindowParams = {\n\t\t\t\tposition: \"relative\",\n\t\t\t\tleft: linkerParent?.offsetLeft ?? 0,\n\t\t\t\ttop: linkerParent?.offsetHeight ?? 0,\n\t\t\t\tforceOntoMonitor: true,\n\t\t\t\tspawnIfNotFound: false,\n\t\t\t};\n\t\t\tconst wi = {\n\t\t\t\tcomponentType: \"linkerWindow\",\n\t\t\t};\n\t\t\tFSBL.Clients.LauncherClient.toggleWindowOnClick(linkerButtonDiv, wi, params);\n\t\t}\n\t};\n\n\t// If this window is in the list of linker clients then display this button\n\tconst displayMe = state.clients[finsembleWindow.name] !== undefined;\n\n\tuseEffect(() => {\n\t\tenableKeyboardShortcut &&\n\t\t\twindow.addEventListener(\"keydown\", (e) => {\n\t\t\t\tif (e.key === \"l\" && (e.ctrlKey || e.metaKey)) {\n\t\t\t\t\tshowLinkerWindow();\n\t\t\t\t}\n\t\t\t});\n\t}, []);\n\n\treturn (\n\t\t<>\n\t\t\t{displayMe && (\n\t\t\t\t<div ref={buttonRef} title=\"Link Data\" className=\"linkerSection\">\n\t\t\t\t\t<div className=\"fsbl-icon fsbl-linker\" onClick={showLinkerWindow}>\n\t\t\t\t\t\t<LinkerButtonIcon />\n\t\t\t\t\t</div>\n\t\t\t\t\t<LinkerGroups />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\n/**\n * Picks whether to display the current or deprecated LinkerElement.\n * If config `finsemble.servicesConfig.linker.enabled` is set to true then the deprecated version will be used.\n *\n * This code should be removed once the linkerClient is removed from Finsemble.\n */\nconst WhichLinker = ({ enableKeyboardShortcut }: LinkerButtonProps) => {\n\tconst [whichLinker, setWhichLinker] = React.useState(\"\");\n\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\tconst { data } = await FSBL.Clients.ConfigClient.getValue({\n\t\t\t\tfield: \"finsemble.servicesConfig.linker.enabled\",\n\t\t\t});\n\t\t\tif (data) {\n\t\t\t\tsetWhichLinker(\"LinkerElementDeprecated\");\n\t\t\t} else {\n\t\t\t\tsetWhichLinker(\"LinkerElement\");\n\t\t\t}\n\t\t})();\n\t}, []);\n\n\treturn (\n\t\t<>\n\t\t\t{whichLinker === \"LinkerElement\" && (\n\t\t\t\t<Provider store={store}>\n\t\t\t\t\t<LinkerButtonRedux enableKeyboardShortcut={enableKeyboardShortcut} />\n\t\t\t\t</Provider>\n\t\t\t)}\n\t\t\t{whichLinker === \"LinkerElementDeprecated\" && <LinkerButtonDeprecated />}\n\t\t</>\n\t);\n};\n\nexport const LinkerButton: React.FunctionComponent<LinkerButtonProps> = ({\n\tenableKeyboardShortcut = true,\n}: LinkerButtonProps) => <WhichLinker enableKeyboardShortcut={enableKeyboardShortcut} />;\n"]}
@@ -1,12 +1,59 @@
1
+ /**
2
+ * Linker button; located on the left side of the windowTitleBar.
3
+ */
1
4
  export class LinkerButton extends React.Component<any, any, any> {
2
5
  static contextType: React.Context<import("../../windowTitleBarContext").WindowTitleBarContextType>;
3
6
  constructor(props: any);
7
+ /**
8
+ * This is necessary to make sure that the `this` inside of the callback is correct.
9
+ *
10
+ * @memberof LinkerButton
11
+ */
4
12
  bindCorrectContext(): void;
13
+ /**
14
+ * When the user selects/deselects a channel in the linkerWindow, this event listener is invoked.
15
+ *
16
+ * @param {any} err
17
+ * @param {any} response
18
+ * @memberof LinkerButton
19
+ */
5
20
  onChannelsChange(err: any, response: any): void;
21
+ /**
22
+ * This listener is invoked when a new channel is registered with linkerService.
23
+ *
24
+ * @param {any} err
25
+ * @param {any} response
26
+ * @memberof LinkerButton
27
+ */
6
28
  onAllChannelsChange(err: any, response: any): void;
29
+ /**
30
+ * When we read the config from the window, we determine if the linker button should be shown. When that value changes, this listener is invoked.
31
+ *
32
+ * @param {any} err
33
+ * @param {any} response
34
+ * @memberof LinkerButton
35
+ */
7
36
  onShowLinkerButton(err: any, response: any): void;
37
+ /**
38
+ * When your mouse enters/leaves the hoverDetector, this function is invoked.
39
+ *
40
+ * @param {any} newHoverState
41
+ * @memberof LinkerButton
42
+ */
8
43
  hoverAction(newHoverState: any): void;
44
+ /**
45
+ * Invoked when the linker button is clicked.
46
+ *
47
+ * @param {any} e
48
+ * @memberof LinkerButton
49
+ */
9
50
  showLinkerWindow(e: any): void;
51
+ /**
52
+ * When any data in the store changes, we invoke this listener.
53
+ *
54
+ * @param {any} newState
55
+ * @memberof LinkerButton
56
+ */
10
57
  onStoreChanged(newState: any): void;
11
58
  }
12
59
  import * as React from "react";
@@ -1,3 +1,9 @@
1
+ /*!
2
+ * Copyright 2017 by ChartIQ, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This is a deprecated version of the LinkerButton which uses linkerClient. It is not compatible with FDC3 interop.
6
+ */
1
7
  import * as React from "react";
2
8
  import { FinsembleHoverDetector } from "../../../legacyControls/FinsembleHoverDetector";
3
9
  import { WindowTitleBarContext } from "../../windowTitleBarContext";
@@ -15,10 +21,16 @@ const LinkerButtonIcon = () => (React.createElement("svg", { width: "15px", heig
15
21
  React.createElement("use", { filter: "url(#prefix__a)", xlinkHref: "#prefix__b" }),
16
22
  React.createElement("use", { xlinkHref: "#prefix__b" }))));
17
23
  let windowTitleBarStore;
24
+ /**
25
+ * Linker button; located on the left side of the windowTitleBar.
26
+ */
18
27
  export class LinkerButton extends React.Component {
19
28
  constructor(props) {
20
29
  super(props);
21
30
  this.bindCorrectContext();
31
+ /**
32
+ * We assign in the constructor instead of via a require at the top of the file because the store is initialized asynchronously.
33
+ */
22
34
  windowTitleBarStore = getStore();
23
35
  this.state = {
24
36
  channels: {},
@@ -27,6 +39,11 @@ export class LinkerButton extends React.Component {
27
39
  hoverState: "false",
28
40
  };
29
41
  }
42
+ /**
43
+ * This is necessary to make sure that the `this` inside of the callback is correct.
44
+ *
45
+ * @memberof LinkerButton
46
+ */
30
47
  bindCorrectContext() {
31
48
  this.onChannelsChange = this.onChannelsChange.bind(this);
32
49
  this.onAllChannelsChange = this.onAllChannelsChange.bind(this);
@@ -34,20 +51,53 @@ export class LinkerButton extends React.Component {
34
51
  this.hoverAction = this.hoverAction.bind(this);
35
52
  this.showLinkerWindow = this.showLinkerWindow.bind(this);
36
53
  }
54
+ /**
55
+ * When the user selects/deselects a channel in the linkerWindow, this event listener is invoked.
56
+ *
57
+ * @param {any} err
58
+ * @param {any} response
59
+ * @memberof LinkerButton
60
+ */
37
61
  onChannelsChange(err, response) {
38
62
  this.setState({ channels: response.value });
39
63
  }
64
+ /**
65
+ * This listener is invoked when a new channel is registered with linkerService.
66
+ *
67
+ * @param {any} err
68
+ * @param {any} response
69
+ * @memberof LinkerButton
70
+ */
40
71
  onAllChannelsChange(err, response) {
41
72
  this.setState({ allChannels: response.value });
42
73
  }
74
+ /**
75
+ * When we read the config from the window, we determine if the linker button should be shown. When that value changes, this listener is invoked.
76
+ *
77
+ * @param {any} err
78
+ * @param {any} response
79
+ * @memberof LinkerButton
80
+ */
43
81
  onShowLinkerButton(err, response) {
44
82
  this.setState({ showLinker: response.value });
45
83
  }
84
+ /**
85
+ * When any data in the store changes, we invoke this listener.
86
+ *
87
+ * @param {any} newState
88
+ * @memberof LinkerButton
89
+ */
46
90
  onStoreChanged(newState) {
47
91
  this.setState(newState);
48
92
  }
93
+ /**
94
+ * Invoked when the linker button is clicked.
95
+ *
96
+ * @param {any} e
97
+ * @memberof LinkerButton
98
+ */
49
99
  showLinkerWindow(e) {
50
- e.persist();
100
+ e.persist(); // So that React allows us to access the target
51
101
  e.preventDefault();
52
102
  e.stopPropagation();
53
103
  let payload = {
@@ -59,6 +109,8 @@ export class LinkerButton extends React.Component {
59
109
  let wi = {
60
110
  componentType: "linkerWindow",
61
111
  };
112
+ // The offset parent is needed so that the menu isn't shown relative to the icon.
113
+ // The HTMLElement.offsetParent read-only property returns a reference to the object which is the closest (nearest in the containment hierarchy) positioned containing element.
62
114
  let linkerParent = self.refs.LinkerButton.offsetParent
63
115
  ? self.refs.LinkerButton.offsetParent
64
116
  : self.refs.LinkerButton.parentElement;
@@ -69,22 +121,45 @@ export class LinkerButton extends React.Component {
69
121
  forceOntoMonitor: true,
70
122
  spawnIfNotFound: false,
71
123
  };
124
+ // pass linkerbutton. If it's clicked while the menu is open, we let the blur occur.
72
125
  FSBL.Clients.LauncherClient.toggleWindowOnClick(self.refs.LinkerButton, wi, params);
73
126
  });
74
127
  }
128
+ /**
129
+ * When your mouse enters/leaves the hoverDetector, this function is invoked.
130
+ *
131
+ * @param {any} newHoverState
132
+ * @memberof LinkerButton
133
+ */
75
134
  hoverAction(newHoverState) {
76
135
  this.setState({ hoverState: newHoverState });
77
136
  }
137
+ /**
138
+ * Add listeners to the store.
139
+ *
140
+ * @memberof LinkerButton
141
+ */
78
142
  componentDidMount() {
79
143
  windowTitleBarStore.addListener({ field: "Linker.channels" }, this.onChannelsChange);
80
144
  windowTitleBarStore.addListener({ field: "Linker.allChannels" }, this.onAllChannelsChange);
81
145
  windowTitleBarStore.addListener({ field: "Linker.showLinkerButton" }, this.onShowLinkerButton);
82
146
  }
147
+ /**
148
+ * Remove listeners from the store.
149
+ *
150
+ * @memberof LinkerButton
151
+ */
83
152
  componentWillUnmount() {
84
153
  windowTitleBarStore.removeListener({ field: "Linker.channels" }, this.onChannelsChange);
85
154
  windowTitleBarStore.removeListener({ field: "Linker.allChannels" }, this.onAllChannelsChange);
86
155
  windowTitleBarStore.removeListener({ field: "Linker.showLinkerButton" }, this.onShowLinkerButton);
87
156
  }
157
+ /**
158
+ * Render method.
159
+ *
160
+ * @returns
161
+ * @memberof LinkerButton
162
+ */
88
163
  render() {
89
164
  return (React.createElement(React.Fragment, null, this.context.showLinkerButton && (React.createElement("div", { ref: "LinkerButton", title: "Link Data", className: "linkerSection" },
90
165
  React.createElement("div", { className: "fsbl-icon fsbl-linker", "data-hover": this.state.hoverState, onClick: this.showLinkerWindow },
@@ -1 +1 @@
1
- {"version":3,"file":"LinkerButtonDeprecated.js","sourceRoot":"","sources":["../../../../../src/components/windowTitleBar/components/left/LinkerButtonDeprecated.jsx"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n *\n * This is a deprecated version of the LinkerButton which uses linkerClient. It is not compatible with FDC3 interop.\n */\nimport * as React from \"react\";\nimport { FinsembleHoverDetector } from \"../../../legacyControls/FinsembleHoverDetector\";\nimport { WindowTitleBarContext } from \"../../windowTitleBarContext\";\nimport LinkerGroups from \"./LinkerGroupsDeprecated\";\nimport { getStore } from \"../../stores/windowTitleBarStore\";\nconst LinkerButtonIcon = () => (\n\t<svg\n\t\twidth=\"15px\"\n\t\theight=\"15px\"\n\t\tviewBox=\"2 1 13 13\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\txmlnsXlink=\"http://www.w3.org/1999/xlink\"\n\t>\n\t\t<title>Linker</title>\n\t\t<defs>\n\t\t\t<path\n\t\t\t\tid=\"prefix__b\"\n\t\t\t\td=\"M17.925 15.425h-1v-2.5a2.5 2.5 0 0 0-5 0v2.5h-1v-2.5a3.5 3.5 0 1 1 7 0v2.5zm0 2v2.5a3.5 3.5 0 1 1-7 0v-2.5h1v2.5a2.5 2.5 0 0 0 5 0v-2.5h1zm-3.5-4a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-1 0v-5a.5.5 0 0 1 .5-.5z\"\n\t\t\t/>\n\t\t\t<filter id=\"prefix__a\" x=\"-28.6%\" y=\"-7.1%\" width=\"157.1%\" height=\"128.6%\">\n\t\t\t\t<feOffset dy=\"1\" in=\"SourceAlpha\" result=\"shadowOffsetOuter1\" />\n\t\t\t\t<feGaussianBlur in=\"shadowOffsetOuter1\" result=\"shadowBlurOuter1\" stdDeviation=\".5\" />\n\t\t\t\t<feColorMatrix in=\"shadowBlurOuter1\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0\" />\n\t\t\t</filter>\n\t\t</defs>\n\t\t<g transform=\"rotate(45 22.289 4.682)\" fillRule=\"nonzero\" fill=\"none\">\n\t\t\t<use filter=\"url(#prefix__a)\" xlinkHref=\"#prefix__b\" />\n\t\t\t<use xlinkHref=\"#prefix__b\" />\n\t\t</g>\n\t</svg>\n);\n\nlet windowTitleBarStore;\n\n/**\n * Linker button; located on the left side of the windowTitleBar.\n */\nexport class LinkerButton extends React.Component {\n\tstatic contextType = WindowTitleBarContext;\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bindCorrectContext();\n\t\t/**\n\t\t * We assign in the constructor instead of via a require at the top of the file because the store is initialized asynchronously.\n\t\t */\n\t\twindowTitleBarStore = getStore();\n\t\tthis.state = {\n\t\t\tchannels: {},\n\t\t\tallChannels: {},\n\t\t\tshowLinker: false,\n\t\t\thoverState: \"false\",\n\t\t};\n\t}\n\n\t/**\n\t * This is necessary to make sure that the `this` inside of the callback is correct.\n\t *\n\t * @memberof LinkerButton\n\t */\n\tbindCorrectContext() {\n\t\tthis.onChannelsChange = this.onChannelsChange.bind(this);\n\t\tthis.onAllChannelsChange = this.onAllChannelsChange.bind(this);\n\t\tthis.onShowLinkerButton = this.onShowLinkerButton.bind(this);\n\t\tthis.hoverAction = this.hoverAction.bind(this);\n\t\tthis.showLinkerWindow = this.showLinkerWindow.bind(this);\n\t}\n\n\t/**\n\t * When the user selects/deselects a channel in the linkerWindow, this event listener is invoked.\n\t *\n\t * @param {any} err\n\t * @param {any} response\n\t * @memberof LinkerButton\n\t */\n\tonChannelsChange(err, response) {\n\t\tthis.setState({ channels: response.value });\n\t}\n\n\t/**\n\t * This listener is invoked when a new channel is registered with linkerService.\n\t *\n\t * @param {any} err\n\t * @param {any} response\n\t * @memberof LinkerButton\n\t */\n\tonAllChannelsChange(err, response) {\n\t\tthis.setState({ allChannels: response.value });\n\t}\n\n\t/**\n\t * When we read the config from the window, we determine if the linker button should be shown. When that value changes, this listener is invoked.\n\t *\n\t * @param {any} err\n\t * @param {any} response\n\t * @memberof LinkerButton\n\t */\n\tonShowLinkerButton(err, response) {\n\t\tthis.setState({ showLinker: response.value });\n\t}\n\n\t/**\n\t * When any data in the store changes, we invoke this listener.\n\t *\n\t * @param {any} newState\n\t * @memberof LinkerButton\n\t */\n\tonStoreChanged(newState) {\n\t\tthis.setState(newState);\n\t}\n\n\t/**\n\t * Invoked when the linker button is clicked.\n\t *\n\t * @param {any} e\n\t * @memberof LinkerButton\n\t */\n\tshowLinkerWindow(e) {\n\t\te.persist(); // So that React allows us to access the target\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tlet payload = {\n\t\t\tchannels: FSBL.Clients.LinkerClient.getState().channels,\n\t\t\twindowIdentifier: FSBL.Clients.WindowClient.getWindowIdentifier(),\n\t\t};\n\t\tlet self = this;\n\t\tFSBL.Clients.RouterClient.query(\"Finsemble.LinkerWindow.SetActiveChannels\", payload, () => {\n\t\t\tlet wi = {\n\t\t\t\tcomponentType: \"linkerWindow\",\n\t\t\t};\n\t\t\t// The offset parent is needed so that the menu isn't shown relative to the icon.\n\t\t\t// The HTMLElement.offsetParent read-only property returns a reference to the object which is the closest (nearest in the containment hierarchy) positioned containing element.\n\t\t\tlet linkerParent = self.refs.LinkerButton.offsetParent\n\t\t\t\t? self.refs.LinkerButton.offsetParent\n\t\t\t\t: self.refs.LinkerButton.parentElement;\n\n\t\t\tlet params = {\n\t\t\t\tposition: \"relative\",\n\t\t\t\tleft: linkerParent.offsetLeft,\n\t\t\t\ttop: linkerParent.offsetHeight,\n\t\t\t\tforceOntoMonitor: true,\n\t\t\t\tspawnIfNotFound: false,\n\t\t\t};\n\t\t\t// pass linkerbutton. If it's clicked while the menu is open, we let the blur occur.\n\t\t\tFSBL.Clients.LauncherClient.toggleWindowOnClick(self.refs.LinkerButton, wi, params);\n\t\t});\n\t}\n\n\t/**\n\t * When your mouse enters/leaves the hoverDetector, this function is invoked.\n\t *\n\t * @param {any} newHoverState\n\t * @memberof LinkerButton\n\t */\n\thoverAction(newHoverState) {\n\t\tthis.setState({ hoverState: newHoverState });\n\t}\n\n\t/**\n\t * Add listeners to the store.\n\t *\n\t * @memberof LinkerButton\n\t */\n\tcomponentDidMount() {\n\t\twindowTitleBarStore.addListener({ field: \"Linker.channels\" }, this.onChannelsChange);\n\t\twindowTitleBarStore.addListener({ field: \"Linker.allChannels\" }, this.onAllChannelsChange);\n\t\twindowTitleBarStore.addListener({ field: \"Linker.showLinkerButton\" }, this.onShowLinkerButton);\n\t}\n\n\t/**\n\t * Remove listeners from the store.\n\t *\n\t * @memberof LinkerButton\n\t */\n\tcomponentWillUnmount() {\n\t\twindowTitleBarStore.removeListener({ field: \"Linker.channels\" }, this.onChannelsChange);\n\t\twindowTitleBarStore.removeListener({ field: \"Linker.allChannels\" }, this.onAllChannelsChange);\n\t\twindowTitleBarStore.removeListener({ field: \"Linker.showLinkerButton\" }, this.onShowLinkerButton);\n\t}\n\n\t/**\n\t * Render method.\n\t *\n\t * @returns\n\t * @memberof LinkerButton\n\t */\n\trender() {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{this.context.showLinkerButton && (\n\t\t\t\t\t<div ref=\"LinkerButton\" title=\"Link Data\" className=\"linkerSection\">\n\t\t\t\t\t\t<div className=\"fsbl-icon fsbl-linker\" data-hover={this.state.hoverState} onClick={this.showLinkerWindow}>\n\t\t\t\t\t\t\t<LinkerButtonIcon />\n\t\t\t\t\t\t\t<FinsembleHoverDetector edge=\"top left\" hoverAction={this.hoverAction} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<LinkerGroups />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</>\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"LinkerButtonDeprecated.js","sourceRoot":"","sources":["../../../../../src/components/windowTitleBar/components/left/LinkerButtonDeprecated.jsx"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n *\n * This is a deprecated version of the LinkerButton which uses linkerClient. It is not compatible with FDC3 interop.\n */\nimport * as React from \"react\";\nimport { FinsembleHoverDetector } from \"../../../legacyControls/FinsembleHoverDetector\";\nimport { WindowTitleBarContext } from \"../../windowTitleBarContext\";\nimport LinkerGroups from \"./LinkerGroupsDeprecated\";\nimport { getStore } from \"../../stores/windowTitleBarStore\";\nconst LinkerButtonIcon = () => (\n\t<svg\n\t\twidth=\"15px\"\n\t\theight=\"15px\"\n\t\tviewBox=\"2 1 13 13\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\txmlnsXlink=\"http://www.w3.org/1999/xlink\"\n\t>\n\t\t<title>Linker</title>\n\t\t<defs>\n\t\t\t<path\n\t\t\t\tid=\"prefix__b\"\n\t\t\t\td=\"M17.925 15.425h-1v-2.5a2.5 2.5 0 0 0-5 0v2.5h-1v-2.5a3.5 3.5 0 1 1 7 0v2.5zm0 2v2.5a3.5 3.5 0 1 1-7 0v-2.5h1v2.5a2.5 2.5 0 0 0 5 0v-2.5h1zm-3.5-4a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-1 0v-5a.5.5 0 0 1 .5-.5z\"\n\t\t\t/>\n\t\t\t<filter id=\"prefix__a\" x=\"-28.6%\" y=\"-7.1%\" width=\"157.1%\" height=\"128.6%\">\n\t\t\t\t<feOffset dy=\"1\" in=\"SourceAlpha\" result=\"shadowOffsetOuter1\" />\n\t\t\t\t<feGaussianBlur in=\"shadowOffsetOuter1\" result=\"shadowBlurOuter1\" stdDeviation=\".5\" />\n\t\t\t\t<feColorMatrix in=\"shadowBlurOuter1\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0\" />\n\t\t\t</filter>\n\t\t</defs>\n\t\t<g transform=\"rotate(45 22.289 4.682)\" fillRule=\"nonzero\" fill=\"none\">\n\t\t\t<use filter=\"url(#prefix__a)\" xlinkHref=\"#prefix__b\" />\n\t\t\t<use xlinkHref=\"#prefix__b\" />\n\t\t</g>\n\t</svg>\n);\n\nlet windowTitleBarStore;\n\n/**\n * Linker button; located on the left side of the windowTitleBar.\n */\nexport class LinkerButton extends React.Component {\n\tstatic contextType = WindowTitleBarContext;\n\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bindCorrectContext();\n\t\t/**\n\t\t * We assign in the constructor instead of via a require at the top of the file because the store is initialized asynchronously.\n\t\t */\n\t\twindowTitleBarStore = getStore();\n\t\tthis.state = {\n\t\t\tchannels: {},\n\t\t\tallChannels: {},\n\t\t\tshowLinker: false,\n\t\t\thoverState: \"false\",\n\t\t};\n\t}\n\n\t/**\n\t * This is necessary to make sure that the `this` inside of the callback is correct.\n\t *\n\t * @memberof LinkerButton\n\t */\n\tbindCorrectContext() {\n\t\tthis.onChannelsChange = this.onChannelsChange.bind(this);\n\t\tthis.onAllChannelsChange = this.onAllChannelsChange.bind(this);\n\t\tthis.onShowLinkerButton = this.onShowLinkerButton.bind(this);\n\t\tthis.hoverAction = this.hoverAction.bind(this);\n\t\tthis.showLinkerWindow = this.showLinkerWindow.bind(this);\n\t}\n\n\t/**\n\t * When the user selects/deselects a channel in the linkerWindow, this event listener is invoked.\n\t *\n\t * @param {any} err\n\t * @param {any} response\n\t * @memberof LinkerButton\n\t */\n\tonChannelsChange(err, response) {\n\t\tthis.setState({ channels: response.value });\n\t}\n\n\t/**\n\t * This listener is invoked when a new channel is registered with linkerService.\n\t *\n\t * @param {any} err\n\t * @param {any} response\n\t * @memberof LinkerButton\n\t */\n\tonAllChannelsChange(err, response) {\n\t\tthis.setState({ allChannels: response.value });\n\t}\n\n\t/**\n\t * When we read the config from the window, we determine if the linker button should be shown. When that value changes, this listener is invoked.\n\t *\n\t * @param {any} err\n\t * @param {any} response\n\t * @memberof LinkerButton\n\t */\n\tonShowLinkerButton(err, response) {\n\t\tthis.setState({ showLinker: response.value });\n\t}\n\n\t/**\n\t * When any data in the store changes, we invoke this listener.\n\t *\n\t * @param {any} newState\n\t * @memberof LinkerButton\n\t */\n\tonStoreChanged(newState) {\n\t\tthis.setState(newState);\n\t}\n\n\t/**\n\t * Invoked when the linker button is clicked.\n\t *\n\t * @param {any} e\n\t * @memberof LinkerButton\n\t */\n\tshowLinkerWindow(e) {\n\t\te.persist(); // So that React allows us to access the target\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tlet payload = {\n\t\t\tchannels: FSBL.Clients.LinkerClient.getState().channels,\n\t\t\twindowIdentifier: FSBL.Clients.WindowClient.getWindowIdentifier(),\n\t\t};\n\t\tlet self = this;\n\t\tFSBL.Clients.RouterClient.query(\"Finsemble.LinkerWindow.SetActiveChannels\", payload, () => {\n\t\t\tlet wi = {\n\t\t\t\tcomponentType: \"linkerWindow\",\n\t\t\t};\n\t\t\t// The offset parent is needed so that the menu isn't shown relative to the icon.\n\t\t\t// The HTMLElement.offsetParent read-only property returns a reference to the object which is the closest (nearest in the containment hierarchy) positioned containing element.\n\t\t\tlet linkerParent = self.refs.LinkerButton.offsetParent\n\t\t\t\t? self.refs.LinkerButton.offsetParent\n\t\t\t\t: self.refs.LinkerButton.parentElement;\n\n\t\t\tlet params = {\n\t\t\t\tposition: \"relative\",\n\t\t\t\tleft: linkerParent.offsetLeft,\n\t\t\t\ttop: linkerParent.offsetHeight,\n\t\t\t\tforceOntoMonitor: true,\n\t\t\t\tspawnIfNotFound: false,\n\t\t\t};\n\t\t\t// pass linkerbutton. If it's clicked while the menu is open, we let the blur occur.\n\t\t\tFSBL.Clients.LauncherClient.toggleWindowOnClick(self.refs.LinkerButton, wi, params);\n\t\t});\n\t}\n\n\t/**\n\t * When your mouse enters/leaves the hoverDetector, this function is invoked.\n\t *\n\t * @param {any} newHoverState\n\t * @memberof LinkerButton\n\t */\n\thoverAction(newHoverState) {\n\t\tthis.setState({ hoverState: newHoverState });\n\t}\n\n\t/**\n\t * Add listeners to the store.\n\t *\n\t * @memberof LinkerButton\n\t */\n\tcomponentDidMount() {\n\t\twindowTitleBarStore.addListener({ field: \"Linker.channels\" }, this.onChannelsChange);\n\t\twindowTitleBarStore.addListener({ field: \"Linker.allChannels\" }, this.onAllChannelsChange);\n\t\twindowTitleBarStore.addListener({ field: \"Linker.showLinkerButton\" }, this.onShowLinkerButton);\n\t}\n\n\t/**\n\t * Remove listeners from the store.\n\t *\n\t * @memberof LinkerButton\n\t */\n\tcomponentWillUnmount() {\n\t\twindowTitleBarStore.removeListener({ field: \"Linker.channels\" }, this.onChannelsChange);\n\t\twindowTitleBarStore.removeListener({ field: \"Linker.allChannels\" }, this.onAllChannelsChange);\n\t\twindowTitleBarStore.removeListener({ field: \"Linker.showLinkerButton\" }, this.onShowLinkerButton);\n\t}\n\n\t/**\n\t * Render method.\n\t *\n\t * @returns\n\t * @memberof LinkerButton\n\t */\n\trender() {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{this.context.showLinkerButton && (\n\t\t\t\t\t<div ref=\"LinkerButton\" title=\"Link Data\" className=\"linkerSection\">\n\t\t\t\t\t\t<div className=\"fsbl-icon fsbl-linker\" data-hover={this.state.hoverState} onClick={this.showLinkerWindow}>\n\t\t\t\t\t\t\t<LinkerButtonIcon />\n\t\t\t\t\t\t\t<FinsembleHoverDetector edge=\"top left\" hoverAction={this.hoverAction} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<LinkerGroups />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</>\n\t\t);\n\t}\n}\n"]}
@@ -1,2 +1,6 @@
1
+ /*!
2
+ * Copyright 2017 by ChartIQ, Inc.
3
+ * All rights reserved.
4
+ */
1
5
  import * as React from "react";
2
6
  export declare const LinkerGroups: React.FunctionComponent;