@syra.fm/sdk 0.4.0 → 0.6.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 (317) hide show
  1. package/README.md +33 -4
  2. package/lib/commonjs/client.js +268 -0
  3. package/lib/commonjs/client.js.map +1 -0
  4. package/lib/commonjs/errors.js +22 -0
  5. package/lib/commonjs/errors.js.map +1 -0
  6. package/lib/commonjs/index.js +63 -0
  7. package/lib/commonjs/index.js.map +1 -0
  8. package/lib/commonjs/index.native.js +28 -0
  9. package/lib/commonjs/index.native.js.map +1 -0
  10. package/lib/commonjs/live/assets/icons/spaces-icon.js +42 -0
  11. package/lib/commonjs/live/assets/icons/spaces-icon.js.map +1 -0
  12. package/lib/commonjs/live/assets/icons/syra-icon.js +43 -0
  13. package/lib/commonjs/live/assets/icons/syra-icon.js.map +1 -0
  14. package/lib/commonjs/live/colors.js +54 -0
  15. package/lib/commonjs/live/colors.js.map +1 -0
  16. package/lib/commonjs/live/components/AnimatedPulse.js +38 -0
  17. package/lib/commonjs/live/components/AnimatedPulse.js.map +1 -0
  18. package/lib/commonjs/live/components/AnimatedSpeakerRing.js +90 -0
  19. package/lib/commonjs/live/components/AnimatedSpeakerRing.js.map +1 -0
  20. package/lib/commonjs/live/components/CreateRoomSheet.js +688 -0
  21. package/lib/commonjs/live/components/CreateRoomSheet.js.map +1 -0
  22. package/lib/commonjs/live/components/InsightsPanel.js +333 -0
  23. package/lib/commonjs/live/components/InsightsPanel.js.map +1 -0
  24. package/lib/commonjs/live/components/LiveRoomSheet.js +1196 -0
  25. package/lib/commonjs/live/components/LiveRoomSheet.js.map +1 -0
  26. package/lib/commonjs/live/components/MiniRoomBar.js +162 -0
  27. package/lib/commonjs/live/components/MiniRoomBar.js.map +1 -0
  28. package/lib/commonjs/live/components/PanelHeader.js +57 -0
  29. package/lib/commonjs/live/components/PanelHeader.js.map +1 -0
  30. package/lib/commonjs/live/components/PodcastStreamPicker.js +1190 -0
  31. package/lib/commonjs/live/components/PodcastStreamPicker.js.map +1 -0
  32. package/lib/commonjs/live/components/RecordingCard.js +192 -0
  33. package/lib/commonjs/live/components/RecordingCard.js.map +1 -0
  34. package/lib/commonjs/live/components/RecordingsPanel.js +305 -0
  35. package/lib/commonjs/live/components/RecordingsPanel.js.map +1 -0
  36. package/lib/commonjs/live/components/RoomCard.js +349 -0
  37. package/lib/commonjs/live/components/RoomCard.js.map +1 -0
  38. package/lib/commonjs/live/components/StreamConfigModal.js +656 -0
  39. package/lib/commonjs/live/components/StreamConfigModal.js.map +1 -0
  40. package/lib/commonjs/live/components/StreamConfigPanel.js +822 -0
  41. package/lib/commonjs/live/components/StreamConfigPanel.js.map +1 -0
  42. package/lib/commonjs/live/context/LiveConfigContext.js +46 -0
  43. package/lib/commonjs/live/context/LiveConfigContext.js.map +1 -0
  44. package/lib/commonjs/live/context/LiveRoomContext.js +195 -0
  45. package/lib/commonjs/live/context/LiveRoomContext.js.map +1 -0
  46. package/lib/commonjs/live/hooks/useActiveSpeakers.js +35 -0
  47. package/lib/commonjs/live/hooks/useActiveSpeakers.js.map +1 -0
  48. package/lib/commonjs/live/hooks/useRoomAudio.js +129 -0
  49. package/lib/commonjs/live/hooks/useRoomAudio.js.map +1 -0
  50. package/lib/commonjs/live/hooks/useRoomConnection.js +177 -0
  51. package/lib/commonjs/live/hooks/useRoomConnection.js.map +1 -0
  52. package/lib/commonjs/live/hooks/useRoomManager.js +37 -0
  53. package/lib/commonjs/live/hooks/useRoomManager.js.map +1 -0
  54. package/lib/commonjs/live/hooks/useRoomUsers.js +52 -0
  55. package/lib/commonjs/live/hooks/useRoomUsers.js.map +1 -0
  56. package/lib/commonjs/live/index.js +341 -0
  57. package/lib/commonjs/live/index.js.map +1 -0
  58. package/lib/commonjs/live/services/livekitService.js +20 -0
  59. package/lib/commonjs/live/services/livekitService.js.map +1 -0
  60. package/lib/commonjs/live/services/spaceSocketService.js +181 -0
  61. package/lib/commonjs/live/services/spaceSocketService.js.map +1 -0
  62. package/lib/commonjs/live/services/spacesService.js +642 -0
  63. package/lib/commonjs/live/services/spacesService.js.map +1 -0
  64. package/lib/commonjs/live/types.js +6 -0
  65. package/lib/commonjs/live/types.js.map +1 -0
  66. package/lib/commonjs/live/validation.js +238 -0
  67. package/lib/commonjs/live/validation.js.map +1 -0
  68. package/lib/commonjs/package.json +1 -0
  69. package/{dist/cjs → lib/commonjs}/schema.js +55 -47
  70. package/lib/commonjs/schema.js.map +1 -0
  71. package/lib/module/client.js +264 -0
  72. package/lib/module/client.js.map +1 -0
  73. package/lib/module/errors.js +17 -0
  74. package/lib/module/errors.js.map +1 -0
  75. package/lib/module/index.js +6 -0
  76. package/lib/module/index.js.map +1 -0
  77. package/lib/module/index.native.js +5 -0
  78. package/lib/module/index.native.js.map +1 -0
  79. package/lib/module/live/assets/icons/spaces-icon.js +34 -0
  80. package/lib/module/live/assets/icons/spaces-icon.js.map +1 -0
  81. package/lib/module/live/assets/icons/syra-icon.js +36 -0
  82. package/lib/module/live/assets/icons/syra-icon.js.map +1 -0
  83. package/lib/module/live/colors.js +49 -0
  84. package/lib/module/live/colors.js.map +1 -0
  85. package/lib/module/live/components/AnimatedPulse.js +33 -0
  86. package/lib/module/live/components/AnimatedPulse.js.map +1 -0
  87. package/lib/module/live/components/AnimatedSpeakerRing.js +85 -0
  88. package/lib/module/live/components/AnimatedSpeakerRing.js.map +1 -0
  89. package/lib/module/live/components/CreateRoomSheet.js +682 -0
  90. package/lib/module/live/components/CreateRoomSheet.js.map +1 -0
  91. package/lib/module/live/components/InsightsPanel.js +327 -0
  92. package/lib/module/live/components/InsightsPanel.js.map +1 -0
  93. package/lib/module/live/components/LiveRoomSheet.js +1190 -0
  94. package/lib/module/live/components/LiveRoomSheet.js.map +1 -0
  95. package/lib/module/live/components/MiniRoomBar.js +155 -0
  96. package/lib/module/live/components/MiniRoomBar.js.map +1 -0
  97. package/lib/module/live/components/PanelHeader.js +52 -0
  98. package/lib/module/live/components/PanelHeader.js.map +1 -0
  99. package/lib/module/live/components/PodcastStreamPicker.js +1183 -0
  100. package/lib/module/live/components/PodcastStreamPicker.js.map +1 -0
  101. package/lib/module/live/components/RecordingCard.js +187 -0
  102. package/lib/module/live/components/RecordingCard.js.map +1 -0
  103. package/lib/module/live/components/RecordingsPanel.js +299 -0
  104. package/lib/module/live/components/RecordingsPanel.js.map +1 -0
  105. package/lib/module/live/components/RoomCard.js +343 -0
  106. package/lib/module/live/components/RoomCard.js.map +1 -0
  107. package/lib/module/live/components/StreamConfigModal.js +650 -0
  108. package/lib/module/live/components/StreamConfigModal.js.map +1 -0
  109. package/lib/module/live/components/StreamConfigPanel.js +816 -0
  110. package/lib/module/live/components/StreamConfigPanel.js.map +1 -0
  111. package/lib/module/live/context/LiveConfigContext.js +40 -0
  112. package/lib/module/live/context/LiveConfigContext.js.map +1 -0
  113. package/lib/module/live/context/LiveRoomContext.js +189 -0
  114. package/lib/module/live/context/LiveRoomContext.js.map +1 -0
  115. package/lib/module/live/hooks/useActiveSpeakers.js +31 -0
  116. package/lib/module/live/hooks/useActiveSpeakers.js.map +1 -0
  117. package/lib/module/live/hooks/useRoomAudio.js +125 -0
  118. package/lib/module/live/hooks/useRoomAudio.js.map +1 -0
  119. package/lib/module/live/hooks/useRoomConnection.js +173 -0
  120. package/lib/module/live/hooks/useRoomConnection.js.map +1 -0
  121. package/lib/module/live/hooks/useRoomManager.js +32 -0
  122. package/lib/module/live/hooks/useRoomManager.js.map +1 -0
  123. package/lib/module/live/hooks/useRoomUsers.js +46 -0
  124. package/lib/module/live/hooks/useRoomUsers.js.map +1 -0
  125. package/lib/module/live/index.js +42 -0
  126. package/lib/module/live/index.js.map +1 -0
  127. package/lib/module/live/services/livekitService.js +16 -0
  128. package/lib/module/live/services/livekitService.js.map +1 -0
  129. package/lib/module/live/services/spaceSocketService.js +176 -0
  130. package/lib/module/live/services/spaceSocketService.js.map +1 -0
  131. package/lib/module/live/services/spacesService.js +639 -0
  132. package/lib/module/live/services/spacesService.js.map +1 -0
  133. package/lib/module/live/types.js +4 -0
  134. package/lib/module/live/types.js.map +1 -0
  135. package/lib/module/live/validation.js +229 -0
  136. package/lib/module/live/validation.js.map +1 -0
  137. package/lib/module/package.json +1 -0
  138. package/{dist/esm → lib/module}/schema.js +47 -39
  139. package/lib/module/schema.js.map +1 -0
  140. package/{dist/types → lib/typescript/commonjs}/client.d.ts +1 -0
  141. package/lib/typescript/commonjs/client.d.ts.map +1 -0
  142. package/{dist/types → lib/typescript/commonjs}/errors.d.ts +1 -0
  143. package/lib/typescript/commonjs/errors.d.ts.map +1 -0
  144. package/{dist/types → lib/typescript/commonjs}/index.d.ts +1 -0
  145. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  146. package/lib/typescript/commonjs/index.native.d.ts +3 -0
  147. package/lib/typescript/commonjs/index.native.d.ts.map +1 -0
  148. package/lib/typescript/commonjs/live/assets/icons/spaces-icon.d.ts +13 -0
  149. package/lib/typescript/commonjs/live/assets/icons/spaces-icon.d.ts.map +1 -0
  150. package/lib/typescript/commonjs/live/assets/icons/syra-icon.d.ts +13 -0
  151. package/lib/typescript/commonjs/live/assets/icons/syra-icon.d.ts.map +1 -0
  152. package/lib/typescript/commonjs/live/colors.d.ts +35 -0
  153. package/lib/typescript/commonjs/live/colors.d.ts.map +1 -0
  154. package/lib/typescript/commonjs/live/components/AnimatedPulse.d.ts +8 -0
  155. package/lib/typescript/commonjs/live/components/AnimatedPulse.d.ts.map +1 -0
  156. package/lib/typescript/commonjs/live/components/AnimatedSpeakerRing.d.ts +10 -0
  157. package/lib/typescript/commonjs/live/components/AnimatedSpeakerRing.d.ts.map +1 -0
  158. package/lib/typescript/commonjs/live/components/CreateRoomSheet.d.ts +26 -0
  159. package/lib/typescript/commonjs/live/components/CreateRoomSheet.d.ts.map +1 -0
  160. package/lib/typescript/commonjs/live/components/InsightsPanel.d.ts +11 -0
  161. package/lib/typescript/commonjs/live/components/InsightsPanel.d.ts.map +1 -0
  162. package/lib/typescript/commonjs/live/components/LiveRoomSheet.d.ts +11 -0
  163. package/lib/typescript/commonjs/live/components/LiveRoomSheet.d.ts.map +1 -0
  164. package/lib/typescript/commonjs/live/components/MiniRoomBar.d.ts +15 -0
  165. package/lib/typescript/commonjs/live/components/MiniRoomBar.d.ts.map +1 -0
  166. package/lib/typescript/commonjs/live/components/PanelHeader.d.ts +10 -0
  167. package/lib/typescript/commonjs/live/components/PanelHeader.d.ts.map +1 -0
  168. package/lib/typescript/commonjs/live/components/PodcastStreamPicker.d.ts +54 -0
  169. package/lib/typescript/commonjs/live/components/PodcastStreamPicker.d.ts.map +1 -0
  170. package/lib/typescript/commonjs/live/components/RecordingCard.d.ts +11 -0
  171. package/lib/typescript/commonjs/live/components/RecordingCard.d.ts.map +1 -0
  172. package/lib/typescript/commonjs/live/components/RecordingsPanel.d.ts +12 -0
  173. package/lib/typescript/commonjs/live/components/RecordingsPanel.d.ts.map +1 -0
  174. package/lib/typescript/commonjs/live/components/RoomCard.d.ts +38 -0
  175. package/lib/typescript/commonjs/live/components/RoomCard.d.ts.map +1 -0
  176. package/lib/typescript/commonjs/live/components/StreamConfigModal.d.ts +11 -0
  177. package/lib/typescript/commonjs/live/components/StreamConfigModal.d.ts.map +1 -0
  178. package/lib/typescript/commonjs/live/components/StreamConfigPanel.d.ts +13 -0
  179. package/lib/typescript/commonjs/live/components/StreamConfigPanel.d.ts.map +1 -0
  180. package/lib/typescript/commonjs/live/context/LiveConfigContext.d.ts +78 -0
  181. package/lib/typescript/commonjs/live/context/LiveConfigContext.d.ts.map +1 -0
  182. package/lib/typescript/commonjs/live/context/LiveRoomContext.d.ts +12 -0
  183. package/lib/typescript/commonjs/live/context/LiveRoomContext.d.ts.map +1 -0
  184. package/lib/typescript/commonjs/live/hooks/useActiveSpeakers.d.ts +3 -0
  185. package/lib/typescript/commonjs/live/hooks/useActiveSpeakers.d.ts.map +1 -0
  186. package/lib/typescript/commonjs/live/hooks/useRoomAudio.d.ts +16 -0
  187. package/lib/typescript/commonjs/live/hooks/useRoomAudio.d.ts.map +1 -0
  188. package/lib/typescript/commonjs/live/hooks/useRoomConnection.d.ts +29 -0
  189. package/lib/typescript/commonjs/live/hooks/useRoomConnection.d.ts.map +1 -0
  190. package/lib/typescript/commonjs/live/hooks/useRoomManager.d.ts +11 -0
  191. package/lib/typescript/commonjs/live/hooks/useRoomManager.d.ts.map +1 -0
  192. package/lib/typescript/commonjs/live/hooks/useRoomUsers.d.ts +5 -0
  193. package/lib/typescript/commonjs/live/hooks/useRoomUsers.d.ts.map +1 -0
  194. package/lib/typescript/commonjs/live/index.d.ts +25 -0
  195. package/lib/typescript/commonjs/live/index.d.ts.map +1 -0
  196. package/lib/typescript/commonjs/live/services/livekitService.d.ts +7 -0
  197. package/lib/typescript/commonjs/live/services/livekitService.d.ts.map +1 -0
  198. package/lib/typescript/commonjs/live/services/spaceSocketService.d.ts +69 -0
  199. package/lib/typescript/commonjs/live/services/spaceSocketService.d.ts.map +1 -0
  200. package/lib/typescript/commonjs/live/services/spacesService.d.ts +181 -0
  201. package/lib/typescript/commonjs/live/services/spacesService.d.ts.map +1 -0
  202. package/lib/typescript/commonjs/live/types.d.ts +100 -0
  203. package/lib/typescript/commonjs/live/types.d.ts.map +1 -0
  204. package/lib/typescript/commonjs/live/validation.d.ts +658 -0
  205. package/lib/typescript/commonjs/live/validation.d.ts.map +1 -0
  206. package/lib/typescript/commonjs/package.json +1 -0
  207. package/{dist/types → lib/typescript/commonjs}/schema.d.ts +1 -0
  208. package/lib/typescript/commonjs/schema.d.ts.map +1 -0
  209. package/lib/typescript/module/client.d.ts +141 -0
  210. package/lib/typescript/module/client.d.ts.map +1 -0
  211. package/lib/typescript/module/errors.d.ts +9 -0
  212. package/lib/typescript/module/errors.d.ts.map +1 -0
  213. package/lib/typescript/module/index.d.ts +6 -0
  214. package/lib/typescript/module/index.d.ts.map +1 -0
  215. package/lib/typescript/module/index.native.d.ts +3 -0
  216. package/lib/typescript/module/index.native.d.ts.map +1 -0
  217. package/lib/typescript/module/live/assets/icons/spaces-icon.d.ts +13 -0
  218. package/lib/typescript/module/live/assets/icons/spaces-icon.d.ts.map +1 -0
  219. package/lib/typescript/module/live/assets/icons/syra-icon.d.ts +13 -0
  220. package/lib/typescript/module/live/assets/icons/syra-icon.d.ts.map +1 -0
  221. package/lib/typescript/module/live/colors.d.ts +35 -0
  222. package/lib/typescript/module/live/colors.d.ts.map +1 -0
  223. package/lib/typescript/module/live/components/AnimatedPulse.d.ts +8 -0
  224. package/lib/typescript/module/live/components/AnimatedPulse.d.ts.map +1 -0
  225. package/lib/typescript/module/live/components/AnimatedSpeakerRing.d.ts +10 -0
  226. package/lib/typescript/module/live/components/AnimatedSpeakerRing.d.ts.map +1 -0
  227. package/lib/typescript/module/live/components/CreateRoomSheet.d.ts +26 -0
  228. package/lib/typescript/module/live/components/CreateRoomSheet.d.ts.map +1 -0
  229. package/lib/typescript/module/live/components/InsightsPanel.d.ts +11 -0
  230. package/lib/typescript/module/live/components/InsightsPanel.d.ts.map +1 -0
  231. package/lib/typescript/module/live/components/LiveRoomSheet.d.ts +11 -0
  232. package/lib/typescript/module/live/components/LiveRoomSheet.d.ts.map +1 -0
  233. package/lib/typescript/module/live/components/MiniRoomBar.d.ts +15 -0
  234. package/lib/typescript/module/live/components/MiniRoomBar.d.ts.map +1 -0
  235. package/lib/typescript/module/live/components/PanelHeader.d.ts +10 -0
  236. package/lib/typescript/module/live/components/PanelHeader.d.ts.map +1 -0
  237. package/lib/typescript/module/live/components/PodcastStreamPicker.d.ts +54 -0
  238. package/lib/typescript/module/live/components/PodcastStreamPicker.d.ts.map +1 -0
  239. package/lib/typescript/module/live/components/RecordingCard.d.ts +11 -0
  240. package/lib/typescript/module/live/components/RecordingCard.d.ts.map +1 -0
  241. package/lib/typescript/module/live/components/RecordingsPanel.d.ts +12 -0
  242. package/lib/typescript/module/live/components/RecordingsPanel.d.ts.map +1 -0
  243. package/lib/typescript/module/live/components/RoomCard.d.ts +38 -0
  244. package/lib/typescript/module/live/components/RoomCard.d.ts.map +1 -0
  245. package/lib/typescript/module/live/components/StreamConfigModal.d.ts +11 -0
  246. package/lib/typescript/module/live/components/StreamConfigModal.d.ts.map +1 -0
  247. package/lib/typescript/module/live/components/StreamConfigPanel.d.ts +13 -0
  248. package/lib/typescript/module/live/components/StreamConfigPanel.d.ts.map +1 -0
  249. package/lib/typescript/module/live/context/LiveConfigContext.d.ts +78 -0
  250. package/lib/typescript/module/live/context/LiveConfigContext.d.ts.map +1 -0
  251. package/lib/typescript/module/live/context/LiveRoomContext.d.ts +12 -0
  252. package/lib/typescript/module/live/context/LiveRoomContext.d.ts.map +1 -0
  253. package/lib/typescript/module/live/hooks/useActiveSpeakers.d.ts +3 -0
  254. package/lib/typescript/module/live/hooks/useActiveSpeakers.d.ts.map +1 -0
  255. package/lib/typescript/module/live/hooks/useRoomAudio.d.ts +16 -0
  256. package/lib/typescript/module/live/hooks/useRoomAudio.d.ts.map +1 -0
  257. package/lib/typescript/module/live/hooks/useRoomConnection.d.ts +29 -0
  258. package/lib/typescript/module/live/hooks/useRoomConnection.d.ts.map +1 -0
  259. package/lib/typescript/module/live/hooks/useRoomManager.d.ts +11 -0
  260. package/lib/typescript/module/live/hooks/useRoomManager.d.ts.map +1 -0
  261. package/lib/typescript/module/live/hooks/useRoomUsers.d.ts +5 -0
  262. package/lib/typescript/module/live/hooks/useRoomUsers.d.ts.map +1 -0
  263. package/lib/typescript/module/live/index.d.ts +25 -0
  264. package/lib/typescript/module/live/index.d.ts.map +1 -0
  265. package/lib/typescript/module/live/services/livekitService.d.ts +7 -0
  266. package/lib/typescript/module/live/services/livekitService.d.ts.map +1 -0
  267. package/lib/typescript/module/live/services/spaceSocketService.d.ts +69 -0
  268. package/lib/typescript/module/live/services/spaceSocketService.d.ts.map +1 -0
  269. package/lib/typescript/module/live/services/spacesService.d.ts +181 -0
  270. package/lib/typescript/module/live/services/spacesService.d.ts.map +1 -0
  271. package/lib/typescript/module/live/types.d.ts +100 -0
  272. package/lib/typescript/module/live/types.d.ts.map +1 -0
  273. package/lib/typescript/module/live/validation.d.ts +658 -0
  274. package/lib/typescript/module/live/validation.d.ts.map +1 -0
  275. package/lib/typescript/module/package.json +1 -0
  276. package/lib/typescript/module/schema.d.ts +1072 -0
  277. package/lib/typescript/module/schema.d.ts.map +1 -0
  278. package/package.json +123 -21
  279. package/src/index.native.ts +2 -0
  280. package/src/live/assets/icons/spaces-icon.tsx +15 -0
  281. package/src/live/assets/icons/syra-icon.tsx +13 -0
  282. package/src/live/assets/sounds/intro.mp3 +0 -0
  283. package/src/live/colors.ts +57 -0
  284. package/src/live/components/AnimatedPulse.tsx +52 -0
  285. package/src/live/components/AnimatedSpeakerRing.tsx +101 -0
  286. package/src/live/components/CreateRoomSheet.tsx +654 -0
  287. package/src/live/components/InsightsPanel.tsx +202 -0
  288. package/src/live/components/LiveRoomSheet.tsx +970 -0
  289. package/src/live/components/MiniRoomBar.tsx +167 -0
  290. package/src/live/components/PanelHeader.tsx +36 -0
  291. package/src/live/components/PodcastStreamPicker.tsx +1155 -0
  292. package/src/live/components/RecordingCard.tsx +154 -0
  293. package/src/live/components/RecordingsPanel.tsx +252 -0
  294. package/src/live/components/RoomCard.tsx +343 -0
  295. package/src/live/components/StreamConfigModal.tsx +600 -0
  296. package/src/live/components/StreamConfigPanel.tsx +729 -0
  297. package/src/live/context/LiveConfigContext.tsx +96 -0
  298. package/src/live/context/LiveRoomContext.tsx +235 -0
  299. package/src/live/hooks/useActiveSpeakers.ts +39 -0
  300. package/src/live/hooks/useRoomAudio.ts +103 -0
  301. package/src/live/hooks/useRoomConnection.ts +162 -0
  302. package/src/live/hooks/useRoomManager.ts +17 -0
  303. package/src/live/hooks/useRoomUsers.ts +52 -0
  304. package/src/live/index.ts +104 -0
  305. package/src/live/services/livekitService.ts +11 -0
  306. package/src/live/services/spaceSocketService.ts +136 -0
  307. package/src/live/services/spacesService.ts +692 -0
  308. package/src/live/types.ts +119 -0
  309. package/src/live/validation.ts +279 -0
  310. package/dist/cjs/client.js +0 -244
  311. package/dist/cjs/errors.js +0 -16
  312. package/dist/cjs/index.js +0 -15
  313. package/dist/cjs/package.json +0 -3
  314. package/dist/esm/client.js +0 -240
  315. package/dist/esm/errors.js +0 -12
  316. package/dist/esm/index.js +0 -3
  317. package/dist/esm/package.json +0 -3
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+
3
+ import { trackSummarySchema, podcastSummarySchema, episodeSummarySchema } from "./schema.js";
4
+ import { SyraApiError } from "./errors.js";
5
+
6
+ /** Default base URL of the public Syra API. */
7
+ export const DEFAULT_SYRA_BASE_URL = 'https://api.syra.fm';
8
+
9
+ /** Default base URL of the Syra web app, used for deep links. */
10
+ export const DEFAULT_SYRA_WEB_BASE_URL = 'https://syra.fm';
11
+
12
+ /**
13
+ * One page of paginated catalog search results.
14
+ *
15
+ * `hasMore` reflects the BACKEND's pagination over the full matching set — NOT
16
+ * `items.length`. {@link SyraClient.searchTracks} additionally filters its page
17
+ * client-side to preview-available tracks, so `items.length` can be smaller than
18
+ * `limit` while `hasMore` is still `true`; callers must paginate by advancing
19
+ * `offset` by `limit` (the page size), never by `items.length`.
20
+ */
21
+
22
+ /** Minimal shape from which track artwork URLs can be derived. */
23
+
24
+ /** Minimal shape from which podcast-show artwork URLs can be derived. */
25
+
26
+ /** Minimal shape from which podcast-episode artwork URLs can be derived. */
27
+
28
+ /** Order used to pick the best available artwork variant when none is named. */
29
+ const ARTWORK_FALLBACK_ORDER = ['original', 'xxlarge', 'xlarge', 'large', 'medium', 'small'];
30
+ const OBJECT_ID_PATTERN = /^[a-f\d]{24}$/i;
31
+
32
+ /**
33
+ * Default episode page size, matching the backend's own default so the SDK's
34
+ * offset→page translation lines up with the server's pagination window.
35
+ */
36
+ const DEFAULT_EPISODES_PAGE_SIZE = 20;
37
+
38
+ /** Read a finite number from an unknown response field, else a fallback. */
39
+ function numberOr(value, fallback) {
40
+ return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
41
+ }
42
+ /**
43
+ * Create a headless client for the public Syra API. Public reads only — there
44
+ * is no authentication in this version.
45
+ */
46
+ export function createSyraClient(options = {}) {
47
+ const baseURL = (options.baseURL ?? DEFAULT_SYRA_BASE_URL).replace(/\/+$/, '');
48
+ const webBaseURL = (options.webBaseURL ?? DEFAULT_SYRA_WEB_BASE_URL).replace(/\/+$/, '');
49
+ function resolveFetch() {
50
+ if (options.fetch) {
51
+ return options.fetch;
52
+ }
53
+ const globalFetch = globalThis.fetch;
54
+ if (typeof globalFetch === 'function') {
55
+ return globalFetch.bind(globalThis);
56
+ }
57
+ throw new Error('@syra.fm/sdk: no global fetch is available. Pass `fetch` in createSyraClient options, ' + 'or run on Node 18+, a browser, or React Native.');
58
+ }
59
+ async function getJson(path) {
60
+ const doFetch = resolveFetch();
61
+ const response = await doFetch(`${baseURL}${path}`, {
62
+ headers: {
63
+ Accept: 'application/json'
64
+ }
65
+ });
66
+ if (!response.ok) {
67
+ throw new SyraApiError(response.status, `Syra API request failed: ${response.status} ${response.statusText} (${path})`);
68
+ }
69
+ return response.json();
70
+ }
71
+ function resolveImageRef(ref) {
72
+ if (!ref) {
73
+ return undefined;
74
+ }
75
+ if (/^https?:\/\//i.test(ref)) {
76
+ return ref;
77
+ }
78
+ if (ref.startsWith('/api/images/')) {
79
+ return `${baseURL}${ref}`;
80
+ }
81
+ if (OBJECT_ID_PATTERN.test(ref)) {
82
+ return `${baseURL}/api/images/${ref}`;
83
+ }
84
+ return undefined;
85
+ }
86
+ return {
87
+ async searchTracks(query, searchOptions = {}) {
88
+ const params = new URLSearchParams({
89
+ q: query,
90
+ category: 'tracks'
91
+ });
92
+ if (typeof searchOptions.limit === 'number') {
93
+ params.set('limit', String(searchOptions.limit));
94
+ }
95
+ if (typeof searchOptions.offset === 'number') {
96
+ params.set('offset', String(searchOptions.offset));
97
+ }
98
+ const json = await getJson(`/api/search?${params.toString()}`);
99
+ const rawTracks = Array.isArray(json?.results?.tracks) ? json.results.tracks : [];
100
+ const items = [];
101
+ for (const raw of rawTracks) {
102
+ // A single malformed catalog row must not fail the whole search.
103
+ const parsed = trackSummarySchema.safeParse(raw);
104
+ if (parsed.success && parsed.data.previewAvailable === true) {
105
+ items.push(parsed.data);
106
+ }
107
+ }
108
+ return {
109
+ items,
110
+ // `hasMore` is sourced from the backend's pagination over the FULL result
111
+ // set; the client-side preview filter above may shrink `items` below
112
+ // `limit`, but must NOT corrupt `hasMore` (else a page whose tail was
113
+ // filtered out would falsely report the end of the catalog).
114
+ hasMore: json?.hasMore === true,
115
+ limit: numberOr(json?.limit, searchOptions.limit ?? rawTracks.length),
116
+ offset: numberOr(json?.offset, searchOptions.offset ?? 0)
117
+ };
118
+ },
119
+ async getTrack(id) {
120
+ const json = await getJson(`/api/tracks/${encodeURIComponent(id)}`);
121
+ return trackSummarySchema.parse(json);
122
+ },
123
+ previewUrl(id, startSec = 0) {
124
+ const safeStart = Number.isFinite(startSec) ? Math.max(0, Math.trunc(startSec)) : 0;
125
+ return `${baseURL}/api/preview/${encodeURIComponent(id)}.mp3?start=${safeStart}`;
126
+ },
127
+ artworkUrl(source, size) {
128
+ if (typeof source === 'string') {
129
+ return resolveImageRef(source);
130
+ }
131
+ if (size && source.coverArtSizes) {
132
+ const resolved = resolveImageRef(source.coverArtSizes[size]?.url);
133
+ if (resolved) {
134
+ return resolved;
135
+ }
136
+ }
137
+ const fromCoverArt = resolveImageRef(source.coverArt);
138
+ if (fromCoverArt) {
139
+ return fromCoverArt;
140
+ }
141
+ if (source.coverArtSizes) {
142
+ for (const key of ARTWORK_FALLBACK_ORDER) {
143
+ const resolved = resolveImageRef(source.coverArtSizes[key]?.url);
144
+ if (resolved) {
145
+ return resolved;
146
+ }
147
+ }
148
+ }
149
+ return undefined;
150
+ },
151
+ async searchPodcasts(query, searchOptions = {}) {
152
+ const params = new URLSearchParams({
153
+ q: query
154
+ });
155
+ if (typeof searchOptions.limit === 'number') {
156
+ params.set('limit', String(searchOptions.limit));
157
+ }
158
+ if (typeof searchOptions.offset === 'number') {
159
+ params.set('offset', String(searchOptions.offset));
160
+ }
161
+ const json = await getJson(`/api/podcasts/search?${params.toString()}`);
162
+ const rawPodcasts = Array.isArray(json?.data) ? json.data : [];
163
+ const items = [];
164
+ for (const raw of rawPodcasts) {
165
+ // A single malformed catalog row must not fail the whole search.
166
+ const parsed = podcastSummarySchema.safeParse(raw);
167
+ if (parsed.success) {
168
+ items.push(parsed.data);
169
+ }
170
+ }
171
+ return {
172
+ items,
173
+ // `hasMore` reflects the backend's pagination over the full result set.
174
+ hasMore: json?.hasMore === true,
175
+ limit: numberOr(json?.limit, searchOptions.limit ?? rawPodcasts.length),
176
+ offset: numberOr(json?.offset, searchOptions.offset ?? 0)
177
+ };
178
+ },
179
+ async getPodcast(id) {
180
+ const json = await getJson(`/api/podcasts/${encodeURIComponent(id)}`);
181
+ return podcastSummarySchema.parse(json?.data?.podcast);
182
+ },
183
+ podcastUrl(id) {
184
+ return `${webBaseURL}/podcasts/${encodeURIComponent(id)}`;
185
+ },
186
+ podcastArtworkUrl(source, size) {
187
+ if (size && source.imageSizes) {
188
+ const resolved = resolveImageRef(source.imageSizes[size]?.url);
189
+ if (resolved) {
190
+ return resolved;
191
+ }
192
+ }
193
+ const fromImage = resolveImageRef(source.image);
194
+ if (fromImage) {
195
+ return fromImage;
196
+ }
197
+ if (source.imageSizes) {
198
+ for (const key of ARTWORK_FALLBACK_ORDER) {
199
+ const resolved = resolveImageRef(source.imageSizes[key]?.url);
200
+ if (resolved) {
201
+ return resolved;
202
+ }
203
+ }
204
+ }
205
+ return resolveImageRef(source.imageSourceUrl);
206
+ },
207
+ async getPodcastEpisodes(podcastId, listOptions = {}) {
208
+ // The endpoint paginates by 1-based `page`; translate the SDK's uniform
209
+ // offset-based paging into it. `limit` must be concrete (unlike search,
210
+ // which can omit it) because the page number is derived from it.
211
+ const limit = listOptions.limit ?? DEFAULT_EPISODES_PAGE_SIZE;
212
+ const offset = listOptions.offset ?? 0;
213
+ const page = Math.floor(offset / limit) + 1;
214
+ const json = await getJson(`/api/podcasts/${encodeURIComponent(podcastId)}/episodes?page=${page}&limit=${limit}`);
215
+ const rawEpisodes = Array.isArray(json?.data) ? json.data : [];
216
+ const items = [];
217
+ for (const raw of rawEpisodes) {
218
+ // A single malformed episode row must not fail the whole listing.
219
+ const parsed = episodeSummarySchema.safeParse(raw);
220
+ if (parsed.success) {
221
+ items.push(parsed.data);
222
+ }
223
+ }
224
+
225
+ // `total` is the backend's full count over the show; derive `hasMore` from
226
+ // it rather than `items.length`, which the schema/enclosure filter above may
227
+ // shrink below `limit` on a page that is NOT the last one. Absent a count,
228
+ // fall back to what we have (this page ends the listing).
229
+ const total = numberOr(json?.total, offset + items.length);
230
+ return {
231
+ items,
232
+ hasMore: page * limit < total,
233
+ limit,
234
+ offset
235
+ };
236
+ },
237
+ async getEpisode(episodeId) {
238
+ const json = await getJson(`/api/episodes/${encodeURIComponent(episodeId)}`);
239
+ return episodeSummarySchema.parse(json?.data?.episode);
240
+ },
241
+ episodeImageUrl(source, size) {
242
+ if (size && source.imageSizes) {
243
+ const resolved = resolveImageRef(source.imageSizes[size]?.url);
244
+ if (resolved) {
245
+ return resolved;
246
+ }
247
+ }
248
+ const fromImage = resolveImageRef(source.image);
249
+ if (fromImage) {
250
+ return fromImage;
251
+ }
252
+ if (source.imageSizes) {
253
+ for (const key of ARTWORK_FALLBACK_ORDER) {
254
+ const resolved = resolveImageRef(source.imageSizes[key]?.url);
255
+ if (resolved) {
256
+ return resolved;
257
+ }
258
+ }
259
+ }
260
+ return resolveImageRef(source.imageSourceUrl);
261
+ }
262
+ };
263
+ }
264
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["trackSummarySchema","podcastSummarySchema","episodeSummarySchema","SyraApiError","DEFAULT_SYRA_BASE_URL","DEFAULT_SYRA_WEB_BASE_URL","ARTWORK_FALLBACK_ORDER","OBJECT_ID_PATTERN","DEFAULT_EPISODES_PAGE_SIZE","numberOr","value","fallback","Number","isFinite","createSyraClient","options","baseURL","replace","webBaseURL","resolveFetch","fetch","globalFetch","globalThis","bind","Error","getJson","path","doFetch","response","headers","Accept","ok","status","statusText","json","resolveImageRef","ref","undefined","test","startsWith","searchTracks","query","searchOptions","params","URLSearchParams","q","category","limit","set","String","offset","toString","rawTracks","Array","isArray","results","tracks","items","raw","parsed","safeParse","success","data","previewAvailable","push","hasMore","length","getTrack","id","encodeURIComponent","parse","previewUrl","startSec","safeStart","Math","max","trunc","artworkUrl","source","size","coverArtSizes","resolved","url","fromCoverArt","coverArt","key","searchPodcasts","rawPodcasts","getPodcast","podcast","podcastUrl","podcastArtworkUrl","imageSizes","fromImage","image","imageSourceUrl","getPodcastEpisodes","podcastId","listOptions","page","floor","rawEpisodes","total","getEpisode","episodeId","episode","episodeImageUrl"],"sourceRoot":"../../src","sources":["client.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Error thrown when the Syra API returns a non-2xx response.
5
+ */
6
+ export class SyraApiError extends Error {
7
+ /** HTTP status code returned by the API. */
8
+
9
+ constructor(status, message) {
10
+ super(message);
11
+ this.name = 'SyraApiError';
12
+ this.status = status;
13
+ // Restore the prototype chain when targeting ES5-ish runtimes.
14
+ Object.setPrototypeOf(this, SyraApiError.prototype);
15
+ }
16
+ }
17
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SyraApiError","Error","constructor","status","message","name","Object","setPrototypeOf","prototype"],"sourceRoot":"../../src","sources":["errors.ts"],"mappings":";;AAAA;AACA;AACA;AACA,OAAO,MAAMA,YAAY,SAASC,KAAK,CAAC;EACtC;;EAGAC,WAAWA,CAACC,MAAc,EAAEC,OAAe,EAAE;IAC3C,KAAK,CAACA,OAAO,CAAC;IACd,IAAI,CAACC,IAAI,GAAG,cAAc;IAC1B,IAAI,CAACF,MAAM,GAAGA,MAAM;IACpB;IACAG,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEP,YAAY,CAACQ,SAAS,CAAC;EACrD;AACF","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ export { createSyraClient, DEFAULT_SYRA_BASE_URL, DEFAULT_SYRA_WEB_BASE_URL } from "./client.js";
4
+ export { trackSummarySchema, podcastSummarySchema, episodeSummarySchema, coverArtSizesSchema, coverArtVariantSchema } from "./schema.js";
5
+ export { SyraApiError } from "./errors.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createSyraClient","DEFAULT_SYRA_BASE_URL","DEFAULT_SYRA_WEB_BASE_URL","trackSummarySchema","podcastSummarySchema","episodeSummarySchema","coverArtSizesSchema","coverArtVariantSchema","SyraApiError"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SACEA,gBAAgB,EAChBC,qBAAqB,EACrBC,yBAAyB,QACpB,aAAU;AAYjB,SACEC,kBAAkB,EAClBC,oBAAoB,EACpBC,oBAAoB,EACpBC,mBAAmB,EACnBC,qBAAqB,QAChB,aAAU;AASjB,SAASC,YAAY,QAAQ,aAAU","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ export * from './index';
4
+ export * from "./live/index.js";
5
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["index.native.ts"],"mappings":";;AAAA,cAAc,SAAS;AACvB,cAAc,iBAAQ","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ import React from 'react';
4
+ import Svg, { Path } from 'react-native-svg';
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ export const LiveRoomsIcon = ({
7
+ color = 'currentColor',
8
+ size = 26,
9
+ style
10
+ }) => /*#__PURE__*/_jsx(Svg, {
11
+ viewBox: "0 0 24 24",
12
+ width: size,
13
+ height: size,
14
+ style: style,
15
+ children: /*#__PURE__*/_jsx(Path, {
16
+ d: "M12 22.25c-4.99 0-9.18-3.393-10.39-7.994l1.93-.512c.99 3.746 4.4 6.506 8.46 6.506s7.47-2.76 8.46-6.506l1.93.512c-1.21 4.601-5.4 7.994-10.39 7.994zM5 11.5c0 3.866 3.13 7 7 7s7-3.134 7-7V8.75c0-3.866-3.13-7-7-7s-7 3.134-7 7v2.75zm12-2.75v2.75c0 2.761-2.24 5-5 5s-5-2.239-5-5V8.75c0-2.761 2.24-5 5-5s5 2.239 5 5zM11.25 8v4.25c0 .414.34.75.75.75s.75-.336.75-.75V8c0-.414-.34-.75-.75-.75s-.75.336-.75.75zm-3 1v2.25c0 .414.34.75.75.75s.75-.336.75-.75V9c0-.414-.34-.75-.75-.75s-.75.336-.75.75zm7.5 0c0-.414-.34-.75-.75-.75s-.75.336-.75.75v2.25c0 .414.34.75.75.75s.75-.336.75-.75V9z",
17
+ fill: color
18
+ })
19
+ });
20
+ export const LiveRoomsIconActive = ({
21
+ color = 'currentColor',
22
+ size = 26,
23
+ style
24
+ }) => /*#__PURE__*/_jsx(Svg, {
25
+ viewBox: "0 0 24 24",
26
+ width: size,
27
+ height: size,
28
+ style: style,
29
+ children: /*#__PURE__*/_jsx(Path, {
30
+ d: "M12 22.25c-4.99 0-9.18-3.393-10.39-7.994l1.93-.512c.99 3.746 4.4 6.506 8.46 6.506s7.47-2.76 8.46-6.506l1.93.512c-1.21 4.601-5.4 7.994-10.39 7.994zm0-20.5c-3.87 0-7 3.134-7 7v2.75c0 3.866 3.13 7 7 7s7-3.134 7-7V8.75c0-3.866-3.13-7-7-7zm-2.25 9.5c0 .414-.34.75-.75.75s-.75-.336-.75-.75V9c0-.414.34-.75.75-.75s.75.336.75.75v2.25zm3 1c0 .414-.34.75-.75.75s-.75-.336-.75-.75V8c0-.414.34-.75.75-.75s.75.336.75.75v4.25zm3-1c0 .414-.34.75-.75.75s-.75-.336-.75-.75V9c0-.414.34-.75.75-.75s.75.336.75.75v2.25z",
31
+ fill: color
32
+ })
33
+ });
34
+ //# sourceMappingURL=spaces-icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Svg","Path","jsx","_jsx","LiveRoomsIcon","color","size","style","viewBox","width","height","children","d","fill","LiveRoomsIconActive"],"sourceRoot":"../../../../../src","sources":["live/assets/icons/spaces-icon.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,GAAG,IAAIC,IAAI,QAAQ,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG7C,OAAO,MAAMC,aAAa,GAAGA,CAAC;EAAEC,KAAK,GAAG,cAAc;EAAEC,IAAI,GAAG,EAAE;EAAEC;AAAgE,CAAC,kBAClIJ,IAAA,CAACH,GAAG;EAACQ,OAAO,EAAC,WAAW;EAACC,KAAK,EAAEH,IAAK;EAACI,MAAM,EAAEJ,IAAK;EAACC,KAAK,EAAEA,KAAM;EAAAI,QAAA,eAC/DR,IAAA,CAACF,IAAI;IAACW,CAAC,EAAC,gkBAAgkB;IAACC,IAAI,EAAER;EAAM,CAAE;AAAC,CACrlB,CACN;AAED,OAAO,MAAMS,mBAAmB,GAAGA,CAAC;EAAET,KAAK,GAAG,cAAc;EAAEC,IAAI,GAAG,EAAE;EAAEC;AAAgE,CAAC,kBACxIJ,IAAA,CAACH,GAAG;EAACQ,OAAO,EAAC,WAAW;EAACC,KAAK,EAAEH,IAAK;EAACI,MAAM,EAAEJ,IAAK;EAACC,KAAK,EAAEA,KAAM;EAAAI,QAAA,eAC/DR,IAAA,CAACF,IAAI;IAACW,CAAC,EAAC,ofAAof;IAACC,IAAI,EAAER;EAAM,CAAE;AAAC,CACzgB,CACN","ignoreList":[]}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ import React from 'react';
4
+ import Svg, { Rect } from 'react-native-svg';
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ export const SyraIcon = ({
7
+ color = 'currentColor',
8
+ size = 26,
9
+ style
10
+ }) => /*#__PURE__*/_jsxs(Svg, {
11
+ viewBox: "0 0 500 500",
12
+ width: size,
13
+ height: size,
14
+ style: style,
15
+ children: [/*#__PURE__*/_jsx(Rect, {
16
+ x: "303.35",
17
+ y: "46.22",
18
+ width: "128.77",
19
+ height: "407.56",
20
+ fill: color
21
+ }), /*#__PURE__*/_jsx(Rect, {
22
+ x: "153.71",
23
+ y: "88.97",
24
+ width: "106.76",
25
+ height: "322.05",
26
+ fill: color
27
+ }), /*#__PURE__*/_jsx(Rect, {
28
+ x: "25",
29
+ y: "131.94",
30
+ width: "86.2",
31
+ height: "236.13",
32
+ fill: color
33
+ })]
34
+ });
35
+ export const SyraIconActive = SyraIcon;
36
+ //# sourceMappingURL=syra-icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Svg","Rect","jsx","_jsx","jsxs","_jsxs","SyraIcon","color","size","style","viewBox","width","height","children","x","y","fill","SyraIconActive"],"sourceRoot":"../../../../../src","sources":["live/assets/icons/syra-icon.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,GAAG,IAAIC,IAAI,QAAQ,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG7C,OAAO,MAAMC,QAAQ,GAAGA,CAAC;EAAEC,KAAK,GAAG,cAAc;EAAEC,IAAI,GAAG,EAAE;EAAEC;AAAgE,CAAC,kBAC7HJ,KAAA,CAACL,GAAG;EAACU,OAAO,EAAC,aAAa;EAACC,KAAK,EAAEH,IAAK;EAACI,MAAM,EAAEJ,IAAK;EAACC,KAAK,EAAEA,KAAM;EAAAI,QAAA,gBACjEV,IAAA,CAACF,IAAI;IAACa,CAAC,EAAC,QAAQ;IAACC,CAAC,EAAC,OAAO;IAACJ,KAAK,EAAC,QAAQ;IAACC,MAAM,EAAC,QAAQ;IAACI,IAAI,EAAET;EAAM,CAAE,CAAC,eACzEJ,IAAA,CAACF,IAAI;IAACa,CAAC,EAAC,QAAQ;IAACC,CAAC,EAAC,OAAO;IAACJ,KAAK,EAAC,QAAQ;IAACC,MAAM,EAAC,QAAQ;IAACI,IAAI,EAAET;EAAM,CAAE,CAAC,eACzEJ,IAAA,CAACF,IAAI;IAACa,CAAC,EAAC,IAAI;IAACC,CAAC,EAAC,QAAQ;IAACJ,KAAK,EAAC,MAAM;IAACC,MAAM,EAAC,QAAQ;IAACI,IAAI,EAAET;EAAM,CAAE,CAAC;AAAA,CACjE,CACN;AAED,OAAO,MAAMU,cAAc,GAAGX,QAAQ","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Live-rooms brand colors.
5
+ *
6
+ * These are the ONLY colors the live UI is allowed to hardcode: they carry
7
+ * meaning that must survive every host theme (the live-indicator red reads as
8
+ * "on air" in light and dark mode alike, and the room-type accents distinguish
9
+ * Stage from Broadcast at a glance). Everything else in the live components
10
+ * comes from the host's design tokens — NativeWind classNames (`bg-background`,
11
+ * `text-foreground`, `text-muted-foreground`, `border-border`, …) or, where a
12
+ * prop needs a literal color value (vector icons), the host `useTheme()` from
13
+ * `LiveConfig`.
14
+ *
15
+ * Consuming apps should import these instead of re-declaring the hex values.
16
+ */
17
+
18
+ /** The live-indicator red: LIVE badges, recording state, destructive live actions. */
19
+ export const LIVE_COLOR = '#FF4458';
20
+
21
+ /** {@link LIVE_COLOR} at ~10% alpha, for tinted surfaces behind live-colored content. */
22
+ export const LIVE_TINT_COLOR = '#FF44581A';
23
+
24
+ /** Foreground color for content sitting on {@link LIVE_COLOR}. */
25
+ export const LIVE_FOREGROUND_COLOR = '#FFFFFF';
26
+
27
+ /** Room kinds that get a type badge. `talk` is the default kind and carries none. */
28
+
29
+ export const ROOM_TYPE_META = {
30
+ stage: {
31
+ icon: 'account-voice',
32
+ label: 'Stage',
33
+ color: '#3B82F6',
34
+ tintColor: '#3B82F620'
35
+ },
36
+ broadcast: {
37
+ icon: 'broadcast',
38
+ label: 'Broadcast',
39
+ color: '#FF6B35',
40
+ tintColor: '#FF6B3520'
41
+ }
42
+ };
43
+
44
+ /** Badge metadata for a room kind, or `null` when the kind carries no badge (`talk`/unset). */
45
+ export function getRoomTypeMeta(type) {
46
+ if (type === 'stage' || type === 'broadcast') return ROOM_TYPE_META[type];
47
+ return null;
48
+ }
49
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["LIVE_COLOR","LIVE_TINT_COLOR","LIVE_FOREGROUND_COLOR","ROOM_TYPE_META","stage","icon","label","color","tintColor","broadcast","getRoomTypeMeta","type"],"sourceRoot":"../../../src","sources":["live/colors.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,MAAMA,UAAU,GAAG,SAAS;;AAEnC;AACA,OAAO,MAAMC,eAAe,GAAG,WAAW;;AAE1C;AACA,OAAO,MAAMC,qBAAqB,GAAG,SAAS;;AAE9C;;AAaA,OAAO,MAAMC,cAAoD,GAAG;EAClEC,KAAK,EAAE;IACLC,IAAI,EAAE,eAAe;IACrBC,KAAK,EAAE,OAAO;IACdC,KAAK,EAAE,SAAS;IAChBC,SAAS,EAAE;EACb,CAAC;EACDC,SAAS,EAAE;IACTJ,IAAI,EAAE,WAAW;IACjBC,KAAK,EAAE,WAAW;IAClBC,KAAK,EAAE,SAAS;IAChBC,SAAS,EAAE;EACb;AACF,CAAC;;AAED;AACA,OAAO,SAASE,eAAeA,CAACC,IAAyC,EAAuB;EAC9F,IAAIA,IAAI,KAAK,OAAO,IAAIA,IAAI,KAAK,WAAW,EAAE,OAAOR,cAAc,CAACQ,IAAI,CAAC;EACzE,OAAO,IAAI;AACb","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ import React, { useEffect } from 'react';
4
+ import { StyleSheet } from 'react-native';
5
+ import Animated, { useSharedValue, useAnimatedStyle, withRepeat, withTiming, Easing } from 'react-native-reanimated';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export const AnimatedPulse = /*#__PURE__*/React.memo(function AnimatedPulse({
8
+ size = 8,
9
+ color = '#FFFFFF'
10
+ }) {
11
+ const opacity = useSharedValue(1);
12
+ useEffect(() => {
13
+ opacity.value = withRepeat(withTiming(0.3, {
14
+ duration: 500,
15
+ easing: Easing.inOut(Easing.ease)
16
+ }), -1, true);
17
+ }, [opacity]);
18
+ const animatedStyle = useAnimatedStyle(() => ({
19
+ opacity: opacity.value
20
+ }));
21
+ return /*#__PURE__*/_jsx(Animated.View, {
22
+ style: [styles.dot, {
23
+ width: size,
24
+ height: size,
25
+ borderRadius: size / 2,
26
+ backgroundColor: color
27
+ }, animatedStyle]
28
+ });
29
+ });
30
+ const styles = StyleSheet.create({
31
+ dot: {}
32
+ });
33
+ //# sourceMappingURL=AnimatedPulse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useEffect","StyleSheet","Animated","useSharedValue","useAnimatedStyle","withRepeat","withTiming","Easing","jsx","_jsx","AnimatedPulse","memo","size","color","opacity","value","duration","easing","inOut","ease","animatedStyle","View","style","styles","dot","width","height","borderRadius","backgroundColor","create"],"sourceRoot":"../../../../src","sources":["live/components/AnimatedPulse.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,UAAU,QAAQ,cAAc;AACzC,OAAOC,QAAQ,IACbC,cAAc,EACdC,gBAAgB,EAChBC,UAAU,EACVC,UAAU,EACVC,MAAM,QACD,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOjC,OAAO,MAAMC,aAAa,gBAAGX,KAAK,CAACY,IAAI,CAAC,SAASD,aAAaA,CAAC;EAC7DE,IAAI,GAAG,CAAC;EACRC,KAAK,GAAG;AACU,CAAC,EAAE;EACrB,MAAMC,OAAO,GAAGX,cAAc,CAAC,CAAC,CAAC;EAEjCH,SAAS,CAAC,MAAM;IACdc,OAAO,CAACC,KAAK,GAAGV,UAAU,CACxBC,UAAU,CAAC,GAAG,EAAE;MAAEU,QAAQ,EAAE,GAAG;MAAEC,MAAM,EAAEV,MAAM,CAACW,KAAK,CAACX,MAAM,CAACY,IAAI;IAAE,CAAC,CAAC,EACrE,CAAC,CAAC,EACF,IACF,CAAC;EACH,CAAC,EAAE,CAACL,OAAO,CAAC,CAAC;EAEb,MAAMM,aAAa,GAAGhB,gBAAgB,CAAC,OAAO;IAC5CU,OAAO,EAAEA,OAAO,CAACC;EACnB,CAAC,CAAC,CAAC;EAEH,oBACEN,IAAA,CAACP,QAAQ,CAACmB,IAAI;IACZC,KAAK,EAAE,CACLC,MAAM,CAACC,GAAG,EACV;MACEC,KAAK,EAAEb,IAAI;MACXc,MAAM,EAAEd,IAAI;MACZe,YAAY,EAAEf,IAAI,GAAG,CAAC;MACtBgB,eAAe,EAAEf;IACnB,CAAC,EACDO,aAAa;EACb,CACH,CAAC;AAEN,CAAC,CAAC;AAEF,MAAMG,MAAM,GAAGtB,UAAU,CAAC4B,MAAM,CAAC;EAC/BL,GAAG,EAAE,CAAC;AACR,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+
3
+ import React, { useEffect } from 'react';
4
+ import { View, StyleSheet } from 'react-native';
5
+ import Animated, { useSharedValue, useAnimatedStyle, withRepeat, withSequence, withTiming, Easing, cancelAnimation } from 'react-native-reanimated';
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ export const AnimatedSpeakerRing = /*#__PURE__*/React.memo(function AnimatedSpeakerRing({
8
+ isSpeaking,
9
+ isMuted,
10
+ primaryColor,
11
+ children
12
+ }) {
13
+ const pulseScale = useSharedValue(1);
14
+ const pulseOpacity = useSharedValue(0);
15
+ useEffect(() => {
16
+ if (isSpeaking && !isMuted) {
17
+ pulseOpacity.value = withRepeat(withSequence(withTiming(0.4, {
18
+ duration: 600,
19
+ easing: Easing.out(Easing.ease)
20
+ }), withTiming(0, {
21
+ duration: 600,
22
+ easing: Easing.in(Easing.ease)
23
+ })), -1, false);
24
+ pulseScale.value = withRepeat(withSequence(withTiming(1.15, {
25
+ duration: 600,
26
+ easing: Easing.out(Easing.ease)
27
+ }), withTiming(1, {
28
+ duration: 600,
29
+ easing: Easing.in(Easing.ease)
30
+ })), -1, false);
31
+ } else {
32
+ cancelAnimation(pulseScale);
33
+ cancelAnimation(pulseOpacity);
34
+ pulseScale.value = withTiming(1, {
35
+ duration: 200
36
+ });
37
+ pulseOpacity.value = withTiming(0, {
38
+ duration: 200
39
+ });
40
+ }
41
+ }, [isSpeaking, isMuted, pulseScale, pulseOpacity]);
42
+ const pulseStyle = useAnimatedStyle(() => ({
43
+ transform: [{
44
+ scale: pulseScale.value
45
+ }],
46
+ opacity: pulseOpacity.value
47
+ }));
48
+ return /*#__PURE__*/_jsxs(View, {
49
+ style: styles.container,
50
+ children: [/*#__PURE__*/_jsx(Animated.View, {
51
+ style: [styles.pulseRing, {
52
+ borderColor: primaryColor
53
+ }, pulseStyle]
54
+ }), /*#__PURE__*/_jsx(View, {
55
+ style: [styles.avatarRing, !isMuted ? {
56
+ borderColor: primaryColor,
57
+ borderWidth: 3
58
+ } : {
59
+ borderColor: 'transparent',
60
+ borderWidth: 3
61
+ }],
62
+ children: children
63
+ })]
64
+ });
65
+ });
66
+ const styles = StyleSheet.create({
67
+ container: {
68
+ alignItems: 'center',
69
+ justifyContent: 'center',
70
+ position: 'relative'
71
+ },
72
+ pulseRing: {
73
+ position: 'absolute',
74
+ width: '100%',
75
+ height: '100%',
76
+ borderRadius: 19,
77
+ borderWidth: 3
78
+ },
79
+ avatarRing: {
80
+ borderRadius: 19,
81
+ padding: 2,
82
+ position: 'relative'
83
+ }
84
+ });
85
+ //# sourceMappingURL=AnimatedSpeakerRing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useEffect","View","StyleSheet","Animated","useSharedValue","useAnimatedStyle","withRepeat","withSequence","withTiming","Easing","cancelAnimation","jsx","_jsx","jsxs","_jsxs","AnimatedSpeakerRing","memo","isSpeaking","isMuted","primaryColor","children","pulseScale","pulseOpacity","value","duration","easing","out","ease","in","pulseStyle","transform","scale","opacity","style","styles","container","pulseRing","borderColor","avatarRing","borderWidth","create","alignItems","justifyContent","position","width","height","borderRadius","padding"],"sourceRoot":"../../../../src","sources":["live/components/AnimatedSpeakerRing.tsx"],"mappings":"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","ignoreList":[]}