@trtc/calls-uikit-react 4.1.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 (426) hide show
  1. package/README-zh_CN.md +97 -0
  2. package/README.md +104 -0
  3. package/debug/GenerateTestUserSig-es.js +26 -0
  4. package/debug/lib-generate-test-usersig-es.min.js +2 -0
  5. package/package.json +42 -0
  6. package/src/Components/TUICallKit/TUICallKit.module.scss +21 -0
  7. package/src/Components/TUICallKit/TUICallKit.tsx +267 -0
  8. package/src/Components/TUICallKit/index.ts +3 -0
  9. package/src/Components/assets/base/close.svg +1 -0
  10. package/src/Components/assets/base/error.svg +1 -0
  11. package/src/Components/assets/base/info.svg +1 -0
  12. package/src/Components/assets/base/loading-circle.svg +1 -0
  13. package/src/Components/assets/base/success.svg +1 -0
  14. package/src/Components/assets/base/waring.svg +1 -0
  15. package/src/Components/assets/button/accept.svg +10 -0
  16. package/src/Components/assets/button/backgroundBlurClose.svg +3 -0
  17. package/src/Components/assets/button/backgroundBlurOpen.svg +3 -0
  18. package/src/Components/assets/button/camera-close.svg +8 -0
  19. package/src/Components/assets/button/camera-open.svg +3 -0
  20. package/src/Components/assets/button/desktop/arrow.png +0 -0
  21. package/src/Components/assets/button/desktop/fullScreen.svg +4 -0
  22. package/src/Components/assets/button/desktop/minimize.svg +6 -0
  23. package/src/Components/assets/button/hangup.svg +3 -0
  24. package/src/Components/assets/button/microphone-close.svg +4 -0
  25. package/src/Components/assets/button/microphone-open.svg +4 -0
  26. package/src/Components/assets/button/mobile/down.svg +4 -0
  27. package/src/Components/assets/button/mobile/minimize.svg +4 -0
  28. package/src/Components/assets/button/mobile/switch-camera.svg +3 -0
  29. package/src/Components/assets/button/mobile/up.svg +4 -0
  30. package/src/Components/assets/button/speaker-close.svg +4 -0
  31. package/src/Components/assets/button/speaker-open.svg +3 -0
  32. package/src/Components/assets/button/switch-audio.svg +3 -0
  33. package/src/Components/assets/callMessage/audioCall.svg +3 -0
  34. package/src/Components/assets/callMessage/videoCall.svg +3 -0
  35. package/src/Components/assets/common/defaultAvatar.svg +11 -0
  36. package/src/Components/assets/common/microphone-volumn-close.svg +9 -0
  37. package/src/Components/assets/floatingWindow/desktop/floatCallEnd.svg +3 -0
  38. package/src/Components/assets/floatingWindow/desktop/floatFullScreen.svg +3 -0
  39. package/src/Components/assets/floatingWindow/desktop/floatMicrophone.svg +4 -0
  40. package/src/Components/assets/floatingWindow/desktop/floatMicrophoneClosed.svg +3 -0
  41. package/src/Components/assets/floatingWindow/mobile/camera-close.svg +14 -0
  42. package/src/Components/assets/floatingWindow/mobile/camera-open.svg +14 -0
  43. package/src/Components/assets/floatingWindow/mobile/earphone.svg +3 -0
  44. package/src/Components/assets/floatingWindow/mobile/microphone-close.svg +4 -0
  45. package/src/Components/assets/floatingWindow/mobile/microphone-open.svg +4 -0
  46. package/src/Components/assets/permission/desktop/index.ts +11 -0
  47. package/src/Components/assets/permission/desktop/mac/permit-en.jpg +0 -0
  48. package/src/Components/assets/permission/desktop/mac/permit-zh.jpg +0 -0
  49. package/src/Components/assets/permission/desktop/win/permit-en.png +0 -0
  50. package/src/Components/assets/permission/desktop/win/permit-zh.png +0 -0
  51. package/src/Components/assets/streamInfo/mobile/microphone-close-group.svg +19 -0
  52. package/src/Components/assets/streamInfo/mobile/microphone-close-single.svg +6 -0
  53. package/src/Components/assets/streamInfo/mobile/volumn.svg +20 -0
  54. package/src/Components/assets/streamInfo/networkStatus.svg +22 -0
  55. package/src/Components/components/GroupCall/GroupCall.module.scss +13 -0
  56. package/src/Components/components/GroupCall/GroupCall.tsx +82 -0
  57. package/src/Components/components/GroupCall/MediaContainer/AudioStream/AudioStream.tsx +41 -0
  58. package/src/Components/components/GroupCall/MediaContainer/MediaContainer.module.scss +74 -0
  59. package/src/Components/components/GroupCall/MediaContainer/MediaContainer.tsx +138 -0
  60. package/src/Components/components/GroupCall/MediaContainer/StreamLoading/StreamLoading.tsx +48 -0
  61. package/src/Components/components/GroupCall/MediaContainer/index.ts +3 -0
  62. package/src/Components/components/GroupCall/Waiting/Waiting.module.scss +44 -0
  63. package/src/Components/components/GroupCall/Waiting/Waiting.tsx +89 -0
  64. package/src/Components/components/SingleCall/MediaContainer/AudioStream/AudioStream.tsx +86 -0
  65. package/src/Components/components/SingleCall/MediaContainer/MediaContainer.module.scss +33 -0
  66. package/src/Components/components/SingleCall/MediaContainer/MediaContainer.tsx +121 -0
  67. package/src/Components/components/SingleCall/MediaContainer/hooks/useGetLargeViewName.ts +29 -0
  68. package/src/Components/components/SingleCall/MediaContainer/index.ts +3 -0
  69. package/src/Components/components/SingleCall/SingleCall.module.scss +28 -0
  70. package/src/Components/components/SingleCall/SingleCall.tsx +54 -0
  71. package/src/Components/components/SingleCall/Waiting/Waiting.module.scss +3 -0
  72. package/src/Components/components/SingleCall/Waiting/Waiting.tsx +45 -0
  73. package/src/Components/components/base/Avatar/Avatar.scss +28 -0
  74. package/src/Components/components/base/Avatar/Avatar.tsx +52 -0
  75. package/src/Components/components/base/Avatar/index.ts +3 -0
  76. package/src/Components/components/base/Button/Button.scss +122 -0
  77. package/src/Components/components/base/Button/Button.tsx +107 -0
  78. package/src/Components/components/base/Button/index.ts +3 -0
  79. package/src/Components/components/base/Drag/Drag.tsx +155 -0
  80. package/src/Components/components/base/Drag/index.tsx +3 -0
  81. package/src/Components/components/base/Grid/Col/Col.scss +31 -0
  82. package/src/Components/components/base/Grid/Col/Col.tsx +52 -0
  83. package/src/Components/components/base/Grid/Col/index.ts +3 -0
  84. package/src/Components/components/base/Grid/Row/Row.scss +27 -0
  85. package/src/Components/components/base/Grid/Row/Row.tsx +51 -0
  86. package/src/Components/components/base/Grid/Row/index.ts +5 -0
  87. package/src/Components/components/base/Grid/style/mixin.scss +61 -0
  88. package/src/Components/components/base/GridLayout/GridLayout.tsx +189 -0
  89. package/src/Components/components/base/GridLayout/GridPlusItem/GridPlusItem.scss +11 -0
  90. package/src/Components/components/base/GridLayout/GridPlusItem/GridPlusItem.tsx +37 -0
  91. package/src/Components/components/base/GridLayout/index.ts +7 -0
  92. package/src/Components/components/base/Icon/Icon.tsx +25 -0
  93. package/src/Components/components/base/Loading/Circle/Cilrcle.tsx +20 -0
  94. package/src/Components/components/base/Loading/Circle/Circle.scss +29 -0
  95. package/src/Components/components/base/Loading/Dot/Dot.scss +69 -0
  96. package/src/Components/components/base/Loading/Dot/Dot.tsx +21 -0
  97. package/src/Components/components/base/Loading/Loading.scss +22 -0
  98. package/src/Components/components/base/Loading/Loading.tsx +47 -0
  99. package/src/Components/components/base/Loading/index.ts +3 -0
  100. package/src/Components/components/base/Message/Message.scss +61 -0
  101. package/src/Components/components/base/Message/Message.tsx +94 -0
  102. package/src/Components/components/base/Message/MessageIcon/Error.tsx +7 -0
  103. package/src/Components/components/base/Message/MessageIcon/Info.tsx +7 -0
  104. package/src/Components/components/base/Message/MessageIcon/Success.tsx +8 -0
  105. package/src/Components/components/base/Message/MessageIcon/Warning.tsx +7 -0
  106. package/src/Components/components/base/Message/MessagePlugin.tsx +148 -0
  107. package/src/Components/components/base/Overlayer/Overlayer.scss +17 -0
  108. package/src/Components/components/base/Overlayer/Overlayer.tsx +49 -0
  109. package/src/Components/components/base/Popup/Popup.scss +34 -0
  110. package/src/Components/components/base/Popup/Popup.tsx +91 -0
  111. package/src/Components/components/base/Popup/hooks/useTrigger.tsx +67 -0
  112. package/src/Components/components/base/Portal/Portal.tsx +74 -0
  113. package/src/Components/components/base/Text/Text.scss +15 -0
  114. package/src/Components/components/base/Text/Text.tsx +30 -0
  115. package/src/Components/components/base/Time/Time.scss +14 -0
  116. package/src/Components/components/base/Time/Time.tsx +13 -0
  117. package/src/Components/components/base/ToggleWindow/ToggleWindow.scss +9 -0
  118. package/src/Components/components/base/ToggleWindow/ToggleWindow.tsx +83 -0
  119. package/src/Components/components/base/ToggleWindow/ToggleWindowItem/ToggleWindowItem.scss +51 -0
  120. package/src/Components/components/base/ToggleWindow/ToggleWindowItem/ToggleWindowItem.tsx +50 -0
  121. package/src/Components/components/base/ToggleWindow/index.ts +7 -0
  122. package/src/Components/components/base/common.ts +13 -0
  123. package/src/Components/components/base/hooks/useControlled.ts +31 -0
  124. package/src/Components/components/base/hooks/useDrag.ts +96 -0
  125. package/src/Components/components/base/hooks/useListenerEvent.ts +37 -0
  126. package/src/Components/components/base/hooks/useMutationObserver.ts +38 -0
  127. package/src/Components/components/base/hooks/useOnClickOutSide.ts +24 -0
  128. package/src/Components/components/base/util/index.ts +26 -0
  129. package/src/Components/components/common/ButtonPanel/ButtonPanel.tsx +127 -0
  130. package/src/Components/components/common/ButtonPanel/ButtonPanelH5/ButtonPanelH5.module.scss +67 -0
  131. package/src/Components/components/common/ButtonPanel/ButtonPanelH5/ButtonPanelH5.tsx +153 -0
  132. package/src/Components/components/common/ButtonPanel/ButtonPanelPC/ButtonPanelPC.module.scss +9 -0
  133. package/src/Components/components/common/ButtonPanel/ButtonPanelPC/ButtonPanelPC.tsx +32 -0
  134. package/src/Components/components/common/ButtonPanel/button/Accept/Accept.module.scss +7 -0
  135. package/src/Components/components/common/ButtonPanel/button/Accept/Accept.tsx +39 -0
  136. package/src/Components/components/common/ButtonPanel/button/Accept/index.ts +3 -0
  137. package/src/Components/components/common/ButtonPanel/button/BackgroundBlur/BackgroundBlur.module.scss +15 -0
  138. package/src/Components/components/common/ButtonPanel/button/BackgroundBlur/BackgroundBlur.tsx +46 -0
  139. package/src/Components/components/common/ButtonPanel/button/BackgroundBlur/index.ts +3 -0
  140. package/src/Components/components/common/ButtonPanel/button/Camera.tsx +81 -0
  141. package/src/Components/components/common/ButtonPanel/button/FullScreen/FullScreen.module.scss +13 -0
  142. package/src/Components/components/common/ButtonPanel/button/FullScreen/FullScreen.tsx +26 -0
  143. package/src/Components/components/common/ButtonPanel/button/FullScreen/index.ts +3 -0
  144. package/src/Components/components/common/ButtonPanel/button/Hangup/Hangup.module.scss +7 -0
  145. package/src/Components/components/common/ButtonPanel/button/Hangup/Hangup.tsx +42 -0
  146. package/src/Components/components/common/ButtonPanel/button/Hangup/index.ts +3 -0
  147. package/src/Components/components/common/ButtonPanel/button/Microphone.tsx +78 -0
  148. package/src/Components/components/common/ButtonPanel/button/Minimize/Minimize.module.scss +23 -0
  149. package/src/Components/components/common/ButtonPanel/button/Minimize/Minimize.tsx +35 -0
  150. package/src/Components/components/common/ButtonPanel/button/Minimize/index.ts +3 -0
  151. package/src/Components/components/common/ButtonPanel/button/Reject/Reject.module.scss +7 -0
  152. package/src/Components/components/common/ButtonPanel/button/Reject/Reject.tsx +39 -0
  153. package/src/Components/components/common/ButtonPanel/button/Reject/index.ts +3 -0
  154. package/src/Components/components/common/ButtonPanel/button/Speaker.tsx +75 -0
  155. package/src/Components/components/common/ButtonPanel/button/SwitchAudioCall.tsx +32 -0
  156. package/src/Components/components/common/ButtonPanel/button/SwitchCamera.tsx +19 -0
  157. package/src/Components/components/common/ButtonPanel/button/common.module.scss +51 -0
  158. package/src/Components/components/common/ButtonPanel/config.ts +505 -0
  159. package/src/Components/components/common/ButtonPanel/index.ts +3 -0
  160. package/src/Components/components/common/CallMessage/CallMessage.tsx +18 -0
  161. package/src/Components/components/common/CallMessage/CallMessageC2C/CallMessageC2C.module.scss +19 -0
  162. package/src/Components/components/common/CallMessage/CallMessageC2C/CallMessageC2C.tsx +84 -0
  163. package/src/Components/components/common/CallMessage/CallMessageGroup/CallMessageGroup.module.scss +5 -0
  164. package/src/Components/components/common/CallMessage/CallMessageGroup/CallMessageGroup.tsx +37 -0
  165. package/src/Components/components/common/CallMessage/index.ts +3 -0
  166. package/src/Components/components/common/DeviceSelector/DeviceSelector.module.scss +62 -0
  167. package/src/Components/components/common/DeviceSelector/DeviceSelector.tsx +105 -0
  168. package/src/Components/components/common/FloatingWindow/FloatingWindow.tsx +37 -0
  169. package/src/Components/components/common/FloatingWindow/FloatingWindowGroupCall/FloatingWindowGroupCall.tsx +97 -0
  170. package/src/Components/components/common/FloatingWindow/FloatingWindowGroupCall/style/FloatingWindowGroupCall.module.scss +2 -0
  171. package/src/Components/components/common/FloatingWindow/FloatingWindowGroupCall/style/mobile.module.scss +126 -0
  172. package/src/Components/components/common/FloatingWindow/FloatingWindowGroupCall/style/pc.module.scss +126 -0
  173. package/src/Components/components/common/FloatingWindow/FloatingWindowSingleCall/FloatingWindowSingleCall.tsx +75 -0
  174. package/src/Components/components/common/FloatingWindow/FloatingWindowSingleCall/style/FloatingWindowSingleCall.module.scss +2 -0
  175. package/src/Components/components/common/FloatingWindow/FloatingWindowSingleCall/style/mobile.module.scss +117 -0
  176. package/src/Components/components/common/FloatingWindow/FloatingWindowSingleCall/style/pc.module.scss +123 -0
  177. package/src/Components/components/common/FloatingWindow/index.ts +3 -0
  178. package/src/Components/components/common/MicrophoneVolumn/MicrophoneVolumn.module.scss +9 -0
  179. package/src/Components/components/common/MicrophoneVolumn/MicrophoneVolumn.tsx +50 -0
  180. package/src/Components/components/common/OverlayStream/OverlayStream.module.scss +165 -0
  181. package/src/Components/components/common/OverlayStream/OverlayStream.tsx +119 -0
  182. package/src/Components/components/common/Player/Player.module.scss +11 -0
  183. package/src/Components/components/common/Player/Player.tsx +75 -0
  184. package/src/Components/components/common/Pusher/Pusher.module.scss +10 -0
  185. package/src/Components/components/common/Pusher/Pusher.tsx +96 -0
  186. package/src/Components/components/common/StreamInfo/StreamInfo.tsx +10 -0
  187. package/src/Components/components/common/StreamInfo/StreamInfoH5/StreamInfoH5.module.scss +21 -0
  188. package/src/Components/components/common/StreamInfo/StreamInfoH5/StreamInfoH5.tsx +95 -0
  189. package/src/Components/components/common/StreamInfo/StreamInfoPC/StreamInfoPC.module.scss +38 -0
  190. package/src/Components/components/common/StreamInfo/StreamInfoPC/StreamInfoPC.tsx +35 -0
  191. package/src/Components/components/common/StreamInfo/index.ts +3 -0
  192. package/src/Components/components/common/Tip/Tip.tsx +68 -0
  193. package/src/Components/components/common/TopBar/TopBar.tsx +17 -0
  194. package/src/Components/components/common/TopBar/h5/TopBarH5.module.scss +12 -0
  195. package/src/Components/components/common/TopBar/h5/TopBarH5.tsx +40 -0
  196. package/src/Components/components/common/TopBar/pc/TopBarPC.module.scss +8 -0
  197. package/src/Components/components/common/TopBar/pc/TopBarPC.tsx +36 -0
  198. package/src/Components/const/common.ts +15 -0
  199. package/src/Components/context/CallUserInfoContext.ts +21 -0
  200. package/src/Components/context/CallerUserInfoContext.ts +11 -0
  201. package/src/Components/context/CustomUIConfigContext.ts +6 -0
  202. package/src/Components/context/FocusItemContext.ts +13 -0
  203. package/src/Components/context/IsClickableContext.ts +5 -0
  204. package/src/Components/context/TranslateContext.ts +6 -0
  205. package/src/Components/context/UserInfoContext.ts +9 -0
  206. package/src/Components/context/index.ts +17 -0
  207. package/src/Components/hooks/index.ts +9 -0
  208. package/src/Components/hooks/useCallDuration.ts +34 -0
  209. package/src/Components/hooks/useCustomButtonUIConfig.ts +27 -0
  210. package/src/Components/hooks/useDeviceList.ts +53 -0
  211. package/src/Components/hooks/useGetSpeakers.ts +69 -0
  212. package/src/Components/hooks/useGetVolumeMap.ts +67 -0
  213. package/src/Components/hooks/useNetWorkStatus.ts +34 -0
  214. package/src/Components/hooks/useTranslate.ts +7 -0
  215. package/src/Components/hooks/useViewBackgroundConfig.ts +8 -0
  216. package/src/Components/style/common/mixin.scss +22 -0
  217. package/src/Components/style/common/var.scss +21 -0
  218. package/src/Components/style/index.scss +5 -0
  219. package/src/Components/style/theme/_dark.scss +56 -0
  220. package/src/Components/style/theme/_light.scss +56 -0
  221. package/src/Components/style/theme/_util.scss +79 -0
  222. package/src/Components/style/theme/color.scss +23 -0
  223. package/src/Components/util/classnames.ts +35 -0
  224. package/src/Components/util/index.ts +138 -0
  225. package/src/Components/util/uiDesign.ts +45 -0
  226. package/src/TUICallService/CallService/UIDesign.ts +174 -0
  227. package/src/TUICallService/CallService/bellContext.ts +88 -0
  228. package/src/TUICallService/CallService/chatCombine.ts +313 -0
  229. package/src/TUICallService/CallService/engineEventHandler.ts +404 -0
  230. package/src/TUICallService/CallService/index.ts +797 -0
  231. package/src/TUICallService/CallService/miniProgram.ts +65 -0
  232. package/src/TUICallService/CallService/utils.ts +281 -0
  233. package/src/TUICallService/TUIGlobal/tuiGlobal.ts +43 -0
  234. package/src/TUICallService/TUIStore/callStore.ts +93 -0
  235. package/src/TUICallService/TUIStore/tuiStore.ts +167 -0
  236. package/src/TUICallService/assets/phone_dialing.mp3 +0 -0
  237. package/src/TUICallService/assets/phone_ringing.mp3 +0 -0
  238. package/src/TUICallService/const/call.ts +157 -0
  239. package/src/TUICallService/const/error.ts +20 -0
  240. package/src/TUICallService/const/index.ts +103 -0
  241. package/src/TUICallService/const/log.ts +9 -0
  242. package/src/TUICallService/index.ts +37 -0
  243. package/src/TUICallService/interface/ICallService.ts +70 -0
  244. package/src/TUICallService/interface/ICallStore.ts +55 -0
  245. package/src/TUICallService/interface/ITUIGlobal.ts +36 -0
  246. package/src/TUICallService/interface/ITUIStore.ts +87 -0
  247. package/src/TUICallService/interface/index.ts +4 -0
  248. package/src/TUICallService/locales/en.ts +135 -0
  249. package/src/TUICallService/locales/index.ts +61 -0
  250. package/src/TUICallService/locales/ja_JP.ts +134 -0
  251. package/src/TUICallService/locales/zh-cn.ts +130 -0
  252. package/src/TUICallService/serve/callManager.ts +109 -0
  253. package/src/TUICallService/utils/common-utils.ts +269 -0
  254. package/src/TUICallService/utils/decorators/promise-retry.ts +51 -0
  255. package/src/TUICallService/utils/env.ts +51 -0
  256. package/src/TUICallService/utils/index.ts +32 -0
  257. package/src/TUICallService/utils/is-empty.ts +31 -0
  258. package/src/TUICallService/utils/retry.ts +88 -0
  259. package/src/TUICallService/utils/timer.ts +162 -0
  260. package/src/TUICallService/utils/validate/avoidRepeatedCall.ts +39 -0
  261. package/src/TUICallService/utils/validate/index.ts +7 -0
  262. package/src/TUICallService/utils/validate/validateConfig.ts +188 -0
  263. package/src/TUICallService/utils/validate/validateParams.ts +88 -0
  264. package/src/TUICallService/utils/validate/validateStatus.ts +26 -0
  265. package/src/image.d.ts +8 -0
  266. package/src/index.ts +63 -0
  267. package/src/style.d.ts +1 -0
  268. package/tuicall-uikit-react.es.js +13177 -0
  269. package/tuicall-uikit-react.umd.js +133 -0
  270. package/types/Components/TUICallKit/TUICallKit.d.ts +15 -0
  271. package/types/Components/TUICallKit/index.d.ts +2 -0
  272. package/types/Components/assets/permission/desktop/index.d.ts +5 -0
  273. package/types/Components/components/GroupCall/GroupCall.d.ts +1 -0
  274. package/types/Components/components/GroupCall/MediaContainer/AudioStream/AudioStream.d.ts +10 -0
  275. package/types/Components/components/GroupCall/MediaContainer/MediaContainer.d.ts +1 -0
  276. package/types/Components/components/GroupCall/MediaContainer/StreamLoading/StreamLoading.d.ts +7 -0
  277. package/types/Components/components/GroupCall/MediaContainer/index.d.ts +2 -0
  278. package/types/Components/components/GroupCall/Waiting/Waiting.d.ts +8 -0
  279. package/types/Components/components/SingleCall/MediaContainer/AudioStream/AudioStream.d.ts +11 -0
  280. package/types/Components/components/SingleCall/MediaContainer/MediaContainer.d.ts +1 -0
  281. package/types/Components/components/SingleCall/MediaContainer/hooks/useGetLargeViewName.d.ts +3 -0
  282. package/types/Components/components/SingleCall/MediaContainer/index.d.ts +2 -0
  283. package/types/Components/components/SingleCall/SingleCall.d.ts +3 -0
  284. package/types/Components/components/SingleCall/Waiting/Waiting.d.ts +9 -0
  285. package/types/Components/components/base/Avatar/Avatar.d.ts +12 -0
  286. package/types/Components/components/base/Avatar/index.d.ts +2 -0
  287. package/types/Components/components/base/Button/Button.d.ts +25 -0
  288. package/types/Components/components/base/Button/index.d.ts +2 -0
  289. package/types/Components/components/base/Drag/Drag.d.ts +14 -0
  290. package/types/Components/components/base/Drag/index.d.ts +2 -0
  291. package/types/Components/components/base/Grid/Col/Col.d.ts +14 -0
  292. package/types/Components/components/base/Grid/Col/index.d.ts +2 -0
  293. package/types/Components/components/base/Grid/Row/Row.d.ts +14 -0
  294. package/types/Components/components/base/Grid/Row/index.d.ts +3 -0
  295. package/types/Components/components/base/GridLayout/GridLayout.d.ts +11 -0
  296. package/types/Components/components/base/GridLayout/GridPlusItem/GridPlusItem.d.ts +14 -0
  297. package/types/Components/components/base/GridLayout/index.d.ts +3 -0
  298. package/types/Components/components/base/Icon/Icon.d.ts +9 -0
  299. package/types/Components/components/base/Loading/Circle/Cilrcle.d.ts +6 -0
  300. package/types/Components/components/base/Loading/Dot/Dot.d.ts +6 -0
  301. package/types/Components/components/base/Loading/Loading.d.ts +14 -0
  302. package/types/Components/components/base/Loading/index.d.ts +2 -0
  303. package/types/Components/components/base/Message/Message.d.ts +16 -0
  304. package/types/Components/components/base/Message/MessageIcon/Error.d.ts +1 -0
  305. package/types/Components/components/base/Message/MessageIcon/Info.d.ts +1 -0
  306. package/types/Components/components/base/Message/MessageIcon/Success.d.ts +1 -0
  307. package/types/Components/components/base/Message/MessageIcon/Warning.d.ts +1 -0
  308. package/types/Components/components/base/Message/MessagePlugin.d.ts +14 -0
  309. package/types/Components/components/base/Overlayer/Overlayer.d.ts +14 -0
  310. package/types/Components/components/base/Popup/Popup.d.ts +13 -0
  311. package/types/Components/components/base/Popup/hooks/useTrigger.d.ts +10 -0
  312. package/types/Components/components/base/Portal/Portal.d.ts +19 -0
  313. package/types/Components/components/base/Text/Text.d.ts +10 -0
  314. package/types/Components/components/base/Time/Time.d.ts +7 -0
  315. package/types/Components/components/base/ToggleWindow/ToggleWindow.d.ts +15 -0
  316. package/types/Components/components/base/ToggleWindow/ToggleWindowItem/ToggleWindowItem.d.ts +14 -0
  317. package/types/Components/components/base/ToggleWindow/index.d.ts +3 -0
  318. package/types/Components/components/base/common.d.ts +7 -0
  319. package/types/Components/components/base/hooks/useControlled.d.ts +8 -0
  320. package/types/Components/components/base/hooks/useDrag.d.ts +6 -0
  321. package/types/Components/components/base/hooks/useListenerEvent.d.ts +13 -0
  322. package/types/Components/components/base/hooks/useMutationObserver.d.ts +4 -0
  323. package/types/Components/components/base/hooks/useOnClickOutSide.d.ts +1 -0
  324. package/types/Components/components/base/util/index.d.ts +5 -0
  325. package/types/Components/components/common/ButtonPanel/ButtonPanel.d.ts +1 -0
  326. package/types/Components/components/common/ButtonPanel/ButtonPanelH5/ButtonPanelH5.d.ts +8 -0
  327. package/types/Components/components/common/ButtonPanel/ButtonPanelPC/ButtonPanelPC.d.ts +6 -0
  328. package/types/Components/components/common/ButtonPanel/button/Accept/Accept.d.ts +5 -0
  329. package/types/Components/components/common/ButtonPanel/button/Accept/index.d.ts +2 -0
  330. package/types/Components/components/common/ButtonPanel/button/BackgroundBlur/BackgroundBlur.d.ts +1 -0
  331. package/types/Components/components/common/ButtonPanel/button/BackgroundBlur/index.d.ts +2 -0
  332. package/types/Components/components/common/ButtonPanel/button/Camera.d.ts +5 -0
  333. package/types/Components/components/common/ButtonPanel/button/FullScreen/FullScreen.d.ts +5 -0
  334. package/types/Components/components/common/ButtonPanel/button/FullScreen/index.d.ts +2 -0
  335. package/types/Components/components/common/ButtonPanel/button/Hangup/Hangup.d.ts +5 -0
  336. package/types/Components/components/common/ButtonPanel/button/Hangup/index.d.ts +2 -0
  337. package/types/Components/components/common/ButtonPanel/button/Microphone.d.ts +5 -0
  338. package/types/Components/components/common/ButtonPanel/button/Minimize/Minimize.d.ts +1 -0
  339. package/types/Components/components/common/ButtonPanel/button/Minimize/index.d.ts +2 -0
  340. package/types/Components/components/common/ButtonPanel/button/Reject/Reject.d.ts +5 -0
  341. package/types/Components/components/common/ButtonPanel/button/Reject/index.d.ts +2 -0
  342. package/types/Components/components/common/ButtonPanel/button/Speaker.d.ts +5 -0
  343. package/types/Components/components/common/ButtonPanel/button/SwitchAudioCall.d.ts +1 -0
  344. package/types/Components/components/common/ButtonPanel/button/SwitchCamera.d.ts +1 -0
  345. package/types/Components/components/common/ButtonPanel/config.d.ts +254 -0
  346. package/types/Components/components/common/ButtonPanel/index.d.ts +2 -0
  347. package/types/Components/components/common/CallMessage/CallMessage.d.ts +10 -0
  348. package/types/Components/components/common/CallMessage/CallMessageC2C/CallMessageC2C.d.ts +2 -0
  349. package/types/Components/components/common/CallMessage/CallMessageGroup/CallMessageGroup.d.ts +2 -0
  350. package/types/Components/components/common/CallMessage/index.d.ts +2 -0
  351. package/types/Components/components/common/DeviceSelector/DeviceSelector.d.ts +7 -0
  352. package/types/Components/components/common/FloatingWindow/FloatingWindow.d.ts +10 -0
  353. package/types/Components/components/common/FloatingWindow/FloatingWindowGroupCall/FloatingWindowGroupCall.d.ts +9 -0
  354. package/types/Components/components/common/FloatingWindow/FloatingWindowSingleCall/FloatingWindowSingleCall.d.ts +10 -0
  355. package/types/Components/components/common/FloatingWindow/index.d.ts +2 -0
  356. package/types/Components/components/common/MicrophoneVolumn/MicrophoneVolumn.d.ts +8 -0
  357. package/types/Components/components/common/OverlayStream/OverlayStream.d.ts +28 -0
  358. package/types/Components/components/common/Player/Player.d.ts +15 -0
  359. package/types/Components/components/common/Pusher/Pusher.d.ts +13 -0
  360. package/types/Components/components/common/StreamInfo/StreamInfo.d.ts +1 -0
  361. package/types/Components/components/common/StreamInfo/StreamInfoH5/StreamInfoH5.d.ts +10 -0
  362. package/types/Components/components/common/StreamInfo/StreamInfoPC/StreamInfoPC.d.ts +9 -0
  363. package/types/Components/components/common/StreamInfo/index.d.ts +2 -0
  364. package/types/Components/components/common/Tip/Tip.d.ts +7 -0
  365. package/types/Components/components/common/TopBar/TopBar.d.ts +1 -0
  366. package/types/Components/components/common/TopBar/h5/TopBarH5.d.ts +5 -0
  367. package/types/Components/components/common/TopBar/pc/TopBarPC.d.ts +5 -0
  368. package/types/Components/const/common.d.ts +11 -0
  369. package/types/Components/context/CallUserInfoContext.d.ts +17 -0
  370. package/types/Components/context/CallerUserInfoContext.d.ts +7 -0
  371. package/types/Components/context/CustomUIConfigContext.d.ts +3 -0
  372. package/types/Components/context/FocusItemContext.d.ts +8 -0
  373. package/types/Components/context/IsClickableContext.d.ts +2 -0
  374. package/types/Components/context/TranslateContext.d.ts +4 -0
  375. package/types/Components/context/UserInfoContext.d.ts +6 -0
  376. package/types/Components/context/index.d.ts +8 -0
  377. package/types/Components/hooks/index.d.ts +4 -0
  378. package/types/Components/hooks/useCallDuration.d.ts +1 -0
  379. package/types/Components/hooks/useCustomButtonUIConfig.d.ts +1 -0
  380. package/types/Components/hooks/useDeviceList.d.ts +8 -0
  381. package/types/Components/hooks/useGetSpeakers.d.ts +1 -0
  382. package/types/Components/hooks/useGetVolumeMap.d.ts +3 -0
  383. package/types/Components/hooks/useNetWorkStatus.d.ts +1 -0
  384. package/types/Components/hooks/useTranslate.d.ts +3 -0
  385. package/types/Components/hooks/useViewBackgroundConfig.d.ts +1 -0
  386. package/types/Components/util/classnames.d.ts +1 -0
  387. package/types/Components/util/index.d.ts +15 -0
  388. package/types/Components/util/uiDesign.d.ts +2 -0
  389. package/types/TUICallService/CallService/UIDesign.d.ts +28 -0
  390. package/types/TUICallService/CallService/bellContext.d.ts +19 -0
  391. package/types/TUICallService/CallService/chatCombine.d.ts +50 -0
  392. package/types/TUICallService/CallService/engineEventHandler.d.ts +35 -0
  393. package/types/TUICallService/CallService/index.d.ts +98 -0
  394. package/types/TUICallService/CallService/miniProgram.d.ts +7 -0
  395. package/types/TUICallService/CallService/utils.d.ts +42 -0
  396. package/types/TUICallService/TUIGlobal/tuiGlobal.d.ts +21 -0
  397. package/types/TUICallService/TUIStore/callStore.d.ts +10 -0
  398. package/types/TUICallService/TUIStore/tuiStore.d.ts +57 -0
  399. package/types/TUICallService/const/call.d.ts +141 -0
  400. package/types/TUICallService/const/error.d.ts +2 -0
  401. package/types/TUICallService/const/index.d.ts +27 -0
  402. package/types/TUICallService/const/log.d.ts +7 -0
  403. package/types/TUICallService/index.d.ts +5 -0
  404. package/types/TUICallService/interface/ICallService.d.ts +69 -0
  405. package/types/TUICallService/interface/ICallStore.d.ts +47 -0
  406. package/types/TUICallService/interface/ITUIGlobal.d.ts +36 -0
  407. package/types/TUICallService/interface/ITUIStore.d.ts +83 -0
  408. package/types/TUICallService/interface/index.d.ts +4 -0
  409. package/types/TUICallService/locales/en.d.ts +128 -0
  410. package/types/TUICallService/locales/index.d.ts +10 -0
  411. package/types/TUICallService/locales/ja_JP.d.ts +127 -0
  412. package/types/TUICallService/locales/zh-cn.d.ts +123 -0
  413. package/types/TUICallService/serve/callManager.d.ts +11 -0
  414. package/types/TUICallService/utils/common-utils.d.ts +62 -0
  415. package/types/TUICallService/utils/decorators/promise-retry.d.ts +32 -0
  416. package/types/TUICallService/utils/env.d.ts +10 -0
  417. package/types/TUICallService/utils/index.d.ts +2 -0
  418. package/types/TUICallService/utils/is-empty.d.ts +2 -0
  419. package/types/TUICallService/utils/retry.d.ts +36 -0
  420. package/types/TUICallService/utils/timer.d.ts +63 -0
  421. package/types/TUICallService/utils/validate/avoidRepeatedCall.d.ts +10 -0
  422. package/types/TUICallService/utils/validate/index.d.ts +2 -0
  423. package/types/TUICallService/utils/validate/validateConfig.d.ts +173 -0
  424. package/types/TUICallService/utils/validate/validateParams.d.ts +1 -0
  425. package/types/TUICallService/utils/validate/validateStatus.d.ts +5 -0
  426. package/types/index.d.ts +11 -0
@@ -0,0 +1,269 @@
1
+ import { NAME } from '../const/index';
2
+ import TUIGlobal from '../TUIGlobal/tuiGlobal';
3
+
4
+ export const isUndefined = function (input: any) {
5
+ return typeof input === NAME.UNDEFINED;
6
+ };
7
+
8
+ export const isPlainObject = function (input: any) {
9
+ // 注意不能使用以下方式判断,因为IE9/IE10下,对象的__proto__是 undefined
10
+ // return isObject(input) && input.__proto__ === Object.prototype;
11
+ if (typeof input !== NAME.OBJECT || input === null) {
12
+ return false;
13
+ }
14
+ const proto = Object.getPrototypeOf(input);
15
+ if (proto === null) { // edge case Object.create(null)
16
+ return true;
17
+ }
18
+ let baseProto = proto;
19
+ while (Object.getPrototypeOf(baseProto) !== null) {
20
+ baseProto = Object.getPrototypeOf(baseProto);
21
+ }
22
+ // 原型链第一个和最后一个比较
23
+ return proto === baseProto;
24
+ };
25
+
26
+ export const isArray = function (input: any) {
27
+ if (typeof Array.isArray === NAME.FUNCTION) {
28
+ return Array.isArray(input);
29
+ }
30
+ return (Object as any).prototype.toString.call(input).match(/^\[object (.*)\]$/)[1].toLowerCase() === NAME.ARRAY;
31
+ };
32
+
33
+ export const isPrivateKey = function (key: string) {
34
+ return key.startsWith('_');
35
+ };
36
+
37
+ export const isUrl = function (url: string) {
38
+ return /^(https?:\/\/(([a-zA-Z0-9]+-?)+[a-zA-Z0-9]+\.)+[a-zA-Z]+)(:\d+)?(\/.*)?(\?.*)?(#.*)?$/.test(url);
39
+ };
40
+ /**
41
+ * 检测input类型是否为string
42
+ * @param {*} input 任意类型的输入
43
+ * @returns {Boolean} true->string / false->not a string
44
+ */
45
+ export const isString = function (input: any) {
46
+ return typeof input === NAME.STRING;
47
+ };
48
+ export const isBoolean = function (input: any) {
49
+ return typeof input === NAME.BOOLEAN;
50
+ };
51
+ export const isNumber = function (input: any) {
52
+ return (
53
+ // eslint-disable-next-line
54
+ input !== null &&
55
+ ((typeof input === NAME.NUMBER && !isNaN(input - 0)) || (typeof input === NAME.OBJECT && input.constructor === Number))
56
+ );
57
+ };
58
+
59
+ export function formatTime(secondTime: number): string {
60
+ const hours: number = Math.floor(secondTime / 3600);
61
+ const minutes: number = Math.floor((secondTime % 3600) / 60);
62
+ const seconds: number = Math.floor(secondTime % 60);
63
+ let callDurationStr: string = hours > 9 ? `${hours}` : `0${hours}`;
64
+ callDurationStr += minutes > 9 ? `:${minutes}` : `:0${minutes}`;
65
+ callDurationStr += seconds > 9 ? `:${seconds}` : `:0${seconds}`;
66
+ return callDurationStr;
67
+ }
68
+ export function formatTimeInverse(stringTime: string): number {
69
+ const list = stringTime.split(':');
70
+ return parseInt(list[0]) * 3600 + parseInt(list[1]) * 60 + parseInt(list[2]); // eslint-disable-line
71
+ }
72
+
73
+
74
+ // Determine if it is a JSON string
75
+ export function isJSON(str: string) {
76
+ if (typeof str === NAME.STRING) {
77
+ try {
78
+ const data = JSON.parse(str);
79
+ if (data) {
80
+ return true;
81
+ }
82
+ return false;
83
+ } catch (error) {
84
+ console.debug(error);
85
+ return false;
86
+ }
87
+ }
88
+ return false;
89
+ }
90
+
91
+ // Determine if it is a JSON string
92
+ export const JSONToObject = function (str: string) {
93
+ if (!str || !isJSON(str)) {
94
+ return str;
95
+ }
96
+ return JSON.parse(str);
97
+ };
98
+
99
+
100
+ /**
101
+ * 重试函数, catch 时,重试
102
+ * @param {Promise} promise 需重试的函数
103
+ * @param {number} num 需要重试的次数
104
+ * @param {number} time 间隔时间(s)
105
+ * @returns {Promise<any>} im 接口的 response 原样返回
106
+ */
107
+ export const retryPromise = (promise: Promise<any>, num: number = 6, time: number = 0.5) => {
108
+ let n = num;
109
+ const func = () => promise;
110
+ return func()
111
+ .catch((error: any) => {
112
+ if (n === 0) {
113
+ throw error;
114
+ }
115
+ const timer = setTimeout(() => {
116
+ func();
117
+ clearTimeout(timer);
118
+ n = n - 1;
119
+ }, time * 1000);
120
+ });
121
+ };
122
+
123
+ // /**
124
+ // * 节流函数(目前 TUICallKit 增加防重调用装饰器,该方法可删除)
125
+ // * @param {Function} func 传入的函数
126
+ // * @param {wait} time 间隔时间(ms)
127
+ // */
128
+ // export const throttle = (func: Function, wait: number) => {
129
+ // let previousTime = 0;
130
+ // return function () {
131
+ // const now = Date.now();
132
+ // const args = [...arguments];
133
+ // if (now - previousTime > wait) {
134
+ // func.apply(this, args);
135
+ // previousTime = now;
136
+ // }
137
+ // };
138
+ // }
139
+
140
+ /**
141
+ * web call engine 重复调用时的错误, 这种错误在 TUICallKit 应该忽略
142
+ * @param {any} error 错误信息
143
+ * @returns {Boolean}
144
+ */
145
+ export function handleRepeatedCallError(error: any) {
146
+ if (error?.message.indexOf('is ongoing, please avoid repeated calls') !== -1) {
147
+ return true;
148
+ }
149
+ return false;
150
+ }
151
+ /**
152
+ * 设备无权限时的错误处理
153
+ * @param {any} error 错误信息
154
+ * @returns {Boolean}
155
+ */
156
+ export function handleNoDevicePermissionError(error: any) {
157
+ const { message } = error;
158
+ if (message.indexOf('NotAllowedError: Permission denied') !== -1) {
159
+ return true;
160
+ }
161
+ return false;
162
+ }
163
+
164
+ /*
165
+ * 获取向下取整的 performance.now() 值
166
+ * 在不支持 performance.now 的浏览器中,使用 Date.now(). 例如 ie 9,ie 10,避免加载 sdk 时报错
167
+ * @export
168
+ * @return {Number}
169
+ */
170
+ export function performanceNow() {
171
+ // if (!performance || !performance.now) {
172
+ // return Date.now();
173
+ // }
174
+ // return Math.floor(performance.now()); // uni-app 打包小程序没有 performance, 报错
175
+ return Date.now();
176
+
177
+ }
178
+ /**
179
+ * 检测input类型是否为function
180
+ * @param {*} input 任意类型的输入
181
+ * @returns {Boolean} true->input is a function
182
+ */
183
+ export const isFunction = function (input: any) {
184
+ return typeof input === NAME.FUNCTION;
185
+ };
186
+
187
+ /*
188
+ * 获取浏览器语言
189
+ * @export
190
+ * @return {zh-cn | en}
191
+ */
192
+ export const getLanguage = () => {
193
+ if (TUIGlobal.getInstance().isWeChat) {
194
+ return 'zh-cn';
195
+ }
196
+ // @ts-ignore
197
+ const lang = (navigator?.language || navigator?.userLanguage || '').substr(0, 2);
198
+ let language = 'en';
199
+ switch (lang) {
200
+ case 'zh':
201
+ language = 'zh-cn';
202
+ break;
203
+ case 'ja':
204
+ language = 'ja_JP';
205
+ break;
206
+ default:
207
+ language = 'en';
208
+ }
209
+ return language;
210
+ };
211
+
212
+ export function noop(e: any) {}
213
+
214
+ /**
215
+ * Get the object type string
216
+ * @param {*} input 任意类型的输入
217
+ * @returns {String} the object type string
218
+ */
219
+ export const getType = function(input) {
220
+ return Object.prototype.toString
221
+ .call(input)
222
+ .match(/^\[object (.*)\]$/)[1]
223
+ .toLowerCase();
224
+ };
225
+ // 修改对象键名
226
+ export function modifyObjectKey(obj, oldKey, newKey) {
227
+ if (!obj.hasOwnProperty(oldKey)) {
228
+ return obj;
229
+ }
230
+ const newObj = {};
231
+ Object.keys(obj).forEach(key => {
232
+ if (key === oldKey) {
233
+ newObj[newKey] = obj[key];
234
+ } else {
235
+ newObj[key] = obj[key];
236
+ }
237
+ });
238
+ return newObj;
239
+ }
240
+
241
+ /**
242
+ * interpolate function
243
+ * @param {string} str - 'hello {{name}}'
244
+ * @param {object} data - { name: 'sam' }
245
+ * @returns {string} 'hello sam'
246
+ *
247
+ */
248
+ export function interpolate(str, data) {
249
+ return str.replace(/{{\s*(\w+)(\s*,\s*[^}]+)?\s*}}/g, (match, p1) => {
250
+ const key = p1.trim();
251
+
252
+ return data[key] !== undefined ? String(data[key]) : match;
253
+ });
254
+ }
255
+ // Execute the callback when detecting browser refresh or close, but skip processing for page navigation
256
+ export function initBrowserCloseDetection(callback: Function) {
257
+ if (window?.addEventListener) {
258
+ // Trigger condition: close tab、refresh、navigate
259
+ window.addEventListener('beforeunload', (event) => {
260
+ const navigationEntries = performance?.getEntriesByType('navigation') || [];
261
+ const navigationEntry = navigationEntries[0];
262
+ // @ts-ignore
263
+ if (navigationEntry && navigationEntry.type === 'navigate') {
264
+ return;
265
+ }
266
+ callback(event);
267
+ });
268
+ }
269
+ }
@@ -0,0 +1,51 @@
1
+ import promiseRetry from '../retry';
2
+
3
+ /**
4
+ * 异步函数重试 Interface
5
+ * @param {number} [retries = 5] 重试次数
6
+ * @param {number} [timeout = 2000] 重试间隔时间
7
+ * @param {Function=} onError 重试错误回调
8
+ * @param {Function=} onRetrying 重试回调
9
+ * @param {Function=} onRetryFailed 重试失败回调
10
+ */
11
+ interface IPromiseRetryDecoratorSettings {
12
+ retries?: number;
13
+ timeout?: number;
14
+ onError?: Function;
15
+ onRetrying?: Function;
16
+ onRetryFailed?: Function;
17
+ };
18
+
19
+ /**
20
+ * 装饰器函数:给异步函数增加重试
21
+ * @param {Object} settings 入参
22
+ * @returns {Function}
23
+ * @example
24
+ * class LocalStream {
25
+ * @promiseRetryDecorator({
26
+ * retries: 10,
27
+ * timeout: 3000,
28
+ * onRetryFailed: function(error) {
29
+ * }
30
+ * })
31
+ * async recoverCapture(options) {}
32
+ * }
33
+ */
34
+ export default function promiseRetryDecorator(settings: IPromiseRetryDecoratorSettings) {
35
+ return function(target, name, descriptor) {
36
+ const { retries = 5, timeout = 2000, onError, onRetrying, onRetryFailed } = settings;
37
+ const oldFn = promiseRetry({
38
+ retryFunction: descriptor.value,
39
+ settings: { retries, timeout },
40
+ onError,
41
+ onRetrying,
42
+ onRetryFailed,
43
+ context: null,
44
+ });
45
+
46
+ descriptor.value = function(...args) {
47
+ return oldFn.apply(this, args);
48
+ };
49
+ return descriptor;
50
+ };
51
+ }
@@ -0,0 +1,51 @@
1
+ // eslint-disable-next-line
2
+ declare var wx: any;
3
+ // eslint-disable-next-line
4
+ declare var uni: any;
5
+ // eslint-disable-next-line
6
+ declare var window: any;
7
+
8
+ // 在 uniApp 框架下,打包 H5、ios app、android app 时存在 wx/qq/tt/swan/my 等变量会导致引入 web sdk 环境判断失效
9
+ // 小程序 getSystemInfoSync 返回的 fontSizeSetting 在 H5 和 app 中为 undefined,所以通过 fontSizeSetting 增强小程序环境判断
10
+ // wx 小程序
11
+ export const IN_WX_MINI_APP = (typeof wx !== 'undefined' && typeof wx.getSystemInfoSync === 'function' && Boolean(wx.getSystemInfoSync().fontSizeSetting));
12
+
13
+ // 用 uni-app 打包 native app,此时运行于 js core,无 window 等对象,此时调用 api 都得 uni.xxx,由于风格跟小程序类似,就归为 IN_MINI_APP 的一种
14
+ export const IN_UNI_NATIVE_APP = (typeof uni !== 'undefined' && typeof uni === 'undefined');
15
+
16
+ export const IN_MINI_APP = IN_WX_MINI_APP || IN_UNI_NATIVE_APP;
17
+
18
+ export const IN_UNI_APP = (typeof uni !== 'undefined');
19
+
20
+ // 在 uniApp 框架下,由于客户打包 ios app、android app 时 window 不一定存在,所以通过 !IN_MINI_APP 进行判断
21
+ // 非 uniApp 框架下,仍然通过 window 结合 IN_MINI_APP 进行判断,可兼容 Taro3.0+ 暴露 window 对象引起的 IN_BROWSER 判断失效问题
22
+ export const IN_BROWSER = (function () {
23
+ if (typeof uni !== 'undefined') {
24
+ return !IN_MINI_APP;
25
+ }
26
+ return (typeof window !== 'undefined') && !IN_MINI_APP;
27
+ }());
28
+
29
+ // 命名空间
30
+ export const APP_NAMESPACE = (function () {
31
+ if (IN_WX_MINI_APP) {
32
+ return wx;
33
+ }
34
+ if (IN_UNI_APP) {
35
+ return uni;
36
+ }
37
+ return window;
38
+ }());
39
+
40
+ // eslint-disable-next-line no-mixed-operators
41
+ const USER_AGENT = IN_BROWSER && window && window.navigator && window.navigator.userAgent || '';
42
+ const IS_ANDROID = /Android/i.test(USER_AGENT);
43
+ const IS_WIN_PHONE = /(?:Windows Phone)/.test(USER_AGENT);
44
+ const IS_SYMBIAN = /(?:SymbianOS)/.test(USER_AGENT);
45
+ const IS_IOS = /iPad/i.test(USER_AGENT) || /iPhone/i.test(USER_AGENT) || /iPod/i.test(USER_AGENT);
46
+
47
+ export const IS_H5 = IS_ANDROID || IS_WIN_PHONE || IS_SYMBIAN || IS_IOS;
48
+
49
+ export const IS_PC = IN_BROWSER && !IS_H5;
50
+ export const IS_WIN = IS_PC && USER_AGENT.includes('Windows NT');
51
+ export const IS_MAC = IS_PC && USER_AGENT.includes('Mac');
@@ -0,0 +1,32 @@
1
+ export async function checkLocalMP3FileExists(src: string) {
2
+ if (!src) return false;
3
+ try {
4
+ const response = await new Promise<XMLHttpRequest>((resolve, reject) => {
5
+ const xhr = new XMLHttpRequest();
6
+ xhr.open('HEAD', src, true);
7
+ xhr.onload = () => resolve(xhr);
8
+ xhr.onerror = () => reject(xhr);
9
+ xhr.send();
10
+ });
11
+ return response.status === 200 && response.getResponseHeader('Content-Type') === 'audio/mpeg';
12
+ } catch (error) {
13
+ console.warn(error);
14
+ return false;
15
+ }
16
+ }
17
+
18
+ export function deepClone(obj) {
19
+ if (typeof obj !== 'object' || obj === null) {
20
+ return obj;
21
+ }
22
+
23
+ let clone = Array.isArray(obj) ? [] : {};
24
+
25
+ for (let key in obj) {
26
+ if (obj.hasOwnProperty(key)) {
27
+ clone[key] = deepClone(obj[key]);
28
+ }
29
+ }
30
+
31
+ return clone;
32
+ }
@@ -0,0 +1,31 @@
1
+ import { isPlainObject } from './common-utils';
2
+
3
+ const isEmpty = function (input: any) {
4
+ // Null and Undefined...
5
+ if (input === null || typeof (input) === 'undefined') return true;
6
+ // Booleans...
7
+ if (typeof input === 'boolean') return false;
8
+ // Numbers...
9
+ if (typeof input === 'number') return input === 0;
10
+ // Strings...
11
+ if (typeof input === 'string') return input.length === 0;
12
+ // Functions...
13
+ if (typeof input === 'function') return input.length === 0;
14
+ // Arrays...
15
+ if (Array.isArray(input)) return input.length === 0;
16
+ // Errors...
17
+ if (input instanceof Error) return input.message === '';
18
+ // plain object
19
+ if (isPlainObject(input)) {
20
+ // eslint-disable-next-line
21
+ for (const key in input) {
22
+ if (Object.prototype.hasOwnProperty.call(input, key)) {
23
+ return false;
24
+ }
25
+ }
26
+ return true;
27
+ }
28
+ return false;
29
+ };
30
+
31
+ export default isEmpty;
@@ -0,0 +1,88 @@
1
+ import { isFunction, isUndefined } from './common-utils';
2
+
3
+ const RETRY_STATE_NOT_START = 0;
4
+ const RETRY_STATE_STARTED = 1;
5
+ const RETRY_STATE_STOPPED = 2;
6
+
7
+ /**
8
+ * 给异步函数封装重试逻辑
9
+ * @param {Object} options 重试逻辑入参
10
+ * @param {Object} options.retryFunction 需要封装的异步函数
11
+ * @param {Object} options.settings 重试属性
12
+ * @param {Number} [options.settings.retries = 5] 重试次数
13
+ * @param {Number} [options.settings.timeout = 1000] 重试间隔
14
+ * @param {onErrorCallback} options.onError 重试错误回调
15
+ * @param {onRetryingCallback} [options.onRetrying] 重试后的回调
16
+ * @param {Object} options.context 上下文,可选
17
+ * @returns {Function} 封装后的函数
18
+ * @example
19
+ * const getUserMedia = promiseRetry({
20
+ * retryFunction: getUserMedia_,
21
+ * settings: { retries: 5, timeout: 2000 },
22
+ * onError: (error, retry, reject) => {
23
+ * if (error.name === 'NotReadableError') {
24
+ * retry();
25
+ * } else {
26
+ * reject(error);
27
+ * }
28
+ * },
29
+ * onRetrying: retryCount => {
30
+ * console.warn(`getUserMedia NotReadableError observed, retrying [${retryCount}/5]`);
31
+ * }
32
+ * });
33
+ */
34
+ function promiseRetry({ retryFunction, settings, onError, onRetrying, onRetryFailed, context }) {
35
+ return function(...args) {
36
+ const retries = settings.retries || 5;
37
+ let retryCount = 0;
38
+ let timer: any = -1;
39
+ let retryState = RETRY_STATE_NOT_START;
40
+ const run = async (resolve, reject) => {
41
+ const ctx = context || this;
42
+ try {
43
+ const result = await retryFunction.apply(ctx, args);
44
+ // 执行成功,正常返回
45
+ retryCount = 0;
46
+ resolve(result);
47
+ } catch (error) {
48
+ // 用于停止重试
49
+ const stopRetry = () => {
50
+ clearTimeout(timer);
51
+ retryCount = 0;
52
+ retryState = RETRY_STATE_STOPPED;
53
+ reject(error);
54
+ };
55
+ const retry = () => {
56
+ if (retryState !== RETRY_STATE_STOPPED && retryCount < retries) {
57
+ retryCount++;
58
+ retryState = RETRY_STATE_STARTED;
59
+ if (isFunction(onRetrying)) {
60
+ onRetrying.call(ctx, retryCount, stopRetry);
61
+ }
62
+ timer = setTimeout(
63
+ () => {
64
+ timer = -1;
65
+ run(resolve, reject);
66
+ },
67
+ isUndefined(settings.timeout) ? 1000 : settings.timeout
68
+ );
69
+ } else {
70
+ stopRetry();
71
+ if (isFunction(onRetryFailed)) {
72
+ onRetryFailed.call(ctx, error);
73
+ }
74
+ }
75
+ };
76
+ if (isFunction(onError)) {
77
+ onError.call(ctx, error, retry, reject, args);
78
+ } else {
79
+ retry();
80
+ }
81
+ }
82
+ };
83
+
84
+ return new Promise(run);
85
+ };
86
+ }
87
+
88
+ export default promiseRetry;
@@ -0,0 +1,162 @@
1
+ /* eslint-disable */
2
+ import { isPlainObject, performanceNow, isFunction } from './common-utils';
3
+ import { NAME } from '../const/index';
4
+
5
+ /**
6
+ * 定时器,功能:
7
+ * 1. 支持定时执行回调 [1,n] 次,用于常规延迟、定时操作
8
+ * @example
9
+ * // 默认嵌套执行,count=0 无限次
10
+ * timer.run(callback, {delay: 2000});
11
+ * // count=1 等同于 原始setTimeout
12
+ * timer.run(callback, {delay: 2000, count:0});
13
+ * 2. 支持 RAF 执行回调,用于小流渲染,audio音量获取等任务,需要渲染频率稳定,支持页面退后台后,用 setTimeout 接管,最短 1s 执行一次
14
+ * @example
15
+ * // 默认60fps,可以根据单位时长换算,默认开启后台执行
16
+ * timer.run('raf', callback, {fps: 60});
17
+ * // 设置执行次数
18
+ * timer.run('raf', callback, {fps: 60, count: 300, backgroundTask: false});
19
+ * 3. 支持空闲任务执行回调, requestIdleCallback 在帧渲染的空闲时间执行任务,可以用于 storage 写入等低优先级的任务
20
+ * @example
21
+ * // 支持原生setInterval 但不推荐使用,定时任务推荐用 timeout
22
+ * timer.run('interval', callback, {delay:2000, count:10})
23
+ */
24
+
25
+ class Timer {
26
+ static taskMap = new Map();
27
+ static currentTaskID = 1;
28
+ static generateTaskID() {
29
+ return this.currentTaskID++;
30
+ }
31
+ /**
32
+ *
33
+ * @param {string} taskName 'interval' 'timeout'
34
+ * @param {function} callback
35
+ * @param {object} options include:
36
+ * @param {number} options.delay millisecond
37
+ * @param {number} options.count 定时器回调执行次数,0 无限次 or n次
38
+ * @param {boolean} options.backgroundTask 在页面静默后是否继续执行定时器
39
+ */
40
+ static run(taskName = NAME.TIMEOUT, callback: any, options: any) {
41
+ // default options
42
+ if (taskName === NAME.INTERVAL) {
43
+ options = { ...{ delay: 2000, count: 0, backgroundTask: true }, ...options };
44
+ } else {
45
+ options = { ...{ delay: 2000, count: 0, backgroundTask: true }, ...options };
46
+ }
47
+ // call run(function, {...})
48
+ if (isPlainObject(callback)) {
49
+ options = { ...options, ...callback };
50
+ }
51
+ if (isFunction(taskName)) {
52
+ callback = taskName;
53
+ taskName = NAME.TIMEOUT;
54
+ }
55
+ // 1. 创建 taskID,作为 timer task 的唯一标识,在本函数执行完后返回,用于在调用的地方实现互斥逻辑
56
+ // 2. 根据 taskName 执行相应的函数
57
+ const taskItem = {
58
+ taskID: this.generateTaskID(),
59
+ loopCount: 0,
60
+ intervalID: null,
61
+ timeoutID: null,
62
+ taskName,
63
+ callback,
64
+ ...options
65
+ };
66
+ this.taskMap.set(taskItem.taskID, taskItem);
67
+ // console.log(`timer run task:${taskItem.taskName}, task queue size: ${this.taskMap.size}`);
68
+ if (taskName === NAME.INTERNAL) {
69
+ this.interval(taskItem);
70
+ } else {
71
+ this.timeout(taskItem);
72
+ }
73
+ return taskItem.taskID;
74
+ }
75
+
76
+ /**
77
+ * 定时循环执行回调函数
78
+ * 可以指定循环的时间间隔
79
+ * 可以指定循环次数
80
+ * @param {object} taskItem
81
+ * @param {function} callback
82
+ * @param {*} delay
83
+ * @param {*} count
84
+ * @returns ID
85
+ */
86
+ static interval(taskItem: any) {
87
+ // setInterval 缺点,浏览器退后台会降频,循环执行间隔时间不可靠
88
+ // 创建进入定时器循环的任务函数,函数内:1. 判断是否满足执行条件,2.执行 callback
89
+ // 通过 setInterval 执行任务函数
90
+ // 将 intervalID 记录到 taskMap 对应的 item
91
+ const task = () => {
92
+ taskItem.callback();
93
+ taskItem.loopCount += 1;
94
+ if (this.isBreakLoop(taskItem)) {
95
+ return;
96
+ }
97
+ };
98
+ return taskItem.intervalID = setInterval(task, taskItem.delay);
99
+ }
100
+ /**
101
+ * 延迟执行回调
102
+ * count = 0,循环
103
+ * count = n, 执行n次
104
+ * @param {object} taskItem
105
+ *
106
+ */
107
+ static timeout(taskItem: any) {
108
+ // setTimeout 浏览器退后台,延迟变为至少1s
109
+ const task: any = () => {
110
+ // 执行回调
111
+ taskItem.callback();
112
+ taskItem.loopCount += 1;
113
+ if (this.isBreakLoop(taskItem)) {
114
+ return;
115
+ }
116
+ // 不修正延迟,每次callback间隔平均
117
+ return taskItem.timeoutID = setTimeout(task, taskItem.delay);
118
+ };
119
+ return taskItem.timeoutID = setTimeout(task, taskItem.delay);
120
+ }
121
+
122
+ static hasTask(taskID: any) {
123
+ return this.taskMap.has(taskID);
124
+ }
125
+
126
+ static clearTask(taskID: any) {
127
+ // console.log('timer clearTask start', `| taskID:${taskID} | size:${this.taskMap.size}`);
128
+ if (!this.taskMap.has(taskID)) {
129
+ return true;
130
+ }
131
+ const { intervalID, timeoutID, onVisibilitychange } = this.taskMap.get(taskID);
132
+ if (intervalID) {
133
+ clearInterval(intervalID);
134
+ }
135
+ if (timeoutID) {
136
+ clearTimeout(timeoutID);
137
+ }
138
+ if (onVisibilitychange) {
139
+ document.removeEventListener('visibilitychange', onVisibilitychange);
140
+ }
141
+ this.taskMap.delete(taskID);
142
+ // console.log('timer clearTask end ', `| size:${this.taskMap.size}`);
143
+ return true;
144
+ }
145
+ /**
146
+ * 1. 如果已移除出定时队列,退出当前任务
147
+ * 2. 如果当前任务已满足次数限制,则退出当前任务
148
+ * @param {object} taskItem
149
+ * @returns
150
+ */
151
+ static isBreakLoop(taskItem: any) {
152
+ if (!this.taskMap.has(taskItem.taskID)) {
153
+ return true;
154
+ }
155
+ if (taskItem.count !== 0 && taskItem.loopCount >= taskItem.count) {
156
+ this.clearTask(taskItem.taskID);
157
+ return true;
158
+ }
159
+ return false;
160
+ }
161
+ }
162
+ export default Timer;