fcr-ui-scene 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/installer/icons/favicon.ico +0 -0
  2. package/installer/icons/favicon.png +0 -0
  3. package/installer/mac/entitlements.mac.plist +16 -0
  4. package/lib/common/device-store.d.ts +1 -1
  5. package/lib/common/device-store.js +11 -3
  6. package/lib/common/event-store.d.ts +17 -1
  7. package/lib/common/event-store.js +38 -5
  8. package/lib/common/security-store.d.ts +14 -4
  9. package/lib/common/security-store.js +149 -30
  10. package/lib/electron/bootstrap-dev.d.ts +1 -0
  11. package/lib/electron/bootstrap-dev.js +51 -0
  12. package/lib/electron/bootstrap-sdk.d.ts +1 -0
  13. package/lib/electron/bootstrap-sdk.js +56 -0
  14. package/lib/electron/bootstrap.d.ts +1 -0
  15. package/lib/electron/bootstrap.js +56 -0
  16. package/lib/electron/default-options.js +1 -1
  17. package/lib/electron/dev.d.ts +1 -0
  18. package/lib/electron/dev.js +51 -0
  19. package/lib/electron/injections.d.ts +1 -1
  20. package/lib/electron/injections.js +3 -6
  21. package/lib/electron/main.js +4 -16
  22. package/lib/electron/plugins/meeting-state.d.ts +2 -0
  23. package/lib/electron/plugins/meeting-state.js +39 -0
  24. package/lib/electron/preload.js +1 -1
  25. package/lib/fragments/control-bar/control-bar-store.d.ts +34 -1
  26. package/lib/fragments/control-bar/control-bar-store.js +371 -79
  27. package/lib/fragments/control-bar/device/index.js +5 -3
  28. package/lib/fragments/control-bar/index.css +15 -10
  29. package/lib/fragments/control-bar/index.js +18 -0
  30. package/lib/fragments/control-bar/meeting-details/meeting-detail.css +109 -0
  31. package/lib/fragments/control-bar/meeting-details/meeting-details-portal.d.ts +3 -0
  32. package/lib/fragments/control-bar/meeting-details/meeting-details-portal.js +60 -0
  33. package/lib/fragments/control-bar/meeting-details/meeting-details.d.ts +2 -0
  34. package/lib/fragments/control-bar/meeting-details/meeting-details.js +179 -0
  35. package/lib/fragments/control-bar/more-actions/index.css +53 -0
  36. package/lib/fragments/control-bar/more-actions/index.js +72 -37
  37. package/lib/fragments/control-bar/security-content/index.css +10 -0
  38. package/lib/fragments/control-bar/security-content/index.js +40 -18
  39. package/lib/fragments/control-bar/view.js +8 -2
  40. package/lib/login-confirm-dialog.d.ts +12 -0
  41. package/lib/login-confirm-dialog.js +80 -0
  42. package/lib/modules/action-bar/action-bar-collapes-items.js +5 -5
  43. package/lib/modules/action-bar/chat/index.js +5 -5
  44. package/lib/modules/action-bar/device/index.css +7 -2
  45. package/lib/modules/action-bar/device/index.js +4 -4
  46. package/lib/modules/action-bar/index.css +59 -12
  47. package/lib/modules/action-bar/index.d.ts +3 -2
  48. package/lib/modules/action-bar/index.dev.js +1 -1
  49. package/lib/modules/action-bar/index.js +21 -0
  50. package/lib/modules/action-bar/leave/assign-host.d.ts +3 -0
  51. package/lib/modules/action-bar/leave/assign-host.js +2 -4
  52. package/lib/modules/action-bar/leave/index.js +29 -6
  53. package/lib/modules/action-bar/leave/leave-meeting.d.ts +11 -0
  54. package/lib/modules/action-bar/leave/leave-meeting.js +25 -16
  55. package/lib/modules/action-bar/more/poppover-content.js +4 -4
  56. package/lib/modules/action-bar/participants/index.css +12 -0
  57. package/lib/modules/action-bar/participants/index.js +21 -14
  58. package/lib/modules/action-bar/screen-share/index.js +5 -1
  59. package/lib/modules/action-bar/screen-share/submenu.js +16 -22
  60. package/lib/modules/action-bar/security/drop-menu.js +90 -13
  61. package/lib/modules/action-bar/store.d.ts +38 -6
  62. package/lib/modules/action-bar/store.js +487 -95
  63. package/lib/modules/action-bar/view.js +65 -42
  64. package/lib/modules/chat/chat-bar/index.js +39 -27
  65. package/lib/modules/chat/chat-select/index.css +14 -4
  66. package/lib/modules/chat/chat.d.ts +1 -2
  67. package/lib/modules/chat/chat.js +184 -105
  68. package/lib/modules/chat/index.css +49 -0
  69. package/lib/modules/chat/index.d.ts +2 -2
  70. package/lib/modules/chat/index.dev.js +1 -1
  71. package/lib/modules/chat/index.js +13 -8
  72. package/lib/modules/chat/message-list.js +59 -48
  73. package/lib/modules/chat/store.d.ts +48 -2
  74. package/lib/modules/chat/store.js +258 -45
  75. package/lib/modules/connection-gateway/index.d.ts +2 -1
  76. package/lib/modules/connection-gateway/store.d.ts +6 -3
  77. package/lib/modules/connection-gateway/store.js +5 -1
  78. package/lib/modules/device-pretest/audio-preview/speaker-control.js +1 -1
  79. package/lib/modules/device-pretest/index.css +0 -4
  80. package/lib/modules/device-pretest/settings/beauty.js +17 -6
  81. package/lib/modules/device-pretest/store.js +7 -11
  82. package/lib/modules/dialog/components/chat/electron.js +2 -1
  83. package/lib/modules/dialog/components/confirm/electron.js +5 -3
  84. package/lib/modules/dialog/components/connection-gateway/electron.js +3 -1
  85. package/lib/modules/dialog/components/connection-gateway/index.css +0 -2
  86. package/lib/modules/dialog/components/device-setting/electron.js +3 -1
  87. package/lib/modules/dialog/components/device-setting/index.css +0 -1
  88. package/lib/modules/dialog/components/operation-waiting-room/electron.d.ts +5 -0
  89. package/lib/modules/dialog/components/operation-waiting-room/electron.js +89 -0
  90. package/lib/modules/dialog/components/operation-waiting-room/index.css +44 -0
  91. package/lib/modules/dialog/components/operation-waiting-room/index.d.ts +5 -0
  92. package/lib/modules/dialog/components/operation-waiting-room/index.js +156 -0
  93. package/lib/modules/dialog/components/participant/electron.js +2 -1
  94. package/lib/modules/dialog/components/remove-admit-waiting-room/electron.d.ts +5 -0
  95. package/lib/modules/dialog/components/remove-admit-waiting-room/electron.js +89 -0
  96. package/lib/modules/dialog/components/remove-admit-waiting-room/index.css +50 -0
  97. package/lib/modules/dialog/components/remove-admit-waiting-room/index.d.ts +5 -0
  98. package/lib/modules/dialog/components/remove-admit-waiting-room/index.js +90 -0
  99. package/lib/modules/dialog/components/whiteboard/index.js +2 -1
  100. package/lib/modules/dialog/dialogs.js +17 -13
  101. package/lib/modules/dialog/index.css +2 -0
  102. package/lib/modules/dialog/store.d.ts +4 -0
  103. package/lib/modules/dialog/store.js +16 -2
  104. package/lib/modules/event-notification/context.d.ts +2 -0
  105. package/lib/modules/event-notification/context.js +9 -0
  106. package/lib/modules/event-notification/index.css +58 -0
  107. package/lib/modules/event-notification/index.d.ts +13 -0
  108. package/lib/modules/event-notification/index.js +48 -0
  109. package/lib/modules/event-notification/store.d.ts +17 -0
  110. package/lib/modules/event-notification/store.js +133 -0
  111. package/lib/modules/event-notification/view.d.ts +5 -0
  112. package/lib/modules/event-notification/view.js +114 -0
  113. package/lib/modules/invite/index.css +4 -4
  114. package/lib/modules/invite/pstn-invite.js +1 -0
  115. package/lib/modules/layout/components/Gallery.js +7 -1
  116. package/lib/modules/layout/components/Layout.js +82 -57
  117. package/lib/modules/layout/components/index.css +33 -6
  118. package/lib/modules/layout/index.css +30 -0
  119. package/lib/modules/layout/member-window/index.js +9 -3
  120. package/lib/modules/layout/store.d.ts +19 -2
  121. package/lib/modules/layout/store.js +177 -70
  122. package/lib/modules/layout/video-window-datasource.d.ts +1 -1
  123. package/lib/modules/layout/video-window-datasource.js +1 -1
  124. package/lib/modules/live-streaming/index.dev.js +1 -1
  125. package/lib/modules/participant/attendee/index.d.ts +12 -3
  126. package/lib/modules/participant/attendee/index.js +132 -30
  127. package/lib/modules/participant/index.css +20 -0
  128. package/lib/modules/participant/index.d.ts +5 -2
  129. package/lib/modules/participant/index.dev.js +1 -1
  130. package/lib/modules/participant/index.js +27 -0
  131. package/lib/modules/participant/room-control-drop-menu/index.css +37 -0
  132. package/lib/modules/participant/store.d.ts +30 -5
  133. package/lib/modules/participant/store.js +347 -74
  134. package/lib/modules/participant/view.js +133 -34
  135. package/lib/modules/setting/index.css +1 -5
  136. package/lib/modules/setting/index.dev.js +1 -1
  137. package/lib/modules/setting/store.d.ts +2 -2
  138. package/lib/modules/setting/store.js +3 -8
  139. package/lib/modules/setting/translate-settings/translate-settings.js +1 -1
  140. package/lib/modules/setting/video-settings/index.css +9 -6
  141. package/lib/modules/share-screen/index.d.ts +2 -0
  142. package/lib/modules/share-screen/index.dev.js +3 -2
  143. package/lib/modules/share-screen/selection/index.css +2 -0
  144. package/lib/modules/share-screen/store.d.ts +6 -3
  145. package/lib/modules/share-screen/store.js +170 -129
  146. package/lib/modules/state-bar/index.css +2 -2
  147. package/lib/modules/state-bar/index.d.ts +2 -2
  148. package/lib/modules/state-bar/index.dev.js +1 -1
  149. package/lib/modules/state-bar/meeting-detail.css +6 -4
  150. package/lib/modules/state-bar/meeting-details.js +29 -3
  151. package/lib/modules/state-bar/meeting-network-state.css +14 -3
  152. package/lib/modules/state-bar/meeting-network-state.js +10 -4
  153. package/lib/modules/state-bar/recording.js +3 -5
  154. package/lib/modules/state-bar/store.d.ts +4 -2
  155. package/lib/modules/state-bar/store.js +18 -3
  156. package/lib/modules/state-bar/view.js +1 -6
  157. package/lib/modules/video-window/index.css +1 -0
  158. package/lib/modules/video-window/store.d.ts +2 -2
  159. package/lib/modules/video-window/store.js +14 -11
  160. package/lib/modules/waiting-room-layout/context.d.ts +2 -0
  161. package/lib/modules/waiting-room-layout/context.js +9 -0
  162. package/lib/modules/waiting-room-layout/index.css +71 -0
  163. package/lib/modules/waiting-room-layout/index.d.ts +8 -0
  164. package/lib/modules/waiting-room-layout/index.js +47 -0
  165. package/lib/modules/waiting-room-layout/store.d.ts +30 -0
  166. package/lib/modules/waiting-room-layout/store.js +189 -0
  167. package/lib/modules/waiting-room-layout/type.d.ts +0 -0
  168. package/lib/modules/waiting-room-layout/type.js +1 -0
  169. package/lib/modules/waiting-room-layout/view.d.ts +3 -0
  170. package/lib/modules/waiting-room-layout/view.js +67 -0
  171. package/lib/modules/whiteboard/app.js +0 -6
  172. package/lib/modules/whiteboard/components/control-bar/index.css +3 -0
  173. package/lib/modules/whiteboard/components/multi-window/index.js +6 -1
  174. package/lib/modules/whiteboard/components/progress/electron.js +2 -1
  175. package/lib/modules/whiteboard/components/switch-theme/index.css +4 -0
  176. package/lib/modules/whiteboard/components/switch-theme/index.d.ts +2 -1
  177. package/lib/modules/whiteboard/components/switch-theme/index.js +20 -15
  178. package/lib/modules/whiteboard/components/switch-theme/item.d.ts +1 -0
  179. package/lib/modules/whiteboard/components/switch-theme/item.js +9 -2
  180. package/lib/modules/whiteboard/components/toolbar/components/shape-picker.js +14 -10
  181. package/lib/modules/whiteboard/components/toolbar/store.d.ts +1 -0
  182. package/lib/modules/whiteboard/components/toolbar/store.js +3 -0
  183. package/lib/modules/whiteboard/context.d.ts +4 -0
  184. package/lib/modules/whiteboard/context.js +4 -2
  185. package/lib/modules/whiteboard/index.js +22 -6
  186. package/lib/plugins/browser-runtime-plugin.js +1 -1
  187. package/lib/plugins/module-dev-plugin.js +8 -6
  188. package/lib/runtime.d.ts +1 -1
  189. package/lib/translations/enUS.d.ts +449 -6
  190. package/lib/translations/enUS.js +485 -32
  191. package/lib/translations/zhCN.d.ts +447 -6
  192. package/lib/translations/zhCN.js +468 -17
  193. package/lib/type.d.ts +6 -2
  194. package/lib/ui-manager.d.ts +7 -3
  195. package/lib/ui-manager.js +576 -139
  196. package/lib/ui-scene.d.ts +1 -0
  197. package/lib/ui-scene.js +26 -21
  198. package/lib/utilities/constant.d.ts +43 -4
  199. package/lib/utilities/constant.js +41 -1
  200. package/lib/utilities/parameters.js +2 -2
  201. package/lib/utilities/renderer.d.ts +1 -0
  202. package/lib/utilities/renderer.js +6 -2
  203. package/package.json +14 -14
  204. package/public/assets/fcr_defaultpage.png +0 -0
  205. package/public/assets/login_confirm.png +0 -0
  206. package/public/index.html +29 -11
  207. package/dist/132.js +0 -2
  208. package/dist/132.js.LICENSE.txt +0 -311
  209. package/dist/651.js +0 -2
  210. package/dist/651.js.LICENSE.txt +0 -1
  211. package/dist/73.js +0 -1
  212. package/dist/index.html +0 -13
  213. package/dist/main.da7c203ab32d15742cfe.css +0 -11760
  214. package/dist/main.js +0 -2
  215. package/dist/main.js.LICENSE.txt +0 -254
  216. package/dist/worker-entry.worker.js.LICENSE.txt +0 -13
  217. package/lib/modules/device-pretest/settings/index.css +0 -15
  218. package/lib/modules/participant/attendee/participants-more-action.d.ts +0 -18
  219. package/lib/modules/participant/attendee/participants-more-action.js +0 -278
package/lib/ui-scene.d.ts CHANGED
@@ -10,4 +10,5 @@ export declare class FcrUIDefaultScene {
10
10
  removeObserver(observer: FcrUISceneObserver): void;
11
11
  launch(): Promise<void>;
12
12
  private _release;
13
+ private _handleBeforeUnload;
13
14
  }
package/lib/ui-scene.js CHANGED
@@ -32,6 +32,7 @@ var _i18n = require("agora-ui-foundation/lib/i18n");
32
32
  var _uiManager = require("./ui-manager");
33
33
  var _tools = require("./utilities/tools");
34
34
  var _defaultConfig = require("./utilities/default-config");
35
+ var _renderer = require("./utilities/renderer");
35
36
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
36
37
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
37
38
  var FcrUIDefaultScene = exports.FcrUIDefaultScene = /*#__PURE__*/function () {
@@ -42,19 +43,28 @@ var FcrUIDefaultScene = exports.FcrUIDefaultScene = /*#__PURE__*/function () {
42
43
  //@internal
43
44
  // @internal
44
45
  (0, _defineProperty2["default"])(this, "_observable", new _observable.AgoraObservable());
46
+ (0, _defineProperty2["default"])(this, "_handleBeforeUnload", function () {
47
+ (0, _renderer.setInMeetingState)(0);
48
+ (0, _renderer.releaseSubAllWindowRefs)();
49
+ });
45
50
  this._config = _config;
46
51
  this._creatorConfig = _creatorConfig;
47
52
  this._dom = _dom;
48
53
  this._observable.addObserver({
54
+ onLaunchSuccess: function onLaunchSuccess() {
55
+ (0, _renderer.setInMeetingState)(1);
56
+ },
49
57
  onLaunchFailure: function onLaunchFailure() {
50
58
  _this._release();
51
59
  },
52
- onExited: function onExited() {
60
+ onExited: function onExited(roomId, reason, roomControl) {
61
+ _this._roomControl = roomControl;
53
62
  _this._release();
54
63
  }
55
64
  });
56
65
  var language = (0, _i18n.getLanguage)();
57
66
  (0, _tools.setLanguage)(language);
67
+ window.addEventListener('beforeunload', this._handleBeforeUnload);
58
68
  }
59
69
  return (0, _createClass2["default"])(FcrUIDefaultScene, [{
60
70
  key: "exit",
@@ -75,7 +85,7 @@ var FcrUIDefaultScene = exports.FcrUIDefaultScene = /*#__PURE__*/function () {
75
85
  key: "launch",
76
86
  value: function () {
77
87
  var _launch = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
78
- var config, engine, room, uiManager;
88
+ var config, engine, uiManager;
79
89
  return _regenerator["default"].wrap(function _callee$(_context) {
80
90
  while (1) switch (_context.prev = _context.next) {
81
91
  case 0:
@@ -99,30 +109,14 @@ var FcrUIDefaultScene = exports.FcrUIDefaultScene = /*#__PURE__*/function () {
99
109
  if (config.parameters) {
100
110
  engine.setParameters(config.parameters);
101
111
  }
102
- _context.prev = 5;
103
- _context.next = 8;
104
- return engine.login();
105
- case 8:
106
- _context.next = 14;
107
- break;
108
- case 10:
109
- _context.prev = 10;
110
- _context.t0 = _context["catch"](5);
111
- this._observable.notifyObservers('onLaunchFailure', this._config.roomId, _context.t0);
112
- return _context.abrupt("return");
113
- case 14:
114
- room = engine.createRoomControl(config.roomId);
115
- this._roomControl = room;
116
- // @ts-ignore
117
- window.__room_control = room;
118
- uiManager = new _uiManager.DefaultSceneUIManager(this._config, config, engine, room, this._observable);
112
+ uiManager = new _uiManager.DefaultSceneUIManager(this._config, config, engine, this._observable);
119
113
  this._uiManager = uiManager;
120
114
  uiManager.render(this._dom);
121
- case 20:
115
+ case 8:
122
116
  case "end":
123
117
  return _context.stop();
124
118
  }
125
- }, _callee, this, [[5, 10]]);
119
+ }, _callee, this);
126
120
  }));
127
121
  function launch() {
128
122
  return _launch.apply(this, arguments);
@@ -134,7 +128,15 @@ var FcrUIDefaultScene = exports.FcrUIDefaultScene = /*#__PURE__*/function () {
134
128
  value: function _release() {
135
129
  var _this$_uiManager, _this$_engine, _this$_engine2;
136
130
  if (this._roomControl) {
131
+ var _this$_roomControl$ge;
137
132
  this._roomControl.leave();
133
+ if (((_this$_roomControl$ge = this._roomControl.getRoomInfo()) === null || _this$_roomControl$ge === void 0 ? void 0 : _this$_roomControl$ge.roomType) === 11) {
134
+ // @ts-ignore
135
+ window.__mainRoom_control = null;
136
+ } else {
137
+ // @ts-ignore
138
+ window.__waitingRoom_control = null;
139
+ }
138
140
  this._roomControl = undefined;
139
141
  }
140
142
  (_this$_uiManager = this._uiManager) === null || _this$_uiManager === void 0 || _this$_uiManager.destroy();
@@ -142,6 +144,9 @@ var FcrUIDefaultScene = exports.FcrUIDefaultScene = /*#__PURE__*/function () {
142
144
  (_this$_engine2 = this._engine) === null || _this$_engine2 === void 0 || _this$_engine2.release();
143
145
  this._uiManager = undefined;
144
146
  this._engine = undefined;
147
+ (0, _renderer.setInMeetingState)(0);
148
+ (0, _renderer.releaseSubAllWindowRefs)();
149
+ window.removeEventListener('beforeunload', this._handleBeforeUnload);
145
150
  }
146
151
  }]);
147
152
  }();
@@ -66,12 +66,14 @@ export declare enum RendererEventAction {
66
66
  MAIN_SET_ALLOW_UNMUTE_SELF_VIDEO = "MAIN_SET_ALLOW_UNMUTE_SELF_VIDEO",
67
67
  MAIN_SET_ALLOW_UNMUTE_SELF_AUDIO = "MAIN_SET_ALLOW_UNMUTE_SELF_AUDIO",
68
68
  MAIN_SET_ALLOW_CLOUD_RECORDING_START = "MAIN_SET_ALLOW_CLOUD_RECORDING_START",
69
+ MAIN_SET_ALLOW_BOARD_WRITE = "MAIN_SET_ALLOW_BOARD_WRITE",
69
70
  FRAGMENT_SET_LOCK_ROOM = "FRAGMENT_SET_LOCK_ROOM",
70
71
  FRAGMENT_SET_ENABLE_WAITING_ROOM = "FRAGMENT_SET_ENABLE_WAITING_ROOM",
71
72
  FRAGMENT_SET_ALLOW_CHANGE_SELF_NAME = "FRAGMENT_SET_ALLOW_CHANGE_SELF_NAME",
72
73
  FRAGMENT_SET_ALLOW_CHAT = "FRAGMENT_SET_ALLOW_CHAT",
73
74
  FRAGMENT_SET_ALLOW_JOIN_WITH_MUTE_AUDIO = "FRAGMENT_SET_ALLOW_JOIN_WITH_MUTE_AUDIO",
74
75
  FRAGMENT_SET_ALLOW_SHARE_SCREEN = "FRAGMENT_SET_ALLOW_SHARE_SCREEN",
76
+ FRAGMENT_SET_ALLOW_BOARD_WRITE = "FRAGMENT_SET_ALLOW_BOARD_WRITE",
75
77
  FRAGMENT_SET_ALLOW_UNMUTE_SELF_VIDEO = "FRAGMENT_SET_ALLOW_UNMUTE_SELF_VIDEO",
76
78
  FRAGMENT_SET_ALLOW_UNMUTE_SELF_AUDIO = "FRAGMENT_SET_ALLOW_UNMUTE_SELF_AUDIO",
77
79
  START_SCREEN_SHARE_PERMISSION = "START_SCREEN_SHARE_PERMISSION",
@@ -132,7 +134,16 @@ export declare enum RendererEventAction {
132
134
  * Window is shown by invoking window.show()
133
135
  */
134
136
  CALL_SHOW = "CALL_SHOW",
135
- SET_SHARE_WITH_AUDIO_CONTROL_BAR = "SET_SHARE_WITH_AUDIO_CONTROL_BAR"
137
+ SET_SHARE_WITH_AUDIO_CONTROL_BAR = "SET_SHARE_WITH_AUDIO_CONTROL_BAR",
138
+ SET_REMOTE_USERS = "SET_REMOTE_USERS",
139
+ SET_HAS_ASSIGN_HOST_BEFORE_LEAVING_PERMISSION = "SET_HAS_ASSIGN_HOST_BEFORE_LEAVING_PERMISSION",
140
+ SET_IS_PSTN_USER = "SET_IS_PSTN_USER",
141
+ SET_IS_LOCKED = "SET_IS_LOCKED",
142
+ SET_HAS_END_ROOM_PERMISSION = "SET_HAS_END_ROOM_PERMISSION",
143
+ KEEP_PHONE_AUDIO_CONNECTION = "KEEP_PHONE_AUDIO_CONNECTION",
144
+ REISSUE_CONTROLBAR_INFO = "REISSUE_CONTROLBAR_INFO",
145
+ ASSIGN_HOST = "ASSIGN_HOST",
146
+ CALL_CLOSE_MAIN_WINDOW = "CALL_CLOSE_MAIN_WINDOW"
136
147
  }
137
148
  export declare enum ParticipantType {
138
149
  MUTE_AUDIO = "MUTE_AUDIO",
@@ -151,7 +162,8 @@ export declare enum ParticipantType {
151
162
  PUT_IN_WAITING_ROOM = "PUT_IN_WAITING_ROOM",
152
163
  STOP_RAISE_HAND = "STOP_RAISE_HAND",
153
164
  SET_MAIN_SPEAKER = "SET_MAIN_SPEAKER",
154
- MERGE_VIDEO = "MERGE_VIDEO"
165
+ MERGE_VIDEO = "MERGE_VIDEO",
166
+ REMOVE_WAITING_ROOM = "REMOVE_WAITING_ROOM"
155
167
  }
156
168
  export declare enum VideoWindowPinType {
157
169
  REMOVE_PIN = "REMOVE_PIN",
@@ -218,7 +230,26 @@ export declare enum UIAction {
218
230
  CAROUSEL_COLLAPSED = 44,
219
231
  STOP_SCREEN_CAPTURE = 45,
220
232
  ENGINE_RECONNECTED = 46,
221
- SET_CURRENT_SHARE_SCREEN = 47
233
+ SET_CURRENT_SHARE_SCREEN = 47,
234
+ WAITING_ROOM_CREATED = 48,
235
+ TOGGLE_PARTICIPANT_TAB = 49,
236
+ CURRENT_PARTITIPANT_TAB = 50,
237
+ RECEIVE_NEW_CHAT_MESSAGES_FOR_RED = 51,
238
+ CHAT_ROOM_CLOSED = 52,
239
+ CHAT_ROOM_TAB_CHANGE = 53,
240
+ CHAT_VISIBLE = 54,
241
+ WAITING_ROOM_DESTROYED = 55,
242
+ MOVE_TO_MAIN_ROOM_ALL_MEMBER = 56,
243
+ CLOSE_WAITING_ROOM_DIALOG = 57,
244
+ SET_REMOTE_USERS = 58,
245
+ SET_HAS_ASSIGN_HOST_BEFORE_LEAVING_PERMISSION = 59,
246
+ SET_IS_PSTN_USER = 60,
247
+ SET_HAS_END_ROOM_PERMISSION = 61,
248
+ WATERMARK_INFO_UPDATE = 62,
249
+ CHANGE_PARTICIPANT_TAB = 63,
250
+ SHOW_NOTIFICATION = 64,
251
+ COLSE_NOTIFICATION = 65,
252
+ CLOSE_REMOVE_ADMIT_WAITING_ROOM_DIALOG = 66
222
253
  }
223
254
  export declare enum DialogKey {
224
255
  DEVICE_SETTINGS = "device-settings",
@@ -233,7 +264,11 @@ export declare enum DialogKey {
233
264
  INVITE = "invite",
234
265
  TOOLBAR = "toolbar",
235
266
  WHITEBOARD = "whiteboard",
236
- PROGRESS_DIALOG = "progress-dialog"
267
+ PROGRESS_DIALOG = "progress-dialog",
268
+ WAITING_ROOM = "waiting-room",
269
+ WAITING_ROOM_SINGLE_REMOVE = "waiting-room-single-remove",
270
+ WAITING_ROOM_ALL_REMOVE = "waiting-room-all-remove",
271
+ WAITING_ROOM_ALL_ADMIT = "waiting-room-all-admit"
237
272
  }
238
273
  export declare enum HighlightElement {
239
274
  VIDEO_BASIC = "fcr_VIDEO_BASIC_highlighter",
@@ -249,3 +284,7 @@ export declare enum HighlightElement {
249
284
  TRANSLATE_TARGET = "fcr_TRANSLATE_TARGET_highlighter",
250
285
  TRANSLATE_INTERPRETER = "fcr_TRANSLATE_INTERPRETER_highlighter"
251
286
  }
287
+ export declare enum RoomType {
288
+ MAIN_ROOM = "MAIN_ROOM",
289
+ WAITING_ROOM = "WAITING_ROOM"
290
+ }
@@ -4,7 +4,7 @@ require("core-js/modules/es.object.define-property.js");
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.VideoWindowPinType = exports.UIAction = exports.RoomControlType = exports.RendererEventAction = exports.ParticipantType = exports.HighlightElement = exports.DialogKey = void 0;
7
+ exports.VideoWindowPinType = exports.UIAction = exports.RoomType = exports.RoomControlType = exports.RendererEventAction = exports.ParticipantType = exports.HighlightElement = exports.DialogKey = void 0;
8
8
  var RendererEventAction = exports.RendererEventAction = /*#__PURE__*/function (RendererEventAction) {
9
9
  RendererEventAction["FRAGMENT_LOADED"] = "FRAGMENT_LOADED";
10
10
  RendererEventAction["FRAGMENT_CLOSED"] = "FRAGMENT_CLOSED";
@@ -52,12 +52,14 @@ var RendererEventAction = exports.RendererEventAction = /*#__PURE__*/function (R
52
52
  RendererEventAction["MAIN_SET_ALLOW_UNMUTE_SELF_VIDEO"] = "MAIN_SET_ALLOW_UNMUTE_SELF_VIDEO";
53
53
  RendererEventAction["MAIN_SET_ALLOW_UNMUTE_SELF_AUDIO"] = "MAIN_SET_ALLOW_UNMUTE_SELF_AUDIO";
54
54
  RendererEventAction["MAIN_SET_ALLOW_CLOUD_RECORDING_START"] = "MAIN_SET_ALLOW_CLOUD_RECORDING_START";
55
+ RendererEventAction["MAIN_SET_ALLOW_BOARD_WRITE"] = "MAIN_SET_ALLOW_BOARD_WRITE";
55
56
  RendererEventAction["FRAGMENT_SET_LOCK_ROOM"] = "FRAGMENT_SET_LOCK_ROOM";
56
57
  RendererEventAction["FRAGMENT_SET_ENABLE_WAITING_ROOM"] = "FRAGMENT_SET_ENABLE_WAITING_ROOM";
57
58
  RendererEventAction["FRAGMENT_SET_ALLOW_CHANGE_SELF_NAME"] = "FRAGMENT_SET_ALLOW_CHANGE_SELF_NAME";
58
59
  RendererEventAction["FRAGMENT_SET_ALLOW_CHAT"] = "FRAGMENT_SET_ALLOW_CHAT";
59
60
  RendererEventAction["FRAGMENT_SET_ALLOW_JOIN_WITH_MUTE_AUDIO"] = "FRAGMENT_SET_ALLOW_JOIN_WITH_MUTE_AUDIO";
60
61
  RendererEventAction["FRAGMENT_SET_ALLOW_SHARE_SCREEN"] = "FRAGMENT_SET_ALLOW_SHARE_SCREEN";
62
+ RendererEventAction["FRAGMENT_SET_ALLOW_BOARD_WRITE"] = "FRAGMENT_SET_ALLOW_BOARD_WRITE";
61
63
  RendererEventAction["FRAGMENT_SET_ALLOW_UNMUTE_SELF_VIDEO"] = "FRAGMENT_SET_ALLOW_UNMUTE_SELF_VIDEO";
62
64
  RendererEventAction["FRAGMENT_SET_ALLOW_UNMUTE_SELF_AUDIO"] = "FRAGMENT_SET_ALLOW_UNMUTE_SELF_AUDIO";
63
65
  RendererEventAction["START_SCREEN_SHARE_PERMISSION"] = "START_SCREEN_SHARE_PERMISSION";
@@ -110,6 +112,15 @@ var RendererEventAction = exports.RendererEventAction = /*#__PURE__*/function (R
110
112
  RendererEventAction["CALL_HIDE"] = "CALL_HIDE";
111
113
  RendererEventAction["CALL_SHOW"] = "CALL_SHOW";
112
114
  RendererEventAction["SET_SHARE_WITH_AUDIO_CONTROL_BAR"] = "SET_SHARE_WITH_AUDIO_CONTROL_BAR";
115
+ RendererEventAction["SET_REMOTE_USERS"] = "SET_REMOTE_USERS";
116
+ RendererEventAction["SET_HAS_ASSIGN_HOST_BEFORE_LEAVING_PERMISSION"] = "SET_HAS_ASSIGN_HOST_BEFORE_LEAVING_PERMISSION";
117
+ RendererEventAction["SET_IS_PSTN_USER"] = "SET_IS_PSTN_USER";
118
+ RendererEventAction["SET_IS_LOCKED"] = "SET_IS_LOCKED";
119
+ RendererEventAction["SET_HAS_END_ROOM_PERMISSION"] = "SET_HAS_END_ROOM_PERMISSION";
120
+ RendererEventAction["KEEP_PHONE_AUDIO_CONNECTION"] = "KEEP_PHONE_AUDIO_CONNECTION";
121
+ RendererEventAction["REISSUE_CONTROLBAR_INFO"] = "REISSUE_CONTROLBAR_INFO";
122
+ RendererEventAction["ASSIGN_HOST"] = "ASSIGN_HOST";
123
+ RendererEventAction["CALL_CLOSE_MAIN_WINDOW"] = "CALL_CLOSE_MAIN_WINDOW";
113
124
  return RendererEventAction;
114
125
  }({});
115
126
  var ParticipantType = exports.ParticipantType = /*#__PURE__*/function (ParticipantType) {
@@ -130,6 +141,7 @@ var ParticipantType = exports.ParticipantType = /*#__PURE__*/function (Participa
130
141
  ParticipantType["STOP_RAISE_HAND"] = "STOP_RAISE_HAND";
131
142
  ParticipantType["SET_MAIN_SPEAKER"] = "SET_MAIN_SPEAKER";
132
143
  ParticipantType["MERGE_VIDEO"] = "MERGE_VIDEO";
144
+ ParticipantType["REMOVE_WAITING_ROOM"] = "REMOVE_WAITING_ROOM";
133
145
  return ParticipantType;
134
146
  }({});
135
147
  var VideoWindowPinType = exports.VideoWindowPinType = /*#__PURE__*/function (VideoWindowPinType) {
@@ -200,6 +212,25 @@ var UIAction = exports.UIAction = /*#__PURE__*/function (UIAction) {
200
212
  UIAction[UIAction["STOP_SCREEN_CAPTURE"] = 45] = "STOP_SCREEN_CAPTURE";
201
213
  UIAction[UIAction["ENGINE_RECONNECTED"] = 46] = "ENGINE_RECONNECTED";
202
214
  UIAction[UIAction["SET_CURRENT_SHARE_SCREEN"] = 47] = "SET_CURRENT_SHARE_SCREEN";
215
+ UIAction[UIAction["WAITING_ROOM_CREATED"] = 48] = "WAITING_ROOM_CREATED";
216
+ UIAction[UIAction["TOGGLE_PARTICIPANT_TAB"] = 49] = "TOGGLE_PARTICIPANT_TAB";
217
+ UIAction[UIAction["CURRENT_PARTITIPANT_TAB"] = 50] = "CURRENT_PARTITIPANT_TAB";
218
+ UIAction[UIAction["RECEIVE_NEW_CHAT_MESSAGES_FOR_RED"] = 51] = "RECEIVE_NEW_CHAT_MESSAGES_FOR_RED";
219
+ UIAction[UIAction["CHAT_ROOM_CLOSED"] = 52] = "CHAT_ROOM_CLOSED";
220
+ UIAction[UIAction["CHAT_ROOM_TAB_CHANGE"] = 53] = "CHAT_ROOM_TAB_CHANGE";
221
+ UIAction[UIAction["CHAT_VISIBLE"] = 54] = "CHAT_VISIBLE";
222
+ UIAction[UIAction["WAITING_ROOM_DESTROYED"] = 55] = "WAITING_ROOM_DESTROYED";
223
+ UIAction[UIAction["MOVE_TO_MAIN_ROOM_ALL_MEMBER"] = 56] = "MOVE_TO_MAIN_ROOM_ALL_MEMBER";
224
+ UIAction[UIAction["CLOSE_WAITING_ROOM_DIALOG"] = 57] = "CLOSE_WAITING_ROOM_DIALOG";
225
+ UIAction[UIAction["SET_REMOTE_USERS"] = 58] = "SET_REMOTE_USERS";
226
+ UIAction[UIAction["SET_HAS_ASSIGN_HOST_BEFORE_LEAVING_PERMISSION"] = 59] = "SET_HAS_ASSIGN_HOST_BEFORE_LEAVING_PERMISSION";
227
+ UIAction[UIAction["SET_IS_PSTN_USER"] = 60] = "SET_IS_PSTN_USER";
228
+ UIAction[UIAction["SET_HAS_END_ROOM_PERMISSION"] = 61] = "SET_HAS_END_ROOM_PERMISSION";
229
+ UIAction[UIAction["WATERMARK_INFO_UPDATE"] = 62] = "WATERMARK_INFO_UPDATE";
230
+ UIAction[UIAction["CHANGE_PARTICIPANT_TAB"] = 63] = "CHANGE_PARTICIPANT_TAB";
231
+ UIAction[UIAction["SHOW_NOTIFICATION"] = 64] = "SHOW_NOTIFICATION";
232
+ UIAction[UIAction["COLSE_NOTIFICATION"] = 65] = "COLSE_NOTIFICATION";
233
+ UIAction[UIAction["CLOSE_REMOVE_ADMIT_WAITING_ROOM_DIALOG"] = 66] = "CLOSE_REMOVE_ADMIT_WAITING_ROOM_DIALOG";
203
234
  return UIAction;
204
235
  }({});
205
236
  var DialogKey = exports.DialogKey = /*#__PURE__*/function (DialogKey) {
@@ -216,6 +247,10 @@ var DialogKey = exports.DialogKey = /*#__PURE__*/function (DialogKey) {
216
247
  DialogKey["TOOLBAR"] = "toolbar";
217
248
  DialogKey["WHITEBOARD"] = "whiteboard";
218
249
  DialogKey["PROGRESS_DIALOG"] = "progress-dialog";
250
+ DialogKey["WAITING_ROOM"] = "waiting-room";
251
+ DialogKey["WAITING_ROOM_SINGLE_REMOVE"] = "waiting-room-single-remove";
252
+ DialogKey["WAITING_ROOM_ALL_REMOVE"] = "waiting-room-all-remove";
253
+ DialogKey["WAITING_ROOM_ALL_ADMIT"] = "waiting-room-all-admit";
219
254
  return DialogKey;
220
255
  }({});
221
256
  var HighlightElement = exports.HighlightElement = /*#__PURE__*/function (HighlightElement) {
@@ -232,4 +267,9 @@ var HighlightElement = exports.HighlightElement = /*#__PURE__*/function (Highlig
232
267
  HighlightElement["TRANSLATE_TARGET"] = "fcr_TRANSLATE_TARGET_highlighter";
233
268
  HighlightElement["TRANSLATE_INTERPRETER"] = "fcr_TRANSLATE_INTERPRETER_highlighter";
234
269
  return HighlightElement;
270
+ }({});
271
+ var RoomType = exports.RoomType = /*#__PURE__*/function (RoomType) {
272
+ RoomType["MAIN_ROOM"] = "MAIN_ROOM";
273
+ RoomType["WAITING_ROOM"] = "WAITING_ROOM";
274
+ return RoomType;
235
275
  }({});
@@ -7,8 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.isSkipPretest = exports.isOpenDefaultMicrophone = exports.isOpenDefaultCamera = void 0;
8
8
  var _valueCheck = require("agora-foundation/lib/utilities/value-check");
9
9
  var isSkipPretest = exports.isSkipPretest = function isSkipPretest(parameters) {
10
- var _parameters$scene;
11
- return (0, _valueCheck.isTrueValue)(parameters === null || parameters === void 0 || (_parameters$scene = parameters.scene) === null || _parameters$scene === void 0 ? void 0 : _parameters$scene.skipPretest);
10
+ var _parameters$scene$ski, _parameters$scene;
11
+ return (0, _valueCheck.isTrueValue)((_parameters$scene$ski = parameters === null || parameters === void 0 || (_parameters$scene = parameters.scene) === null || _parameters$scene === void 0 ? void 0 : _parameters$scene.skipPretest) !== null && _parameters$scene$ski !== void 0 ? _parameters$scene$ski : true);
12
12
  };
13
13
  var isOpenDefaultCamera = exports.isOpenDefaultCamera = function isOpenDefaultCamera(parameters) {
14
14
  var _parameters$scene2;
@@ -21,3 +21,4 @@ export declare const getCurrentWorkArea: (currentShareId: string, currentShareTy
21
21
  */
22
22
  export declare const handleWillClose: (browserWindow: Electron.BrowserWindow, callback?: () => void) => void;
23
23
  export declare const releaseSubAllWindowRefs: () => void;
24
+ export declare const setInMeetingState: (state: 0 | 1) => void;
@@ -4,7 +4,7 @@ require("core-js/modules/es.object.define-property.js");
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.releaseSubAllWindowRefs = exports.open = exports.isWindows = exports.handleWillClose = exports.getCurrentWorkArea = exports.close = void 0;
7
+ exports.setInMeetingState = exports.releaseSubAllWindowRefs = exports.open = exports.isWindows = exports.handleWillClose = exports.getCurrentWorkArea = exports.close = void 0;
8
8
  require("core-js/modules/es.array.concat.js");
9
9
  require("core-js/modules/es.array.find.js");
10
10
  require("core-js/modules/es.array.index-of.js");
@@ -97,7 +97,8 @@ var getCurrentWorkArea = exports.getCurrentWorkArea = function getCurrentWorkAre
97
97
  var handleWillClose = exports.handleWillClose = function handleWillClose(browserWindow) {
98
98
  var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
99
99
  var _callback = function _callback() {
100
- console.log('browserWindow will-close fired');
100
+ // console.log('browserWindow will-close fired');
101
+
101
102
  callback();
102
103
  if (!browserWindow.isDestroyed()) {
103
104
  // dont close the window as it will carsh the renderer process of the main window
@@ -111,4 +112,7 @@ var handleWillClose = exports.handleWillClose = function handleWillClose(browser
111
112
  };
112
113
  var releaseSubAllWindowRefs = exports.releaseSubAllWindowRefs = function releaseSubAllWindowRefs() {
113
114
  window.runtime.releaseSubAllWindowRefs();
115
+ };
116
+ var setInMeetingState = exports.setInMeetingState = function setInMeetingState(state) {
117
+ window.runtime.setInMeetingState(state);
114
118
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fcr-ui-scene",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
4
4
  "main": "lib/index.js",
5
5
  "repository": "ssh://git@git.agoralab.co/aduc/fcr-ui-scene-desktop.git",
6
6
  "author": "agora.io",
@@ -8,18 +8,22 @@
8
8
  "scripts": {
9
9
  "prepare": "husky",
10
10
  "dev": "agora-tc-dev-server",
11
- "dev-electron": "agora-tc-dev-server --electron",
11
+ "dev-electron": "agora-tc-dev-server --electron --main lib/electron/bootstrap-dev",
12
12
  "test-browser": "agora-tc-test-karma-browser",
13
13
  "test-electron": "agora-tc-test-karma-electron",
14
14
  "build": "agora-tc-transpile",
15
- "bundle": "agora-tc-bundle --entry src/index",
16
- "build-electron-mac": "agora-tc-pack-sdk --platform darwin --arch x64",
15
+ "bundle": "agora-tc-bundle --entry src/index && agora-tc-transpile --src ./src/electron --out dist/electron --transpile-only",
16
+ "build-electron-mac": "CSC_IDENTITY_AUTO_DISCOVERY=false agora-tc-pack-sdk --platform darwin --arch x64",
17
17
  "build-electron-win": "agora-tc-pack-sdk --platform win32 --arch x64"
18
18
  },
19
19
  "dependencies": {
20
+ "@electron/remote": "2.0.1",
20
21
  "@react-spring/web": "^9.7.3",
21
22
  "@use-gesture/react": "^10.3.1",
23
+ "agora-electron-sdk": "4.3.2-build.90-rc.1",
22
24
  "classnames": "^2.5.1",
25
+ "core-js": "^3.33.3",
26
+ "dayjs": "^1.10.4",
23
27
  "js-md5": "^0.8.3",
24
28
  "lodash": "^4.17.21",
25
29
  "mobx": "^6.12.3",
@@ -30,22 +34,17 @@
30
34
  "react-rnd": "^10.4.1",
31
35
  "react-use-measure": "^2.1.1",
32
36
  "react-virtualized": "^9.22.5",
33
- "dayjs": "^1.10.4",
34
- "@electron/remote": "2.0.1",
35
- "core-js": "^3.33.3",
36
- "agora-electron-sdk": "4.3.2-build.90-rc.1",
37
37
  "tinycolor2": "^1.6.0",
38
38
  "electron-screenshots": "^0.5.26",
39
39
  "pidusage": "^3.0.2",
40
40
  "systeminformation": "^5.22.11",
41
41
  "jszip": "^3.10.1",
42
42
  "winston": "^3.16.0",
43
- "agora-foundation": "^3.2.0",
44
- "agora-ui-foundation": "^3.2.0",
45
- "agora-edu-core": "^3.2.0"
43
+ "agora-foundation": "^3.3.0",
44
+ "agora-ui-foundation": "^3.3.0",
45
+ "agora-edu-core": "^3.3.0"
46
46
  },
47
47
  "devDependencies": {
48
- "electron": "24.8.8",
49
48
  "@babel/core": "^7.23.5",
50
49
  "@babel/plugin-proposal-decorators": "^7.23.5",
51
50
  "@babel/plugin-transform-runtime": "^7.13.15",
@@ -59,14 +58,15 @@
59
58
  "@types/react-virtualized": "^9.21.30",
60
59
  "@types/tinycolor2": "^1.4.6",
61
60
  "core-js": "^3.33.3",
61
+ "electron": "24.8.8",
62
62
  "husky": "^9.0.11",
63
63
  "lint-staged": "^15.2.2",
64
64
  "prettier": "^3.2.5",
65
65
  "react-hot-loader": "^4.13.1",
66
66
  "tslib": "^2.6.2",
67
- "agora-toolchain": "^3.2.0"
67
+ "agora-toolchain": "^3.3.0"
68
68
  },
69
69
  "lint-staged": {
70
70
  "*.{ts,tsx,html,css}": "prettier --write"
71
71
  }
72
- }
72
+ }
Binary file
Binary file
package/public/index.html CHANGED
@@ -3,24 +3,42 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Document</title>
6
+ <title><%= htmlWebpackPlugin.options.title %></title>
7
7
  </head>
8
+
8
9
  <body>
9
10
  <div id="root"></div>
10
11
  </body>
11
12
  <script>
12
13
  (async () => {
13
14
  const launchOptions = await window.runtime.getLaunchOptions();
14
- new FcrUIScene.FcrUISceneCreator()
15
- .launch(launchOptions, document.getElementById('root'))
16
- .then((scene) => {
17
- defaultScene = scene;
18
- scene.addObserver({
19
- onExited: (reason) => {
20
- window.runtime.quitApp();
21
- },
22
- });
23
- });
15
+ let launchOptionsObj = launchOptions;
16
+ try {
17
+ launchOptionsObj = JSON.parse(launchOptions);
18
+ } catch (e) {
19
+ console.error('Failed to parse launch options', e);
20
+ }
21
+ const { appId, userId, parameters, ...others } = launchOptionsObj;
22
+ const uiScene = new FcrUIScene.FcrUISceneCreator({
23
+ appId,
24
+ userId,
25
+ parameters,
26
+ }).launch(
27
+ others,
28
+ () => {
29
+ window.runtime.quitApp();
30
+ },
31
+ () => {},
32
+ () => {
33
+ window.runtime.quitApp();
34
+ },
35
+ document.getElementById('root'),
36
+ );
37
+ uiScene.addObserver({
38
+ onExited: (reason) => {
39
+ window.runtime.quitApp();
40
+ },
41
+ });
24
42
  })();
25
43
  </script>
26
44
  </html>