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