@finsemble/finsemble-ui 6.6.1 → 7.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/package.json +18 -32
  2. package/react/assets/css/button.css +1 -1
  3. package/react/assets/css/favorites.css +0 -47
  4. package/react/assets/css/finsemble.css +3 -0
  5. package/react/assets/css/linkerWindow.css +13 -1
  6. package/react/assets/css/menus.css +2 -2
  7. package/react/assets/css/notificationsCenter.css +32 -1
  8. package/react/assets/css/shared/common.css +40 -0
  9. package/react/assets/css/userPreferences.css +17 -12
  10. package/react/assets/css/windowTitleBar.css +7 -0
  11. package/react/assets/icons/server.svg +26 -0
  12. package/react/components/common/ButtonIcon.js +1 -1
  13. package/react/components/common/ButtonIcon.js.map +1 -1
  14. package/react/components/common/ButtonRow.js +2 -2
  15. package/react/components/common/ButtonRow.js.map +1 -1
  16. package/react/components/common/Checkbox.js +1 -1
  17. package/react/components/common/Checkbox.js.map +1 -1
  18. package/react/components/common/ColorPicker.js +16 -15
  19. package/react/components/common/ColorPicker.js.map +1 -1
  20. package/react/components/common/ErrorBoundary.d.ts +16 -0
  21. package/react/components/common/ErrorBoundary.js +22 -0
  22. package/react/components/common/ErrorBoundary.js.map +1 -0
  23. package/react/components/common/FinsembleIcon.d.ts +3 -2
  24. package/react/components/common/FinsembleIcon.js +10 -3
  25. package/react/components/common/FinsembleIcon.js.map +1 -1
  26. package/react/components/common/FinsembleLink.d.ts +6 -0
  27. package/react/components/common/FinsembleLink.js +12 -0
  28. package/react/components/common/FinsembleLink.js.map +1 -0
  29. package/react/components/common/FinsembleToggle.d.ts +1 -2
  30. package/react/components/common/FinsembleToggle.js +2 -6
  31. package/react/components/common/FinsembleToggle.js.map +1 -1
  32. package/react/components/common/FinsembleToggleButtonBar.d.ts +13 -0
  33. package/react/components/common/FinsembleToggleButtonBar.js +44 -0
  34. package/react/components/common/FinsembleToggleButtonBar.js.map +1 -0
  35. package/react/components/common/InputTable.d.ts +3 -3
  36. package/react/components/common/InputTable.js +13 -13
  37. package/react/components/common/InputTable.js.map +1 -1
  38. package/react/components/common/Tab.js +33 -5
  39. package/react/components/common/Tab.js.map +1 -1
  40. package/react/components/common/css/FinsembleToggle.css +22 -0
  41. package/react/components/common/css/application-edit-page.css +10 -2
  42. package/react/components/common/css/tab.css +8 -8
  43. package/react/components/common/css/time-select.css +1 -1
  44. package/react/components/common/css/toggle.css +2 -10
  45. package/react/components/common/helpers.js +6 -1
  46. package/react/components/common/helpers.js.map +1 -1
  47. package/react/components/common/stories/ColorPicker.stories.js +6 -11
  48. package/react/components/common/stories/ColorPicker.stories.js.map +1 -1
  49. package/react/components/common/stories/FinsembleToggle.stories.d.ts +1 -2
  50. package/react/components/common/stories/FinsembleToggle.stories.js +0 -7
  51. package/react/components/common/stories/FinsembleToggle.stories.js.map +1 -1
  52. package/react/components/common/stories/FinsembleToggleButtonBar.stories.d.ts +14 -0
  53. package/react/components/common/stories/FinsembleToggleButtonBar.stories.js +97 -0
  54. package/react/components/common/stories/FinsembleToggleButtonBar.stories.js.map +1 -0
  55. package/react/components/common/stories/InputTable.stories.d.ts +4 -3
  56. package/react/components/common/stories/InputTable.stories.js +18 -8
  57. package/react/components/common/stories/InputTable.stories.js.map +1 -1
  58. package/react/components/common/tests/ButtonRow.spec.js +5 -0
  59. package/react/components/common/tests/ButtonRow.spec.js.map +1 -1
  60. package/react/components/common/tests/FinsembleToggle.spec.js +1 -6
  61. package/react/components/common/tests/FinsembleToggle.spec.js.map +1 -1
  62. package/react/components/common/tests/FinsembleToggleButtonBar.spec.d.ts +1 -0
  63. package/react/components/common/tests/FinsembleToggleButtonBar.spec.js +40 -0
  64. package/react/components/common/tests/FinsembleToggleButtonBar.spec.js.map +1 -0
  65. package/react/components/common/tests/InputTable.spec.js +3 -3
  66. package/react/components/common/tests/InputTable.spec.js.map +1 -1
  67. package/react/components/favorites/FavoriteMaker.js +1 -1
  68. package/react/components/favorites/FavoriteMaker.js.map +1 -1
  69. package/react/components/fdc3Resolver/ResolverContainer.js +4 -7
  70. package/react/components/fdc3Resolver/ResolverContainer.js.map +1 -1
  71. package/react/components/icon/Icon.d.ts +1 -1
  72. package/react/components/icon/Icon.js +8 -1
  73. package/react/components/icon/Icon.js.map +1 -1
  74. package/react/components/legacyControls/FinsembleDnDContext.js +7 -7
  75. package/react/components/legacyControls/FinsembleDnDContext.js.map +1 -1
  76. package/react/components/linker/remoteRedux.js +1 -0
  77. package/react/components/linker/remoteRedux.js.map +1 -1
  78. package/react/components/menu/MenuItem.js +1 -1
  79. package/react/components/menu/MenuItem.js.map +1 -1
  80. package/react/components/menu/MenuPortal.js +12 -21
  81. package/react/components/menu/MenuPortal.js.map +1 -1
  82. package/react/components/menu/MenuToggle.js +1 -1
  83. package/react/components/menu/MenuToggle.js.map +1 -1
  84. package/react/components/menu/keyboardNavigation.d.ts +1 -22
  85. package/react/components/menu/keyboardNavigation.js +110 -160
  86. package/react/components/menu/keyboardNavigation.js.map +1 -1
  87. package/react/components/notifications/components/drawer/DrawerControls.js +39 -25
  88. package/react/components/notifications/components/drawer/DrawerControls.js.map +1 -1
  89. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js +19 -6
  90. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js.map +1 -1
  91. package/react/components/notifications/components/shared/CheckButton.js +19 -8
  92. package/react/components/notifications/components/shared/CheckButton.js.map +1 -1
  93. package/react/components/notifications/components/shared/NotificationCardShell.js +2 -1
  94. package/react/components/notifications/components/shared/NotificationCardShell.js.map +1 -1
  95. package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js +2 -1
  96. package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js.map +1 -1
  97. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.js +2 -1
  98. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.js.map +1 -1
  99. package/react/components/notifications/components/views/CardView.js +5 -3
  100. package/react/components/notifications/components/views/CardView.js.map +1 -1
  101. package/react/components/notifications/components/views/ListView.js +3 -1
  102. package/react/components/notifications/components/views/ListView.js.map +1 -1
  103. package/react/components/notifications/types.d.ts +3 -0
  104. package/react/components/notifications/types.js.map +1 -1
  105. package/react/components/processMonitor/ProcessMonitor.js +4 -1
  106. package/react/components/processMonitor/ProcessMonitor.js.map +1 -1
  107. package/react/components/processMonitor/components/ProcessStatistics.js +1 -3
  108. package/react/components/processMonitor/components/ProcessStatistics.js.map +1 -1
  109. package/react/components/processMonitor/helpers.js +4 -3
  110. package/react/components/processMonitor/helpers.js.map +1 -1
  111. package/react/components/processMonitor/helpers.spec.js +7 -3
  112. package/react/components/processMonitor/helpers.spec.js.map +1 -1
  113. package/react/components/sdd/AddApp.d.ts +4 -3
  114. package/react/components/sdd/AddApp.js +132 -30
  115. package/react/components/sdd/AddApp.js.map +1 -1
  116. package/react/components/sdd/AppEditAccess.d.ts +4 -3
  117. package/react/components/sdd/AppEditAccess.js.map +1 -1
  118. package/react/components/sdd/AppEditPage.d.ts +4 -3
  119. package/react/components/sdd/AppEditPage.js +141 -116
  120. package/react/components/sdd/AppEditPage.js.map +1 -1
  121. package/react/components/sdd/Appearance.d.ts +2 -1
  122. package/react/components/sdd/Appearance.js +15 -7
  123. package/react/components/sdd/Appearance.js.map +1 -1
  124. package/react/components/sdd/Application.d.ts +5 -4
  125. package/react/components/sdd/Application.js +61 -42
  126. package/react/components/sdd/Application.js.map +1 -1
  127. package/react/components/sdd/Applications.d.ts +12 -11
  128. package/react/components/sdd/Applications.js +23 -4
  129. package/react/components/sdd/Applications.js.map +1 -1
  130. package/react/components/sdd/Authentication.js +1 -6
  131. package/react/components/sdd/Authentication.js.map +1 -1
  132. package/react/components/sdd/AuthenticationProviderConfig.js +5 -3
  133. package/react/components/sdd/AuthenticationProviderConfig.js.map +1 -1
  134. package/react/components/sdd/EditPreload.d.ts +4 -3
  135. package/react/components/sdd/EditPreload.js +39 -22
  136. package/react/components/sdd/EditPreload.js.map +1 -1
  137. package/react/components/sdd/Export.d.ts +7 -6
  138. package/react/components/sdd/Export.js +3 -2
  139. package/react/components/sdd/Export.js.map +1 -1
  140. package/react/components/sdd/GettingStarted.js +3 -3
  141. package/react/components/sdd/GettingStarted.js.map +1 -1
  142. package/react/components/sdd/Navigation.js +28 -4
  143. package/react/components/sdd/Navigation.js.map +1 -1
  144. package/react/components/sdd/OptionalSettingsView.d.ts +6 -5
  145. package/react/components/sdd/OptionalSettingsView.js +2 -10
  146. package/react/components/sdd/OptionalSettingsView.js.map +1 -1
  147. package/react/components/sdd/ProjectErrors.js +1 -1
  148. package/react/components/sdd/ProjectErrors.js.map +1 -1
  149. package/react/components/sdd/Publish.js +2 -2
  150. package/react/components/sdd/Publish.js.map +1 -1
  151. package/react/components/sdd/SmartDesktopDesigner.d.ts +17 -16
  152. package/react/components/sdd/SmartDesktopDesigner.js +37 -34
  153. package/react/components/sdd/SmartDesktopDesigner.js.map +1 -1
  154. package/react/components/sdd/ThemePage.js +8 -5
  155. package/react/components/sdd/ThemePage.js.map +1 -1
  156. package/react/components/sdd/Themes.d.ts +2 -1
  157. package/react/components/sdd/Themes.js +2 -2
  158. package/react/components/sdd/Themes.js.map +1 -1
  159. package/react/components/sdd/Toolbar.d.ts +5 -4
  160. package/react/components/sdd/Toolbar.js +11 -9
  161. package/react/components/sdd/Toolbar.js.map +1 -1
  162. package/react/components/sdd/common/setPreloadDefaults.d.ts +1 -1
  163. package/react/components/sdd/common/setPreloadDefaults.js +5 -4
  164. package/react/components/sdd/common/setPreloadDefaults.js.map +1 -1
  165. package/react/components/sdd/common/views.js +7 -4
  166. package/react/components/sdd/common/views.js.map +1 -1
  167. package/react/components/sdd/css/addApp.css +52 -0
  168. package/react/components/sdd/css/applications.css +4 -24
  169. package/react/components/sdd/css/nav.css +3 -3
  170. package/react/components/sdd/fixtures/authenticationProps.js +15 -1
  171. package/react/components/sdd/fixtures/authenticationProps.js.map +1 -1
  172. package/react/components/sdd/fixtures/preloads.js +14 -12
  173. package/react/components/sdd/fixtures/preloads.js.map +1 -1
  174. package/react/components/sdd/smartDesktopClient.d.ts +163 -0
  175. package/react/components/sdd/smartDesktopClient.js +573 -0
  176. package/react/components/sdd/smartDesktopClient.js.map +1 -0
  177. package/react/components/sdd/smartDesktopClient.spec.d.ts +1 -0
  178. package/react/components/sdd/smartDesktopClient.spec.js +61 -0
  179. package/react/components/sdd/smartDesktopClient.spec.js.map +1 -0
  180. package/react/components/sdd/stories/AddApp.stories.d.ts +10 -0
  181. package/react/components/sdd/stories/AddApp.stories.js +18 -0
  182. package/react/components/sdd/stories/AddApp.stories.js.map +1 -0
  183. package/react/components/sdd/stories/AppEditPage.stories.d.ts +2 -0
  184. package/react/components/sdd/stories/AppEditPage.stories.js +2 -0
  185. package/react/components/sdd/stories/AppEditPage.stories.js.map +1 -1
  186. package/react/components/sdd/stories/Appearance.stories.d.ts +1 -1
  187. package/react/components/sdd/stories/Appearance.stories.js +1 -0
  188. package/react/components/sdd/stories/Appearance.stories.js.map +1 -1
  189. package/react/components/sdd/stories/Authentication.stories.js +2 -16
  190. package/react/components/sdd/stories/Authentication.stories.js.map +1 -1
  191. package/react/components/sdd/stories/OptionalSettingsView.stories.js +1 -1
  192. package/react/components/sdd/stories/OptionalSettingsView.stories.js.map +1 -1
  193. package/react/components/sdd/stories/SmartDesktopDesigner.stories.d.ts +1 -1
  194. package/react/components/sdd/stories/SmartDesktopDesigner.stories.js +3 -0
  195. package/react/components/sdd/stories/SmartDesktopDesigner.stories.js.map +1 -1
  196. package/react/components/sdd/stories/Themes.stories.d.ts +1 -1
  197. package/react/components/sdd/stories/Themes.stories.js +1 -0
  198. package/react/components/sdd/stories/Themes.stories.js.map +1 -1
  199. package/react/components/sdd/tests/AddApp.spec.d.ts +1 -0
  200. package/react/components/sdd/tests/AddApp.spec.js +96 -0
  201. package/react/components/sdd/tests/AddApp.spec.js.map +1 -0
  202. package/react/components/sdd/tests/AppEditPage.spec.js +92 -23
  203. package/react/components/sdd/tests/AppEditPage.spec.js.map +1 -1
  204. package/react/components/sdd/tests/Application.spec.js +411 -24
  205. package/react/components/sdd/tests/Application.spec.js.map +1 -1
  206. package/react/components/sdd/tests/Applications.spec.js +1 -45
  207. package/react/components/sdd/tests/Applications.spec.js.map +1 -1
  208. package/react/components/sdd/tests/Authentication.spec.js +1 -1
  209. package/react/components/sdd/tests/Authentication.spec.js.map +1 -1
  210. package/react/components/sdd/tests/EditPreload.spec.js +50 -7
  211. package/react/components/sdd/tests/EditPreload.spec.js.map +1 -1
  212. package/react/components/sdd/tests/Navigation.spec.js +2 -2
  213. package/react/components/sdd/tests/Navigation.spec.js.map +1 -1
  214. package/react/components/sdd/tests/OptionalSettingsView.spec.js +235 -0
  215. package/react/components/sdd/tests/OptionalSettingsView.spec.js.map +1 -1
  216. package/react/components/sdd/tests/ProjectErrors.spec.js +1 -1
  217. package/react/components/sdd/tests/ProjectErrors.spec.js.map +1 -1
  218. package/react/components/sdd/tests/SmartDesktopDesigner.spec.js +2 -2
  219. package/react/components/sdd/tests/SmartDesktopDesigner.spec.js.map +1 -1
  220. package/react/components/search/Search.js +1 -1
  221. package/react/components/search/Search.js.map +1 -1
  222. package/react/components/shared/DefaultDropdownButton.js +12 -1
  223. package/react/components/shared/DefaultDropdownButton.js.map +1 -1
  224. package/react/components/shared/tests/DefaultDropdownButton.spec.js +12 -0
  225. package/react/components/shared/tests/DefaultDropdownButton.spec.js.map +1 -1
  226. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.d.ts +1 -16
  227. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js +0 -4
  228. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js.map +1 -1
  229. package/react/components/toolbar/DragHandle.stories.js.map +1 -1
  230. package/react/components/toolbar/ToolbarIcon.js +2 -2
  231. package/react/components/toolbar/ToolbarIcon.js.map +1 -1
  232. package/react/components/toolbar/ToolbarSection.d.ts +1 -9
  233. package/react/components/toolbar/ToolbarSection.js +3 -7
  234. package/react/components/toolbar/ToolbarSection.js.map +1 -1
  235. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js +1 -1
  236. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js.map +1 -1
  237. package/react/components/toolbar/dashbar/Dashbar.js +21 -12
  238. package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
  239. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js +1 -1
  240. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js.map +1 -1
  241. package/react/components/userPreferences/components/ContentSection.js +1 -1
  242. package/react/components/userPreferences/components/ContentSection.js.map +1 -1
  243. package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js +4 -3
  244. package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js.map +1 -1
  245. package/react/components/userPreferences/components/general/ScheduledClose.js +12 -3
  246. package/react/components/userPreferences/components/general/ScheduledClose.js.map +1 -1
  247. package/react/components/userPreferences/components/workspaces/WorkspaceButton.js +1 -1
  248. package/react/components/userPreferences/components/workspaces/WorkspaceButton.js.map +1 -1
  249. package/react/components/windowTitleBar/WindowTitleBarShell.d.ts +17 -2
  250. package/react/components/windowTitleBar/WindowTitleBarShell.js +160 -6
  251. package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
  252. package/react/components/windowTitleBar/components/left/LinkerButton.js +7 -1
  253. package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
  254. package/react/components/windowTitleBar/components/windowTitle.js +10 -2
  255. package/react/components/windowTitleBar/components/windowTitle.js.map +1 -1
  256. package/react/components/windowTitleBar/stores/windowTitleBarStore.js +11 -1
  257. package/react/components/windowTitleBar/stores/windowTitleBarStore.js.map +1 -1
  258. package/react/reducers/rootReducer.d.ts +2 -2
  259. package/react/store.d.ts +4 -4
  260. package/react/tsconfig.tsbuildinfo +1 -0
  261. package/react/types/smartDesktopDesignerTypes.d.ts +3 -0
  262. package/react/types/smartDesktopDesignerTypes.js.map +1 -1
@@ -15,6 +15,7 @@ import DefaultDropdownButton from "../shared/DefaultDropdownButton";
15
15
  import "../common/css/application-edit-page.css";
16
16
  import { FinsembleIcon } from "../common/FinsembleIcon";
17
17
  import { FinsembleSelect } from "../common/FinsembleSelect";
18
+ import { FinsembleLink } from "../common/FinsembleLink";
18
19
  const DEFAULT_WINDOW_WIDTH = 1280;
19
20
  const DEFAULT_WINDOW_HEIGHT = 600;
20
21
  const MINIMUM_WINDOW_WIDTH = 0;
@@ -23,6 +24,7 @@ export const defaultAppData = {
23
24
  name: "",
24
25
  abstractPosition: 0,
25
26
  addToWorkspace: true,
27
+ alias: "",
26
28
  allowAutoArrange: true,
27
29
  allowGrouping: true,
28
30
  allowMinimize: true,
@@ -35,6 +37,7 @@ export const defaultAppData = {
35
37
  appType: "WEB",
36
38
  autoConnect: false,
37
39
  description: "",
40
+ enableAffinity: true,
38
41
  enableAOT: false,
39
42
  enableTitleBar: true,
40
43
  height: DEFAULT_WINDOW_HEIGHT,
@@ -57,14 +60,18 @@ export const defaultAppData = {
57
60
  singleton: false,
58
61
  spawnOnStartup: false,
59
62
  tags: [],
63
+ titlebarType: "injected",
60
64
  url: "",
61
65
  width: DEFAULT_WINDOW_WIDTH,
62
66
  };
63
- const openLink = (url) => {
64
- FSBL.Clients.LauncherClient.spawn("", {
65
- url,
66
- addToWorkspace: false,
67
- }, () => { });
67
+ const convertIntentData = (intentArray) => intentArray.slice(0, -1).map(([name, displayName, contexts]) => {
68
+ return { name, displayName, contexts: contexts.split(",") };
69
+ });
70
+ const appTypeDisplayNameMap = {
71
+ web: "Web",
72
+ native: "Native",
73
+ assimilation: "Native",
74
+ citrix: "Virtual",
68
75
  };
69
76
  export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web", startingWindowURL = "", startingNativePath = "", appData = defaultAppData, validateURL, removeApplicationFn = () => { }, cancelFn = () => { }, submitFn, addApp, isInboundInteropAuthorized, isOutboundInteropAuthorized, preloadAliasList = [], }) => {
70
77
  var _a, _b;
@@ -74,6 +81,8 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
74
81
  const [nativePath, setNativePath] = useState(startingNativePath);
75
82
  const [abstractPosition, setAbstractPosition] = useState(appData.abstractPosition);
76
83
  const [addToWorkspace, setAddToWorkspace] = useState(appData.addToWorkspace);
84
+ const [enableAffinity, setEnableAffinity] = useState(appData.enableAffinity);
85
+ const [alias, setAlias] = useState(appData.alias);
77
86
  const [allowAutoArrange, setAllowAutoArrange] = useState(appData.allowAutoArrange);
78
87
  const [allowGrouping, setAllowGrouping] = useState(appData.allowGrouping);
79
88
  const [allowMinimize, setAllowMinimize] = useState(appData.allowMinimize);
@@ -91,7 +100,6 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
91
100
  const [hideMaximize, setHideMaximize] = useState(appData.hideMaximize);
92
101
  const [hideMinimize, setHideMinimize] = useState(appData.hideMinimize);
93
102
  const [iconURL, setIconURL] = useState(appData.iconURL);
94
- const [intents, setIntents] = useState(appData.intents);
95
103
  const [isEvergreen, setIsEvergreen] = useState(appData.isEvergreen);
96
104
  const [launchableByUser, setLaunchableByUser] = useState(appData.launchableByUser);
97
105
  const [native_windowSpawnTimeout, setNative_windowSpawnTimeout] = useState(appData.native_windowSpawnTimeout);
@@ -104,19 +112,29 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
104
112
  const [security, setSecurity] = useState(appData.security);
105
113
  const [singleton, setSingleton] = useState(appData.singleton);
106
114
  const [spawnOnStartup, setSpawnOnStartup] = useState(appData.spawnOnStartup);
115
+ const [titlebarType, setTitlebarType] = useState(appData.titlebarType);
107
116
  const [windowHeight, setWindowHeight] = useState(appData.height || DEFAULT_WINDOW_HEIGHT);
108
117
  const [windowWidth, setWindowWidth] = useState(appData.width || DEFAULT_WINDOW_WIDTH);
109
118
  const [selectConnectTrustAll, setSelectConnectTrustAll] = useState(!Array.isArray(appData.rules) || appData.rules.filter((rule) => "authorize" in rule).length === 0);
119
+ const [intentData, setIntentData] = useState((_a = appData.intents) === null || _a === void 0 ? void 0 : _a.map((intent) => { var _a, _b; return [intent.name, intent.displayName, (_b = (_a = intent.contexts) === null || _a === void 0 ? void 0 : _a.join(", ")) !== null && _b !== void 0 ? _b : ""]; }));
110
120
  const isWindowURLValid = validateURL(windowURL);
111
121
  const isHeightValid = !(typeof windowHeight !== "number" || windowHeight < MINIMUM_WINDOW_HEIGHT);
112
122
  const isWidthValid = !(typeof windowWidth !== "number" || windowWidth < MINIMUM_WINDOW_WIDTH);
113
- const disableSubmit = (currentAppType === "web" && (!isWindowURLValid || windowURL.length === 0)) ||
114
- (currentAppType !== "web" &&
115
- (!nativePath || nativePath.length === 0 || validateFilename(VALID_APP_EXTENSIONS, nativePath))) ||
116
- displayName === undefined ||
117
- displayName === "" ||
118
- !isWidthValid ||
119
- !isHeightValid;
123
+ const isValidInput = () => {
124
+ if (!isWidthValid || !isHeightValid || displayName === undefined || displayName === "") {
125
+ return false;
126
+ }
127
+ if (currentAppType === "web") {
128
+ return isWindowURLValid && windowURL.length > 0;
129
+ }
130
+ else if (currentAppType === "Citrix") {
131
+ return true;
132
+ }
133
+ else {
134
+ return !(!nativePath || (nativePath.length === 0 && validateFilename(VALID_APP_EXTENSIONS, nativePath)));
135
+ }
136
+ };
137
+ const disableSubmit = !isValidInput();
120
138
  const clickSubmit = () => {
121
139
  if (!(typeof windowWidth === "number" && typeof windowHeight === "number")) {
122
140
  return;
@@ -132,10 +150,11 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
132
150
  description: componentDescription,
133
151
  iconURL,
134
152
  rules: selectConnectTrustAll ? [] : rules,
135
- intents,
153
+ intents: convertIntentData(intentData),
136
154
  persistPath,
137
155
  persistURL,
138
156
  addToWorkspace,
157
+ alias,
139
158
  allowAutoArrange,
140
159
  allowGrouping,
141
160
  allowMinimize,
@@ -160,6 +179,7 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
160
179
  isEvergreen,
161
180
  native_windowSpawnTimeout,
162
181
  preloads,
182
+ titlebarType,
163
183
  });
164
184
  };
165
185
  const submitOnEnter = (e) => {
@@ -200,9 +220,9 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
200
220
  React.createElement("tbody", null,
201
221
  React.createElement("tr", null,
202
222
  React.createElement("td", { className: "label-col" },
203
- React.createElement("label", null, "Application type")),
223
+ React.createElement("label", null, "App type")),
204
224
  React.createElement("td", { className: "content-col" },
205
- React.createElement("div", { className: "app-edit-type-field" }, currentAppType === "web" ? "Web" : "Native"))),
225
+ React.createElement("div", { className: "app-edit-type-field" }, appTypeDisplayNameMap[currentAppType.toLowerCase()]))),
206
226
  React.createElement("tr", null,
207
227
  React.createElement("td", null,
208
228
  React.createElement("label", { htmlFor: "app-name" }, "Name")),
@@ -210,6 +230,13 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
210
230
  React.createElement("input", { type: "text", id: "app-name", value: displayName, placeholder: "Untitled Application", onKeyDown: submitOnEnter, onChange: (e) => {
211
231
  setDisplayName(e.target.value);
212
232
  } }))),
233
+ currentAppType === "Citrix" && (React.createElement("tr", null,
234
+ React.createElement("td", null,
235
+ React.createElement("label", { htmlFor: "app-alias" }, "Virtual app name")),
236
+ React.createElement("td", null,
237
+ React.createElement("input", { type: "text", id: "app-alias", value: alias, placeholder: "Virtual application name", onKeyDown: submitOnEnter, onChange: (e) => {
238
+ setAlias(e.target.value);
239
+ } })))),
213
240
  React.createElement("tr", null,
214
241
  React.createElement("td", null,
215
242
  React.createElement("label", { htmlFor: "app-icon-url" }, "Icon URL")),
@@ -217,28 +244,29 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
217
244
  React.createElement("input", { type: "text", id: "app-icon-url", value: iconURL, onKeyDown: submitOnEnter, onChange: (e) => {
218
245
  setIconURL(e.target.value);
219
246
  } }))),
220
- currentAppType !== "web" && (React.createElement("tr", null,
247
+ currentAppType !== "web" && currentAppType !== "Citrix" && (React.createElement("tr", null,
221
248
  React.createElement("td", null,
222
- React.createElement("label", null, "API access")),
249
+ React.createElement("label", { id: "api-access-label" }, "API access")),
223
250
  React.createElement("td", null,
224
251
  React.createElement("div", { className: "app-edit-type-field" },
225
- React.createElement("div", { className: "app-type-container" },
226
- React.createElement("input", { type: "radio", name: "api-access", id: "api-access-yes", value: "native", checked: currentAppType == "native", onKeyDown: submitOnEnter, onChange: () => {
227
- setCurrentAppType("native");
228
- } }),
229
- React.createElement("label", { htmlFor: "api-access-yes" }, "Yes")),
230
- React.createElement("div", { className: "app-type-container" },
231
- React.createElement("input", { type: "radio", name: "api-access", id: "api-access-no", value: "assimilation", checked: currentAppType == "assimilation", onKeyDown: submitOnEnter, onChange: () => {
232
- setCurrentAppType("assimilation");
233
- } }),
234
- React.createElement("label", { htmlFor: "api-access-no" }, "No")))))),
235
- currentAppType === "web" ? (React.createElement("tr", null,
252
+ React.createElement("input", { type: "checkbox", name: "api-access", checked: currentAppType === "native", onKeyDown: (e) => {
253
+ if (e.key === " ") {
254
+ setCurrentAppType(currentAppType === "native" ? "assimilation" : "native");
255
+ }
256
+ else {
257
+ submitOnEnter(e);
258
+ }
259
+ }, onChange: () => {
260
+ setCurrentAppType(currentAppType === "native" ? "assimilation" : "native");
261
+ } }))))),
262
+ currentAppType === "web" && (React.createElement("tr", null,
236
263
  React.createElement("td", null,
237
264
  React.createElement("label", { htmlFor: "app-url" }, "App URL")),
238
265
  React.createElement("td", null,
239
266
  React.createElement("input", { type: "text", id: "app-url", placeholder: "https://...", value: windowURL, "aria-invalid": !isWindowURLValid, onKeyDown: submitOnEnter, onChange: (e) => {
240
267
  setWindowURL(e.target.value);
241
- } })))) : (React.createElement("tr", null,
268
+ } })))),
269
+ (currentAppType === "native" || currentAppType === "assimilation") && (React.createElement("tr", null,
242
270
  React.createElement("td", null,
243
271
  React.createElement("label", null, "File path")),
244
272
  React.createElement("td", null,
@@ -264,39 +292,33 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
264
292
  }, value: componentDescription })))))),
265
293
  React.createElement("div", { className: "app-edit-field" },
266
294
  React.createElement(Accordion, { id: "config", size: "medium", label: "Optional config settings" },
267
- React.createElement(Accordion, { id: "select-connect", label: "SelectConnect", summary: React.createElement(React.Fragment, null,
295
+ currentAppType !== "assimilation" && (React.createElement(Accordion, { id: "select-connect", label: "SelectConnect", summary: React.createElement(React.Fragment, null,
268
296
  "Specify trust relationships.",
269
297
  " ",
270
- React.createElement("a", { href: "", onClick: (e) => {
271
- e.preventDefault();
272
- openLink("https://documentation.finsemble.com/tutorial-ControllingInformationFlow.html");
273
- } }, "Learn more")) },
298
+ React.createElement(FinsembleLink, { url: "https://documentation.finsemble.com/tutorial-ControllingInformationFlow.html", text: "Learn more" })) },
274
299
  React.createElement("div", { className: "app-edit-field" },
275
300
  React.createElement("table", { role: "presentation", className: "accordion-edit-block" },
276
301
  React.createElement("tbody", null,
277
302
  React.createElement("tr", null,
278
- React.createElement("td", { rowSpan: 2, className: "label-col" }, "Interop trust rule"),
303
+ React.createElement("td", { rowSpan: 2, className: "label-col", id: "interop-label" }, "Interop trust rule"),
279
304
  React.createElement("td", { className: "content-col" },
280
305
  React.createElement("label", null,
281
- React.createElement("input", { type: "radio", name: "interop-trust", value: "true", checked: selectConnectTrustAll, onChange: () => {
306
+ React.createElement("input", { type: "radio", name: "interop-trust", "aria-labelledby": "interop-label interop-label-all", value: "true", "aria-posinset": 1, "aria-setsize": 2, checked: selectConnectTrustAll, onChange: () => {
282
307
  setSelectConnectTrustAll(true);
283
308
  } }),
284
- "Trust all apps"),
309
+ React.createElement("span", { id: "interop-label-all" }, "Trust all apps")),
285
310
  React.createElement("label", null,
286
- React.createElement("input", { type: "radio", name: "interop-trust", value: "false", checked: !selectConnectTrustAll, onChange: () => {
311
+ React.createElement("input", { type: "radio", name: "interop-trust", "aria-labelledby": "interop-label interop-label-selected", value: "false", "aria-posinset": 2, "aria-setsize": 2, checked: !selectConnectTrustAll, onChange: () => {
287
312
  setSelectConnectTrustAll(false);
288
313
  } }),
289
- "Trust selected apps"))),
314
+ React.createElement("span", { id: "interop-label-selected" }, "Trust selected apps")))),
290
315
  !selectConnectTrustAll && (React.createElement("tr", null,
291
316
  React.createElement("td", null,
292
- React.createElement(AppEditAccess, { appName: displayName, rules: (_a = appData.rules) !== null && _a !== void 0 ? _a : [], onChange: (newRules) => setRules(newRules), isInboundInteropAuthorized: isInboundInteropAuthorized, isOutboundInteropAuthorized: isOutboundInteropAuthorized, addApp: addApp })))))))),
293
- React.createElement(Accordion, { id: "preloads", label: "Preloads", summary: React.createElement(React.Fragment, null,
317
+ React.createElement(AppEditAccess, { appName: displayName, rules: (_b = appData.rules) !== null && _b !== void 0 ? _b : [], onChange: (newRules) => setRules(newRules), isInboundInteropAuthorized: isInboundInteropAuthorized, isOutboundInteropAuthorized: isOutboundInteropAuthorized, addApp: addApp }))))))))),
318
+ currentAppType === "web" && (React.createElement(Accordion, { id: "preloads", label: "Preloads", summary: React.createElement(React.Fragment, null,
294
319
  "Add functionality by running a script that is loaded into an app window before the actual content of the window is loaded.",
295
320
  " ",
296
- React.createElement("a", { href: "", onClick: (e) => {
297
- e.preventDefault();
298
- openLink("https://documentation.finsemble.com/tutorial-Preloads.html");
299
- } }, "Learn more")) },
321
+ React.createElement(FinsembleLink, { url: "https://documentation.finsemble.com/tutorial-Preloads.html", text: "Learn more" })) },
300
322
  React.createElement("div", { className: "app-edit-field" },
301
323
  React.createElement("table", { role: "presentation", className: "accordion-edit-block" },
302
324
  React.createElement("tbody", null,
@@ -304,8 +326,8 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
304
326
  React.createElement("td", null,
305
327
  React.createElement(FinsembleSelect, { options: preloadAliasList, selected: appData.preloads, updateCallback: (selectedValues) => {
306
328
  setPreloads(selectedValues);
307
- } }))))))),
308
- React.createElement(Accordion, { id: "window", label: "Window position and dimensions", summary: "Define the window properties when the app launches." },
329
+ } })))))))),
330
+ currentAppType !== "Citrix" && (React.createElement(Accordion, { id: "window", label: "Window position and dimensions", summary: "Define the window properties when the app launches." },
309
331
  React.createElement("div", { className: "app-edit-field" },
310
332
  React.createElement("table", { role: "presentation", className: "accordion-edit-block" },
311
333
  React.createElement("tbody", null,
@@ -335,12 +357,12 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
335
357
  React.createElement("td", { className: "position-entry" },
336
358
  React.createElement(DefaultDropdownButton, { allowEmpty: false, caretLocation: "right", defaultSelection: positionButtonOptions[abstractPosition], buttonOptions: positionButtonOptions })))),
337
359
  React.createElement("tr", null,
338
- React.createElement("td", null, "Opacity"),
360
+ React.createElement("td", { id: "opacity-label" }, "Opacity"),
339
361
  React.createElement("td", null,
340
- React.createElement("input", { type: "range", className: "app-edit-range", value: opacity, min: 0, step: 0.01, max: 1, onChange: (e) => {
362
+ React.createElement("input", { type: "range", className: "app-edit-range", "aria-labelledby": "opacity-label", value: opacity, min: 0, step: 0.01, max: 1, onChange: (e) => {
341
363
  setOpacity(Number(e.target.value));
342
364
  } }),
343
- React.createElement("input", { id: "app-opacity", type: "text", value: Math.floor(opacity * 100), onChange: (e) => {
365
+ React.createElement("input", { id: "app-opacity", type: "text", "aria-labelledby": "opacity-label", value: Math.floor(opacity * 100), onChange: (e) => {
344
366
  const num = +e.target.value;
345
367
  if (isNaN(num)) {
346
368
  return;
@@ -349,8 +371,8 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
349
371
  return;
350
372
  }
351
373
  setOpacity(num / 100);
352
- }, style: { maxWidth: "30px" } }))))))),
353
- React.createElement(Accordion, { id: "window-behavior", label: "Window behavior", summary: "Specify how this window will behave with respect to other windows in the workspace." },
374
+ }, style: { maxWidth: "30px" } })))))))),
375
+ currentAppType === "web" && (React.createElement(Accordion, { id: "window-behavior", label: "Window behavior", summary: "Specify how this window will behave with respect to other windows in the workspace." },
354
376
  React.createElement("div", { className: "app-edit-field" },
355
377
  React.createElement("table", { role: "presentation", className: "accordion-edit-block" },
356
378
  React.createElement("tbody", null,
@@ -383,114 +405,122 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
383
405
  React.createElement("tr", null,
384
406
  React.createElement("td", { style: { width: "120px" } }, "Title bar"),
385
407
  React.createElement("td", null,
386
- React.createElement(Checkbox, { label: "Show title bar", checked: enableTitleBar, onClick: () => {
408
+ React.createElement(Checkbox, { label: "Enable title bar", checked: enableTitleBar, onClick: () => {
387
409
  setEnableTitleBar(!enableTitleBar);
388
410
  } }))),
389
- React.createElement("tr", null,
411
+ enableTitleBar && (React.createElement("tr", null,
412
+ React.createElement("td", null),
390
413
  React.createElement("td", null,
414
+ React.createElement(Checkbox, { label: "Inject title bar into app container", checked: titlebarType === "injected", onClick: () => {
415
+ setTitlebarType(titlebarType === "injected" ? "browserview" : "injected");
416
+ } })),
417
+ React.createElement("td", null,
418
+ React.createElement(Tooltip, null, "Injected title bars share the same process as the associated app. This can make the titlebar more performant for lightweight apps, but may slow down heavier apps.")))),
419
+ React.createElement("tr", null,
420
+ React.createElement("td", { id: "aot-label" },
391
421
  React.createElement(FinsembleIcon, { icon: "alwaysOnTop" }),
392
422
  " Always on top"),
393
423
  React.createElement("td", null,
394
424
  React.createElement("label", null,
395
- React.createElement("input", { type: "radio", name: "alwaysOnTop", checked: aot && !enableAOT, onChange: () => {
425
+ React.createElement("input", { type: "radio", name: "alwaysOnTop", "aria-labelledby": "aot-label aot-label-enable", checked: aot && !enableAOT, "aria-posinset": 1, "aria-setsize": 3, onChange: () => {
396
426
  setAot(true);
397
427
  setEnableAOT(false);
398
428
  } }),
399
- "Enable"),
429
+ React.createElement("span", { id: "aot-label-enable" }, "Enable")),
400
430
  React.createElement("label", null,
401
- React.createElement("input", { type: "radio", name: "alwaysOnTop", checked: !aot && enableAOT, onChange: () => {
431
+ React.createElement("input", { type: "radio", name: "alwaysOnTop", "aria-labelledby": "aot-label aot-label-show", checked: !aot && enableAOT, "aria-posinset": 2, "aria-setsize": 3, onChange: () => {
402
432
  setAot(false);
403
433
  setEnableAOT(true);
404
434
  } }),
405
- "Show in titlebar"),
435
+ React.createElement("span", { id: "aot-label-show" }, "Show in titlebar")),
406
436
  React.createElement("label", { style: { paddingLeft: "13.53px" } },
407
- React.createElement("input", { type: "radio", name: "alwaysOnTop", checked: !aot && !enableAOT, onChange: () => {
437
+ React.createElement("input", { type: "radio", name: "alwaysOnTop", "aria-labelledby": "aot-label aot-label-disable", checked: !aot && !enableAOT, "aria-posinset": 3, "aria-setsize": 3, onChange: () => {
408
438
  setAot(false);
409
439
  setEnableAOT(false);
410
440
  } }),
411
- "Disable"))),
441
+ React.createElement("span", { id: "aot-label-disable" }, "Disable")))),
412
442
  React.createElement("tr", null,
413
- React.createElement("td", null,
443
+ React.createElement("td", { id: "minimize-label" },
414
444
  React.createElement(FinsembleIcon, { icon: "minimize" }),
415
445
  " Minimize"),
416
446
  React.createElement("td", null,
417
447
  React.createElement("label", null,
418
- React.createElement("input", { type: "radio", name: "minimize", checked: allowMinimize && !hideMinimize, onChange: () => {
448
+ React.createElement("input", { type: "radio", name: "minimize", "aria-labelledby": "minimize-label minimize-label-0", checked: allowMinimize && !hideMinimize, "aria-posinset": 1, "aria-setsize": 3, onChange: () => {
419
449
  setAllowMinimize(true);
420
450
  setHideMinimize(false);
421
451
  } }),
422
- "Enable"),
452
+ React.createElement("span", { id: "minimize-label-0" }, "Enable")),
423
453
  React.createElement("label", null,
424
- React.createElement("input", { type: "radio", name: "minimize", checked: allowMinimize && hideMinimize, onChange: () => {
454
+ React.createElement("input", { type: "radio", name: "minimize", "aria-labelledby": "minimize-label minimize-label-1", checked: allowMinimize && hideMinimize, "aria-posinset": 2, "aria-setsize": 3, onChange: () => {
425
455
  setAllowMinimize(true);
426
456
  setHideMinimize(true);
427
457
  } }),
428
- "Hide from titlebar"),
458
+ React.createElement("span", { id: "minimize-label-1" }, "Hide from titlebar")),
429
459
  React.createElement("label", null,
430
- React.createElement("input", { type: "radio", name: "minimize", checked: !allowMinimize, onChange: () => {
460
+ React.createElement("input", { type: "radio", name: "minimize", "aria-labelledby": "minimize-label minimize-label-2", checked: !allowMinimize, "aria-posinset": 3, "aria-setsize": 3, onChange: () => {
431
461
  setAllowMinimize(false);
432
462
  setHideMinimize(true);
433
463
  } }),
434
- "Disable"))),
464
+ React.createElement("span", { id: "minimize-label-2" }, "Disable")))),
435
465
  React.createElement("tr", null,
436
- React.createElement("td", null,
466
+ React.createElement("td", { id: "maximize-label" },
437
467
  React.createElement(FinsembleIcon, { icon: "maximize" }),
438
468
  " Maximize"),
439
469
  React.createElement("td", null,
440
470
  React.createElement("label", null,
441
- React.createElement("input", { type: "radio", name: "maximize", checked: allowMaximize && !hideMaximize, onChange: () => {
471
+ React.createElement("input", { type: "radio", name: "maximize", "aria-labelledby": "maximize-label maximize-label-3", checked: allowMaximize && !hideMaximize, "aria-posinset": 1, "aria-setsize": 3, onChange: () => {
442
472
  setAllowMaximize(true);
443
473
  setHideMaximize(false);
444
474
  } }),
445
- "Enable"),
475
+ React.createElement("span", { id: "maximize-label-3" }, "Enable")),
446
476
  React.createElement("label", null,
447
- React.createElement("input", { type: "radio", name: "maximize", checked: allowMaximize && hideMaximize, onChange: () => {
477
+ React.createElement("input", { type: "radio", name: "maximize", "aria-labelledby": "maximize-label maximize-label-4", checked: allowMaximize && hideMaximize, "aria-posinset": 2, "aria-setsize": 3, onChange: () => {
448
478
  setAllowMaximize(true);
449
479
  setHideMaximize(true);
450
480
  } }),
451
- "Hide from titlebar"),
481
+ React.createElement("span", { id: "maximize-label-4" }, "Hide from titlebar")),
452
482
  React.createElement("label", null,
453
- React.createElement("input", { type: "radio", name: "maximize", checked: !allowMaximize, onChange: () => {
483
+ React.createElement("input", { type: "radio", name: "maximize", "aria-labelledby": "maximize-label maximize-label-5", checked: !allowMaximize, "aria-posinset": 3, "aria-setsize": 3, onChange: () => {
454
484
  setAllowMaximize(false);
455
485
  setHideMaximize(true);
456
486
  } }),
457
- "Disable"))),
487
+ React.createElement("span", { id: "maximize-label-5" }, "Disable")))),
458
488
  React.createElement("tr", null,
459
489
  React.createElement("td", null,
460
490
  React.createElement(FinsembleIcon, { icon: "close" }),
461
491
  " Close"),
462
492
  React.createElement("td", null,
463
493
  React.createElement("label", null,
464
- React.createElement("input", { type: "radio", name: "close", checked: !hideClose, onChange: () => {
494
+ React.createElement("input", { type: "radio", name: "close", "aria-labelledby": "close-label close-label-enable", checked: !hideClose, "aria-posinset": 1, "aria-setsize": 2, onChange: () => {
465
495
  setHideClose(false);
466
496
  } }),
467
- "Enable"),
497
+ React.createElement("span", { id: "close-label-enable" }, "Enable")),
468
498
  React.createElement("label", null,
469
- React.createElement("input", { type: "radio", name: "close", checked: hideClose, onChange: () => {
499
+ React.createElement("input", { type: "radio", name: "close", "aria-labelledby": "close-label close-label-hide", checked: hideClose, "aria-posinset": 2, "aria-setsize": 2, onChange: () => {
470
500
  setHideClose(true);
471
501
  } }),
472
- "Hide from titlebar"))))))),
473
- React.createElement(Accordion, { id: "interop", label: "Interop", summary: "Define how to link an app to communication channels." },
502
+ React.createElement("span", { id: "close-label-hide" }, "Hide from titlebar"))))))))),
503
+ currentAppType !== "assimilation" && (React.createElement(Accordion, { id: "interop", label: "Interop", summary: "Define how to link an app to communication channels." },
474
504
  React.createElement("div", { className: "app-edit-field" },
475
505
  React.createElement("table", { role: "presentation", className: "accordion-edit-block" },
476
506
  React.createElement("tbody", null,
477
507
  React.createElement("tr", null,
478
508
  React.createElement("td", { className: "label-col" },
479
- React.createElement("label", { htmlFor: "interop-connection" },
509
+ React.createElement("label", { id: "linker-label" },
480
510
  React.createElement(FinsembleIcon, { icon: "linker" }),
481
511
  " Display linker")),
482
512
  React.createElement("td", { className: "content-col" },
483
513
  React.createElement("fieldset", { className: "interop-connection-fieldset" },
484
514
  React.createElement("div", { className: "app-size-field" },
485
- React.createElement("input", { className: "app-size-input", type: "radio", name: "linker", id: "interop-connection-auto", value: "auto", checked: autoConnect, onChange: () => {
515
+ React.createElement("input", { className: "app-size-input", type: "radio", name: "linker", "aria-labelledby": "linker-label linker-label-always", id: "interop-connection-auto", value: "auto", "aria-posinset": 1, "aria-setsize": 2, checked: autoConnect, onChange: () => {
486
516
  setAutoConnect(true);
487
517
  } }),
488
- React.createElement("label", { htmlFor: "interop-connection-auto" }, "Always")),
518
+ React.createElement("label", { id: "linker-label-always" }, "Always")),
489
519
  React.createElement("div", { className: "app-size-field" },
490
- React.createElement("input", { className: "app-size-input", type: "radio", name: "linker", id: "interop-connection-fdc3", value: "fdc3", checked: !autoConnect, onChange: () => {
520
+ React.createElement("input", { className: "app-size-input", type: "radio", name: "linker", "aria-labelledby": "linker-label linker-label-fdc3", id: "interop-connection-fdc3", value: "fdc3", "aria-posinset": 2, "aria-setsize": 2, checked: !autoConnect, onChange: () => {
491
521
  setAutoConnect(false);
492
522
  } }),
493
- React.createElement("label", { htmlFor: "interop-connection-fdc3" }, "On FDC3 API use")))),
523
+ React.createElement("label", { id: "linker-label-fdc3" }, "On FDC3 API use")))),
494
524
  React.createElement("td", null,
495
525
  React.createElement(Tooltip, { type: "info" }, "Show the linker menu if you want the user to manually add your app to a channel.")))))),
496
526
  React.createElement(InputTable, { tableHeaders: [
@@ -503,42 +533,24 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
503
533
  React.createElement(React.Fragment, null,
504
534
  "Contexts",
505
535
  React.createElement(Tooltip, null, "The FDC3 context to listen for.")),
506
- ], startingData: (_b = appData.intents) === null || _b === void 0 ? void 0 : _b.map((intent) => {
507
- var _a;
508
- return [
509
- intent.name,
510
- intent.displayName,
511
- (_a = intent.contexts) === null || _a === void 0 ? void 0 : _a.join(", "),
512
- ];
513
- }), onUpdate: (data) => {
514
- const newIntents = data
515
- .filter((row) => row.join("").length > 0)
516
- .map((row) => {
517
- return {
518
- name: row[0].trim(),
519
- displayName: row[1].trim(),
520
- contexts: row[2].split(",").map((str) => str.trim()),
521
- };
522
- });
523
- setIntents(newIntents);
524
- } })),
536
+ ], data: intentData, setData: setIntentData }))),
525
537
  React.createElement(Accordion, { id: "component", label: "Component behavior", summary: "Specify additional properties for the component." },
526
538
  React.createElement("div", { className: "app-edit-field" },
527
539
  React.createElement("table", { role: "presentation", className: "accordion-edit-block" },
528
540
  React.createElement("tbody", null,
529
541
  React.createElement("tr", null,
530
- React.createElement("td", { className: "label-col" }, "Set security"),
542
+ React.createElement("td", { className: "label-col", id: "security-label" }, "Set security"),
531
543
  React.createElement("td", { className: "content-col" },
532
544
  React.createElement("label", null,
533
- React.createElement("input", { type: "radio", name: "security", value: "trusted", checked: security === "trusted", onChange: () => {
545
+ React.createElement("input", { type: "radio", name: "security", "aria-labelledby": "security-label security-label-trusted", value: "trusted", "aria-posinset": 1, "aria-setsize": 2, checked: security === "trusted", onChange: () => {
534
546
  setSecurity("trusted");
535
547
  } }),
536
- "Trusted"),
548
+ React.createElement("span", { id: "security-label-trusted" }, "Trusted")),
537
549
  React.createElement("label", null,
538
- React.createElement("input", { type: "radio", name: "security", value: "untrusted", checked: security === "untrusted", onChange: () => {
550
+ React.createElement("input", { type: "radio", name: "security", "aria-labelledby": "security-label security-label-untrusted", value: "untrusted", "aria-posinset": 2, "aria-setsize": 2, checked: security === "untrusted", onChange: () => {
539
551
  setSecurity("untrusted");
540
552
  } }),
541
- "Untrusted"))),
553
+ React.createElement("span", { id: "security-label-untrusted" }, "Untrusted")))),
542
554
  currentAppType === "native" && (React.createElement("tr", null,
543
555
  React.createElement("td", null, "Launch timeout"),
544
556
  React.createElement("td", null,
@@ -550,7 +562,7 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
550
562
  setNative_windowSpawnTimeout(num);
551
563
  } })))),
552
564
  React.createElement("tr", null,
553
- React.createElement("td", { rowSpan: 5 }, "Options"),
565
+ React.createElement("td", { rowSpan: 6 }, "Options"),
554
566
  React.createElement("td", null,
555
567
  React.createElement(Checkbox, { label: "Only one instance", checked: singleton, onClick: () => {
556
568
  setSingleton(!singleton);
@@ -571,14 +583,27 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
571
583
  } })),
572
584
  React.createElement("td", null,
573
585
  React.createElement(Tooltip, { type: "info" }, "Add the component to the Apps menu on the Finsemble toolbar."))),
574
- React.createElement("tr", null,
586
+ currentAppType !== "Citrix" && (React.createElement("tr", null,
575
587
  React.createElement("td", null,
576
588
  React.createElement(Checkbox, { label: "Persist across workspaces", checked: isEvergreen, onClick: () => {
577
589
  setIsEvergreen(!isEvergreen);
578
590
  } })),
579
591
  React.createElement("td", null,
580
- React.createElement(Tooltip, { type: "info" }, "Don\u2019t shut down this app when you leave the workspace. Useful for apps that take a long time to load."))))))),
581
- React.createElement(Accordion, { id: "workspace", label: "Workspace", summary: "Define how the app relates to the workspace." },
592
+ React.createElement(Tooltip, { type: "info" }, "Don\u2019t shut down this app when you leave the workspace. Useful for apps that take a long time to load.")))),
593
+ React.createElement("tr", null,
594
+ React.createElement("td", { style: { paddingBottom: "0px" } },
595
+ React.createElement(Checkbox, { label: "Process affinity", checked: enableAffinity, onClick: () => {
596
+ setEnableAffinity(!enableAffinity);
597
+ } })),
598
+ React.createElement("td", { style: { paddingBottom: "0px" } },
599
+ React.createElement(Tooltip, { type: "info" }, "Group the render processes of your app with render processes of other windows to reduce the combined memory usage of all the grouped apps. Disable the grouping if your app requires significant CPU resources."))),
600
+ React.createElement("tr", null,
601
+ React.createElement("td", null,
602
+ "More about",
603
+ " ",
604
+ React.createElement(FinsembleLink, { text: "affinity and process management", url: "https://documentation.finsemble.com/tutorial-processManagement.html" }),
605
+ ".")))))),
606
+ currentAppType !== "Citrix" && (React.createElement(Accordion, { id: "workspace", label: "Workspace", summary: "Define how the app relates to the workspace." },
582
607
  React.createElement("div", { className: "app-edit-field" },
583
608
  React.createElement("table", { role: "presentation", className: "accordion-edit-block" },
584
609
  React.createElement("tbody", null,
@@ -592,17 +617,17 @@ export const AppEditPage = ({ startingDisplayName = "", startingAppType = "web",
592
617
  React.createElement(Tooltip, { type: "info" }, "Apps are not added to the workspace unless they were opened from the Launcher menu or the resolver. Specify whether you want this app added to the workspace if it\u2019s launched in any other way, such as by a user or another app."))),
593
618
  currentAppType === "web" ? (React.createElement("tr", null,
594
619
  React.createElement("td", { id: "persist-url" },
595
- React.createElement(Checkbox, { label: "Persist the location", checked: persistURL, onClick: () => {
620
+ React.createElement(Checkbox, { label: "Persist the URL", checked: persistURL, onClick: () => {
596
621
  setPersistURL(!persistURL);
597
622
  } })),
598
623
  React.createElement("td", null,
599
624
  React.createElement(Tooltip, { type: "info" }, "Normally, the app will be launched from its default URL. If a user navigated elsewhere, you can specify that you want to preserve that new URL instead.")))) : (React.createElement("tr", null,
600
625
  React.createElement("td", { id: "persist-path" },
601
- React.createElement(Checkbox, { label: "Persist the location", checked: persistPath, onClick: () => {
626
+ React.createElement(Checkbox, { label: "Persist the path", checked: persistPath, onClick: () => {
602
627
  setPersistPath(!persistPath);
603
628
  } })),
604
629
  React.createElement("td", null,
605
- React.createElement(Tooltip, { type: "info" }, "Normally, the app will be launched from its default path. If a user changed that path, you can specify that you want to launch the app from that new location.")))))))))),
630
+ React.createElement(Tooltip, { type: "info" }, "Normally, the app will be launched from its default path. If a user changed that path, you can specify that you want to launch the app from that new location."))))))))))),
606
631
  React.createElement("div", { className: "app-edit-actions" },
607
632
  React.createElement("div", null,
608
633
  React.createElement(Button, { fashion: "danger", text: "Remove app", onClick: (e) => {