@finsemble/finsemble-ui 6.5.2 → 6.6.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/index.d.ts +1 -0
  2. package/package.json +18 -15
  3. package/react/actions/smartDesktopDesignerActions.d.ts +3 -3
  4. package/react/actions/smartDesktopDesignerActions.js.map +1 -1
  5. package/react/assets/css/finsemble.css +0 -1
  6. package/react/assets/css/toolbar.css +0 -4
  7. package/react/assets/css/userPreferences.css +39 -4
  8. package/react/componentTemplateGenerator.js +1 -1
  9. package/react/componentTemplateGenerator.js.map +1 -1
  10. package/react/components/appCatalog/AppCatalogComponent.d.ts +1 -1
  11. package/react/components/appCatalog/components/Showcase/ImageCarousel.d.ts +3 -3
  12. package/react/components/appCatalog/components/Showcase/SupportNotes.d.ts +1 -1
  13. package/react/components/appCatalog/stores/storeActions.d.ts +1 -1
  14. package/react/components/common/DropdownButton.js.map +1 -1
  15. package/react/components/common/FileInput.d.ts +2 -1
  16. package/react/components/common/FileInput.js +2 -2
  17. package/react/components/common/FileInput.js.map +1 -1
  18. package/react/components/common/FinsembleToggle.d.ts +3 -1
  19. package/react/components/common/FinsembleToggle.js +12 -4
  20. package/react/components/common/FinsembleToggle.js.map +1 -1
  21. package/react/components/common/ImagePreview.js +1 -1
  22. package/react/components/common/ImagePreview.js.map +1 -1
  23. package/react/components/common/TimeSelect.d.ts +16 -0
  24. package/react/components/common/TimeSelect.js +143 -0
  25. package/react/components/common/TimeSelect.js.map +1 -0
  26. package/react/components/common/css/accordion.css +3 -5
  27. package/react/components/common/css/application-edit-page.css +4 -1
  28. package/react/components/common/css/time-select.css +8 -0
  29. package/react/components/common/css/toggle.css +39 -3
  30. package/react/components/common/helpers.js +1 -0
  31. package/react/components/common/helpers.js.map +1 -1
  32. package/react/components/common/stories/FileInput.stories.d.ts +2 -1
  33. package/react/components/common/stories/FileInput.stories.js +6 -0
  34. package/react/components/common/stories/FileInput.stories.js.map +1 -1
  35. package/react/components/common/stories/FinsembleToggle.stories.d.ts +3 -1
  36. package/react/components/common/stories/FinsembleToggle.stories.js +12 -0
  37. package/react/components/common/stories/FinsembleToggle.stories.js.map +1 -1
  38. package/react/components/common/stories/TimeSelect.stories.d.ts +11 -0
  39. package/react/components/common/stories/TimeSelect.stories.js +20 -0
  40. package/react/components/common/stories/TimeSelect.stories.js.map +1 -0
  41. package/react/components/common/tests/Accordion.spec.js +1 -1
  42. package/react/components/common/tests/Accordion.spec.js.map +1 -1
  43. package/react/components/common/tests/FileInput.spec.js +8 -1
  44. package/react/components/common/tests/FileInput.spec.js.map +1 -1
  45. package/react/components/common/tests/FinsembleSelect.spec.js +1 -1
  46. package/react/components/common/tests/FinsembleSelect.spec.js.map +1 -1
  47. package/react/components/common/tests/FinsembleToggle.spec.js +8 -3
  48. package/react/components/common/tests/FinsembleToggle.spec.js.map +1 -1
  49. package/react/components/{smartDesktopDesigner/tests/AppEditPage.spec.d.ts → common/tests/TimeSelect.spec.d.ts} +0 -0
  50. package/react/components/common/tests/TimeSelect.spec.js +71 -0
  51. package/react/components/common/tests/TimeSelect.spec.js.map +1 -0
  52. package/react/components/favorites/FavoriteMaker.js.map +1 -1
  53. package/react/components/favorites/FavoritesShell.spec.js +1 -1
  54. package/react/components/favorites/FavoritesShell.spec.js.map +1 -1
  55. package/react/components/fdc3Resolver/ResolverDialog.spec.js +1 -1
  56. package/react/components/fdc3Resolver/ResolverDialog.spec.js.map +1 -1
  57. package/react/components/icon/Icon.d.ts +4 -3
  58. package/react/components/icon/Icon.js +22 -12
  59. package/react/components/icon/Icon.js.map +1 -1
  60. package/react/components/legacyControls/tests/FinsembleDialogTextInput.spec.js +1 -1
  61. package/react/components/legacyControls/tests/FinsembleDialogTextInput.spec.js.map +1 -1
  62. package/react/components/linker/LinkerMenu.js.map +1 -1
  63. package/react/components/menu/MenuPortal.js +1 -1
  64. package/react/components/menu/MenuPortal.js.map +1 -1
  65. package/react/components/processMonitor/ProcessMonitorTypes.d.ts +4 -11
  66. package/react/components/processMonitor/ProcessMonitorTypes.js.map +1 -1
  67. package/react/components/processMonitor/components/ChildWindow.js +5 -10
  68. package/react/components/processMonitor/components/ChildWindow.js.map +1 -1
  69. package/react/components/processMonitor/components/ProcessStatistics.js +8 -10
  70. package/react/components/processMonitor/components/ProcessStatistics.js.map +1 -1
  71. package/react/components/processMonitor/constants.d.ts +0 -2
  72. package/react/components/processMonitor/constants.js +0 -2
  73. package/react/components/processMonitor/constants.js.map +1 -1
  74. package/react/components/processMonitor/helpers.d.ts +0 -11
  75. package/react/components/processMonitor/helpers.js +1 -9
  76. package/react/components/processMonitor/helpers.js.map +1 -1
  77. package/react/components/processMonitor/stores/ProcessMonitorStore.d.ts +3 -11
  78. package/react/components/processMonitor/stores/ProcessMonitorStore.js +22 -62
  79. package/react/components/processMonitor/stores/ProcessMonitorStore.js.map +1 -1
  80. package/react/components/{smartDesktopDesigner → sdd}/AddApp.d.ts +0 -0
  81. package/react/components/{smartDesktopDesigner → sdd}/AddApp.js +0 -0
  82. package/react/components/sdd/AddApp.js.map +1 -0
  83. package/react/components/{smartDesktopDesigner → sdd}/AppEditAccess.d.ts +0 -0
  84. package/react/components/{smartDesktopDesigner → sdd}/AppEditAccess.js +0 -0
  85. package/react/components/sdd/AppEditAccess.js.map +1 -0
  86. package/react/components/{smartDesktopDesigner → sdd}/AppEditPage.d.ts +0 -0
  87. package/react/components/{smartDesktopDesigner → sdd}/AppEditPage.js +7 -1
  88. package/react/components/sdd/AppEditPage.js.map +1 -0
  89. package/react/components/{smartDesktopDesigner → sdd}/Appearance.css +0 -0
  90. package/react/components/{smartDesktopDesigner → sdd}/Appearance.d.ts +0 -0
  91. package/react/components/{smartDesktopDesigner → sdd}/Appearance.helpers.d.ts +0 -0
  92. package/react/components/{smartDesktopDesigner → sdd}/Appearance.helpers.js +0 -0
  93. package/react/components/sdd/Appearance.helpers.js.map +1 -0
  94. package/react/components/{smartDesktopDesigner → sdd}/Appearance.js +0 -0
  95. package/react/components/sdd/Appearance.js.map +1 -0
  96. package/react/components/{smartDesktopDesigner → sdd}/Application.d.ts +1 -2
  97. package/react/components/{smartDesktopDesigner → sdd}/Application.js +37 -39
  98. package/react/components/sdd/Application.js.map +1 -0
  99. package/react/components/{smartDesktopDesigner → sdd}/Applications.d.ts +0 -0
  100. package/react/components/{smartDesktopDesigner → sdd}/Applications.js +2 -2
  101. package/react/components/sdd/Applications.js.map +1 -0
  102. package/react/components/{smartDesktopDesigner → sdd}/AssetsPage.css +0 -0
  103. package/react/components/{smartDesktopDesigner → sdd}/AssetsPage.d.ts +0 -0
  104. package/react/components/{smartDesktopDesigner → sdd}/AssetsPage.js +0 -0
  105. package/react/components/sdd/AssetsPage.js.map +1 -0
  106. package/react/components/{smartDesktopDesigner → sdd}/Authentication.d.ts +0 -0
  107. package/react/components/{smartDesktopDesigner → sdd}/Authentication.js +1 -1
  108. package/react/components/sdd/Authentication.js.map +1 -0
  109. package/react/components/{smartDesktopDesigner → sdd}/AuthenticationProviderConfig.d.ts +0 -0
  110. package/react/components/{smartDesktopDesigner → sdd}/AuthenticationProviderConfig.js +0 -0
  111. package/react/components/sdd/AuthenticationProviderConfig.js.map +1 -0
  112. package/react/components/{smartDesktopDesigner → sdd}/Content.d.ts +0 -0
  113. package/react/components/{smartDesktopDesigner → sdd}/Content.js +0 -0
  114. package/react/components/sdd/Content.js.map +1 -0
  115. package/react/components/{smartDesktopDesigner → sdd}/ContentHeader.d.ts +0 -0
  116. package/react/components/{smartDesktopDesigner → sdd}/ContentHeader.js +0 -0
  117. package/react/components/sdd/ContentHeader.js.map +1 -0
  118. package/react/components/{smartDesktopDesigner → sdd}/CurrentView.d.ts +0 -0
  119. package/react/components/{smartDesktopDesigner → sdd}/CurrentView.js +0 -0
  120. package/react/components/sdd/CurrentView.js.map +1 -0
  121. package/react/components/{smartDesktopDesigner → sdd}/EditPreload.d.ts +5 -7
  122. package/react/components/sdd/EditPreload.js +156 -0
  123. package/react/components/sdd/EditPreload.js.map +1 -0
  124. package/react/components/{smartDesktopDesigner → sdd}/Export.d.ts +0 -0
  125. package/react/components/{smartDesktopDesigner → sdd}/Export.js +0 -0
  126. package/react/components/sdd/Export.js.map +1 -0
  127. package/react/components/{smartDesktopDesigner → sdd}/ExportCloud.d.ts +0 -0
  128. package/react/components/{smartDesktopDesigner → sdd}/ExportCloud.js +0 -0
  129. package/react/components/sdd/ExportCloud.js.map +1 -0
  130. package/react/components/{smartDesktopDesigner → sdd}/ExportDeployInfo.d.ts +0 -0
  131. package/react/components/{smartDesktopDesigner → sdd}/ExportDeployInfo.js +0 -0
  132. package/react/components/sdd/ExportDeployInfo.js.map +1 -0
  133. package/react/components/{smartDesktopDesigner → sdd}/ExportZip.d.ts +0 -0
  134. package/react/components/{smartDesktopDesigner → sdd}/ExportZip.js +0 -0
  135. package/react/components/sdd/ExportZip.js.map +1 -0
  136. package/react/components/{smartDesktopDesigner → sdd}/GettingStarted.d.ts +0 -0
  137. package/react/components/{smartDesktopDesigner → sdd}/GettingStarted.js +0 -0
  138. package/react/components/sdd/GettingStarted.js.map +1 -0
  139. package/react/components/{smartDesktopDesigner → sdd}/ItemList.d.ts +0 -0
  140. package/react/components/{smartDesktopDesigner → sdd}/ItemList.js +0 -0
  141. package/react/components/sdd/ItemList.js.map +1 -0
  142. package/react/components/{smartDesktopDesigner → sdd}/Navigation.d.ts +0 -0
  143. package/react/components/{smartDesktopDesigner → sdd}/Navigation.js +0 -0
  144. package/react/components/sdd/Navigation.js.map +1 -0
  145. package/react/components/{smartDesktopDesigner → sdd}/OptionalSettingsView.d.ts +1 -3
  146. package/react/components/sdd/OptionalSettingsView.js +56 -0
  147. package/react/components/sdd/OptionalSettingsView.js.map +1 -0
  148. package/react/components/sdd/Preloads.d.ts +6 -0
  149. package/react/components/sdd/Preloads.js +24 -0
  150. package/react/components/sdd/Preloads.js.map +1 -0
  151. package/react/components/{smartDesktopDesigner → sdd}/ProjectErrors.d.ts +0 -0
  152. package/react/components/{smartDesktopDesigner → sdd}/ProjectErrors.js +0 -0
  153. package/react/components/sdd/ProjectErrors.js.map +1 -0
  154. package/react/components/{smartDesktopDesigner → sdd}/Publish.d.ts +0 -0
  155. package/react/components/{smartDesktopDesigner → sdd}/Publish.js +0 -0
  156. package/react/components/sdd/Publish.js.map +1 -0
  157. package/react/components/{smartDesktopDesigner → sdd}/PublishProgress.d.ts +0 -0
  158. package/react/components/{smartDesktopDesigner → sdd}/PublishProgress.js +0 -0
  159. package/react/components/sdd/PublishProgress.js.map +1 -0
  160. package/react/components/sdd/SmartDesktopDesigner.d.ts +29 -0
  161. package/react/components/sdd/SmartDesktopDesigner.js +122 -0
  162. package/react/components/sdd/SmartDesktopDesigner.js.map +1 -0
  163. package/react/components/{smartDesktopDesigner → sdd}/ThemePage.css +0 -0
  164. package/react/components/{smartDesktopDesigner → sdd}/ThemePage.d.ts +0 -0
  165. package/react/components/{smartDesktopDesigner → sdd}/ThemePage.js +0 -0
  166. package/react/components/sdd/ThemePage.js.map +1 -0
  167. package/react/components/{smartDesktopDesigner → sdd}/Themes.d.ts +0 -0
  168. package/react/components/{smartDesktopDesigner → sdd}/Themes.js +0 -0
  169. package/react/components/sdd/Themes.js.map +1 -0
  170. package/react/components/{smartDesktopDesigner → sdd}/Toolbar.d.ts +0 -0
  171. package/react/components/{smartDesktopDesigner → sdd}/Toolbar.js +9 -7
  172. package/react/components/sdd/Toolbar.js.map +1 -0
  173. package/react/components/{smartDesktopDesigner → sdd}/View.d.ts +0 -0
  174. package/react/components/{smartDesktopDesigner → sdd}/View.js +0 -0
  175. package/react/components/sdd/View.js.map +1 -0
  176. package/react/components/{smartDesktopDesigner → sdd}/common/fsbl_functions.d.ts +0 -0
  177. package/react/components/{smartDesktopDesigner → sdd}/common/fsbl_functions.js +0 -0
  178. package/react/components/sdd/common/fsbl_functions.js.map +1 -0
  179. package/react/components/{smartDesktopDesigner → sdd}/common/getCSSVars.d.ts +0 -0
  180. package/react/components/{smartDesktopDesigner → sdd}/common/getCSSVars.js +0 -0
  181. package/react/components/sdd/common/getCSSVars.js.map +1 -0
  182. package/react/components/sdd/common/setPreloadDefaults.d.ts +1 -0
  183. package/react/components/sdd/common/setPreloadDefaults.js +21 -0
  184. package/react/components/sdd/common/setPreloadDefaults.js.map +1 -0
  185. package/react/components/{smartDesktopDesigner/fixtures → sdd/common}/views.d.ts +0 -0
  186. package/react/components/sdd/common/views.js +202 -0
  187. package/react/components/sdd/common/views.js.map +1 -0
  188. package/react/components/{smartDesktopDesigner → sdd}/css/appearance.css +0 -0
  189. package/react/components/{smartDesktopDesigner → sdd}/css/applications.css +0 -0
  190. package/react/components/{smartDesktopDesigner → sdd}/css/authentication.css +5 -1
  191. package/react/components/{smartDesktopDesigner → sdd}/css/buttons.css +0 -0
  192. package/react/components/{smartDesktopDesigner → sdd}/css/export.css +0 -0
  193. package/react/components/{smartDesktopDesigner → sdd}/css/getting-started.css +0 -0
  194. package/react/components/{smartDesktopDesigner → sdd}/css/nav.css +0 -0
  195. package/react/components/{smartDesktopDesigner → sdd}/css/project-errors.css +0 -0
  196. package/react/components/{smartDesktopDesigner → sdd}/css/project-header.css +0 -0
  197. package/react/components/{smartDesktopDesigner → sdd}/css/styles.css +0 -0
  198. package/react/components/{smartDesktopDesigner → sdd}/css/views.css +0 -1
  199. package/react/components/{smartDesktopDesigner → sdd}/fixtures/apps.d.ts +0 -0
  200. package/react/components/{smartDesktopDesigner → sdd}/fixtures/apps.js +10 -10
  201. package/react/components/sdd/fixtures/apps.js.map +1 -0
  202. package/react/components/{smartDesktopDesigner → sdd}/fixtures/authenticationProps.d.ts +0 -0
  203. package/react/components/{smartDesktopDesigner → sdd}/fixtures/authenticationProps.js +0 -0
  204. package/react/components/sdd/fixtures/authenticationProps.js.map +1 -0
  205. package/react/components/{smartDesktopDesigner → sdd}/fixtures/configTemplate.d.ts +1 -1
  206. package/react/components/{smartDesktopDesigner → sdd}/fixtures/configTemplate.js +1 -1
  207. package/react/components/sdd/fixtures/configTemplate.js.map +1 -0
  208. package/react/components/{smartDesktopDesigner → sdd}/fixtures/exportProps.d.ts +0 -0
  209. package/react/components/{smartDesktopDesigner → sdd}/fixtures/exportProps.js +0 -0
  210. package/react/components/sdd/fixtures/exportProps.js.map +1 -0
  211. package/react/components/sdd/fixtures/preloads.d.ts +3 -0
  212. package/react/components/sdd/fixtures/preloads.js +57 -0
  213. package/react/components/sdd/fixtures/preloads.js.map +1 -0
  214. package/react/components/{smartDesktopDesigner → sdd}/fixtures/projectErrorsProps.d.ts +0 -0
  215. package/react/components/{smartDesktopDesigner → sdd}/fixtures/projectErrorsProps.js +0 -0
  216. package/react/components/sdd/fixtures/projectErrorsProps.js.map +1 -0
  217. package/react/components/{smartDesktopDesigner → sdd}/fixtures/publishProgress.d.ts +0 -0
  218. package/react/components/{smartDesktopDesigner → sdd}/fixtures/publishProgress.js +0 -0
  219. package/react/components/sdd/fixtures/publishProgress.js.map +1 -0
  220. package/react/components/{smartDesktopDesigner → sdd}/fixtures/themeProps.d.ts +0 -0
  221. package/react/components/{smartDesktopDesigner → sdd}/fixtures/themeProps.js +0 -0
  222. package/react/components/sdd/fixtures/themeProps.js.map +1 -0
  223. package/react/components/sdd/fixtures/views.d.ts +3 -0
  224. package/react/components/{smartDesktopDesigner → sdd}/fixtures/views.js +0 -0
  225. package/react/components/sdd/fixtures/views.js.map +1 -0
  226. package/react/components/{smartDesktopDesigner → sdd}/sdd_helpers.d.ts +0 -0
  227. package/react/components/{smartDesktopDesigner → sdd}/sdd_helpers.js +0 -0
  228. package/react/components/sdd/sdd_helpers.js.map +1 -0
  229. package/react/components/{smartDesktopDesigner → sdd}/stories/AppEditPage.stories.d.ts +0 -0
  230. package/react/components/{smartDesktopDesigner → sdd}/stories/AppEditPage.stories.js +0 -0
  231. package/react/components/sdd/stories/AppEditPage.stories.js.map +1 -0
  232. package/react/components/{smartDesktopDesigner → sdd}/stories/Appearance.stories.d.ts +0 -0
  233. package/react/components/{smartDesktopDesigner → sdd}/stories/Appearance.stories.js +0 -0
  234. package/react/components/sdd/stories/Appearance.stories.js.map +1 -0
  235. package/react/components/{smartDesktopDesigner → sdd}/stories/Applications.stories.d.ts +0 -0
  236. package/react/components/{smartDesktopDesigner → sdd}/stories/Applications.stories.js +0 -0
  237. package/react/components/sdd/stories/Applications.stories.js.map +1 -0
  238. package/react/components/{smartDesktopDesigner → sdd}/stories/AssetsPage.stories.d.ts +0 -0
  239. package/react/components/{smartDesktopDesigner → sdd}/stories/AssetsPage.stories.js +0 -0
  240. package/react/components/sdd/stories/AssetsPage.stories.js.map +1 -0
  241. package/react/components/{smartDesktopDesigner → sdd}/stories/Authentication.stories.d.ts +0 -0
  242. package/react/components/{smartDesktopDesigner → sdd}/stories/Authentication.stories.js +0 -0
  243. package/react/components/sdd/stories/Authentication.stories.js.map +1 -0
  244. package/react/components/{smartDesktopDesigner → sdd}/stories/ContentHeader.stories.d.ts +0 -0
  245. package/react/components/{smartDesktopDesigner → sdd}/stories/ContentHeader.stories.js +0 -0
  246. package/react/components/sdd/stories/ContentHeader.stories.js.map +1 -0
  247. package/react/components/{smartDesktopDesigner → sdd}/stories/Export.stories.d.ts +0 -0
  248. package/react/components/{smartDesktopDesigner → sdd}/stories/Export.stories.js +0 -0
  249. package/react/components/sdd/stories/Export.stories.js.map +1 -0
  250. package/react/components/{smartDesktopDesigner → sdd}/stories/ExportCloud.stories.d.ts +0 -0
  251. package/react/components/{smartDesktopDesigner → sdd}/stories/ExportCloud.stories.js +0 -0
  252. package/react/components/sdd/stories/ExportCloud.stories.js.map +1 -0
  253. package/react/components/{smartDesktopDesigner → sdd}/stories/ExportZip.stories.d.ts +0 -0
  254. package/react/components/{smartDesktopDesigner → sdd}/stories/ExportZip.stories.js +0 -0
  255. package/react/components/sdd/stories/ExportZip.stories.js.map +1 -0
  256. package/react/components/{smartDesktopDesigner → sdd}/stories/GettingStarted.stories.d.ts +0 -0
  257. package/react/components/{smartDesktopDesigner → sdd}/stories/GettingStarted.stories.js +0 -0
  258. package/react/components/sdd/stories/GettingStarted.stories.js.map +1 -0
  259. package/react/components/{smartDesktopDesigner → sdd}/stories/ItemList.stories.d.ts +0 -0
  260. package/react/components/{smartDesktopDesigner → sdd}/stories/ItemList.stories.js +0 -0
  261. package/react/components/sdd/stories/ItemList.stories.js.map +1 -0
  262. package/react/components/{smartDesktopDesigner → sdd}/stories/Navigation.stories.d.ts +0 -0
  263. package/react/components/{smartDesktopDesigner → sdd}/stories/Navigation.stories.js +0 -0
  264. package/react/components/sdd/stories/Navigation.stories.js.map +1 -0
  265. package/react/components/{smartDesktopDesigner → sdd}/stories/OptionalSettingsView.stories.d.ts +3 -2
  266. package/react/components/sdd/stories/OptionalSettingsView.stories.js +27 -0
  267. package/react/components/sdd/stories/OptionalSettingsView.stories.js.map +1 -0
  268. package/react/components/{smartDesktopDesigner → sdd}/stories/ProjectErrors.stories.d.ts +0 -0
  269. package/react/components/{smartDesktopDesigner → sdd}/stories/ProjectErrors.stories.js +0 -0
  270. package/react/components/sdd/stories/ProjectErrors.stories.js.map +1 -0
  271. package/react/components/{smartDesktopDesigner → sdd}/stories/Publish.stories.d.ts +0 -0
  272. package/react/components/{smartDesktopDesigner → sdd}/stories/Publish.stories.js +0 -0
  273. package/react/components/sdd/stories/Publish.stories.js.map +1 -0
  274. package/react/components/{smartDesktopDesigner → sdd}/stories/PublishProgress.stories.d.ts +0 -0
  275. package/react/components/{smartDesktopDesigner → sdd}/stories/PublishProgress.stories.js +0 -0
  276. package/react/components/sdd/stories/PublishProgress.stories.js.map +1 -0
  277. package/react/components/{smartDesktopDesigner → sdd}/stories/SmartDesktopDesigner.stories.d.ts +0 -0
  278. package/react/components/{smartDesktopDesigner → sdd}/stories/SmartDesktopDesigner.stories.js +1 -0
  279. package/react/components/sdd/stories/SmartDesktopDesigner.stories.js.map +1 -0
  280. package/react/components/{smartDesktopDesigner → sdd}/stories/ThemePage.stories.d.ts +0 -0
  281. package/react/components/{smartDesktopDesigner → sdd}/stories/ThemePage.stories.js +0 -0
  282. package/react/components/sdd/stories/ThemePage.stories.js.map +1 -0
  283. package/react/components/{smartDesktopDesigner → sdd}/stories/Themes.stories.d.ts +0 -0
  284. package/react/components/{smartDesktopDesigner → sdd}/stories/Themes.stories.js +0 -0
  285. package/react/components/sdd/stories/Themes.stories.js.map +1 -0
  286. package/react/components/{smartDesktopDesigner → sdd}/stories/Toolbar.stories.d.ts +0 -0
  287. package/react/components/{smartDesktopDesigner → sdd}/stories/Toolbar.stories.js +0 -0
  288. package/react/components/sdd/stories/Toolbar.stories.js.map +1 -0
  289. package/react/components/{smartDesktopDesigner/tests/Application.spec.d.ts → sdd/tests/AppEditPage.spec.d.ts} +0 -0
  290. package/react/components/{smartDesktopDesigner → sdd}/tests/AppEditPage.spec.js +0 -0
  291. package/react/components/sdd/tests/AppEditPage.spec.js.map +1 -0
  292. package/react/components/{smartDesktopDesigner/tests/Authentication.spec.d.ts → sdd/tests/Application.spec.d.ts} +0 -0
  293. package/react/components/{smartDesktopDesigner → sdd}/tests/Application.spec.js +13 -31
  294. package/react/components/sdd/tests/Application.spec.js.map +1 -0
  295. package/react/components/{smartDesktopDesigner → sdd}/tests/Applications.spec.d.ts +0 -0
  296. package/react/components/{smartDesktopDesigner → sdd}/tests/Applications.spec.js +0 -0
  297. package/react/components/sdd/tests/Applications.spec.js.map +1 -0
  298. package/react/components/{smartDesktopDesigner/tests/ContentHeader.spec.d.ts → sdd/tests/Authentication.spec.d.ts} +0 -0
  299. package/react/components/{smartDesktopDesigner → sdd}/tests/Authentication.spec.js +0 -0
  300. package/react/components/sdd/tests/Authentication.spec.js.map +1 -0
  301. package/react/components/{smartDesktopDesigner/tests/EditPreload.spec.d.ts → sdd/tests/ContentHeader.spec.d.ts} +0 -0
  302. package/react/components/{smartDesktopDesigner → sdd}/tests/ContentHeader.spec.js +0 -0
  303. package/react/components/sdd/tests/ContentHeader.spec.js.map +1 -0
  304. package/react/components/{smartDesktopDesigner/tests/Export.spec.d.ts → sdd/tests/EditPreload.spec.d.ts} +0 -0
  305. package/react/components/{smartDesktopDesigner → sdd}/tests/EditPreload.spec.js +8 -10
  306. package/react/components/sdd/tests/EditPreload.spec.js.map +1 -0
  307. package/react/components/{smartDesktopDesigner/tests/ExportZip.spec.d.ts → sdd/tests/Export.spec.d.ts} +0 -0
  308. package/react/components/{smartDesktopDesigner → sdd}/tests/Export.spec.js +0 -0
  309. package/react/components/sdd/tests/Export.spec.js.map +1 -0
  310. package/react/components/{smartDesktopDesigner/tests/ItemList.spec.d.ts → sdd/tests/ExportZip.spec.d.ts} +0 -0
  311. package/react/components/{smartDesktopDesigner → sdd}/tests/ExportZip.spec.js +0 -0
  312. package/react/components/sdd/tests/ExportZip.spec.js.map +1 -0
  313. package/react/components/{smartDesktopDesigner/tests/Navigation.spec.d.ts → sdd/tests/ItemList.spec.d.ts} +0 -0
  314. package/react/components/{smartDesktopDesigner → sdd}/tests/ItemList.spec.js +0 -0
  315. package/react/components/sdd/tests/ItemList.spec.js.map +1 -0
  316. package/react/components/{smartDesktopDesigner/tests/Preloads.spec.d.ts → sdd/tests/Navigation.spec.d.ts} +0 -0
  317. package/react/components/{smartDesktopDesigner → sdd}/tests/Navigation.spec.js +0 -0
  318. package/react/components/sdd/tests/Navigation.spec.js.map +1 -0
  319. package/react/components/{smartDesktopDesigner/tests/ProjectErrors.spec.d.ts → sdd/tests/OptionalSettingsView.spec.d.ts} +0 -0
  320. package/react/components/sdd/tests/OptionalSettingsView.spec.js +22 -0
  321. package/react/components/sdd/tests/OptionalSettingsView.spec.js.map +1 -0
  322. package/react/components/{smartDesktopDesigner/tests/Publish.spec.d.ts → sdd/tests/ProjectErrors.spec.d.ts} +0 -0
  323. package/react/components/{smartDesktopDesigner → sdd}/tests/ProjectErrors.spec.js +0 -0
  324. package/react/components/sdd/tests/ProjectErrors.spec.js.map +1 -0
  325. package/react/components/{smartDesktopDesigner/tests/PublishProgess.spec.d.ts → sdd/tests/Publish.spec.d.ts} +0 -0
  326. package/react/components/{smartDesktopDesigner → sdd}/tests/Publish.spec.js +0 -0
  327. package/react/components/sdd/tests/Publish.spec.js.map +1 -0
  328. package/react/components/{smartDesktopDesigner/tests/SmartDesktopDesigner.spec.d.ts → sdd/tests/PublishProgess.spec.d.ts} +0 -0
  329. package/react/components/{smartDesktopDesigner → sdd}/tests/PublishProgess.spec.js +0 -0
  330. package/react/components/sdd/tests/PublishProgess.spec.js.map +1 -0
  331. package/react/components/{smartDesktopDesigner/tests/Themes.spec.d.ts → sdd/tests/SmartDesktopDesigner.spec.d.ts} +0 -0
  332. package/react/components/{smartDesktopDesigner → sdd}/tests/SmartDesktopDesigner.spec.js +1 -1
  333. package/react/components/sdd/tests/SmartDesktopDesigner.spec.js.map +1 -0
  334. package/react/components/{smartDesktopDesigner/tests/sdd_helpers.spec.d.ts → sdd/tests/Themes.spec.d.ts} +0 -0
  335. package/react/components/{smartDesktopDesigner → sdd}/tests/Themes.spec.js +0 -0
  336. package/react/components/sdd/tests/Themes.spec.js.map +1 -0
  337. package/react/components/{smartDesktopDesigner → sdd}/tests/Toolbar.spec.d.ts +0 -0
  338. package/react/components/{smartDesktopDesigner → sdd}/tests/Toolbar.spec.js +0 -0
  339. package/react/components/sdd/tests/Toolbar.spec.js.map +1 -0
  340. package/react/components/{smartDesktopDesigner → sdd}/tests/a11y_helper.d.ts +0 -0
  341. package/react/components/{smartDesktopDesigner → sdd}/tests/a11y_helper.js +0 -0
  342. package/react/components/sdd/tests/a11y_helper.js.map +1 -0
  343. package/react/components/{userPreferences/tests/ScheduledRestart.spec.d.ts → sdd/tests/sdd_helpers.spec.d.ts} +0 -0
  344. package/react/components/{smartDesktopDesigner → sdd}/tests/sdd_helpers.spec.js +0 -0
  345. package/react/components/sdd/tests/sdd_helpers.spec.js.map +1 -0
  346. package/react/components/{smartDesktopDesigner → sdd}/themeDefinitions.d.ts +0 -0
  347. package/react/components/{smartDesktopDesigner → sdd}/themeDefinitions.js +0 -0
  348. package/react/components/sdd/themeDefinitions.js.map +1 -0
  349. package/react/components/search/SearchBestMatch.js.map +1 -1
  350. package/react/components/search/SearchProviderResults.d.ts +3 -1
  351. package/react/components/search/SearchProviderResults.js.map +1 -1
  352. package/react/components/search/SearchResult.d.ts +3 -1
  353. package/react/components/search/SearchResult.js +9 -7
  354. package/react/components/search/SearchResult.js.map +1 -1
  355. package/react/components/shared/DefaultDropdownButton.js +5 -4
  356. package/react/components/shared/DefaultDropdownButton.js.map +1 -1
  357. package/react/components/shared/tests/DefaultDropdownButton.spec.js +9 -0
  358. package/react/components/shared/tests/DefaultDropdownButton.spec.js.map +1 -1
  359. package/react/components/singleInputDialog/SingleInputDialog.spec.js +1 -1
  360. package/react/components/singleInputDialog/SingleInputDialog.spec.js.map +1 -1
  361. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.d.ts +0 -11
  362. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js +2 -116
  363. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js.map +1 -1
  364. package/react/components/smartDesktopDesigner/common/views.js +1 -203
  365. package/react/components/smartDesktopDesigner/common/views.js.map +1 -1
  366. package/react/components/toolbar/AutoArrange.js +1 -1
  367. package/react/components/toolbar/AutoArrange.js.map +1 -1
  368. package/react/components/toolbar/AutoArrange.spec.d.ts +1 -0
  369. package/react/components/toolbar/AutoArrange.spec.js +48 -0
  370. package/react/components/toolbar/AutoArrange.spec.js.map +1 -0
  371. package/react/components/toolbar/AutoArrange.stories.d.ts +11 -0
  372. package/react/components/toolbar/AutoArrange.stories.js +21 -0
  373. package/react/components/toolbar/AutoArrange.stories.js.map +1 -0
  374. package/react/components/toolbar/SddButton.d.ts +2 -0
  375. package/react/components/toolbar/SddButton.js +23 -0
  376. package/react/components/toolbar/SddButton.js.map +1 -0
  377. package/react/components/toolbar/ToolbarShell.js +4 -1
  378. package/react/components/toolbar/ToolbarShell.js.map +1 -1
  379. package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.js +2 -1
  380. package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.js.map +1 -1
  381. package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.d.ts +3 -2
  382. package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.js.map +1 -1
  383. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js.map +1 -1
  384. package/react/components/toolbar/appLauncher/AppLauncherMenu.js +15 -4
  385. package/react/components/toolbar/appLauncher/AppLauncherMenu.js.map +1 -1
  386. package/react/components/toolbar/appLauncher/components/componentList.js +3 -4
  387. package/react/components/toolbar/appLauncher/components/componentList.js.map +1 -1
  388. package/react/components/toolbar/dashbar/Dashbar.js +2 -0
  389. package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
  390. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js +71 -12
  391. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js.map +1 -1
  392. package/react/components/userPreferences/UserPreferenceTypes.d.ts +3 -2
  393. package/react/components/userPreferences/UserPreferenceTypes.js.map +1 -1
  394. package/react/components/userPreferences/components/content/General.d.ts +2 -5
  395. package/react/components/userPreferences/components/content/General.js +31 -11
  396. package/react/components/userPreferences/components/content/General.js.map +1 -1
  397. package/react/components/userPreferences/components/content/Workspaces.d.ts +5 -0
  398. package/react/components/userPreferences/components/content/Workspaces.js +58 -17
  399. package/react/components/userPreferences/components/content/Workspaces.js.map +1 -1
  400. package/react/components/userPreferences/components/general/ScheduledClose.d.ts +10 -0
  401. package/react/components/userPreferences/components/general/ScheduledClose.js +95 -0
  402. package/react/components/userPreferences/components/general/ScheduledClose.js.map +1 -0
  403. package/react/components/userPreferences/stores/UserPreferencesStore.d.ts +6 -2
  404. package/react/components/userPreferences/stores/UserPreferencesStore.js +19 -3
  405. package/react/components/userPreferences/stores/UserPreferencesStore.js.map +1 -1
  406. package/react/components/userPreferences/stories/General.stories.d.ts +6 -2
  407. package/react/components/userPreferences/stories/ScheduledClose.stories.d.ts +12 -0
  408. package/react/components/userPreferences/stories/ScheduledClose.stories.js +53 -0
  409. package/react/components/userPreferences/stories/ScheduledClose.stories.js.map +1 -0
  410. package/react/components/userPreferences/tests/General.spec.js +4 -17
  411. package/react/components/userPreferences/tests/General.spec.js.map +1 -1
  412. package/react/components/userPreferences/tests/ScheduledClose.spec.d.ts +1 -0
  413. package/react/components/userPreferences/tests/ScheduledClose.spec.js +47 -0
  414. package/react/components/userPreferences/tests/ScheduledClose.spec.js.map +1 -0
  415. package/react/components/windowTitleBar/WindowTitleBarShell.d.ts +1 -0
  416. package/react/components/windowTitleBar/WindowTitleBarShell.js +16 -6
  417. package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
  418. package/react/components/windowTitleBar/components/center/TabList.js +2 -2
  419. package/react/components/windowTitleBar/components/center/TabList.js.map +1 -1
  420. package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
  421. package/react/components/windowTitleBar/components/windowTitle.js +11 -10
  422. package/react/components/windowTitleBar/components/windowTitle.js.map +1 -1
  423. package/react/components/windowTitleBar/stores/windowTitleBarStore.js +12 -9
  424. package/react/components/windowTitleBar/stores/windowTitleBarStore.js.map +1 -1
  425. package/react/components/yesNoDialog/Timer.spec.js +1 -1
  426. package/react/components/yesNoDialog/Timer.spec.js.map +1 -1
  427. package/react/components/yesNoDialog/YesNoDialog.spec.js +1 -1
  428. package/react/components/yesNoDialog/YesNoDialog.spec.js.map +1 -1
  429. package/react/hooks/useSearch.d.ts +2 -1
  430. package/react/hooks/useSearch.js.map +1 -1
  431. package/react/hooks/useToolbar.js +6 -0
  432. package/react/hooks/useToolbar.js.map +1 -1
  433. package/react/reducers/rootReducer.d.ts +1 -1
  434. package/react/reducers/smartDesktopDesignerReducer.js +1 -1
  435. package/react/reducers/smartDesktopDesignerReducer.js.map +1 -1
  436. package/react/store.d.ts +2 -2
  437. package/react/types/advancedAppLauncherTypes.d.ts +5 -3
  438. package/react/types/advancedAppLauncherTypes.js.map +1 -1
  439. package/react/types/favoriteTypes.d.ts +4 -2
  440. package/react/types/favoriteTypes.js.map +1 -1
  441. package/react/types/smartDesktopDesignerTypes.d.ts +9 -1
  442. package/react/types/smartDesktopDesignerTypes.js.map +1 -1
  443. package/react/components/smartDesktopDesigner/AddApp.js.map +0 -1
  444. package/react/components/smartDesktopDesigner/AppEditAccess.js.map +0 -1
  445. package/react/components/smartDesktopDesigner/AppEditPage.js.map +0 -1
  446. package/react/components/smartDesktopDesigner/Appearance.helpers.js.map +0 -1
  447. package/react/components/smartDesktopDesigner/Appearance.js.map +0 -1
  448. package/react/components/smartDesktopDesigner/Application.js.map +0 -1
  449. package/react/components/smartDesktopDesigner/Applications.js.map +0 -1
  450. package/react/components/smartDesktopDesigner/AssetsPage.js.map +0 -1
  451. package/react/components/smartDesktopDesigner/Authentication.js.map +0 -1
  452. package/react/components/smartDesktopDesigner/AuthenticationProviderConfig.js.map +0 -1
  453. package/react/components/smartDesktopDesigner/Content.js.map +0 -1
  454. package/react/components/smartDesktopDesigner/ContentHeader.js.map +0 -1
  455. package/react/components/smartDesktopDesigner/CurrentView.js.map +0 -1
  456. package/react/components/smartDesktopDesigner/EditPreload.js +0 -169
  457. package/react/components/smartDesktopDesigner/EditPreload.js.map +0 -1
  458. package/react/components/smartDesktopDesigner/Export.js.map +0 -1
  459. package/react/components/smartDesktopDesigner/ExportCloud.js.map +0 -1
  460. package/react/components/smartDesktopDesigner/ExportDeployInfo.js.map +0 -1
  461. package/react/components/smartDesktopDesigner/ExportZip.js.map +0 -1
  462. package/react/components/smartDesktopDesigner/GettingStarted.js.map +0 -1
  463. package/react/components/smartDesktopDesigner/ItemList.js.map +0 -1
  464. package/react/components/smartDesktopDesigner/Navigation.js.map +0 -1
  465. package/react/components/smartDesktopDesigner/OptionalSettingsView.js +0 -71
  466. package/react/components/smartDesktopDesigner/OptionalSettingsView.js.map +0 -1
  467. package/react/components/smartDesktopDesigner/Preloads.d.ts +0 -8
  468. package/react/components/smartDesktopDesigner/Preloads.js +0 -26
  469. package/react/components/smartDesktopDesigner/Preloads.js.map +0 -1
  470. package/react/components/smartDesktopDesigner/ProjectErrors.js.map +0 -1
  471. package/react/components/smartDesktopDesigner/Publish.js.map +0 -1
  472. package/react/components/smartDesktopDesigner/PublishProgress.js.map +0 -1
  473. package/react/components/smartDesktopDesigner/ThemePage.js.map +0 -1
  474. package/react/components/smartDesktopDesigner/Themes.js.map +0 -1
  475. package/react/components/smartDesktopDesigner/Toolbar.js.map +0 -1
  476. package/react/components/smartDesktopDesigner/View.js.map +0 -1
  477. package/react/components/smartDesktopDesigner/common/fsbl_functions.js.map +0 -1
  478. package/react/components/smartDesktopDesigner/common/getCSSVars.js.map +0 -1
  479. package/react/components/smartDesktopDesigner/fixtures/apps.js.map +0 -1
  480. package/react/components/smartDesktopDesigner/fixtures/authenticationProps.js.map +0 -1
  481. package/react/components/smartDesktopDesigner/fixtures/configTemplate.js.map +0 -1
  482. package/react/components/smartDesktopDesigner/fixtures/exportProps.js.map +0 -1
  483. package/react/components/smartDesktopDesigner/fixtures/preloads.d.ts +0 -22
  484. package/react/components/smartDesktopDesigner/fixtures/preloads.js +0 -40
  485. package/react/components/smartDesktopDesigner/fixtures/preloads.js.map +0 -1
  486. package/react/components/smartDesktopDesigner/fixtures/projectErrorsProps.js.map +0 -1
  487. package/react/components/smartDesktopDesigner/fixtures/publishProgress.js.map +0 -1
  488. package/react/components/smartDesktopDesigner/fixtures/themeProps.js.map +0 -1
  489. package/react/components/smartDesktopDesigner/fixtures/views.js.map +0 -1
  490. package/react/components/smartDesktopDesigner/sdd_helpers.js.map +0 -1
  491. package/react/components/smartDesktopDesigner/stories/AppEditPage.stories.js.map +0 -1
  492. package/react/components/smartDesktopDesigner/stories/Appearance.stories.js.map +0 -1
  493. package/react/components/smartDesktopDesigner/stories/Applications.stories.js.map +0 -1
  494. package/react/components/smartDesktopDesigner/stories/AssetsPage.stories.js.map +0 -1
  495. package/react/components/smartDesktopDesigner/stories/Authentication.stories.js.map +0 -1
  496. package/react/components/smartDesktopDesigner/stories/ContentHeader.stories.js.map +0 -1
  497. package/react/components/smartDesktopDesigner/stories/EditPreload.stories.d.ts +0 -11
  498. package/react/components/smartDesktopDesigner/stories/EditPreload.stories.js +0 -35
  499. package/react/components/smartDesktopDesigner/stories/EditPreload.stories.js.map +0 -1
  500. package/react/components/smartDesktopDesigner/stories/Export.stories.js.map +0 -1
  501. package/react/components/smartDesktopDesigner/stories/ExportCloud.stories.js.map +0 -1
  502. package/react/components/smartDesktopDesigner/stories/ExportZip.stories.js.map +0 -1
  503. package/react/components/smartDesktopDesigner/stories/GettingStarted.stories.js.map +0 -1
  504. package/react/components/smartDesktopDesigner/stories/ItemList.stories.js.map +0 -1
  505. package/react/components/smartDesktopDesigner/stories/Navigation.stories.js.map +0 -1
  506. package/react/components/smartDesktopDesigner/stories/OptionalSettingsView.stories.js +0 -28
  507. package/react/components/smartDesktopDesigner/stories/OptionalSettingsView.stories.js.map +0 -1
  508. package/react/components/smartDesktopDesigner/stories/Preloads.stories.d.ts +0 -11
  509. package/react/components/smartDesktopDesigner/stories/Preloads.stories.js +0 -31
  510. package/react/components/smartDesktopDesigner/stories/Preloads.stories.js.map +0 -1
  511. package/react/components/smartDesktopDesigner/stories/ProjectErrors.stories.js.map +0 -1
  512. package/react/components/smartDesktopDesigner/stories/Publish.stories.js.map +0 -1
  513. package/react/components/smartDesktopDesigner/stories/PublishProgress.stories.js.map +0 -1
  514. package/react/components/smartDesktopDesigner/stories/SmartDesktopDesigner.stories.js.map +0 -1
  515. package/react/components/smartDesktopDesigner/stories/ThemePage.stories.js.map +0 -1
  516. package/react/components/smartDesktopDesigner/stories/Themes.stories.js.map +0 -1
  517. package/react/components/smartDesktopDesigner/stories/Toolbar.stories.js.map +0 -1
  518. package/react/components/smartDesktopDesigner/tests/AppEditPage.spec.js.map +0 -1
  519. package/react/components/smartDesktopDesigner/tests/Application.spec.js.map +0 -1
  520. package/react/components/smartDesktopDesigner/tests/Applications.spec.js.map +0 -1
  521. package/react/components/smartDesktopDesigner/tests/Authentication.spec.js.map +0 -1
  522. package/react/components/smartDesktopDesigner/tests/ContentHeader.spec.js.map +0 -1
  523. package/react/components/smartDesktopDesigner/tests/EditPreload.spec.js.map +0 -1
  524. package/react/components/smartDesktopDesigner/tests/Export.spec.js.map +0 -1
  525. package/react/components/smartDesktopDesigner/tests/ExportZip.spec.js.map +0 -1
  526. package/react/components/smartDesktopDesigner/tests/ItemList.spec.js.map +0 -1
  527. package/react/components/smartDesktopDesigner/tests/Navigation.spec.js.map +0 -1
  528. package/react/components/smartDesktopDesigner/tests/Preloads.spec.js +0 -47
  529. package/react/components/smartDesktopDesigner/tests/Preloads.spec.js.map +0 -1
  530. package/react/components/smartDesktopDesigner/tests/ProjectErrors.spec.js.map +0 -1
  531. package/react/components/smartDesktopDesigner/tests/Publish.spec.js.map +0 -1
  532. package/react/components/smartDesktopDesigner/tests/PublishProgess.spec.js.map +0 -1
  533. package/react/components/smartDesktopDesigner/tests/SmartDesktopDesigner.spec.js.map +0 -1
  534. package/react/components/smartDesktopDesigner/tests/Themes.spec.js.map +0 -1
  535. package/react/components/smartDesktopDesigner/tests/Toolbar.spec.js.map +0 -1
  536. package/react/components/smartDesktopDesigner/tests/a11y_helper.js.map +0 -1
  537. package/react/components/smartDesktopDesigner/tests/sdd_helpers.spec.js.map +0 -1
  538. package/react/components/smartDesktopDesigner/themeDefinitions.js.map +0 -1
  539. package/react/components/toolbar/appLauncher/DynamicAppLauncher.d.ts +0 -6
  540. package/react/components/toolbar/appLauncher/DynamicAppLauncher.js +0 -23
  541. package/react/components/toolbar/appLauncher/DynamicAppLauncher.js.map +0 -1
  542. package/react/components/userPreferences/components/general/ScheduledRestart.d.ts +0 -27
  543. package/react/components/userPreferences/components/general/ScheduledRestart.js +0 -190
  544. package/react/components/userPreferences/components/general/ScheduledRestart.js.map +0 -1
  545. package/react/components/userPreferences/tests/ScheduledRestart.spec.js +0 -70
  546. package/react/components/userPreferences/tests/ScheduledRestart.spec.js.map +0 -1
  547. package/react/hooks/useWorkspace.d.ts +0 -5
  548. package/react/hooks/useWorkspace.js +0 -26
  549. package/react/hooks/useWorkspace.js.map +0 -1
  550. package/react/types/iconTypes.d.ts +0 -11
  551. package/react/types/iconTypes.js +0 -2
  552. package/react/types/iconTypes.js.map +0 -1
  553. package/react/types/searchTypes.d.ts +0 -22
  554. package/react/types/searchTypes.js +0 -2
  555. package/react/types/searchTypes.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MenuPortal.js","sourceRoot":"","sources":["../../../src/components/menu/MenuPortal.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { MenuContext } from \"./menuContext\";\nimport { calculateDimensions, injectCSS } from \"./menuHelpers\";\nimport { KeyboardNavigation } from \"./keyboardNavigation\";\nimport { MenuAutoResizer } from \"./MenuAutoResizer\";\nimport { useState, useEffect, useContext, useMemo } from \"react\";\nimport { useMenu } from \"../../hooks/useMenu\";\nimport { services, FEA } from \"@finsemble/finsemble-api\";\n\ntype SpawnParams = services.window.types.SpawnParams;\n\n/**\n * Proxy/fake events are needed because when `document.addEventListener` is used inside a component\n * that is rendered inside react portal, `document` will refer to the toolbar's document instead\n * of the childWindow's document. Clicking inside a portal will not therefore capture those events.\n *\n * This code intercepts these events inside the portal and then forwards them to the parent (toolbar).\n */\nconst setupEventForwarding = (newWindow: Window) => {\n\t[\"mouseDown\", \"click\", \"mouseUp\"].forEach((eventName) => {\n\t\tnewWindow.document.addEventListener(eventName, (event) => {\n\t\t\tdocument.dispatchEvent(\n\t\t\t\tnew CustomEvent(`portal:${eventName}`, {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\t// Devs may need access to the x and y of the cursor\n\t\t\t\t\t\tmouseEvent: new MouseEvent(eventName, event),\n\t\t\t\t\t\t// And possibly the target element\n\t\t\t\t\t\ttarget: event.target,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\t});\n\n\t/**\n\t * Proxies keyboard events from the portal up into the parent window.\n\t * instead of e.key, you'll need to access e.detail.key.\n\t */\n\t[\"keyup\", \"keydown\", \"keypress\"].forEach((eventName) => {\n\t\tnewWindow?.document.addEventListener(eventName, (event) => {\n\t\t\tdocument.dispatchEvent(\n\t\t\t\tnew CustomEvent(`portal:${eventName}`, {\n\t\t\t\t\tdetail: new KeyboardEvent(event.type, event),\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\t});\n};\n\n/**\n * The window (opened by window.open) is an empty html document.\n * This function creates a containerDiv for the parent to insert its\n * React DOM. That containerDiv is set through the `setElement()` method\n * which must be passed in.\n *\n * This function also does portal housekeeping such as transferring CSS and window\n * events.\n */\nconst insertWindowContent = ({\n\tnewWindow,\n\tisAutoResizable,\n\tclassName,\n\tsetElement,\n\tmenuHeight,\n}: {\n\tnewWindow: Window;\n\tisAutoResizable: boolean;\n\tclassName?: string;\n\tmenuHeight?: number;\n\tsetElement: React.Dispatch<React.SetStateAction<HTMLElement | undefined>>;\n}) => {\n\t// Set the child window's <html> tag to class \"menu-portal\" for scrollbar styling\n\tnewWindow.document.documentElement.className = \"menu-portal\";\n\tif (isAutoResizable) newWindow.document.body.setAttribute(\"resizing\", \"true\");\n\n\t// Create the element which will hold our react elements and then append it into the child window's body.\n\tconst containerDiv: HTMLElement = document.createElement(\"div\");\n\tnewWindow.document.body.appendChild(containerDiv);\n\n\t// The className that was passed to MenuShell is added to the child window's <body>\n\tclassName?.split(\" \").forEach((name: string) => newWindow!.document.body.classList.add(name));\n\n\t// This will update local state which will cause the parent React Functional Component\n\t// to return a react portal. See comments at the end of this file.\n\tsetElement(containerDiv);\n\n\t// Inject css into the child window's <head>\n\tinjectCSS(newWindow);\n\n\t// THE FOLLOWING IS LIKELY DEPRECATED BUT KEEPING JUST IN CASE\n\t// Place height on the portal.\n\t// inside of the portal, window.outerHeight === 39 (toolbar height).\n\t// Knowing the height of the window is important because some menus use that\n\t// information to force overflow on certain sections of the menu.\n\t(newWindow as any).portalHeight = menuHeight;\n};\n\n/**\n * React hook to create a drop down menu. This hook creates a new window using window.open\n * and assigns it as the childWindow to the MenuPortal. It then uses insertWindowContent()\n * to establish the React/DOM connection with the parent (e.g. Toolbar).\n */\nconst useCreateDropdown = ({\n\tkeyboardNavigation,\n\tsetElement,\n\tchildWindow,\n\tsetChildWindow,\n}: {\n\tkeyboardNavigation: KeyboardNavigation | null;\n\tsetElement: React.Dispatch<React.SetStateAction<HTMLElement | undefined>>;\n\tchildWindow: Window | null;\n\tsetChildWindow: React.Dispatch<React.SetStateAction<Window | null>>;\n}) => {\n\tconst { thisMenuId, menuWidth, menuHeight, className, maxHeight, minHeight } = useContext(MenuContext);\n\tconst { blurMenu } = useMenu();\n\tconst isAutoResizable = !menuHeight;\n\n\t/**\n\t * Initialize the window. This should only run once though it is possible\n\t * to run multiple times if MenuContext changes.\n\t */\n\tuseEffect(() => {\n\t\tlet menuAutoResizer: any = null;\n\n\t\t/**\n\t\t * Initial size and location of the menu is irrelevant because it is hidden.\n\t\t * The menu will be resized and positioned correctly when it is shown.\n\t\t */\n\t\tconst features = `height=1,width=${menuWidth},left=0,top=0,opacity=1`;\n\n\t\t/**\n\t\t * Opens the window which will contain the menu contents. This looks like a browser window open\n\t\t * but actually opens an Electron window which FEA intercepts. FEA uses the `childWindowOptions`\n\t\t * json configuration to determine how to display the window. `childWindowOptions.show` should\n\t\t * be set to `false` otherwise a white window will flash prior to the menu being rendered.\n\t\t *\n\t\t *\n\t\t * The \"/component/toolbar/menu.html\" is just an empty page. It's necessary to reference a real page\n\t\t * rather than about:blank in order that the \"origin\" is correct for the page. Many CSS ui-assets such\n\t\t * as fonts and images are set with relative paths that require a correct origin.\n\t\t *\n\t\t * Note, we append the menu ID for automated testing. This allows Selenium to\n\t\t * uniquely identify each menu.\n\t\t */\n\t\tconst newWindow = window.open(`./menu.html#${thisMenuId}`, undefined, features);\n\t\tsetChildWindow(newWindow);\n\n\t\tif (newWindow) {\n\t\t\tconst onLoad = () => {\n\t\t\t\tinsertWindowContent({ newWindow, isAutoResizable, className, setElement, menuHeight });\n\t\t\t\tsetupEventForwarding(newWindow);\n\t\t\t\t/* Close window when a user clicks away.\n\t\t\t\t\tAre you wondering why not just close the window without calling\n\t\t\t\t\ttoggle? because we want to update the state in the store first\n\t\t\t\t\twhich will cause openMenuId to no longer match the shell id\n\t\t\t\t\tand eventually destroy this component which will cause the window\n\t\t\t\t\tto close (see cleanup function).\n\t\t\t\t*/\n\t\t\t\tnewWindow.addEventListener(\"blur\", blurMenu);\n\n\t\t\t\t// Attach MenuAutoResizer only if the menu doesn't have a fixed height\n\t\t\t\tif (isAutoResizable)\n\t\t\t\t\tmenuAutoResizer = new MenuAutoResizer(newWindow, thisMenuId, menuWidth, maxHeight, minHeight);\n\t\t\t};\n\t\t\tnewWindow.addEventListener(\"load\", onLoad, true);\n\t\t} else {\n\t\t\tFSBL.Clients.Logger.system.error(`MenuPortal error: window.open returned null for \"./menu.html#${thisMenuId}\"`);\n\t\t}\n\n\t\treturn () => {\n\t\t\t// imesner 20210406 childwindow and keyboardNavigation were both null but hadn't closed the window or released global hotkeys\n\t\t\tconst win = childWindow || menuAutoResizer?.childWindow;\n\t\t\tconst keyboardNav = keyboardNavigation || (win as any)?.keyboardNavigation;\n\n\t\t\tkeyboardNav?.detach();\n\n\t\t\tmenuAutoResizer?.disconnect();\n\t\t\twin?.close();\n\t\t\tsetChildWindow(null);\n\t\t};\n\t}, [blurMenu, className, menuWidth, menuHeight, maxHeight, thisMenuId]);\n};\n\n/**\n * Sets visibility, size and location of the window. This can be called numerous times\n * during the lifetime of the MenuPortal.\n */\nconst showHideResizeWindow = async ({\n\tchildWindow,\n\tkeyboardNavigation,\n\tshow,\n\tthisMenuId,\n\tmenuHeight,\n\tmaxHeight,\n\tminHeight,\n}: {\n\tchildWindow: Window;\n\tkeyboardNavigation: KeyboardNavigation | null;\n\tshow: boolean;\n\tthisMenuId: string;\n\tmenuHeight?: number;\n\tmaxHeight: number;\n\tminHeight: number;\n}) => {\n\tconst finWindow: FEA.FEAWindow = childWindow.fin.desktop.Window.getCurrent();\n\tif (show) {\n\t\tconst { left, top, height } = await calculateDimensions(childWindow, thisMenuId, menuHeight, maxHeight, minHeight);\n\n\t\tconst params: SpawnParams = {\n\t\t\tposition: \"absolute\",\n\t\t\tleft: left,\n\t\t\ttop: top,\n\t\t\theight: height,\n\t\t\tforceOntoMonitor: \"monitorRect\",\n\t\t};\n\n\t\tconst { name } = childWindow;\n\n\t\t/**\n\t\t * Use Finsemble to show the window. We might be tempted simply to use childWindow.moveTo() or childWindow.resizeTo()\n\t\t * but those commands limit the child window to a single monitor. We want to position the window relative to the\n\t\t * monitor on which the toolbar currently resides. showWindow() is monitor aware, so by using monitor=\"mine\" we can\n\t\t * ensure that the menu will always open on the same monitor as the toolbar. Since our toolbar has built in logic\n\t\t * to avoid straddling, we can be sure that the menu will never have to guess whether it exists on the left or right\n\t\t * side of the toolbar. Finally, showWindow() forces windows to open entirely on a monitor, so it will slide the\n\t\t * menu to the left or right as necessary to prevent it from straddling.\n\t\t */\n\t\tFSBL.Clients.LauncherClient.showWindow({ windowName: name }, params);\n\n\t\t// Ensures that the menu has keyboard focus for accessibility\n\t\tfinWindow.focus();\n\n\t\t// Ensures that the menu is positioned above any other windows that have setAlwaysOnTop flagged\n\t\tFSBL.FinsembleWindow.getInstance({ name: name }, (e: any, fsblWindow: any) => {\n\t\t\tfsblWindow.setAlwaysOnTop({ alwaysOnTop: true });\n\t\t});\n\n\t\tif (keyboardNavigation) {\n\t\t\t// Why??\n\t\t\t(childWindow as any).keyboardNavigation = keyboardNavigation;\n\t\t\tkeyboardNavigation.attach();\n\t\t}\n\t} else {\n\t\tconst { name } = childWindow;\n\t\tFSBL.FinsembleWindow.getInstance({ name: name }, (e: any, fsblWindow: any) => {\n\t\t\tfsblWindow.setAlwaysOnTop({ alwaysOnTop: false });\n\t\t});\n\n\t\tfinWindow.hide();\n\t\tif (keyboardNavigation) keyboardNavigation.detach();\n\t}\n};\n\n/**\n * Closes the menu portal if the menu button is removed from the toolbar\n *\n * @param {Node} element - HTML element to observe\n *\n */\nconst closePortal = (element: Node) => {\n\tconst { closeMenu } = useMenu();\n\n\tconst options = {\n\t\tchildList: true,\n\t\tsubtree: true,\n\t};\n\n\t/**\n\t * MutationObserver interface provides the ability to watch for\n\t * changes to the DOM tree using the observe method\n\t */\n\tconst mutationObserver = new MutationObserver((mutations) => {\n\t\tmutations.forEach((mutation) => {\n\t\t\tif (mutation.removedNodes?.length) closeMenu();\n\n\t\t\t// stops the MutationObserver from receiving notification from observer\n\t\t\tmutationObserver.disconnect();\n\t\t});\n\t});\n\n\t// watches for DOM changes\n\tmutationObserver.observe(element, options);\n};\n\nexport const MenuPortal: React.FunctionComponent<{\n\tshow: boolean;\n}> = ({ show, children }) => {\n\tconst { thisMenuId, menuHeight, maxHeight, minHeight } = useContext(MenuContext);\n\n\t// Container div for React portal\n\tconst [element, setElement] = useState<HTMLElement>();\n\tconst [childWindow, setChildWindow] = useState<Window | null>(null);\n\n\t/**\n\t * KeyboardNavigation registers global hotkeys for navigating through a menu with cursor keys.\n\t * Those hotkeys are registered/unregistered based on visibility of the child window.\n\t * The KeyboardNavigation class is a singleton and so is memoized. It is created when the child window is available.\n\t */\n\tconst keyboardNavigation = useMemo(() => {\n\t\tif (childWindow) return new KeyboardNavigation(childWindow, \".menu-item\");\n\t\telse return null;\n\t}, [childWindow]);\n\n\t/**\n\t * Show and hide window. This effect will run whenever the `show` prop changes,\n\t * generally initiated by a click to <MenuToggle>.\n\t */\n\tuseEffect(() => {\n\t\t// If child window isn't yet initialized then no-op\n\t\tif (!childWindow) return;\n\n\t\tshowHideResizeWindow({ childWindow, keyboardNavigation, show, thisMenuId, menuHeight, maxHeight, minHeight });\n\t\treturn () => {};\n\t}, [show]);\n\n\t// Create the dropdown. (if MenuContext changes then the dropdown will be removed and recreated).\n\tuseCreateDropdown({ keyboardNavigation, childWindow, setElement, setChildWindow });\n\n\tconst toolbar = document.getElementById(\"Toolbar-tsx\");\n\n\tif (toolbar) closePortal(toolbar);\n\n\t// We should only return a react portal when window is ready\n\t// and container div appended to its body\n\t// See Dan abramov comment about this at:\n\t// https://github.com/facebook/react/issues/12355#issuecomment-410996235\n\treturn element ? ReactDOM.createPortal(children, element) : null;\n};\n"]}
1
+ {"version":3,"file":"MenuPortal.js","sourceRoot":"","sources":["../../../src/components/menu/MenuPortal.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { MenuContext } from \"./menuContext\";\nimport { calculateDimensions, injectCSS } from \"./menuHelpers\";\nimport { KeyboardNavigation } from \"./keyboardNavigation\";\nimport { MenuAutoResizer } from \"./MenuAutoResizer\";\nimport { useState, useEffect, useContext, useMemo } from \"react\";\nimport { useMenu } from \"../../hooks/useMenu\";\nimport { services, FEA } from \"@finsemble/finsemble-api\";\n\ntype SpawnParams = services.window.types.SpawnParams;\n\n/**\n * Proxy/fake events are needed because when `document.addEventListener` is used inside a component\n * that is rendered inside react portal, `document` will refer to the toolbar's document instead\n * of the childWindow's document. Clicking inside a portal will not therefore capture those events.\n *\n * This code intercepts these events inside the portal and then forwards them to the parent (toolbar).\n */\nconst setupEventForwarding = (newWindow: Window) => {\n\t[\"mouseDown\", \"click\", \"mouseUp\"].forEach((eventName) => {\n\t\tnewWindow.document.addEventListener(eventName, (event) => {\n\t\t\tdocument.dispatchEvent(\n\t\t\t\tnew CustomEvent(`portal:${eventName}`, {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\t// Devs may need access to the x and y of the cursor\n\t\t\t\t\t\tmouseEvent: new MouseEvent(eventName, event),\n\t\t\t\t\t\t// And possibly the target element\n\t\t\t\t\t\ttarget: event.target,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\t});\n\n\t/**\n\t * Proxies keyboard events from the portal up into the parent window.\n\t * instead of e.key, you'll need to access e.detail.key.\n\t */\n\t[\"keyup\", \"keydown\", \"keypress\"].forEach((eventName) => {\n\t\tnewWindow?.document.addEventListener(eventName, (event) => {\n\t\t\tdocument.dispatchEvent(\n\t\t\t\tnew CustomEvent(`portal:${eventName}`, {\n\t\t\t\t\tdetail: new KeyboardEvent(event.type, event),\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\t});\n};\n\n/**\n * The window (opened by window.open) is an empty html document.\n * This function creates a containerDiv for the parent to insert its\n * React DOM. That containerDiv is set through the `setElement()` method\n * which must be passed in.\n *\n * This function also does portal housekeeping such as transferring CSS and window\n * events.\n */\nconst insertWindowContent = ({\n\tnewWindow,\n\tisAutoResizable,\n\tclassName,\n\tsetElement,\n\tmenuHeight,\n}: {\n\tnewWindow: Window;\n\tisAutoResizable: boolean;\n\tclassName?: string;\n\tmenuHeight?: number;\n\tsetElement: React.Dispatch<React.SetStateAction<HTMLElement | undefined>>;\n}) => {\n\t// Set the child window's <html> tag to class \"menu-portal\" for scrollbar styling\n\tnewWindow.document.documentElement.className = \"menu-portal\";\n\tif (isAutoResizable) newWindow.document.body.setAttribute(\"resizing\", \"true\");\n\n\t// Create the element which will hold our react elements and then append it into the child window's body.\n\tconst containerDiv: HTMLElement = document.createElement(\"div\");\n\tnewWindow.document.body.appendChild(containerDiv);\n\n\t// The className that was passed to MenuShell is added to the child window's <body>\n\tclassName?.split(\" \").forEach((name: string) => newWindow!.document.body.classList.add(name));\n\n\t// This will update local state which will cause the parent React Functional Component\n\t// to return a react portal. See comments at the end of this file.\n\tsetElement(containerDiv);\n\n\t// Inject css into the child window's <head>\n\tinjectCSS(newWindow);\n\n\t// THE FOLLOWING IS LIKELY DEPRECATED BUT KEEPING JUST IN CASE\n\t// Place height on the portal.\n\t// inside of the portal, window.outerHeight === 39 (toolbar height).\n\t// Knowing the height of the window is important because some menus use that\n\t// information to force overflow on certain sections of the menu.\n\t(newWindow as any).portalHeight = menuHeight;\n};\n\n/**\n * React hook to create a drop down menu. This hook creates a new window using window.open\n * and assigns it as the childWindow to the MenuPortal. It then uses insertWindowContent()\n * to establish the React/DOM connection with the parent (e.g. Toolbar).\n */\nconst useCreateDropdown = ({\n\tkeyboardNavigation,\n\tsetElement,\n\tchildWindow,\n\tsetChildWindow,\n}: {\n\tkeyboardNavigation: KeyboardNavigation | null;\n\tsetElement: React.Dispatch<React.SetStateAction<HTMLElement | undefined>>;\n\tchildWindow: Window | null;\n\tsetChildWindow: React.Dispatch<React.SetStateAction<Window | null>>;\n}) => {\n\tconst { thisMenuId, menuWidth, menuHeight, className, maxHeight, minHeight } = useContext(MenuContext);\n\tconst { blurMenu } = useMenu();\n\tconst isAutoResizable = !menuHeight;\n\n\t/**\n\t * Initialize the window. This should only run once though it is possible\n\t * to run multiple times if MenuContext changes.\n\t */\n\tuseEffect(() => {\n\t\tlet menuAutoResizer: any = null;\n\n\t\t/**\n\t\t * Initial size and location of the menu is irrelevant because it is hidden.\n\t\t * The menu will be resized and positioned correctly when it is shown.\n\t\t */\n\t\tconst features = `height=1,width=${menuWidth},left=0,top=0,opacity=1`;\n\n\t\t/**\n\t\t * Opens the window which will contain the menu contents. This looks like a browser window open\n\t\t * but actually opens an Electron window which FEA intercepts. FEA uses the `childWindowOptions`\n\t\t * json configuration to determine how to display the window. `childWindowOptions.show` should\n\t\t * be set to `false` otherwise a white window will flash prior to the menu being rendered.\n\t\t *\n\t\t *\n\t\t * The \"/component/toolbar/menu.html\" is just an empty page. It's necessary to reference a real page\n\t\t * rather than about:blank in order that the \"origin\" is correct for the page. Many CSS ui-assets such\n\t\t * as fonts and images are set with relative paths that require a correct origin.\n\t\t *\n\t\t * Note, we append the menu ID for automated testing. This allows Selenium to\n\t\t * uniquely identify each menu.\n\t\t */\n\t\tconst newWindow = window.open(`./menu.html#${thisMenuId}`, `(Menu) ${thisMenuId}`, features);\n\t\tsetChildWindow(newWindow);\n\n\t\tif (newWindow) {\n\t\t\tconst onLoad = () => {\n\t\t\t\tinsertWindowContent({ newWindow, isAutoResizable, className, setElement, menuHeight });\n\t\t\t\tsetupEventForwarding(newWindow);\n\t\t\t\t/* Close window when a user clicks away.\n\t\t\t\t\tAre you wondering why not just close the window without calling\n\t\t\t\t\ttoggle? because we want to update the state in the store first\n\t\t\t\t\twhich will cause openMenuId to no longer match the shell id\n\t\t\t\t\tand eventually destroy this component which will cause the window\n\t\t\t\t\tto close (see cleanup function).\n\t\t\t\t*/\n\t\t\t\tnewWindow.addEventListener(\"blur\", blurMenu);\n\n\t\t\t\t// Attach MenuAutoResizer only if the menu doesn't have a fixed height\n\t\t\t\tif (isAutoResizable)\n\t\t\t\t\tmenuAutoResizer = new MenuAutoResizer(newWindow, thisMenuId, menuWidth, maxHeight, minHeight);\n\t\t\t};\n\t\t\tnewWindow.addEventListener(\"load\", onLoad, true);\n\t\t} else {\n\t\t\tFSBL.Clients.Logger.system.error(`MenuPortal error: window.open returned null for \"./menu.html#${thisMenuId}\"`);\n\t\t}\n\n\t\treturn () => {\n\t\t\t// imesner 20210406 childwindow and keyboardNavigation were both null but hadn't closed the window or released global hotkeys\n\t\t\tconst win = childWindow || menuAutoResizer?.childWindow;\n\t\t\tconst keyboardNav = keyboardNavigation || (win as any)?.keyboardNavigation;\n\n\t\t\tkeyboardNav?.detach();\n\n\t\t\tmenuAutoResizer?.disconnect();\n\t\t\twin?.close();\n\t\t\tsetChildWindow(null);\n\t\t};\n\t}, [blurMenu, className, menuWidth, menuHeight, maxHeight, thisMenuId]);\n};\n\n/**\n * Sets visibility, size and location of the window. This can be called numerous times\n * during the lifetime of the MenuPortal.\n */\nconst showHideResizeWindow = async ({\n\tchildWindow,\n\tkeyboardNavigation,\n\tshow,\n\tthisMenuId,\n\tmenuHeight,\n\tmaxHeight,\n\tminHeight,\n}: {\n\tchildWindow: Window;\n\tkeyboardNavigation: KeyboardNavigation | null;\n\tshow: boolean;\n\tthisMenuId: string;\n\tmenuHeight?: number;\n\tmaxHeight: number;\n\tminHeight: number;\n}) => {\n\tconst finWindow: FEA.FEAWindow = childWindow.fin.desktop.Window.getCurrent();\n\tif (show) {\n\t\tconst { left, top, height } = await calculateDimensions(childWindow, thisMenuId, menuHeight, maxHeight, minHeight);\n\n\t\tconst params: SpawnParams = {\n\t\t\tposition: \"absolute\",\n\t\t\tleft: left,\n\t\t\ttop: top,\n\t\t\theight: height,\n\t\t\tforceOntoMonitor: \"monitorRect\",\n\t\t};\n\n\t\tconst { name } = childWindow;\n\n\t\t/**\n\t\t * Use Finsemble to show the window. We might be tempted simply to use childWindow.moveTo() or childWindow.resizeTo()\n\t\t * but those commands limit the child window to a single monitor. We want to position the window relative to the\n\t\t * monitor on which the toolbar currently resides. showWindow() is monitor aware, so by using monitor=\"mine\" we can\n\t\t * ensure that the menu will always open on the same monitor as the toolbar. Since our toolbar has built in logic\n\t\t * to avoid straddling, we can be sure that the menu will never have to guess whether it exists on the left or right\n\t\t * side of the toolbar. Finally, showWindow() forces windows to open entirely on a monitor, so it will slide the\n\t\t * menu to the left or right as necessary to prevent it from straddling.\n\t\t */\n\t\tFSBL.Clients.LauncherClient.showWindow({ windowName: name }, params);\n\n\t\t// Ensures that the menu has keyboard focus for accessibility\n\t\tfinWindow.focus();\n\n\t\t// Ensures that the menu is positioned above any other windows that have setAlwaysOnTop flagged\n\t\tFSBL.FinsembleWindow.getInstance({ name: name }, (e: any, fsblWindow: any) => {\n\t\t\tfsblWindow.setAlwaysOnTop({ alwaysOnTop: true });\n\t\t});\n\n\t\tif (keyboardNavigation) {\n\t\t\t// Why??\n\t\t\t(childWindow as any).keyboardNavigation = keyboardNavigation;\n\t\t\tkeyboardNavigation.attach();\n\t\t}\n\t} else {\n\t\tconst { name } = childWindow;\n\t\tFSBL.FinsembleWindow.getInstance({ name: name }, (e: any, fsblWindow: any) => {\n\t\t\tfsblWindow.setAlwaysOnTop({ alwaysOnTop: false });\n\t\t});\n\n\t\tfinWindow.hide();\n\t\tif (keyboardNavigation) keyboardNavigation.detach();\n\t}\n};\n\n/**\n * Closes the menu portal if the menu button is removed from the toolbar\n *\n * @param {Node} element - HTML element to observe\n *\n */\nconst closePortal = (element: Node) => {\n\tconst { closeMenu } = useMenu();\n\n\tconst options = {\n\t\tchildList: true,\n\t\tsubtree: true,\n\t};\n\n\t/**\n\t * MutationObserver interface provides the ability to watch for\n\t * changes to the DOM tree using the observe method\n\t */\n\tconst mutationObserver = new MutationObserver((mutations) => {\n\t\tmutations.forEach((mutation) => {\n\t\t\tif (mutation.removedNodes?.length) closeMenu();\n\n\t\t\t// stops the MutationObserver from receiving notification from observer\n\t\t\tmutationObserver.disconnect();\n\t\t});\n\t});\n\n\t// watches for DOM changes\n\tmutationObserver.observe(element, options);\n};\n\nexport const MenuPortal: React.FunctionComponent<{\n\tshow: boolean;\n}> = ({ show, children }) => {\n\tconst { thisMenuId, menuHeight, maxHeight, minHeight } = useContext(MenuContext);\n\n\t// Container div for React portal\n\tconst [element, setElement] = useState<HTMLElement>();\n\tconst [childWindow, setChildWindow] = useState<Window | null>(null);\n\n\t/**\n\t * KeyboardNavigation registers global hotkeys for navigating through a menu with cursor keys.\n\t * Those hotkeys are registered/unregistered based on visibility of the child window.\n\t * The KeyboardNavigation class is a singleton and so is memoized. It is created when the child window is available.\n\t */\n\tconst keyboardNavigation = useMemo(() => {\n\t\tif (childWindow) return new KeyboardNavigation(childWindow, \".menu-item\");\n\t\telse return null;\n\t}, [childWindow]);\n\n\t/**\n\t * Show and hide window. This effect will run whenever the `show` prop changes,\n\t * generally initiated by a click to <MenuToggle>.\n\t */\n\tuseEffect(() => {\n\t\t// If child window isn't yet initialized then no-op\n\t\tif (!childWindow) return;\n\n\t\tshowHideResizeWindow({ childWindow, keyboardNavigation, show, thisMenuId, menuHeight, maxHeight, minHeight });\n\t\treturn () => {};\n\t}, [show]);\n\n\t// Create the dropdown. (if MenuContext changes then the dropdown will be removed and recreated).\n\tuseCreateDropdown({ keyboardNavigation, childWindow, setElement, setChildWindow });\n\n\tconst toolbar = document.getElementById(\"Toolbar-tsx\");\n\n\tif (toolbar) closePortal(toolbar);\n\n\t// We should only return a react portal when window is ready\n\t// and container div appended to its body\n\t// See Dan abramov comment about this at:\n\t// https://github.com/facebook/react/issues/12355#issuecomment-410996235\n\treturn element ? ReactDOM.createPortal(children, element) : null;\n};\n"]}
@@ -1,3 +1,4 @@
1
+ import { ProcessInfo } from "@finsemble/finsemble-api/types/FEA";
1
2
  export declare enum ViewModeEnums {
2
3
  SIMPLE = "simple",
3
4
  ADVANCED = "advanced"
@@ -7,15 +8,7 @@ export declare type ModeStatsType = {
7
8
  value: "cpuUsage" | "workingSetSize" | "peakWorkingSetSize" | "processId";
8
9
  };
9
10
  export declare type ProcessStatisticsType = {
10
- statistics: {
11
- cpuUsage?: number;
12
- workingSetSize?: number;
13
- peakWorkingSetSize?: number;
14
- processId?: number;
15
- name?: string;
16
- type?: string;
17
- uuid?: string;
18
- };
11
+ statistics: Partial<ProcessInfo>;
19
12
  };
20
13
  export declare type ProcessType = {
21
14
  visible: boolean;
@@ -24,8 +17,8 @@ export declare type ProcessType = {
24
17
  } & ProcessStatisticsType;
25
18
  export declare type ChildWindowType = {
26
19
  type: string;
27
- name: string;
28
- uuid?: string;
20
+ windowName: string;
21
+ webContentsName: string;
29
22
  };
30
23
  export declare type SortObjectType = {
31
24
  field: keyof ProcessStatisticsType["statistics"];
@@ -1 +1 @@
1
- {"version":3,"file":"ProcessMonitorTypes.js","sourceRoot":"","sources":["../../../src/components/processMonitor/ProcessMonitorTypes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACxB,kCAAiB,CAAA;IACjB,sCAAqB,CAAA;AACtB,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB","sourcesContent":["export enum ViewModeEnums {\n\tSIMPLE = \"simple\",\n\tADVANCED = \"advanced\",\n}\n\nexport type ModeStatsType = {\n\tlabel: string;\n\tvalue: \"cpuUsage\" | \"workingSetSize\" | \"peakWorkingSetSize\" | \"processId\";\n};\n\nexport type ProcessStatisticsType = {\n\tstatistics: {\n\t\tcpuUsage?: number;\n\t\tworkingSetSize?: number;\n\t\tpeakWorkingSetSize?: number;\n\t\tprocessId?: number;\n\t\tname?: string;\n\t\ttype?: string;\n\t\tuuid?: string;\n\t};\n};\nexport type ProcessType = {\n\tvisible: boolean;\n\ttype?: string;\n\tchildWindows?: ChildWindowType[];\n} & ProcessStatisticsType;\n\nexport type ChildWindowType = {\n\ttype: string;\n\tname: string;\n\tuuid?: string;\n};\n\nexport type SortObjectType = {\n\tfield: keyof ProcessStatisticsType[\"statistics\"];\n\tdirection: \"ascending\" | \"descending\";\n};\n"]}
1
+ {"version":3,"file":"ProcessMonitorTypes.js","sourceRoot":"","sources":["../../../src/components/processMonitor/ProcessMonitorTypes.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACxB,kCAAiB,CAAA;IACjB,sCAAqB,CAAA;AACtB,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB","sourcesContent":["import { ProcessInfo } from \"@finsemble/finsemble-api/types/FEA\";\n\nexport enum ViewModeEnums {\n\tSIMPLE = \"simple\",\n\tADVANCED = \"advanced\",\n}\n\nexport type ModeStatsType = {\n\tlabel: string;\n\tvalue: \"cpuUsage\" | \"workingSetSize\" | \"peakWorkingSetSize\" | \"processId\";\n};\n\nexport type ProcessStatisticsType = {\n\tstatistics: Partial<ProcessInfo>;\n};\n\nexport type ProcessType = {\n\tvisible: boolean;\n\ttype?: string;\n\tchildWindows?: ChildWindowType[];\n} & ProcessStatisticsType;\n\nexport type ChildWindowType = {\n\ttype: string;\n\twindowName: string;\n\twebContentsName: string;\n};\n\nexport type SortObjectType = {\n\tfield: keyof ProcessStatisticsType[\"statistics\"];\n\tdirection: \"ascending\" | \"descending\";\n};\n"]}
@@ -20,21 +20,16 @@ export default class ChildWindow extends React.Component {
20
20
  };
21
21
  const cwClickHandler = viewMode === ViewModeEnums.SIMPLE ? simpleClickHandler : advancedClickHandler;
22
22
  const childWindowClasses = `child-window ${viewMode}`;
23
+ const { windowName } = cw;
23
24
  return (React.createElement("div", { className: childWindowClasses },
24
- React.createElement("div", { className: "child-window-actions" }, this.props.cw.type === "window" && typeof this.props.cw.uuid === "string" && (React.createElement("i", { className: "close-window ff-close", onClick: () => {
25
- const { uuid, name } = cw;
26
- if (uuid) {
27
- Actions.closeWindow({ uuid, name });
28
- }
25
+ React.createElement("div", { className: "child-window-actions" }, this.props.cw.type === "window" && (React.createElement("i", { className: "close-window ff-close", onClick: () => {
26
+ Actions.closeWindow(windowName);
29
27
  }, tabIndex: 0, role: "button", onKeyDown: (e) => {
30
28
  if (e.key === "Enter" || e.key === " ") {
31
- const { uuid, name } = cw;
32
- if (uuid) {
33
- Actions.closeWindow({ uuid, name });
34
- }
29
+ Actions.closeWindow(windowName);
35
30
  }
36
31
  } }))),
37
- React.createElement("div", { className: "child-window-name", onClick: cwClickHandler }, cw.name)));
32
+ React.createElement("div", { className: "child-window-name", onClick: cwClickHandler }, cw.webContentsName)));
38
33
  }
39
34
  }
40
35
  //# sourceMappingURL=ChildWindow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChildWindow.js","sourceRoot":"","sources":["../../../../src/components/processMonitor/components/ChildWindow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAmB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAUxD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,KAAK,CAAC,SAAiB;IAC/D,YAAY,KAAa;QACxB,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;IAED,MAAM;QACL,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAGpC,MAAM,kBAAkB,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QACpC,MAAM,oBAAoB,GAAG,GAAG,EAAE;YACjC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAkB,EAAE,UAAmB,EAAE,EAAE;gBACpE,IAAI,GAAG,EAAE;oBACR,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,GAAG,CAAC,CAAC;iBACtE;gBAGD,IAAI,CAAC,UAAU,EAAE;oBAChB,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;iBAC3B;YACF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,QAAQ,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,oBAAoB,CAAC;QAErG,MAAM,kBAAkB,GAAG,gBAAgB,QAAQ,EAAE,CAAC;QACtD,OAAO,CACN,6BAAK,SAAS,EAAE,kBAAkB;YACjC,6BAAK,SAAS,EAAC,sBAAsB,IACnC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,CAC7E,2BACC,SAAS,EAAC,uBAAuB,EACjC,OAAO,EAAE,GAAG,EAAE;oBACb,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;oBAC1B,IAAI,IAAI,EAAE;wBACT,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;qBACpC;gBACF,CAAC,EACD,QAAQ,EAAE,CAAC,EACX,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,CAAC,CAAsB,EAAE,EAAE;oBACrC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;wBACvC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;wBAC1B,IAAI,IAAI,EAAE;4BACT,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;yBACpC;qBACD;gBACF,CAAC,GACG,CACL,CACI;YACN,6BAAK,SAAS,EAAC,mBAAmB,EAAC,OAAO,EAAE,cAAc,IACxD,EAAE,CAAC,IAAI,CACH,CACD,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport { ChildWindowType, ViewModeEnums } from \"../ProcessMonitorTypes\";\nimport { Actions } from \"../stores/ProcessMonitorStore\";\n\ninterface IProps {\n\tcw: ChildWindowType;\n\tviewMode: ViewModeEnums;\n}\n\n/**\n * This file is the react component for an individual window beneath a process. It allows the user to close the window.\n */\nexport default class ChildWindow extends React.Component<IProps> {\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t}\n\n\trender() {\n\t\tconst { cw, viewMode } = this.props;\n\n\t\t//If we're in simple mode, onClick does nothing. In advanced mode, we'll identify the window by making it flash.\n\t\tconst simpleClickHandler = () => {};\n\t\tconst advancedClickHandler = () => {\n\t\t\tActions.getFlashingState((err: StandardError, flashState: boolean) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tconsole.error(\"Error getting current flashing state of window.\", err);\n\t\t\t\t}\n\n\t\t\t\t// Only begin flashing if not already started\n\t\t\t\tif (!flashState) {\n\t\t\t\t\tActions.identifyWindow(cw);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tconst cwClickHandler = viewMode === ViewModeEnums.SIMPLE ? simpleClickHandler : advancedClickHandler;\n\n\t\tconst childWindowClasses = `child-window ${viewMode}`;\n\t\treturn (\n\t\t\t<div className={childWindowClasses}>\n\t\t\t\t<div className=\"child-window-actions\">\n\t\t\t\t\t{this.props.cw.type === \"window\" && typeof this.props.cw.uuid === \"string\" && (\n\t\t\t\t\t\t<i\n\t\t\t\t\t\t\tclassName=\"close-window ff-close\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tconst { uuid, name } = cw;\n\t\t\t\t\t\t\t\tif (uuid) {\n\t\t\t\t\t\t\t\t\tActions.closeWindow({ uuid, name });\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\tonKeyDown={(e: React.KeyboardEvent) => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\tconst { uuid, name } = cw;\n\t\t\t\t\t\t\t\t\tif (uuid) {\n\t\t\t\t\t\t\t\t\t\tActions.closeWindow({ uuid, name });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t></i>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"child-window-name\" onClick={cwClickHandler}>\n\t\t\t\t\t{cw.name}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"ChildWindow.js","sourceRoot":"","sources":["../../../../src/components/processMonitor/components/ChildWindow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAmB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAUxD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,KAAK,CAAC,SAAiB;IAC/D,YAAY,KAAa;QACxB,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;IAED,MAAM;QACL,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAGpC,MAAM,kBAAkB,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QACpC,MAAM,oBAAoB,GAAG,GAAG,EAAE;YACjC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAkB,EAAE,UAAmB,EAAE,EAAE;gBACpE,IAAI,GAAG,EAAE;oBACR,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,GAAG,CAAC,CAAC;iBACtE;gBAGD,IAAI,CAAC,UAAU,EAAE;oBAChB,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;iBAC3B;YACF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,QAAQ,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,oBAAoB,CAAC;QAErG,MAAM,kBAAkB,GAAG,gBAAgB,QAAQ,EAAE,CAAC;QACtD,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QAC1B,OAAO,CACN,6BAAK,SAAS,EAAE,kBAAkB;YACjC,6BAAK,SAAS,EAAC,sBAAsB,IACnC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,CACnC,2BACC,SAAS,EAAC,uBAAuB,EACjC,OAAO,EAAE,GAAG,EAAE;oBACb,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBACjC,CAAC,EACD,QAAQ,EAAE,CAAC,EACX,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,CAAC,CAAsB,EAAE,EAAE;oBACrC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;wBACvC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;qBAChC;gBACF,CAAC,GACG,CACL,CACI;YACN,6BAAK,SAAS,EAAC,mBAAmB,EAAC,OAAO,EAAE,cAAc,IACxD,EAAE,CAAC,eAAe,CACd,CACD,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport { ChildWindowType, ViewModeEnums } from \"../ProcessMonitorTypes\";\nimport { Actions } from \"../stores/ProcessMonitorStore\";\n\ninterface IProps {\n\tcw: ChildWindowType;\n\tviewMode: ViewModeEnums;\n}\n\n/**\n * This file is the react component for an individual window beneath a process. It allows the user to close the window.\n */\nexport default class ChildWindow extends React.Component<IProps> {\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t}\n\n\trender() {\n\t\tconst { cw, viewMode } = this.props;\n\n\t\t//If we're in simple mode, onClick does nothing. In advanced mode, we'll identify the window by making it flash.\n\t\tconst simpleClickHandler = () => {};\n\t\tconst advancedClickHandler = () => {\n\t\t\tActions.getFlashingState((err: StandardError, flashState: boolean) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tconsole.error(\"Error getting current flashing state of window.\", err);\n\t\t\t\t}\n\n\t\t\t\t// Only begin flashing if not already started\n\t\t\t\tif (!flashState) {\n\t\t\t\t\tActions.identifyWindow(cw);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tconst cwClickHandler = viewMode === ViewModeEnums.SIMPLE ? simpleClickHandler : advancedClickHandler;\n\n\t\tconst childWindowClasses = `child-window ${viewMode}`;\n\t\tconst { windowName } = cw;\n\t\treturn (\n\t\t\t<div className={childWindowClasses}>\n\t\t\t\t<div className=\"child-window-actions\">\n\t\t\t\t\t{this.props.cw.type === \"window\" && (\n\t\t\t\t\t\t<i\n\t\t\t\t\t\t\tclassName=\"close-window ff-close\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tActions.closeWindow(windowName);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\tonKeyDown={(e: React.KeyboardEvent) => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\tActions.closeWindow(windowName);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t></i>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"child-window-name\" onClick={cwClickHandler}>\n\t\t\t\t\t{cw.webContentsName}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
@@ -38,21 +38,19 @@ export default class ProcessStatistics extends React.Component {
38
38
  super(props);
39
39
  }
40
40
  render() {
41
+ const { processId, webContents } = this.props.stats;
42
+ const items = Object.values(webContents !== null && webContents !== void 0 ? webContents : {});
43
+ const simpleName = items.length === 1 ? items[0].webContentsName : this.props.stats.name;
44
+ const displayName = this.props.mode === ViewModeEnums.SIMPLE ? simpleName : this.props.stats.name;
41
45
  return (React.createElement("div", { className: "process-row" },
42
- React.createElement("div", { className: "process-name" }, this.props.mode === ViewModeEnums.SIMPLE ? "Process Group" : this.props.stats.name),
46
+ React.createElement("div", { className: "process-name" }, displayName),
43
47
  React.createElement("div", { className: "process-statistics" },
44
48
  this.props.fields.map((field, i) => (React.createElement("div", { key: i, className: getClassesForStat(this.props.stats[field.value], field.label) }, prettyPrint(this.props.stats[field.value], field.label)))),
45
- React.createElement("div", { className: "statistic process-actions" }, this.props.stats.type === "Tab" && typeof this.props.stats.uuid === "string" ? (React.createElement("div", { className: " terminate fsbl-button-negative process-action", onClick: () => {
46
- const { uuid } = this.props.stats;
47
- if (uuid) {
48
- Actions.terminateProcess({ uuid });
49
- }
49
+ React.createElement("div", { className: "statistic process-actions" }, this.props.stats.type === "Tab" && processId ? (React.createElement("div", { className: " terminate fsbl-button-negative process-action", onClick: () => {
50
+ Actions.terminateProcess(webContents);
50
51
  }, tabIndex: 0, role: "button", onKeyDown: (e) => {
51
52
  if (e.key === "Enter" || e.key === " ") {
52
- const { uuid } = this.props.stats;
53
- if (uuid) {
54
- Actions.terminateProcess({ uuid });
55
- }
53
+ Actions.terminateProcess(webContents);
56
54
  }
57
55
  } }, "Terminate")) : null))));
58
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ProcessStatistics.js","sourceRoot":"","sources":["../../../../src/components/processMonitor/components/ProcessStatistics.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { Actions } from \"../stores/ProcessMonitorStore\";\nimport { HIGH_CPU, HIGH_MEMORY_USAGE, MODERATE_CPU_USAGE, MODERATE_MEMORY_USAGE, TO_MB } from \"../constants\";\nimport { bytesToSize, roundDecimalToPrecision } from \"../helpers\";\nimport { ProcessType, ViewModeEnums, ModeStatsType } from \"../ProcessMonitorTypes\";\n//Not used right now. Currently using alerts. This is for the future.\n\ninterface IProps {\n\tmode: ViewModeEnums;\n\tfields: ModeStatsType[];\n\tstats: ProcessType[\"statistics\"];\n}\n\n/**\n * Given a number, will return modifier classes that change the background. High usage === red. Moderate === orange.\n */\nfunction getClassesForStat(number: number | undefined, statType: string) {\n\tlet classes = \"statistic\",\n\t\thigh_comparison = HIGH_MEMORY_USAGE * TO_MB,\n\t\tmoderate_comparison = MODERATE_MEMORY_USAGE * TO_MB;\n\n\tif (typeof number === \"undefined\") {\n\t\treturn classes;\n\t}\n\n\tif (statType === \"CPU\") {\n\t\t(high_comparison = HIGH_CPU), (moderate_comparison = MODERATE_CPU_USAGE);\n\t}\n\tif (number > high_comparison) {\n\t\tclasses = `${classes} high-usage`;\n\t} else if (number > moderate_comparison) {\n\t\tclasses = `${classes} moderate-usage`;\n\t}\n\treturn classes;\n}\n\n/**\n * Outputs something nice. 102423465243 outputs whatever that number is in KB/MB/GB.\n * 0.35123 will output 0.35% for CPU.\n */\nfunction prettyPrint(number: number | undefined, statType: string) {\n\tif (typeof number === \"undefined\") {\n\t\treturn \"\";\n\t}\n\n\tif (statType === \"CPU\") {\n\t\t//make it a percent.\n\t\treturn `${roundDecimalToPrecision(number, 2)}%`;\n\t} else if (statType !== \"PID\") {\n\t\treturn bytesToSize(number);\n\t} else {\n\t\treturn number;\n\t}\n}\n\nexport default class ProcessStatistics extends React.Component<IProps> {\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t}\n\n\trender() {\n\t\t//simple mode: CPU, memory\n\t\t//Advanced mode: add Peak Memory.\n\t\treturn (\n\t\t\t<div className=\"process-row\">\n\t\t\t\t<div className=\"process-name\">\n\t\t\t\t\t{/* In simple mode, we print out \"Group 1\", \"Group 2\", etc. The belief is that end users don't care about our wonderful process names (\"e.g., Default-Agent-62-4421). In advanced mode, you get the actual name of the process. */}\n\t\t\t\t\t{this.props.mode === ViewModeEnums.SIMPLE ? \"Process Group\" : this.props.stats.name}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"process-statistics\">\n\t\t\t\t\t{this.props.fields.map((field, i) => (\n\t\t\t\t\t\t<div key={i} className={getClassesForStat(this.props.stats[field.value], field.label)}>\n\t\t\t\t\t\t\t{prettyPrint(this.props.stats[field.value], field.label)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t\t<div className=\"statistic process-actions\">\n\t\t\t\t\t\t{this.props.stats.type === \"Tab\" && typeof this.props.stats.uuid === \"string\" ? (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\" terminate fsbl-button-negative process-action\"\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tconst { uuid } = this.props.stats;\n\t\t\t\t\t\t\t\t\tif (uuid) {\n\t\t\t\t\t\t\t\t\t\tActions.terminateProcess({ uuid });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\tonKeyDown={(e: React.KeyboardEvent) => {\n\t\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\t\tconst { uuid } = this.props.stats;\n\t\t\t\t\t\t\t\t\t\tif (uuid) {\n\t\t\t\t\t\t\t\t\t\t\tActions.terminateProcess({ uuid });\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tTerminate\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"ProcessStatistics.js","sourceRoot":"","sources":["../../../../src/components/processMonitor/components/ProcessStatistics.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { Actions } from \"../stores/ProcessMonitorStore\";\nimport { HIGH_CPU, HIGH_MEMORY_USAGE, MODERATE_CPU_USAGE, MODERATE_MEMORY_USAGE, TO_MB } from \"../constants\";\nimport { bytesToSize, roundDecimalToPrecision } from \"../helpers\";\nimport { ProcessType, ViewModeEnums, ModeStatsType } from \"../ProcessMonitorTypes\";\n//Not used right now. Currently using alerts. This is for the future.\n\ninterface IProps {\n\tmode: ViewModeEnums;\n\tfields: ModeStatsType[];\n\tstats: ProcessType[\"statistics\"];\n}\n\n/**\n * Given a number, will return modifier classes that change the background. High usage === red. Moderate === orange.\n */\nfunction getClassesForStat(number: number | undefined, statType: string) {\n\tlet classes = \"statistic\",\n\t\thigh_comparison = HIGH_MEMORY_USAGE * TO_MB,\n\t\tmoderate_comparison = MODERATE_MEMORY_USAGE * TO_MB;\n\n\tif (typeof number === \"undefined\") {\n\t\treturn classes;\n\t}\n\n\tif (statType === \"CPU\") {\n\t\t(high_comparison = HIGH_CPU), (moderate_comparison = MODERATE_CPU_USAGE);\n\t}\n\tif (number > high_comparison) {\n\t\tclasses = `${classes} high-usage`;\n\t} else if (number > moderate_comparison) {\n\t\tclasses = `${classes} moderate-usage`;\n\t}\n\treturn classes;\n}\n\n/**\n * Outputs something nice. 102423465243 outputs whatever that number is in KB/MB/GB.\n * 0.35123 will output 0.35% for CPU.\n */\nfunction prettyPrint(number: number | undefined, statType: string) {\n\tif (typeof number === \"undefined\") {\n\t\treturn \"\";\n\t}\n\n\tif (statType === \"CPU\") {\n\t\t//make it a percent.\n\t\treturn `${roundDecimalToPrecision(number, 2)}%`;\n\t} else if (statType !== \"PID\") {\n\t\treturn bytesToSize(number);\n\t} else {\n\t\treturn number;\n\t}\n}\n\nexport default class ProcessStatistics extends React.Component<IProps> {\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t}\n\n\trender() {\n\t\tconst { processId, webContents } = this.props.stats;\n\t\tconst items = Object.values(webContents ?? {});\n\n\t\t// If there's only one item in the group then use the name of that item, otherwise we use its process name\n\t\t// because each of the windows or views will be listed underneath.\n\t\tconst simpleName = items.length === 1 ? items[0].webContentsName : this.props.stats.name;\n\t\t// In Advanced mode we always display the process name because it includes the pid\n\t\tconst displayName = this.props.mode === ViewModeEnums.SIMPLE ? simpleName : this.props.stats.name;\n\t\t//simple mode: CPU, memory\n\t\t//Advanced mode: add Peak Memory.\n\t\treturn (\n\t\t\t<div className=\"process-row\">\n\t\t\t\t<div className=\"process-name\">{displayName}</div>\n\t\t\t\t<div className=\"process-statistics\">\n\t\t\t\t\t{this.props.fields.map((field, i) => (\n\t\t\t\t\t\t<div key={i} className={getClassesForStat(this.props.stats[field.value], field.label)}>\n\t\t\t\t\t\t\t{prettyPrint(this.props.stats[field.value], field.label)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t\t<div className=\"statistic process-actions\">\n\t\t\t\t\t\t{this.props.stats.type === \"Tab\" && processId ? (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\" terminate fsbl-button-negative process-action\"\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tActions.terminateProcess(webContents);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\tonKeyDown={(e: React.KeyboardEvent) => {\n\t\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\t\tActions.terminateProcess(webContents);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tTerminate\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
@@ -7,5 +7,3 @@ export declare const MODERATE_MEMORY_USAGE = 250;
7
7
  export declare const HIGH_MEMORY_USAGE = 400;
8
8
  export declare const TO_MB = 1000000;
9
9
  export declare const EMPTY_TOTALS: ProcessType;
10
- export declare const VIEW_DELIMITER = ": view-";
11
- export declare const VIEW_NAME_REGEXP: RegExp;
@@ -21,6 +21,4 @@ SIMPLE_MODE_STATISTICS.forEach((stat) => {
21
21
  emptyTotals.statistics[stat.value] = 0;
22
22
  });
23
23
  export const EMPTY_TOTALS = emptyTotals;
24
- export const VIEW_DELIMITER = ": view-";
25
- export const VIEW_NAME_REGEXP = new RegExp(`(.*)${VIEW_DELIMITER}\\d+$`);
26
24
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/components/processMonitor/constants.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,sBAAsB,GAAoB;IACtD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;IACnC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE;CAC5C,CAAC;AAGF,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACxD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;IACnC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE;IAC5C,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,oBAAoB,EAAE;IACrD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;CACpC,CAAC;AAGF,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC3B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAGpC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAGrC,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC;AAE7B,MAAM,WAAW,GAAgB;IAChC,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,EAAE;CACd,CAAC;AAEF,sBAAsB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;IACvC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AAKxC,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AAKxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,OAAO,cAAc,OAAO,CAAC,CAAC","sourcesContent":["import { ProcessType, ModeStatsType } from \"./ProcessMonitorTypes\";\n\n// Stats to be displayed in simple mode\nexport const SIMPLE_MODE_STATISTICS: ModeStatsType[] = [\n\t{ label: \"CPU\", value: \"cpuUsage\" },\n\t{ label: \"Memory\", value: \"workingSetSize\" },\n];\n\n// Stats to be diesplayed in advanced mode\nexport const ADVANCED_MODE_STATISTICS: ModeStatsType[] = [\n\t{ label: \"CPU\", value: \"cpuUsage\" },\n\t{ label: \"Memory\", value: \"workingSetSize\" },\n\t{ label: \"Peak Memory\", value: \"peakWorkingSetSize\" },\n\t{ label: \"PID\", value: \"processId\" },\n];\n\n// These are percentages\nexport const HIGH_CPU = 10;\nexport const MODERATE_CPU_USAGE = 5;\n\n// Usage in MB\nexport const MODERATE_MEMORY_USAGE = 250;\nexport const HIGH_MEMORY_USAGE = 400;\n\n// Constant to convert megabytes (250) to bytes (250,000,000). Conversion is approximate.\nexport const TO_MB = 1000000;\n\nconst emptyTotals: ProcessType = {\n\tvisible: false,\n\tstatistics: {},\n};\n// Just an object to hold the UI over until we get real information from the system.\nSIMPLE_MODE_STATISTICS.forEach((stat) => {\n\temptyTotals.statistics[stat.value] = 0;\n});\n\nexport const EMPTY_TOTALS = emptyTotals;\n\n/**\n * Delimiter between window name and view identifier. Can be used in constructing view names as well as matching view names\n */\nexport const VIEW_DELIMITER = \": view-\";\n\n/**\n * RegExp for matching on view names or capturing the window name portion of the view\n */\nexport const VIEW_NAME_REGEXP = new RegExp(`(.*)${VIEW_DELIMITER}\\\\d+$`);\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/components/processMonitor/constants.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,sBAAsB,GAAoB;IACtD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;IACnC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE;CAC5C,CAAC;AAGF,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACxD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;IACnC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE;IAC5C,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,oBAAoB,EAAE;IACrD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;CACpC,CAAC;AAGF,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC3B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAGpC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAGrC,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC;AAE7B,MAAM,WAAW,GAAgB;IAChC,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,EAAE;CACd,CAAC;AAEF,sBAAsB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;IACvC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC","sourcesContent":["import { ProcessType, ModeStatsType } from \"./ProcessMonitorTypes\";\n\n// Stats to be displayed in simple mode\nexport const SIMPLE_MODE_STATISTICS: ModeStatsType[] = [\n\t{ label: \"CPU\", value: \"cpuUsage\" },\n\t{ label: \"Memory\", value: \"workingSetSize\" },\n];\n\n// Stats to be diesplayed in advanced mode\nexport const ADVANCED_MODE_STATISTICS: ModeStatsType[] = [\n\t{ label: \"CPU\", value: \"cpuUsage\" },\n\t{ label: \"Memory\", value: \"workingSetSize\" },\n\t{ label: \"Peak Memory\", value: \"peakWorkingSetSize\" },\n\t{ label: \"PID\", value: \"processId\" },\n];\n\n// These are percentages\nexport const HIGH_CPU = 10;\nexport const MODERATE_CPU_USAGE = 5;\n\n// Usage in MB\nexport const MODERATE_MEMORY_USAGE = 250;\nexport const HIGH_MEMORY_USAGE = 400;\n\n// Constant to convert megabytes (250) to bytes (250,000,000). Conversion is approximate.\nexport const TO_MB = 1000000;\n\nconst emptyTotals: ProcessType = {\n\tvisible: false,\n\tstatistics: {},\n};\n// Just an object to hold the UI over until we get real information from the system.\nSIMPLE_MODE_STATISTICS.forEach((stat) => {\n\temptyTotals.statistics[stat.value] = 0;\n});\n\nexport const EMPTY_TOTALS = emptyTotals;\n"]}
@@ -3,14 +3,3 @@ export declare function toProperCase(str: string): string;
3
3
  export declare function bytesToSize(bytes: number): string;
4
4
  export declare const statReducer: (prev: ProcessType, curr: ProcessType) => ProcessType;
5
5
  export declare const roundDecimalToPrecision: (number: number, precision: number) => number;
6
- declare type WindowViewItemType = {
7
- windowName: string;
8
- viewId: string;
9
- };
10
- export declare const getViewName: (item: WindowViewItemType) => string;
11
- declare type ViewObjectType = {
12
- type: string;
13
- name: string;
14
- };
15
- export declare const getViewBaseName: (view: ViewObjectType) => string;
16
- export {};
@@ -1,4 +1,4 @@
1
- import { SIMPLE_MODE_STATISTICS, VIEW_NAME_REGEXP, VIEW_DELIMITER } from "./constants";
1
+ import { SIMPLE_MODE_STATISTICS } from "./constants";
2
2
  export function toProperCase(str) {
3
3
  return (str
4
4
  .replace(/([A-Z])/g, " $1")
@@ -22,7 +22,6 @@ export const statReducer = (prev, curr) => {
22
22
  statistics[stat.value] = ((_a = prev.statistics[stat.value]) !== null && _a !== void 0 ? _a : 0) + ((_b = curr.statistics[stat.value]) !== null && _b !== void 0 ? _b : 0);
23
23
  });
24
24
  statistics.name = "Totals";
25
- statistics.uuid = "Totals";
26
25
  return {
27
26
  visible: curr.visible,
28
27
  statistics,
@@ -33,11 +32,4 @@ export const roundDecimalToPrecision = (number, precision) => {
33
32
  const roundedShiftedNumber = Math.round(shiftedNumber);
34
33
  return roundedShiftedNumber / Math.pow(10, precision);
35
34
  };
36
- export const getViewName = (item) => `${item.windowName}${VIEW_DELIMITER}${item.viewId}`;
37
- export const getViewBaseName = (view) => {
38
- if (view.type === "view") {
39
- return view.name.match(VIEW_NAME_REGEXP)[1];
40
- }
41
- return view.name;
42
- };
43
35
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/components/processMonitor/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIvF,MAAM,UAAU,YAAY,CAAC,GAAW;IACvC,OAAO,CACN,GAAG;SACD,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAE1B,OAAO,CAAC,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CACrD,CAAC;AACH,CAAC;AAID,MAAM,UAAU,WAAW,CAAC,KAAa;IACxC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAGhC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAGhD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAGvD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC;AAMD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAiB,EAAE,IAAiB,EAAe,EAAE;IAChF,MAAM,UAAU,GAAwC,EAAE,CAAC;IAC3D,sBAAsB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;;QACvC,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,WAAW,EAAE;YAC7G,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;YACnC,OAAO;SACP;QAED,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAC,CAAC;IAClG,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;IAC3B,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;IAE3B,OAAO;QACN,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,UAAU;KACV,CAAC;AACH,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAc,EAAE,SAAiB,EAAU,EAAE;IAEpF,MAAM,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACvD,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACvD,OAAO,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC,CAAC;AAUF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAwB,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAS7G,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAoB,EAAU,EAAE;IAC/D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;QAEzB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAE,CAAC,CAAC,CAAC,CAAC;KAC7C;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AAClB,CAAC,CAAC","sourcesContent":["import { SIMPLE_MODE_STATISTICS, VIEW_NAME_REGEXP, VIEW_DELIMITER } from \"./constants\";\nimport { ProcessStatisticsType, ProcessType } from \"./ProcessMonitorTypes\";\n\n// This Is Proper Case\nexport function toProperCase(str: string) {\n\treturn (\n\t\tstr\n\t\t\t.replace(/([A-Z])/g, \" $1\")\n\t\t\t// uppercase the first character\n\t\t\t.replace(/^./, (char: string) => char.toUpperCase())\n\t);\n}\n/**\n * Given a number, will return a nice string, 1,024 will return 1KB, 100 will return 100 Bytes, and so on.\n */\nexport function bytesToSize(bytes: number) {\n\tif (bytes == 0) return \"0 Byte\";\n\n\t// Size powers, in English\n\tconst sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\n\n\t// Determine the size power for the number of bytes\n\tconst i = Math.floor(Math.log(bytes) / Math.log(1024));\n\n\t// Return the size, rounded\n\treturn `${Math.round(bytes / Math.pow(1024, i))} ${sizes[i]}`;\n}\n\n/**\n * Handler for Array.reduce. It takes the array of statistics and sums each value.\n * This outputs an object that has total CPU and memory consumption.\n */\nexport const statReducer = (prev: ProcessType, curr: ProcessType): ProcessType => {\n\tconst statistics: ProcessStatisticsType[\"statistics\"] = {};\n\tSIMPLE_MODE_STATISTICS.forEach((stat) => {\n\t\tif (typeof prev.statistics[stat.value] === \"undefined\" || typeof curr.statistics[stat.value] === \"undefined\") {\n\t\t\tstatistics[stat.value] = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tstatistics[stat.value] = (prev.statistics[stat.value] ?? 0) + (curr.statistics[stat.value] ?? 0);\n\t});\n\n\tstatistics.name = \"Totals\";\n\tstatistics.uuid = \"Totals\";\n\n\treturn {\n\t\tvisible: curr.visible,\n\t\tstatistics,\n\t};\n};\n\n/**\n * Convenience function for rounding decimals to a given precision\n * Note that \"precision\" here means \"number of digits to the right of the decimal point\"\n */\nexport const roundDecimalToPrecision = (number: number, precision: number): number => {\n\t// Example: number = .12345, precision = 2\n\tconst shiftedNumber = number * Math.pow(10, precision); // example: 12.345\n\tconst roundedShiftedNumber = Math.round(shiftedNumber); // example: 12\n\treturn roundedShiftedNumber / Math.pow(10, precision); // example: .12\n};\n\ntype WindowViewItemType = {\n\twindowName: string;\n\tviewId: string;\n};\n/**\n * Gives a standard name for a view, given a window or view object\n * @returns string\n */\nexport const getViewName = (item: WindowViewItemType) => `${item.windowName}${VIEW_DELIMITER}${item.viewId}`;\n\ntype ViewObjectType = {\n\ttype: string;\n\tname: string;\n};\n/**\n * Returns the name of the parent window for the view by stripping the standard view identifier, or else return the supplied name if item is not a view\n */\nexport const getViewBaseName = (view: ViewObjectType): string => {\n\tif (view.type === \"view\") {\n\t\t// The `!` is TS's non-null assertion operator\n\t\treturn view.name.match(VIEW_NAME_REGEXP)![1];\n\t}\n\treturn view.name;\n};\n"]}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/components/processMonitor/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAIrD,MAAM,UAAU,YAAY,CAAC,GAAW;IACvC,OAAO,CACN,GAAG;SACD,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAE1B,OAAO,CAAC,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CACrD,CAAC;AACH,CAAC;AAID,MAAM,UAAU,WAAW,CAAC,KAAa;IACxC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAGhC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAGhD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAGvD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC;AAMD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAiB,EAAE,IAAiB,EAAe,EAAE;IAChF,MAAM,UAAU,GAAwC,EAAE,CAAC;IAC3D,sBAAsB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;;QACvC,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,WAAW,EAAE;YAC7G,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;YACnC,OAAO;SACP;QAED,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAC,CAAC;IAClG,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;IAE3B,OAAO;QACN,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,UAAU;KACV,CAAC;AACH,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAc,EAAE,SAAiB,EAAU,EAAE;IAEpF,MAAM,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACvD,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACvD,OAAO,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC,CAAC","sourcesContent":["import { SIMPLE_MODE_STATISTICS } from \"./constants\";\nimport { ProcessStatisticsType, ProcessType } from \"./ProcessMonitorTypes\";\n\n// This Is Proper Case\nexport function toProperCase(str: string) {\n\treturn (\n\t\tstr\n\t\t\t.replace(/([A-Z])/g, \" $1\")\n\t\t\t// uppercase the first character\n\t\t\t.replace(/^./, (char: string) => char.toUpperCase())\n\t);\n}\n/**\n * Given a number, will return a nice string, 1,024 will return 1KB, 100 will return 100 Bytes, and so on.\n */\nexport function bytesToSize(bytes: number) {\n\tif (bytes == 0) return \"0 Byte\";\n\n\t// Size powers, in English\n\tconst sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\n\n\t// Determine the size power for the number of bytes\n\tconst i = Math.floor(Math.log(bytes) / Math.log(1024));\n\n\t// Return the size, rounded\n\treturn `${Math.round(bytes / Math.pow(1024, i))} ${sizes[i]}`;\n}\n\n/**\n * Handler for Array.reduce. It takes the array of statistics and sums each value.\n * This outputs an object that has total CPU and memory consumption.\n */\nexport const statReducer = (prev: ProcessType, curr: ProcessType): ProcessType => {\n\tconst statistics: ProcessStatisticsType[\"statistics\"] = {};\n\tSIMPLE_MODE_STATISTICS.forEach((stat) => {\n\t\tif (typeof prev.statistics[stat.value] === \"undefined\" || typeof curr.statistics[stat.value] === \"undefined\") {\n\t\t\tstatistics[stat.value] = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tstatistics[stat.value] = (prev.statistics[stat.value] ?? 0) + (curr.statistics[stat.value] ?? 0);\n\t});\n\n\tstatistics.name = \"Totals\";\n\n\treturn {\n\t\tvisible: curr.visible,\n\t\tstatistics,\n\t};\n};\n\n/**\n * Convenience function for rounding decimals to a given precision\n * Note that \"precision\" here means \"number of digits to the right of the decimal point\"\n */\nexport const roundDecimalToPrecision = (number: number, precision: number): number => {\n\t// Example: number = .12345, precision = 2\n\tconst shiftedNumber = number * Math.pow(10, precision); // example: 12.345\n\tconst roundedShiftedNumber = Math.round(shiftedNumber); // example: 12\n\treturn roundedShiftedNumber / Math.pow(10, precision); // example: .12\n};\n"]}
@@ -16,16 +16,8 @@ declare const Actions: {
16
16
  getFlashingState: (cb?: StandardCallback<StandardError, any> | undefined) => void;
17
17
  setFlashingState: (value: boolean, cb?: StandardCallback<StandardError, any> | undefined) => void;
18
18
  identifyWindow: (winID: ChildWindowType) => void;
19
- terminateProcess: (AppIdentifier: {
20
- uuid: string;
21
- }, force?: boolean) => void;
22
- removeWindowLocally: (winID: {
23
- uuid: string;
24
- name: string;
25
- }) => void;
26
- closeWindow: (winID: {
27
- uuid: string;
28
- name: string;
29
- }, force?: boolean) => void;
19
+ terminateProcess: (webContents: ProcessType["statistics"]["webContents"]) => void;
20
+ removeWindowLocally: (windowName: string) => void;
21
+ closeWindow: (windowName: string, force?: boolean) => void;
30
22
  };
31
23
  export { ProcessMonitorStore as Store, Actions };
@@ -1,4 +1,3 @@
1
- import { getViewName, getViewBaseName } from "../helpers";
2
1
  import async from "async";
3
2
  let ProcessMonitorStore;
4
3
  const DEFAULT_SORT_DIRECTION = "ascending";
@@ -66,26 +65,21 @@ const Actions = {
66
65
  createDataModel: (processes, cb) => {
67
66
  const mode = ProcessMonitorStore === null || ProcessMonitorStore === void 0 ? void 0 : ProcessMonitorStore.getValue({ field: "viewMode" });
68
67
  const sortWindow = (a, b) => {
69
- if (a.name < b.name)
68
+ if (a.webContentsName < b.webContentsName)
70
69
  return -1;
71
- if (a.name > b.name)
70
+ if (a.webContentsName > b.webContentsName)
72
71
  return 1;
73
72
  return 0;
74
73
  };
75
74
  const viewOrWindowToProc = (item) => {
76
- const name = "name" in item
77
- ? item.name
78
- : getViewName({
79
- windowName: item.windowName,
80
- viewId: String(item.id),
81
- });
82
75
  return {
83
- name,
84
- type: "name" in item ? "window" : "view",
76
+ webContentsName: item.webContentsName,
77
+ windowName: item.windowName,
78
+ type: item.type,
85
79
  };
86
80
  };
87
81
  const allowAdvanced = (item) => {
88
- const windowName = "name" in item ? item.name.toLowerCase() : item.windowName.toLowerCase();
82
+ const windowName = item.webContentsName.toLowerCase();
89
83
  const windowIsService = windowName.includes("service");
90
84
  const windowIsSystem = windowName.includes("system");
91
85
  const windowIsUnnamed = windowName.includes("unnamed");
@@ -104,7 +98,7 @@ const Actions = {
104
98
  visible: false,
105
99
  };
106
100
  }
107
- const childWindows = [...proc.windows, ...proc.views]
101
+ const childWindows = [...Object.values(proc.webContents)]
108
102
  .filter(allowAdvanced)
109
103
  .map(viewOrWindowToProc)
110
104
  .sort(sortWindow);
@@ -160,12 +154,11 @@ const Actions = {
160
154
  ProcessMonitorStore === null || ProcessMonitorStore === void 0 ? void 0 : ProcessMonitorStore.setValue({ field: "flashing", value }, cb);
161
155
  },
162
156
  identifyWindow: function (winID) {
163
- if (winID.name.includes("Service"))
157
+ if (winID.windowName.includes("Service"))
164
158
  return;
165
- const baseName = getViewBaseName(winID);
166
159
  this.setFlashingState(true);
167
160
  const OPACITY_ANIMATION_DURATION = 200;
168
- FSBL.FinsembleWindow.getInstance({ name: baseName }, (err, win) => {
161
+ FSBL.FinsembleWindow.getInstance({ name: winID.windowName }, (err, win) => {
169
162
  let windowState = "hidden";
170
163
  function flash(n, done) {
171
164
  setTimeout(() => {
@@ -193,39 +186,15 @@ const Actions = {
193
186
  });
194
187
  });
195
188
  },
196
- terminateProcess: (AppIdentifier, force = false) => {
197
- const app = FSBL.System.Application.wrap(AppIdentifier.uuid);
198
- const onCloseFailure = () => {
199
- if (force) {
200
- terminateProcess();
201
- }
202
- else {
203
- Actions.terminateProcess(AppIdentifier, true);
204
- }
205
- };
189
+ terminateProcess: (webContents) => {
206
190
  const forceCloseProcess = () => {
207
- const closeTimeout = setTimeout(() => {
208
- onCloseFailure();
209
- }, MAGIC_NUMBER_TERMINATION_TIMEOUT);
210
- const onCloseSuccess = () => {
211
- clearTimeout(closeTimeout);
212
- };
213
- app.close(force, onCloseSuccess, onCloseFailure);
214
- };
215
- const terminateProcess = () => {
216
- app.terminate(() => { }, () => {
217
- FSBL.Clients.DialogManager.open("yesNo", {
218
- title: "Error",
219
- question: "The process that you are attempting to close is unresponsive. Please contact support.",
220
- affirmativeButtonLabel: "Okay",
221
- showCancelButton: false,
222
- showNegativeButton: false,
223
- }, () => { });
191
+ if (!webContents)
192
+ return;
193
+ const windowNames = new Set(Object.values(webContents).map((item) => item.windowName));
194
+ windowNames.forEach((windowName) => {
195
+ Actions.closeWindow(windowName, true);
224
196
  });
225
197
  };
226
- if (force) {
227
- return forceCloseProcess();
228
- }
229
198
  FSBL.Clients.DialogManager.open("yesNo", {
230
199
  title: "Terminate Process?",
231
200
  question: "Terminating the process may close other apps. Are you sure you want to continue?",
@@ -237,41 +206,32 @@ const Actions = {
237
206
  }
238
207
  });
239
208
  },
240
- removeWindowLocally: function (winID) {
209
+ removeWindowLocally: function (windowName) {
241
210
  let procs = ProcessMonitorStore === null || ProcessMonitorStore === void 0 ? void 0 : ProcessMonitorStore.getValue({ field: "processList" });
242
211
  procs = procs.map((proc) => {
243
212
  if (proc.childWindows) {
244
- const cwIndex = proc.childWindows.findIndex((cw) => cw.name === winID.name);
213
+ const cwIndex = proc.childWindows.findIndex((cw) => cw.windowName === windowName);
245
214
  proc.childWindows.splice(cwIndex, 1);
246
215
  }
247
216
  return proc;
248
217
  });
249
218
  ProcessMonitorStore === null || ProcessMonitorStore === void 0 ? void 0 : ProcessMonitorStore.setValue({ field: "processList", value: procs });
250
219
  },
251
- closeWindow: function (winID, force = false) {
252
- const win = FSBL.System.Window.wrap(winID.uuid, winID.name);
253
- Actions.removeWindowLocally(winID);
220
+ closeWindow: function (windowName, force = false) {
221
+ const win = FSBL.System.Window.wrap(windowName);
254
222
  const onCloseFailure = () => {
255
223
  if (force) {
256
- FSBL.Clients.DialogManager.open("yesNo", {
257
- title: "Terminate Process?",
258
- question: "The app that you are attempting to close is unresponsive. Would you like to terminate the process? Terminating the process may close other apps.",
259
- affirmativeResponseLabel: "Terminate",
260
- showNegativeButton: false,
261
- }, (err, response) => {
262
- if (err || response.choice === "affirmative") {
263
- return Actions.terminateProcess({ uuid: winID.uuid }, true);
264
- }
265
- });
224
+ alert("Cannot close window");
266
225
  }
267
226
  else {
268
- Actions.closeWindow(winID, true);
227
+ Actions.closeWindow(windowName, true);
269
228
  }
270
229
  };
271
230
  const closeTimeout = setTimeout(() => {
272
231
  onCloseFailure();
273
232
  }, MAGIC_NUMBER_TERMINATION_TIMEOUT);
274
233
  const onCloseSuccess = () => {
234
+ Actions.removeWindowLocally(windowName);
275
235
  clearTimeout(closeTimeout);
276
236
  };
277
237
  win.close(force, onCloseSuccess, onCloseFailure);