@syra.fm/sdk 0.4.0 → 0.5.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 (307) hide show
  1. package/lib/commonjs/client.js +268 -0
  2. package/lib/commonjs/client.js.map +1 -0
  3. package/lib/commonjs/errors.js +22 -0
  4. package/lib/commonjs/errors.js.map +1 -0
  5. package/lib/commonjs/index.js +63 -0
  6. package/lib/commonjs/index.js.map +1 -0
  7. package/lib/commonjs/index.native.js +28 -0
  8. package/lib/commonjs/index.native.js.map +1 -0
  9. package/lib/commonjs/live/assets/icons/spaces-icon.js +42 -0
  10. package/lib/commonjs/live/assets/icons/spaces-icon.js.map +1 -0
  11. package/lib/commonjs/live/assets/icons/syra-icon.js +43 -0
  12. package/lib/commonjs/live/assets/icons/syra-icon.js.map +1 -0
  13. package/lib/commonjs/live/components/AnimatedPulse.js +38 -0
  14. package/lib/commonjs/live/components/AnimatedPulse.js.map +1 -0
  15. package/lib/commonjs/live/components/AnimatedSpeakerRing.js +90 -0
  16. package/lib/commonjs/live/components/AnimatedSpeakerRing.js.map +1 -0
  17. package/lib/commonjs/live/components/CreateRoomSheet.js +688 -0
  18. package/lib/commonjs/live/components/CreateRoomSheet.js.map +1 -0
  19. package/lib/commonjs/live/components/InsightsPanel.js +333 -0
  20. package/lib/commonjs/live/components/InsightsPanel.js.map +1 -0
  21. package/lib/commonjs/live/components/LiveRoomSheet.js +1195 -0
  22. package/lib/commonjs/live/components/LiveRoomSheet.js.map +1 -0
  23. package/lib/commonjs/live/components/MiniRoomBar.js +161 -0
  24. package/lib/commonjs/live/components/MiniRoomBar.js.map +1 -0
  25. package/lib/commonjs/live/components/PanelHeader.js +57 -0
  26. package/lib/commonjs/live/components/PanelHeader.js.map +1 -0
  27. package/lib/commonjs/live/components/PodcastStreamPicker.js +1190 -0
  28. package/lib/commonjs/live/components/PodcastStreamPicker.js.map +1 -0
  29. package/lib/commonjs/live/components/RecordingCard.js +192 -0
  30. package/lib/commonjs/live/components/RecordingCard.js.map +1 -0
  31. package/lib/commonjs/live/components/RecordingsPanel.js +304 -0
  32. package/lib/commonjs/live/components/RecordingsPanel.js.map +1 -0
  33. package/lib/commonjs/live/components/RoomCard.js +553 -0
  34. package/lib/commonjs/live/components/RoomCard.js.map +1 -0
  35. package/lib/commonjs/live/components/StreamConfigModal.js +656 -0
  36. package/lib/commonjs/live/components/StreamConfigModal.js.map +1 -0
  37. package/lib/commonjs/live/components/StreamConfigPanel.js +822 -0
  38. package/lib/commonjs/live/components/StreamConfigPanel.js.map +1 -0
  39. package/lib/commonjs/live/context/LiveConfigContext.js +46 -0
  40. package/lib/commonjs/live/context/LiveConfigContext.js.map +1 -0
  41. package/lib/commonjs/live/context/LiveRoomContext.js +195 -0
  42. package/lib/commonjs/live/context/LiveRoomContext.js.map +1 -0
  43. package/lib/commonjs/live/hooks/useActiveSpeakers.js +35 -0
  44. package/lib/commonjs/live/hooks/useActiveSpeakers.js.map +1 -0
  45. package/lib/commonjs/live/hooks/useRoomAudio.js +129 -0
  46. package/lib/commonjs/live/hooks/useRoomAudio.js.map +1 -0
  47. package/lib/commonjs/live/hooks/useRoomConnection.js +177 -0
  48. package/lib/commonjs/live/hooks/useRoomConnection.js.map +1 -0
  49. package/lib/commonjs/live/hooks/useRoomManager.js +37 -0
  50. package/lib/commonjs/live/hooks/useRoomManager.js.map +1 -0
  51. package/lib/commonjs/live/hooks/useRoomUsers.js +52 -0
  52. package/lib/commonjs/live/hooks/useRoomUsers.js.map +1 -0
  53. package/lib/commonjs/live/index.js +310 -0
  54. package/lib/commonjs/live/index.js.map +1 -0
  55. package/lib/commonjs/live/services/livekitService.js +20 -0
  56. package/lib/commonjs/live/services/livekitService.js.map +1 -0
  57. package/lib/commonjs/live/services/spaceSocketService.js +181 -0
  58. package/lib/commonjs/live/services/spaceSocketService.js.map +1 -0
  59. package/lib/commonjs/live/services/spacesService.js +642 -0
  60. package/lib/commonjs/live/services/spacesService.js.map +1 -0
  61. package/lib/commonjs/live/types.js +6 -0
  62. package/lib/commonjs/live/types.js.map +1 -0
  63. package/lib/commonjs/live/validation.js +238 -0
  64. package/lib/commonjs/live/validation.js.map +1 -0
  65. package/lib/commonjs/package.json +1 -0
  66. package/{dist/cjs → lib/commonjs}/schema.js +55 -47
  67. package/lib/commonjs/schema.js.map +1 -0
  68. package/lib/module/client.js +264 -0
  69. package/lib/module/client.js.map +1 -0
  70. package/lib/module/errors.js +17 -0
  71. package/lib/module/errors.js.map +1 -0
  72. package/lib/module/index.js +6 -0
  73. package/lib/module/index.js.map +1 -0
  74. package/lib/module/index.native.js +5 -0
  75. package/lib/module/index.native.js.map +1 -0
  76. package/lib/module/live/assets/icons/spaces-icon.js +34 -0
  77. package/lib/module/live/assets/icons/spaces-icon.js.map +1 -0
  78. package/lib/module/live/assets/icons/syra-icon.js +36 -0
  79. package/lib/module/live/assets/icons/syra-icon.js.map +1 -0
  80. package/lib/module/live/components/AnimatedPulse.js +33 -0
  81. package/lib/module/live/components/AnimatedPulse.js.map +1 -0
  82. package/lib/module/live/components/AnimatedSpeakerRing.js +85 -0
  83. package/lib/module/live/components/AnimatedSpeakerRing.js.map +1 -0
  84. package/lib/module/live/components/CreateRoomSheet.js +682 -0
  85. package/lib/module/live/components/CreateRoomSheet.js.map +1 -0
  86. package/lib/module/live/components/InsightsPanel.js +327 -0
  87. package/lib/module/live/components/InsightsPanel.js.map +1 -0
  88. package/lib/module/live/components/LiveRoomSheet.js +1189 -0
  89. package/lib/module/live/components/LiveRoomSheet.js.map +1 -0
  90. package/lib/module/live/components/MiniRoomBar.js +154 -0
  91. package/lib/module/live/components/MiniRoomBar.js.map +1 -0
  92. package/lib/module/live/components/PanelHeader.js +52 -0
  93. package/lib/module/live/components/PanelHeader.js.map +1 -0
  94. package/lib/module/live/components/PodcastStreamPicker.js +1183 -0
  95. package/lib/module/live/components/PodcastStreamPicker.js.map +1 -0
  96. package/lib/module/live/components/RecordingCard.js +187 -0
  97. package/lib/module/live/components/RecordingCard.js.map +1 -0
  98. package/lib/module/live/components/RecordingsPanel.js +298 -0
  99. package/lib/module/live/components/RecordingsPanel.js.map +1 -0
  100. package/lib/module/live/components/RoomCard.js +548 -0
  101. package/lib/module/live/components/RoomCard.js.map +1 -0
  102. package/lib/module/live/components/StreamConfigModal.js +650 -0
  103. package/lib/module/live/components/StreamConfigModal.js.map +1 -0
  104. package/lib/module/live/components/StreamConfigPanel.js +816 -0
  105. package/lib/module/live/components/StreamConfigPanel.js.map +1 -0
  106. package/lib/module/live/context/LiveConfigContext.js +40 -0
  107. package/lib/module/live/context/LiveConfigContext.js.map +1 -0
  108. package/lib/module/live/context/LiveRoomContext.js +189 -0
  109. package/lib/module/live/context/LiveRoomContext.js.map +1 -0
  110. package/lib/module/live/hooks/useActiveSpeakers.js +31 -0
  111. package/lib/module/live/hooks/useActiveSpeakers.js.map +1 -0
  112. package/lib/module/live/hooks/useRoomAudio.js +125 -0
  113. package/lib/module/live/hooks/useRoomAudio.js.map +1 -0
  114. package/lib/module/live/hooks/useRoomConnection.js +173 -0
  115. package/lib/module/live/hooks/useRoomConnection.js.map +1 -0
  116. package/lib/module/live/hooks/useRoomManager.js +32 -0
  117. package/lib/module/live/hooks/useRoomManager.js.map +1 -0
  118. package/lib/module/live/hooks/useRoomUsers.js +46 -0
  119. package/lib/module/live/hooks/useRoomUsers.js.map +1 -0
  120. package/lib/module/live/index.js +38 -0
  121. package/lib/module/live/index.js.map +1 -0
  122. package/lib/module/live/services/livekitService.js +16 -0
  123. package/lib/module/live/services/livekitService.js.map +1 -0
  124. package/lib/module/live/services/spaceSocketService.js +176 -0
  125. package/lib/module/live/services/spaceSocketService.js.map +1 -0
  126. package/lib/module/live/services/spacesService.js +639 -0
  127. package/lib/module/live/services/spacesService.js.map +1 -0
  128. package/lib/module/live/types.js +4 -0
  129. package/lib/module/live/types.js.map +1 -0
  130. package/lib/module/live/validation.js +229 -0
  131. package/lib/module/live/validation.js.map +1 -0
  132. package/lib/module/package.json +1 -0
  133. package/{dist/esm → lib/module}/schema.js +47 -39
  134. package/lib/module/schema.js.map +1 -0
  135. package/{dist/types → lib/typescript/commonjs}/client.d.ts +1 -0
  136. package/lib/typescript/commonjs/client.d.ts.map +1 -0
  137. package/{dist/types → lib/typescript/commonjs}/errors.d.ts +1 -0
  138. package/lib/typescript/commonjs/errors.d.ts.map +1 -0
  139. package/{dist/types → lib/typescript/commonjs}/index.d.ts +1 -0
  140. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  141. package/lib/typescript/commonjs/index.native.d.ts +3 -0
  142. package/lib/typescript/commonjs/index.native.d.ts.map +1 -0
  143. package/lib/typescript/commonjs/live/assets/icons/spaces-icon.d.ts +13 -0
  144. package/lib/typescript/commonjs/live/assets/icons/spaces-icon.d.ts.map +1 -0
  145. package/lib/typescript/commonjs/live/assets/icons/syra-icon.d.ts +13 -0
  146. package/lib/typescript/commonjs/live/assets/icons/syra-icon.d.ts.map +1 -0
  147. package/lib/typescript/commonjs/live/components/AnimatedPulse.d.ts +8 -0
  148. package/lib/typescript/commonjs/live/components/AnimatedPulse.d.ts.map +1 -0
  149. package/lib/typescript/commonjs/live/components/AnimatedSpeakerRing.d.ts +10 -0
  150. package/lib/typescript/commonjs/live/components/AnimatedSpeakerRing.d.ts.map +1 -0
  151. package/lib/typescript/commonjs/live/components/CreateRoomSheet.d.ts +26 -0
  152. package/lib/typescript/commonjs/live/components/CreateRoomSheet.d.ts.map +1 -0
  153. package/lib/typescript/commonjs/live/components/InsightsPanel.d.ts +11 -0
  154. package/lib/typescript/commonjs/live/components/InsightsPanel.d.ts.map +1 -0
  155. package/lib/typescript/commonjs/live/components/LiveRoomSheet.d.ts +11 -0
  156. package/lib/typescript/commonjs/live/components/LiveRoomSheet.d.ts.map +1 -0
  157. package/lib/typescript/commonjs/live/components/MiniRoomBar.d.ts +15 -0
  158. package/lib/typescript/commonjs/live/components/MiniRoomBar.d.ts.map +1 -0
  159. package/lib/typescript/commonjs/live/components/PanelHeader.d.ts +10 -0
  160. package/lib/typescript/commonjs/live/components/PanelHeader.d.ts.map +1 -0
  161. package/lib/typescript/commonjs/live/components/PodcastStreamPicker.d.ts +54 -0
  162. package/lib/typescript/commonjs/live/components/PodcastStreamPicker.d.ts.map +1 -0
  163. package/lib/typescript/commonjs/live/components/RecordingCard.d.ts +11 -0
  164. package/lib/typescript/commonjs/live/components/RecordingCard.d.ts.map +1 -0
  165. package/lib/typescript/commonjs/live/components/RecordingsPanel.d.ts +12 -0
  166. package/lib/typescript/commonjs/live/components/RecordingsPanel.d.ts.map +1 -0
  167. package/lib/typescript/commonjs/live/components/RoomCard.d.ts +38 -0
  168. package/lib/typescript/commonjs/live/components/RoomCard.d.ts.map +1 -0
  169. package/lib/typescript/commonjs/live/components/StreamConfigModal.d.ts +11 -0
  170. package/lib/typescript/commonjs/live/components/StreamConfigModal.d.ts.map +1 -0
  171. package/lib/typescript/commonjs/live/components/StreamConfigPanel.d.ts +13 -0
  172. package/lib/typescript/commonjs/live/components/StreamConfigPanel.d.ts.map +1 -0
  173. package/lib/typescript/commonjs/live/context/LiveConfigContext.d.ts +78 -0
  174. package/lib/typescript/commonjs/live/context/LiveConfigContext.d.ts.map +1 -0
  175. package/lib/typescript/commonjs/live/context/LiveRoomContext.d.ts +12 -0
  176. package/lib/typescript/commonjs/live/context/LiveRoomContext.d.ts.map +1 -0
  177. package/lib/typescript/commonjs/live/hooks/useActiveSpeakers.d.ts +3 -0
  178. package/lib/typescript/commonjs/live/hooks/useActiveSpeakers.d.ts.map +1 -0
  179. package/lib/typescript/commonjs/live/hooks/useRoomAudio.d.ts +16 -0
  180. package/lib/typescript/commonjs/live/hooks/useRoomAudio.d.ts.map +1 -0
  181. package/lib/typescript/commonjs/live/hooks/useRoomConnection.d.ts +29 -0
  182. package/lib/typescript/commonjs/live/hooks/useRoomConnection.d.ts.map +1 -0
  183. package/lib/typescript/commonjs/live/hooks/useRoomManager.d.ts +11 -0
  184. package/lib/typescript/commonjs/live/hooks/useRoomManager.d.ts.map +1 -0
  185. package/lib/typescript/commonjs/live/hooks/useRoomUsers.d.ts +5 -0
  186. package/lib/typescript/commonjs/live/hooks/useRoomUsers.d.ts.map +1 -0
  187. package/lib/typescript/commonjs/live/index.d.ts +24 -0
  188. package/lib/typescript/commonjs/live/index.d.ts.map +1 -0
  189. package/lib/typescript/commonjs/live/services/livekitService.d.ts +7 -0
  190. package/lib/typescript/commonjs/live/services/livekitService.d.ts.map +1 -0
  191. package/lib/typescript/commonjs/live/services/spaceSocketService.d.ts +69 -0
  192. package/lib/typescript/commonjs/live/services/spaceSocketService.d.ts.map +1 -0
  193. package/lib/typescript/commonjs/live/services/spacesService.d.ts +181 -0
  194. package/lib/typescript/commonjs/live/services/spacesService.d.ts.map +1 -0
  195. package/lib/typescript/commonjs/live/types.d.ts +100 -0
  196. package/lib/typescript/commonjs/live/types.d.ts.map +1 -0
  197. package/lib/typescript/commonjs/live/validation.d.ts +658 -0
  198. package/lib/typescript/commonjs/live/validation.d.ts.map +1 -0
  199. package/lib/typescript/commonjs/package.json +1 -0
  200. package/{dist/types → lib/typescript/commonjs}/schema.d.ts +1 -0
  201. package/lib/typescript/commonjs/schema.d.ts.map +1 -0
  202. package/lib/typescript/module/client.d.ts +141 -0
  203. package/lib/typescript/module/client.d.ts.map +1 -0
  204. package/lib/typescript/module/errors.d.ts +9 -0
  205. package/lib/typescript/module/errors.d.ts.map +1 -0
  206. package/lib/typescript/module/index.d.ts +6 -0
  207. package/lib/typescript/module/index.d.ts.map +1 -0
  208. package/lib/typescript/module/index.native.d.ts +3 -0
  209. package/lib/typescript/module/index.native.d.ts.map +1 -0
  210. package/lib/typescript/module/live/assets/icons/spaces-icon.d.ts +13 -0
  211. package/lib/typescript/module/live/assets/icons/spaces-icon.d.ts.map +1 -0
  212. package/lib/typescript/module/live/assets/icons/syra-icon.d.ts +13 -0
  213. package/lib/typescript/module/live/assets/icons/syra-icon.d.ts.map +1 -0
  214. package/lib/typescript/module/live/components/AnimatedPulse.d.ts +8 -0
  215. package/lib/typescript/module/live/components/AnimatedPulse.d.ts.map +1 -0
  216. package/lib/typescript/module/live/components/AnimatedSpeakerRing.d.ts +10 -0
  217. package/lib/typescript/module/live/components/AnimatedSpeakerRing.d.ts.map +1 -0
  218. package/lib/typescript/module/live/components/CreateRoomSheet.d.ts +26 -0
  219. package/lib/typescript/module/live/components/CreateRoomSheet.d.ts.map +1 -0
  220. package/lib/typescript/module/live/components/InsightsPanel.d.ts +11 -0
  221. package/lib/typescript/module/live/components/InsightsPanel.d.ts.map +1 -0
  222. package/lib/typescript/module/live/components/LiveRoomSheet.d.ts +11 -0
  223. package/lib/typescript/module/live/components/LiveRoomSheet.d.ts.map +1 -0
  224. package/lib/typescript/module/live/components/MiniRoomBar.d.ts +15 -0
  225. package/lib/typescript/module/live/components/MiniRoomBar.d.ts.map +1 -0
  226. package/lib/typescript/module/live/components/PanelHeader.d.ts +10 -0
  227. package/lib/typescript/module/live/components/PanelHeader.d.ts.map +1 -0
  228. package/lib/typescript/module/live/components/PodcastStreamPicker.d.ts +54 -0
  229. package/lib/typescript/module/live/components/PodcastStreamPicker.d.ts.map +1 -0
  230. package/lib/typescript/module/live/components/RecordingCard.d.ts +11 -0
  231. package/lib/typescript/module/live/components/RecordingCard.d.ts.map +1 -0
  232. package/lib/typescript/module/live/components/RecordingsPanel.d.ts +12 -0
  233. package/lib/typescript/module/live/components/RecordingsPanel.d.ts.map +1 -0
  234. package/lib/typescript/module/live/components/RoomCard.d.ts +38 -0
  235. package/lib/typescript/module/live/components/RoomCard.d.ts.map +1 -0
  236. package/lib/typescript/module/live/components/StreamConfigModal.d.ts +11 -0
  237. package/lib/typescript/module/live/components/StreamConfigModal.d.ts.map +1 -0
  238. package/lib/typescript/module/live/components/StreamConfigPanel.d.ts +13 -0
  239. package/lib/typescript/module/live/components/StreamConfigPanel.d.ts.map +1 -0
  240. package/lib/typescript/module/live/context/LiveConfigContext.d.ts +78 -0
  241. package/lib/typescript/module/live/context/LiveConfigContext.d.ts.map +1 -0
  242. package/lib/typescript/module/live/context/LiveRoomContext.d.ts +12 -0
  243. package/lib/typescript/module/live/context/LiveRoomContext.d.ts.map +1 -0
  244. package/lib/typescript/module/live/hooks/useActiveSpeakers.d.ts +3 -0
  245. package/lib/typescript/module/live/hooks/useActiveSpeakers.d.ts.map +1 -0
  246. package/lib/typescript/module/live/hooks/useRoomAudio.d.ts +16 -0
  247. package/lib/typescript/module/live/hooks/useRoomAudio.d.ts.map +1 -0
  248. package/lib/typescript/module/live/hooks/useRoomConnection.d.ts +29 -0
  249. package/lib/typescript/module/live/hooks/useRoomConnection.d.ts.map +1 -0
  250. package/lib/typescript/module/live/hooks/useRoomManager.d.ts +11 -0
  251. package/lib/typescript/module/live/hooks/useRoomManager.d.ts.map +1 -0
  252. package/lib/typescript/module/live/hooks/useRoomUsers.d.ts +5 -0
  253. package/lib/typescript/module/live/hooks/useRoomUsers.d.ts.map +1 -0
  254. package/lib/typescript/module/live/index.d.ts +24 -0
  255. package/lib/typescript/module/live/index.d.ts.map +1 -0
  256. package/lib/typescript/module/live/services/livekitService.d.ts +7 -0
  257. package/lib/typescript/module/live/services/livekitService.d.ts.map +1 -0
  258. package/lib/typescript/module/live/services/spaceSocketService.d.ts +69 -0
  259. package/lib/typescript/module/live/services/spaceSocketService.d.ts.map +1 -0
  260. package/lib/typescript/module/live/services/spacesService.d.ts +181 -0
  261. package/lib/typescript/module/live/services/spacesService.d.ts.map +1 -0
  262. package/lib/typescript/module/live/types.d.ts +100 -0
  263. package/lib/typescript/module/live/types.d.ts.map +1 -0
  264. package/lib/typescript/module/live/validation.d.ts +658 -0
  265. package/lib/typescript/module/live/validation.d.ts.map +1 -0
  266. package/lib/typescript/module/package.json +1 -0
  267. package/lib/typescript/module/schema.d.ts +1072 -0
  268. package/lib/typescript/module/schema.d.ts.map +1 -0
  269. package/package.json +133 -21
  270. package/src/index.native.ts +2 -0
  271. package/src/live/assets/icons/spaces-icon.tsx +15 -0
  272. package/src/live/assets/icons/syra-icon.tsx +13 -0
  273. package/src/live/assets/sounds/intro.mp3 +0 -0
  274. package/src/live/components/AnimatedPulse.tsx +52 -0
  275. package/src/live/components/AnimatedSpeakerRing.tsx +101 -0
  276. package/src/live/components/CreateRoomSheet.tsx +654 -0
  277. package/src/live/components/InsightsPanel.tsx +202 -0
  278. package/src/live/components/LiveRoomSheet.tsx +969 -0
  279. package/src/live/components/MiniRoomBar.tsx +166 -0
  280. package/src/live/components/PanelHeader.tsx +36 -0
  281. package/src/live/components/PodcastStreamPicker.tsx +1155 -0
  282. package/src/live/components/RecordingCard.tsx +154 -0
  283. package/src/live/components/RecordingsPanel.tsx +251 -0
  284. package/src/live/components/RoomCard.tsx +494 -0
  285. package/src/live/components/StreamConfigModal.tsx +600 -0
  286. package/src/live/components/StreamConfigPanel.tsx +729 -0
  287. package/src/live/context/LiveConfigContext.tsx +96 -0
  288. package/src/live/context/LiveRoomContext.tsx +235 -0
  289. package/src/live/hooks/useActiveSpeakers.ts +39 -0
  290. package/src/live/hooks/useRoomAudio.ts +103 -0
  291. package/src/live/hooks/useRoomConnection.ts +162 -0
  292. package/src/live/hooks/useRoomManager.ts +17 -0
  293. package/src/live/hooks/useRoomUsers.ts +52 -0
  294. package/src/live/index.ts +92 -0
  295. package/src/live/services/livekitService.ts +11 -0
  296. package/src/live/services/spaceSocketService.ts +136 -0
  297. package/src/live/services/spacesService.ts +692 -0
  298. package/src/live/types.ts +119 -0
  299. package/src/live/validation.ts +279 -0
  300. package/dist/cjs/client.js +0 -244
  301. package/dist/cjs/errors.js +0 -16
  302. package/dist/cjs/index.js +0 -15
  303. package/dist/cjs/package.json +0 -3
  304. package/dist/esm/client.js +0 -240
  305. package/dist/esm/errors.js +0 -12
  306. package/dist/esm/index.js +0 -3
  307. package/dist/esm/package.json +0 -3
@@ -0,0 +1,650 @@
1
+ "use strict";
2
+
3
+ import React, { useState } from 'react';
4
+ import { View, Text, Modal, StyleSheet, TouchableOpacity, TextInput, Image, ActivityIndicator, Platform, ScrollView, KeyboardAvoidingView } from 'react-native';
5
+ import MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';
6
+ import { useAuth } from '@oxyhq/services';
7
+ import * as ImagePicker from 'expo-image-picker';
8
+ import { useLiveConfig } from "../context/LiveConfigContext.js";
9
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
+ export function StreamConfigModal({
11
+ visible,
12
+ onClose,
13
+ roomId,
14
+ initialStreamUrl,
15
+ onStreamStarted
16
+ }) {
17
+ const {
18
+ useTheme,
19
+ roomsService,
20
+ toast
21
+ } = useLiveConfig();
22
+ const theme = useTheme();
23
+ const {
24
+ oxyServices
25
+ } = useAuth();
26
+ const initialUrl = initialStreamUrl?.trim() ?? '';
27
+ const isEditingUrlStream = initialUrl.length > 0;
28
+ const [mode, setMode] = useState('url');
29
+ const [loading, setLoading] = useState(false);
30
+ const [streamUrl, setStreamUrl] = useState(initialUrl);
31
+ const [rtmpUrl, setRtmpUrl] = useState(null);
32
+ const [streamKey, setStreamKey] = useState(null);
33
+ const [generatingKey, setGeneratingKey] = useState(false);
34
+ const [title, setTitle] = useState('');
35
+ const [description, setDescription] = useState('');
36
+ const [imageFileId, setImageFileId] = useState(null);
37
+ const [imagePreviewUri, setImagePreviewUri] = useState(null);
38
+ const [uploadingImage, setUploadingImage] = useState(false);
39
+ const resetState = () => {
40
+ setStreamUrl('');
41
+ setRtmpUrl(null);
42
+ setStreamKey(null);
43
+ setTitle('');
44
+ setDescription('');
45
+ setImageFileId(null);
46
+ setImagePreviewUri(null);
47
+ setMode('url');
48
+ };
49
+ const handleClose = () => {
50
+ onClose();
51
+ };
52
+ const handlePickImage = async () => {
53
+ try {
54
+ const result = await ImagePicker.launchImageLibraryAsync({
55
+ mediaTypes: ['images'],
56
+ quality: 0.8,
57
+ allowsEditing: true,
58
+ aspect: [16, 9]
59
+ });
60
+ if (result.canceled || !result.assets?.[0]) return;
61
+ const asset = result.assets[0];
62
+ setImagePreviewUri(asset.uri);
63
+ setUploadingImage(true);
64
+ try {
65
+ let file;
66
+ if (Platform.OS === 'web') {
67
+ const response = await fetch(asset.uri);
68
+ const blob = await response.blob();
69
+ file = new File([blob], 'stream-cover.jpg', {
70
+ type: asset.mimeType || 'image/jpeg'
71
+ });
72
+ } else {
73
+ const response = await fetch(asset.uri);
74
+ file = await response.blob();
75
+ }
76
+ if (!oxyServices) {
77
+ toast.error('File uploads are unavailable');
78
+ setImagePreviewUri(null);
79
+ return;
80
+ }
81
+ const uploadResponse = await oxyServices.uploadRawFile(file, 'public');
82
+ const fileId = uploadResponse?.file?.key || uploadResponse?.file?.id || uploadResponse?.id || uploadResponse?.fileId || uploadResponse?.data?.id;
83
+ if (fileId) {
84
+ setImageFileId(fileId);
85
+ } else {
86
+ console.error('Upload response missing file ID:', JSON.stringify(uploadResponse, null, 2));
87
+ toast.error('Failed to upload image');
88
+ setImagePreviewUri(null);
89
+ }
90
+ } catch (err) {
91
+ console.error('Image upload error:', err);
92
+ toast.error('Failed to upload image');
93
+ setImagePreviewUri(null);
94
+ } finally {
95
+ setUploadingImage(false);
96
+ }
97
+ } catch (err) {
98
+ console.error('Image picker error:', err);
99
+ toast.error('Could not open image picker');
100
+ }
101
+ };
102
+ const handleStartUrlStream = async () => {
103
+ if (!streamUrl.trim() || loading) return;
104
+ setLoading(true);
105
+ try {
106
+ const result = await roomsService.startStream(roomId, {
107
+ url: streamUrl.trim(),
108
+ title: title.trim() || undefined,
109
+ image: imageFileId || undefined,
110
+ description: description.trim() || undefined
111
+ });
112
+ if (result) {
113
+ toast.success('Stream started');
114
+ resetState();
115
+ onStreamStarted();
116
+ onClose();
117
+ } else {
118
+ toast.error('Failed to start stream');
119
+ }
120
+ } catch {
121
+ toast.error('Failed to start stream');
122
+ } finally {
123
+ setLoading(false);
124
+ }
125
+ };
126
+ const handleGenerateKey = async () => {
127
+ if (generatingKey) return;
128
+ setGeneratingKey(true);
129
+ try {
130
+ const result = await roomsService.generateStreamKey(roomId, {
131
+ title: title.trim() || undefined,
132
+ image: imageFileId || undefined,
133
+ description: description.trim() || undefined
134
+ });
135
+ if (result?.rtmpUrl && result?.streamKey) {
136
+ setRtmpUrl(result.rtmpUrl);
137
+ setStreamKey(result.streamKey);
138
+ toast.success('Stream key generated');
139
+ onStreamStarted();
140
+ } else {
141
+ console.error('Generate stream key response:', JSON.stringify(result, null, 2));
142
+ toast.error('Failed to generate stream key');
143
+ }
144
+ } catch (err) {
145
+ console.error('Generate stream key error:', err);
146
+ const msg = err instanceof Error ? err.message : 'Unknown error';
147
+ toast.error(`Stream key error: ${msg}`);
148
+ } finally {
149
+ setGeneratingKey(false);
150
+ }
151
+ };
152
+ const handleUpdateMetadata = async () => {
153
+ if (loading) return;
154
+ const trimmedUrl = streamUrl.trim();
155
+ if (mode === 'url' && !trimmedUrl) {
156
+ toast.error('Stream URL is required');
157
+ return;
158
+ }
159
+ setLoading(true);
160
+ try {
161
+ const success = await roomsService.updateStreamMetadata(roomId, {
162
+ ...(mode === 'url' ? {
163
+ url: trimmedUrl
164
+ } : {}),
165
+ title: title.trim() || undefined,
166
+ image: imageFileId || undefined,
167
+ description: description.trim() || undefined
168
+ });
169
+ if (success) {
170
+ toast.success('Stream info updated');
171
+ onStreamStarted();
172
+ } else {
173
+ toast.error('Failed to update stream info');
174
+ }
175
+ } catch {
176
+ toast.error('Failed to update stream info');
177
+ } finally {
178
+ setLoading(false);
179
+ }
180
+ };
181
+ const copyToClipboard = async (text, label) => {
182
+ try {
183
+ if (Platform.OS === 'web') {
184
+ await navigator.clipboard.writeText(text);
185
+ } else {
186
+ const {
187
+ Clipboard
188
+ } = require('react-native');
189
+ Clipboard.setString(text);
190
+ }
191
+ toast.success(`${label} copied`);
192
+ } catch {
193
+ toast.error('Failed to copy');
194
+ }
195
+ };
196
+ return /*#__PURE__*/_jsx(Modal, {
197
+ visible: visible,
198
+ animationType: "slide",
199
+ presentationStyle: "pageSheet",
200
+ onRequestClose: handleClose,
201
+ children: /*#__PURE__*/_jsxs(KeyboardAvoidingView, {
202
+ style: [styles.container, {
203
+ backgroundColor: theme.colors.background
204
+ }],
205
+ behavior: Platform.OS === 'ios' ? 'padding' : undefined,
206
+ children: [/*#__PURE__*/_jsxs(View, {
207
+ style: [styles.header, {
208
+ borderBottomColor: theme.colors.border
209
+ }],
210
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
211
+ onPress: handleClose,
212
+ style: styles.closeBtn,
213
+ children: /*#__PURE__*/_jsx(MaterialCommunityIcons, {
214
+ name: "close",
215
+ size: 24,
216
+ color: theme.colors.text
217
+ })
218
+ }), /*#__PURE__*/_jsx(Text, {
219
+ style: [styles.headerTitle, {
220
+ color: theme.colors.text
221
+ }],
222
+ children: "Stream Setup"
223
+ }), /*#__PURE__*/_jsx(View, {
224
+ style: styles.closeBtn
225
+ })]
226
+ }), /*#__PURE__*/_jsxs(ScrollView, {
227
+ style: styles.scrollContent,
228
+ keyboardShouldPersistTaps: "handled",
229
+ children: [/*#__PURE__*/_jsxs(View, {
230
+ style: styles.modeSelector,
231
+ children: [/*#__PURE__*/_jsxs(TouchableOpacity, {
232
+ style: [styles.modeTab, {
233
+ borderColor: theme.colors.border
234
+ }, mode === 'url' && {
235
+ backgroundColor: theme.colors.primary,
236
+ borderColor: theme.colors.primary
237
+ }],
238
+ onPress: () => setMode('url'),
239
+ children: [/*#__PURE__*/_jsx(MaterialCommunityIcons, {
240
+ name: "link",
241
+ size: 16,
242
+ color: mode === 'url' ? '#FFFFFF' : theme.colors.text
243
+ }), /*#__PURE__*/_jsx(Text, {
244
+ style: [styles.modeTabText, {
245
+ color: mode === 'url' ? '#FFFFFF' : theme.colors.text
246
+ }],
247
+ children: "Stream URL"
248
+ })]
249
+ }), /*#__PURE__*/_jsxs(TouchableOpacity, {
250
+ style: [styles.modeTab, {
251
+ borderColor: theme.colors.border
252
+ }, mode === 'rtmp' && {
253
+ backgroundColor: theme.colors.primary,
254
+ borderColor: theme.colors.primary
255
+ }],
256
+ onPress: () => setMode('rtmp'),
257
+ children: [/*#__PURE__*/_jsx(MaterialCommunityIcons, {
258
+ name: "key",
259
+ size: 16,
260
+ color: mode === 'rtmp' ? '#FFFFFF' : theme.colors.text
261
+ }), /*#__PURE__*/_jsx(Text, {
262
+ style: [styles.modeTabText, {
263
+ color: mode === 'rtmp' ? '#FFFFFF' : theme.colors.text
264
+ }],
265
+ children: "External App"
266
+ })]
267
+ })]
268
+ }), mode === 'url' && /*#__PURE__*/_jsx(View, {
269
+ style: styles.section,
270
+ children: /*#__PURE__*/_jsx(TextInput, {
271
+ style: [styles.input, {
272
+ backgroundColor: theme.colors.card,
273
+ borderColor: theme.colors.border,
274
+ color: theme.colors.text
275
+ }],
276
+ placeholder: "Stream URL (m3u8, Icecast, etc.)",
277
+ placeholderTextColor: theme.colors.textSecondary,
278
+ value: streamUrl,
279
+ onChangeText: setStreamUrl,
280
+ autoCapitalize: "none",
281
+ autoCorrect: false,
282
+ keyboardType: "url"
283
+ })
284
+ }), mode === 'rtmp' && /*#__PURE__*/_jsx(View, {
285
+ style: styles.section,
286
+ children: !rtmpUrl ? /*#__PURE__*/_jsxs(TouchableOpacity, {
287
+ style: [styles.generateBtn, {
288
+ backgroundColor: theme.colors.primary,
289
+ opacity: generatingKey ? 0.6 : 1
290
+ }],
291
+ onPress: handleGenerateKey,
292
+ disabled: generatingKey,
293
+ children: [generatingKey ? /*#__PURE__*/_jsx(ActivityIndicator, {
294
+ size: "small",
295
+ color: "#FFFFFF"
296
+ }) : /*#__PURE__*/_jsx(MaterialCommunityIcons, {
297
+ name: "key",
298
+ size: 18,
299
+ color: "#FFFFFF"
300
+ }), /*#__PURE__*/_jsx(Text, {
301
+ style: styles.generateBtnText,
302
+ children: generatingKey ? 'Generating...' : 'Generate Stream Key'
303
+ })]
304
+ }) : /*#__PURE__*/_jsxs(View, {
305
+ style: styles.credentialsBox,
306
+ children: [/*#__PURE__*/_jsx(Text, {
307
+ style: [styles.credLabel, {
308
+ color: theme.colors.textSecondary
309
+ }],
310
+ children: "RTMP URL"
311
+ }), /*#__PURE__*/_jsxs(View, {
312
+ style: [styles.credRow, {
313
+ backgroundColor: theme.colors.card,
314
+ borderColor: theme.colors.border
315
+ }],
316
+ children: [/*#__PURE__*/_jsx(Text, {
317
+ style: [styles.credValue, {
318
+ color: theme.colors.text
319
+ }],
320
+ numberOfLines: 1,
321
+ children: rtmpUrl
322
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
323
+ onPress: () => copyToClipboard(rtmpUrl, 'RTMP URL'),
324
+ style: styles.copyBtn,
325
+ children: /*#__PURE__*/_jsx(MaterialCommunityIcons, {
326
+ name: "content-copy",
327
+ size: 18,
328
+ color: theme.colors.primary
329
+ })
330
+ })]
331
+ }), /*#__PURE__*/_jsx(Text, {
332
+ style: [styles.credLabel, {
333
+ color: theme.colors.textSecondary,
334
+ marginTop: 12
335
+ }],
336
+ children: "Stream Key"
337
+ }), /*#__PURE__*/_jsxs(View, {
338
+ style: [styles.credRow, {
339
+ backgroundColor: theme.colors.card,
340
+ borderColor: theme.colors.border
341
+ }],
342
+ children: [/*#__PURE__*/_jsx(Text, {
343
+ style: [styles.credValue, {
344
+ color: theme.colors.text
345
+ }],
346
+ numberOfLines: 1,
347
+ children: streamKey
348
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
349
+ onPress: () => {
350
+ if (streamKey) copyToClipboard(streamKey, 'Stream key');
351
+ },
352
+ style: styles.copyBtn,
353
+ children: /*#__PURE__*/_jsx(MaterialCommunityIcons, {
354
+ name: "content-copy",
355
+ size: 18,
356
+ color: theme.colors.primary
357
+ })
358
+ })]
359
+ }), /*#__PURE__*/_jsxs(View, {
360
+ style: styles.infoRow,
361
+ children: [/*#__PURE__*/_jsx(MaterialCommunityIcons, {
362
+ name: "information",
363
+ size: 16,
364
+ color: theme.colors.textSecondary
365
+ }), /*#__PURE__*/_jsx(Text, {
366
+ style: [styles.infoText, {
367
+ color: theme.colors.textSecondary
368
+ }],
369
+ children: "Use these in OBS or your streaming app. Audio will play in the room once you start streaming."
370
+ })]
371
+ })]
372
+ })
373
+ }), /*#__PURE__*/_jsxs(View, {
374
+ style: styles.section,
375
+ children: [/*#__PURE__*/_jsx(Text, {
376
+ style: [styles.sectionLabel, {
377
+ color: theme.colors.textSecondary
378
+ }],
379
+ children: "Stream Info (optional)"
380
+ }), /*#__PURE__*/_jsx(TextInput, {
381
+ style: [styles.input, {
382
+ backgroundColor: theme.colors.card,
383
+ borderColor: theme.colors.border,
384
+ color: theme.colors.text
385
+ }],
386
+ placeholder: "Title",
387
+ placeholderTextColor: theme.colors.textSecondary,
388
+ value: title,
389
+ onChangeText: setTitle,
390
+ maxLength: 200
391
+ }), /*#__PURE__*/_jsxs(TouchableOpacity, {
392
+ style: [styles.imagePicker, {
393
+ backgroundColor: theme.colors.card,
394
+ borderColor: theme.colors.border
395
+ }],
396
+ onPress: handlePickImage,
397
+ disabled: uploadingImage,
398
+ children: [imagePreviewUri ? /*#__PURE__*/_jsx(Image, {
399
+ source: {
400
+ uri: imagePreviewUri
401
+ },
402
+ style: styles.imagePreview
403
+ }) : /*#__PURE__*/_jsxs(View, {
404
+ style: styles.imagePickerPlaceholder,
405
+ children: [/*#__PURE__*/_jsx(MaterialCommunityIcons, {
406
+ name: "image",
407
+ size: 24,
408
+ color: theme.colors.textSecondary
409
+ }), /*#__PURE__*/_jsx(Text, {
410
+ style: [styles.imagePickerText, {
411
+ color: theme.colors.textSecondary
412
+ }],
413
+ children: "Cover image"
414
+ })]
415
+ }), uploadingImage && /*#__PURE__*/_jsx(View, {
416
+ style: styles.imageOverlay,
417
+ children: /*#__PURE__*/_jsx(ActivityIndicator, {
418
+ size: "small",
419
+ color: "#FFFFFF"
420
+ })
421
+ })]
422
+ }), /*#__PURE__*/_jsx(TextInput, {
423
+ style: [styles.input, styles.inputMultiline, {
424
+ backgroundColor: theme.colors.card,
425
+ borderColor: theme.colors.border,
426
+ color: theme.colors.text
427
+ }],
428
+ placeholder: "Description",
429
+ placeholderTextColor: theme.colors.textSecondary,
430
+ value: description,
431
+ onChangeText: setDescription,
432
+ maxLength: 500,
433
+ multiline: true,
434
+ numberOfLines: 2
435
+ })]
436
+ }), /*#__PURE__*/_jsxs(View, {
437
+ style: styles.footer,
438
+ children: [mode === 'url' && /*#__PURE__*/_jsxs(TouchableOpacity, {
439
+ style: [styles.startBtn, {
440
+ backgroundColor: streamUrl.trim() ? theme.colors.primary : theme.colors.backgroundSecondary,
441
+ opacity: loading ? 0.6 : 1
442
+ }],
443
+ onPress: isEditingUrlStream ? handleUpdateMetadata : handleStartUrlStream,
444
+ disabled: !streamUrl.trim() || loading,
445
+ children: [loading ? /*#__PURE__*/_jsx(ActivityIndicator, {
446
+ size: "small",
447
+ color: "#FFFFFF"
448
+ }) : isEditingUrlStream ? /*#__PURE__*/_jsx(MaterialCommunityIcons, {
449
+ name: "content-save",
450
+ size: 18,
451
+ color: streamUrl.trim() ? '#FFFFFF' : theme.colors.textSecondary
452
+ }) : /*#__PURE__*/_jsx(MaterialCommunityIcons, {
453
+ name: "play",
454
+ size: 18,
455
+ color: streamUrl.trim() ? '#FFFFFF' : theme.colors.textSecondary
456
+ }), /*#__PURE__*/_jsx(Text, {
457
+ style: {
458
+ color: streamUrl.trim() ? '#FFFFFF' : theme.colors.textSecondary,
459
+ fontWeight: '600',
460
+ fontSize: 16
461
+ },
462
+ children: isEditingUrlStream ? 'Save Stream Info' : 'Start Stream'
463
+ })]
464
+ }), mode === 'rtmp' && rtmpUrl && /*#__PURE__*/_jsxs(TouchableOpacity, {
465
+ style: [styles.startBtn, {
466
+ backgroundColor: theme.colors.primary,
467
+ opacity: loading ? 0.6 : 1
468
+ }],
469
+ onPress: handleUpdateMetadata,
470
+ disabled: loading,
471
+ children: [loading ? /*#__PURE__*/_jsx(ActivityIndicator, {
472
+ size: "small",
473
+ color: "#FFFFFF"
474
+ }) : /*#__PURE__*/_jsx(MaterialCommunityIcons, {
475
+ name: "content-save",
476
+ size: 18,
477
+ color: "#FFFFFF"
478
+ }), /*#__PURE__*/_jsx(Text, {
479
+ style: {
480
+ color: '#FFFFFF',
481
+ fontWeight: '600',
482
+ fontSize: 16
483
+ },
484
+ children: "Save Stream Info"
485
+ })]
486
+ })]
487
+ })]
488
+ })]
489
+ })
490
+ });
491
+ }
492
+ const styles = StyleSheet.create({
493
+ container: {
494
+ flex: 1
495
+ },
496
+ scrollContent: {
497
+ flex: 1
498
+ },
499
+ header: {
500
+ flexDirection: 'row',
501
+ alignItems: 'center',
502
+ justifyContent: 'space-between',
503
+ paddingHorizontal: 16,
504
+ paddingVertical: 14,
505
+ borderBottomWidth: 1
506
+ },
507
+ closeBtn: {
508
+ width: 40,
509
+ alignItems: 'center'
510
+ },
511
+ headerTitle: {
512
+ fontSize: 17,
513
+ fontWeight: '600'
514
+ },
515
+ modeSelector: {
516
+ flexDirection: 'row',
517
+ gap: 10,
518
+ paddingHorizontal: 16,
519
+ paddingTop: 16,
520
+ paddingBottom: 8
521
+ },
522
+ modeTab: {
523
+ flex: 1,
524
+ flexDirection: 'row',
525
+ alignItems: 'center',
526
+ justifyContent: 'center',
527
+ gap: 6,
528
+ paddingVertical: 10,
529
+ borderRadius: 10,
530
+ borderWidth: 1
531
+ },
532
+ modeTabText: {
533
+ fontSize: 14,
534
+ fontWeight: '600'
535
+ },
536
+ section: {
537
+ paddingHorizontal: 16,
538
+ paddingTop: 12,
539
+ gap: 10
540
+ },
541
+ sectionLabel: {
542
+ fontSize: 13,
543
+ fontWeight: '600',
544
+ textTransform: 'uppercase',
545
+ letterSpacing: 0.5,
546
+ marginBottom: 2
547
+ },
548
+ input: {
549
+ borderWidth: 1,
550
+ borderRadius: 10,
551
+ paddingHorizontal: 14,
552
+ paddingVertical: 12,
553
+ fontSize: 15
554
+ },
555
+ inputMultiline: {
556
+ minHeight: 60,
557
+ textAlignVertical: 'top'
558
+ },
559
+ imagePicker: {
560
+ borderWidth: 1,
561
+ borderRadius: 10,
562
+ overflow: 'hidden',
563
+ height: 100
564
+ },
565
+ imagePreview: {
566
+ width: '100%',
567
+ height: '100%',
568
+ resizeMode: 'cover'
569
+ },
570
+ imagePickerPlaceholder: {
571
+ flex: 1,
572
+ alignItems: 'center',
573
+ justifyContent: 'center',
574
+ gap: 4
575
+ },
576
+ imagePickerText: {
577
+ fontSize: 13,
578
+ fontWeight: '500'
579
+ },
580
+ imageOverlay: {
581
+ ...StyleSheet.absoluteFill,
582
+ backgroundColor: 'rgba(0,0,0,0.4)',
583
+ alignItems: 'center',
584
+ justifyContent: 'center'
585
+ },
586
+ generateBtn: {
587
+ flexDirection: 'row',
588
+ alignItems: 'center',
589
+ justifyContent: 'center',
590
+ gap: 8,
591
+ paddingVertical: 14,
592
+ borderRadius: 10
593
+ },
594
+ generateBtnText: {
595
+ color: '#FFFFFF',
596
+ fontSize: 16,
597
+ fontWeight: '600'
598
+ },
599
+ credentialsBox: {
600
+ gap: 4
601
+ },
602
+ credLabel: {
603
+ fontSize: 12,
604
+ fontWeight: '600',
605
+ textTransform: 'uppercase',
606
+ letterSpacing: 0.5
607
+ },
608
+ credRow: {
609
+ flexDirection: 'row',
610
+ alignItems: 'center',
611
+ borderWidth: 1,
612
+ borderRadius: 10,
613
+ paddingLeft: 14,
614
+ paddingRight: 4,
615
+ paddingVertical: 4
616
+ },
617
+ credValue: {
618
+ flex: 1,
619
+ fontSize: 13,
620
+ fontFamily: Platform.OS === 'ios' ? 'Menlo' : 'monospace'
621
+ },
622
+ copyBtn: {
623
+ padding: 10
624
+ },
625
+ infoRow: {
626
+ flexDirection: 'row',
627
+ alignItems: 'flex-start',
628
+ gap: 6,
629
+ marginTop: 10
630
+ },
631
+ infoText: {
632
+ flex: 1,
633
+ fontSize: 13,
634
+ lineHeight: 18
635
+ },
636
+ footer: {
637
+ paddingHorizontal: 16,
638
+ paddingTop: 20,
639
+ paddingBottom: 40
640
+ },
641
+ startBtn: {
642
+ flexDirection: 'row',
643
+ alignItems: 'center',
644
+ justifyContent: 'center',
645
+ gap: 8,
646
+ paddingVertical: 14,
647
+ borderRadius: 12
648
+ }
649
+ });
650
+ //# sourceMappingURL=StreamConfigModal.js.map