@finsemble/finsemble-ui 7.0.0 → 7.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (787) hide show
  1. package/package.json +13 -11
  2. package/react/actions/favoriteActions.d.ts +1 -0
  3. package/react/actions/favoriteActions.js +1 -0
  4. package/react/actions/favoriteActions.js.map +1 -1
  5. package/react/actions/menuActions.d.ts +1 -0
  6. package/react/actions/menuActions.js +1 -0
  7. package/react/actions/menuActions.js.map +1 -1
  8. package/react/actions/rootActions.d.ts +1 -0
  9. package/react/actions/rootActions.js +1 -0
  10. package/react/actions/rootActions.js.map +1 -1
  11. package/react/actions/searchActions.d.ts +1 -0
  12. package/react/actions/searchActions.js +1 -0
  13. package/react/actions/searchActions.js.map +1 -1
  14. package/react/actions/toolbarActions.d.ts +34 -0
  15. package/react/actions/toolbarActions.js +17 -0
  16. package/react/actions/toolbarActions.js.map +1 -1
  17. package/react/actions/workspaceActions.d.ts +1 -0
  18. package/react/actions/workspaceActions.js +1 -0
  19. package/react/actions/workspaceActions.js.map +1 -1
  20. package/react/assets/css/advancedAppLauncher.css +22 -19
  21. package/react/assets/css/appCatalog.css +67 -72
  22. package/react/assets/css/authentication.css +4 -3
  23. package/react/assets/css/button.css +3 -10
  24. package/react/assets/css/core/formElements.css +1 -1
  25. package/react/assets/css/core/icons.css +3 -2
  26. package/react/assets/css/core/notifications.css +2 -2
  27. package/react/assets/css/core/windowFrame.css +9 -9
  28. package/react/assets/css/dashbar.css +1 -1
  29. package/react/assets/css/defaultTheme.css +9 -53
  30. package/react/assets/css/dialogs.css +13 -11
  31. package/react/assets/css/favorites.css +3 -1
  32. package/react/assets/css/finsemble.css +3 -2
  33. package/react/assets/css/font-finance.css +233 -120
  34. package/react/assets/css/fonts/Open_Sans/OpenSans-Definition.css +10 -10
  35. package/react/assets/css/linkerWindow.css +2 -2
  36. package/react/assets/css/menus.css +10 -10
  37. package/react/assets/css/notificationsCenter.css +16 -31
  38. package/react/assets/css/processMonitor.css +7 -4
  39. package/react/assets/css/search.css +1 -1
  40. package/react/assets/css/shared/animations.css +10 -4
  41. package/react/assets/css/shared/common.css +2 -2
  42. package/react/assets/css/tags.css +10 -10
  43. package/react/assets/css/toolbar.css +22 -19
  44. package/react/assets/css/userPreferences.css +12 -14
  45. package/react/assets/css/windowTitleBar.css +75 -36
  46. package/react/componentTemplateGenerator.js +3 -2
  47. package/react/componentTemplateGenerator.js.map +1 -1
  48. package/react/components/FinsembleProvider.d.ts +7 -0
  49. package/react/components/FinsembleProvider.js +2 -0
  50. package/react/components/FinsembleProvider.js.map +1 -1
  51. package/react/components/appCatalog/AppCatalog.d.ts +4 -0
  52. package/react/components/appCatalog/AppCatalog.js +4 -0
  53. package/react/components/appCatalog/AppCatalog.js.map +1 -1
  54. package/react/components/appCatalog/AppCatalogComponent.d.ts +58 -0
  55. package/react/components/appCatalog/AppCatalogComponent.js +70 -1
  56. package/react/components/appCatalog/AppCatalogComponent.js.map +1 -1
  57. package/react/components/appCatalog/components/AppCard.d.ts +35 -0
  58. package/react/components/appCatalog/components/AppCard.js +42 -0
  59. package/react/components/appCatalog/components/AppCard.js.map +1 -1
  60. package/react/components/appCatalog/components/AppResults.d.ts +10 -0
  61. package/react/components/appCatalog/components/AppResults.js +24 -0
  62. package/react/components/appCatalog/components/AppResults.js.map +1 -1
  63. package/react/components/appCatalog/components/Carousel.d.ts +26 -0
  64. package/react/components/appCatalog/components/Carousel.js +34 -0
  65. package/react/components/appCatalog/components/Carousel.js.map +1 -1
  66. package/react/components/appCatalog/components/EmptyResults.d.ts +4 -0
  67. package/react/components/appCatalog/components/EmptyResults.js +8 -0
  68. package/react/components/appCatalog/components/EmptyResults.js.map +1 -1
  69. package/react/components/appCatalog/components/Hero.d.ts +15 -0
  70. package/react/components/appCatalog/components/Hero.js +15 -0
  71. package/react/components/appCatalog/components/Hero.js.map +1 -1
  72. package/react/components/appCatalog/components/Home.d.ts +6 -4
  73. package/react/components/appCatalog/components/Home.js +10 -0
  74. package/react/components/appCatalog/components/Home.js.map +1 -1
  75. package/react/components/appCatalog/components/SearchBar.d.ts +31 -0
  76. package/react/components/appCatalog/components/SearchBar.js +33 -0
  77. package/react/components/appCatalog/components/SearchBar.js.map +1 -1
  78. package/react/components/appCatalog/components/Showcase/AppDescription.d.ts +5 -0
  79. package/react/components/appCatalog/components/Showcase/AppDescription.js +9 -0
  80. package/react/components/appCatalog/components/Showcase/AppDescription.js.map +1 -1
  81. package/react/components/appCatalog/components/Showcase/AppDevNotes.d.ts +7 -0
  82. package/react/components/appCatalog/components/Showcase/AppDevNotes.js +15 -0
  83. package/react/components/appCatalog/components/Showcase/AppDevNotes.js.map +1 -1
  84. package/react/components/appCatalog/components/Showcase/AppShowcase.d.ts +17 -0
  85. package/react/components/appCatalog/components/Showcase/AppShowcase.js +25 -0
  86. package/react/components/appCatalog/components/Showcase/AppShowcase.js.map +1 -1
  87. package/react/components/appCatalog/components/Showcase/Header.d.ts +7 -0
  88. package/react/components/appCatalog/components/Showcase/Header.js +12 -0
  89. package/react/components/appCatalog/components/Showcase/Header.js.map +1 -1
  90. package/react/components/appCatalog/components/Showcase/ImageCarousel.d.ts +7 -0
  91. package/react/components/appCatalog/components/Showcase/ImageCarousel.js +11 -0
  92. package/react/components/appCatalog/components/Showcase/ImageCarousel.js.map +1 -1
  93. package/react/components/appCatalog/components/Showcase/Modal.d.ts +10 -0
  94. package/react/components/appCatalog/components/Showcase/Modal.js +10 -0
  95. package/react/components/appCatalog/components/Showcase/Modal.js.map +1 -1
  96. package/react/components/appCatalog/components/Showcase/ReleaseNotes.d.ts +5 -0
  97. package/react/components/appCatalog/components/Showcase/ReleaseNotes.js +9 -0
  98. package/react/components/appCatalog/components/Showcase/ReleaseNotes.js.map +1 -1
  99. package/react/components/appCatalog/components/Showcase/SupportNotes.d.ts +6 -0
  100. package/react/components/appCatalog/components/Showcase/SupportNotes.js +11 -0
  101. package/react/components/appCatalog/components/Showcase/SupportNotes.js.map +1 -1
  102. package/react/components/appCatalog/components/Showcase/VersionNotes.d.ts +5 -0
  103. package/react/components/appCatalog/components/Showcase/VersionNotes.js +9 -0
  104. package/react/components/appCatalog/components/Showcase/VersionNotes.js.map +1 -1
  105. package/react/components/appCatalog/components/Tag.d.ts +6 -0
  106. package/react/components/appCatalog/components/Tag.js +10 -0
  107. package/react/components/appCatalog/components/Tag.js.map +1 -1
  108. package/react/components/appCatalog/components/Toast.d.ts +5 -0
  109. package/react/components/appCatalog/components/Toast.js +9 -0
  110. package/react/components/appCatalog/components/Toast.js.map +1 -1
  111. package/react/components/appCatalog/components/helpers.js +1 -0
  112. package/react/components/appCatalog/components/helpers.js.map +1 -1
  113. package/react/components/appCatalog/modules/AppDirectory.d.ts +5 -0
  114. package/react/components/appCatalog/modules/AppDirectory.js +5 -0
  115. package/react/components/appCatalog/modules/AppDirectory.js.map +1 -1
  116. package/react/components/appCatalog/modules/FDC3.d.ts +37 -0
  117. package/react/components/appCatalog/modules/FDC3.js +40 -0
  118. package/react/components/appCatalog/modules/FDC3.js.map +1 -1
  119. package/react/components/appCatalog/stores/appStore.js +1 -0
  120. package/react/components/appCatalog/stores/appStore.js.map +1 -1
  121. package/react/components/appCatalog/stores/storeActions.d.ts +91 -0
  122. package/react/components/appCatalog/stores/storeActions.js +116 -1
  123. package/react/components/appCatalog/stores/storeActions.js.map +1 -1
  124. package/react/components/common/Checkbox.d.ts +1 -0
  125. package/react/components/common/Checkbox.js +2 -2
  126. package/react/components/common/Checkbox.js.map +1 -1
  127. package/react/components/common/ColorPicker.d.ts +5 -0
  128. package/react/components/common/ColorPicker.js +40 -0
  129. package/react/components/common/ColorPicker.js.map +1 -1
  130. package/react/components/common/DropZone.d.ts +11 -0
  131. package/react/components/common/DropZone.js +21 -1
  132. package/react/components/common/DropZone.js.map +1 -1
  133. package/react/components/common/DropdownButton.d.ts +4 -0
  134. package/react/components/common/DropdownButton.js +4 -0
  135. package/react/components/common/DropdownButton.js.map +1 -1
  136. package/react/components/common/ErrorBoundary.d.ts +18 -0
  137. package/react/components/common/ErrorBoundary.js +21 -0
  138. package/react/components/common/ErrorBoundary.js.map +1 -1
  139. package/react/components/common/FileInput.d.ts +8 -1
  140. package/react/components/common/FileInput.js +19 -4
  141. package/react/components/common/FileInput.js.map +1 -1
  142. package/react/components/common/FinsembleIcon.d.ts +10 -0
  143. package/react/components/common/FinsembleIcon.js +51 -2
  144. package/react/components/common/FinsembleIcon.js.map +1 -1
  145. package/react/components/common/FinsembleSelect.js +5 -1
  146. package/react/components/common/FinsembleSelect.js.map +1 -1
  147. package/react/components/common/FinsembleToggleButtonBar.js +1 -1
  148. package/react/components/common/FinsembleToggleButtonBar.js.map +1 -1
  149. package/react/components/common/InputTable.d.ts +7 -0
  150. package/react/components/common/InputTable.js +7 -0
  151. package/react/components/common/InputTable.js.map +1 -1
  152. package/react/components/common/Tab.js +3 -0
  153. package/react/components/common/Tab.js.map +1 -1
  154. package/react/components/common/TimeSelect.js +24 -0
  155. package/react/components/common/TimeSelect.js.map +1 -1
  156. package/react/components/common/Tooltip.js +2 -0
  157. package/react/components/common/Tooltip.js.map +1 -1
  158. package/react/components/common/css/accordion.css +9 -6
  159. package/react/components/common/css/application-edit-page.css +39 -44
  160. package/react/components/common/css/button.css +10 -5
  161. package/react/components/common/css/color-picker.css +3 -3
  162. package/react/components/common/css/drop-zone.css +2 -6
  163. package/react/components/common/css/file-input.css +5 -5
  164. package/react/components/common/css/header.css +3 -2
  165. package/react/components/common/css/icon.css +1 -1
  166. package/react/components/common/css/loading-spinner.css +7 -12
  167. package/react/components/common/css/selector.css +4 -4
  168. package/react/components/common/css/styles.css +22 -16
  169. package/react/components/common/css/tab.css +8 -8
  170. package/react/components/common/css/time-select.css +1 -0
  171. package/react/components/common/css/toggle.css +4 -4
  172. package/react/components/common/css/tooltip.css +2 -3
  173. package/react/components/common/file_helpers.js +2 -0
  174. package/react/components/common/file_helpers.js.map +1 -1
  175. package/react/components/common/helpers.js +1 -0
  176. package/react/components/common/helpers.js.map +1 -1
  177. package/react/components/common/stories/ColorPicker.stories.js +3 -0
  178. package/react/components/common/stories/ColorPicker.stories.js.map +1 -1
  179. package/react/components/common/stories/FileInput.stories.d.ts +3 -1
  180. package/react/components/common/stories/FileInput.stories.js +12 -0
  181. package/react/components/common/stories/FileInput.stories.js.map +1 -1
  182. package/react/components/common/tests/Accordion.spec.js +6 -0
  183. package/react/components/common/tests/Accordion.spec.js.map +1 -1
  184. package/react/components/common/tests/Checkbox.spec.js +1 -0
  185. package/react/components/common/tests/Checkbox.spec.js.map +1 -1
  186. package/react/components/common/tests/ColorPicker.spec.js +6 -0
  187. package/react/components/common/tests/ColorPicker.spec.js.map +1 -1
  188. package/react/components/common/tests/DropZone.spec.js +1 -0
  189. package/react/components/common/tests/DropZone.spec.js.map +1 -1
  190. package/react/components/common/tests/FileInput.spec.js +22 -0
  191. package/react/components/common/tests/FileInput.spec.js.map +1 -1
  192. package/react/components/common/tests/FinsembleSelect.spec.js +1 -0
  193. package/react/components/common/tests/FinsembleSelect.spec.js.map +1 -1
  194. package/react/components/common/tests/FinsembleToggle.spec.js +1 -0
  195. package/react/components/common/tests/FinsembleToggle.spec.js.map +1 -1
  196. package/react/components/common/tests/FinsembleToggleButtonBar.spec.js +1 -0
  197. package/react/components/common/tests/FinsembleToggleButtonBar.spec.js.map +1 -1
  198. package/react/components/common/tests/TimeSelect.spec.js +4 -0
  199. package/react/components/common/tests/TimeSelect.spec.js.map +1 -1
  200. package/react/components/common/tests/Tooltip.spec.js +16 -0
  201. package/react/components/common/tests/Tooltip.spec.js.map +1 -1
  202. package/react/components/favorites/FavoriteMaker.d.ts +8 -0
  203. package/react/components/favorites/FavoriteMaker.js +9 -0
  204. package/react/components/favorites/FavoriteMaker.js.map +1 -1
  205. package/react/components/favorites/FavoritesShell.d.ts +4 -0
  206. package/react/components/favorites/FavoritesShell.js +13 -1
  207. package/react/components/favorites/FavoritesShell.js.map +1 -1
  208. package/react/components/favorites/FavoritesShell.spec.js +3 -0
  209. package/react/components/favorites/FavoritesShell.spec.js.map +1 -1
  210. package/react/components/fdc3Resolver/ResolverContainer.js +8 -0
  211. package/react/components/fdc3Resolver/ResolverContainer.js.map +1 -1
  212. package/react/components/fdc3Resolver/ResolverDialog.css +16 -3
  213. package/react/components/fdc3Resolver/ResolverDialog.js +7 -2
  214. package/react/components/fdc3Resolver/ResolverDialog.js.map +1 -1
  215. package/react/components/fdc3Resolver/ResolverDialog.spec.js +3 -2
  216. package/react/components/fdc3Resolver/ResolverDialog.spec.js.map +1 -1
  217. package/react/components/fdc3Resolver/ResolverDialog.stories.js +2 -0
  218. package/react/components/fdc3Resolver/ResolverDialog.stories.js.map +1 -1
  219. package/react/components/icon/Icon.d.ts +13 -0
  220. package/react/components/icon/Icon.js +34 -0
  221. package/react/components/icon/Icon.js.map +1 -1
  222. package/react/components/legacyControls/FinsembleDialog.d.ts +4 -0
  223. package/react/components/legacyControls/FinsembleDialog.js +15 -0
  224. package/react/components/legacyControls/FinsembleDialog.js.map +1 -1
  225. package/react/components/legacyControls/FinsembleDialogButton.d.ts +3 -0
  226. package/react/components/legacyControls/FinsembleDialogButton.js +6 -1
  227. package/react/components/legacyControls/FinsembleDialogButton.js.map +1 -1
  228. package/react/components/legacyControls/FinsembleDialogQuestion.d.ts +7 -0
  229. package/react/components/legacyControls/FinsembleDialogQuestion.js +7 -0
  230. package/react/components/legacyControls/FinsembleDialogQuestion.js.map +1 -1
  231. package/react/components/legacyControls/FinsembleDialogTextInput.d.ts +3 -0
  232. package/react/components/legacyControls/FinsembleDialogTextInput.js +14 -0
  233. package/react/components/legacyControls/FinsembleDialogTextInput.js.map +1 -1
  234. package/react/components/legacyControls/FinsembleDnDContext.d.ts +19 -0
  235. package/react/components/legacyControls/FinsembleDnDContext.js +126 -1
  236. package/react/components/legacyControls/FinsembleDnDContext.js.map +1 -1
  237. package/react/components/legacyControls/FinsembleDraggable.d.ts +3 -0
  238. package/react/components/legacyControls/FinsembleDraggable.js +3 -0
  239. package/react/components/legacyControls/FinsembleDraggable.js.map +1 -1
  240. package/react/components/legacyControls/FinsembleHoverDetector.d.ts +15 -0
  241. package/react/components/legacyControls/FinsembleHoverDetector.js +26 -1
  242. package/react/components/legacyControls/FinsembleHoverDetector.js.map +1 -1
  243. package/react/components/legacyControls/FinsembleMenuSection.d.ts +4 -0
  244. package/react/components/legacyControls/FinsembleMenuSection.js +38 -0
  245. package/react/components/legacyControls/FinsembleMenuSection.js.map +1 -1
  246. package/react/components/legacyControls/tests/FinsembleDialogButton.spec.js +1 -0
  247. package/react/components/legacyControls/tests/FinsembleDialogButton.spec.js.map +1 -1
  248. package/react/components/legacyControls/tests/FinsembleDialogTextInput.spec.js +1 -0
  249. package/react/components/legacyControls/tests/FinsembleDialogTextInput.spec.js.map +1 -1
  250. package/react/components/linker/LinkerMenu.d.ts +3 -0
  251. package/react/components/linker/LinkerMenu.js +21 -0
  252. package/react/components/linker/LinkerMenu.js.map +1 -1
  253. package/react/components/linker/LinkerMenuDeprecated.d.ts +3 -0
  254. package/react/components/linker/LinkerMenuDeprecated.js +9 -0
  255. package/react/components/linker/LinkerMenuDeprecated.js.map +1 -1
  256. package/react/components/menu/Menu.d.ts +15 -0
  257. package/react/components/menu/Menu.js +15 -0
  258. package/react/components/menu/Menu.js.map +1 -1
  259. package/react/components/menu/MenuAutoResizer.d.ts +7 -0
  260. package/react/components/menu/MenuAutoResizer.js +27 -0
  261. package/react/components/menu/MenuAutoResizer.js.map +1 -1
  262. package/react/components/menu/MenuContent.d.ts +4 -0
  263. package/react/components/menu/MenuContent.js +4 -0
  264. package/react/components/menu/MenuContent.js.map +1 -1
  265. package/react/components/menu/MenuHotKey.d.ts +14 -0
  266. package/react/components/menu/MenuHotKey.js +15 -0
  267. package/react/components/menu/MenuHotKey.js.map +1 -1
  268. package/react/components/menu/MenuItem.d.ts +8 -0
  269. package/react/components/menu/MenuItem.js +13 -2
  270. package/react/components/menu/MenuItem.js.map +1 -1
  271. package/react/components/menu/MenuPortal.js +112 -2
  272. package/react/components/menu/MenuPortal.js.map +1 -1
  273. package/react/components/menu/MenuShell.d.ts +16 -0
  274. package/react/components/menu/MenuShell.js +26 -0
  275. package/react/components/menu/MenuShell.js.map +1 -1
  276. package/react/components/menu/MenuToggle.d.ts +3 -0
  277. package/react/components/menu/MenuToggle.js +3 -0
  278. package/react/components/menu/MenuToggle.js.map +1 -1
  279. package/react/components/menu/keyboardNavigation.d.ts +12 -0
  280. package/react/components/menu/keyboardNavigation.js +55 -0
  281. package/react/components/menu/keyboardNavigation.js.map +1 -1
  282. package/react/components/menu/menuContext.d.ts +6 -0
  283. package/react/components/menu/menuContext.js +6 -0
  284. package/react/components/menu/menuContext.js.map +1 -1
  285. package/react/components/menu/menuHelpers.d.ts +22 -0
  286. package/react/components/menu/menuHelpers.js +58 -1
  287. package/react/components/menu/menuHelpers.js.map +1 -1
  288. package/react/components/notifications/components/drawer/DrawerControls.js +8 -0
  289. package/react/components/notifications/components/drawer/DrawerControls.js.map +1 -1
  290. package/react/components/notifications/components/drawer/DrawerHeader.js +5 -0
  291. package/react/components/notifications/components/drawer/DrawerHeader.js.map +1 -1
  292. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js +18 -0
  293. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js.map +1 -1
  294. package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js +3 -0
  295. package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js.map +1 -1
  296. package/react/components/notifications/components/shared/CheckButton.js +1 -1
  297. package/react/components/notifications/components/shared/CheckButton.js.map +1 -1
  298. package/react/components/notifications/components/shared/NotificationCardShell.d.ts +9 -0
  299. package/react/components/notifications/components/shared/NotificationCardShell.js +13 -6
  300. package/react/components/notifications/components/shared/NotificationCardShell.js.map +1 -1
  301. package/react/components/notifications/components/shared/OverflowMenu.d.ts +4 -0
  302. package/react/components/notifications/components/shared/OverflowMenu.js +16 -2
  303. package/react/components/notifications/components/shared/OverflowMenu.js.map +1 -1
  304. package/react/components/notifications/components/views/CardView.js +3 -0
  305. package/react/components/notifications/components/views/CardView.js.map +1 -1
  306. package/react/components/notifications/components/views/ListView.js +8 -0
  307. package/react/components/notifications/components/views/ListView.js.map +1 -1
  308. package/react/components/notifications/notificationsContext.d.ts +4 -0
  309. package/react/components/notifications/notificationsContext.js +4 -0
  310. package/react/components/notifications/notificationsContext.js.map +1 -1
  311. package/react/components/notifications/types.d.ts +3 -0
  312. package/react/components/notifications/utils.d.ts +4 -0
  313. package/react/components/notifications/utils.js +4 -0
  314. package/react/components/notifications/utils.js.map +1 -1
  315. package/react/components/processMonitor/ProcessMonitor.d.ts +3 -0
  316. package/react/components/processMonitor/ProcessMonitor.js +17 -2
  317. package/react/components/processMonitor/ProcessMonitor.js.map +1 -1
  318. package/react/components/processMonitor/components/ChildWindow.d.ts +3 -0
  319. package/react/components/processMonitor/components/ChildWindow.js +5 -0
  320. package/react/components/processMonitor/components/ChildWindow.js.map +1 -1
  321. package/react/components/processMonitor/components/ListHeader.d.ts +5 -0
  322. package/react/components/processMonitor/components/ListHeader.js +7 -0
  323. package/react/components/processMonitor/components/ListHeader.js.map +1 -1
  324. package/react/components/processMonitor/components/ProcessStatistics.js +12 -1
  325. package/react/components/processMonitor/components/ProcessStatistics.js.map +1 -1
  326. package/react/components/processMonitor/constants.js +6 -0
  327. package/react/components/processMonitor/constants.js.map +1 -1
  328. package/react/components/processMonitor/helpers.d.ts +13 -0
  329. package/react/components/processMonitor/helpers.js +23 -3
  330. package/react/components/processMonitor/helpers.js.map +1 -1
  331. package/react/components/processMonitor/stores/ProcessMonitorStore.d.ts +39 -0
  332. package/react/components/processMonitor/stores/ProcessMonitorStore.js +50 -0
  333. package/react/components/processMonitor/stores/ProcessMonitorStore.js.map +1 -1
  334. package/react/components/quickComponentForm/QuickComponentForm.d.ts +3 -0
  335. package/react/components/quickComponentForm/QuickComponentForm.js +20 -0
  336. package/react/components/quickComponentForm/QuickComponentForm.js.map +1 -1
  337. package/react/components/quickComponentForm/quickComponent.css +1 -1
  338. package/react/components/sdd/AddApp.d.ts +4 -2
  339. package/react/components/sdd/AddApp.js +57 -49
  340. package/react/components/sdd/AddApp.js.map +1 -1
  341. package/react/components/sdd/AppEditAccess.js +8 -0
  342. package/react/components/sdd/AppEditAccess.js.map +1 -1
  343. package/react/components/sdd/AppEditPage.d.ts +2 -1
  344. package/react/components/sdd/AppEditPage.js +148 -361
  345. package/react/components/sdd/AppEditPage.js.map +1 -1
  346. package/react/components/sdd/Appearance.css +1 -1
  347. package/react/components/sdd/Appearance.js +3 -0
  348. package/react/components/sdd/Appearance.js.map +1 -1
  349. package/react/components/sdd/Application.js +39 -7
  350. package/react/components/sdd/Application.js.map +1 -1
  351. package/react/components/sdd/Applications.js +89 -13
  352. package/react/components/sdd/Applications.js.map +1 -1
  353. package/react/components/sdd/AssetsPage.css +3 -3
  354. package/react/components/sdd/EditPreload.js +10 -0
  355. package/react/components/sdd/EditPreload.js.map +1 -1
  356. package/react/components/sdd/ExportCloud.js +4 -0
  357. package/react/components/sdd/ExportCloud.js.map +1 -1
  358. package/react/components/sdd/Publish.js +2 -0
  359. package/react/components/sdd/Publish.js.map +1 -1
  360. package/react/components/sdd/PublishProgress.js +11 -1
  361. package/react/components/sdd/PublishProgress.js.map +1 -1
  362. package/react/components/sdd/SmartDesktopDesigner.js +17 -0
  363. package/react/components/sdd/SmartDesktopDesigner.js.map +1 -1
  364. package/react/components/sdd/ThemePage.css +6 -23
  365. package/react/components/sdd/ThemePage.js +1 -1
  366. package/react/components/sdd/ThemePage.js.map +1 -1
  367. package/react/components/sdd/Themes.js +2 -0
  368. package/react/components/sdd/Themes.js.map +1 -1
  369. package/react/components/sdd/Toolbar.js +7 -0
  370. package/react/components/sdd/Toolbar.js.map +1 -1
  371. package/react/components/sdd/appEditPage/Behavior.d.ts +34 -0
  372. package/react/components/sdd/appEditPage/Behavior.js +134 -0
  373. package/react/components/sdd/appEditPage/Behavior.js.map +1 -0
  374. package/react/components/sdd/appEditPage/Component.d.ts +22 -0
  375. package/react/components/sdd/appEditPage/Component.js +76 -0
  376. package/react/components/sdd/appEditPage/Component.js.map +1 -0
  377. package/react/components/sdd/appEditPage/DebugToolkit.d.ts +9 -0
  378. package/react/components/sdd/appEditPage/DebugToolkit.js +20 -0
  379. package/react/components/sdd/appEditPage/DebugToolkit.js.map +1 -0
  380. package/react/components/sdd/appEditPage/Interop.d.ts +10 -0
  381. package/react/components/sdd/appEditPage/Interop.js +40 -0
  382. package/react/components/sdd/appEditPage/Interop.js.map +1 -0
  383. package/react/components/sdd/appEditPage/Position.d.ts +18 -0
  384. package/react/components/sdd/appEditPage/Position.js +72 -0
  385. package/react/components/sdd/appEditPage/Position.js.map +1 -0
  386. package/react/components/sdd/appEditPage/Preloads.d.ts +9 -0
  387. package/react/components/sdd/appEditPage/Preloads.js +16 -0
  388. package/react/components/sdd/appEditPage/Preloads.js.map +1 -0
  389. package/react/components/sdd/appEditPage/SelectConnect.d.ts +15 -0
  390. package/react/components/sdd/appEditPage/SelectConnect.js +28 -0
  391. package/react/components/sdd/appEditPage/SelectConnect.js.map +1 -0
  392. package/react/components/sdd/appEditPage/Workspace.d.ts +12 -0
  393. package/react/components/sdd/appEditPage/Workspace.js +30 -0
  394. package/react/components/sdd/appEditPage/Workspace.js.map +1 -0
  395. package/react/components/sdd/common/getCSSVars.js +7 -2
  396. package/react/components/sdd/common/getCSSVars.js.map +1 -1
  397. package/react/components/sdd/common/setPreloadDefaults.js +4 -0
  398. package/react/components/sdd/common/setPreloadDefaults.js.map +1 -1
  399. package/react/components/sdd/css/addApp.css +18 -5
  400. package/react/components/sdd/css/appearance.css +6 -0
  401. package/react/components/sdd/css/applications.css +27 -14
  402. package/react/components/sdd/css/authentication.css +7 -6
  403. package/react/components/sdd/css/buttons.css +1 -1
  404. package/react/components/sdd/css/export.css +5 -3
  405. package/react/components/sdd/css/getting-started.css +2 -2
  406. package/react/components/sdd/css/nav.css +8 -11
  407. package/react/components/sdd/css/project-header.css +5 -7
  408. package/react/components/sdd/css/styles.css +29 -23
  409. package/react/components/sdd/css/views.css +4 -3
  410. package/react/components/sdd/fixtures/apps.js +12 -0
  411. package/react/components/sdd/fixtures/apps.js.map +1 -1
  412. package/react/components/sdd/fixtures/configTemplate.js +1 -0
  413. package/react/components/sdd/fixtures/configTemplate.js.map +1 -1
  414. package/react/components/sdd/fixtures/publishProgress.js +40 -0
  415. package/react/components/sdd/fixtures/publishProgress.js.map +1 -1
  416. package/react/components/sdd/sdd_helpers.d.ts +6 -0
  417. package/react/components/sdd/sdd_helpers.js +6 -0
  418. package/react/components/sdd/sdd_helpers.js.map +1 -1
  419. package/react/components/sdd/smartDesktopClient.d.ts +303 -0
  420. package/react/components/sdd/smartDesktopClient.js +334 -1
  421. package/react/components/sdd/smartDesktopClient.js.map +1 -1
  422. package/react/components/sdd/smartDesktopClient.spec.js +5 -2
  423. package/react/components/sdd/smartDesktopClient.spec.js.map +1 -1
  424. package/react/components/sdd/stories/AddApp.stories.d.ts +2 -1
  425. package/react/components/sdd/stories/AddApp.stories.js +8 -0
  426. package/react/components/sdd/stories/AddApp.stories.js.map +1 -1
  427. package/react/components/sdd/stories/AppEditPage.stories.d.ts +3 -1
  428. package/react/components/sdd/stories/AppEditPage.stories.js +3 -0
  429. package/react/components/sdd/stories/AppEditPage.stories.js.map +1 -1
  430. package/react/components/sdd/stories/Appearance.stories.js +1 -0
  431. package/react/components/sdd/stories/Appearance.stories.js.map +1 -1
  432. package/react/components/sdd/tests/AddApp.spec.js +40 -3
  433. package/react/components/sdd/tests/AddApp.spec.js.map +1 -1
  434. package/react/components/sdd/tests/AppEditPage.spec.js +16 -0
  435. package/react/components/sdd/tests/AppEditPage.spec.js.map +1 -1
  436. package/react/components/sdd/tests/Application.spec.js +33 -438
  437. package/react/components/sdd/tests/Application.spec.js.map +1 -1
  438. package/react/components/sdd/tests/Applications.spec.d.ts +1 -1
  439. package/react/components/sdd/tests/Applications.spec.js +29 -5
  440. package/react/components/sdd/tests/Applications.spec.js.map +1 -1
  441. package/react/components/sdd/tests/Authentication.spec.js +7 -0
  442. package/react/components/sdd/tests/Authentication.spec.js.map +1 -1
  443. package/react/components/sdd/tests/ContentHeader.spec.js +2 -0
  444. package/react/components/sdd/tests/ContentHeader.spec.js.map +1 -1
  445. package/react/components/sdd/tests/EditPreload.spec.js +13 -0
  446. package/react/components/sdd/tests/EditPreload.spec.js.map +1 -1
  447. package/react/components/sdd/tests/Export.spec.js +2 -1
  448. package/react/components/sdd/tests/Export.spec.js.map +1 -1
  449. package/react/components/sdd/tests/ItemList.spec.js +4 -0
  450. package/react/components/sdd/tests/ItemList.spec.js.map +1 -1
  451. package/react/components/sdd/tests/OptionalSettingsView.spec.js +29 -0
  452. package/react/components/sdd/tests/OptionalSettingsView.spec.js.map +1 -1
  453. package/react/components/sdd/tests/ProjectErrors.spec.js +2 -0
  454. package/react/components/sdd/tests/ProjectErrors.spec.js.map +1 -1
  455. package/react/components/sdd/tests/Themes.spec.js +1 -1
  456. package/react/components/sdd/tests/Themes.spec.js.map +1 -1
  457. package/react/components/sdd/tests/Toolbar.spec.js +53 -0
  458. package/react/components/sdd/tests/Toolbar.spec.js.map +1 -1
  459. package/react/components/sdd/tests/a11y_helper.js +8 -0
  460. package/react/components/sdd/tests/a11y_helper.js.map +1 -1
  461. package/react/components/search/Highlight.d.ts +6 -0
  462. package/react/components/search/Highlight.js +19 -0
  463. package/react/components/search/Highlight.js.map +1 -1
  464. package/react/components/search/SearchBestMatch.d.ts +4 -0
  465. package/react/components/search/SearchBestMatch.js +11 -0
  466. package/react/components/search/SearchBestMatch.js.map +1 -1
  467. package/react/components/search/SearchInput.d.ts +5 -0
  468. package/react/components/search/SearchInput.js +6 -0
  469. package/react/components/search/SearchInput.js.map +1 -1
  470. package/react/components/search/SearchProviderResults.js +2 -0
  471. package/react/components/search/SearchProviderResults.js.map +1 -1
  472. package/react/components/search/SearchResult.js +6 -0
  473. package/react/components/search/SearchResult.js.map +1 -1
  474. package/react/components/search/SearchResult.spec.js +7 -0
  475. package/react/components/search/SearchResult.spec.js.map +1 -1
  476. package/react/components/search/SearchResult.stories.js +4 -0
  477. package/react/components/search/SearchResult.stories.js.map +1 -1
  478. package/react/components/search/SearchResults.js +5 -1
  479. package/react/components/search/SearchResults.js.map +1 -1
  480. package/react/components/search/SearchResults.spec.js +7 -0
  481. package/react/components/search/SearchResults.spec.js.map +1 -1
  482. package/react/components/shared/Animate.d.ts +5 -0
  483. package/react/components/shared/Animate.js +12 -1
  484. package/react/components/shared/Animate.js.map +1 -1
  485. package/react/components/shared/DefaultDropdownButton.js +9 -0
  486. package/react/components/shared/DefaultDropdownButton.js.map +1 -1
  487. package/react/components/shared/Tag.d.ts +0 -4
  488. package/react/components/shared/Tag.js +4 -0
  489. package/react/components/shared/Tag.js.map +1 -1
  490. package/react/components/shared/TagsMenu.d.ts +6 -0
  491. package/react/components/shared/TagsMenu.js +7 -0
  492. package/react/components/shared/TagsMenu.js.map +1 -1
  493. package/react/components/shared/addProtocolToValidURL.d.ts +6 -0
  494. package/react/components/shared/addProtocolToValidURL.js +6 -0
  495. package/react/components/shared/addProtocolToValidURL.js.map +1 -1
  496. package/react/components/shared/openQuitConfirmationDialog.d.ts +1 -1
  497. package/react/components/shared/openQuitConfirmationDialog.js +4 -4
  498. package/react/components/shared/openQuitConfirmationDialog.js.map +1 -1
  499. package/react/components/shared/tests/addProtocolToValidURL.spec.js +1 -0
  500. package/react/components/shared/tests/addProtocolToValidURL.spec.js.map +1 -1
  501. package/react/components/shared/validateURL.d.ts +18 -0
  502. package/react/components/shared/validateURL.js +24 -5
  503. package/react/components/shared/validateURL.js.map +1 -1
  504. package/react/components/singleInputDialog/SingleInputDialog.css +1 -1
  505. package/react/components/singleInputDialog/SingleInputDialog.d.ts +3 -0
  506. package/react/components/singleInputDialog/SingleInputDialog.js +44 -0
  507. package/react/components/singleInputDialog/SingleInputDialog.js.map +1 -1
  508. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js +6 -0
  509. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js.map +1 -1
  510. package/react/components/system/System.d.ts +22 -0
  511. package/react/components/system/System.js +23 -1
  512. package/react/components/system/System.js.map +1 -1
  513. package/react/components/system/System.stories.js +1 -0
  514. package/react/components/system/System.stories.js.map +1 -1
  515. package/react/components/system/SystemTrayComponentShell.d.ts +6 -0
  516. package/react/components/system/SystemTrayComponentShell.js +9 -0
  517. package/react/components/system/SystemTrayComponentShell.js.map +1 -1
  518. package/react/components/toolbar/AutoArrange.d.ts +5 -0
  519. package/react/components/toolbar/AutoArrange.js +8 -1
  520. package/react/components/toolbar/AutoArrange.js.map +1 -1
  521. package/react/components/toolbar/AutoArrange.spec.js +1 -0
  522. package/react/components/toolbar/AutoArrange.spec.js.map +1 -1
  523. package/react/components/toolbar/AutoArrange.stories.js +1 -0
  524. package/react/components/toolbar/AutoArrange.stories.js.map +1 -1
  525. package/react/components/toolbar/DragHandle.d.ts +4 -0
  526. package/react/components/toolbar/DragHandle.js +11 -0
  527. package/react/components/toolbar/DragHandle.js.map +1 -1
  528. package/react/components/toolbar/DragHandle.spec.js +1 -0
  529. package/react/components/toolbar/DragHandle.spec.js.map +1 -1
  530. package/react/components/toolbar/DragHandle.stories.js +1 -0
  531. package/react/components/toolbar/DragHandle.stories.js.map +1 -1
  532. package/react/components/toolbar/MinimizeAll.d.ts +4 -0
  533. package/react/components/toolbar/MinimizeAll.js +7 -1
  534. package/react/components/toolbar/MinimizeAll.js.map +1 -1
  535. package/react/components/toolbar/MinimizeAll.spec.js +1 -0
  536. package/react/components/toolbar/MinimizeAll.spec.js.map +1 -1
  537. package/react/components/toolbar/MinimizeAll.stories.js +1 -0
  538. package/react/components/toolbar/MinimizeAll.stories.js.map +1 -1
  539. package/react/components/toolbar/NotificationControl.d.ts +5 -0
  540. package/react/components/toolbar/NotificationControl.js +8 -1
  541. package/react/components/toolbar/NotificationControl.js.map +1 -1
  542. package/react/components/toolbar/RevealAll.d.ts +4 -0
  543. package/react/components/toolbar/RevealAll.js +7 -1
  544. package/react/components/toolbar/RevealAll.js.map +1 -1
  545. package/react/components/toolbar/RevealAll.spec.js +1 -0
  546. package/react/components/toolbar/RevealAll.spec.js.map +1 -1
  547. package/react/components/toolbar/RevealAll.stories.js +1 -0
  548. package/react/components/toolbar/RevealAll.stories.js.map +1 -1
  549. package/react/components/toolbar/SddButton.d.ts +4 -0
  550. package/react/components/toolbar/SddButton.js +4 -0
  551. package/react/components/toolbar/SddButton.js.map +1 -1
  552. package/react/components/toolbar/ToolbarIcon.d.ts +4 -0
  553. package/react/components/toolbar/ToolbarIcon.js +4 -0
  554. package/react/components/toolbar/ToolbarIcon.js.map +1 -1
  555. package/react/components/toolbar/ToolbarSection.d.ts +7 -0
  556. package/react/components/toolbar/ToolbarSection.js +19 -1
  557. package/react/components/toolbar/ToolbarSection.js.map +1 -1
  558. package/react/components/toolbar/ToolbarShell.d.ts +5 -0
  559. package/react/components/toolbar/ToolbarShell.js +7 -0
  560. package/react/components/toolbar/ToolbarShell.js.map +1 -1
  561. package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.d.ts +16 -0
  562. package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.js +20 -0
  563. package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.js.map +1 -1
  564. package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.d.ts +52 -0
  565. package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.js +58 -0
  566. package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.js.map +1 -1
  567. package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.d.ts +5 -0
  568. package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.js +5 -0
  569. package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.js.map +1 -1
  570. package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.d.ts +27 -0
  571. package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.js +49 -0
  572. package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.js.map +1 -1
  573. package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.d.ts +13 -0
  574. package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.js +14 -0
  575. package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.js.map +1 -1
  576. package/react/components/toolbar/advancedAppLauncher/components/Content.d.ts +5 -0
  577. package/react/components/toolbar/advancedAppLauncher/components/Content.js +19 -0
  578. package/react/components/toolbar/advancedAppLauncher/components/Content.js.map +1 -1
  579. package/react/components/toolbar/advancedAppLauncher/components/FilterSort.d.ts +4 -0
  580. package/react/components/toolbar/advancedAppLauncher/components/FilterSort.js +4 -0
  581. package/react/components/toolbar/advancedAppLauncher/components/FilterSort.js.map +1 -1
  582. package/react/components/toolbar/advancedAppLauncher/components/FoldersList.d.ts +16 -0
  583. package/react/components/toolbar/advancedAppLauncher/components/FoldersList.js +39 -0
  584. package/react/components/toolbar/advancedAppLauncher/components/FoldersList.js.map +1 -1
  585. package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.d.ts +4 -0
  586. package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.js +9 -0
  587. package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.js.map +1 -1
  588. package/react/components/toolbar/advancedAppLauncher/components/SearchBox.js +3 -0
  589. package/react/components/toolbar/advancedAppLauncher/components/SearchBox.js.map +1 -1
  590. package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.d.ts +6 -0
  591. package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.js +7 -0
  592. package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.js.map +1 -1
  593. package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.d.ts +5 -0
  594. package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.js +5 -0
  595. package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.js.map +1 -1
  596. package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.d.ts +5 -0
  597. package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.js +5 -0
  598. package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.js.map +1 -1
  599. package/react/components/toolbar/advancedAppLauncher/modules/FDC3.d.ts +37 -0
  600. package/react/components/toolbar/advancedAppLauncher/modules/FDC3.js +40 -0
  601. package/react/components/toolbar/advancedAppLauncher/modules/FDC3.js.map +1 -1
  602. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.d.ts +3 -0
  603. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js +82 -0
  604. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js.map +1 -1
  605. package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.d.ts +10 -0
  606. package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.js +11 -0
  607. package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.js.map +1 -1
  608. package/react/components/toolbar/appLauncher/AppLauncherMenu.d.ts +18 -0
  609. package/react/components/toolbar/appLauncher/AppLauncherMenu.js +20 -0
  610. package/react/components/toolbar/appLauncher/AppLauncherMenu.js.map +1 -1
  611. package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.d.ts +9 -0
  612. package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.js +12 -0
  613. package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.js.map +1 -1
  614. package/react/components/toolbar/appLauncher/appLauncher.css +1 -1
  615. package/react/components/toolbar/appLauncher/components/componentList.d.ts +3 -0
  616. package/react/components/toolbar/appLauncher/components/componentList.js +17 -3
  617. package/react/components/toolbar/appLauncher/components/componentList.js.map +1 -1
  618. package/react/components/toolbar/appLauncher/stores/appLauncherStore.d.ts +6 -0
  619. package/react/components/toolbar/appLauncher/stores/appLauncherStore.js +26 -0
  620. package/react/components/toolbar/appLauncher/stores/appLauncherStore.js.map +1 -1
  621. package/react/components/toolbar/dashbar/Dashbar.js +70 -3
  622. package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
  623. package/react/components/toolbar/dashbar/DashbarItem.js +5 -0
  624. package/react/components/toolbar/dashbar/DashbarItem.js.map +1 -1
  625. package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.d.ts +7 -0
  626. package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.js +7 -0
  627. package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.js.map +1 -1
  628. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.d.ts +16 -0
  629. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js +20 -0
  630. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js.map +1 -1
  631. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.d.ts +26 -0
  632. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.js +29 -0
  633. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.js.map +1 -1
  634. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.d.ts +5 -0
  635. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.js +6 -0
  636. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.js.map +1 -1
  637. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.d.ts +76 -0
  638. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js +140 -1
  639. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js.map +1 -1
  640. package/react/components/toolbar/workspaceManagementMenu/workspaceManagementMenu.css +8 -18
  641. package/react/components/userPreferences/NotificationsPreferencesContext.d.ts +4 -0
  642. package/react/components/userPreferences/NotificationsPreferencesContext.js +4 -0
  643. package/react/components/userPreferences/NotificationsPreferencesContext.js.map +1 -1
  644. package/react/components/userPreferences/UserPreferenceTypes.d.ts +3 -0
  645. package/react/components/userPreferences/UserPreferences.d.ts +8 -0
  646. package/react/components/userPreferences/UserPreferences.js +8 -0
  647. package/react/components/userPreferences/UserPreferences.js.map +1 -1
  648. package/react/components/userPreferences/UserPreferencesBase.js +4 -0
  649. package/react/components/userPreferences/UserPreferencesBase.js.map +1 -1
  650. package/react/components/userPreferences/components/ContentSection.d.ts +5 -0
  651. package/react/components/userPreferences/components/LeftNav.d.ts +4 -0
  652. package/react/components/userPreferences/components/content/DashbarEditor.js +3 -0
  653. package/react/components/userPreferences/components/content/DashbarEditor.js.map +1 -1
  654. package/react/components/userPreferences/components/content/Notifications.js +3 -0
  655. package/react/components/userPreferences/components/content/Notifications.js.map +1 -1
  656. package/react/components/userPreferences/components/content/Workspaces.d.ts +12 -0
  657. package/react/components/userPreferences/components/content/Workspaces.js +33 -1
  658. package/react/components/userPreferences/components/content/Workspaces.js.map +1 -1
  659. package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js +3 -0
  660. package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js.map +1 -1
  661. package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.js +3 -0
  662. package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.js.map +1 -1
  663. package/react/components/userPreferences/components/content/notificationViews/NotificationsSourcesPreferences.js +3 -0
  664. package/react/components/userPreferences/components/content/notificationViews/NotificationsSourcesPreferences.js.map +1 -1
  665. package/react/components/userPreferences/components/general/ScheduledClose.js +11 -0
  666. package/react/components/userPreferences/components/general/ScheduledClose.js.map +1 -1
  667. package/react/components/userPreferences/components/workspaces/WorkspaceItem.js +3 -0
  668. package/react/components/userPreferences/components/workspaces/WorkspaceItem.js.map +1 -1
  669. package/react/components/userPreferences/stores/UserPreferencesStore.d.ts +17 -0
  670. package/react/components/userPreferences/stores/UserPreferencesStore.js +27 -0
  671. package/react/components/userPreferences/stores/UserPreferencesStore.js.map +1 -1
  672. package/react/components/userPreferences/tests/NotificationsPreferencesHome.spec.js +1 -0
  673. package/react/components/userPreferences/tests/NotificationsPreferencesHome.spec.js.map +1 -1
  674. package/react/components/userPreferences/tests/Workspace.spec.js +20 -0
  675. package/react/components/userPreferences/tests/Workspace.spec.js.map +1 -1
  676. package/react/components/windowTitleBar/WindowTitleBarShell.d.ts +124 -0
  677. package/react/components/windowTitleBar/WindowTitleBarShell.js +284 -35
  678. package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
  679. package/react/components/windowTitleBar/components/center/Tab.d.ts +3 -0
  680. package/react/components/windowTitleBar/components/center/Tab.js +3 -0
  681. package/react/components/windowTitleBar/components/center/Tab.js.map +1 -1
  682. package/react/components/windowTitleBar/components/center/TabList.d.ts +90 -0
  683. package/react/components/windowTitleBar/components/center/TabList.js +170 -4
  684. package/react/components/windowTitleBar/components/center/TabList.js.map +1 -1
  685. package/react/components/windowTitleBar/components/left/LinkerButton.d.ts +9 -1
  686. package/react/components/windowTitleBar/components/left/LinkerButton.js +25 -9
  687. package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
  688. package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.d.ts +47 -0
  689. package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.js +76 -1
  690. package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.js.map +1 -1
  691. package/react/components/windowTitleBar/components/left/LinkerGroups.d.ts +4 -0
  692. package/react/components/windowTitleBar/components/left/LinkerGroups.js +5 -0
  693. package/react/components/windowTitleBar/components/left/LinkerGroups.js.map +1 -1
  694. package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.d.ts +18 -0
  695. package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.js +49 -0
  696. package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.js.map +1 -1
  697. package/react/components/windowTitleBar/components/left/ShareButton.d.ts +17 -0
  698. package/react/components/windowTitleBar/components/left/ShareButton.js +39 -0
  699. package/react/components/windowTitleBar/components/left/ShareButton.js.map +1 -1
  700. package/react/components/windowTitleBar/components/right/AlwaysOnTopButton.js +4 -0
  701. package/react/components/windowTitleBar/components/right/AlwaysOnTopButton.js.map +1 -1
  702. package/react/components/windowTitleBar/components/right/CloseButton.d.ts +27 -0
  703. package/react/components/windowTitleBar/components/right/CloseButton.js +27 -0
  704. package/react/components/windowTitleBar/components/right/CloseButton.js.map +1 -1
  705. package/react/components/windowTitleBar/components/right/GroupingButton.d.ts +37 -0
  706. package/react/components/windowTitleBar/components/right/GroupingButton.js +40 -0
  707. package/react/components/windowTitleBar/components/right/GroupingButton.js.map +1 -1
  708. package/react/components/windowTitleBar/components/right/MaximizeButton.d.ts +46 -0
  709. package/react/components/windowTitleBar/components/right/MaximizeButton.js +54 -0
  710. package/react/components/windowTitleBar/components/right/MaximizeButton.js.map +1 -1
  711. package/react/components/windowTitleBar/components/right/MinimizeButton.d.ts +26 -0
  712. package/react/components/windowTitleBar/components/right/MinimizeButton.js +26 -0
  713. package/react/components/windowTitleBar/components/right/MinimizeButton.js.map +1 -1
  714. package/react/components/windowTitleBar/components/windowTitle.d.ts +40 -0
  715. package/react/components/windowTitleBar/components/windowTitle.js +172 -10
  716. package/react/components/windowTitleBar/components/windowTitle.js.map +1 -1
  717. package/react/components/windowTitleBar/stores/windowTitleBarStore.d.ts +5 -0
  718. package/react/components/windowTitleBar/stores/windowTitleBarStore.js +72 -1
  719. package/react/components/windowTitleBar/stores/windowTitleBarStore.js.map +1 -1
  720. package/react/components/yesNoDialog/YesNoDialog.css +1 -1
  721. package/react/components/yesNoDialog/YesNoDialog.d.ts +3 -0
  722. package/react/components/yesNoDialog/YesNoDialog.js +63 -0
  723. package/react/components/yesNoDialog/YesNoDialog.js.map +1 -1
  724. package/react/components/yesNoDialog/YesNoDialog.spec.js +4 -0
  725. package/react/components/yesNoDialog/YesNoDialog.spec.js.map +1 -1
  726. package/react/components/yesNoDialog/timer.js +2 -0
  727. package/react/components/yesNoDialog/timer.js.map +1 -1
  728. package/react/enzymeSetup.js +5 -0
  729. package/react/enzymeSetup.js.map +1 -1
  730. package/react/hooks/useDashbar.js +10 -0
  731. package/react/hooks/useDashbar.js.map +1 -1
  732. package/react/hooks/useDeepEffect.d.ts +4 -0
  733. package/react/hooks/useDeepEffect.js +21 -0
  734. package/react/hooks/useDeepEffect.js.map +1 -1
  735. package/react/hooks/useFavorites.d.ts +15 -0
  736. package/react/hooks/useFavorites.js +3 -0
  737. package/react/hooks/useFavorites.js.map +1 -1
  738. package/react/hooks/useFavoritesShell.d.ts +4 -0
  739. package/react/hooks/useFavoritesShell.js +23 -0
  740. package/react/hooks/useFavoritesShell.js.map +1 -1
  741. package/react/hooks/useHotkey.d.ts +6 -0
  742. package/react/hooks/useHotkey.js +9 -0
  743. package/react/hooks/useHotkey.js.map +1 -1
  744. package/react/hooks/useLinker.js +14 -0
  745. package/react/hooks/useLinker.js.map +1 -1
  746. package/react/hooks/useMenu.d.ts +29 -0
  747. package/react/hooks/useMenu.js +12 -1
  748. package/react/hooks/useMenu.js.map +1 -1
  749. package/react/hooks/useNotifications.d.ts +44 -0
  750. package/react/hooks/useNotifications.js +90 -0
  751. package/react/hooks/useNotifications.js.map +1 -1
  752. package/react/hooks/useOutsideClickDetector.d.ts +3 -0
  753. package/react/hooks/useOutsideClickDetector.js +3 -0
  754. package/react/hooks/useOutsideClickDetector.js.map +1 -1
  755. package/react/hooks/usePubSub.d.ts +17 -0
  756. package/react/hooks/usePubSub.js +18 -0
  757. package/react/hooks/usePubSub.js.map +1 -1
  758. package/react/hooks/useSearch.d.ts +5 -0
  759. package/react/hooks/useSearch.js +30 -0
  760. package/react/hooks/useSearch.js.map +1 -1
  761. package/react/hooks/useToolbar.js +52 -0
  762. package/react/hooks/useToolbar.js.map +1 -1
  763. package/react/reducers/favoriteReducer.d.ts +3 -0
  764. package/react/reducers/linkerReducer.d.ts +3 -0
  765. package/react/reducers/linkerReducer.js +4 -0
  766. package/react/reducers/linkerReducer.js.map +1 -1
  767. package/react/reducers/menuReducer.d.ts +28 -0
  768. package/react/reducers/menuReducer.js +34 -0
  769. package/react/reducers/menuReducer.js.map +1 -1
  770. package/react/reducers/rootReducer.js +3 -0
  771. package/react/reducers/rootReducer.js.map +1 -1
  772. package/react/reducers/searchReducer.d.ts +7 -0
  773. package/react/reducers/searchReducer.js +6 -0
  774. package/react/reducers/searchReducer.js.map +1 -1
  775. package/react/reducers/workspaceReducer.js +1 -0
  776. package/react/reducers/workspaceReducer.js.map +1 -1
  777. package/react/store.d.ts +4 -0
  778. package/react/store.js +11 -0
  779. package/react/store.js.map +1 -1
  780. package/react/tsconfig.tsbuildinfo +1 -1
  781. package/react/types/fdc3.d.ts +2 -0
  782. package/react/types/linkerTypes.d.ts +13 -0
  783. package/react/types/linkerTypes.js +1 -0
  784. package/react/types/linkerTypes.js.map +1 -1
  785. package/react/types/smartDesktopDesignerTypes.d.ts +5 -0
  786. package/react/types/smartDesktopDesignerTypes.js.map +1 -1
  787. package/react/types/workspaceTypes.d.ts +8 -0
@@ -1 +1 @@
1
- {"version":3,"file":"smartDesktopClient.js","sourceRoot":"","sources":["../../../src/components/sdd/smartDesktopClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tAppDefinition,\n\tSelectConnectAppList,\n\tFEA,\n\tLogger,\n\tRouterClient,\n\tConfigClient,\n\tSystem,\n\tFEAGlobals,\n\tREST,\n\tDesktop,\n\tStandardErrorCallback,\n} from \"@finsemble/finsemble-api\";\n\ntype InstallerDescription = {\n\tname: string;\n\tversion?: string;\n\tauthors?: string;\n\tdescription?: string;\n};\n\nexport type CSS = { [key: string]: string };\n\nconst MAKER_TOPIC = \"SmartDesktopClient\";\nconst UI_CHANGE_TOPIC = \"Finsemble-ui-change\";\n\ntype AssetType = \"JS\" | \"CSS\" | \"JSON\" | \"Text\" | \"Image\" | \"GIF\" | \"Icon\";\n\nconst assetTests: Record<AssetType, { acceptedTypes: string[]; regex: RegExp }> = {\n\tImage: { acceptedTypes: [\"PNG\", \"JPEG\", \"JPG\"], regex: /\\.(jpe?g|png)$/i },\n\tGIF: { acceptedTypes: [\"GIF\"], regex: /\\.(gif)$/i },\n\tIcon: { acceptedTypes: [\"ICO\"], regex: /\\.(ico)$/i },\n\tJS: { acceptedTypes: [\"JS\"], regex: /\\.(js)$/i },\n\tJSON: { acceptedTypes: [\"JSON\"], regex: /\\.(json)$/i },\n\tCSS: { acceptedTypes: [\"CSS\"], regex: /\\.(css)$/i },\n\tText: { acceptedTypes: [\"TXT\"], regex: /\\.(txt)$/i },\n};\n\ntype Asset = {\n\ttype: AssetType[];\n\tfile: File;\n\ttargetPath: string;\n};\n\ntype AssetMeta = {\n\tkey: string;\n\tname: string;\n\ttype: string;\n\tsize: number;\n\ttargetPath: string | undefined;\n};\n\ntype MenuObjType = {\n\tdisplayName: string;\n\tapplications: string[];\n\tposition: number;\n};\ntype MenuType = {\n\t[key: string]: MenuObjType;\n};\n\ntype ProjectSettings = {\n\tname: string;\n\tpath?: string;\n\tversion?: string;\n\tauthors?: string;\n\tdescription?: string;\n};\n\ntype preloadUsageType = \"launchable\" | \"all\" | \"none\";\ntype PreloadDetail = {\n\turl: string;\n\tautoload: preloadUsageType;\n};\ntype PreloadMap = {\n\t[alias: string]: PreloadDetail;\n};\n\n/**\n * Determines if a SelectConnect `authorize` rule exists on a foreign app\n * for this app.\n *\n * @param sourceApp FDC3 AppD definition for the app we're working on\n * @param targetApp FDC3 AppD definition for the app we want to connect to\n * @param contextType Optional context type to defined the rule\n * @returns true if there is a matching rule\n */\nconst isInteropAuthorized = (sourceApp: AppDefinition, targetApp: AppDefinition, contextType?: string): boolean => {\n\tconst rules = targetApp.manifest?.interop?.selectConnect || [];\n\n\t// Find all authorized apps for any rules that match this context type\n\tconst allowedApps: SelectConnectAppList[] = rules.flatMap((rule) => {\n\t\tif (!contextType || (rule.contextType && rule.contextType !== contextType)) return [];\n\t\treturn rule.authorize ?? [];\n\t});\n\n\treturn allowedApps.some((rule) => rule.name === sourceApp.name);\n};\n\n/**\n * Arranges an array of words for display to end user\n * \"apples\"\n * \"apples or oranges\"\n * \"apples, oranges, or bananas\"\n */\nconst prettyList = (words: string[]): string => {\n\tconst { length } = words;\n\tif (length === 0) return \"\";\n\tif (length === 1) return words[0];\n\tif (length === 2) return `${words[0]} or ${words[1]}`;\n\treturn `${words.slice(0, length - 2).join(\", \")} or ${words[length - 1]}`;\n};\n\n/**\n *\n * Test Driver Example (can paste into component console)\n *\n window.smartDesktopClientDriver = async function makerClientDriver() {\n\t{\n\t\tlet { err, apps } = await SmartDesktopClient.getApps();\n\t\tLogger.log(\"getApps\", err ? err : \"ok\" , apps);\n\t}\n\t{\n\t\tlet { err, config } = await SmartDesktopClient.getAppConfig(\"Rates\");\n\t\tLogger.log(\"getAppConfig\", err ? err : \"ok\" , config);\n\t}\n\t{\n\t\tlet { config } = await SmartDesktopClient.getAppConfigTemplate();\n\t\tlet { err } = await SmartDesktopClient.addApp(\"testApp1\", config);\n\t\tLogger.log(\"addApp\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet { err } = await SmartDesktopClient.deleteApp(\"testApp1\");\n\t\tLogger.log(\"deleteApp\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tLogger.log(\"updateTheme\", err ? err : \"ok\" );\n\t\tlet { err } = await SmartDesktopClient.updateInstallerDescription({ name: \"sample installer name\", version: \"V0.0.0\", authors: \"M. Smith\", description: \"sample installer descriptions\" });\n\t\tLogger.log(\"updateInstallerDescription\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet blob = await fetch(\"http://localhost:3375/assets/img/test.png\").then(r => r.blob());\n\t\tvar file = new File([blob], \"foo.png\");\n\t\tlet { err } = await SmartDesktopClient.updateToolbarIcon(file);\n\t\tconsole.log(\"updateToolbarIcon\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet blob = await fetch(\"http://localhost:3375/assets/img/test.png\").then(r => r.blob());\n\t\tvar file = new File([blob], \"foo.png\");\n\t\tlet { err } = await SmartDesktopClient.updateTaskbarIcon(file);\n\t\tconsole.log(\"updateTaskbarIcon\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet blob = await fetch(\"http://localhost:3375/assets/img/test.png\").then(r => r.blob());\n\t\tvar file = new File([blob], \"foo.png\");\n\t\tlet { err } = await SmartDesktopClient.updateSystemTrayIcon(file);\n\t\tconsole.log(\"updateSystemTrayIcon\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet blob = await fetch(\"http://localhost:3375/assets/img/test.ico\").then(r => r.blob());\n\t\tvar file = new File([blob], \"foo.ico\");\n\t\tlet { err } = await SmartDesktopClient.updateInstallerIcon(file);\n\t\tconsole.log(\"updateInstallerIcon\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet blob = await fetch(\"http://localhost:3375/assets/img/install-spinner.gif\").then(r => r.blob());\n\t\tvar file = new File([blob], \"foo.gif\");\n\t\tlet { err } = await SmartDesktopClient.updateInstallerGraphic(file);\n\t\tconsole.log(\"updateInstallerGraphic\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet blob = await fetch(\"http://localhost:3375/assets/img/test.svg\").then(r => r.blob());\n\t\tvar file = new File([blob], \"foo.svg\");\n\t\tlet { err } = await SmartDesktopClient.updateSplashScreen(file);\n\t\tconsole.log(\"updateSplashScreen\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet { err } = await SmartDesktopClient.updateTheme({ cssSampleData: 1 });\n\t\tconsole.log(\"updateTheme\", err ? err : \"ok\" );\n\t}\n\t{\n\t \tlet { err } = await SmartDesktopClient.createProjectZip(\"testApp\", \"~/Downloads/\");\n\t\tLogger.log(\"createProjectZip\", err ? err : \"ok\" );\n\t}\n\t{\n\t\t<input type=\"file\" onChange={(e) => {\n\t\t\tconst file = e.target.files?.[0];\n\n\t\t\tlet { err } = await SmartDesktopClient.uploadAssets([\n\t\t\t\t{\n\t\t\t\t\tfile,\n\t\t\t\t\ttype: AssetType.Image,\n\t\t\t\t\ttargetPath: 'image.png',\n\t\t\t\t}\n\t\t\t], (progress) => {\n\t\t\t\t// ...\n\t\t\t});\n\n\t\t\tLogger.log(\"uploadAssets\", err ? err : \"ok\" );\n\t\t}} />\n\t}\n}\n */\nexport const SmartDesktopClient = {\n\tgetSDServerInfo: async (): Promise<FEA.SDServerInfo> => await System.getSDServerInfo(),\n\n\t/**\n\t * Confirm the Smart Desktop Server is enabled. This should be true before constructing and using a client.\n\t *\n\t * @static\n\t * @returns {Promise<Boolean>}\n\t */\n\tasync isEnabled(): Promise<Boolean> {\n\t\tconst { enabled } = await System.getSDServerInfo();\n\t\treturn enabled;\n\t},\n\n\t/**\n\t * Get the smart desktop server base URL.\n\t *\n\t * @static\n\t * @returns {Promise<Boolean>}\n\t */\n\tasync applicationRoot(): Promise<string | null> {\n\t\tconst { applicationRoot } = await System.getSDServerInfo();\n\t\treturn applicationRoot ? applicationRoot : null;\n\t},\n\n\t/**\n\t *\n\t */\n\tasync projectConfig(): Promise<FEA.ProjectConfig | null> {\n\t\tconst { projectConfig } = await System.getSDServerInfo();\n\t\treturn projectConfig ? projectConfig : null;\n\t},\n\n\t/**\n\t * Get list of all AppD applications\n\t *\n\t * @returns {Promise<{ err:any, data:any}>}\n\t *\n\t * @example\n\t * let { err, apps } = await SmartDesktopClient.getApps();\n\t */\n\tasync getApps(): Promise<{ err: any; apps: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.getApps\");\n\t\tconst { err, response } = await RouterClient.query(`${MAKER_TOPIC}.getApps`, {});\n\t\tLogger.system.log(\"SmartDesktopClient.getApps result\", err ? err : \"successful\", response);\n\t\treturn { err, apps: response?.data.applications ?? [] };\n\t},\n\n\t/**\n\t * Get list of all Menus\n\t *\n\t * @returns {Promise<{ err:any, data:any}>}\n\t *\n\t * @example\n\t * let { err, menus } = await SmartDesktopClient.getMenus();\n\t */\n\tasync getMenus(): Promise<{ err: any; menus: MenuType }> {\n\t\tLogger.system.log(\"ConfigClient getValue 'finsemble.toolbarMenus'\");\n\t\tconst { err, data } = await ConfigClient.getValue({ field: \"finsemble.toolbarMenus\" });\n\t\tLogger.system.log(\"finsemble.toolbarMenus result\", err ? err : \"successful\", data);\n\t\treturn { err, menus: data };\n\t},\n\n\t/**\n\t * Get the config.extensions.preloads object (from appd.json), which includes all registered\n\t * preloads and their details\n\t */\n\tasync getPreloads(): Promise<{ err: any; data: PreloadMap }> {\n\t\tLogger.system.log(\"SmartDesktopClient.getPreloads\");\n\t\tconst { err, response } = await RouterClient.query(`${MAKER_TOPIC}.getPreloads`, {});\n\t\tLogger.system.log(\"SmartDesktopClient.getPreloads result\", err ? err : \"successful\", response);\n\t\treturn { err, data: response?.data.preloads ?? {} };\n\t},\n\n\t/**\n\t * Get config for the specified AppD app.\n\t *\n\t * @example\n\t * let { err, config } = await SmartDesktopClient.getAppConfig(\"testApp\");\n\t */\n\tasync getAppConfig(appId: string): Promise<{ err: any; config: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.getAppConfig\", appId);\n\t\tconst { err, response } = await RouterClient.query(`${MAKER_TOPIC}.getAppConfig`, { appId });\n\t\tLogger.system.log(\"SmartDesktopClient.getAppConfig result\", err ? err : \"successful\", response);\n\t\treturn { err, config: response?.data ?? {} };\n\t},\n\n\t/**\n\t * Helper function returning a AppD config template with Finsemble component in manifest property.\n\t *\n\t * @returns {Promise<{ config: any }>}\n\t *\n\t * @example\n\t * let { config } = await SmartDesktopClient.getAppConfigTemplate();\n\t */\n\tasync getAppConfigTemplate(): Promise<{ config: AppDefinition }> {\n\t\tLogger.system.log(\"SmartDesktopClient.getAppConfigTemplate\");\n\t\tconst manifestJson = {\n\t\t\twindow: {\n\t\t\t\t// url: \"$applicationRoot/components/welcome/welcome.html\",\n\t\t\t\turl: \"\",\n\t\t\t\twidth: 1280,\n\t\t\t\theight: 600,\n\t\t\t},\n\t\t\tforeign: {\n\t\t\t\tcomponents: {\n\t\t\t\t\t\"App Launcher\": {\n\t\t\t\t\t\tlaunchableByUser: true,\n\t\t\t\t\t},\n\t\t\t\t\t\"Window Manager\": {\n\t\t\t\t\t\tpersistWindowState: true,\n\t\t\t\t\t\tFSBLHeader: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tconst appdConfigTemplate = {\n\t\t\tappId: \"123\",\n\t\t\tname: \"\",\n\t\t\tmanifest: manifestJson,\n\t\t\tmanifestType: \"finsemble\",\n\t\t\tversion: \"1\",\n\t\t};\n\t\tLogger.system.log(\"SmartDesktopClient.getAppConfigTemplate result\", appdConfigTemplate);\n\t\treturn { config: appdConfigTemplate };\n\t},\n\n\t/**\n\t * Add AppD application, which will modify Finsemble config and invoke REST API to persist the change\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.addApp(\"testApp\", config);\n\t */\n\tasync addApp(appId: string, appConfig: AppDefinition): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.addApp\", appId, appConfig);\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.addApp`, { appId, appConfig });\n\t\tLogger.system.log(\"SmartDesktopClient.addApp result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\tasync addMenu(menuConfig: MenuObjType): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.addMenu\");\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.addMenu`, { menuConfig });\n\t\tawait this.syncMenuConfig();\n\t\tLogger.system.log(\"SmartDesktopClient.addMenu result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\tasync syncMenuConfig() {\n\t\tLogger.system.log(\"SmartDesktopClient.syncMenuConfig\");\n\t\tconst { response } = await RouterClient.query(`${MAKER_TOPIC}.getMenus`, {});\n\t\tawait ConfigClient.setValue({\n\t\t\tfield: \"finsemble.toolbarMenus\",\n\t\t\tvalue: response?.data?.menus || {},\n\t\t});\n\t\tLogger.system.log(\"SmartDesktopClient.syncMenuConfig completed\");\n\t},\n\n\tasync updateMenu(menuId: string, menuConfig: MenuObjType): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.updateMenu\", menuId, menuConfig);\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.updateMenu`, { menuId, menuConfig });\n\t\tawait this.syncMenuConfig();\n\t\tLogger.system.log(\"SmartDesktopClient.updateMenu result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Add AppD application, which will modify Finsemble config and invoke REST API to persist the change\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.updateApp(\"testApp\", config);\n\t */\n\tasync updateApp(appId: string, appConfig: AppDefinition): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.updateApp\", appId, appConfig);\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.updateApp`, { appId, appConfig });\n\t\tLogger.system.log(\"SmartDesktopClient.updateApp result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Create/updates the preload with the specific preload alias\n\t */\n\tasync savePreload(oldAlias: string | null, newAlias: string, detail: PreloadDetail): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.savePreload\");\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.savePreload`, { oldAlias, newAlias, detail });\n\t\tLogger.system.log(\"SmartDesktopClient.savePreload result\", err ? err : \"successful\");\n\t\tconst { response } = await RouterClient.query(`${MAKER_TOPIC}.getPreloads`, {});\n\t\tif (!err && response.data) {\n\t\t\tawait ConfigClient.setValue({\n\t\t\t\tfield: \"finsemble.extensions.preloads\",\n\t\t\t\tvalue: response.data.preloads,\n\t\t\t});\n\t\t}\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Remove AppD application, which will modify Finsemble config and invoke REST API to persist the change\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.deleteApp(\"testApp\");\n\t */\n\tasync deleteApp(appId: string): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.deleteApp\", appId);\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.deleteApp`, { appId });\n\t\tLogger.system.log(\"SmartDesktopClient.deleteApp result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\tasync deleteMenu(menuId: string): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.deleteMenu\", menuId);\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.deleteMenu`, { menuId });\n\t\tawait this.syncMenuConfig();\n\t\tLogger.system.log(\"SmartDesktopClient.deleteMenu result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Remove a given preload from the registry in the config\n\t */\n\tasync deletePreload(alias: string): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.deletePreload\");\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.deletePreload`, { alias });\n\t\tLogger.system.log(\"SmartDesktopClient.deletePreload result\", err ? err : \"successful\");\n\t\tconst { response } = await RouterClient.query(`${MAKER_TOPIC}.getPreloads`, {});\n\t\tif (!err && response.data) {\n\t\t\tawait ConfigClient.setValue({\n\t\t\t\tfield: \"finsemble.extensions.preloads\",\n\t\t\t\tvalue: response.data.preloads,\n\t\t\t});\n\t\t}\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Update the theme of all components and invoke REST API to persist the change in Finsemble's theme.css file\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.updateTheme(cssData);\n\t */\n\tasync updateTheme(theme: CSS): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.updateTheme\", theme);\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.updateTheme`, { theme });\n\t\tLogger.system.log(\"SmartDesktopClient.updateTheme result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Get the theme from the REST API\n\t *\n\t * @returns {Promise<{ err, theme }>}\n\t * @memberOf SmartDesktopClient\n\t *\n\t * @example\n\t * let { err, theme } = await SmartDesktopClient.getTheme(cssData);\n\t */\n\tasync getTheme(): Promise<{ err: any; theme?: Record<string, string> }> {\n\t\tLogger.system.log(\"SmartDesktopClient.getTheme\");\n\t\tconst { err, response } = await RouterClient.query(`${MAKER_TOPIC}.getTheme`, {});\n\t\tLogger.system.log(\"SmartDesktopClient.getTheme result\", err ? err : \"successful\");\n\t\treturn { err, theme: response?.data };\n\t},\n\n\t/**\n\t * Add handler listening for theme updates\n\t *\n\t * @returns When called, unsubscribes the handler\n\t */\n\tonThemeUpdated(themeUpdatedHandler: StandardErrorCallback<any>): Function {\n\t\tRouterClient.addListener(`${UI_CHANGE_TOPIC}.themeUpdate`, themeUpdatedHandler);\n\t\tLogger.system.log(\"SmartDesktopClient.onThemeUpdated\", themeUpdatedHandler);\n\t\treturn () => RouterClient.removeListener(`${UI_CHANGE_TOPIC}.themeUpdate`, themeUpdatedHandler);\n\t},\n\n\t/**\n\t * Post a file to the smart desktop server\n\t *\n\t * @example\n\t * ...\n\t */\n\tasync uploadAssets(assets: Asset[], progress: Function): Promise<{ err: string | null; paths: string[] }> {\n\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets\", assets);\n\n\t\tconst applicationRoot = await this.applicationRoot();\n\n\t\t// Returns a string of accepted file types if the asset does not match a known type\n\t\tconst getAcceptedTypes = (asset: Asset): string[] => {\n\t\t\tlet acceptedTypes: string[] = [];\n\t\t\tlet valid = false;\n\t\t\tObject.entries(assetTests).forEach(([key, value]) => {\n\t\t\t\tif (asset.type.includes(key as AssetType)) {\n\t\t\t\t\tif (value.regex.test(asset.file.name)) valid = true;\n\t\t\t\t\tacceptedTypes = acceptedTypes.concat(value.acceptedTypes);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn valid ? [] : acceptedTypes;\n\t\t};\n\n\t\treturn new Promise((resolve) => {\n\t\t\tconst endpointURL = `${applicationRoot}/project/assets`;\n\n\t\t\tconst data = new FormData();\n\n\t\t\tconst assetMeta: AssetMeta[] = [];\n\n\t\t\tfor (let index = 0; index < assets.length; index++) {\n\t\t\t\tconst asset = assets[index];\n\n\t\t\t\tconst meta = {\n\t\t\t\t\tkey: `file-${index}`,\n\t\t\t\t\tname: asset.file.name,\n\t\t\t\t\ttype: asset.file.type,\n\t\t\t\t\tsize: asset.file.size,\n\t\t\t\t\ttargetPath: asset.targetPath,\n\t\t\t\t};\n\n\t\t\t\tconst acceptedTypes: string[] = getAcceptedTypes(asset);\n\n\t\t\t\tif (acceptedTypes.length) {\n\t\t\t\t\tconst error = `File must be of type ${prettyList(acceptedTypes)}`;\n\t\t\t\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets wrong image type\", error);\n\t\t\t\t\treturn resolve({ err: error, paths: [] });\n\t\t\t\t} else {\n\t\t\t\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets append\", meta.key, asset.file);\n\t\t\t\t\tdata.append(meta.key, asset.file);\n\t\t\t\t\tassetMeta.push(meta);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdata.append(\"assets\", JSON.stringify(assetMeta));\n\n\t\t\tvar xhr = new XMLHttpRequest();\n\n\t\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets put\", data, endpointURL);\n\t\t\txhr.open(\"PUT\", endpointURL, true);\n\n\t\t\txhr.addEventListener(\"progress\", (e) => {\n\t\t\t\tprogress(Math.round((e.loaded / e.total) * 100));\n\t\t\t});\n\n\t\t\t// xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n\n\t\t\txhr.onreadystatechange = () => {\n\t\t\t\t// Call a function when the state changes.\n\t\t\t\tif (xhr.readyState === XMLHttpRequest.DONE) {\n\t\t\t\t\tprogress(100);\n\n\t\t\t\t\tif (xhr.status !== 200) {\n\t\t\t\t\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets Failed Response\", xhr.response);\n\t\t\t\t\t\tresolve({ err: `Got response code: ${xhr.status}`, paths: [] });\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst response = JSON.parse(xhr.response);\n\n\t\t\t\t\t\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets Response\", xhr.response);\n\n\t\t\t\t\t\t\tresolve({ err: null, paths: response.paths });\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tresolve({ err: \"Couldn't parse response\", paths: [] });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets send\", data);\n\t\t\txhr.send(data);\n\t\t});\n\t},\n\n\t/**\n\t * Post images to the smart desktop server\n\t *\n\t * @example\n\t * ...\n\t */\n\tasync uploadImages(files: File[], progress: Function): Promise<{ err: any; paths: string[] }> {\n\t\treturn this.uploadAssets(\n\t\t\tfiles.map(\n\t\t\t\t(file) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\ttype: [\"Image\", \"GIF\"],\n\t\t\t\t\t} as Asset)\n\t\t\t),\n\t\t\tprogress\n\t\t);\n\t},\n\n\t/**\n\t * Post an image to the smart desktop server\n\t *\n\t * @example\n\t * ...\n\t */\n\tasync uploadImage(file: File, progress: Function): Promise<{ err: any; path: string }> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.uploadImages([file], progress)\n\t\t\t\t.then((response: { err: any; paths: string[] }) => {\n\t\t\t\t\tresolve({ err: response.err, path: response.paths[0] });\n\t\t\t\t})\n\t\t\t\t.catch(reject);\n\t\t});\n\t},\n\n\t/**\n\t * Update installer description by using REST API to persist the change\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.updateInstallerDescription(installerDescription);\n\t */\n\tasync updateInstallerDescription(installerDescription: InstallerDescription): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient updateInstallerDescription\", installerDescription);\n\t\tconst { err } = await REST.httpPatch(`/project/installer`, installerDescription);\n\t\tLogger.system.log(\"SmartDesktopClient.updateInstallerDescription Response\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Update installer description by using REST API to persist the change\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.updateInstallerDescription(installerDescription);\n\t */\n\tasync updateProjectSettings(settings: ProjectSettings): Promise<{ err: any }> {\n\t\tconst { err } = await REST.httpPatch(`/project/settings`, settings);\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Get project settings\n\t *\n\t * @example\n\t * let { settings, err } = await SmartDesktopClient.getProjectSettings();\n\t */\n\tasync getProjectSettings(): Promise<{\n\t\tsettings: ProjectSettings;\n\t\terr: any;\n\t}> {\n\t\tconst response = await REST.httpGet(`/project/settings`);\n\n\t\treturn response.getData;\n\t},\n\n\t/**\n\t * Helper function -- progress descriptor for updating files\n\t *\n\t */\n\tprogressIndicator(progress: any) {\n\t\tLogger.system.log(\"SmartDesktopClient.progressIndicator Console-Only\", progress);\n\t\tconsole.log(\"Console-Only Progress Indicator:\", progress);\n\t},\n\n\t/**\n\t * Update Finsemble toolbar icon file and transmit correspond ui-changed message so UI will pick up change\n\t *\n\t * @returns {Promise<{ err: any }>}\n\t */\n\tasync updateToolbarIcon(imageFile: File): Promise<{ err: string | null; path: string }> {\n\t\tconst TARGET_FILE = \"assets/img/Finsemble_Toolbar_Icon.png\";\n\t\tLogger.system.log(\"SmartDesktopClient.updateToolbarIcon\", TARGET_FILE, imageFile);\n\n\t\tconst { err, paths } = await this.uploadAssets(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tfile: imageFile,\n\t\t\t\t\ttype: [\"Image\", \"GIF\"],\n\t\t\t\t\ttargetPath: TARGET_FILE,\n\t\t\t\t},\n\t\t\t],\n\t\t\tthis.progressIndicator\n\t\t);\n\n\t\tif (!err) {\n\t\t\t// transmit change notification so Finsemble can dynamically update (see toolbar)\n\t\t\tRouterClient.transmit(\"Finsemble-ui-change.toolbarIconUpdate\", {});\n\t\t}\n\n\t\tLogger.system.log(\"SmartDesktopClient.updateToolbarIcon result\", err ? err : \"successful\");\n\t\treturn { err, path: paths[0] };\n\t},\n\n\t/**\n\t * Update Finsemble taskbar icon file and transmit correspond ui-changed message so UI will pick up change\n\t *\n\t */\n\tasync updateTaskbarIcon(imageFile: File): Promise<{ err: string | null; path: string }> {\n\t\tconst TARGET_FILE = \"assets/img/Finsemble_Taskbar_Icon.png\";\n\t\tLogger.system.log(\"SmartDesktopClient.updateTaskbarIcon\", imageFile);\n\n\t\tconst { err, paths } = await this.uploadAssets(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tfile: imageFile,\n\t\t\t\t\ttype: [\"Image\"],\n\t\t\t\t\ttargetPath: TARGET_FILE,\n\t\t\t\t},\n\t\t\t],\n\t\t\tthis.progressIndicator\n\t\t);\n\n\t\tif (!err) {\n\t\t\t// transmit notification so Finsemble can dynamically update (e.g. toolbar, taskbar)\n\t\t\tRouterClient.transmit(\"Finsemble-ui-change.taskbarIconUpdate\", {});\n\t\t}\n\n\t\tLogger.system.log(\"SmartDesktopClient.updateTaskbarIcon result\", err ? err : \"successful\");\n\t\treturn { err, path: paths[0] };\n\t},\n\n\t/**\n\t * Update system tray icon file and refresh config entry to trigger notification\n\t *\n\t */\n\tasync updateSystemTrayIcon(imageFile: File): Promise<{ err: string | null; path: string }> {\n\t\tconst TARGET_FILE = \"assets/img/Finsemble_SystemTray_Icon.png\";\n\t\tLogger.system.log(\"SmartDesktopClient.updateSystemTrayIcon\", imageFile);\n\n\t\tconst { err: error1, paths } = await this.uploadAssets(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tfile: imageFile,\n\t\t\t\t\ttype: [\"Image\"],\n\t\t\t\t\ttargetPath: TARGET_FILE,\n\t\t\t\t},\n\t\t\t],\n\t\t\tthis.progressIndicator\n\t\t);\n\n\t\t// since the icon URL is kept in config, refresh the config entry using the current value to trigger a notification\n\t\tconst { err: error2 } = await RouterClient.query(`${MAKER_TOPIC}.refreshSystemTrayIconConfig`, {});\n\n\t\tLogger.system.log(\n\t\t\t\"SmartDesktopClient.updateSystemTrayIcon result\",\n\t\t\terror1 || error2 ? { error1, error2 } : \"successful\"\n\t\t);\n\t\t// Jumping through typescript hoops due to CallbackError type\n\t\tconst error = error1 || error2 || null;\n\t\treturn { err: error ? error.toString() : null, path: paths[0] };\n\t},\n\n\t/**\n\t * Update the installer Icon file -- the change will not be picked up until the installer is built\n\t *\n\t */\n\tasync updateInstallerIcon(iconFile: File): Promise<{ err: string | null; path: string }> {\n\t\tconst TARGET_FILE = \"assets/img/installer_icon.ico\";\n\t\tLogger.system.log(\"SmartDesktopClient.updateInstallerIcon\", iconFile);\n\n\t\tconst { err, paths } = await this.uploadAssets(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tfile: iconFile,\n\t\t\t\t\ttype: [\"Icon\"],\n\t\t\t\t\ttargetPath: TARGET_FILE,\n\t\t\t\t},\n\t\t\t],\n\t\t\tthis.progressIndicator\n\t\t);\n\n\t\tLogger.system.log(\"SmartDesktopClient.updateSystemTrayIcon result\", err ? err : \"successful\");\n\t\treturn { err, path: paths[0] };\n\t},\n\n\t/**\n\t * Update the installer graphic file -- the change will not be picked up until the installer is built\n\t */\n\tasync updateInstallerGraphic(gifFile: File): Promise<{ err: string | null; path: string }> {\n\t\tconst TARGET_FILE = \"assets/img/installer_spinner.gif\";\n\t\tLogger.system.log(\"SmartDesktopClient.updateInstallerGraphic\", gifFile);\n\n\t\tconst { err, paths } = await this.uploadAssets(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tfile: gifFile,\n\t\t\t\t\ttype: [\"Image\", \"GIF\"],\n\t\t\t\t\ttargetPath: TARGET_FILE,\n\t\t\t\t},\n\t\t\t],\n\t\t\tthis.progressIndicator\n\t\t);\n\n\t\tLogger.system.log(\"SmartDesktopClient.updateInstallerGraphic result\", err ? err : \"successful\");\n\t\treturn { err, path: paths[0] };\n\t},\n\n\t/**\n\t * Update the splash screen image file -- the change will not be picked up until Finsemble/FEA is restarted\n\t */\n\tasync updateSplashScreen(svgFile: File): Promise<{ err: string | null; path: string }> {\n\t\tconst TARGET_FILE = \"assets/img/FinsembleSplash.png\";\n\t\tLogger.system.log(\"SmartDesktopClient.updateSplashScreen\", svgFile);\n\n\t\tconst { err, paths } = await this.uploadAssets(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tfile: svgFile,\n\t\t\t\t\ttype: [\"Image\", \"GIF\"],\n\t\t\t\t\ttargetPath: TARGET_FILE,\n\t\t\t\t},\n\t\t\t],\n\t\t\tthis.progressIndicator\n\t\t);\n\n\t\tLogger.system.log(\"SmartDesktopClient.updateSplashScreen result\", err ? err : \"successful\");\n\t\treturn { err, path: paths[0] };\n\t},\n\n\t/**\n\t * Helper function to update a single theme variable within Finsemble's theme\n\t */\n\tasync updateThemeVariable(varName: string, varValue: string): Promise<{ err: any }> {\n\t\tconst theme: CSS = {};\n\t\ttheme[varName] = varValue;\n\t\tLogger.system.log(\"SmartDesktopClient.updateThemeVariable\", theme);\n\t\treturn this.updateTheme(theme);\n\t},\n\n\t/**\n\t * Save a .zip file of the project with `appName` to the local filesystem at `targetPath`\n\t * @example\n\t * let { err } = await SmartDesktopClient.createProjectZip(\"testApp\", \"~/Downloads/\");\n\t */\n\tasync createProjectZip(appName: string, targetPath: string | undefined = undefined): Promise<string> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.createProjectZip\", applicationRoot);\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst onTargetPath = (targetPathInner: string) => {\n\t\t\t\tconst endpointURL = `${applicationRoot}/project/${appName}/zip?targetPath=${encodeURIComponent(\n\t\t\t\t\ttargetPathInner\n\t\t\t\t)}`;\n\n\t\t\t\tLogger.system.log(endpointURL);\n\n\t\t\t\tfetch(endpointURL)\n\t\t\t\t\t.then((response) => response.json())\n\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\tresolve(data.file);\n\t\t\t\t\t})\n\t\t\t\t\t.catch(reject);\n\t\t\t};\n\n\t\t\tif (targetPath) {\n\t\t\t\tonTargetPath(targetPath);\n\t\t\t} else {\n\t\t\t\tFEAGlobals.finsembleWindow.showNativeOpenDialog(\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Select an output directory\",\n\t\t\t\t\t\tbuttonLabel: \"Save .zip file\",\n\t\t\t\t\t\tproperties: [\"openDirectory\"],\n\t\t\t\t\t},\n\t\t\t\t\t(err: any, response: any) => {\n\t\t\t\t\t\tif (response?.[0]?.filePaths?.length > 0) {\n\t\t\t\t\t\t\tonTargetPath(response?.[0]?.filePaths[0]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treject(\"No file selected\");\n\t\t\t\t\t\t}\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 * Copy project assets/config to target dir\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.createProjectZip(\"testApp\", \"~/Downloads/\");\n\t */\n\tasync copyProjectFiles(\n\t\tappName: string,\n\t\ttargetPath: string | undefined = undefined // allow passing manually specified targetPath\n\t): Promise<\n\t\t{\n\t\t\tsource: string;\n\t\t\ttarget: string;\n\t\t}[]\n\t> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.createProjectZip\", applicationRoot);\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t// callback to forward targetPath to the server REST API endpoint\n\t\t\t// regardless of whether targetPath is manually specified or retrieved via showNativeOpenDialog\n\t\t\tconst onTargetPath = (selectedTargetPath: any) => {\n\t\t\t\tconst endpointURL = `${applicationRoot}/project/${appName}/copy?targetPath=${encodeURIComponent(\n\t\t\t\t\tselectedTargetPath\n\t\t\t\t)}`;\n\n\t\t\t\tLogger.system.debug(`copyProjectFiles: copying ${selectedTargetPath}, ${endpointURL}`);\n\n\t\t\t\tfetch(endpointURL)\n\t\t\t\t\t.then((response) => response.json())\n\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\tif (data.error) {\n\t\t\t\t\t\t\treject(data.error);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(data.files);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(reject);\n\t\t\t};\n\n\t\t\tif (targetPath) {\n\t\t\t\t// we've manually specified a targetPath\n\t\t\t\tonTargetPath(targetPath);\n\t\t\t} else {\n\t\t\t\t// Open a native file selection dialog and relay the selected file to our callback\n\t\t\t\tFEAGlobals.finsembleWindow.showNativeOpenDialog(\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Select Seed Project\",\n\t\t\t\t\t\tbuttonLabel: \"Copy to Seed Project\",\n\t\t\t\t\t\tproperties: [\"openDirectory\"],\n\t\t\t\t\t},\n\t\t\t\t\t(err: any, response: any) => {\n\t\t\t\t\t\tif (response?.[0]?.filePaths?.length > 0) {\n\t\t\t\t\t\t\tonTargetPath(response?.[0]?.filePaths[0]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treject(\"No file selected\");\n\t\t\t\t\t\t}\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 * Change the path of the current project in smartDesktops.json\n\t *\n\t * @param appName name of app to zip\n\t * @param [targetPath] output path for zip file\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.createProjectZip(\"testApp\", \"~/Downloads/\");\n\t */\n\tasync selectProjectPath(): Promise<string> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tFEAGlobals.finsembleWindow.showNativeOpenDialog(\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Select Seed Project\",\n\t\t\t\t\tbuttonLabel: \"Select Seed Project\",\n\t\t\t\t\tproperties: [\"openDirectory\"],\n\t\t\t\t},\n\t\t\t\t(err: any, response: any) => {\n\t\t\t\t\tif (response?.[0]?.filePaths?.length > 0) {\n\t\t\t\t\t\tconst path = response?.[0]?.filePaths[0];\n\t\t\t\t\t\tLogger.system.log(\"SmartDesktopClient.selectProjectPath\", path);\n\t\t\t\t\t\tresolve(path);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(\"No file selected\");\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 * checkValidProjectName\n\t */\n\tcheckValidProjectName(name: string) {\n\t\treturn /^[a-zA-Z0-9 \\-_.]{1,}$/.test(name) && /[a-zA-Z0-9]{1,}/.test(name);\n\t},\n\n\t/**\n\t * Check an arbitrary string to see if it is a valid url\n\t * The only checks for validity are:\n\t * * if the string begins with \"http://\" or \"https://\"\n\t *\n\t * @param url - the potential URL\n\t */\n\tcheckValidURL(url: string) {\n\t\tif (url.length === 0) {\n\t\t\treturn true;\n\t\t}\n\t\treturn /^https?:\\/\\/[^\\s]+$/.test(url);\n\t},\n\n\tasync isInboundInteropAuthorized(\n\t\tsourceApp: AppDefinition,\n\t\ttargetApp: AppDefinition,\n\t\tcontextType?: string\n\t): Promise<boolean> {\n\t\treturn isInteropAuthorized(sourceApp, targetApp, contextType);\n\t},\n\n\tasync isOutboundInteropAuthorized(\n\t\tsourceApp: AppDefinition,\n\t\ttargetApp: AppDefinition,\n\t\tcontextType?: string\n\t): Promise<boolean> {\n\t\treturn isInteropAuthorized(targetApp, sourceApp, contextType);\n\t},\n\n\t/**\n\t * Publish `.zip` file to the Cosaic Cloud\n\t *\n\t * @returns {Promise}\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.publishToCosaicCloud();\n\t */\n\tasync publishToCosaicCloud(uuid?: string): Promise<FEA.DeployInfo> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.publishToCosaicCloud\", applicationRoot);\n\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tconst endpointURL = `${applicationRoot}/project/publish/cosaicCloud?uuid=${encodeURIComponent(uuid || \"\")}`;\n\n\t\t\tconst response = await fetch(endpointURL, {\n\t\t\t\tmethod: \"PUT\",\n\t\t\t});\n\n\t\t\t// We get json data back whether it's a 200 or 500 response\n\t\t\tconst data = await response.json();\n\t\t\tif (response.ok) {\n\t\t\t\tresolve(data);\n\t\t\t} else {\n\t\t\t\treject(data);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Get the progress of a publish request\n\t *\n\t * @returns {Promise}\n\t *\n\t */\n\tasync getPublishProgress(): Promise<FEA.Progress> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.getPublishProgress\", applicationRoot);\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst endpointURL = `${applicationRoot}/project/publish/progress`;\n\n\t\t\tfetch(endpointURL)\n\t\t\t\t.then((response) => response.json())\n\t\t\t\t.then((data) => {\n\t\t\t\t\tresolve(data);\n\t\t\t\t})\n\t\t\t\t.catch(reject);\n\t\t});\n\t},\n\n\t/**\n\t * Resets the current project to factory defaults. Once complete, Finsemble is restarted\n\t * so that the changes can take effect.\n\t */\n\tasync resetProject(): Promise<[Error | null, any]> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.resetProject\", applicationRoot);\n\n\t\tconst endpointURL = `${applicationRoot}/project/reset`;\n\n\t\tconst response = await fetch(endpointURL, {\n\t\t\tmethod: \"PUT\",\n\t\t});\n\n\t\tconst data = await response.json();\n\t\tconst error = response.ok ? null : new Error(data.message);\n\t\tresponse.ok && Desktop.restartApplication();\n\t\treturn [error, data];\n\t},\n\n\t/**\n\t * Saves the auth providers to config.json\n\t */\n\tasync getAuthenticationProviders(): Promise<any[]> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.getAuthenticationProviders\", applicationRoot);\n\n\t\tconst endpointURL = `${applicationRoot}/authentication`;\n\n\t\tconst response = await fetch(endpointURL, {\n\t\t\tmethod: \"get\",\n\t\t\theaders: {\n\t\t\t\tAccept: \"application/json\",\n\t\t\t},\n\t\t});\n\n\t\tconst data = await response.json();\n\n\t\tif (!data || !Array.isArray(data.providers)) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn data.providers;\n\t},\n\n\t/**\n\t * Saves the auth providers to config.json\n\t */\n\tasync setAuthenticationProviders(authenticationProviders: any): Promise<Error | null> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.setAuthenticationProviders\", applicationRoot);\n\n\t\tconst endpointURL = `${applicationRoot}/authentication`;\n\n\t\tconst response = await fetch(endpointURL, {\n\t\t\tmethod: \"PUT\",\n\t\t\theaders: {\n\t\t\t\tAccept: \"application/json\",\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\tbody: JSON.stringify({ authenticationProviders }),\n\t\t});\n\n\t\tconst data = await response.json();\n\t\treturn response.ok ? null : new Error(data.message);\n\t},\n};\n"]}
1
+ {"version":3,"file":"smartDesktopClient.js","sourceRoot":"","sources":["../../../src/components/sdd/smartDesktopClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tAppDefinition,\n\tSelectConnectAppList,\n\tFEA,\n\tLogger,\n\tRouterClient,\n\tConfigClient,\n\tSystem,\n\tFEAGlobals,\n\tREST,\n\tDesktop,\n\tStandardErrorCallback,\n} from \"@finsemble/finsemble-api\";\n\ntype InstallerDescription = {\n\tname: string;\n\tversion?: string;\n\tauthors?: string;\n\tdescription?: string;\n};\n\nexport type CSS = { [key: string]: string };\n\nconst MAKER_TOPIC = \"SmartDesktopClient\";\nconst UI_CHANGE_TOPIC = \"Finsemble-ui-change\";\n\ntype AssetType = \"JS\" | \"CSS\" | \"JSON\" | \"Text\" | \"Image\" | \"GIF\" | \"Icon\";\n\nconst assetTests: Record<AssetType, { acceptedTypes: string[]; regex: RegExp }> = {\n\tImage: { acceptedTypes: [\"PNG\", \"JPEG\", \"JPG\"], regex: /\\.(jpe?g|png)$/i },\n\tGIF: { acceptedTypes: [\"GIF\"], regex: /\\.(gif)$/i },\n\tIcon: { acceptedTypes: [\"ICO\"], regex: /\\.(ico)$/i },\n\tJS: { acceptedTypes: [\"JS\"], regex: /\\.(js)$/i },\n\tJSON: { acceptedTypes: [\"JSON\"], regex: /\\.(json)$/i },\n\tCSS: { acceptedTypes: [\"CSS\"], regex: /\\.(css)$/i },\n\tText: { acceptedTypes: [\"TXT\"], regex: /\\.(txt)$/i },\n};\n\ntype Asset = {\n\ttype: AssetType[];\n\tfile: File;\n\ttargetPath: string;\n};\n\ntype AssetMeta = {\n\tkey: string;\n\tname: string;\n\ttype: string;\n\tsize: number;\n\ttargetPath: string | undefined;\n};\n\ntype MenuObjType = {\n\tdisplayName: string;\n\tapplications: string[];\n\tposition: number;\n};\ntype MenuType = {\n\t[key: string]: MenuObjType;\n};\n\ntype ProjectSettings = {\n\tname: string;\n\tpath?: string;\n\tversion?: string;\n\tauthors?: string;\n\tdescription?: string;\n};\n\ntype preloadUsageType = \"launchable\" | \"all\" | \"none\";\ntype PreloadDetail = {\n\turl: string;\n\tautoload: preloadUsageType;\n};\ntype PreloadMap = {\n\t[alias: string]: PreloadDetail;\n};\n\n/**\n * Determines if a SelectConnect `authorize` rule exists on a foreign app\n * for this app.\n *\n * @param sourceApp FDC3 AppD definition for the app we're working on\n * @param targetApp FDC3 AppD definition for the app we want to connect to\n * @param contextType Optional context type to defined the rule\n * @returns true if there is a matching rule\n */\nconst isInteropAuthorized = (sourceApp: AppDefinition, targetApp: AppDefinition, contextType?: string): boolean => {\n\tconst rules = targetApp.manifest?.interop?.selectConnect || [];\n\n\t// Find all authorized apps for any rules that match this context type\n\tconst allowedApps: SelectConnectAppList[] = rules.flatMap((rule) => {\n\t\tif (!contextType || (rule.contextType && rule.contextType !== contextType)) return [];\n\t\treturn rule.authorize ?? [];\n\t});\n\n\treturn allowedApps.some((rule) => rule.name === sourceApp.name);\n};\n\n/**\n * Arranges an array of words for display to end user\n * \"apples\"\n * \"apples or oranges\"\n * \"apples, oranges, or bananas\"\n */\nconst prettyList = (words: string[]): string => {\n\tconst { length } = words;\n\tif (length === 0) return \"\";\n\tif (length === 1) return words[0];\n\tif (length === 2) return `${words[0]} or ${words[1]}`;\n\treturn `${words.slice(0, length - 2).join(\", \")} or ${words[length - 1]}`;\n};\n\n/**\n *\n * Test Driver Example (can paste into component console)\n *\n window.smartDesktopClientDriver = async function makerClientDriver() {\n\t{\n\t\tlet { err, apps } = await SmartDesktopClient.getApps();\n\t\tLogger.log(\"getApps\", err ? err : \"ok\" , apps);\n\t}\n\t{\n\t\tlet { err, config } = await SmartDesktopClient.getAppConfig(\"Rates\");\n\t\tLogger.log(\"getAppConfig\", err ? err : \"ok\" , config);\n\t}\n\t{\n\t\tlet { config } = await SmartDesktopClient.getAppConfigTemplate();\n\t\tlet { err } = await SmartDesktopClient.addApp(\"testApp1\", config);\n\t\tLogger.log(\"addApp\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet { err } = await SmartDesktopClient.deleteApp(\"testApp1\");\n\t\tLogger.log(\"deleteApp\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tLogger.log(\"updateTheme\", err ? err : \"ok\" );\n\t\tlet { err } = await SmartDesktopClient.updateInstallerDescription({ name: \"sample installer name\", version: \"V0.0.0\", authors: \"M. Smith\", description: \"sample installer descriptions\" });\n\t\tLogger.log(\"updateInstallerDescription\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet blob = await fetch(\"http://localhost:3375/assets/img/test.png\").then(r => r.blob());\n\t\tvar file = new File([blob], \"foo.png\");\n\t\tlet { err } = await SmartDesktopClient.updateToolbarIcon(file);\n\t\tconsole.log(\"updateToolbarIcon\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet blob = await fetch(\"http://localhost:3375/assets/img/test.png\").then(r => r.blob());\n\t\tvar file = new File([blob], \"foo.png\");\n\t\tlet { err } = await SmartDesktopClient.updateTaskbarIcon(file);\n\t\tconsole.log(\"updateTaskbarIcon\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet blob = await fetch(\"http://localhost:3375/assets/img/test.png\").then(r => r.blob());\n\t\tvar file = new File([blob], \"foo.png\");\n\t\tlet { err } = await SmartDesktopClient.updateSystemTrayIcon(file);\n\t\tconsole.log(\"updateSystemTrayIcon\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet blob = await fetch(\"http://localhost:3375/assets/img/test.ico\").then(r => r.blob());\n\t\tvar file = new File([blob], \"foo.ico\");\n\t\tlet { err } = await SmartDesktopClient.updateInstallerIcon(file);\n\t\tconsole.log(\"updateInstallerIcon\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet blob = await fetch(\"http://localhost:3375/assets/img/install-spinner.gif\").then(r => r.blob());\n\t\tvar file = new File([blob], \"foo.gif\");\n\t\tlet { err } = await SmartDesktopClient.updateInstallerGraphic(file);\n\t\tconsole.log(\"updateInstallerGraphic\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet blob = await fetch(\"http://localhost:3375/assets/img/test.svg\").then(r => r.blob());\n\t\tvar file = new File([blob], \"foo.svg\");\n\t\tlet { err } = await SmartDesktopClient.updateSplashScreen(file);\n\t\tconsole.log(\"updateSplashScreen\", err ? err : \"ok\" );\n\t}\n\t{\n\t\tlet { err } = await SmartDesktopClient.updateTheme({ cssSampleData: 1 });\n\t\tconsole.log(\"updateTheme\", err ? err : \"ok\" );\n\t}\n\t{\n\t \tlet { err } = await SmartDesktopClient.createProjectZip(\"testApp\", \"~/Downloads/\");\n\t\tLogger.log(\"createProjectZip\", err ? err : \"ok\" );\n\t}\n\t{\n\t\t<input type=\"file\" onChange={(e) => {\n\t\t\tconst file = e.target.files?.[0];\n\n\t\t\tlet { err } = await SmartDesktopClient.uploadAssets([\n\t\t\t\t{\n\t\t\t\t\tfile,\n\t\t\t\t\ttype: AssetType.Image,\n\t\t\t\t\ttargetPath: 'image.png',\n\t\t\t\t}\n\t\t\t], (progress) => {\n\t\t\t\t// ...\n\t\t\t});\n\n\t\t\tLogger.log(\"uploadAssets\", err ? err : \"ok\" );\n\t\t}} />\n\t}\n}\n */\nexport const SmartDesktopClient = {\n\tgetSDServerInfo: async (): Promise<FEA.SDServerInfo> => await System.getSDServerInfo(),\n\n\t/**\n\t * Confirm the Smart Desktop Server is enabled. This should be true before constructing and using a client.\n\t *\n\t * @static\n\t * @returns {Promise<Boolean>}\n\t */\n\tasync isEnabled(): Promise<Boolean> {\n\t\tconst { enabled } = await System.getSDServerInfo();\n\t\treturn enabled;\n\t},\n\n\t/**\n\t * Get the smart desktop server base URL.\n\t *\n\t * @static\n\t * @returns {Promise<Boolean>}\n\t */\n\tasync applicationRoot(): Promise<string | null> {\n\t\tconst { applicationRoot } = await System.getSDServerInfo();\n\t\treturn applicationRoot ? applicationRoot : null;\n\t},\n\n\t/**\n\t *\n\t */\n\tasync projectConfig(): Promise<FEA.ProjectConfig | null> {\n\t\tconst { projectConfig } = await System.getSDServerInfo();\n\t\treturn projectConfig ? projectConfig : null;\n\t},\n\n\t/**\n\t * Get list of all AppD applications\n\t *\n\t * @returns {Promise<{ err:any, data:any}>}\n\t *\n\t * @example\n\t * let { err, apps } = await SmartDesktopClient.getApps();\n\t */\n\tasync getApps(): Promise<{ err: any; apps: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.getApps\");\n\t\tconst { err, response } = await RouterClient.query(`${MAKER_TOPIC}.getApps`, {});\n\t\tLogger.system.log(\"SmartDesktopClient.getApps result\", err ? err : \"successful\", response);\n\t\treturn { err, apps: response?.data.applications ?? [] };\n\t},\n\n\t/**\n\t * Get list of all Menus\n\t *\n\t * @returns {Promise<{ err:any, data:any}>}\n\t *\n\t * @example\n\t * let { err, menus } = await SmartDesktopClient.getMenus();\n\t */\n\tasync getMenus(): Promise<{ err: any; menus: MenuType }> {\n\t\tLogger.system.log(\"ConfigClient getValue 'finsemble.toolbarMenus'\");\n\t\tconst { err, data } = await ConfigClient.getValue({ field: \"finsemble.toolbarMenus\" });\n\t\tLogger.system.log(\"finsemble.toolbarMenus result\", err ? err : \"successful\", data);\n\t\treturn { err, menus: data };\n\t},\n\n\t/**\n\t * Get the config.extensions.preloads object (from appd.json), which includes all registered\n\t * preloads and their details\n\t */\n\tasync getPreloads(): Promise<{ err: any; data: PreloadMap }> {\n\t\tLogger.system.log(\"SmartDesktopClient.getPreloads\");\n\t\tconst { err, response } = await RouterClient.query(`${MAKER_TOPIC}.getPreloads`, {});\n\t\tLogger.system.log(\"SmartDesktopClient.getPreloads result\", err ? err : \"successful\", response);\n\t\treturn { err, data: response?.data.preloads ?? {} };\n\t},\n\n\t/**\n\t * Get config for the specified AppD app.\n\t *\n\t * @example\n\t * let { err, config } = await SmartDesktopClient.getAppConfig(\"testApp\");\n\t */\n\tasync getAppConfig(appId: string): Promise<{ err: any; config: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.getAppConfig\", appId);\n\t\tconst { err, response } = await RouterClient.query(`${MAKER_TOPIC}.getAppConfig`, { appId });\n\t\tLogger.system.log(\"SmartDesktopClient.getAppConfig result\", err ? err : \"successful\", response);\n\t\treturn { err, config: response?.data ?? {} };\n\t},\n\n\t/**\n\t * Helper function returning a AppD config template with Finsemble component in manifest property.\n\t *\n\t * @returns {Promise<{ config: any }>}\n\t *\n\t * @example\n\t * let { config } = await SmartDesktopClient.getAppConfigTemplate();\n\t */\n\tasync getAppConfigTemplate(): Promise<{ config: AppDefinition }> {\n\t\tLogger.system.log(\"SmartDesktopClient.getAppConfigTemplate\");\n\t\tconst manifestJson = {\n\t\t\twindow: {\n\t\t\t\t// url: \"$applicationRoot/components/welcome/welcome.html\",\n\t\t\t\turl: \"\",\n\t\t\t\twidth: 1280,\n\t\t\t\theight: 600,\n\t\t\t},\n\t\t\tforeign: {\n\t\t\t\tcomponents: {\n\t\t\t\t\t\"App Launcher\": {\n\t\t\t\t\t\tlaunchableByUser: true,\n\t\t\t\t\t},\n\t\t\t\t\t\"Window Manager\": {\n\t\t\t\t\t\tpersistWindowState: true,\n\t\t\t\t\t\tFSBLHeader: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tconst appdConfigTemplate = {\n\t\t\tappId: \"123\",\n\t\t\tname: \"\",\n\t\t\tmanifest: manifestJson,\n\t\t\tmanifestType: \"finsemble\",\n\t\t\tversion: \"1\",\n\t\t};\n\t\tLogger.system.log(\"SmartDesktopClient.getAppConfigTemplate result\", appdConfigTemplate);\n\t\treturn { config: appdConfigTemplate };\n\t},\n\n\t/**\n\t * Add AppD application, which will modify Finsemble config and invoke REST API to persist the change\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.addApp(\"testApp\", config);\n\t */\n\tasync addApp(appId: string, appConfig: AppDefinition): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.addApp\", appId, appConfig);\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.addApp`, { appId, appConfig });\n\t\tLogger.system.log(\"SmartDesktopClient.addApp result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\tasync addMenu(menuConfig: MenuObjType): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.addMenu\");\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.addMenu`, { menuConfig });\n\t\tawait this.syncMenuConfig();\n\t\tLogger.system.log(\"SmartDesktopClient.addMenu result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\tasync syncMenuConfig() {\n\t\tLogger.system.log(\"SmartDesktopClient.syncMenuConfig\");\n\t\tconst { response } = await RouterClient.query(`${MAKER_TOPIC}.getMenus`, {});\n\t\tawait ConfigClient.setValue({\n\t\t\tfield: \"finsemble.toolbarMenus\",\n\t\t\tvalue: response?.data?.menus || {},\n\t\t});\n\t\tLogger.system.log(\"SmartDesktopClient.syncMenuConfig completed\");\n\t},\n\n\tasync updateMenu(menuId: string, menuConfig: MenuObjType): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.updateMenu\", menuId, menuConfig);\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.updateMenu`, { menuId, menuConfig });\n\t\tawait this.syncMenuConfig();\n\t\tLogger.system.log(\"SmartDesktopClient.updateMenu result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Add AppD application, which will modify Finsemble config and invoke REST API to persist the change\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.updateApp(\"testApp\", config);\n\t */\n\tasync updateApp(appId: string, appConfig: AppDefinition): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.updateApp\", appId, appConfig);\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.updateApp`, { appId, appConfig });\n\t\tLogger.system.log(\"SmartDesktopClient.updateApp result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Create/updates the preload with the specific preload alias\n\t */\n\tasync savePreload(oldAlias: string | null, newAlias: string, detail: PreloadDetail): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.savePreload\");\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.savePreload`, { oldAlias, newAlias, detail });\n\t\tLogger.system.log(\"SmartDesktopClient.savePreload result\", err ? err : \"successful\");\n\t\tconst { response } = await RouterClient.query(`${MAKER_TOPIC}.getPreloads`, {});\n\t\tif (!err && response.data) {\n\t\t\tawait ConfigClient.setValue({\n\t\t\t\tfield: \"finsemble.extensions.preloads\",\n\t\t\t\tvalue: response.data.preloads,\n\t\t\t});\n\t\t}\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Remove AppD application, which will modify Finsemble config and invoke REST API to persist the change\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.deleteApp(\"testApp\");\n\t */\n\tasync deleteApp(appId: string): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.deleteApp\", appId);\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.deleteApp`, { appId });\n\t\tLogger.system.log(\"SmartDesktopClient.deleteApp result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\tasync deleteMenu(menuId: string): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.deleteMenu\", menuId);\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.deleteMenu`, { menuId });\n\t\tawait this.syncMenuConfig();\n\t\tLogger.system.log(\"SmartDesktopClient.deleteMenu result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Remove a given preload from the registry in the config\n\t */\n\tasync deletePreload(alias: string): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.deletePreload\");\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.deletePreload`, { alias });\n\t\tLogger.system.log(\"SmartDesktopClient.deletePreload result\", err ? err : \"successful\");\n\t\tconst { response } = await RouterClient.query(`${MAKER_TOPIC}.getPreloads`, {});\n\t\tif (!err && response.data) {\n\t\t\tawait ConfigClient.setValue({\n\t\t\t\tfield: \"finsemble.extensions.preloads\",\n\t\t\t\tvalue: response.data.preloads,\n\t\t\t});\n\t\t}\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Update the theme of all components and invoke REST API to persist the change in Finsemble's theme.css file\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.updateTheme(cssData);\n\t */\n\tasync updateTheme(theme: CSS): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient.updateTheme\", theme);\n\t\tconst { err } = await RouterClient.query(`${MAKER_TOPIC}.updateTheme`, { theme });\n\t\tLogger.system.log(\"SmartDesktopClient.updateTheme result\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Get the theme from the REST API\n\t *\n\t * @returns {Promise<{ err, theme }>}\n\t * @memberOf SmartDesktopClient\n\t *\n\t * @example\n\t * let { err, theme } = await SmartDesktopClient.getTheme(cssData);\n\t */\n\tasync getTheme(): Promise<{ err: any; theme?: Record<string, string> }> {\n\t\tLogger.system.log(\"SmartDesktopClient.getTheme\");\n\t\tconst { err, response } = await RouterClient.query(`${MAKER_TOPIC}.getTheme`, {});\n\t\tLogger.system.log(\"SmartDesktopClient.getTheme result\", err ? err : \"successful\");\n\t\treturn { err, theme: response?.data };\n\t},\n\n\t/**\n\t * Add handler listening for theme updates\n\t *\n\t * @returns When called, unsubscribes the handler\n\t */\n\tonThemeUpdated(themeUpdatedHandler: StandardErrorCallback<any>): Function {\n\t\tRouterClient.addListener(`${UI_CHANGE_TOPIC}.themeUpdate`, themeUpdatedHandler);\n\t\tLogger.system.log(\"SmartDesktopClient.onThemeUpdated\", themeUpdatedHandler);\n\t\treturn () => RouterClient.removeListener(`${UI_CHANGE_TOPIC}.themeUpdate`, themeUpdatedHandler);\n\t},\n\n\t/**\n\t * Post a file to the smart desktop server\n\t *\n\t * @example\n\t * ...\n\t */\n\tasync uploadAssets(assets: Asset[], progress: Function): Promise<{ err: string | null; paths: string[] }> {\n\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets\", assets);\n\n\t\tconst applicationRoot = await this.applicationRoot();\n\n\t\t// Returns a string of accepted file types if the asset does not match a known type\n\t\tconst getAcceptedTypes = (asset: Asset): string[] => {\n\t\t\tlet acceptedTypes: string[] = [];\n\t\t\tlet valid = false;\n\t\t\tObject.entries(assetTests).forEach(([key, value]) => {\n\t\t\t\tif (asset.type.includes(key as AssetType)) {\n\t\t\t\t\tif (value.regex.test(asset.file.name)) valid = true;\n\t\t\t\t\tacceptedTypes = acceptedTypes.concat(value.acceptedTypes);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn valid ? [] : acceptedTypes;\n\t\t};\n\n\t\treturn new Promise((resolve) => {\n\t\t\tconst endpointURL = `${applicationRoot}/project/assets`;\n\n\t\t\tconst data = new FormData();\n\n\t\t\tconst assetMeta: AssetMeta[] = [];\n\n\t\t\tfor (let index = 0; index < assets.length; index++) {\n\t\t\t\tconst asset = assets[index];\n\n\t\t\t\tconst meta = {\n\t\t\t\t\tkey: `file-${index}`,\n\t\t\t\t\tname: asset.file.name,\n\t\t\t\t\ttype: asset.file.type,\n\t\t\t\t\tsize: asset.file.size,\n\t\t\t\t\ttargetPath: asset.targetPath,\n\t\t\t\t};\n\n\t\t\t\tconst acceptedTypes: string[] = getAcceptedTypes(asset);\n\n\t\t\t\tif (acceptedTypes.length) {\n\t\t\t\t\tconst error = `File must be of type ${prettyList(acceptedTypes)}`;\n\t\t\t\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets wrong image type\", error);\n\t\t\t\t\treturn resolve({ err: error, paths: [] });\n\t\t\t\t} else {\n\t\t\t\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets append\", meta.key, asset.file);\n\t\t\t\t\tdata.append(meta.key, asset.file);\n\t\t\t\t\tassetMeta.push(meta);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdata.append(\"assets\", JSON.stringify(assetMeta));\n\n\t\t\tvar xhr = new XMLHttpRequest();\n\n\t\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets put\", data, endpointURL);\n\t\t\txhr.open(\"PUT\", endpointURL, true);\n\n\t\t\txhr.addEventListener(\"progress\", (e) => {\n\t\t\t\tprogress(Math.round((e.loaded / e.total) * 100));\n\t\t\t});\n\n\t\t\t// xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n\n\t\t\txhr.onreadystatechange = () => {\n\t\t\t\t// Call a function when the state changes.\n\t\t\t\tif (xhr.readyState === XMLHttpRequest.DONE) {\n\t\t\t\t\tprogress(100);\n\n\t\t\t\t\tif (xhr.status !== 200) {\n\t\t\t\t\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets Failed Response\", xhr.response);\n\t\t\t\t\t\tresolve({ err: `Got response code: ${xhr.status}`, paths: [] });\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst response = JSON.parse(xhr.response);\n\n\t\t\t\t\t\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets Response\", xhr.response);\n\n\t\t\t\t\t\t\tresolve({ err: null, paths: response.paths });\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tresolve({ err: \"Couldn't parse response\", paths: [] });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tLogger.system.log(\"SmartDesktopClient.uploadAssets send\", data);\n\t\t\txhr.send(data);\n\t\t});\n\t},\n\n\t/**\n\t * Post images to the smart desktop server\n\t *\n\t * @example\n\t * ...\n\t */\n\tasync uploadImages(files: File[], progress: Function): Promise<{ err: any; paths: string[] }> {\n\t\treturn this.uploadAssets(\n\t\t\tfiles.map(\n\t\t\t\t(file) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\ttype: [\"Image\", \"GIF\"],\n\t\t\t\t\t} as Asset)\n\t\t\t),\n\t\t\tprogress\n\t\t);\n\t},\n\n\t/**\n\t * Post an image to the smart desktop server\n\t *\n\t * @example\n\t * ...\n\t */\n\tasync uploadImage(file: File, progress: Function): Promise<{ err: any; path: string }> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.uploadImages([file], progress)\n\t\t\t\t.then((response: { err: any; paths: string[] }) => {\n\t\t\t\t\tresolve({ err: response.err, path: response.paths[0] });\n\t\t\t\t})\n\t\t\t\t.catch(reject);\n\t\t});\n\t},\n\n\t/**\n\t * Update installer description by using REST API to persist the change\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.updateInstallerDescription(installerDescription);\n\t */\n\tasync updateInstallerDescription(installerDescription: InstallerDescription): Promise<{ err: any }> {\n\t\tLogger.system.log(\"SmartDesktopClient updateInstallerDescription\", installerDescription);\n\t\tconst { err } = await REST.httpPatch(`/project/installer`, installerDescription);\n\t\tLogger.system.log(\"SmartDesktopClient.updateInstallerDescription Response\", err ? err : \"successful\");\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Update installer description by using REST API to persist the change\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.updateInstallerDescription(installerDescription);\n\t */\n\tasync updateProjectSettings(settings: ProjectSettings): Promise<{ err: any }> {\n\t\tconst { err } = await REST.httpPatch(`/project/settings`, settings);\n\t\treturn { err };\n\t},\n\n\t/**\n\t * Get project settings\n\t *\n\t * @example\n\t * let { settings, err } = await SmartDesktopClient.getProjectSettings();\n\t */\n\tasync getProjectSettings(): Promise<{\n\t\tsettings: ProjectSettings;\n\t\terr: any;\n\t}> {\n\t\tconst response = await REST.httpGet(`/project/settings`);\n\n\t\treturn response.getData;\n\t},\n\n\t/**\n\t * Helper function -- progress descriptor for updating files\n\t *\n\t */\n\tprogressIndicator(progress: any) {\n\t\tLogger.system.log(\"SmartDesktopClient.progressIndicator Console-Only\", progress);\n\t\tconsole.log(\"Console-Only Progress Indicator:\", progress);\n\t},\n\n\t/**\n\t * Update Finsemble toolbar icon file and transmit correspond ui-changed message so UI will pick up change\n\t *\n\t * @returns {Promise<{ err: any }>}\n\t */\n\tasync updateToolbarIcon(imageFile: File): Promise<{ err: string | null; path: string }> {\n\t\tconst TARGET_FILE = \"assets/img/Finsemble_Toolbar_Icon.png\";\n\t\tLogger.system.log(\"SmartDesktopClient.updateToolbarIcon\", TARGET_FILE, imageFile);\n\n\t\tconst { err, paths } = await this.uploadAssets(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tfile: imageFile,\n\t\t\t\t\ttype: [\"Image\", \"GIF\"],\n\t\t\t\t\ttargetPath: TARGET_FILE,\n\t\t\t\t},\n\t\t\t],\n\t\t\tthis.progressIndicator\n\t\t);\n\n\t\tif (!err) {\n\t\t\t// transmit change notification so Finsemble can dynamically update (see toolbar)\n\t\t\tRouterClient.transmit(\"Finsemble-ui-change.toolbarIconUpdate\", {});\n\t\t}\n\n\t\tLogger.system.log(\"SmartDesktopClient.updateToolbarIcon result\", err ? err : \"successful\");\n\t\treturn { err, path: paths[0] };\n\t},\n\n\t/**\n\t * Update Finsemble taskbar icon file and transmit correspond ui-changed message so UI will pick up change\n\t *\n\t */\n\tasync updateTaskbarIcon(imageFile: File): Promise<{ err: string | null; path: string }> {\n\t\tconst TARGET_FILE = \"assets/img/Finsemble_Taskbar_Icon.png\";\n\t\tLogger.system.log(\"SmartDesktopClient.updateTaskbarIcon\", imageFile);\n\n\t\tconst { err, paths } = await this.uploadAssets(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tfile: imageFile,\n\t\t\t\t\ttype: [\"Image\"],\n\t\t\t\t\ttargetPath: TARGET_FILE,\n\t\t\t\t},\n\t\t\t],\n\t\t\tthis.progressIndicator\n\t\t);\n\n\t\tif (!err) {\n\t\t\t// transmit notification so Finsemble can dynamically update (e.g. toolbar, taskbar)\n\t\t\tRouterClient.transmit(\"Finsemble-ui-change.taskbarIconUpdate\", {});\n\t\t}\n\n\t\tLogger.system.log(\"SmartDesktopClient.updateTaskbarIcon result\", err ? err : \"successful\");\n\t\treturn { err, path: paths[0] };\n\t},\n\n\t/**\n\t * Update system tray icon file and refresh config entry to trigger notification\n\t *\n\t */\n\tasync updateSystemTrayIcon(imageFile: File): Promise<{ err: string | null; path: string }> {\n\t\tconst TARGET_FILE = \"assets/img/Finsemble_SystemTray_Icon.png\";\n\t\tLogger.system.log(\"SmartDesktopClient.updateSystemTrayIcon\", imageFile);\n\n\t\tconst { err: error1, paths } = await this.uploadAssets(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tfile: imageFile,\n\t\t\t\t\ttype: [\"Image\"],\n\t\t\t\t\ttargetPath: TARGET_FILE,\n\t\t\t\t},\n\t\t\t],\n\t\t\tthis.progressIndicator\n\t\t);\n\n\t\t// since the icon URL is kept in config, refresh the config entry using the current value to trigger a notification\n\t\tconst { err: error2 } = await RouterClient.query(`${MAKER_TOPIC}.refreshSystemTrayIconConfig`, {});\n\n\t\tLogger.system.log(\n\t\t\t\"SmartDesktopClient.updateSystemTrayIcon result\",\n\t\t\terror1 || error2 ? { error1, error2 } : \"successful\"\n\t\t);\n\t\t// Jumping through typescript hoops due to CallbackError type\n\t\tconst error = error1 || error2 || null;\n\t\treturn { err: error ? error.toString() : null, path: paths[0] };\n\t},\n\n\t/**\n\t * Update the installer Icon file -- the change will not be picked up until the installer is built\n\t *\n\t */\n\tasync updateInstallerIcon(iconFile: File): Promise<{ err: string | null; path: string }> {\n\t\tconst TARGET_FILE = \"assets/img/installer_icon.ico\";\n\t\tLogger.system.log(\"SmartDesktopClient.updateInstallerIcon\", iconFile);\n\n\t\tconst { err, paths } = await this.uploadAssets(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tfile: iconFile,\n\t\t\t\t\ttype: [\"Icon\"],\n\t\t\t\t\ttargetPath: TARGET_FILE,\n\t\t\t\t},\n\t\t\t],\n\t\t\tthis.progressIndicator\n\t\t);\n\n\t\tLogger.system.log(\"SmartDesktopClient.updateSystemTrayIcon result\", err ? err : \"successful\");\n\t\treturn { err, path: paths[0] };\n\t},\n\n\t/**\n\t * Update the installer graphic file -- the change will not be picked up until the installer is built\n\t */\n\tasync updateInstallerGraphic(gifFile: File): Promise<{ err: string | null; path: string }> {\n\t\tconst TARGET_FILE = \"assets/img/installer_spinner.gif\";\n\t\tLogger.system.log(\"SmartDesktopClient.updateInstallerGraphic\", gifFile);\n\n\t\tconst { err, paths } = await this.uploadAssets(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tfile: gifFile,\n\t\t\t\t\ttype: [\"Image\", \"GIF\"],\n\t\t\t\t\ttargetPath: TARGET_FILE,\n\t\t\t\t},\n\t\t\t],\n\t\t\tthis.progressIndicator\n\t\t);\n\n\t\tLogger.system.log(\"SmartDesktopClient.updateInstallerGraphic result\", err ? err : \"successful\");\n\t\treturn { err, path: paths[0] };\n\t},\n\n\t/**\n\t * Update the splash screen image file -- the change will not be picked up until Finsemble/FEA is restarted\n\t */\n\tasync updateSplashScreen(svgFile: File): Promise<{ err: string | null; path: string }> {\n\t\tconst TARGET_FILE = \"assets/img/FinsembleSplash.png\";\n\t\tLogger.system.log(\"SmartDesktopClient.updateSplashScreen\", svgFile);\n\n\t\tconst { err, paths } = await this.uploadAssets(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tfile: svgFile,\n\t\t\t\t\ttype: [\"Image\", \"GIF\"],\n\t\t\t\t\ttargetPath: TARGET_FILE,\n\t\t\t\t},\n\t\t\t],\n\t\t\tthis.progressIndicator\n\t\t);\n\n\t\tLogger.system.log(\"SmartDesktopClient.updateSplashScreen result\", err ? err : \"successful\");\n\t\treturn { err, path: paths[0] };\n\t},\n\n\t/**\n\t * Helper function to update a single theme variable within Finsemble's theme\n\t */\n\tasync updateThemeVariable(varName: string, varValue: string): Promise<{ err: any }> {\n\t\tconst theme: CSS = {};\n\t\ttheme[varName] = varValue;\n\t\tLogger.system.log(\"SmartDesktopClient.updateThemeVariable\", theme);\n\t\treturn this.updateTheme(theme);\n\t},\n\n\t/**\n\t * Save a .zip file of the project with `appName` to the local filesystem at `targetPath`\n\t * @example\n\t * let { err } = await SmartDesktopClient.createProjectZip(\"testApp\", \"~/Downloads/\");\n\t */\n\tasync createProjectZip(appName: string, targetPath: string | undefined = undefined): Promise<string> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.createProjectZip\", applicationRoot);\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst onTargetPath = (targetPathInner: string) => {\n\t\t\t\tconst endpointURL = `${applicationRoot}/project/${appName}/zip?targetPath=${encodeURIComponent(\n\t\t\t\t\ttargetPathInner\n\t\t\t\t)}`;\n\n\t\t\t\tLogger.system.log(endpointURL);\n\n\t\t\t\tfetch(endpointURL)\n\t\t\t\t\t.then((response) => response.json())\n\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\tresolve(data.file);\n\t\t\t\t\t})\n\t\t\t\t\t.catch(reject);\n\t\t\t};\n\n\t\t\tif (targetPath) {\n\t\t\t\tonTargetPath(targetPath);\n\t\t\t} else {\n\t\t\t\tFEAGlobals.finsembleWindow.showNativeOpenDialog(\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Select an output directory\",\n\t\t\t\t\t\tbuttonLabel: \"Save .zip file\",\n\t\t\t\t\t\tproperties: [\"openDirectory\"],\n\t\t\t\t\t},\n\t\t\t\t\t(err: any, response: any) => {\n\t\t\t\t\t\tif (response?.[0]?.filePaths?.length > 0) {\n\t\t\t\t\t\t\tonTargetPath(response?.[0]?.filePaths[0]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treject(\"No file selected\");\n\t\t\t\t\t\t}\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 * Copy project assets/config to target dir\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.createProjectZip(\"testApp\", \"~/Downloads/\");\n\t */\n\tasync copyProjectFiles(\n\t\tappName: string,\n\t\ttargetPath: string | undefined = undefined // allow passing manually specified targetPath\n\t): Promise<\n\t\t{\n\t\t\tsource: string;\n\t\t\ttarget: string;\n\t\t}[]\n\t> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.createProjectZip\", applicationRoot);\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t// callback to forward targetPath to the server REST API endpoint\n\t\t\t// regardless of whether targetPath is manually specified or retrieved via showNativeOpenDialog\n\t\t\tconst onTargetPath = (selectedTargetPath: any) => {\n\t\t\t\tconst endpointURL = `${applicationRoot}/project/${appName}/copy?targetPath=${encodeURIComponent(\n\t\t\t\t\tselectedTargetPath\n\t\t\t\t)}`;\n\n\t\t\t\tLogger.system.debug(`copyProjectFiles: copying ${selectedTargetPath}, ${endpointURL}`);\n\n\t\t\t\tfetch(endpointURL)\n\t\t\t\t\t.then((response) => response.json())\n\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\tif (data.error) {\n\t\t\t\t\t\t\treject(data.error);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(data.files);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(reject);\n\t\t\t};\n\n\t\t\tif (targetPath) {\n\t\t\t\t// we've manually specified a targetPath\n\t\t\t\tonTargetPath(targetPath);\n\t\t\t} else {\n\t\t\t\t// Open a native file selection dialog and relay the selected file to our callback\n\t\t\t\tFEAGlobals.finsembleWindow.showNativeOpenDialog(\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Select Seed Project\",\n\t\t\t\t\t\tbuttonLabel: \"Copy to Seed Project\",\n\t\t\t\t\t\tproperties: [\"openDirectory\"],\n\t\t\t\t\t},\n\t\t\t\t\t(err: any, response: any) => {\n\t\t\t\t\t\tif (response?.[0]?.filePaths?.length > 0) {\n\t\t\t\t\t\t\tonTargetPath(response?.[0]?.filePaths[0]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treject(\"No file selected\");\n\t\t\t\t\t\t}\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 * Change the path of the current project in smartDesktops.json\n\t *\n\t * @param appName name of app to zip\n\t * @param [targetPath] output path for zip file\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.createProjectZip(\"testApp\", \"~/Downloads/\");\n\t */\n\tasync selectProjectPath(): Promise<string> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tFEAGlobals.finsembleWindow.showNativeOpenDialog(\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Select Seed Project\",\n\t\t\t\t\tbuttonLabel: \"Select Seed Project\",\n\t\t\t\t\tproperties: [\"openDirectory\"],\n\t\t\t\t},\n\t\t\t\t(err: any, response: any) => {\n\t\t\t\t\tif (response?.[0]?.filePaths?.length > 0) {\n\t\t\t\t\t\tconst path = response?.[0]?.filePaths[0];\n\t\t\t\t\t\tLogger.system.log(\"SmartDesktopClient.selectProjectPath\", path);\n\t\t\t\t\t\tresolve(path);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(\"No file selected\");\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 * checkValidProjectName\n\t */\n\tcheckValidProjectName(name: string) {\n\t\treturn /^[a-zA-Z0-9 \\-_.]{1,}$/.test(name) && /[a-zA-Z0-9]{1,}/.test(name);\n\t},\n\n\t/**\n\t * Check an arbitrary string to see if it is a valid url\n\t * The only checks for validity are:\n\t * * if the string begins with \"http://\" or \"https://\"\n\t *\n\t * @param url - the potential URL\n\t */\n\tcheckValidURL(url: string) {\n\t\tif (url.length === 0) {\n\t\t\treturn true;\n\t\t}\n\t\treturn /^https?:\\/\\/[^\\s]+$/.test(url);\n\t},\n\n\tasync isInboundInteropAuthorized(\n\t\tsourceApp: AppDefinition,\n\t\ttargetApp: AppDefinition,\n\t\tcontextType?: string\n\t): Promise<boolean> {\n\t\treturn isInteropAuthorized(sourceApp, targetApp, contextType);\n\t},\n\n\tasync isOutboundInteropAuthorized(\n\t\tsourceApp: AppDefinition,\n\t\ttargetApp: AppDefinition,\n\t\tcontextType?: string\n\t): Promise<boolean> {\n\t\treturn isInteropAuthorized(targetApp, sourceApp, contextType);\n\t},\n\n\t/**\n\t * Publish `.zip` file to the Cosaic Cloud\n\t *\n\t * @returns {Promise}\n\t *\n\t * @example\n\t * let { err } = await SmartDesktopClient.publishToCosaicCloud();\n\t */\n\tasync publishToCosaicCloud(uuid?: string): Promise<FEA.DeployInfo> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.publishToCosaicCloud\", applicationRoot);\n\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tconst endpointURL = `${applicationRoot}/project/publish/cosaicCloud?uuid=${encodeURIComponent(uuid || \"\")}`;\n\n\t\t\tconst response = await fetch(endpointURL, {\n\t\t\t\tmethod: \"PUT\",\n\t\t\t});\n\n\t\t\t// We get json data back whether it's a 200 or 500 response\n\t\t\tconst data = await response.json();\n\t\t\tif (response.ok) {\n\t\t\t\tresolve(data);\n\t\t\t} else {\n\t\t\t\treject(data);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Get the progress of a publish request\n\t *\n\t * @returns {Promise}\n\t *\n\t */\n\tasync getPublishProgress(): Promise<FEA.Progress> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.getPublishProgress\", applicationRoot);\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst endpointURL = `${applicationRoot}/project/publish/progress`;\n\n\t\t\tfetch(endpointURL)\n\t\t\t\t.then((response) => response.json())\n\t\t\t\t.then((data) => {\n\t\t\t\t\tresolve(data);\n\t\t\t\t})\n\t\t\t\t.catch(reject);\n\t\t});\n\t},\n\n\t/**\n\t * Resets the current project to factory defaults. Once complete, Finsemble is restarted\n\t * so that the changes can take effect.\n\t */\n\tasync resetProject(): Promise<[Error | null, any]> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.resetProject\", applicationRoot);\n\n\t\tconst endpointURL = `${applicationRoot}/project/reset`;\n\n\t\tconst response = await fetch(endpointURL, {\n\t\t\tmethod: \"PUT\",\n\t\t});\n\n\t\tconst data = await response.json();\n\t\tconst error = response.ok ? null : new Error(data.message);\n\t\tresponse.ok && Desktop.restartApplication();\n\t\treturn [error, data];\n\t},\n\n\t/**\n\t * Saves the auth providers to config.json\n\t */\n\tasync getAuthenticationProviders(): Promise<any[]> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.getAuthenticationProviders\", applicationRoot);\n\n\t\tconst endpointURL = `${applicationRoot}/authentication`;\n\n\t\tconst response = await fetch(endpointURL, {\n\t\t\tmethod: \"get\",\n\t\t\theaders: {\n\t\t\t\tAccept: \"application/json\",\n\t\t\t},\n\t\t});\n\n\t\tconst data = await response.json();\n\n\t\tif (!data || !Array.isArray(data.providers)) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn data.providers;\n\t},\n\n\t/**\n\t * Saves the auth providers to config.json\n\t */\n\tasync setAuthenticationProviders(authenticationProviders: any): Promise<Error | null> {\n\t\tconst applicationRoot = await this.applicationRoot();\n\t\tLogger.system.log(\"SmartDesktopClient.setAuthenticationProviders\", applicationRoot);\n\n\t\tconst endpointURL = `${applicationRoot}/authentication`;\n\n\t\tconst response = await fetch(endpointURL, {\n\t\t\tmethod: \"PUT\",\n\t\t\theaders: {\n\t\t\t\tAccept: \"application/json\",\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\tbody: JSON.stringify({ authenticationProviders }),\n\t\t});\n\n\t\tconst data = await response.json();\n\t\treturn response.ok ? null : new Error(data.message);\n\t},\n};\n"]}
@@ -1,5 +1,8 @@
1
1
  import { describe, it } from "mocha";
2
2
  import { expect } from "chai";
3
+ // This test case belongs in packages/api
4
+ // However, the infrastructure to run test cases doesn't currently exist in packages/api. So, this file will live in packages/ui
5
+ // until infrastructure is added to packages/api.
3
6
  import { SmartDesktopClient } from "./smartDesktopClient";
4
7
  describe("SmartDesktopClient", () => {
5
8
  describe("checkValidProjectName", () => {
@@ -35,7 +38,7 @@ describe("SmartDesktopClient", () => {
35
38
  "http://www.cosaic.io/",
36
39
  "https://www.cosaic.io/",
37
40
  "http://a",
38
- "https://a",
41
+ "https://a", // https protocol + anything
39
42
  ];
40
43
  valid.forEach((url) => {
41
44
  it(`valid url: "${url}"`, () => {
@@ -49,7 +52,7 @@ describe("SmartDesktopClient", () => {
49
52
  "www.google.com",
50
53
  "This is not a URL; it's a sentence!?",
51
54
  " ",
52
- " http://www.google.com",
55
+ " http://www.google.com", // leading spaces
53
56
  ];
54
57
  invalid.forEach((url) => {
55
58
  it(`invalid url: "${url}"`, () => {
@@ -1 +1 @@
1
- {"version":3,"file":"smartDesktopClient.spec.js","sourceRoot":"","sources":["../../../src/components/sdd/smartDesktopClient.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAM9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACnC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACtC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;QACtF,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,EAAE,CAAC,uBAAuB,IAAI,EAAE,EAAE,GAAG,EAAE;gBACtC,MAAM,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACnE,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG;YACpB,kBAAkB;YAClB,QAAQ;YACR,EAAE;YACF,mBAAmB;YACnB,sBAAsB;YACtB,qBAAqB;YACrB,oBAAoB;YACpB,mBAAmB;YACnB,GAAG;YACH,OAAO;YACP,GAAG;YACH,QAAQ;SACR,CAAC;QACF,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7B,EAAE,CAAC,yBAAyB,IAAI,EAAE,EAAE,GAAG,EAAE;gBACxC,MAAM,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC1E,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC9B,MAAM,KAAK,GAAG;YACb,EAAE;YACF,uBAAuB;YACvB,wBAAwB;YACxB,UAAU;YACV,WAAW;SACX,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACrB,EAAE,CAAC,eAAe,GAAG,GAAG,EAAE,GAAG,EAAE;gBAC9B,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1D,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG;YACf,SAAS;YACT,UAAU;YACV,mBAAmB;YACnB,gBAAgB;YAChB,sCAAsC;YACtC,GAAG;YACH,wBAAwB;SACxB,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACvB,EAAE,CAAC,iBAAiB,GAAG,GAAG,EAAE,GAAG,EAAE;gBAChC,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC3D,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { describe, it } from \"mocha\";\nimport { expect } from \"chai\";\n\n// This test case belongs in packages/api\n// However, the infrastructure to run test cases doesn't currently exist in packages/api. So, this file will live in packages/ui\n// until infrastructure is added to packages/api.\n\nimport { SmartDesktopClient } from \"./smartDesktopClient\";\n\ndescribe(\"SmartDesktopClient\", () => {\n\tdescribe(\"checkValidProjectName\", () => {\n\t\tconst validNames = [\"My Project\", \"kebab-case\", \"snake_case\", \"what.case.is.this...\"];\n\t\tvalidNames.forEach((name) => {\n\t\t\tit(`valid project name: ${name}`, () => {\n\t\t\t\texpect(SmartDesktopClient.checkValidProjectName(name)).to.be.true;\n\t\t\t});\n\t\t});\n\n\t\tconst invalidNames = [\n\t\t\t\"I have, a, comma\",\n\t\t\t\"What!?\",\n\t\t\t\"\",\n\t\t\t\"My (Test) Desktop\",\n\t\t\t\"My [bracket] Desktop\",\n\t\t\t\"My {braces} Desktop\",\n\t\t\t\"My? Smart! Desktop\",\n\t\t\t\"${unicode_sample}\",\n\t\t\t\" \",\n\t\t\t\" \",\n\t\t\t\".\",\n\t\t\t\"......\",\n\t\t];\n\t\tinvalidNames.forEach((name) => {\n\t\t\tit(`invalid project name: ${name}`, () => {\n\t\t\t\texpect(SmartDesktopClient.checkValidProjectName(name), name).to.be.false;\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"checkValidURL\", () => {\n\t\tconst valid = [\n\t\t\t\"\", // empty string\n\t\t\t\"http://www.cosaic.io/\", // good URL\n\t\t\t\"https://www.cosaic.io/\", // good URL\n\t\t\t\"http://a\", // http protocol + anything\n\t\t\t\"https://a\", // https protocol + anything\n\t\t];\n\t\tvalid.forEach((url) => {\n\t\t\tit(`valid url: \"${url}\"`, () => {\n\t\t\t\texpect(SmartDesktopClient.checkValidURL(url)).to.be.true;\n\t\t\t});\n\t\t});\n\n\t\tconst invalid = [\n\t\t\t\"http://\", // http protocol, but no other characters\n\t\t\t\"https://\", // https protocol, but no other characters\n\t\t\t\"file:///C:/Users/\", // unsupported protocol\n\t\t\t\"www.google.com\", // no protocol\n\t\t\t\"This is not a URL; it's a sentence!?\", // not even remotely a URL\n\t\t\t\" \", // spaces\n\t\t\t\" http://www.google.com\", // leading spaces\n\t\t];\n\t\tinvalid.forEach((url) => {\n\t\t\tit(`invalid url: \"${url}\"`, () => {\n\t\t\t\texpect(SmartDesktopClient.checkValidURL(url)).to.be.false;\n\t\t\t});\n\t\t});\n\t});\n});\n"]}
1
+ {"version":3,"file":"smartDesktopClient.spec.js","sourceRoot":"","sources":["../../../src/components/sdd/smartDesktopClient.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,yCAAyC;AACzC,gIAAgI;AAChI,iDAAiD;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACnC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACtC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;QACtF,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,EAAE,CAAC,uBAAuB,IAAI,EAAE,EAAE,GAAG,EAAE;gBACtC,MAAM,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACnE,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG;YACpB,kBAAkB;YAClB,QAAQ;YACR,EAAE;YACF,mBAAmB;YACnB,sBAAsB;YACtB,qBAAqB;YACrB,oBAAoB;YACpB,mBAAmB;YACnB,GAAG;YACH,OAAO;YACP,GAAG;YACH,QAAQ;SACR,CAAC;QACF,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7B,EAAE,CAAC,yBAAyB,IAAI,EAAE,EAAE,GAAG,EAAE;gBACxC,MAAM,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC1E,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC9B,MAAM,KAAK,GAAG;YACb,EAAE;YACF,uBAAuB;YACvB,wBAAwB;YACxB,UAAU;YACV,WAAW,EAAE,4BAA4B;SACzC,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACrB,EAAE,CAAC,eAAe,GAAG,GAAG,EAAE,GAAG,EAAE;gBAC9B,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1D,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG;YACf,SAAS;YACT,UAAU;YACV,mBAAmB;YACnB,gBAAgB;YAChB,sCAAsC;YACtC,GAAG;YACH,wBAAwB,EAAE,iBAAiB;SAC3C,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACvB,EAAE,CAAC,iBAAiB,GAAG,GAAG,EAAE,GAAG,EAAE;gBAChC,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC3D,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { describe, it } from \"mocha\";\nimport { expect } from \"chai\";\n\n// This test case belongs in packages/api\n// However, the infrastructure to run test cases doesn't currently exist in packages/api. So, this file will live in packages/ui\n// until infrastructure is added to packages/api.\n\nimport { SmartDesktopClient } from \"./smartDesktopClient\";\n\ndescribe(\"SmartDesktopClient\", () => {\n\tdescribe(\"checkValidProjectName\", () => {\n\t\tconst validNames = [\"My Project\", \"kebab-case\", \"snake_case\", \"what.case.is.this...\"];\n\t\tvalidNames.forEach((name) => {\n\t\t\tit(`valid project name: ${name}`, () => {\n\t\t\t\texpect(SmartDesktopClient.checkValidProjectName(name)).to.be.true;\n\t\t\t});\n\t\t});\n\n\t\tconst invalidNames = [\n\t\t\t\"I have, a, comma\",\n\t\t\t\"What!?\",\n\t\t\t\"\",\n\t\t\t\"My (Test) Desktop\",\n\t\t\t\"My [bracket] Desktop\",\n\t\t\t\"My {braces} Desktop\",\n\t\t\t\"My? Smart! Desktop\",\n\t\t\t\"${unicode_sample}\",\n\t\t\t\" \",\n\t\t\t\" \",\n\t\t\t\".\",\n\t\t\t\"......\",\n\t\t];\n\t\tinvalidNames.forEach((name) => {\n\t\t\tit(`invalid project name: ${name}`, () => {\n\t\t\t\texpect(SmartDesktopClient.checkValidProjectName(name), name).to.be.false;\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"checkValidURL\", () => {\n\t\tconst valid = [\n\t\t\t\"\", // empty string\n\t\t\t\"http://www.cosaic.io/\", // good URL\n\t\t\t\"https://www.cosaic.io/\", // good URL\n\t\t\t\"http://a\", // http protocol + anything\n\t\t\t\"https://a\", // https protocol + anything\n\t\t];\n\t\tvalid.forEach((url) => {\n\t\t\tit(`valid url: \"${url}\"`, () => {\n\t\t\t\texpect(SmartDesktopClient.checkValidURL(url)).to.be.true;\n\t\t\t});\n\t\t});\n\n\t\tconst invalid = [\n\t\t\t\"http://\", // http protocol, but no other characters\n\t\t\t\"https://\", // https protocol, but no other characters\n\t\t\t\"file:///C:/Users/\", // unsupported protocol\n\t\t\t\"www.google.com\", // no protocol\n\t\t\t\"This is not a URL; it's a sentence!?\", // not even remotely a URL\n\t\t\t\" \", // spaces\n\t\t\t\" http://www.google.com\", // leading spaces\n\t\t];\n\t\tinvalid.forEach((url) => {\n\t\t\tit(`invalid url: \"${url}\"`, () => {\n\t\t\t\texpect(SmartDesktopClient.checkValidURL(url)).to.be.false;\n\t\t\t});\n\t\t});\n\t});\n});\n"]}
@@ -4,7 +4,8 @@ import "../../../assets/css/finsemble.css";
4
4
  import "../../common/css/styles.css";
5
5
  declare const _default: {
6
6
  title: string;
7
- component: (props: AddAppProps) => JSX.Element;
7
+ component: ({ checkValidURL, addAppByPath, addAppByUrl, addAppCitrix, close, show, includeCitrix, idKey, }: AddAppProps) => JSX.Element;
8
8
  };
9
9
  export default _default;
10
10
  export declare const Page: import("@storybook/react").Story<AddAppProps>;
11
+ export declare const NoVirtual: import("@storybook/react").Story<AddAppProps>;
@@ -15,4 +15,12 @@ export const Page = createStory(AddApp, {
15
15
  close: action("close"),
16
16
  show: true,
17
17
  });
18
+ export const NoVirtual = createStory(AddApp, {
19
+ checkValidURL: () => true,
20
+ addAppByUrl: action("addAppByUrl"),
21
+ addAppByPath: action("addAppByPath"),
22
+ close: action("close"),
23
+ show: true,
24
+ includeCitrix: false,
25
+ });
18
26
  //# sourceMappingURL=AddApp.stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AddApp.stories.js","sourceRoot":"","sources":["../../../../src/components/sdd/stories/AddApp.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAe,MAAM,WAAW,CAAC;AAChD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,eAAe;IACd,KAAK,EAAE,+BAA+B;IACtC,SAAS,EAAE,MAAM;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAc,MAAM,EAAE;IACpD,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;IACzB,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC,cAAc,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC,cAAc,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,IAAI,EAAE,IAAI;CACV,CAAC,CAAC","sourcesContent":["import { createStory } from \"../../common/helpers\";\nimport { AddApp, AddAppProps } from \"../AddApp\";\nimport \"../../../assets/css/finsemble.css\";\nimport \"../../common/css/styles.css\";\nimport { action } from \"@storybook/addon-actions\";\n\nexport default {\n\ttitle: \"Smart Desktop Designer/AddApp\",\n\tcomponent: AddApp,\n};\n\nexport const Page = createStory<AddAppProps>(AddApp, {\n\tcheckValidURL: () => true,\n\taddAppByUrl: action(\"addAppByUrl\"),\n\taddAppByPath: action(\"addAppByPath\"),\n\taddAppCitrix: action(\"addAppCitrix\"),\n\tclose: action(\"close\"),\n\tshow: true,\n});\n"]}
1
+ {"version":3,"file":"AddApp.stories.js","sourceRoot":"","sources":["../../../../src/components/sdd/stories/AddApp.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAe,MAAM,WAAW,CAAC;AAChD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,eAAe;IACd,KAAK,EAAE,+BAA+B;IACtC,SAAS,EAAE,MAAM;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAc,MAAM,EAAE;IACpD,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;IACzB,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC,cAAc,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC,cAAc,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,IAAI,EAAE,IAAI;CACV,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAc,MAAM,EAAE;IACzD,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;IACzB,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC,cAAc,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,IAAI,EAAE,IAAI;IACV,aAAa,EAAE,KAAK;CACpB,CAAC,CAAC","sourcesContent":["import { createStory } from \"../../common/helpers\";\nimport { AddApp, AddAppProps } from \"../AddApp\";\nimport \"../../../assets/css/finsemble.css\";\nimport \"../../common/css/styles.css\";\nimport { action } from \"@storybook/addon-actions\";\n\nexport default {\n\ttitle: \"Smart Desktop Designer/AddApp\",\n\tcomponent: AddApp,\n};\n\nexport const Page = createStory<AddAppProps>(AddApp, {\n\tcheckValidURL: () => true,\n\taddAppByUrl: action(\"addAppByUrl\"),\n\taddAppByPath: action(\"addAppByPath\"),\n\taddAppCitrix: action(\"addAppCitrix\"),\n\tclose: action(\"close\"),\n\tshow: true,\n});\n\nexport const NoVirtual = createStory<AddAppProps>(AddApp, {\n\tcheckValidURL: () => true,\n\taddAppByUrl: action(\"addAppByUrl\"),\n\taddAppByPath: action(\"addAppByPath\"),\n\tclose: action(\"close\"),\n\tshow: true,\n\tincludeCitrix: false,\n});\n"]}
@@ -4,7 +4,7 @@ import "../../../assets/css/finsemble.css";
4
4
  import "../../common/css/styles.css";
5
5
  declare const _default: {
6
6
  title: string;
7
- component: ({ startingDisplayName, startingAppType, startingWindowURL, startingNativePath, appData, validateURL, removeApplicationFn, cancelFn, submitFn, addApp, isInboundInteropAuthorized, isOutboundInteropAuthorized, preloadAliasList, }: AppEditPageProps) => JSX.Element;
7
+ component: ({ startingDisplayName, startingAppType, startingWindowURL, startingNativePath, appData, validateURL, removeApplicationFn, cancelFn, submitFn, addApp, isInboundInteropAuthorized, isOutboundInteropAuthorized, preloadAliasList, appService, }: AppEditPageProps) => JSX.Element;
8
8
  };
9
9
  export default _default;
10
10
  export declare const Page: import("@storybook/react").Story<AppEditPageProps>;
@@ -13,3 +13,5 @@ export declare const NativePage: import("@storybook/react").Story<AppEditPagePro
13
13
  export declare const AssimilationPage: import("@storybook/react").Story<AppEditPageProps>;
14
14
  export declare const CitrixPage: import("@storybook/react").Story<AppEditPageProps>;
15
15
  export declare const EmptyPage: import("@storybook/react").Story<AppEditPageProps>;
16
+ export declare const AppServiceWeb: import("@storybook/react").Story<AppEditPageProps>;
17
+ export declare const AppServiceNative: import("@storybook/react").Story<AppEditPageProps>;
@@ -27,6 +27,7 @@ const defaultProps = {
27
27
  isOutboundInteropAuthorized: resolvePromiseAsTrue,
28
28
  addApp: resolvePromiseErrorNull,
29
29
  preloadAliasList: [],
30
+ appService: false,
30
31
  };
31
32
  export const Page = createStory(AppEditPage, defaultProps);
32
33
  export const PageWithIconURL = createStory(AppEditPage, Object.assign(Object.assign({}, defaultProps), { appData: Object.assign(Object.assign({}, defaultAppData), { iconURL: "https://assets.finsemble.com/components/fdc3-workbench/fdc3-icon-256.png" }) }));
@@ -34,4 +35,6 @@ export const NativePage = createStory(AppEditPage, Object.assign(Object.assign({
34
35
  export const AssimilationPage = createStory(AppEditPage, Object.assign(Object.assign({}, defaultProps), { startingAppType: "assimilation", startingNativePath: "test.exe", appData: defaultAppData }));
35
36
  export const CitrixPage = createStory(AppEditPage, Object.assign(Object.assign({}, defaultProps), { startingAppType: "Citrix", appData: Object.assign(Object.assign({}, defaultAppData), { alias: "My Citrix App" }) }));
36
37
  export const EmptyPage = createStory(AppEditPage, Object.assign(Object.assign({}, defaultProps), { startingDisplayName: "", startingWindowURL: "", validateURL: (s) => !s.includes("invalid") }));
38
+ export const AppServiceWeb = createStory(AppEditPage, Object.assign(Object.assign({}, defaultProps), { appService: true, startingDisplayName: "Chart data connector", appData: Object.assign(Object.assign({}, defaultAppData), { launchableByUser: false, enableTitleBar: false }) }));
39
+ export const AppServiceNative = createStory(AppEditPage, Object.assign(Object.assign({}, defaultProps), { appService: true, startingAppType: "native", startingNativePath: "test.exe", startingDisplayName: "Chart data connector", appData: Object.assign(Object.assign({}, defaultAppData), { launchableByUser: false, enableTitleBar: false }) }));
37
40
  //# sourceMappingURL=AppEditPage.stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppEditPage.stories.js","sourceRoot":"","sources":["../../../../src/components/sdd/stories/AppEditPage.stories.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAoB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,mCAAmC,CAAC;AAC3C,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,eAAe;IACd,KAAK,EAAE,oCAAoC;IAC3C,SAAS,EAAE,WAAW;CACtB,CAAC;AAEF,MAAM,oBAAoB,GAAG,GAAkB,EAAE,CAChD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACvB,OAAO,CAAC,IAAI,CAAC,CAAC;AACf,CAAC,CAAC,CAAC;AAEJ,MAAM,uBAAuB,GAAG,GAA2B,EAAE,CAC5D,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACvB,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEJ,MAAM,YAAY,GAAG;IACpB,mBAAmB,EAAE,MAAM;IAC3B,eAAe,EAAE,KAAK;IACtB,iBAAiB,EAAE,uBAAuB;IAC1C,kBAAkB,EAAE,EAAE;IACtB,OAAO,EAAE,cAAc;IACvB,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI;IACvB,mBAAmB,EAAE,MAAM,CAAC,oBAAoB,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,0BAA0B,EAAE,oBAAoB;IAChD,2BAA2B,EAAE,oBAAoB;IACjD,MAAM,EAAE,uBAAuB;IAC/B,gBAAgB,EAAE,EAAE;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAmB,WAAW,EAAE,YAAY,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAmB,WAAW,kCACpE,YAAY,KACf,OAAO,kCACH,cAAc,KACjB,OAAO,EAAE,0EAA0E,OAEnF,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAmB,WAAW,kCAC/D,YAAY,KACf,eAAe,EAAE,QAAQ,EACzB,kBAAkB,EAAE,UAAU,EAC9B,OAAO,EAAE,cAAc,IACtB,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAmB,WAAW,kCACrE,YAAY,KACf,eAAe,EAAE,cAAc,EAC/B,kBAAkB,EAAE,UAAU,EAC9B,OAAO,EAAE,cAAc,IACtB,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAmB,WAAW,kCAC/D,YAAY,KACf,eAAe,EAAE,QAAQ,EACzB,OAAO,kCACH,cAAc,KACjB,KAAK,EAAE,eAAe,OAEtB,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAmB,WAAW,kCAC9D,YAAY,KACf,mBAAmB,EAAE,EAAE,EACvB,iBAAiB,EAAE,EAAE,EACrB,WAAW,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IACjD,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport React from \"react\"; // This must be imported, or storybook will choke on this page\nimport { AppEditPage, AppEditPageProps, defaultAppData } from \"../AppEditPage\";\nimport \"../../../assets/css/finsemble.css\";\nimport \"../../common/css/styles.css\";\nimport { createStory } from \"../../common/helpers\";\nimport { action } from \"@storybook/addon-actions\";\n\nexport default {\n\ttitle: \"Smart Desktop Designer/AppEditPage\",\n\tcomponent: AppEditPage,\n};\n\nconst resolvePromiseAsTrue = (): Promise<true> =>\n\tnew Promise((resolve) => {\n\t\tresolve(true);\n\t});\n\nconst resolvePromiseErrorNull = (): Promise<{ err: null }> =>\n\tnew Promise((resolve) => {\n\t\tresolve({ err: null });\n\t});\n\nconst defaultProps = {\n\tstartingDisplayName: \"Test\",\n\tstartingAppType: \"web\",\n\tstartingWindowURL: \"http://www.google.com\",\n\tstartingNativePath: \"\",\n\tappData: defaultAppData,\n\tvalidateURL: () => true,\n\tremoveApplicationFn: action(\"Remove application\"),\n\tcancelFn: action(\"Cancel\"),\n\tsubmitFn: action(\"Submit\"),\n\tisInboundInteropAuthorized: resolvePromiseAsTrue,\n\tisOutboundInteropAuthorized: resolvePromiseAsTrue,\n\taddApp: resolvePromiseErrorNull,\n\tpreloadAliasList: [],\n};\n\nexport const Page = createStory<AppEditPageProps>(AppEditPage, defaultProps);\n\nexport const PageWithIconURL = createStory<AppEditPageProps>(AppEditPage, {\n\t...defaultProps,\n\tappData: {\n\t\t...defaultAppData,\n\t\ticonURL: \"https://assets.finsemble.com/components/fdc3-workbench/fdc3-icon-256.png\",\n\t},\n});\n\nexport const NativePage = createStory<AppEditPageProps>(AppEditPage, {\n\t...defaultProps,\n\tstartingAppType: \"native\",\n\tstartingNativePath: \"test.exe\",\n\tappData: defaultAppData,\n});\n\nexport const AssimilationPage = createStory<AppEditPageProps>(AppEditPage, {\n\t...defaultProps,\n\tstartingAppType: \"assimilation\",\n\tstartingNativePath: \"test.exe\",\n\tappData: defaultAppData,\n});\n\nexport const CitrixPage = createStory<AppEditPageProps>(AppEditPage, {\n\t...defaultProps,\n\tstartingAppType: \"Citrix\",\n\tappData: {\n\t\t...defaultAppData,\n\t\talias: \"My Citrix App\",\n\t},\n});\n\nexport const EmptyPage = createStory<AppEditPageProps>(AppEditPage, {\n\t...defaultProps,\n\tstartingDisplayName: \"\",\n\tstartingWindowURL: \"\",\n\tvalidateURL: (s: string) => !s.includes(\"invalid\"),\n});\n"]}
1
+ {"version":3,"file":"AppEditPage.stories.js","sourceRoot":"","sources":["../../../../src/components/sdd/stories/AppEditPage.stories.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAoB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,mCAAmC,CAAC;AAC3C,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,eAAe;IACd,KAAK,EAAE,oCAAoC;IAC3C,SAAS,EAAE,WAAW;CACtB,CAAC;AAEF,MAAM,oBAAoB,GAAG,GAAkB,EAAE,CAChD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACvB,OAAO,CAAC,IAAI,CAAC,CAAC;AACf,CAAC,CAAC,CAAC;AAEJ,MAAM,uBAAuB,GAAG,GAA2B,EAAE,CAC5D,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACvB,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEJ,MAAM,YAAY,GAAG;IACpB,mBAAmB,EAAE,MAAM;IAC3B,eAAe,EAAE,KAAK;IACtB,iBAAiB,EAAE,uBAAuB;IAC1C,kBAAkB,EAAE,EAAE;IACtB,OAAO,EAAE,cAAc;IACvB,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI;IACvB,mBAAmB,EAAE,MAAM,CAAC,oBAAoB,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,0BAA0B,EAAE,oBAAoB;IAChD,2BAA2B,EAAE,oBAAoB;IACjD,MAAM,EAAE,uBAAuB;IAC/B,gBAAgB,EAAE,EAAE;IACpB,UAAU,EAAE,KAAK;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAmB,WAAW,EAAE,YAAY,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAmB,WAAW,kCACpE,YAAY,KACf,OAAO,kCACH,cAAc,KACjB,OAAO,EAAE,0EAA0E,OAEnF,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAmB,WAAW,kCAC/D,YAAY,KACf,eAAe,EAAE,QAAQ,EACzB,kBAAkB,EAAE,UAAU,EAC9B,OAAO,EAAE,cAAc,IACtB,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAmB,WAAW,kCACrE,YAAY,KACf,eAAe,EAAE,cAAc,EAC/B,kBAAkB,EAAE,UAAU,EAC9B,OAAO,EAAE,cAAc,IACtB,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAmB,WAAW,kCAC/D,YAAY,KACf,eAAe,EAAE,QAAQ,EACzB,OAAO,kCACH,cAAc,KACjB,KAAK,EAAE,eAAe,OAEtB,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAmB,WAAW,kCAC9D,YAAY,KACf,mBAAmB,EAAE,EAAE,EACvB,iBAAiB,EAAE,EAAE,EACrB,WAAW,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IACjD,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAmB,WAAW,kCAClE,YAAY,KACf,UAAU,EAAE,IAAI,EAChB,mBAAmB,EAAE,sBAAsB,EAC3C,OAAO,kCACH,cAAc,KACjB,gBAAgB,EAAE,KAAK,EACvB,cAAc,EAAE,KAAK,OAErB,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAmB,WAAW,kCACrE,YAAY,KACf,UAAU,EAAE,IAAI,EAChB,eAAe,EAAE,QAAQ,EACzB,kBAAkB,EAAE,UAAU,EAC9B,mBAAmB,EAAE,sBAAsB,EAC3C,OAAO,kCACH,cAAc,KACjB,gBAAgB,EAAE,KAAK,EACvB,cAAc,EAAE,KAAK,OAErB,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport React from \"react\"; // This must be imported, or storybook will choke on this page\nimport { AppEditPage, AppEditPageProps, defaultAppData } from \"../AppEditPage\";\nimport \"../../../assets/css/finsemble.css\";\nimport \"../../common/css/styles.css\";\nimport { createStory } from \"../../common/helpers\";\nimport { action } from \"@storybook/addon-actions\";\n\nexport default {\n\ttitle: \"Smart Desktop Designer/AppEditPage\",\n\tcomponent: AppEditPage,\n};\n\nconst resolvePromiseAsTrue = (): Promise<true> =>\n\tnew Promise((resolve) => {\n\t\tresolve(true);\n\t});\n\nconst resolvePromiseErrorNull = (): Promise<{ err: null }> =>\n\tnew Promise((resolve) => {\n\t\tresolve({ err: null });\n\t});\n\nconst defaultProps = {\n\tstartingDisplayName: \"Test\",\n\tstartingAppType: \"web\",\n\tstartingWindowURL: \"http://www.google.com\",\n\tstartingNativePath: \"\",\n\tappData: defaultAppData,\n\tvalidateURL: () => true,\n\tremoveApplicationFn: action(\"Remove application\"),\n\tcancelFn: action(\"Cancel\"),\n\tsubmitFn: action(\"Submit\"),\n\tisInboundInteropAuthorized: resolvePromiseAsTrue,\n\tisOutboundInteropAuthorized: resolvePromiseAsTrue,\n\taddApp: resolvePromiseErrorNull,\n\tpreloadAliasList: [],\n\tappService: false,\n};\n\nexport const Page = createStory<AppEditPageProps>(AppEditPage, defaultProps);\n\nexport const PageWithIconURL = createStory<AppEditPageProps>(AppEditPage, {\n\t...defaultProps,\n\tappData: {\n\t\t...defaultAppData,\n\t\ticonURL: \"https://assets.finsemble.com/components/fdc3-workbench/fdc3-icon-256.png\",\n\t},\n});\n\nexport const NativePage = createStory<AppEditPageProps>(AppEditPage, {\n\t...defaultProps,\n\tstartingAppType: \"native\",\n\tstartingNativePath: \"test.exe\",\n\tappData: defaultAppData,\n});\n\nexport const AssimilationPage = createStory<AppEditPageProps>(AppEditPage, {\n\t...defaultProps,\n\tstartingAppType: \"assimilation\",\n\tstartingNativePath: \"test.exe\",\n\tappData: defaultAppData,\n});\n\nexport const CitrixPage = createStory<AppEditPageProps>(AppEditPage, {\n\t...defaultProps,\n\tstartingAppType: \"Citrix\",\n\tappData: {\n\t\t...defaultAppData,\n\t\talias: \"My Citrix App\",\n\t},\n});\n\nexport const EmptyPage = createStory<AppEditPageProps>(AppEditPage, {\n\t...defaultProps,\n\tstartingDisplayName: \"\",\n\tstartingWindowURL: \"\",\n\tvalidateURL: (s: string) => !s.includes(\"invalid\"),\n});\n\nexport const AppServiceWeb = createStory<AppEditPageProps>(AppEditPage, {\n\t...defaultProps,\n\tappService: true,\n\tstartingDisplayName: \"Chart data connector\",\n\tappData: {\n\t\t...defaultAppData,\n\t\tlaunchableByUser: false,\n\t\tenableTitleBar: false,\n\t},\n});\n\nexport const AppServiceNative = createStory<AppEditPageProps>(AppEditPage, {\n\t...defaultProps,\n\tappService: true,\n\tstartingAppType: \"native\",\n\tstartingNativePath: \"test.exe\",\n\tstartingDisplayName: \"Chart data connector\",\n\tappData: {\n\t\t...defaultAppData,\n\t\tlaunchableByUser: false,\n\t\tenableTitleBar: false,\n\t},\n});\n"]}
@@ -13,6 +13,7 @@ export const Page = createStory(Appearance, {
13
13
  lightTheme,
14
14
  updateTheme: (theme) => { },
15
15
  updateThemes: () => {
16
+ // console.log(`ID: ${id}, Theme: ${newValue}`);
16
17
  },
17
18
  areYouSure: (cb) => {
18
19
  cb();
@@ -1 +1 @@
1
- {"version":3,"file":"Appearance.stories.js","sourceRoot":"","sources":["../../../../src/components/sdd/stories/Appearance.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAmB,MAAM,eAAe,CAAC;AAC5D,OAAO,mCAAmC,CAAC;AAC3C,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG5D,eAAe;IACd,KAAK,EAAE,mCAAmC;IAC1C,SAAS,EAAE,UAAU;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAkB,UAAU,EAAE;IAC5D,UAAU,EAAE,SAAS;IACrB,SAAS;IACT,UAAU;IACV,WAAW,EAAE,CAAC,KAAkB,EAAE,EAAE,GAAE,CAAC;IACvC,YAAY,EAAE,GAAG,EAAE;IAEnB,CAAC;IACD,UAAU,EAAE,CAAC,EAAc,EAAE,EAAE;QAC9B,EAAE,EAAE,CAAC;IACN,CAAC;IACD,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IACjB,cAAc,EAAE,EAAE;IAClB,iBAAiB,EAAE,EAAE;IACrB,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;IACxB,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;IACxB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,iBAAiB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC3B,oBAAoB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC9B,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC;IACzB,kBAAkB,EAAE,cAAc;IAClC,iBAAiB,EAAE,cAAc;IACjC,iBAAiB,EAAE,cAAc;IACjC,oBAAoB,EAAE,cAAc;IACpC,mBAAmB,EAAE,cAAc;CACnC,CAAC,CAAC","sourcesContent":["import { createStory, uploadFunction } from \"../../common/helpers\";\nimport { Appearance, AppearanceProps } from \"../Appearance\";\nimport \"../../../assets/css/finsemble.css\";\nimport \"../../common/css/styles.css\";\nimport { darkTheme, lightTheme } from \"../themeDefinitions\";\nimport { ThemeBundle } from \"../ThemePage\";\n\nexport default {\n\ttitle: \"Smart Desktop Designer/Appearance\",\n\tcomponent: Appearance,\n};\n\nexport const Page = createStory<AppearanceProps>(Appearance, {\n\tstartTheme: darkTheme,\n\tdarkTheme,\n\tlightTheme,\n\tupdateTheme: (theme: ThemeBundle) => {},\n\tupdateThemes: () => {\n\t\t// console.log(`ID: ${id}, Theme: ${newValue}`);\n\t},\n\tareYouSure: (cb: () => void) => {\n\t\tcb();\n\t},\n\tbaseURL: \"\",\n\ttoolbarIcon: \"\",\n\ttaskbarIcon: \"\",\n\tinstallerIcon: \"\",\n\tsystemTrayIcon: \"\",\n\tsplashScreenImage: \"\",\n\tsetToolbarIcon: () => {},\n\tsetTaskbarIcon: () => {},\n\tsetInstallerIcon: () => {},\n\tsetSystemTrayIcon: () => {},\n\tsetSplashScreenImage: () => {},\n\tsetIconsChanged: () => {},\n\tupdateSplashScreen: uploadFunction,\n\tupdateToolbarIcon: uploadFunction,\n\tupdateTaskbarIcon: uploadFunction,\n\tupdateSystemTrayIcon: uploadFunction,\n\tupdateInstallerIcon: uploadFunction,\n});\n"]}
1
+ {"version":3,"file":"Appearance.stories.js","sourceRoot":"","sources":["../../../../src/components/sdd/stories/Appearance.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAmB,MAAM,eAAe,CAAC;AAC5D,OAAO,mCAAmC,CAAC;AAC3C,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG5D,eAAe;IACd,KAAK,EAAE,mCAAmC;IAC1C,SAAS,EAAE,UAAU;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAkB,UAAU,EAAE;IAC5D,UAAU,EAAE,SAAS;IACrB,SAAS;IACT,UAAU;IACV,WAAW,EAAE,CAAC,KAAkB,EAAE,EAAE,GAAE,CAAC;IACvC,YAAY,EAAE,GAAG,EAAE;QAClB,gDAAgD;IACjD,CAAC;IACD,UAAU,EAAE,CAAC,EAAc,EAAE,EAAE;QAC9B,EAAE,EAAE,CAAC;IACN,CAAC;IACD,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IACjB,cAAc,EAAE,EAAE;IAClB,iBAAiB,EAAE,EAAE;IACrB,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;IACxB,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;IACxB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,iBAAiB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC3B,oBAAoB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC9B,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC;IACzB,kBAAkB,EAAE,cAAc;IAClC,iBAAiB,EAAE,cAAc;IACjC,iBAAiB,EAAE,cAAc;IACjC,oBAAoB,EAAE,cAAc;IACpC,mBAAmB,EAAE,cAAc;CACnC,CAAC,CAAC","sourcesContent":["import { createStory, uploadFunction } from \"../../common/helpers\";\nimport { Appearance, AppearanceProps } from \"../Appearance\";\nimport \"../../../assets/css/finsemble.css\";\nimport \"../../common/css/styles.css\";\nimport { darkTheme, lightTheme } from \"../themeDefinitions\";\nimport { ThemeBundle } from \"../ThemePage\";\n\nexport default {\n\ttitle: \"Smart Desktop Designer/Appearance\",\n\tcomponent: Appearance,\n};\n\nexport const Page = createStory<AppearanceProps>(Appearance, {\n\tstartTheme: darkTheme,\n\tdarkTheme,\n\tlightTheme,\n\tupdateTheme: (theme: ThemeBundle) => {},\n\tupdateThemes: () => {\n\t\t// console.log(`ID: ${id}, Theme: ${newValue}`);\n\t},\n\tareYouSure: (cb: () => void) => {\n\t\tcb();\n\t},\n\tbaseURL: \"\",\n\ttoolbarIcon: \"\",\n\ttaskbarIcon: \"\",\n\tinstallerIcon: \"\",\n\tsystemTrayIcon: \"\",\n\tsplashScreenImage: \"\",\n\tsetToolbarIcon: () => {},\n\tsetTaskbarIcon: () => {},\n\tsetInstallerIcon: () => {},\n\tsetSystemTrayIcon: () => {},\n\tsetSplashScreenImage: () => {},\n\tsetIconsChanged: () => {},\n\tupdateSplashScreen: uploadFunction,\n\tupdateToolbarIcon: uploadFunction,\n\tupdateTaskbarIcon: uploadFunction,\n\tupdateSystemTrayIcon: uploadFunction,\n\tupdateInstallerIcon: uploadFunction,\n});\n"]}