fcr-ui-scene 3.3.1 → 3.4.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 (512) hide show
  1. package/installer/icons/icon.png +0 -0
  2. package/lib/common/device-store.d.ts +21 -11
  3. package/lib/common/device-store.js +236 -151
  4. package/lib/common/device-stream-store.d.ts +22 -4
  5. package/lib/common/device-stream-store.js +297 -113
  6. package/lib/common/event-store.d.ts +19 -10
  7. package/lib/common/event-store.js +28 -10
  8. package/lib/common/remote-renderer.d.ts +15 -0
  9. package/lib/common/remote-renderer.js +138 -0
  10. package/lib/common/room-store.d.ts +21 -18
  11. package/lib/common/room-store.js +54 -47
  12. package/lib/common/security-store.d.ts +35 -27
  13. package/lib/common/security-store.js +221 -383
  14. package/lib/creator.d.ts +3 -1
  15. package/lib/creator.js +13 -1
  16. package/lib/electron/app.js +43 -0
  17. package/lib/electron/bootstrap-sdk.js +2 -1
  18. package/lib/electron/injections.d.ts +6 -4
  19. package/lib/electron/injections.js +138 -113
  20. package/lib/electron/logger.js +3 -1
  21. package/lib/electron/main.js +13 -1
  22. package/lib/electron/plugins/devtool-shortcut.d.ts +2 -0
  23. package/lib/electron/plugins/devtool-shortcut.js +19 -0
  24. package/lib/electron/preload.js +5 -3
  25. package/lib/fragments/control-bar/cloud-recording-buttons.js +1 -1
  26. package/lib/fragments/control-bar/control-bar-store.d.ts +11 -1
  27. package/lib/fragments/control-bar/control-bar-store.js +196 -111
  28. package/lib/fragments/control-bar/index.js +6 -0
  29. package/lib/fragments/control-bar/more-actions/index.js +1 -1
  30. package/lib/fragments/control-bar/security-content/index.css +65 -0
  31. package/lib/fragments/control-bar/security-content/index.js +66 -2
  32. package/lib/fragments/control-bar/share-state-nav/index.js +1 -1
  33. package/lib/fragments/control-bar/view.js +15 -6
  34. package/lib/fragments/live-streaming/store.d.ts +1 -1
  35. package/lib/fragments/live-streaming/store.js +1 -1
  36. package/lib/fragments/live-streaming/view.js +4 -2
  37. package/lib/fragments/share-screen-selection/selection-store.d.ts +1 -1
  38. package/lib/fragments/share-screen-selection/selection-store.js +1 -1
  39. package/lib/fragments/share-screen-selection/view.js +20 -20
  40. package/lib/fragments/toolbar/components/eraser-picker.js +1 -1
  41. package/lib/fragments/toolbar/components/pen-picker.js +1 -1
  42. package/lib/fragments/toolbar/components/shape-picker.js +1 -1
  43. package/lib/fragments/toolbar/components/transfer-position-icon/index.d.ts +11 -0
  44. package/lib/fragments/toolbar/components/transfer-position-icon/index.js +46 -0
  45. package/lib/fragments/toolbar/components/wrapper.js +1 -1
  46. package/lib/fragments/toolbar/hooks.js +1 -1
  47. package/lib/fragments/toolbar/store.d.ts +1 -1
  48. package/lib/hooks/meeting-time.d.ts +1 -1
  49. package/lib/modules/Interpreter/action/add-btn/index.css +4 -0
  50. package/lib/modules/Interpreter/action/add-btn/index.d.ts +11 -0
  51. package/lib/modules/Interpreter/action/add-btn/index.js +43 -0
  52. package/lib/modules/Interpreter/action/delete-btn/index.css +14 -0
  53. package/lib/modules/Interpreter/action/delete-btn/index.d.ts +6 -0
  54. package/lib/modules/Interpreter/action/delete-btn/index.js +38 -0
  55. package/lib/modules/Interpreter/action/edit-btn/index.css +3 -0
  56. package/lib/modules/Interpreter/action/edit-btn/index.d.ts +5 -0
  57. package/lib/modules/Interpreter/action/edit-btn/index.js +49 -0
  58. package/lib/modules/Interpreter/action/switch-btn/index.d.ts +5 -0
  59. package/lib/modules/Interpreter/action/switch-btn/index.js +52 -0
  60. package/lib/modules/Interpreter/add-button/index.js +6 -4
  61. package/lib/modules/Interpreter/constant.d.ts +23 -12
  62. package/lib/modules/Interpreter/constant.js +53 -13
  63. package/lib/modules/Interpreter/dialog-content/index.js +2 -2
  64. package/lib/modules/Interpreter/footer/components/interpreter-btn/index.js +10 -13
  65. package/lib/modules/Interpreter/footer/components/set-btn/index.js +8 -5
  66. package/lib/modules/Interpreter/footer/components/tooltip-wrapper/index.js +3 -1
  67. package/lib/modules/Interpreter/footer/index.css +5 -5
  68. package/lib/modules/Interpreter/footer/index.d.ts +4 -1
  69. package/lib/modules/Interpreter/footer/index.js +8 -17
  70. package/lib/modules/Interpreter/index.css +10 -3
  71. package/lib/modules/Interpreter/index.d.ts +3 -1
  72. package/lib/modules/Interpreter/index.js +11 -5
  73. package/lib/modules/Interpreter/interpreter-list/index.css +1 -18
  74. package/lib/modules/Interpreter/interpreter-list/index.d.ts +4 -1
  75. package/lib/modules/Interpreter/interpreter-list/index.js +13 -32
  76. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/index.css +24 -3
  77. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/index.d.ts +3 -0
  78. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/index.js +51 -13
  79. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_ar.png +0 -0
  80. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_cn.png +0 -0
  81. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_de.png +0 -0
  82. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_en.png +0 -0
  83. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_es.png +0 -0
  84. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_fr.png +0 -0
  85. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_hi.png +0 -0
  86. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_id.png +0 -0
  87. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_it.png +0 -0
  88. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_jp.png +0 -0
  89. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_ko.png +0 -0
  90. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_ms.png +0 -0
  91. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_pt.png +0 -0
  92. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_ru.png +0 -0
  93. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_th.png +0 -0
  94. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_tr.png +0 -0
  95. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/images/fcr_vi.png +0 -0
  96. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/index.d.ts +9 -4
  97. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-language/useLanguageConfig/index.js +98 -39
  98. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-user/index.css +12 -5
  99. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-user/index.d.ts +1 -1
  100. package/lib/modules/Interpreter/interpreter-list/interpreter-item/components/pick-user/index.js +76 -40
  101. package/lib/modules/Interpreter/interpreter-list/interpreter-item/index.css +3 -5
  102. package/lib/modules/Interpreter/interpreter-list/interpreter-item/index.d.ts +1 -1
  103. package/lib/modules/Interpreter/interpreter-list/interpreter-item/index.js +7 -24
  104. package/lib/modules/Interpreter/store.d.ts +48 -26
  105. package/lib/modules/Interpreter/store.js +919 -669
  106. package/lib/modules/Interpreter/tooltip-wrapper/index.d.ts +6 -0
  107. package/lib/modules/Interpreter/tooltip-wrapper/index.js +30 -0
  108. package/lib/modules/Interpreter/view.js +48 -11
  109. package/lib/modules/action-bar/Interpreter/index.d.ts +1 -1
  110. package/lib/modules/action-bar/Interpreter/index.js +7 -10
  111. package/lib/modules/action-bar/action-bar-collapes-items.d.ts +4 -1
  112. package/lib/modules/action-bar/action-bar-collapes-items.js +32 -15
  113. package/lib/modules/action-bar/apps/app-item/index.css +35 -0
  114. package/lib/modules/action-bar/apps/app-item/index.d.ts +12 -0
  115. package/{dist/electron/bootstrap-dev.js → lib/modules/action-bar/apps/app-item/index.js} +38 -28
  116. package/lib/modules/action-bar/apps/appitems.d.ts +4 -1
  117. package/lib/modules/action-bar/apps/appitems.js +30 -25
  118. package/lib/modules/action-bar/apps/index.css +5 -3
  119. package/lib/modules/action-bar/apps/index.js +13 -14
  120. package/lib/modules/action-bar/apps/useAppItemOptions.d.ts +9 -0
  121. package/lib/modules/action-bar/apps/useAppItemOptions.js +29 -0
  122. package/lib/modules/action-bar/apps/useBeautyBackground.d.ts +10 -0
  123. package/lib/modules/action-bar/apps/useBeautyBackground.js +34 -0
  124. package/lib/modules/action-bar/apps/useInterpreter.d.ts +14 -0
  125. package/lib/modules/action-bar/apps/useInterpreter.js +35 -0
  126. package/lib/modules/action-bar/apps/useLiveStreaming.d.ts +16 -0
  127. package/lib/modules/action-bar/apps/useLiveStreaming.js +41 -0
  128. package/lib/modules/action-bar/chat/index.js +3 -3
  129. package/lib/modules/action-bar/device/index.js +22 -24
  130. package/lib/modules/action-bar/index.css +30 -3
  131. package/lib/modules/action-bar/index.d.ts +8 -2
  132. package/lib/modules/action-bar/index.dev.js +6 -3
  133. package/lib/modules/action-bar/index.js +25 -61
  134. package/lib/modules/action-bar/leave/assign-host.d.ts +1 -1
  135. package/lib/modules/action-bar/leave/index.css +10 -0
  136. package/lib/modules/action-bar/leave/index.js +66 -39
  137. package/lib/modules/action-bar/leave/leave-meeting.d.ts +3 -2
  138. package/lib/modules/action-bar/leave/leave-meeting.js +13 -4
  139. package/lib/modules/action-bar/live-streaming/index.js +3 -3
  140. package/lib/modules/action-bar/more/index.js +9 -6
  141. package/lib/modules/action-bar/more/poppover-content.js +33 -12
  142. package/lib/modules/action-bar/participants/index.js +2 -2
  143. package/lib/modules/action-bar/record/index.js +4 -4
  144. package/lib/modules/action-bar/screen-share/index.js +4 -4
  145. package/lib/modules/action-bar/screen-share/submenu.js +4 -4
  146. package/lib/modules/action-bar/security/drop-menu.js +49 -11
  147. package/lib/modules/action-bar/security/index.js +11 -6
  148. package/lib/modules/action-bar/settings/index.js +4 -4
  149. package/lib/modules/action-bar/smaller.js +4 -4
  150. package/lib/modules/action-bar/store.d.ts +54 -11
  151. package/lib/modules/action-bar/store.js +390 -164
  152. package/lib/modules/action-bar/switch-input-language-room/index.d.ts +1 -2
  153. package/lib/modules/action-bar/switch-input-language-room/index.js +134 -43
  154. package/lib/modules/action-bar/switch-output-language-room/drop-menu.js +3 -3
  155. package/lib/modules/action-bar/switch-output-language-room/guide-tooltip/index.d.ts +7 -1
  156. package/lib/modules/action-bar/switch-output-language-room/guide-tooltip/index.js +32 -19
  157. package/lib/modules/action-bar/switch-output-language-room/index.js +134 -69
  158. package/lib/modules/action-bar/switch-output-language-room/notification-bar/components/interpreter/index.css +12 -8
  159. package/lib/modules/action-bar/switch-output-language-room/notification-bar/components/interpreter/index.js +13 -7
  160. package/lib/modules/action-bar/switch-output-language-room/notification-bar/components/virtual-image/index.css +52 -4
  161. package/lib/modules/action-bar/switch-output-language-room/notification-bar/components/virtual-image/index.d.ts +1 -0
  162. package/lib/modules/action-bar/switch-output-language-room/notification-bar/components/virtual-image/index.js +12 -10
  163. package/lib/modules/action-bar/switch-output-language-room/notification-bar/dome.png +0 -0
  164. package/lib/modules/action-bar/switch-output-language-room/notification-bar/index.css +6 -3
  165. package/lib/modules/action-bar/switch-output-language-room/notification-bar/index.js +30 -13
  166. package/lib/modules/action-bar/view.js +25 -11
  167. package/lib/modules/audio-stream/index.d.ts +32 -9
  168. package/lib/modules/audio-stream/index.js +258 -57
  169. package/lib/modules/chat/chat-bar/index.css +1 -0
  170. package/lib/modules/chat/chat-bar/index.d.ts +3 -3
  171. package/lib/modules/chat/chat-bar/index.js +14 -16
  172. package/lib/modules/chat/chat-select/index.css +7 -0
  173. package/lib/modules/chat/chat-select/index.d.ts +1 -1
  174. package/lib/modules/chat/chat-select/index.js +18 -4
  175. package/lib/modules/chat/chat.js +14 -26
  176. package/lib/modules/chat/index.d.ts +5 -3
  177. package/lib/modules/chat/index.dev.js +7 -3
  178. package/lib/modules/chat/index.js +16 -9
  179. package/lib/modules/chat/message-list.js +8 -3
  180. package/lib/modules/chat/store.d.ts +12 -6
  181. package/lib/modules/chat/store.js +109 -69
  182. package/lib/modules/components/device-control/components/audio-menu/index.d.ts +6 -0
  183. package/lib/modules/components/device-control/components/audio-menu/index.js +156 -0
  184. package/lib/modules/components/device-control/components/carmera/index.d.ts +3 -0
  185. package/lib/modules/components/device-control/components/carmera/index.js +111 -0
  186. package/lib/modules/components/device-control/components/microphone/index.d.ts +7 -0
  187. package/lib/modules/components/device-control/components/microphone/index.js +170 -0
  188. package/lib/modules/components/device-control/components/none-menu/index.d.ts +4 -0
  189. package/lib/modules/components/device-control/components/none-menu/index.js +68 -0
  190. package/lib/modules/components/device-control/components/phone-menu/index.d.ts +4 -0
  191. package/lib/modules/components/device-control/components/phone-menu/index.js +61 -0
  192. package/lib/modules/components/device-control/components/video-menu/index.d.ts +5 -0
  193. package/lib/modules/components/device-control/components/video-menu/index.js +111 -0
  194. package/lib/modules/components/device-control/hooks/index.d.ts +9 -0
  195. package/lib/modules/components/device-control/hooks/index.js +42 -0
  196. package/lib/modules/components/device-control/index.css +163 -0
  197. package/lib/modules/components/device-control/index.d.ts +3 -0
  198. package/lib/modules/components/device-control/index.js +21 -0
  199. package/lib/modules/components/device-control/store.d.ts +42 -0
  200. package/lib/modules/components/device-control/store.js +256 -0
  201. package/lib/modules/components/device-control/type.d.ts +6 -0
  202. package/lib/modules/components/device-control/type.js +13 -0
  203. package/lib/modules/components/security-menu/index.css +35 -0
  204. package/lib/modules/components/security-menu/index.d.ts +5 -0
  205. package/lib/modules/components/security-menu/index.js +315 -0
  206. package/lib/modules/components/toast/index.css +12 -0
  207. package/lib/modules/components/toast/index.d.ts +10 -0
  208. package/lib/modules/components/toast/index.js +66 -0
  209. package/lib/modules/components/toast/store.d.ts +17 -0
  210. package/lib/modules/components/toast/store.js +149 -0
  211. package/lib/modules/components/toast/view.d.ts +2 -0
  212. package/lib/modules/components/toast/view.js +35 -0
  213. package/lib/modules/connection-gateway/components/computer/index.js +6 -6
  214. package/lib/modules/connection-gateway/components/phone/components/callinfo/index.css +1 -1
  215. package/lib/modules/connection-gateway/components/phone/components/callinfo/index.d.ts +1 -1
  216. package/lib/modules/connection-gateway/components/phone/index.js +3 -2
  217. package/lib/modules/connection-gateway/components/tabs/index.js +2 -1
  218. package/lib/modules/connection-gateway/index.d.ts +1 -1
  219. package/lib/modules/connection-gateway/index.js +1 -1
  220. package/lib/modules/connection-gateway/store.d.ts +8 -12
  221. package/lib/modules/connection-gateway/store.js +87 -111
  222. package/lib/modules/control-bar/components/cloud-recording-buttons.d.ts +1 -0
  223. package/lib/modules/control-bar/components/cloud-recording-buttons.js +67 -0
  224. package/lib/modules/control-bar/components/meeting-details/index.css +133 -0
  225. package/lib/modules/control-bar/components/meeting-details/index.d.ts +2 -0
  226. package/lib/modules/control-bar/components/meeting-details/index.js +251 -0
  227. package/lib/modules/control-bar/components/more-actions/index.css +72 -0
  228. package/lib/modules/control-bar/components/more-actions/index.d.ts +7 -0
  229. package/lib/modules/control-bar/components/more-actions/index.js +182 -0
  230. package/lib/modules/control-bar/components/share-state-nav/index.css +74 -0
  231. package/lib/modules/control-bar/components/share-state-nav/index.d.ts +10 -0
  232. package/lib/modules/control-bar/components/share-state-nav/index.js +116 -0
  233. package/lib/modules/control-bar/components/stop-live-streaming/index.d.ts +1 -0
  234. package/lib/modules/control-bar/components/stop-live-streaming/index.js +36 -0
  235. package/lib/modules/control-bar/components/stop-live-streaming/stop-button.d.ts +6 -0
  236. package/lib/modules/control-bar/components/stop-live-streaming/stop-button.js +35 -0
  237. package/lib/modules/control-bar/components/transfer-position-icon/index.d.ts +11 -0
  238. package/lib/modules/control-bar/components/transfer-position-icon/index.js +46 -0
  239. package/lib/modules/control-bar/index.css +341 -0
  240. package/lib/modules/control-bar/index.d.ts +29 -0
  241. package/lib/modules/control-bar/index.js +111 -0
  242. package/lib/modules/control-bar/store.d.ts +111 -0
  243. package/lib/modules/control-bar/store.js +881 -0
  244. package/lib/modules/control-bar/type.d.ts +10 -0
  245. package/lib/modules/control-bar/type.js +18 -0
  246. package/lib/modules/control-bar/view.d.ts +1 -0
  247. package/lib/modules/control-bar/view.js +351 -0
  248. package/lib/modules/device-pretest/assets/virtual-backdound-resources.d.ts +9 -0
  249. package/lib/modules/device-pretest/assets/virtual-backdound-resources.js +7 -1
  250. package/lib/modules/device-pretest/audio-preview/speaker-control.js +2 -2
  251. package/lib/modules/device-pretest/index.js +2 -2
  252. package/lib/modules/device-pretest/settings/beauty.d.ts +1 -1
  253. package/lib/modules/device-pretest/settings/video-settings-basic.js +2 -2
  254. package/lib/modules/device-pretest/store.d.ts +2 -1
  255. package/lib/modules/device-pretest/store.js +7 -7
  256. package/lib/modules/dialog/components/Interpreter/electron.js +35 -54
  257. package/lib/modules/dialog/components/Interpreter/index.js +8 -7
  258. package/lib/modules/dialog/components/chat/electron.d.ts +1 -1
  259. package/lib/modules/dialog/components/chat/electron.js +17 -44
  260. package/lib/modules/dialog/components/chat/index.js +3 -3
  261. package/lib/modules/dialog/components/confirm/electron.d.ts +1 -1
  262. package/lib/modules/dialog/components/confirm/electron.js +38 -70
  263. package/lib/modules/dialog/components/confirm/index.d.ts +1 -9
  264. package/lib/modules/dialog/components/confirm/index.js +31 -77
  265. package/lib/modules/dialog/components/connection-gateway/electron.d.ts +4 -1
  266. package/lib/modules/dialog/components/connection-gateway/electron.js +30 -40
  267. package/lib/modules/dialog/components/connection-gateway/index.d.ts +6 -1
  268. package/lib/modules/dialog/components/connection-gateway/index.js +11 -6
  269. package/lib/modules/dialog/components/control-bar/index.d.ts +7 -0
  270. package/lib/modules/dialog/components/control-bar/index.js +42 -0
  271. package/lib/modules/dialog/components/device-setting/electron.js +37 -56
  272. package/lib/modules/dialog/components/device-setting/index.js +4 -3
  273. package/lib/modules/dialog/components/invite/index.d.ts +3 -0
  274. package/lib/modules/dialog/components/invite/index.js +68 -0
  275. package/lib/modules/dialog/components/live-streaming/index.d.ts +4 -0
  276. package/lib/modules/dialog/components/live-streaming/index.js +88 -0
  277. package/lib/modules/dialog/components/operation-waiting-room/electron.js +28 -75
  278. package/lib/modules/dialog/components/operation-waiting-room/index.js +4 -4
  279. package/lib/modules/dialog/components/participant/electron.js +25 -74
  280. package/lib/modules/dialog/components/participant/index.js +6 -3
  281. package/lib/modules/dialog/components/remove-admit-waiting-room/electron.d.ts +8 -1
  282. package/lib/modules/dialog/components/remove-admit-waiting-room/electron.js +22 -75
  283. package/lib/modules/dialog/components/remove-admit-waiting-room/index.js +3 -3
  284. package/lib/modules/dialog/components/share-screen-selection/index.js +10 -28
  285. package/lib/modules/dialog/components/switch-language-channels/electron.js +4 -4
  286. package/lib/modules/dialog/components/switch-language-channels/index.js +3 -3
  287. package/lib/modules/dialog/components/system-preference/bg1.png +0 -0
  288. package/lib/modules/dialog/components/system-preference/bg2.png +0 -0
  289. package/lib/modules/dialog/components/system-preference/electron.d.ts +5 -0
  290. package/lib/modules/dialog/components/system-preference/electron.js +42 -0
  291. package/lib/modules/dialog/components/system-preference/index.css +49 -0
  292. package/lib/modules/dialog/components/system-preference/index.d.ts +5 -0
  293. package/lib/modules/dialog/components/system-preference/index.js +150 -0
  294. package/lib/modules/dialog/components/toast/index.d.ts +3 -0
  295. package/lib/modules/dialog/components/toast/index.js +62 -0
  296. package/lib/modules/dialog/components/whiteboard/index.js +2 -2
  297. package/lib/modules/dialog/dialogs.d.ts +1 -5
  298. package/lib/modules/dialog/dialogs.js +23 -177
  299. package/lib/modules/dialog/hooks/useElectron.d.ts +26 -0
  300. package/lib/modules/dialog/hooks/useElectron.js +109 -0
  301. package/lib/modules/dialog/index.css +7 -2
  302. package/lib/modules/dialog/index.d.ts +6 -6
  303. package/lib/modules/dialog/index.js +9 -18
  304. package/lib/modules/dialog/store.d.ts +16 -18
  305. package/lib/modules/dialog/store.js +114 -164
  306. package/lib/modules/dialog/view.js +2 -2
  307. package/lib/modules/event-confirm/index.css +12 -0
  308. package/lib/modules/event-confirm/index.d.ts +10 -0
  309. package/lib/modules/event-confirm/index.js +55 -0
  310. package/lib/modules/event-confirm/store.d.ts +18 -0
  311. package/lib/modules/event-confirm/store.js +172 -0
  312. package/lib/modules/event-confirm/view.d.ts +2 -0
  313. package/lib/modules/event-confirm/view.js +156 -0
  314. package/lib/modules/event-toast/index.css +16 -0
  315. package/lib/modules/event-toast/index.d.ts +1 -1
  316. package/lib/modules/event-toast/index.js +19 -3
  317. package/lib/modules/event-toast/store.d.ts +13 -0
  318. package/lib/modules/event-toast/store.js +114 -17
  319. package/lib/modules/event-toast/view.d.ts +4 -1
  320. package/lib/modules/event-toast/view.js +28 -4
  321. package/lib/modules/invite/index.d.ts +1 -1
  322. package/lib/modules/invite/index.js +13 -3
  323. package/lib/modules/invite/pstn-invite.js +6 -9
  324. package/lib/modules/invite/store.d.ts +24 -25
  325. package/lib/modules/invite/store.js +148 -147
  326. package/lib/modules/invite/view.js +2 -2
  327. package/lib/modules/invite/voip-invite.js +2 -3
  328. package/lib/modules/layout/components/Aside.js +3 -3
  329. package/lib/modules/layout/components/Carousel.js +15 -9
  330. package/lib/modules/layout/components/Gallery.js +25 -17
  331. package/lib/modules/layout/components/Layout.js +11 -6
  332. package/lib/modules/layout/components/index.css +11 -4
  333. package/lib/modules/layout/index.css +1 -0
  334. package/lib/modules/layout/index.d.ts +4 -2
  335. package/lib/modules/layout/index.dev.js +20 -10
  336. package/lib/modules/layout/index.js +24 -18
  337. package/lib/modules/layout/member-window/index.css +95 -10
  338. package/lib/modules/layout/member-window/index.d.ts +10 -3
  339. package/lib/modules/layout/member-window/index.js +205 -112
  340. package/lib/modules/layout/store.d.ts +20 -7
  341. package/lib/modules/layout/store.js +137 -65
  342. package/lib/modules/layout/type.d.ts +2 -2
  343. package/lib/modules/layout/video-window-datasource.d.ts +5 -3
  344. package/lib/modules/layout/video-window-datasource.js +61 -26
  345. package/lib/modules/live-streaming/index.d.ts +1 -2
  346. package/lib/modules/live-streaming/index.js +13 -29
  347. package/lib/modules/live-streaming/store.d.ts +3 -7
  348. package/lib/modules/live-streaming/store.js +7 -73
  349. package/lib/modules/live-streaming/view.js +3 -3
  350. package/lib/modules/notification/index.css +2 -1
  351. package/lib/modules/notification/index.js +13 -3
  352. package/lib/modules/notification/interpreter-status/index.css +5 -1
  353. package/lib/modules/notification/interpreter-status/index.js +4 -1
  354. package/lib/modules/notification/store.d.ts +1 -0
  355. package/lib/modules/notification/store.js +4 -2
  356. package/lib/modules/notification/view.js +2 -2
  357. package/lib/modules/offscreen-pulling/index.d.ts +19 -0
  358. package/lib/modules/offscreen-pulling/index.js +127 -0
  359. package/lib/modules/participant/attendee/index.css +3 -0
  360. package/lib/modules/participant/attendee/index.d.ts +14 -3
  361. package/lib/modules/participant/attendee/index.js +87 -33
  362. package/lib/modules/participant/attendee/participants-more-action.d.ts +18 -0
  363. package/lib/modules/participant/attendee/participants-more-action.js +278 -0
  364. package/lib/modules/participant/components/drop-menu/index.css +59 -0
  365. package/lib/modules/participant/components/drop-menu/index.d.ts +2 -0
  366. package/lib/modules/participant/components/drop-menu/index.js +189 -0
  367. package/lib/modules/participant/components/footer/buttons.d.ts +7 -0
  368. package/lib/modules/participant/components/footer/buttons.js +53 -0
  369. package/lib/modules/participant/components/footer/index.d.ts +4 -0
  370. package/lib/modules/participant/components/footer/index.js +37 -0
  371. package/lib/modules/participant/components/merge/index.d.ts +11 -0
  372. package/lib/modules/participant/components/merge/index.js +49 -0
  373. package/lib/modules/participant/components/mute-all/index.d.ts +9 -0
  374. package/lib/modules/participant/components/mute-all/index.js +78 -0
  375. package/lib/modules/participant/components/participants/index.d.ts +2 -0
  376. package/lib/modules/participant/components/participants/index.js +201 -0
  377. package/lib/modules/participant/components/rename/index.d.ts +4 -0
  378. package/lib/modules/participant/components/rename/index.js +45 -0
  379. package/lib/modules/participant/index.css +6 -0
  380. package/lib/modules/participant/index.d.ts +8 -6
  381. package/lib/modules/participant/index.dev.js +10 -4
  382. package/lib/modules/participant/index.js +13 -33
  383. package/lib/modules/participant/member-list-data-source.d.ts +1 -1
  384. package/lib/modules/participant/member-list-data-source.js +3 -3
  385. package/lib/modules/participant/store.d.ts +38 -27
  386. package/lib/modules/participant/store.js +456 -292
  387. package/lib/modules/participant/type.d.ts +1 -1
  388. package/lib/modules/participant/view.d.ts +0 -9
  389. package/lib/modules/participant/view.js +8 -346
  390. package/lib/modules/setting/audio-settings/audio-settings.js +10 -10
  391. package/lib/modules/setting/dialog-wrapper.js +2 -2
  392. package/lib/modules/setting/general-settings/general-settings.js +2 -2
  393. package/lib/modules/setting/index.d.ts +3 -2
  394. package/lib/modules/setting/index.dev.js +1 -1
  395. package/lib/modules/setting/index.js +7 -3
  396. package/lib/modules/setting/minutes-settings/minutes-settings.js +2 -2
  397. package/lib/modules/setting/state/index.js +3 -3
  398. package/lib/modules/setting/storage-settings/storage-settings.js +2 -2
  399. package/lib/modules/setting/store.d.ts +16 -13
  400. package/lib/modules/setting/store.js +83 -53
  401. package/lib/modules/setting/translate-settings/translate-settings.js +2 -2
  402. package/lib/modules/setting/video-settings/video-settings-basic.js +2 -2
  403. package/lib/modules/setting/video-settings/video-settings.js +2 -11
  404. package/lib/modules/setting/view.js +1 -2
  405. package/lib/modules/share-screen/index.d.ts +1 -5
  406. package/lib/modules/share-screen/index.dev.js +8 -16
  407. package/lib/modules/share-screen/index.js +2 -99
  408. package/lib/modules/share-screen/selection/index.js +51 -40
  409. package/lib/modules/share-screen/share-state-bar/index.js +1 -1
  410. package/lib/modules/share-screen/store.d.ts +13 -47
  411. package/lib/modules/share-screen/store.js +470 -924
  412. package/lib/modules/share-screen/view.js +6 -19
  413. package/lib/modules/sound-effect/index.d.ts +54 -0
  414. package/lib/modules/sound-effect/index.js +295 -0
  415. package/lib/modules/sound-effect/sound-effect-player.d.ts +12 -0
  416. package/lib/modules/sound-effect/sound-effect-player.js +57 -0
  417. package/lib/modules/state-bar/index.css +3 -0
  418. package/lib/modules/state-bar/index.d.ts +8 -4
  419. package/lib/modules/state-bar/index.js +37 -23
  420. package/lib/modules/state-bar/layout-config.js +6 -7
  421. package/lib/modules/state-bar/live-streaming-state.js +10 -15
  422. package/lib/modules/state-bar/meeting-detail.css +32 -13
  423. package/lib/modules/state-bar/meeting-details.js +118 -58
  424. package/lib/modules/state-bar/meeting-network-state.js +4 -4
  425. package/lib/modules/state-bar/meeting-time.js +2 -2
  426. package/lib/modules/state-bar/network-quality.js +2 -2
  427. package/lib/modules/state-bar/recording.js +2 -3
  428. package/lib/modules/state-bar/store.d.ts +9 -6
  429. package/lib/modules/state-bar/store.js +45 -41
  430. package/lib/modules/state-bar/view.js +41 -28
  431. package/lib/modules/video-window/deviceState/index.d.ts +2 -1
  432. package/lib/modules/video-window/deviceState/index.js +8 -8
  433. package/lib/modules/video-window/index.d.ts +2 -1
  434. package/lib/modules/video-window/index.js +23 -16
  435. package/lib/modules/video-window/members/index.js +14 -8
  436. package/lib/modules/video-window/speaking/index.js +2 -2
  437. package/lib/modules/video-window/store.d.ts +13 -5
  438. package/lib/modules/video-window/store.js +73 -20
  439. package/lib/modules/video-window/topControl/index.js +2 -2
  440. package/lib/modules/video-window/type.d.ts +0 -5
  441. package/lib/modules/video-window/type.js +1 -7
  442. package/lib/modules/video-window/view.js +2 -2
  443. package/lib/modules/waiting-room-layout/index.css +17 -3
  444. package/lib/modules/waiting-room-layout/index.js +13 -3
  445. package/lib/modules/waiting-room-layout/store.d.ts +5 -2
  446. package/lib/modules/waiting-room-layout/store.js +12 -5
  447. package/lib/modules/waiting-room-layout/view.js +43 -33
  448. package/lib/modules/whiteboard/app.js +2 -2
  449. package/lib/modules/whiteboard/components/control-bar/index.js +4 -6
  450. package/lib/modules/whiteboard/components/control-bar/store.d.ts +2 -2
  451. package/lib/modules/whiteboard/components/control-bar/store.js +1 -1
  452. package/lib/modules/whiteboard/components/loading/index.js +2 -2
  453. package/lib/modules/whiteboard/components/multi-window/index.js +2 -2
  454. package/lib/modules/whiteboard/components/progress/electron.js +3 -3
  455. package/lib/modules/whiteboard/components/switch-theme/index.css +1 -0
  456. package/lib/modules/whiteboard/components/switch-theme/index.js +19 -9
  457. package/lib/modules/whiteboard/components/toolbar/components/eraser-picker.js +1 -1
  458. package/lib/modules/whiteboard/components/toolbar/hooks/index.js +1 -1
  459. package/lib/modules/whiteboard/components/toolbar/store.d.ts +1 -1
  460. package/lib/modules/whiteboard/context.d.ts +1 -1
  461. package/lib/modules/whiteboard/context.js +2 -2
  462. package/lib/modules/whiteboard/index.d.ts +5 -10
  463. package/lib/modules/whiteboard/index.js +32 -74
  464. package/lib/modules/whiteboard/type.d.ts +1 -1
  465. package/lib/plugins/browser-runtime-plugin.js +24 -3
  466. package/lib/plugins/electron-rtc-plugin.js +3 -3
  467. package/lib/plugins/module-dev-plugin.d.ts +1 -1
  468. package/lib/plugins/module-dev-plugin.js +3 -3
  469. package/lib/plugins/rtm-plugin.js +3 -3
  470. package/lib/plugins/web-rtc-plugin.js +3 -3
  471. package/lib/runtime.d.ts +14 -4
  472. package/lib/translations/enUS.d.ts +267 -2
  473. package/lib/translations/enUS.js +373 -103
  474. package/lib/translations/zhCN.d.ts +267 -3
  475. package/lib/translations/zhCN.js +299 -30
  476. package/lib/type.d.ts +13 -4
  477. package/lib/type.js +4 -4
  478. package/lib/ui-manager.d.ts +8 -9
  479. package/lib/ui-manager.js +602 -655
  480. package/lib/ui-scene.d.ts +3 -3
  481. package/lib/ui-scene.js +9 -22
  482. package/lib/utilities/constant.d.ts +44 -155
  483. package/lib/utilities/constant.js +42 -129
  484. package/lib/utilities/extract.d.ts +1 -1
  485. package/lib/utilities/parameters.d.ts +4 -0
  486. package/lib/utilities/parameters.js +19 -1
  487. package/lib/utilities/renderer.d.ts +2 -1
  488. package/lib/utilities/renderer.js +6 -3
  489. package/lib/utilities/screen-capture-permission.d.ts +1 -0
  490. package/lib/utilities/screen-capture-permission.js +16 -0
  491. package/lib/utilities/screen.js +32 -23
  492. package/lib/utilities/tools.d.ts +10 -1
  493. package/lib/utilities/tools.js +69 -4
  494. package/lib/utilities/ui-resources.d.ts +1 -0
  495. package/lib/utilities/ui-resources.js +5 -2
  496. package/lib/utilities/video-track-render-context.d.ts +2 -2
  497. package/package.json +7 -7
  498. package/public/assets/loading.gif +0 -0
  499. package/public/index.html +43 -4
  500. package/dist/electron/app.js +0 -148
  501. package/dist/electron/bootstrap-sdk.js +0 -56
  502. package/dist/electron/default-options.js +0 -25
  503. package/dist/electron/env.js +0 -13
  504. package/dist/electron/index.js +0 -20
  505. package/dist/electron/injections.js +0 -702
  506. package/dist/electron/logger.js +0 -66
  507. package/dist/electron/main.js +0 -67
  508. package/dist/electron/plugins/meeting-state.js +0 -39
  509. package/dist/electron/plugins/screenshot.js +0 -49
  510. package/dist/electron/preload.js +0 -36
  511. package/dist/electron/tools.js +0 -66
  512. package/dist/electron/window.js +0 -124
package/lib/creator.d.ts CHANGED
@@ -1,8 +1,10 @@
1
- import { FcrUISceneCancelCallback, FcrUISceneConfig, FcrUISceneCreatorConfig, FcrUISceneFailureCallback, FcrUISceneSuccessCallback } from './type';
1
+ import { FcrUISceneCancelCallback, FcrUISceneConfig, FcrUISceneCreatorConfig, FcrUISceneFailureCallback, FcrUISceneSuccessCallback, FcrUISettingConfig } from './type';
2
2
  import { FcrUIDefaultScene } from './ui-scene';
3
3
  export declare class FcrUISceneCreator {
4
4
  private _config;
5
5
  protected logger: import("agora-foundation/lib/logger").Logger;
6
+ settingConfig: FcrUISettingConfig;
6
7
  constructor(_config: FcrUISceneCreatorConfig);
7
8
  launch(config: FcrUISceneConfig, onCancel: FcrUISceneCancelCallback, onSuccess: FcrUISceneSuccessCallback, onFailure: FcrUISceneFailureCallback, dom: HTMLElement): FcrUIDefaultScene;
9
+ getSettingConfig(): FcrUISettingConfig;
8
10
  }
package/lib/creator.js CHANGED
@@ -20,13 +20,20 @@ var FcrUISceneCreator = exports.FcrUISceneCreator = /*#__PURE__*/function () {
20
20
  (0, _defineProperty2["default"])(this, "logger", (0, _logger.getLogger)());
21
21
  this._config = _config;
22
22
  this.logger.info("[FcrUISceneCreator] creator config: ".concat(JSON.stringify(_config)));
23
+ this.settingConfig = {
24
+ media: {
25
+ autoConnectAudio: false,
26
+ microphoneExpectedOff: false,
27
+ cameraExpectedOff: false
28
+ }
29
+ };
23
30
  }
24
31
  return (0, _createClass2["default"])(FcrUISceneCreator, [{
25
32
  key: "launch",
26
33
  value: function launch(config, onCancel, onSuccess, onFailure, dom) {
27
34
  this.logger.info("[FcrUISceneCreator] scene config: ".concat(JSON.stringify(config)));
28
35
  (0, _i18n.changeLanguage)(config.language);
29
- var scene = new _uiScene.FcrUIDefaultScene(config, this._config, dom);
36
+ var scene = new _uiScene.FcrUIDefaultScene(config, this._config, dom, this.settingConfig);
30
37
  scene.addObserver({
31
38
  onLaunchSuccess: onSuccess,
32
39
  onLaunchFailure: onFailure,
@@ -35,5 +42,10 @@ var FcrUISceneCreator = exports.FcrUISceneCreator = /*#__PURE__*/function () {
35
42
  scene.launch();
36
43
  return scene;
37
44
  }
45
+ }, {
46
+ key: "getSettingConfig",
47
+ value: function getSettingConfig() {
48
+ return this.settingConfig;
49
+ }
38
50
  }]);
39
51
  }();
@@ -1,11 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  require("core-js/modules/es.object.define-property.js");
4
+ require("core-js/modules/es.regexp.exec.js");
4
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
6
  Object.defineProperty(exports, "__esModule", {
6
7
  value: true
7
8
  });
8
9
  exports.hookApp = void 0;
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
9
12
  require("core-js/modules/es.array.find.js");
10
13
  require("core-js/modules/es.array.for-each.js");
11
14
  require("core-js/modules/es.array.join.js");
@@ -24,6 +27,7 @@ var _window = require("./window");
24
27
  var _electron = require("electron");
25
28
  var _path = _interopRequireDefault(require("path"));
26
29
  var _logger = require("./logger");
30
+ var _child_process = require("child_process");
27
31
  var hookApp = exports.hookApp = function hookApp(app) {
28
32
  var logger = (0, _logger.getLogger)();
29
33
  var isWindowDestroyed = function isWindowDestroyed(window) {
@@ -135,6 +139,42 @@ var hookApp = exports.hookApp = function hookApp(app) {
135
139
  var _getRendererWindow;
136
140
  return (_getRendererWindow = (0, _window.getRendererWindow)(frameName)) === null || _getRendererWindow === void 0 ? void 0 : _getRendererWindow.id;
137
141
  });
142
+ _electron.ipcMain.handle('checkMediaPermission', /*#__PURE__*/function () {
143
+ var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(_, mediaType) {
144
+ var accessStatus, res;
145
+ return _regenerator["default"].wrap(function _callee$(_context) {
146
+ while (1) switch (_context.prev = _context.next) {
147
+ case 0:
148
+ accessStatus = _electron.systemPreferences.getMediaAccessStatus(mediaType);
149
+ if (!(accessStatus !== 'granted')) {
150
+ _context.next = 8;
151
+ break;
152
+ }
153
+ _context.next = 4;
154
+ return _electron.systemPreferences.askForMediaAccess(mediaType);
155
+ case 4:
156
+ res = _context.sent;
157
+ return _context.abrupt("return", res);
158
+ case 8:
159
+ return _context.abrupt("return", true);
160
+ case 9:
161
+ case "end":
162
+ return _context.stop();
163
+ }
164
+ }, _callee);
165
+ }));
166
+ return function (_x, _x2) {
167
+ return _ref.apply(this, arguments);
168
+ };
169
+ }());
170
+ _electron.ipcMain.addListener('openSystemPreferences', function (_, mediaType) {
171
+ var execMap = {
172
+ camera: "open x-apple.systempreferences:com.apple.preference.security?Privacy_Camera",
173
+ microphone: "open x-apple.systempreferences:com.apple.preference.security?Privacy_Microphone",
174
+ sharing: "open x-apple.systempreferences:com.apple.preference.security?Privacy_AudioCapture"
175
+ };
176
+ (0, _child_process.exec)(execMap[mediaType]);
177
+ });
138
178
  _electron.ipcMain.addListener('open', function (_, entryPath, dialogId) {
139
179
  (0, _window.open)(entryPath, dialogId);
140
180
  });
@@ -153,4 +193,7 @@ var hookApp = exports.hookApp = function hookApp(app) {
153
193
  (0, _window.clearAllRendererWindows)();
154
194
  });
155
195
  });
196
+ app.addListener('will-quit', function () {
197
+ _electron.globalShortcut.unregister('CommandOrControl+Shift+X');
198
+ });
156
199
  };
@@ -32,7 +32,8 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
32
32
  _electron.app.addListener('ready', function () {
33
33
  var mainWindow = new _electron.BrowserWindow(_objectSpread(_objectSpread({}, _defaultOptions.defaultWindowOptions), {}, {
34
34
  webPreferences: _objectSpread({}, _defaultOptions.defaultWebPreferences),
35
- show: false
35
+ show: false,
36
+ skipTaskbar: true
36
37
  }));
37
38
  _electron.Menu.setApplicationMenu(null);
38
39
  (0, _2.hookWindow)(mainWindow);
@@ -20,10 +20,11 @@ export declare const registerListenerReady: () => void;
20
20
  export declare const captureScreen: (options?: {
21
21
  hideWindow?: boolean;
22
22
  }) => void;
23
- export declare const openRendererWindow: (frameName: string, renderFn: (dom: Element, browserWindow: Electron.BrowserWindow) => void, windowOptions: BrowserWindowConstructorOptions) => Promise<void>;
23
+ export declare const openRendererWindow: (frameName: string, renderFn: (dom: Element, browserWindow: Electron.BrowserWindow, newRendererWindow: Window) => void, windowOptions: BrowserWindowConstructorOptions) => Promise<void>;
24
+ export declare const checkMediaPermission: (mediaType: "microphone" | "camera") => Promise<any>;
25
+ export declare const openSystemPreferences: (mediaType: "microphone" | "camera") => void;
24
26
  export declare const closeRendererWindow: (frameName: string) => Promise<void>;
25
27
  export declare const launch: (options: any) => Promise<any>;
26
- export declare const setAlwaysOnTop: () => void;
27
28
  export declare const quitApp: () => void;
28
29
  export declare const getSystemMemorySize: () => number;
29
30
  export declare const getSystemCpuInfo: () => os.CpuInfo[];
@@ -35,11 +36,12 @@ export declare const getRendererProcessUsage: () => Promise<{
35
36
  totalMemoryUsage: number;
36
37
  totalCpuUsage: number;
37
38
  }>;
38
- export declare const getVirtualBgResource: (url: string, md5Url: string, type: "image" | "video") => Promise<string[]>;
39
- export declare const fileToBase64: (file: string, type: "image" | "video") => string;
39
+ export declare const getResourceByFileType: (url: string, md5Url: string, type: "image" | "video" | "audio") => Promise<string[]>;
40
+ export declare const fileToBase64: (file: string, type: "image" | "video" | "audio") => string;
40
41
  export declare const releaseSubAllWindowRefs: () => void;
41
42
  export declare const getMediaSourceIdList: () => {
42
43
  title: string;
43
44
  mediaSourceId: string;
44
45
  }[];
45
46
  export declare const setInMeetingState: (state: 0 | 1) => void;
47
+ export declare const restartApp: () => void;
@@ -6,7 +6,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
6
6
  Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
- exports.showItemInFolder = exports.setInMeetingState = exports.setFragmentOptions = exports.setFragmentBaseUrl = exports.setAlwaysOnTop = exports.sendEvent = exports.screen = exports.removeEventListener = exports.releaseSubAllWindowRefs = exports.registerListenerReady = exports.quitApp = exports.openRendererWindow = exports.openLinkInDefaultBrowser = exports.openDirectory = exports.open = exports.launch = exports.getVirtualBgResource = exports.getSystemMemorySize = exports.getSystemCpuInfo = exports.getRendererProcessUsage = exports.getNetworkType = exports.getMediaSourceIdList = exports.getLaunchOptions = exports.getBundleType = exports.getBrowserWindowById = exports.getAssetUrl = exports.fileToBase64 = exports.closeRendererWindow = exports.close = exports.captureScreen = exports.browserWindow = exports.addEventListener = void 0;
9
+ exports.showItemInFolder = exports.setInMeetingState = exports.setFragmentOptions = exports.setFragmentBaseUrl = exports.sendEvent = exports.screen = exports.restartApp = exports.removeEventListener = exports.releaseSubAllWindowRefs = exports.registerListenerReady = exports.quitApp = exports.openSystemPreferences = exports.openRendererWindow = exports.openLinkInDefaultBrowser = exports.openDirectory = exports.open = exports.launch = exports.getSystemMemorySize = exports.getSystemCpuInfo = exports.getResourceByFileType = exports.getRendererProcessUsage = exports.getNetworkType = exports.getMediaSourceIdList = exports.getLaunchOptions = exports.getBundleType = exports.getBrowserWindowById = exports.getAssetUrl = exports.fileToBase64 = exports.closeRendererWindow = exports.close = exports.checkMediaPermission = exports.captureScreen = exports.browserWindow = exports.addEventListener = void 0;
10
10
  require("core-js/modules/es.error.cause.js");
11
11
  require("core-js/modules/es.error.to-string.js");
12
12
  require("core-js/modules/es.array.concat.js");
@@ -152,7 +152,7 @@ var openRendererWindow = exports.openRendererWindow = /*#__PURE__*/function () {
152
152
  case 0:
153
153
  rendererWindow = rendererWindows[frameName];
154
154
  if (rendererWindow) {
155
- _context3.next = 36;
155
+ _context3.next = 37;
156
156
  break;
157
157
  }
158
158
  windowConstructorOptionsString = Object.entries(windowOptions).reduce(function (acc, _ref4) {
@@ -179,18 +179,19 @@ var openRendererWindow = exports.openRendererWindow = /*#__PURE__*/function () {
179
179
  _browserWindow = _remote.BrowserWindow.getAllWindows().find(function (win) {
180
180
  return win.id === windowId;
181
181
  });
182
+ _browserWindow === null || _browserWindow === void 0 || _browserWindow.webContents.setBackgroundThrottling(false);
182
183
  if (!newRendererWindow) {
183
- _context3.next = 34;
184
+ _context3.next = 35;
184
185
  break;
185
186
  }
186
187
  newRendererWindow.document.write('<div id="root"></div>');
187
188
  renderDom = newRendererWindow.document.getElementById('root');
188
189
  if (renderDom) {
189
- _context3.next = 16;
190
+ _context3.next = 17;
190
191
  break;
191
192
  }
192
193
  return _context3.abrupt("return");
193
- case 16:
194
+ case 17:
194
195
  // copy styles from parent window
195
196
  parentWindow = window;
196
197
  parentHead = parentWindow.document.head;
@@ -240,39 +241,39 @@ var openRendererWindow = exports.openRendererWindow = /*#__PURE__*/function () {
240
241
  delete rendererWindows[frameName];
241
242
  };
242
243
  Promise.allSettled(stylesLoadedPromises)["finally"](function () {
243
- renderFn(renderDom, _browserWindow);
244
+ renderFn(renderDom, _browserWindow, newRendererWindow);
244
245
  });
245
- case 34:
246
- _context3.next = 51;
246
+ case 35:
247
+ _context3.next = 52;
247
248
  break;
248
- case 36:
249
- _context3.next = 38;
249
+ case 37:
250
+ _context3.next = 39;
250
251
  return _electron.ipcRenderer.invoke('getBrowserWindowId', frameName);
251
- case 38:
252
+ case 39:
252
253
  _windowId = _context3.sent;
253
254
  if (_windowId) {
254
- _context3.next = 42;
255
+ _context3.next = 43;
255
256
  break;
256
257
  }
257
258
  console.error('windowId not found');
258
259
  return _context3.abrupt("return");
259
- case 42:
260
+ case 43:
260
261
  _browserWindow2 = _remote.BrowserWindow.getAllWindows().find(function (win) {
261
262
  return win.id === _windowId;
262
263
  });
263
264
  _newRendererWindow = rendererWindows[frameName];
264
265
  _renderDom = _newRendererWindow.document.getElementById('root');
265
266
  if (_renderDom) {
266
- _context3.next = 47;
267
+ _context3.next = 48;
267
268
  break;
268
269
  }
269
270
  return _context3.abrupt("return");
270
- case 47:
271
- renderFn(_renderDom, _browserWindow2);
271
+ case 48:
272
+ renderFn(_renderDom, _browserWindow2, _newRendererWindow);
272
273
  _browserWindow2 === null || _browserWindow2 === void 0 || _browserWindow2.show();
273
274
  _browserWindow2 === null || _browserWindow2 === void 0 || _browserWindow2.focus();
274
275
  _browserWindow2 === null || _browserWindow2 === void 0 || _browserWindow2.moveTop();
275
- case 51:
276
+ case 52:
276
277
  case "end":
277
278
  return _context3.stop();
278
279
  }
@@ -282,16 +283,40 @@ var openRendererWindow = exports.openRendererWindow = /*#__PURE__*/function () {
282
283
  return _ref3.apply(this, arguments);
283
284
  };
284
285
  }();
285
- var closeRendererWindow = exports.closeRendererWindow = /*#__PURE__*/function () {
286
- var _ref6 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(frameName) {
287
- var windowId, _browserWindow3;
286
+ var checkMediaPermission = exports.checkMediaPermission = /*#__PURE__*/function () {
287
+ var _ref6 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(mediaType) {
288
+ var res;
288
289
  return _regenerator["default"].wrap(function _callee4$(_context4) {
289
290
  while (1) switch (_context4.prev = _context4.next) {
290
291
  case 0:
291
292
  _context4.next = 2;
293
+ return _electron.ipcRenderer.invoke('checkMediaPermission', mediaType);
294
+ case 2:
295
+ res = _context4.sent;
296
+ return _context4.abrupt("return", res);
297
+ case 4:
298
+ case "end":
299
+ return _context4.stop();
300
+ }
301
+ }, _callee4);
302
+ }));
303
+ return function checkMediaPermission(_x4) {
304
+ return _ref6.apply(this, arguments);
305
+ };
306
+ }();
307
+ var openSystemPreferences = exports.openSystemPreferences = function openSystemPreferences(mediaType) {
308
+ _electron.ipcRenderer.send('openSystemPreferences', mediaType);
309
+ };
310
+ var closeRendererWindow = exports.closeRendererWindow = /*#__PURE__*/function () {
311
+ var _ref7 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5(frameName) {
312
+ var windowId, _browserWindow3;
313
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
314
+ while (1) switch (_context5.prev = _context5.next) {
315
+ case 0:
316
+ _context5.next = 2;
292
317
  return _electron.ipcRenderer.invoke('getBrowserWindowId', frameName);
293
318
  case 2:
294
- windowId = _context4.sent;
319
+ windowId = _context5.sent;
295
320
  if (windowId) {
296
321
  _browserWindow3 = _remote.BrowserWindow.getAllWindows().find(function (win) {
297
322
  return win.id === windowId;
@@ -302,49 +327,35 @@ var closeRendererWindow = exports.closeRendererWindow = /*#__PURE__*/function ()
302
327
  }
303
328
  case 4:
304
329
  case "end":
305
- return _context4.stop();
330
+ return _context5.stop();
306
331
  }
307
- }, _callee4);
332
+ }, _callee5);
308
333
  }));
309
- return function closeRendererWindow(_x4) {
310
- return _ref6.apply(this, arguments);
334
+ return function closeRendererWindow(_x5) {
335
+ return _ref7.apply(this, arguments);
311
336
  };
312
337
  }();
313
338
  var launch = exports.launch = /*#__PURE__*/function () {
314
- var _ref7 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5(options) {
339
+ var _ref8 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6(options) {
315
340
  var res;
316
- return _regenerator["default"].wrap(function _callee5$(_context5) {
317
- while (1) switch (_context5.prev = _context5.next) {
341
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
342
+ while (1) switch (_context6.prev = _context6.next) {
318
343
  case 0:
319
- _context5.next = 2;
344
+ _context6.next = 2;
320
345
  return _electron.ipcRenderer.invoke('launch', options);
321
346
  case 2:
322
- res = _context5.sent;
323
- return _context5.abrupt("return", res);
347
+ res = _context6.sent;
348
+ return _context6.abrupt("return", res);
324
349
  case 4:
325
350
  case "end":
326
- return _context5.stop();
351
+ return _context6.stop();
327
352
  }
328
- }, _callee5);
353
+ }, _callee6);
329
354
  }));
330
- return function launch(_x5) {
331
- return _ref7.apply(this, arguments);
355
+ return function launch(_x6) {
356
+ return _ref8.apply(this, arguments);
332
357
  };
333
358
  }();
334
- var setAlwaysOnTop = exports.setAlwaysOnTop = function setAlwaysOnTop() {
335
- var _app$dock;
336
- _remote.app.dock && _remote.app.dock.hide();
337
- var browserWindow = (0, _remote.getCurrentWindow)();
338
- browserWindow.setVisibleOnAllWorkspaces(true, {
339
- visibleOnFullScreen: true
340
- });
341
- browserWindow.setAlwaysOnTop(true);
342
- browserWindow.show();
343
- browserWindow.focus();
344
- if (!((_app$dock = _remote.app.dock) !== null && _app$dock !== void 0 && _app$dock.isVisible())) {
345
- _remote.app.dock && _remote.app.dock.show();
346
- }
347
- };
348
359
  var quitApp = exports.quitApp = function quitApp() {
349
360
  _remote.app.quit();
350
361
  };
@@ -453,11 +464,11 @@ var getAssetUrl = exports.getAssetUrl = function getAssetUrl(path) {
453
464
  return _path2["default"].resolve(_remote.app.getAppPath(), '..', path);
454
465
  };
455
466
  var getRendererProcessUsage = exports.getRendererProcessUsage = /*#__PURE__*/function () {
456
- var _ref8 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6() {
457
- return _regenerator["default"].wrap(function _callee6$(_context6) {
458
- while (1) switch (_context6.prev = _context6.next) {
467
+ var _ref9 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7() {
468
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
469
+ while (1) switch (_context7.prev = _context7.next) {
459
470
  case 0:
460
- return _context6.abrupt("return", {
471
+ return _context7.abrupt("return", {
461
472
  memoryUsage: 0,
462
473
  cpuUsage: 0,
463
474
  totalMemoryUsage: 0,
@@ -465,40 +476,43 @@ var getRendererProcessUsage = exports.getRendererProcessUsage = /*#__PURE__*/fun
465
476
  });
466
477
  case 1:
467
478
  case "end":
468
- return _context6.stop();
479
+ return _context7.stop();
469
480
  }
470
- }, _callee6);
481
+ }, _callee7);
471
482
  }));
472
483
  return function getRendererProcessUsage() {
473
- return _ref8.apply(this, arguments);
484
+ return _ref9.apply(this, arguments);
474
485
  };
475
486
  }();
476
487
  var userDataPath = _remote.app.getPath('userData');
477
488
  var cachePath = _path2["default"].resolve(userDataPath, 'cache');
478
489
  var imageExtensions = ['.png', '.jpg'];
479
490
  var videoExtensions = ['.mp4'];
491
+ var audioExtensions = ['.mp3', '.wav'];
480
492
  var zipExtensions = ['.zip'];
481
493
  var getZipCachePath = function getZipCachePath(type) {
482
- return _path2["default"].resolve(cachePath, "fcr_scene/virtual_bg_".concat(type, "s"));
494
+ var resourcePath = type === 'audio' ? 'sound_effect_' : 'virtual_bg_';
495
+ return _path2["default"].resolve(cachePath, "fcr_scene/".concat(resourcePath).concat(type, "s"));
483
496
  };
484
497
  var getResourcePath = function getResourcePath(type, md5Url) {
485
- return _path2["default"].resolve(userDataPath, "fcr_scene/virtual_bg_".concat(type, "s/").concat(md5Url));
498
+ var resourcePath = type === 'audio' ? 'sound_effect_' : 'virtual_bg_';
499
+ return _path2["default"].resolve(userDataPath, "fcr_scene/".concat(resourcePath).concat(type, "s/").concat(md5Url));
486
500
  };
487
501
 
488
502
  // 解压 zip 文件并保存
489
503
  var unZipAndSaveFile = /*#__PURE__*/function () {
490
- var _ref9 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee8(zipFile, outputPath, type) {
504
+ var _ref10 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee9(zipFile, outputPath, type) {
491
505
  var zipBuffer, zip, fileNames;
492
- return _regenerator["default"].wrap(function _callee8$(_context8) {
493
- while (1) switch (_context8.prev = _context8.next) {
506
+ return _regenerator["default"].wrap(function _callee9$(_context9) {
507
+ while (1) switch (_context9.prev = _context9.next) {
494
508
  case 0:
495
509
  zipBuffer = _fs2["default"].readFileSync(zipFile);
496
- _context8.next = 3;
510
+ _context9.next = 3;
497
511
  return _jszip["default"].loadAsync(zipBuffer);
498
512
  case 3:
499
- zip = _context8.sent;
513
+ zip = _context9.sent;
500
514
  fileNames = [];
501
- _context8.next = 7;
515
+ _context9.next = 7;
502
516
  return Promise.all(Object.keys(zip.files).filter(function (filename) {
503
517
  // 忽略目录、扩展文件或不需要的文件
504
518
  var isDirectory = zip.files[filename].dir;
@@ -506,18 +520,18 @@ var unZipAndSaveFile = /*#__PURE__*/function () {
506
520
  // 忽略以.开头的文件(隐藏文件)
507
521
  filename.includes('Thumbs.db'); // 忽略 Windows 的缩略图数据库文件
508
522
 
509
- var isImageOrVideo = type === 'image' ? imageExtensions.includes(_path2["default"].extname(filename)) : videoExtensions.includes(_path2["default"].extname(filename));
510
- return !isDirectory && !isExtensionFile && isImageOrVideo;
523
+ var isUserDataFile = type === 'image' ? imageExtensions.includes(_path2["default"].extname(filename)) : type === 'video' ? videoExtensions.includes(_path2["default"].extname(filename)) : audioExtensions.includes(_path2["default"].extname(filename));
524
+ return !isDirectory && !isExtensionFile && isUserDataFile;
511
525
  }).map(/*#__PURE__*/function () {
512
- var _ref10 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7(filenameTmp) {
526
+ var _ref11 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee8(filenameTmp) {
513
527
  var fileData, realFileName, outputFile;
514
- return _regenerator["default"].wrap(function _callee7$(_context7) {
515
- while (1) switch (_context7.prev = _context7.next) {
528
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
529
+ while (1) switch (_context8.prev = _context8.next) {
516
530
  case 0:
517
- _context7.next = 2;
531
+ _context8.next = 2;
518
532
  return zip.files[filenameTmp].async('nodebuffer');
519
533
  case 2:
520
- fileData = _context7.sent;
534
+ fileData = _context8.sent;
521
535
  realFileName = _path2["default"].basename(filenameTmp);
522
536
  outputFile = _path2["default"].resolve(outputPath, realFileName);
523
537
  _fs2["default"].mkdirSync(_path2["default"].dirname(outputFile), {
@@ -527,26 +541,26 @@ var unZipAndSaveFile = /*#__PURE__*/function () {
527
541
  fileNames.push(outputFile);
528
542
  case 8:
529
543
  case "end":
530
- return _context7.stop();
544
+ return _context8.stop();
531
545
  }
532
- }, _callee7);
546
+ }, _callee8);
533
547
  }));
534
- return function (_x9) {
535
- return _ref10.apply(this, arguments);
548
+ return function (_x10) {
549
+ return _ref11.apply(this, arguments);
536
550
  };
537
551
  }()));
538
552
  case 7:
539
553
  // 删除 zip 文件
540
554
  _fs2["default"].unlinkSync(zipFile);
541
- return _context8.abrupt("return", fileNames);
555
+ return _context9.abrupt("return", fileNames);
542
556
  case 9:
543
557
  case "end":
544
- return _context8.stop();
558
+ return _context9.stop();
545
559
  }
546
- }, _callee8);
560
+ }, _callee9);
547
561
  }));
548
- return function unZipAndSaveFile(_x6, _x7, _x8) {
549
- return _ref9.apply(this, arguments);
562
+ return function unZipAndSaveFile(_x7, _x8, _x9) {
563
+ return _ref10.apply(this, arguments);
550
564
  };
551
565
  }();
552
566
 
@@ -585,27 +599,27 @@ function getSpecificFiles(directory, extensions, fileName) {
585
599
  return [];
586
600
  }
587
601
  }
588
- function downloadFile(_x10, _x11) {
602
+ function downloadFile(_x11, _x12) {
589
603
  return _downloadFile.apply(this, arguments);
590
604
  } // 获取资源
591
605
  function _downloadFile() {
592
- _downloadFile = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee10(url, destination) {
593
- return _regenerator["default"].wrap(function _callee10$(_context10) {
594
- while (1) switch (_context10.prev = _context10.next) {
606
+ _downloadFile = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee11(url, destination) {
607
+ return _regenerator["default"].wrap(function _callee11$(_context11) {
608
+ while (1) switch (_context11.prev = _context11.next) {
595
609
  case 0:
596
- return _context10.abrupt("return", new Promise(function (resolve, reject) {
610
+ return _context11.abrupt("return", new Promise(function (resolve, reject) {
597
611
  var request = _remote.net.request(url);
598
612
  request.on('response', function (response) {
599
613
  var fileStream = _fs2["default"].createWriteStream(destination);
600
614
  fileStream.on('finish', function () {
601
615
  resolve();
602
616
  });
603
- response.on('data', function (chunk) {
604
- fileStream.write(chunk);
605
- });
606
617
  response.on('end', function () {
607
618
  fileStream.end();
608
619
  });
620
+ response.on('data', function (chunk) {
621
+ fileStream.write(chunk);
622
+ });
609
623
  response.on('error', function (err) {
610
624
  reject(new Error("Download failed: ".concat(err.message)));
611
625
  });
@@ -617,62 +631,67 @@ function _downloadFile() {
617
631
  }));
618
632
  case 1:
619
633
  case "end":
620
- return _context10.stop();
634
+ return _context11.stop();
621
635
  }
622
- }, _callee10);
636
+ }, _callee11);
623
637
  }));
624
638
  return _downloadFile.apply(this, arguments);
625
639
  }
626
- var getVirtualBgResource = exports.getVirtualBgResource = /*#__PURE__*/function () {
627
- var _ref11 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee9(url, md5Url, type) {
628
- var resourcePath, extensions, cachedFiles, zipFileName, zipCacheDir, zipFiles, tempZipPath, zipPath;
629
- return _regenerator["default"].wrap(function _callee9$(_context9) {
630
- while (1) switch (_context9.prev = _context9.next) {
640
+ var getResourceByFileType = exports.getResourceByFileType = /*#__PURE__*/function () {
641
+ var _ref12 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee10(url, md5Url, type) {
642
+ var resourcePath, extensionMap, extensions, cachedFiles, zipFileName, zipCacheDir, zipFiles, tempZipPath, zipPath;
643
+ return _regenerator["default"].wrap(function _callee10$(_context10) {
644
+ while (1) switch (_context10.prev = _context10.next) {
631
645
  case 0:
632
646
  resourcePath = getResourcePath(type, md5Url);
633
- extensions = type === 'image' ? imageExtensions : videoExtensions; // 已有背景文件,直接使用
647
+ extensionMap = {
648
+ image: imageExtensions,
649
+ video: videoExtensions,
650
+ audio: audioExtensions
651
+ };
652
+ extensions = extensionMap[type]; // 已有背景文件,直接使用
634
653
  cachedFiles = getSpecificFiles(resourcePath, extensions);
635
654
  if (!(cachedFiles.length > 0)) {
636
- _context9.next = 5;
655
+ _context10.next = 6;
637
656
  break;
638
657
  }
639
- return _context9.abrupt("return", cachedFiles);
640
- case 5:
658
+ return _context10.abrupt("return", cachedFiles);
659
+ case 6:
641
660
  // 已有 zip
642
661
  zipFileName = "".concat(md5Url, ".zip");
643
662
  zipCacheDir = getZipCachePath(type);
644
663
  zipFiles = getSpecificFiles(zipCacheDir, zipExtensions, zipFileName); // 没有 zip,需要下载
645
664
  if (!(zipFiles.length <= 0)) {
646
- _context9.next = 15;
665
+ _context10.next = 16;
647
666
  break;
648
667
  }
649
668
  tempZipPath = _path2["default"].resolve("".concat(zipCacheDir, "/").concat(md5Url, ".temp"));
650
669
  zipPath = _path2["default"].resolve("".concat(zipCacheDir, "/").concat(zipFileName));
651
- _context9.next = 13;
670
+ _context10.next = 14;
652
671
  return downloadFile(url, tempZipPath);
653
- case 13:
672
+ case 14:
654
673
  // temp 文件重命名为 zip
655
674
  _fs2["default"].renameSync(tempZipPath, zipPath);
656
675
  zipFiles = getSpecificFiles(zipCacheDir, zipExtensions, zipFileName);
657
- case 15:
676
+ case 16:
658
677
  if (!(!zipFiles || zipFiles.length <= 0)) {
659
- _context9.next = 17;
678
+ _context10.next = 18;
660
679
  break;
661
680
  }
662
- return _context9.abrupt("return", []);
663
- case 17:
664
- _context9.next = 19;
681
+ return _context10.abrupt("return", []);
682
+ case 18:
683
+ _context10.next = 20;
665
684
  return unZipAndSaveFile(zipFiles[0], resourcePath, type);
666
- case 19:
667
- return _context9.abrupt("return", _context9.sent);
668
685
  case 20:
686
+ return _context10.abrupt("return", _context10.sent);
687
+ case 21:
669
688
  case "end":
670
- return _context9.stop();
689
+ return _context10.stop();
671
690
  }
672
- }, _callee9);
691
+ }, _callee10);
673
692
  }));
674
- return function getVirtualBgResource(_x12, _x13, _x14) {
675
- return _ref11.apply(this, arguments);
693
+ return function getResourceByFileType(_x13, _x14, _x15) {
694
+ return _ref12.apply(this, arguments);
676
695
  };
677
696
  }();
678
697
 
@@ -683,6 +702,8 @@ var fileToBase64 = exports.fileToBase64 = function fileToBase64(file, type) {
683
702
  });
684
703
  if (type === 'video') {
685
704
  return "data:video/mp4;base64,".concat(data);
705
+ } else if (type === 'audio') {
706
+ return "data:audio/mp3;base64,".concat(data);
686
707
  } else {
687
708
  return "data:image/jpeg;base64,".concat(data);
688
709
  }
@@ -702,4 +723,8 @@ var getMediaSourceIdList = exports.getMediaSourceIdList = function getMediaSourc
702
723
  };
703
724
  var setInMeetingState = exports.setInMeetingState = function setInMeetingState(state) {
704
725
  _electron.ipcRenderer.send('set-in-meeting-state', state);
726
+ };
727
+ var restartApp = exports.restartApp = function restartApp() {
728
+ _remote.app.relaunch();
729
+ _remote.app.exit(0);
705
730
  };
@@ -33,7 +33,9 @@ var LoggerManager = /*#__PURE__*/function () {
33
33
  var transports = [];
34
34
  if (logFilePath) {
35
35
  transports.push(new _winston["default"].transports.File({
36
- filename: logFilePath
36
+ filename: logFilePath,
37
+ maxFiles: 5,
38
+ maxsize: 1048576 //1MB
37
39
  }));
38
40
  }
39
41
  if (enableConsole) {