fcr-ui-scene 3.7.6 → 3.7.7-rc.1

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 (79) hide show
  1. package/lib/creator/index.js +12 -6
  2. package/lib/creator/provider-initializer.browser.js +0 -3
  3. package/lib/creator/provider-initializer.electron.js +0 -4
  4. package/lib/electron/bootstrap-sdk.js +70 -20
  5. package/lib/electron/struct.d.ts +7 -1
  6. package/lib/electron/struct.js +8 -1
  7. package/lib/electron/until.d.ts +3 -1
  8. package/lib/electron/until.js +7 -2
  9. package/lib/modules/action-bar/components/item/index.js +1 -0
  10. package/lib/modules/action-bar/components/screen-share/submenu.js +1 -1
  11. package/lib/modules/chat/index.css +5 -1
  12. package/lib/modules/chat/view.js +6 -1
  13. package/lib/modules/components/control-bar/components/switch-theme/index.css +2 -0
  14. package/lib/modules/components/control-bar/components/switch-theme/index.js +5 -7
  15. package/lib/modules/components/control-bar/index.js +26 -7
  16. package/lib/modules/components/toolbar/components/capture-tool/index.d.ts +0 -1
  17. package/lib/modules/components/toolbar/components/capture-tool/index.js +1 -2
  18. package/lib/modules/components/toolbar/components/vertical-frame/index.js +2 -2
  19. package/lib/modules/components/toolbar/hooks/use-resize-visible.js +43 -42
  20. package/lib/modules/components/toolbar/index.js +6 -24
  21. package/lib/modules/control-bar/components/cloud-recording-buttons.d.ts +3 -0
  22. package/lib/modules/control-bar/components/cloud-recording-buttons.js +65 -3
  23. package/lib/modules/control-bar/store.js +11 -6
  24. package/lib/modules/dialog/components/dialog-container/component/body.d.ts +1 -0
  25. package/lib/modules/dialog/components/dialog-container/component/body.js +3 -2
  26. package/lib/modules/dialog/components/dialog-container/index.css +1 -1
  27. package/lib/modules/dialog/components/dialog-container/index.d.ts +1 -0
  28. package/lib/modules/dialog/components/dialog-container/index.js +4 -1
  29. package/lib/modules/dialog/components/normal-window/index.d.ts +1 -0
  30. package/lib/modules/dialog/components/normal-window/index.js +3 -1
  31. package/lib/modules/dialog/dialogs/chat/index.js +2 -1
  32. package/lib/modules/dialog/dialogs/control-bar-leave-meeting/index.js +0 -1
  33. package/lib/modules/dialog/dialogs/end-meeting/index.d.ts +1 -0
  34. package/lib/modules/dialog/dialogs/end-meeting/index.js +2 -1
  35. package/lib/modules/dialog/dialogs/participant/index.js +2 -1
  36. package/lib/modules/layout/store.electron.js +1 -1
  37. package/lib/modules/secondary-window/store.d.ts +0 -1
  38. package/lib/modules/secondary-window/store.js +9 -22
  39. package/lib/modules/secondary-window/view.js +6 -5
  40. package/lib/modules/setting/index.css +0 -1
  41. package/lib/modules/setting/store.base.js +6 -0
  42. package/lib/modules/setting/view.js +0 -3
  43. package/lib/modules/share-screen/store.electron.js +1 -1
  44. package/lib/modules/state-bar/layout-config.js +6 -0
  45. package/lib/modules/state-bar/main-scene/store.base.d.ts +2 -0
  46. package/lib/modules/state-bar/main-scene/store.base.js +6 -0
  47. package/lib/modules/video-window/index.css +6 -0
  48. package/lib/modules/video-window/popover-watcher.d.ts +4 -1
  49. package/lib/modules/video-window/popover-watcher.js +15 -2
  50. package/lib/modules/video-window/store.d.ts +18 -1
  51. package/lib/modules/video-window/store.js +55 -7
  52. package/lib/modules/whiteboard/store.js +20 -2
  53. package/lib/object-manager.d.ts +0 -1
  54. package/lib/object-manager.js +0 -1
  55. package/lib/providers/board-share/bar-control/base.d.ts +1 -1
  56. package/lib/providers/board-share/bar-control/base.js +37 -28
  57. package/lib/providers/board-share/bar-control/electron.d.ts +1 -1
  58. package/lib/providers/board-share/bar-control/electron.js +19 -16
  59. package/lib/providers/board-share/provider.browser.d.ts +3 -0
  60. package/lib/providers/board-share/provider.browser.js +21 -3
  61. package/lib/providers/device-provider.js +5 -1
  62. package/lib/providers/dialog/provider.electron.js +6 -0
  63. package/lib/providers/mouse-detect/provider.d.ts +5 -0
  64. package/lib/providers/mouse-detect/provider.js +74 -49
  65. package/lib/providers/multi-display-provider.d.ts +3 -5
  66. package/lib/providers/multi-display-provider.js +0 -9
  67. package/lib/providers/room-provider/room-provider.d.ts +3 -14
  68. package/lib/providers/room-provider/room-provider.js +5 -26
  69. package/lib/providers/screen-share/stream-state-sync.js +19 -12
  70. package/lib/providers/window/main-window.d.ts +0 -5
  71. package/lib/providers/window/main-window.js +0 -44
  72. package/lib/providers/window/renderer-window.d.ts +1 -0
  73. package/lib/providers/window/renderer-window.js +9 -1
  74. package/lib/scenes/main-scene.js +0 -2
  75. package/lib/ui-scene.js +4 -2
  76. package/package.json +5 -5
  77. package/public/index.html +22 -1
  78. package/lib/providers/board-share/bar-control.d.ts +0 -51
  79. package/lib/providers/board-share/bar-control.js +0 -390
@@ -27,12 +27,14 @@ function usePopoverWatcher(_ref) {
27
27
  var dialogWrapper = rootDom;
28
28
  var body = dialogWrapper.ownerDocument.body;
29
29
  var popoverClassName = 'fcr-popover';
30
+ var isPopoverOpened = false;
30
31
  var observer = new MutationObserver(function (mutationsList) {
31
32
  var popover = body.querySelector(".".concat(popoverClassName));
32
33
  mutationsList.forEach(function (mutation) {
33
34
  if (mutation.type === 'childList') {
34
35
  mutation.removedNodes.forEach(function (node) {
35
36
  if (node.nodeType === Node.ELEMENT_NODE && node.classList.contains(popoverClassName)) {
37
+ isPopoverOpened = false;
36
38
  resetVideoWindowSize();
37
39
  }
38
40
  });
@@ -40,10 +42,21 @@ function usePopoverWatcher(_ref) {
40
42
  return;
41
43
  }
42
44
  mutation.addedNodes.forEach(function (node) {
43
- if (node.nodeType === Node.ELEMENT_NODE && node.contains(popover)) {
45
+ if (node.nodeType === Node.ELEMENT_NODE && node.contains(popover) && !isPopoverOpened) {
46
+ isPopoverOpened = true;
44
47
  var width = popover.offsetWidth + dialogWrapper.offsetWidth - WIDTH_RIGHT_OFFSET;
45
48
  var height = Math.max(popover.offsetHeight + HEAD_HEIGHT_OFFSET, dialogWrapper.offsetHeight);
46
- setVideoWindowSize(width, height);
49
+ var _setVideoWindowSize = setVideoWindowSize(width, height),
50
+ videoWidth = _setVideoWindowSize.width;
51
+ if (videoWidth < width) {
52
+ // 说明右侧的宽度不够放下 popover,此时 popover 会自动翻转到左侧。
53
+ // 需要把手动调整左侧的距离,使其贴靠在窗口的最右侧。
54
+
55
+ // popover 会自动计算并设置 style 的 left 值,此处如果直接设置 left 会被 popover 内覆盖。
56
+ // 所以通过设置 css 变量的方式传递给 fcr-video-window-diaolog-wrapper_popover-align-right 使用。
57
+ popover.style.setProperty('--video-window-popover-left', "".concat(videoWidth - popover.offsetWidth, "px"));
58
+ popover.id = 'fcr-video-window-diaolog-wrapper_popover-align-right';
59
+ }
47
60
  }
48
61
  });
49
62
  }
@@ -62,8 +62,25 @@ export default class VideoWindowStore {
62
62
  width: number;
63
63
  height: number;
64
64
  }): void;
65
- setVideoWindowSize(width: number, height: number): void;
65
+ /**
66
+ * @description 如果传入的宽度超过了允许的最大宽度, 则使用允许的最大宽度设置窗口宽度,以避免窗口超出显示器的边缘。
67
+ * @param width 期望设置的视频窗宽度
68
+ * @param height 视频窗高度
69
+ * @returns 实际设置的视频窗尺寸
70
+ */
71
+ setVideoWindowSize(width: number, height: number): {
72
+ width: number;
73
+ height: number;
74
+ };
66
75
  resetVideoWindowSize(): void;
76
+ /**
77
+ * 计算 video-window 窗口允许设置的最大宽度,窗口左上角距离屏幕右侧边缘的距离和当前的窗口内容宽度中,选择最大值作为允许的最大宽度(不能超过窗口最大化的宽度)
78
+ * @param videoWindowX 视频窗左上角 x 坐标
79
+ * @param videoWindowStyleWidth 视频窗内容的宽度
80
+ * @returns 允许设置的最大宽度
81
+ */
82
+ private _computedMaxAllowedWidth;
83
+ private _setVideoWindowDialogSize;
67
84
  private _onAudioVolumeUpdated;
68
85
  private _handleDialogOpen;
69
86
  private _handleDialogClose;
@@ -136,7 +136,7 @@ var VideoWindowStore = exports["default"] = /*#__PURE__*/function () {
136
136
  return _this.videoWindowPreviewType;
137
137
  }, function () {
138
138
  var size = _this.videoWindowStyleSize;
139
- _this.setVideoWindowSize(size.width, size.height);
139
+ _this._setVideoWindowDialogSize(size.width, size.height);
140
140
  }), (0, _mobx.reaction)(function () {
141
141
  return _this.filterFoldList.length;
142
142
  }, function (length, prevLength) {
@@ -151,7 +151,7 @@ var VideoWindowStore = exports["default"] = /*#__PURE__*/function () {
151
151
  var videoWindow = _this._windowProvider.getWindowById(_constant.FcrUIDialogKey.VIDEO_WINDOW);
152
152
  var bounds = videoWindow.getBounds();
153
153
  var width = Math.max(bounds.width, size.width);
154
- _this.setVideoWindowSize(width, size.height);
154
+ _this._setVideoWindowDialogSize(width, size.height);
155
155
  }
156
156
  }));
157
157
  this._streamControl.addObserver({
@@ -410,21 +410,69 @@ var VideoWindowStore = exports["default"] = /*#__PURE__*/function () {
410
410
  this._videoWindowSmallTypeStyleSize = size;
411
411
  }
412
412
  }
413
+ /**
414
+ * @description 如果传入的宽度超过了允许的最大宽度, 则使用允许的最大宽度设置窗口宽度,以避免窗口超出显示器的边缘。
415
+ * @param width 期望设置的视频窗宽度
416
+ * @param height 视频窗高度
417
+ * @returns 实际设置的视频窗尺寸
418
+ */
413
419
  }, {
414
420
  key: "setVideoWindowSize",
415
421
  value: function setVideoWindowSize(width, height) {
416
422
  var videoWindow = this._windowProvider.getWindowById(_constant.FcrUIDialogKey.VIDEO_WINDOW);
417
- this._isWindowApiResize = true;
418
- (0, _videoWindow.setVideoWindowDialogSize)(videoWindow, {
419
- width: width,
423
+ var _videoWindow$getBound = videoWindow.getBounds(),
424
+ videoWindowX = _videoWindow$getBound.x;
425
+ var videoWindowStyleWidth = this.videoWindowStyleSize.width;
426
+ var maxAllowedWidth = this._computedMaxAllowedWidth(videoWindowX, videoWindowStyleWidth);
427
+
428
+ // 在最大宽度限制内,使用期望的宽度
429
+ // 超出最大宽度限制,使用允许的最大宽度
430
+ var finalWidth = Math.min(maxAllowedWidth, width);
431
+ this._setVideoWindowDialogSize(finalWidth, height, videoWindow);
432
+ return {
433
+ width: finalWidth,
420
434
  height: height
421
- });
435
+ };
422
436
  }
423
437
  }, {
424
438
  key: "resetVideoWindowSize",
425
439
  value: function resetVideoWindowSize() {
426
440
  var size = this.videoWindowStyleSize;
427
- this.setVideoWindowSize(size.width, size.height);
441
+ this._setVideoWindowDialogSize(size.width, size.height);
442
+ }
443
+
444
+ /**
445
+ * 计算 video-window 窗口允许设置的最大宽度,窗口左上角距离屏幕右侧边缘的距离和当前的窗口内容宽度中,选择最大值作为允许的最大宽度(不能超过窗口最大化的宽度)
446
+ * @param videoWindowX 视频窗左上角 x 坐标
447
+ * @param videoWindowStyleWidth 视频窗内容的宽度
448
+ * @returns 允许设置的最大宽度
449
+ */
450
+ }, {
451
+ key: "_computedMaxAllowedWidth",
452
+ value: function _computedMaxAllowedWidth(videoWindowX, videoWindowStyleWidth) {
453
+ var sharingDisplayBounds = this._screenShareProvider.sharingDisplayBounds;
454
+ var displayX = sharingDisplayBounds.x,
455
+ displayWidth = sharingDisplayBounds.width;
456
+ var displayRightEdge = displayX + displayWidth;
457
+ var distanceToRightEdge = displayRightEdge - videoWindowX;
458
+
459
+ // 如果窗口左上角距离屏幕边缘的距离小于当前的窗口内容宽度,则使用当前窗口内容宽度作为允许的最大宽度,避免窗口收窄导致内容显示异常
460
+ var maxAllowedWidth = Math.max(distanceToRightEdge, videoWindowStyleWidth);
461
+
462
+ // 如果最大允许宽度超出了窗口最大化的宽度,则使用窗口最大化的宽度作为允许设置的宽度
463
+ return Math.min(maxAllowedWidth, _type.VideoWindowZoomMaxWidth);
464
+ }
465
+ }, {
466
+ key: "_setVideoWindowDialogSize",
467
+ value: function _setVideoWindowDialogSize(width, height, videoWindow) {
468
+ if (!videoWindow) {
469
+ videoWindow = this._windowProvider.getWindowById(_constant.FcrUIDialogKey.VIDEO_WINDOW);
470
+ }
471
+ this._isWindowApiResize = true;
472
+ (0, _videoWindow.setVideoWindowDialogSize)(videoWindow, {
473
+ width: width,
474
+ height: height
475
+ });
428
476
  }
429
477
  }, {
430
478
  key: "_onAudioVolumeUpdated",
@@ -231,10 +231,27 @@ var WhitebaordStoreBase = exports["default"] = /*#__PURE__*/function () {
231
231
  key: "setBoardContainerDom",
232
232
  value: function setBoardContainerDom(boardDom) {
233
233
  if (boardDom) {
234
- this.logger.info("set board container dom: ".concat(boardDom));
234
+ if (this.boardContainer === boardDom) {
235
+ this.logger.warn("set board container dom: container is the same, ignore");
236
+ return;
237
+ }
238
+ this.logger.info("set board container dom: container is mounted");
235
239
  this.boardContainer = boardDom;
240
+ if (this._isMounted) {
241
+ this.logger.error("set board container dom: container is already mounted");
242
+ return;
243
+ }
244
+
245
+ // 切换布局和 pin 时,白板会在 Carousel 和 Gallery 两个组件内切换显示
246
+ // 原先的白板容器会被销毁,新的白板容器会重新创建
247
+ // 这里需要重新挂载白板视图到新的容器内
248
+ if (this._boardView) {
249
+ this._mount(this._boardView);
250
+ }
236
251
  } else {
237
- this.logger.warn("set board container dom is not ready");
252
+ this.logger.info("set board container dom: container is unmounted");
253
+ this._isMounted = false;
254
+ this.boardContainer = undefined;
238
255
  }
239
256
  }
240
257
  }, {
@@ -361,6 +378,7 @@ var WhitebaordStoreBase = exports["default"] = /*#__PURE__*/function () {
361
378
  var reason = data.reason,
362
379
  operatorUser = data.operatorUser;
363
380
  this._unmount();
381
+ this._boardView = null;
364
382
  var stopByOther = reason === _struct.FcrUIBoardShareStopReason.STOPPED_BY_OTHER;
365
383
  var normalStop = reason === _struct.FcrUIBoardShareStopReason.NORMAL_STOP;
366
384
  var operatorIsNotMe = (operatorUser === null || operatorUser === void 0 ? void 0 : operatorUser.userId) !== this.localUser.userId;
@@ -44,7 +44,6 @@ export declare enum FcrUIObjectKeys {
44
44
  P_MULTI_DISPLAY_PROVIDER = "multiDisplayProvider",
45
45
  P_WAITING_ROOM_CONTROL_PROVIDER = "waitingRoomControlProvider",
46
46
  P_CURRENT_ROOM_CONTROL_PROVIDER = "currentRoomControlProvider",
47
- P_CONNECTION_PROVIDER = "connectionProvider",
48
47
  P_SESSION_PROVIDER = "sessionProvider",
49
48
  P_PHONE_AUDIO_CONNECTOR_PROVIDER = "phoneAudioConnectorProvider",
50
49
  P_ANNOTATION_PROVIDER = "annotationProvider",
@@ -160,7 +160,6 @@ var FcrUIObjectKeys = exports.FcrUIObjectKeys = /*#__PURE__*/function (FcrUIObje
160
160
  FcrUIObjectKeys["P_MULTI_DISPLAY_PROVIDER"] = "multiDisplayProvider";
161
161
  FcrUIObjectKeys["P_WAITING_ROOM_CONTROL_PROVIDER"] = "waitingRoomControlProvider";
162
162
  FcrUIObjectKeys["P_CURRENT_ROOM_CONTROL_PROVIDER"] = "currentRoomControlProvider";
163
- FcrUIObjectKeys["P_CONNECTION_PROVIDER"] = "connectionProvider";
164
163
  FcrUIObjectKeys["P_SESSION_PROVIDER"] = "sessionProvider";
165
164
  FcrUIObjectKeys["P_PHONE_AUDIO_CONNECTOR_PROVIDER"] = "phoneAudioConnectorProvider";
166
165
  FcrUIObjectKeys["P_ANNOTATION_PROVIDER"] = "annotationProvider";
@@ -11,9 +11,9 @@ export declare abstract class FcrUIBoardControlShareProviderBase implements FcrU
11
11
  private readonly _privilegeProvider;
12
12
  private readonly _boardControl;
13
13
  protected logger: import("agora-foundation/lib/logger").Logger;
14
- private _showLoading;
15
14
  private _roomName;
16
15
  private get _boardMainRoom();
16
+ private accessor _showLoading;
17
17
  accessor currentTheme: Required<WhiteboardThemeType>;
18
18
  accessor sharingUserInfo: FcrUserInfo | undefined;
19
19
  accessor backgroundColor: string;
@@ -39,7 +39,6 @@ require("core-js/modules/es.error.cause.js");
39
39
  require("core-js/modules/es.error.to-string.js");
40
40
  require("core-js/modules/es.array.concat.js");
41
41
  require("core-js/modules/es.array.find.js");
42
- require("core-js/modules/es.array.includes.js");
43
42
  require("core-js/modules/es.array.iterator.js");
44
43
  require("core-js/modules/es.object.to-string.js");
45
44
  require("core-js/modules/es.string.iterator.js");
@@ -63,7 +62,7 @@ var _utils = require("../../../modules/whiteboard/utils");
63
62
  var _toolbar = require("../../../modules/components/toolbar");
64
63
  var _dayjs = _interopRequireDefault(require("dayjs"));
65
64
  var _FcrUIBoardControlShareProviderBase;
66
- var _initProto, _init_currentTheme, _init_sharingUserInfo, _init_backgroundColor, _init_hasWriteBoardPermission, _init_connectionState, _init_joinSuccess, _init_toolbarState, _setControlEnableDecs, _setSharingUserDecs, _setBackgroundColorDecs, _setWhiteboardToolDecs, _setThemeDecs, _setShowLoadingDecs, _setCommonColorsDecs, _setProgressDecs, _setJoinSuccessDecs, _handleDraftSavedDecs, _ref;
65
+ var _initProto, _init__showLoading, _init_currentTheme, _init_sharingUserInfo, _init_backgroundColor, _init_hasWriteBoardPermission, _init_connectionState, _init_joinSuccess, _init_toolbarState, _setControlEnableDecs, _setSharingUserDecs, _setBackgroundColorDecs, _setWhiteboardToolDecs, _setThemeDecs, _setShowLoadingDecs, _setCommonColorsDecs, _setProgressDecs, _setJoinSuccessDecs, _handleDraftSavedDecs, _ref;
67
66
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
68
67
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
69
68
  function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
@@ -81,6 +80,7 @@ var _D = /*#__PURE__*/new WeakMap();
81
80
  var _E = /*#__PURE__*/new WeakMap();
82
81
  var _F = /*#__PURE__*/new WeakMap();
83
82
  var _G = /*#__PURE__*/new WeakMap();
83
+ var _H = /*#__PURE__*/new WeakMap();
84
84
  _ref = (_setControlEnableDecs = [_mobx.action, _mobx.action.bound], _setSharingUserDecs = [_mobx.action, _mobx.action.bound], _setBackgroundColorDecs = [_mobx.action, _mobx.action.bound], _setWhiteboardToolDecs = [_mobx.action, _mobx.action.bound], _setThemeDecs = [_mobx.action, _mobx.action.bound], _setShowLoadingDecs = [_mobx.action, _mobx.action.bound], _setCommonColorsDecs = [_mobx.action, _mobx.action.bound], _setProgressDecs = [_mobx.action, _mobx.action.bound], _setJoinSuccessDecs = [_mobx.action, _mobx.action.bound], _handleDraftSavedDecs = [_mobx.action, _mobx.action.bound], "logger");
85
85
  var FcrUIBoardControlShareProviderBase = exports.FcrUIBoardControlShareProviderBase = /*#__PURE__*/function () {
86
86
  function FcrUIBoardControlShareProviderBase(_privilegeProvider, _boardControl) {
@@ -88,15 +88,15 @@ var FcrUIBoardControlShareProviderBase = exports.FcrUIBoardControlShareProviderB
88
88
  (0, _defineProperty2["default"])(this, _ref, (_initProto(this), (0, _imports.createLogger)({
89
89
  prefix: 'WhiteboardControlStore'
90
90
  })));
91
- (0, _defineProperty2["default"])(this, "_showLoading", true);
92
91
  (0, _defineProperty2["default"])(this, "_roomName", '');
93
- _classPrivateFieldInitSpec(this, _A, _init_currentTheme(this, (0, _theme["default"])()[0]));
94
- _classPrivateFieldInitSpec(this, _B, _init_sharingUserInfo(this, undefined));
95
- _classPrivateFieldInitSpec(this, _C, _init_backgroundColor(this, '#ffffff'));
96
- _classPrivateFieldInitSpec(this, _D, _init_hasWriteBoardPermission(this, false));
97
- _classPrivateFieldInitSpec(this, _E, _init_connectionState(this, _type.FcrConnectionState.DISCONNECTED));
98
- _classPrivateFieldInitSpec(this, _F, _init_joinSuccess(this, false));
99
- _classPrivateFieldInitSpec(this, _G, _init_toolbarState(this, {
92
+ _classPrivateFieldInitSpec(this, _A, _init__showLoading(this, true));
93
+ _classPrivateFieldInitSpec(this, _B, _init_currentTheme(this, (0, _theme["default"])()[0]));
94
+ _classPrivateFieldInitSpec(this, _C, _init_sharingUserInfo(this, undefined));
95
+ _classPrivateFieldInitSpec(this, _D, _init_backgroundColor(this, '#ffffff'));
96
+ _classPrivateFieldInitSpec(this, _E, _init_hasWriteBoardPermission(this, false));
97
+ _classPrivateFieldInitSpec(this, _F, _init_connectionState(this, _type.FcrConnectionState.DISCONNECTED));
98
+ _classPrivateFieldInitSpec(this, _G, _init_joinSuccess(this, false));
99
+ _classPrivateFieldInitSpec(this, _H, _init_toolbarState(this, {
100
100
  controlEnable: false,
101
101
  currentTool: _enums.FcrBoardToolType.LASER_POINTER,
102
102
  currentStrokeWidth: 2,
@@ -121,7 +121,7 @@ var FcrUIBoardControlShareProviderBase = exports.FcrUIBoardControlShareProviderB
121
121
  return boardMainRoom;
122
122
  }
123
123
  }, {
124
- key: "currentTheme",
124
+ key: "_showLoading",
125
125
  get: function get() {
126
126
  return _classPrivateFieldGet(_A, this);
127
127
  },
@@ -129,7 +129,7 @@ var FcrUIBoardControlShareProviderBase = exports.FcrUIBoardControlShareProviderB
129
129
  _classPrivateFieldSet(_A, this, v);
130
130
  }
131
131
  }, {
132
- key: "sharingUserInfo",
132
+ key: "currentTheme",
133
133
  get: function get() {
134
134
  return _classPrivateFieldGet(_B, this);
135
135
  },
@@ -137,7 +137,7 @@ var FcrUIBoardControlShareProviderBase = exports.FcrUIBoardControlShareProviderB
137
137
  _classPrivateFieldSet(_B, this, v);
138
138
  }
139
139
  }, {
140
- key: "backgroundColor",
140
+ key: "sharingUserInfo",
141
141
  get: function get() {
142
142
  return _classPrivateFieldGet(_C, this);
143
143
  },
@@ -145,7 +145,7 @@ var FcrUIBoardControlShareProviderBase = exports.FcrUIBoardControlShareProviderB
145
145
  _classPrivateFieldSet(_C, this, v);
146
146
  }
147
147
  }, {
148
- key: "hasWriteBoardPermission",
148
+ key: "backgroundColor",
149
149
  get: function get() {
150
150
  return _classPrivateFieldGet(_D, this);
151
151
  },
@@ -153,7 +153,7 @@ var FcrUIBoardControlShareProviderBase = exports.FcrUIBoardControlShareProviderB
153
153
  _classPrivateFieldSet(_D, this, v);
154
154
  }
155
155
  }, {
156
- key: "connectionState",
156
+ key: "hasWriteBoardPermission",
157
157
  get: function get() {
158
158
  return _classPrivateFieldGet(_E, this);
159
159
  },
@@ -161,7 +161,7 @@ var FcrUIBoardControlShareProviderBase = exports.FcrUIBoardControlShareProviderB
161
161
  _classPrivateFieldSet(_E, this, v);
162
162
  }
163
163
  }, {
164
- key: "joinSuccess",
164
+ key: "connectionState",
165
165
  get: function get() {
166
166
  return _classPrivateFieldGet(_F, this);
167
167
  },
@@ -169,17 +169,25 @@ var FcrUIBoardControlShareProviderBase = exports.FcrUIBoardControlShareProviderB
169
169
  _classPrivateFieldSet(_F, this, v);
170
170
  }
171
171
  }, {
172
- key: "toolbarState",
172
+ key: "joinSuccess",
173
173
  get: function get() {
174
174
  return _classPrivateFieldGet(_G, this);
175
175
  },
176
176
  set: function set(v) {
177
177
  _classPrivateFieldSet(_G, this, v);
178
178
  }
179
+ }, {
180
+ key: "toolbarState",
181
+ get: function get() {
182
+ return _classPrivateFieldGet(_H, this);
183
+ },
184
+ set: function set(v) {
185
+ _classPrivateFieldSet(_H, this, v);
186
+ }
179
187
  }, {
180
188
  key: "showLoading",
181
189
  get: function get() {
182
- return [_type.FcrConnectionState.CONNECTING, _type.FcrConnectionState.RECONNECTING].includes(this.connectionState) && this._showLoading;
190
+ return this._showLoading;
183
191
  }
184
192
  }, {
185
193
  key: "canWriteBoard",
@@ -293,14 +301,15 @@ var FcrUIBoardControlShareProviderBase = exports.FcrUIBoardControlShareProviderB
293
301
  }]);
294
302
  }();
295
303
  _FcrUIBoardControlShareProviderBase = FcrUIBoardControlShareProviderBase;
296
- var _applyDecs$e = _applyDecs(_FcrUIBoardControlShareProviderBase, [[_mobx.observable, 1, "currentTheme"], [_mobx.observable, 1, "sharingUserInfo"], [_mobx.observable, 1, "backgroundColor"], [_mobx.observable, 1, "hasWriteBoardPermission"], [_mobx.observable, 1, "connectionState"], [_mobx.observable, 1, "joinSuccess"], [_mobx.observable, 1, "toolbarState"], [_mobx.computed, 3, "canWriteBoard"], [_setControlEnableDecs, 18, "setControlEnable"], [_setSharingUserDecs, 18, "setSharingUser"], [_setBackgroundColorDecs, 18, "setBackgroundColor"], [_setWhiteboardToolDecs, 18, "setWhiteboardTool"], [_setThemeDecs, 18, "setTheme"], [_setShowLoadingDecs, 18, "setShowLoading"], [_setCommonColorsDecs, 18, "setCommonColors"], [_imports.bound, 2, "saveDraft"], [_setProgressDecs, 18, "setProgress"], [_setJoinSuccessDecs, 18, "setJoinSuccess"], [_imports.bound, 2, "resetWhiteboardTool"], [_handleDraftSavedDecs, 18, "_handleDraftSaved"]], []).e;
297
- var _applyDecs$e2 = (0, _slicedToArray2["default"])(_applyDecs$e, 8);
298
- _init_currentTheme = _applyDecs$e2[0];
299
- _init_sharingUserInfo = _applyDecs$e2[1];
300
- _init_backgroundColor = _applyDecs$e2[2];
301
- _init_hasWriteBoardPermission = _applyDecs$e2[3];
302
- _init_connectionState = _applyDecs$e2[4];
303
- _init_joinSuccess = _applyDecs$e2[5];
304
- _init_toolbarState = _applyDecs$e2[6];
305
- _initProto = _applyDecs$e2[7];
304
+ var _applyDecs$e = _applyDecs(_FcrUIBoardControlShareProviderBase, [[_mobx.observable, 1, "_showLoading"], [_mobx.observable, 1, "currentTheme"], [_mobx.observable, 1, "sharingUserInfo"], [_mobx.observable, 1, "backgroundColor"], [_mobx.observable, 1, "hasWriteBoardPermission"], [_mobx.observable, 1, "connectionState"], [_mobx.observable, 1, "joinSuccess"], [_mobx.observable, 1, "toolbarState"], [_mobx.computed, 3, "canWriteBoard"], [_setControlEnableDecs, 18, "setControlEnable"], [_setSharingUserDecs, 18, "setSharingUser"], [_setBackgroundColorDecs, 18, "setBackgroundColor"], [_setWhiteboardToolDecs, 18, "setWhiteboardTool"], [_setThemeDecs, 18, "setTheme"], [_setShowLoadingDecs, 18, "setShowLoading"], [_setCommonColorsDecs, 18, "setCommonColors"], [_imports.bound, 2, "saveDraft"], [_setProgressDecs, 18, "setProgress"], [_setJoinSuccessDecs, 18, "setJoinSuccess"], [_imports.bound, 2, "resetWhiteboardTool"], [_handleDraftSavedDecs, 18, "_handleDraftSaved"]], []).e;
305
+ var _applyDecs$e2 = (0, _slicedToArray2["default"])(_applyDecs$e, 9);
306
+ _init__showLoading = _applyDecs$e2[0];
307
+ _init_currentTheme = _applyDecs$e2[1];
308
+ _init_sharingUserInfo = _applyDecs$e2[2];
309
+ _init_backgroundColor = _applyDecs$e2[3];
310
+ _init_hasWriteBoardPermission = _applyDecs$e2[4];
311
+ _init_connectionState = _applyDecs$e2[5];
312
+ _init_joinSuccess = _applyDecs$e2[6];
313
+ _init_toolbarState = _applyDecs$e2[7];
314
+ _initProto = _applyDecs$e2[8];
306
315
  _applyDecs$e;
@@ -8,8 +8,8 @@ import { FcrUIBoardControlShareProviderBase } from './base';
8
8
  export declare class FcrUIBoardControlShareProviderImpl extends FcrUIBoardControlShareProviderBase {
9
9
  private readonly _fcrUIMainWindowRenderer;
10
10
  protected logger: import("agora-foundation/lib/logger").Logger;
11
- private _mainWindowRenderer;
12
11
  private _disposers;
12
+ private _isDualDisplayMode;
13
13
  private _toolbarStateObserver;
14
14
  get toolbarStateObserver(): FcrUIMainWindowRendererObserver;
15
15
  constructor(privilegeProvider: FcrUIPrivilegeProvider, boardControl: FcrPrivilegedWhiteboardControl, _fcrUIMainWindowRenderer: FcrUIMainWindowRenderer);
@@ -80,6 +80,7 @@ var FcrUIBoardControlShareProviderImpl = exports.FcrUIBoardControlShareProviderI
80
80
  prefix: 'WhiteboardControlStore'
81
81
  })));
82
82
  (0, _defineProperty2["default"])(_this, "_disposers", []);
83
+ (0, _defineProperty2["default"])(_this, "_isDualDisplayMode", false);
83
84
  (0, _defineProperty2["default"])(_this, "_toolbarStateObserver", {
84
85
  onUndoStepsUpdated: function onUndoStepsUpdated(steps) {
85
86
  _this.toolbarState.undoSteps = steps;
@@ -113,32 +114,32 @@ var FcrUIBoardControlShareProviderImpl = exports.FcrUIBoardControlShareProviderI
113
114
  key: "setBackgroundColor",
114
115
  value: function setBackgroundColor(color) {
115
116
  _superPropGet(FcrUIBoardControlShareProviderImpl, "setBackgroundColor", this, 3)([color]);
116
- if (this._mainWindowRenderer) {
117
- this._mainWindowRenderer.notifyObservers('onBackgroundColorUpdated', color);
117
+ if (this._isDualDisplayMode) {
118
+ this._fcrUIMainWindowRenderer.notifyObservers('onBackgroundColorUpdated', color);
118
119
  }
119
120
  }
120
121
  }, {
121
122
  key: "setWhiteboardTool",
122
123
  value: function setWhiteboardTool(tool) {
123
124
  this.logger.info("[shared-whiteboard-data-source]: setWhiteboardTool ".concat(tool));
124
- if (this._mainWindowRenderer) {
125
- this._mainWindowRenderer.notifyObservers('onWhiteboardToolSelected', tool);
125
+ if (this._isDualDisplayMode) {
126
+ this._fcrUIMainWindowRenderer.notifyObservers('onWhiteboardToolSelected', tool);
126
127
  }
127
128
  _superPropGet(FcrUIBoardControlShareProviderImpl, "setWhiteboardTool", this, 3)([tool]);
128
129
  }
129
130
  }, {
130
131
  key: "setTheme",
131
132
  value: function setTheme(theme) {
132
- if (this._mainWindowRenderer) {
133
- this._mainWindowRenderer.notifyObservers('onBackgroundColorUpdated', theme.background);
133
+ if (this._isDualDisplayMode) {
134
+ this._fcrUIMainWindowRenderer.notifyObservers('onBackgroundColorUpdated', theme.background);
134
135
  }
135
136
  _superPropGet(FcrUIBoardControlShareProviderImpl, "setTheme", this, 3)([theme]);
136
137
  }
137
138
  }, {
138
139
  key: "saveDraft",
139
140
  value: function saveDraft() {
140
- if (this._mainWindowRenderer) {
141
- this._mainWindowRenderer.notifyObservers('onSaveDraft');
141
+ if (this._isDualDisplayMode) {
142
+ this._fcrUIMainWindowRenderer.notifyObservers('onSaveDraft');
142
143
  } else {
143
144
  _superPropGet(FcrUIBoardControlShareProviderImpl, "saveDraft", this, 3)([]);
144
145
  }
@@ -146,15 +147,15 @@ var FcrUIBoardControlShareProviderImpl = exports.FcrUIBoardControlShareProviderI
146
147
  }, {
147
148
  key: "inActive",
148
149
  value: function inActive() {
149
- if (this._mainWindowRenderer) {
150
- this._mainWindowRenderer.notifyObservers('onWhiteboardInActive');
150
+ if (this._isDualDisplayMode) {
151
+ this._fcrUIMainWindowRenderer.notifyObservers('onWhiteboardInActive');
151
152
  }
152
153
  }
153
154
  }, {
154
155
  key: "release",
155
156
  value: function release() {
156
- if (this._mainWindowRenderer) {
157
- this._mainWindowRenderer.removeObserver(this._toolbarStateObserver);
157
+ if (this._isDualDisplayMode) {
158
+ this._fcrUIMainWindowRenderer.removeObserver(this._toolbarStateObserver);
158
159
  }
159
160
  _superPropGet(FcrUIBoardControlShareProviderImpl, "release", this, 3)([]);
160
161
  }
@@ -162,16 +163,18 @@ var FcrUIBoardControlShareProviderImpl = exports.FcrUIBoardControlShareProviderI
162
163
  key: "setIsDualDisplayMode",
163
164
  value: function setIsDualDisplayMode(isDualDisplayMode) {
164
165
  var _this2 = this;
166
+ this._isDualDisplayMode = isDualDisplayMode;
165
167
  if (isDualDisplayMode) {
166
- this._mainWindowRenderer = this._fcrUIMainWindowRenderer;
168
+ this._fcrUIMainWindowRenderer.addObserver(this._toolbarStateObserver);
167
169
  this._disposers.push((0, _mobx.reaction)(function () {
168
170
  return _this2.canWriteBoard;
169
171
  }, function (canWrite) {
170
- var _this2$_mainWindowRen;
171
- (_this2$_mainWindowRen = _this2._mainWindowRenderer) === null || _this2$_mainWindowRen === void 0 || _this2$_mainWindowRen.notifyObservers('onPermissionUpdated', canWrite);
172
+ _this2._fcrUIMainWindowRenderer.notifyObservers('onPermissionUpdated', canWrite);
172
173
  }));
173
174
  } else {
174
- this._mainWindowRenderer = undefined;
175
+ this.setShowLoading(true);
176
+ this.setJoinSuccess(false);
177
+ this._fcrUIMainWindowRenderer.removeObserver(this._toolbarStateObserver);
175
178
  this._disposers.forEach(function (disposer) {
176
179
  return disposer();
177
180
  });
@@ -5,6 +5,7 @@ export declare class FcrUIBoardShareProviderImpl extends FcrUIBoardShareProvider
5
5
  private readonly _objectManager;
6
6
  private _boardBarControl;
7
7
  private _boardControlObserver;
8
+ private _boardMainWindowObserver;
8
9
  get boardBarControl(): FcrUIBoardBarControl;
9
10
  constructor(_objectManager: FcrUIObjectManager);
10
11
  setIsDualDisplayMode(): void;
@@ -12,4 +13,6 @@ export declare class FcrUIBoardShareProviderImpl extends FcrUIBoardShareProvider
12
13
  release(): void;
13
14
  private _handleStateUpdated;
14
15
  private _resetWhiteboardTool;
16
+ private _handleRedoStateUpdated;
17
+ private _handleUndoStateUpdated;
15
18
  }
@@ -59,7 +59,7 @@ var _mobx = require("mobx");
59
59
  var _decorator = require("agora-foundation/lib/decorator");
60
60
  var _enums = require("fcr-core/lib/room-control/whiteboard-control/enums");
61
61
  var _FcrUIBoardShareProviderImpl;
62
- var _initProto, _handleStateUpdatedDecs, _ref;
62
+ var _initProto, _handleStateUpdatedDecs, _handleRedoStateUpdatedDecs, _handleUndoStateUpdatedDecs, _ref;
63
63
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
64
64
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
65
65
  function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
@@ -68,7 +68,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
68
68
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
69
69
  function _setFunctionName(e, t, n) { "symbol" == _typeof(t) && (t = (t = t.description) ? "[" + t + "]" : ""); try { Object.defineProperty(e, "name", { configurable: !0, value: n ? n + " " + t : t }); } catch (e) {} return e; }
70
70
  function _checkInRHS(e) { if (Object(e) !== e) throw TypeError("right-hand side of 'in' should be an object, got " + (null !== e ? _typeof(e) : "null")); return e; }
71
- _ref = (_handleStateUpdatedDecs = [_mobx.action, _mobx.action.bound], "_boardBarControl");
71
+ _ref = (_handleStateUpdatedDecs = [_mobx.action, _mobx.action.bound], _handleRedoStateUpdatedDecs = [_mobx.action, _mobx.action.bound], _handleUndoStateUpdatedDecs = [_mobx.action, _mobx.action.bound], "_boardBarControl");
72
72
  var FcrUIBoardShareProviderImpl = exports.FcrUIBoardShareProviderImpl = /*#__PURE__*/function (_FcrUIBoardShareProvi) {
73
73
  function FcrUIBoardShareProviderImpl(_objectManager) {
74
74
  var _this;
@@ -78,6 +78,10 @@ var FcrUIBoardShareProviderImpl = exports.FcrUIBoardShareProviderImpl = /*#__PUR
78
78
  (0, _defineProperty2["default"])(_this, "_boardControlObserver", {
79
79
  onConnectionStateUpdated: _this._handleStateUpdated
80
80
  });
81
+ (0, _defineProperty2["default"])(_this, "_boardMainWindowObserver", {
82
+ onRedoStateUpdated: _this._handleRedoStateUpdated,
83
+ onUndoStateUpdated: _this._handleUndoStateUpdated
84
+ });
81
85
  _this._objectManager = _objectManager;
82
86
  _this._boardControl.addObserver(_this._boardControlObserver);
83
87
  var privilegeProvider = _this._objectManager.getObject(_objectManager2.FcrUIObjectKeys.P_PRIVILEGE_PROVIDER);
@@ -115,7 +119,11 @@ var FcrUIBoardShareProviderImpl = exports.FcrUIBoardShareProviderImpl = /*#__PUR
115
119
  }, {
116
120
  key: "_handleStateUpdated",
117
121
  value: function _handleStateUpdated(state) {
122
+ if (this.joined) {
123
+ this.boardMainWindow.removeObserver(this._boardMainWindowObserver);
124
+ }
118
125
  if (state === _type.FcrConnectionState.CONNECTED) {
126
+ this.boardMainWindow.addObserver(this._boardMainWindowObserver);
119
127
  setTimeout(this._resetWhiteboardTool);
120
128
  }
121
129
  }
@@ -127,10 +135,20 @@ var FcrUIBoardShareProviderImpl = exports.FcrUIBoardShareProviderImpl = /*#__PUR
127
135
  this.boardMainWindow.setStrokeColor(this._boardBarControl.currentTheme.colors[2]);
128
136
  this.boardBarControl.resetWhiteboardTool();
129
137
  }
138
+ }, {
139
+ key: "_handleRedoStateUpdated",
140
+ value: function _handleRedoStateUpdated(enable) {
141
+ this._boardBarControl.toolbarState.undoSteps = enable;
142
+ }
143
+ }, {
144
+ key: "_handleUndoStateUpdated",
145
+ value: function _handleUndoStateUpdated(enable) {
146
+ this._boardBarControl.toolbarState.redoSteps = enable;
147
+ }
130
148
  }]);
131
149
  }(_provider.FcrUIBoardShareProviderBase);
132
150
  _FcrUIBoardShareProviderImpl = FcrUIBoardShareProviderImpl;
133
- var _applyDecs$e = _applyDecs(_FcrUIBoardShareProviderImpl, [[_handleStateUpdatedDecs, 18, "_handleStateUpdated"], [_decorator.bound, 2, "_resetWhiteboardTool"]], [], 0, void 0, _provider.FcrUIBoardShareProviderBase).e;
151
+ var _applyDecs$e = _applyDecs(_FcrUIBoardShareProviderImpl, [[_handleStateUpdatedDecs, 18, "_handleStateUpdated"], [_decorator.bound, 2, "_resetWhiteboardTool"], [_handleRedoStateUpdatedDecs, 18, "_handleRedoStateUpdated"], [_handleUndoStateUpdatedDecs, 18, "_handleUndoStateUpdated"]], [], 0, void 0, _provider.FcrUIBoardShareProviderBase).e;
134
152
  var _applyDecs$e2 = (0, _slicedToArray2["default"])(_applyDecs$e, 1);
135
153
  _initProto = _applyDecs$e2[0];
136
154
  _applyDecs$e;
@@ -1428,7 +1428,11 @@ var FcrUIDeviceProviderImpl = exports.FcrUIDeviceProviderImpl = /*#__PURE__*/fun
1428
1428
  var startSelectedSpeakerTest = function startSelectedSpeakerTest() {
1429
1429
  var _this7$soundEffectLis, _this7$soundEffectLis2;
1430
1430
  var soundUrl = (0, _env.isElectron)() ? (_this7$soundEffectLis = _this7.soundEffectList.get('speaker_test')) === null || _this7$soundEffectLis === void 0 ? void 0 : _this7$soundEffectLis.md5Url : (_this7$soundEffectLis2 = _this7.soundEffectList.get('speaker_test')) === null || _this7$soundEffectLis2 === void 0 ? void 0 : _this7$soundEffectLis2.url;
1431
- _this7._mediaControl.startSelectedSpeakerTest(soundUrl || '', _this7._volumeIndicationInterval);
1431
+ if (!soundUrl) {
1432
+ _this7.logger.error('speaker_test soundUrl is not set');
1433
+ return;
1434
+ }
1435
+ _this7._mediaControl.startSelectedSpeakerTest(soundUrl, _this7._volumeIndicationInterval);
1432
1436
  };
1433
1437
  startSelectedSpeakerTest();
1434
1438
  var sleep = 3000;
@@ -126,6 +126,9 @@ var FcrUIElectronDialogProviderImpl = exports.FcrUIElectronDialogProviderImpl =
126
126
  this.logger.warn("dialog ".concat(dialogKey, "(").concat(dialogId, ") is already opened"));
127
127
  var _window = this._windowProvider.getWindowById(dialogKey, dialogId);
128
128
  _window.show(showOptions);
129
+ if (params !== null && params !== void 0 && params.alwaysOnTop) {
130
+ _window.setAlwaysOnTop(true, 'pop-up-menu');
131
+ }
129
132
  return;
130
133
  }
131
134
  var dialogIds = this.dialogKeyMap.get(dialogKey);
@@ -238,6 +241,9 @@ var FcrUIElectronDialogProviderImpl = exports.FcrUIElectronDialogProviderImpl =
238
241
  window.addObserver(windowObserver);
239
242
  window.setPreventClose(true);
240
243
  window.show(showOptions);
244
+ if (params !== null && params !== void 0 && params.alwaysOnTop) {
245
+ window.setAlwaysOnTop(true, 'pop-up-menu');
246
+ }
241
247
  this.observable.notifyObservers('onDialogOpen', dialogKey, dialogId, params);
242
248
  }
243
249
  }, {
@@ -11,6 +11,9 @@ export declare class FcrUIMouseDetectProviderImpl implements FcrUIManagedObject,
11
11
  private _isInDetectArea;
12
12
  private _task;
13
13
  private _detectionOffset;
14
+ private _isDebug;
15
+ private _displayId;
16
+ private _debugWindowObserver;
14
17
  constructor(objectManager: FcrUIObjectManager);
15
18
  setDisplayId(displayId: number): void;
16
19
  setDetectArea(areaId: FcrUIDetectAreaID, areaList: FcrUI.FcrUIRectangle[]): void;
@@ -21,4 +24,6 @@ export declare class FcrUIMouseDetectProviderImpl implements FcrUIManagedObject,
21
24
  removeObserver(observer: FcrUIMouseDetectObserver): void;
22
25
  release(): void;
23
26
  private _detect;
27
+ private _debug;
28
+ private _setDebugWindowOffset;
24
29
  }