@finsemble/finsemble-core 6.1.4 → 6.1.5

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 (107) hide show
  1. package/.mocharc.js +12 -12
  2. package/.nycrc.json +7 -7
  3. package/README.md +24 -24
  4. package/assets/fonts/LICENSE.txt +202 -202
  5. package/configs/core/config.json +214 -214
  6. package/configs/core/securityPolicies.json +24 -24
  7. package/configs/core/services.json +233 -233
  8. package/configs/schemas/README.md +1 -1
  9. package/configs/schemas/fileBasedSchemas/appdConfigFile.schema.json +5 -5
  10. package/configs/schemas/fileBasedSchemas/applicationConfigFile.schema.json +5 -5
  11. package/configs/schemas/fileBasedSchemas/componentsFile.schema.json +5 -5
  12. package/configs/schemas/fileBasedSchemas/coreConfigFile.schema.json +5 -5
  13. package/configs/schemas/fileBasedSchemas/dashbarFile.schema.json +5 -5
  14. package/configs/schemas/fileBasedSchemas/manifestFile.schema.json +5 -5
  15. package/configs/schemas/fileBasedSchemas/securityPoliciesFile.schema.json +5 -5
  16. package/configs/schemas/fileBasedSchemas/servicesFile.schema.json +5 -5
  17. package/configs/schemas/fileBasedSchemas/uiComponentsFile.schema.json +5 -5
  18. package/configs/schemas/fileBasedSchemas/workspacesFile.schema.json +5 -5
  19. package/configs/schemas/finsemble.schema.json +4006 -4006
  20. package/dist/FSBL.js +1 -1
  21. package/dist/clients/Interop/FinsembleDesktopAgent.md +154 -154
  22. package/dist/clients/Interop/tsconfig.json +7 -7
  23. package/dist/clients/Startup/README.md +28 -28
  24. package/dist/clients/dragAndDropAssets/dragAndDropScrim.css +54 -54
  25. package/dist/clients/dragAndDropAssets/ff-delete-circle.svg +10 -10
  26. package/dist/clients/dragAndDropAssets/ff-share.svg +13 -13
  27. package/dist/components/system/notification/ff-close.svg +14 -14
  28. package/dist/components/system/notification/finsemble_logo_white.svg +15 -15
  29. package/dist/components/system/notification/notification.html +155 -155
  30. package/dist/configs/core/config.json +214 -214
  31. package/dist/configs/core/securityPolicies.json +24 -24
  32. package/dist/configs/core/services.json +233 -233
  33. package/dist/configs/schemas/README.md +1 -1
  34. package/dist/configs/schemas/fileBasedSchemas/appdConfigFile.schema.json +5 -5
  35. package/dist/configs/schemas/fileBasedSchemas/applicationConfigFile.schema.json +5 -5
  36. package/dist/configs/schemas/fileBasedSchemas/componentsFile.schema.json +5 -5
  37. package/dist/configs/schemas/fileBasedSchemas/coreConfigFile.schema.json +5 -5
  38. package/dist/configs/schemas/fileBasedSchemas/dashbarFile.schema.json +5 -5
  39. package/dist/configs/schemas/fileBasedSchemas/manifestFile.schema.json +5 -5
  40. package/dist/configs/schemas/fileBasedSchemas/securityPoliciesFile.schema.json +5 -5
  41. package/dist/configs/schemas/fileBasedSchemas/servicesFile.schema.json +5 -5
  42. package/dist/configs/schemas/fileBasedSchemas/uiComponentsFile.schema.json +5 -5
  43. package/dist/configs/schemas/fileBasedSchemas/workspacesFile.schema.json +5 -5
  44. package/dist/configs/schemas/finsemble.schema.json +4006 -4006
  45. package/dist/finsemble-javascript-adapter.js +1 -1
  46. package/dist/index.js +1 -1
  47. package/dist/javascript-adapter-example-app.html +37 -37
  48. package/dist/services/Interop/DevTools.tsx +71 -71
  49. package/dist/services/Interop/Interop.html +15 -15
  50. package/dist/services/Interop/InteropService.js +1 -1
  51. package/dist/services/Interop/InteropService.md +148 -148
  52. package/dist/services/Interop/InteropServiceUI.css +12 -12
  53. package/dist/services/Interop/InteropServiceUI.js +1 -1
  54. package/dist/services/Interop/InteropServiceUI.tsx +39 -39
  55. package/dist/services/Interop/devtoolsEnhancer.tsx +63 -63
  56. package/dist/services/Interop/tsconfig.json +7 -7
  57. package/dist/services/ServiceTemplate.md +39 -39
  58. package/dist/services/assimilation/assimilation.html +18 -18
  59. package/dist/services/assimilation/assimilationService.js +1 -1
  60. package/dist/services/authentication/authentication.html +17 -17
  61. package/dist/services/authentication/authenticationService.js +1 -1
  62. package/dist/services/authentication/dialogSignOn.html +199 -199
  63. package/dist/services/config/config.html +17 -17
  64. package/dist/services/config/configService.js +1 -1
  65. package/dist/services/dataStore/dataStore.html +18 -18
  66. package/dist/services/dataStore/dataStoreService.js +1 -1
  67. package/dist/services/hotkeys/hotkeys.html +18 -18
  68. package/dist/services/hotkeys/hotkeysService.js +1 -1
  69. package/dist/services/linker/linker.html +18 -18
  70. package/dist/services/linker/linkerService.js +1 -1
  71. package/dist/services/logger/logger.html +18 -18
  72. package/dist/services/logger/loggerService.js +1 -1
  73. package/dist/services/logger/loggerUI.js +1 -1
  74. package/dist/services/logger/src/app.css +860 -860
  75. package/dist/services/logger/src/components/Views/Logs/rightPanel/consoleView.css +379 -379
  76. package/dist/services/logger/src/components/objectInspector/README.md +1 -1
  77. package/dist/services/notification/notification.html +11 -11
  78. package/dist/services/notification/notificationService.js +1 -1
  79. package/dist/services/preferences/preferencesService.js +1 -1
  80. package/dist/services/router/router.html +18 -18
  81. package/dist/services/router/routerService.js +1 -1
  82. package/dist/services/search/search.html +17 -17
  83. package/dist/services/search/searchService.js +1 -1
  84. package/dist/services/storage/adapters/instrumentedIndexedDBAdapter.js +1 -1
  85. package/dist/services/storage/storage.html +17 -17
  86. package/dist/services/storage/storageService.js +1 -1
  87. package/dist/services/systemManager/bootTasks/testTasks/_aReadMe.md +119 -119
  88. package/dist/services/systemManager/systemManager.html +24 -24
  89. package/dist/services/systemManager/systemManager.js +1 -1
  90. package/dist/services/window/Docking/GroupRequirements.md +18 -18
  91. package/dist/services/window/Splintering/SplinterAgentSlave.html +13 -13
  92. package/dist/services/window/Splintering/SplinterAgentSlave.js +1 -1
  93. package/dist/services/window/Splintering/Splintering.md +118 -118
  94. package/dist/services/window/StackedWindowManager/StackRequirements.md +23 -23
  95. package/dist/services/window/WindowBehaviorRequirements.md +25 -25
  96. package/dist/services/window/windowService.html +10 -10
  97. package/dist/services/window/windowService.js +1 -1
  98. package/dist/services/workspace/dev-docs/importExportFormat.md +51 -51
  99. package/dist/services/workspace/dev-docs/remotelyPersistedWorkspaces.md +62 -62
  100. package/dist/services/workspace/workspace.html +18 -18
  101. package/dist/services/workspace/workspace.schema.json +48 -48
  102. package/dist/services/workspace/workspaceService.js +1 -1
  103. package/package.json +1 -1
  104. package/tsconfig.json +23 -23
  105. package/types/index.d.ts +40 -55
  106. package/types/index.tsbuildinfo +1 -1
  107. package/types.tsconfig.json +15 -15
@@ -1,118 +1,118 @@
1
- # Splintering
2
-
3
- There are three ways to handle resource management with Openfin.
4
-
5
- 1. You can group everything into one "Application" with N child-windows. This was the approach we took initially.
6
- - Pros of this approach:
7
- - You don't have to worry about the startup penalty involved with starting up a new openfin application. On good
8
- machines, it's a negligible cost. On bad machines, it's noticeable.
9
- - Cons of this approach:
10
- - Everything is inside of one render process. This means that every time a window fires off a JS function, it goes
11
- on to the same event loop. If you have a badly behaving component, it can lock up your entire application. If you
12
- have a resource-intensive component or service, it can also slow down performance.
13
- - It makes debugging difficult. Using the profiler is a useless exercise, as all of the javascript for every window
14
- is included in the same profile.
15
- 2. Every component/service can be in its own openfin application.
16
- - Pros of this approach:
17
- - Badly behaving/non-performant components don't ruin your application's experience.
18
- - Debugging is easier because everything is in its own render process.
19
- - Cons of this approach:
20
- - Can be resource-intensive on bad machines.
21
- 3. A hybrid approach. Intelligent grouping of components/services into separate openfin processes.
22
- - Pros of this approach:
23
- - Windows load quicker (with caveats). Subjective performance is improved.
24
- - Gives you the ability to isolate known hogs - or sensitive, mission-critical components (e.g., the toolbar,
25
- menus).
26
- - Uses fewer resources than #2 due to grouping.
27
- - Cons of this approach:
28
- - If grouping is done wrong, you can end up with a badly behaving component locking up sensitive components.
29
-
30
- We've decided to advocate and optimize for option 3 - that's what the rest of this document will be about. See footnotes
31
- 1 and 2 if you prefer one of the other approaches.
32
-
33
- In order to splinter off processes, you first need to create separate Openfin Applications. These applications need to
34
- communicate back to the `LauncherService`, and they need to be quick enough to handle a large number of requests in a
35
- short amount of time (e.g., workspace load).
36
-
37
- Our approach involves 3 parts: the `SplinterAgentPool`, the `SplinterAgent`, and the `SplinterAgentSlave`.
38
-
39
- The `SplinterAgentPool` receives all calls to `LauncherService.spawn` and routes them to the appropriate
40
- `SplinterAgent`.
41
-
42
- If no `SplinterAgent` is available that can spawn the requested component/service, the `SplinterAgentPool` creates a new
43
- `SplinterAgent`. At the same time, it spawns off a new Openfin Application. The `SplinterAgent` manages this application
44
- as its slave (the `SplinterAgentSlave`). Once the application is ready, the `SplinterAgent` registers with the
45
- `SplinterAgentPool`, and can then begin accepting spawn requests. When the agent receives a request, it simply passes
46
- the `windowDescriptor` to its slave.
47
-
48
- The default behavior for a `SplinterAgent` is to have an unlimited capacity. If the dev-user specifies a
49
- `maxWindowsPerAgent` in their config, the behavior changes slightly.
50
-
51
- After each spawn, the `SplinterAgent` will check to see if it has reached its capacity. If so, it notifies the
52
- `SplinterAgentPool` via an event that it cannot receive any more requests. Then, the `SplinterAgentPool` will pre-spawn
53
- another `SplinterAgent` capable of handling the same requests<sup>3</sup>.
54
-
55
- When a `SplinterAgent`'s last window is closed, it will send an event to the `SplinterAgentPool` notifying it that it is
56
- empty. If it is the only Agent of its kind, it will stay available to the system. If there are others available, it will
57
- close.
58
-
59
- ### Footnotes
60
-
61
- 1. Config for a single-process:
62
-
63
- ```
64
- "finsemble":{
65
- "splinteringConfig":{
66
- "enabled": false
67
- }
68
- }
69
- ```
70
-
71
- 2. Config for a 1-1 mapping of windows to applications.
72
-
73
- ```
74
- "splinteringConfig": {
75
- "enabled": true,
76
- "splinterAgents": [
77
- {
78
- "agentLabel": "Toolbar",
79
- "components": [
80
- "Toolbar",
81
- "App Launcher",
82
- "Workspace Overflow Menu",
83
- "Workspace Management Menu",
84
- "Finsemble Linker Window",
85
- "Authentication",
86
- "dialogSignOn",
87
- "dialogTemplate",
88
- "dialogTest",
89
- "File Menu",
90
- "QuickComponentForm",
91
- "Process Monitor"
92
- ],
93
- "maxWindowsPerAgent": 1
94
- },
95
- {
96
- "agentLabel": "advancedCharts",
97
- "components": [
98
- "Advanced Chart"
99
- ],
100
- "maxWindowsPerAgent": 1
101
- },
102
- {
103
- "agentLabel": "Services",
104
- "services": [
105
- "windowService",
106
- "workspaceService"
107
- ],
108
- "maxWindowsPerAgent": 1
109
- }
110
- ]
111
- }
112
- ```
113
-
114
- 3. When an agent is spawned, it sets a timeout (default is 2 minutes). After that period if time, the Agent checks to
115
- see if it is being used. This is to prevent zombie Agents from clogging up a user's machine. It's easy to imagine
116
- this scenario: User spawns 3 advanced charts. 2nd Agent is spawned. User spawns no new charts, Agent still exists. In
117
- this case, we have an Agent who can _only_ spawn Advanced Charts just doing nothing. So we close it down. If the
118
- Agent has windows after 2 minutes, it stays up.
1
+ # Splintering
2
+
3
+ There are three ways to handle resource management with Openfin.
4
+
5
+ 1. You can group everything into one "Application" with N child-windows. This was the approach we took initially.
6
+ - Pros of this approach:
7
+ - You don't have to worry about the startup penalty involved with starting up a new openfin application. On good
8
+ machines, it's a negligible cost. On bad machines, it's noticeable.
9
+ - Cons of this approach:
10
+ - Everything is inside of one render process. This means that every time a window fires off a JS function, it goes
11
+ on to the same event loop. If you have a badly behaving component, it can lock up your entire application. If you
12
+ have a resource-intensive component or service, it can also slow down performance.
13
+ - It makes debugging difficult. Using the profiler is a useless exercise, as all of the javascript for every window
14
+ is included in the same profile.
15
+ 2. Every component/service can be in its own openfin application.
16
+ - Pros of this approach:
17
+ - Badly behaving/non-performant components don't ruin your application's experience.
18
+ - Debugging is easier because everything is in its own render process.
19
+ - Cons of this approach:
20
+ - Can be resource-intensive on bad machines.
21
+ 3. A hybrid approach. Intelligent grouping of components/services into separate openfin processes.
22
+ - Pros of this approach:
23
+ - Windows load quicker (with caveats). Subjective performance is improved.
24
+ - Gives you the ability to isolate known hogs - or sensitive, mission-critical components (e.g., the toolbar,
25
+ menus).
26
+ - Uses fewer resources than #2 due to grouping.
27
+ - Cons of this approach:
28
+ - If grouping is done wrong, you can end up with a badly behaving component locking up sensitive components.
29
+
30
+ We've decided to advocate and optimize for option 3 - that's what the rest of this document will be about. See footnotes
31
+ 1 and 2 if you prefer one of the other approaches.
32
+
33
+ In order to splinter off processes, you first need to create separate Openfin Applications. These applications need to
34
+ communicate back to the `LauncherService`, and they need to be quick enough to handle a large number of requests in a
35
+ short amount of time (e.g., workspace load).
36
+
37
+ Our approach involves 3 parts: the `SplinterAgentPool`, the `SplinterAgent`, and the `SplinterAgentSlave`.
38
+
39
+ The `SplinterAgentPool` receives all calls to `LauncherService.spawn` and routes them to the appropriate
40
+ `SplinterAgent`.
41
+
42
+ If no `SplinterAgent` is available that can spawn the requested component/service, the `SplinterAgentPool` creates a new
43
+ `SplinterAgent`. At the same time, it spawns off a new Openfin Application. The `SplinterAgent` manages this application
44
+ as its slave (the `SplinterAgentSlave`). Once the application is ready, the `SplinterAgent` registers with the
45
+ `SplinterAgentPool`, and can then begin accepting spawn requests. When the agent receives a request, it simply passes
46
+ the `windowDescriptor` to its slave.
47
+
48
+ The default behavior for a `SplinterAgent` is to have an unlimited capacity. If the dev-user specifies a
49
+ `maxWindowsPerAgent` in their config, the behavior changes slightly.
50
+
51
+ After each spawn, the `SplinterAgent` will check to see if it has reached its capacity. If so, it notifies the
52
+ `SplinterAgentPool` via an event that it cannot receive any more requests. Then, the `SplinterAgentPool` will pre-spawn
53
+ another `SplinterAgent` capable of handling the same requests<sup>3</sup>.
54
+
55
+ When a `SplinterAgent`'s last window is closed, it will send an event to the `SplinterAgentPool` notifying it that it is
56
+ empty. If it is the only Agent of its kind, it will stay available to the system. If there are others available, it will
57
+ close.
58
+
59
+ ### Footnotes
60
+
61
+ 1. Config for a single-process:
62
+
63
+ ```
64
+ "finsemble":{
65
+ "splinteringConfig":{
66
+ "enabled": false
67
+ }
68
+ }
69
+ ```
70
+
71
+ 2. Config for a 1-1 mapping of windows to applications.
72
+
73
+ ```
74
+ "splinteringConfig": {
75
+ "enabled": true,
76
+ "splinterAgents": [
77
+ {
78
+ "agentLabel": "Toolbar",
79
+ "components": [
80
+ "Toolbar",
81
+ "App Launcher",
82
+ "Workspace Overflow Menu",
83
+ "Workspace Management Menu",
84
+ "Finsemble Linker Window",
85
+ "Authentication",
86
+ "dialogSignOn",
87
+ "dialogTemplate",
88
+ "dialogTest",
89
+ "File Menu",
90
+ "QuickComponentForm",
91
+ "Process Monitor"
92
+ ],
93
+ "maxWindowsPerAgent": 1
94
+ },
95
+ {
96
+ "agentLabel": "advancedCharts",
97
+ "components": [
98
+ "Advanced Chart"
99
+ ],
100
+ "maxWindowsPerAgent": 1
101
+ },
102
+ {
103
+ "agentLabel": "Services",
104
+ "services": [
105
+ "windowService",
106
+ "workspaceService"
107
+ ],
108
+ "maxWindowsPerAgent": 1
109
+ }
110
+ ]
111
+ }
112
+ ```
113
+
114
+ 3. When an agent is spawned, it sets a timeout (default is 2 minutes). After that period if time, the Agent checks to
115
+ see if it is being used. This is to prevent zombie Agents from clogging up a user's machine. It's easy to imagine
116
+ this scenario: User spawns 3 advanced charts. 2nd Agent is spawned. User spawns no new charts, Agent still exists. In
117
+ this case, we have an Agent who can _only_ spawn Advanced Charts just doing nothing. So we close it down. If the
118
+ Agent has windows after 2 minutes, it stays up.
@@ -1,23 +1,23 @@
1
- # Stack Requirements
2
-
3
- ## Always On Top
4
-
5
- When a window joins a stack (or creates a new stack with another window), if any of the windows in the stack are
6
- alwaysOnTop, then all of the windows become alwaysOnTop.
7
-
8
- When a window leaves a stack, it should return its state prior to joining the stack.
9
-
10
- When the alwaysOnTop state of any window in a stack is toggled, every other window in the stack is also toggled.
11
-
12
- ## Auto Arrange
13
-
14
- When auto arrange is called, the "grid" of windows is compiled using the StackedWindow. The process loops through the
15
- windows on a workspace and filters out any children (as they should not be added to the grid because their StackedWindow
16
- will be auto arranged instead).
17
-
18
- This means that if a stack is created _after_ auto arrange takes place on a monitor. The DockingCalculator's
19
- representation of cached locations needs to be updated. The child is removed from the cache, and the stacked window is
20
- put in its place. If a stack is destroyed while auto arrange status is true, the same takes place in reverse. The
21
- StackedWindow in the cache is replaced with the remaining window of the stack.
22
-
23
- Tabbing/Untabbing windows is the only stack action that does not destroy auto arrange status.
1
+ # Stack Requirements
2
+
3
+ ## Always On Top
4
+
5
+ When a window joins a stack (or creates a new stack with another window), if any of the windows in the stack are
6
+ alwaysOnTop, then all of the windows become alwaysOnTop.
7
+
8
+ When a window leaves a stack, it should return its state prior to joining the stack.
9
+
10
+ When the alwaysOnTop state of any window in a stack is toggled, every other window in the stack is also toggled.
11
+
12
+ ## Auto Arrange
13
+
14
+ When auto arrange is called, the "grid" of windows is compiled using the StackedWindow. The process loops through the
15
+ windows on a workspace and filters out any children (as they should not be added to the grid because their StackedWindow
16
+ will be auto arranged instead).
17
+
18
+ This means that if a stack is created _after_ auto arrange takes place on a monitor. The DockingCalculator's
19
+ representation of cached locations needs to be updated. The child is removed from the cache, and the stacked window is
20
+ put in its place. If a stack is destroyed while auto arrange status is true, the same takes place in reverse. The
21
+ StackedWindow in the cache is replaced with the remaining window of the stack.
22
+
23
+ Tabbing/Untabbing windows is the only stack action that does not destroy auto arrange status.
@@ -1,25 +1,25 @@
1
- # Window Behavior Requirements
2
-
3
- ## Always On Top
4
-
5
- A window can be always on top of other windows by setting the alwaysOnTop option in the componentConfig for the window.
6
- The user can be given the ability to toggle the always on top state by enabling finsemble.WindowManager.alwaysOnTopIcon
7
- globally or on a per component basis using component.foreign.components.WindowManager.alwaysOnTopIcon in the component
8
- config.
9
-
10
- [Group Always On Top](Docking/GroupRequirements.md)
11
-
12
- [Stack Always On Top](StackedWindowManager/StackRequirements.md)
13
-
14
- ## Auto arrange
15
-
16
- Windows can be auto arranged in grids. All windows, regardless of type, should be auto arranged alongside all other
17
- windows. This includes Native, WPF (native), and HTML5 windows. Auto arrange status should be preserved across multiple
18
- monitors (until Finsemble shuts down or restarts). This includes the ability to move any UI components that trigger auto
19
- arrange across monitors and get feedback on that monitors auto arranged status. Any kind of window interaction on an
20
- auto arranged monitor will cancel the auto arrange status and remove any chance of 'restoring' to a previous state.
21
- Exceptions to this are below.
22
-
23
- [Group Auto Arrange](Docking/GroupRequirements.md)
24
-
25
- [StackedWindow Auto Arrange](StackedWindowManager/StackRequirements.md)
1
+ # Window Behavior Requirements
2
+
3
+ ## Always On Top
4
+
5
+ A window can be always on top of other windows by setting the alwaysOnTop option in the componentConfig for the window.
6
+ The user can be given the ability to toggle the always on top state by enabling finsemble.WindowManager.alwaysOnTopIcon
7
+ globally or on a per component basis using component.foreign.components.WindowManager.alwaysOnTopIcon in the component
8
+ config.
9
+
10
+ [Group Always On Top](Docking/GroupRequirements.md)
11
+
12
+ [Stack Always On Top](StackedWindowManager/StackRequirements.md)
13
+
14
+ ## Auto arrange
15
+
16
+ Windows can be auto arranged in grids. All windows, regardless of type, should be auto arranged alongside all other
17
+ windows. This includes Native, WPF (native), and HTML5 windows. Auto arrange status should be preserved across multiple
18
+ monitors (until Finsemble shuts down or restarts). This includes the ability to move any UI components that trigger auto
19
+ arrange across monitors and get feedback on that monitors auto arranged status. Any kind of window interaction on an
20
+ auto arranged monitor will cancel the auto arrange status and remove any chance of 'restoring' to a previous state.
21
+ Exceptions to this are below.
22
+
23
+ [Group Auto Arrange](Docking/GroupRequirements.md)
24
+
25
+ [StackedWindow Auto Arrange](StackedWindowManager/StackRequirements.md)
@@ -1,10 +1,10 @@
1
- <html>
2
- <head>
3
- <meta charset="utf-8" />
4
- <title>Window Service</title>
5
- </head>
6
-
7
- <body>
8
- <script src="windowService.js"></script>
9
- </body>
10
- </html>
1
+ <html>
2
+ <head>
3
+ <meta charset="utf-8" />
4
+ <title>Window Service</title>
5
+ </head>
6
+
7
+ <body>
8
+ <script src="windowService.js"></script>
9
+ </body>
10
+ </html>