@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,654 @@
1
+ import React, { useState, useEffect, forwardRef, useImperativeHandle } from 'react';
2
+ import {
3
+ View,
4
+ Text,
5
+ StyleSheet,
6
+ TouchableOpacity,
7
+ TextInput,
8
+ ScrollView,
9
+ FlatList,
10
+ } from 'react-native';
11
+ import MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';
12
+
13
+ import { useLiveConfig } from '../context/LiveConfigContext';
14
+ import { useLiveRoom } from '../context/LiveRoomContext';
15
+ import type { Room, House } from '../types';
16
+
17
+ const TOPICS = [
18
+ 'Technology',
19
+ 'Music',
20
+ 'Sports',
21
+ 'Gaming',
22
+ 'News',
23
+ 'Politics',
24
+ 'Science',
25
+ 'Art',
26
+ 'Business',
27
+ 'Education',
28
+ 'Entertainment',
29
+ 'Health',
30
+ 'Culture',
31
+ 'Crypto',
32
+ 'AI',
33
+ ] as const;
34
+
35
+ const ROOM_TYPES = [
36
+ { value: 'talk' as const, label: 'Talk', icon: 'microphone' as const, description: 'Open conversation' },
37
+ { value: 'stage' as const, label: 'Stage', icon: 'account-voice' as const, description: 'Panel discussion' },
38
+ { value: 'broadcast' as const, label: 'Broadcast', icon: 'broadcast' as const, description: 'One-to-many stream' },
39
+ ] as const;
40
+
41
+ export interface CreateRoomSheetRef {
42
+ handleCreateAndStart: () => void;
43
+ handleSchedule: () => void;
44
+ handleCreateForEmbed: () => void;
45
+ }
46
+
47
+ export interface CreateRoomFormState {
48
+ isValid: boolean;
49
+ loading: boolean;
50
+ hasScheduledStart: boolean;
51
+ }
52
+
53
+ interface CreateRoomSheetProps {
54
+ onClose: () => void;
55
+ onRoomCreated?: (room: Room) => void;
56
+ mode?: 'standalone' | 'embed';
57
+ ScrollViewComponent?: React.ComponentType<{ children: React.ReactNode }>;
58
+ hideFooter?: boolean;
59
+ onFormStateChange?: (state: CreateRoomFormState) => void;
60
+ houses?: House[];
61
+ }
62
+
63
+ export const CreateRoomSheet = forwardRef<CreateRoomSheetRef, CreateRoomSheetProps>(({
64
+ onClose,
65
+ onRoomCreated,
66
+ mode = 'standalone',
67
+ ScrollViewComponent,
68
+ hideFooter = false,
69
+ onFormStateChange,
70
+ houses,
71
+ }, ref) => {
72
+ const Scroll = ScrollViewComponent || ScrollView;
73
+ const { useTheme, roomsService, toast } = useLiveConfig();
74
+ const theme = useTheme();
75
+ const { joinLiveRoom } = useLiveRoom();
76
+ const [title, setTitle] = useState('');
77
+ const [description, setDescription] = useState('');
78
+ const [topic, setTopic] = useState('');
79
+ const [scheduledStart, setScheduledStart] = useState('');
80
+ const [speakerPermission, setSpeakerPermission] = useState<'everyone' | 'followers' | 'invited'>('invited');
81
+ const [roomType, setRoomType] = useState<'talk' | 'stage' | 'broadcast'>('talk');
82
+ const [selectedHouse, setSelectedHouse] = useState<House | null>(null);
83
+ const [recordingEnabled, setRecordingEnabled] = useState(true);
84
+ const [loading, setLoading] = useState(false);
85
+
86
+ const isValid = title.trim().length > 0;
87
+ const isBroadcast = roomType === 'broadcast';
88
+
89
+ useEffect(() => {
90
+ onFormStateChange?.({ isValid, loading, hasScheduledStart: !!scheduledStart.trim() });
91
+ }, [isValid, loading, scheduledStart, onFormStateChange]);
92
+
93
+ const buildCreatePayload = () => ({
94
+ title: title.trim(),
95
+ description: description.trim() || undefined,
96
+ topic: topic.trim() || undefined,
97
+ speakerPermission: isBroadcast ? 'invited' as const : speakerPermission,
98
+ type: roomType,
99
+ ownerType: selectedHouse ? 'house' as const : 'profile' as const,
100
+ houseId: selectedHouse?._id,
101
+ recordingEnabled,
102
+ });
103
+
104
+ const handleCreateAndStart = async () => {
105
+ if (!isValid || loading) return;
106
+
107
+ setLoading(true);
108
+ try {
109
+ const room = await roomsService.createRoom(buildCreatePayload());
110
+
111
+ if (room) {
112
+ const started = await roomsService.startRoom(room._id);
113
+ onClose();
114
+ if (started) {
115
+ joinLiveRoom(room._id);
116
+ } else {
117
+ toast.error('Room created but failed to start');
118
+ }
119
+ onRoomCreated?.(room);
120
+ } else {
121
+ toast.error('Failed to create room');
122
+ }
123
+ } catch (error) {
124
+ console.error('Error creating room:', error);
125
+ toast.error('Failed to create room');
126
+ } finally {
127
+ setLoading(false);
128
+ }
129
+ };
130
+
131
+ const handleSchedule = async () => {
132
+ if (!isValid || loading) return;
133
+
134
+ if (!scheduledStart.trim()) {
135
+ toast.error('Please enter a scheduled start time');
136
+ return;
137
+ }
138
+
139
+ setLoading(true);
140
+ try {
141
+ const room = await roomsService.createRoom({
142
+ ...buildCreatePayload(),
143
+ scheduledStart: scheduledStart.trim(),
144
+ });
145
+
146
+ if (room) {
147
+ onClose();
148
+ onRoomCreated?.(room);
149
+ } else {
150
+ toast.error('Failed to create room');
151
+ }
152
+ } catch (error) {
153
+ console.error('Error creating room:', error);
154
+ toast.error('Failed to create room');
155
+ } finally {
156
+ setLoading(false);
157
+ }
158
+ };
159
+
160
+ const handleCreateForEmbed = async () => {
161
+ if (!isValid || loading) return;
162
+
163
+ setLoading(true);
164
+ try {
165
+ const room = await roomsService.createRoom(buildCreatePayload());
166
+
167
+ if (room) {
168
+ onClose();
169
+ onRoomCreated?.(room);
170
+ } else {
171
+ toast.error('Failed to create room');
172
+ }
173
+ } catch (error) {
174
+ console.error('Error creating room:', error);
175
+ toast.error('Failed to create room');
176
+ } finally {
177
+ setLoading(false);
178
+ }
179
+ };
180
+
181
+ useImperativeHandle(ref, () => ({
182
+ handleCreateAndStart,
183
+ handleSchedule,
184
+ handleCreateForEmbed,
185
+ }), [handleCreateAndStart, handleSchedule, handleCreateForEmbed]);
186
+
187
+ const renderFooterContent = () => {
188
+ if (hideFooter) return null;
189
+ return (
190
+ <View style={[styles.footer, { borderTopColor: theme.colors.border, backgroundColor: theme.colors.background }]}>
191
+ {mode === 'standalone' ? (
192
+ <>
193
+ <TouchableOpacity
194
+ style={[
195
+ styles.primaryButton,
196
+ {
197
+ backgroundColor: isValid ? theme.colors.primary : theme.colors.backgroundSecondary,
198
+ opacity: loading ? 0.6 : 1,
199
+ },
200
+ ]}
201
+ onPress={handleCreateAndStart}
202
+ disabled={!isValid || loading}
203
+ >
204
+ <MaterialCommunityIcons
205
+ name="play"
206
+ size={20}
207
+ color={isValid ? theme.colors.card : theme.colors.textSecondary}
208
+ />
209
+ <Text
210
+ style={[styles.primaryButtonText, { color: isValid ? theme.colors.card : theme.colors.textSecondary }]}
211
+ >
212
+ {loading ? 'Creating...' : 'Start Now'}
213
+ </Text>
214
+ </TouchableOpacity>
215
+
216
+ {scheduledStart.trim() && (
217
+ <TouchableOpacity
218
+ style={[
219
+ styles.secondaryButton,
220
+ { backgroundColor: theme.colors.backgroundSecondary, borderColor: theme.colors.border, opacity: loading ? 0.6 : 1 },
221
+ ]}
222
+ onPress={handleSchedule}
223
+ disabled={!isValid || loading}
224
+ >
225
+ <MaterialCommunityIcons name="calendar" size={20} color={theme.colors.text} />
226
+ <Text style={[styles.secondaryButtonText, { color: theme.colors.text }]}>
227
+ Schedule Room
228
+ </Text>
229
+ </TouchableOpacity>
230
+ )}
231
+ </>
232
+ ) : (
233
+ <TouchableOpacity
234
+ style={[
235
+ styles.primaryButton,
236
+ {
237
+ backgroundColor: isValid ? theme.colors.primary : theme.colors.backgroundSecondary,
238
+ opacity: loading ? 0.6 : 1,
239
+ },
240
+ ]}
241
+ onPress={handleCreateForEmbed}
242
+ disabled={!isValid || loading}
243
+ >
244
+ <MaterialCommunityIcons
245
+ name="radio"
246
+ size={20}
247
+ color={isValid ? theme.colors.card : theme.colors.textSecondary}
248
+ />
249
+ <Text
250
+ style={[styles.primaryButtonText, { color: isValid ? theme.colors.card : theme.colors.textSecondary }]}
251
+ >
252
+ {loading ? 'Creating...' : 'Create Room'}
253
+ </Text>
254
+ </TouchableOpacity>
255
+ )}
256
+ </View>
257
+ );
258
+ };
259
+
260
+ return (
261
+ <View style={[styles.container, { backgroundColor: theme.colors.background }]}>
262
+ <View style={[styles.header, { borderBottomColor: theme.colors.border }]}>
263
+ <TouchableOpacity onPress={onClose} style={styles.headerCloseBtn}>
264
+ <MaterialCommunityIcons name="close" size={20} color={theme.colors.text} />
265
+ </TouchableOpacity>
266
+ <Text style={[styles.headerTitle, { color: theme.colors.text }]}>
267
+ Create Room
268
+ </Text>
269
+ <View style={{ width: 28 }} />
270
+ </View>
271
+
272
+ <Scroll
273
+ style={{ flex: 1 }}
274
+ contentContainerStyle={[styles.scrollContent, hideFooter && { paddingBottom: 72 }]}
275
+ keyboardShouldPersistTaps="handled"
276
+ >
277
+ {/* Room Type Selector */}
278
+ <View style={[styles.inputSection, styles.sectionPadded]}>
279
+ <Text style={[styles.label, { color: theme.colors.text }]}>Room Type</Text>
280
+ <View style={styles.typeSelector}>
281
+ {ROOM_TYPES.map((rt) => {
282
+ const selected = roomType === rt.value;
283
+ return (
284
+ <TouchableOpacity
285
+ key={rt.value}
286
+ style={[
287
+ styles.typeCard,
288
+ {
289
+ backgroundColor: selected ? theme.colors.primary : theme.colors.backgroundSecondary,
290
+ borderColor: selected ? theme.colors.primary : theme.colors.border,
291
+ },
292
+ ]}
293
+ onPress={() => setRoomType(rt.value)}
294
+ >
295
+ <MaterialCommunityIcons
296
+ name={rt.icon}
297
+ size={22}
298
+ color={selected ? '#FFFFFF' : theme.colors.textSecondary}
299
+ />
300
+ <Text style={[styles.typeCardLabel, { color: selected ? '#FFFFFF' : theme.colors.text }]}>
301
+ {rt.label}
302
+ </Text>
303
+ <Text style={[styles.typeCardDesc, { color: selected ? 'rgba(255,255,255,0.8)' : theme.colors.textSecondary }]}>
304
+ {rt.description}
305
+ </Text>
306
+ </TouchableOpacity>
307
+ );
308
+ })}
309
+ </View>
310
+ </View>
311
+
312
+ {/* House Picker */}
313
+ {houses && houses.length > 0 && (
314
+ <View style={styles.inputSection}>
315
+ <Text style={[styles.label, styles.sectionPadded, { color: theme.colors.text }]}>Create for</Text>
316
+ <FlatList
317
+ horizontal
318
+ showsHorizontalScrollIndicator={false}
319
+ data={[null, ...houses]}
320
+ keyExtractor={(item) => item?._id ?? 'personal'}
321
+ contentContainerStyle={styles.chipList}
322
+ renderItem={({ item }) => {
323
+ const selected = item === null ? !selectedHouse : selectedHouse?._id === item._id;
324
+ return (
325
+ <TouchableOpacity
326
+ style={[
327
+ styles.chip,
328
+ {
329
+ backgroundColor: selected ? theme.colors.primary : theme.colors.backgroundSecondary,
330
+ },
331
+ ]}
332
+ onPress={() => setSelectedHouse(item)}
333
+ >
334
+ {item && (
335
+ <MaterialCommunityIcons
336
+ name="home-group"
337
+ size={14}
338
+ color={selected ? '#FFFFFF' : theme.colors.textSecondary}
339
+ style={{ marginRight: 4 }}
340
+ />
341
+ )}
342
+ <Text style={[styles.chipText, { color: selected ? '#FFFFFF' : theme.colors.text }]}>
343
+ {item ? item.name : 'Personal'}
344
+ </Text>
345
+ </TouchableOpacity>
346
+ );
347
+ }}
348
+ />
349
+ </View>
350
+ )}
351
+
352
+ <View style={[styles.inputSection, styles.sectionPadded]}>
353
+ <Text style={[styles.label, { color: theme.colors.text }]}>Title *</Text>
354
+ <TextInput
355
+ style={[styles.input, { backgroundColor: theme.colors.backgroundSecondary, color: theme.colors.text }]}
356
+ placeholder="What's your room about?"
357
+ placeholderTextColor={theme.colors.textTertiary}
358
+ value={title}
359
+ onChangeText={setTitle}
360
+ maxLength={100}
361
+ />
362
+ <Text style={[styles.charCount, { color: theme.colors.textTertiary }]}>
363
+ {title.length}/100
364
+ </Text>
365
+ </View>
366
+
367
+ <View style={styles.inputSection}>
368
+ <Text style={[styles.label, styles.sectionPadded, { color: theme.colors.text }]}>Topic</Text>
369
+ <FlatList
370
+ horizontal
371
+ showsHorizontalScrollIndicator={false}
372
+ data={TOPICS}
373
+ keyExtractor={(item) => item}
374
+ contentContainerStyle={styles.chipList}
375
+ renderItem={({ item }) => {
376
+ const selected = topic === item;
377
+ return (
378
+ <TouchableOpacity
379
+ style={[
380
+ styles.chip,
381
+ {
382
+ backgroundColor: selected ? theme.colors.primary : theme.colors.backgroundSecondary,
383
+ },
384
+ ]}
385
+ onPress={() => setTopic(selected ? '' : item)}
386
+ >
387
+ <Text style={[styles.chipText, { color: selected ? '#FFFFFF' : theme.colors.text }]}>
388
+ {item}
389
+ </Text>
390
+ </TouchableOpacity>
391
+ );
392
+ }}
393
+ />
394
+ </View>
395
+
396
+ <View style={[styles.inputSection, styles.sectionPadded]}>
397
+ <Text style={[styles.label, { color: theme.colors.text }]}>Description</Text>
398
+ <TextInput
399
+ style={[styles.textArea, { backgroundColor: theme.colors.backgroundSecondary, color: theme.colors.text }]}
400
+ placeholder="Tell people what to expect..."
401
+ placeholderTextColor={theme.colors.textTertiary}
402
+ value={description}
403
+ onChangeText={setDescription}
404
+ multiline
405
+ numberOfLines={3}
406
+ maxLength={500}
407
+ />
408
+ </View>
409
+
410
+ {/* Hide speaker permission for broadcast (backend forces invited) */}
411
+ {!isBroadcast && (
412
+ <View style={[styles.inputSection, styles.sectionPadded]}>
413
+ <Text style={[styles.label, { color: theme.colors.text }]}>Who can speak?</Text>
414
+ <View style={styles.radioGroup}>
415
+ {([
416
+ { value: 'everyone' as const, label: 'Everyone', icon: 'earth' as const },
417
+ { value: 'followers' as const, label: 'People you follow', icon: 'account-group' as const },
418
+ { value: 'invited' as const, label: 'Only invited speakers', icon: 'account-plus' as const },
419
+ ]).map((option, index, arr) => {
420
+ const selected = speakerPermission === option.value;
421
+ const isFirst = index === 0;
422
+ const isLast = index === arr.length - 1;
423
+ return (
424
+ <TouchableOpacity
425
+ key={option.value}
426
+ style={[
427
+ styles.radioRow,
428
+ {
429
+ backgroundColor: theme.colors.backgroundSecondary,
430
+ borderTopLeftRadius: isFirst ? 12 : 0,
431
+ borderTopRightRadius: isFirst ? 12 : 0,
432
+ borderBottomLeftRadius: isLast ? 12 : 0,
433
+ borderBottomRightRadius: isLast ? 12 : 0,
434
+ },
435
+ ]}
436
+ onPress={() => setSpeakerPermission(option.value)}
437
+ >
438
+ <MaterialCommunityIcons
439
+ name={option.icon}
440
+ size={18}
441
+ color={selected ? theme.colors.primary : theme.colors.textSecondary}
442
+ />
443
+ <Text style={[styles.radioLabel, { color: selected ? theme.colors.primary : theme.colors.text }]}>
444
+ {option.label}
445
+ </Text>
446
+ <View
447
+ style={[
448
+ styles.radioCircle,
449
+ {
450
+ borderColor: selected ? theme.colors.primary : theme.colors.border,
451
+ backgroundColor: selected ? theme.colors.primary : 'transparent',
452
+ },
453
+ ]}
454
+ >
455
+ {selected && (
456
+ <MaterialCommunityIcons name="check" size={12} color="#FFFFFF" />
457
+ )}
458
+ </View>
459
+ </TouchableOpacity>
460
+ );
461
+ })}
462
+ </View>
463
+ </View>
464
+ )}
465
+
466
+ {mode === 'standalone' && (
467
+ <View style={[styles.inputSection, styles.sectionPadded]}>
468
+ <Text style={[styles.label, { color: theme.colors.text }]}>Schedule (Optional)</Text>
469
+ <TextInput
470
+ style={[styles.input, { backgroundColor: theme.colors.backgroundSecondary, color: theme.colors.text }]}
471
+ placeholder="e.g., 2024-03-20 14:00"
472
+ placeholderTextColor={theme.colors.textTertiary}
473
+ value={scheduledStart}
474
+ onChangeText={setScheduledStart}
475
+ />
476
+ </View>
477
+ )}
478
+
479
+ <View style={[styles.inputSection, styles.sectionPadded]}>
480
+ <TouchableOpacity
481
+ style={[styles.toggleRow, { backgroundColor: theme.colors.backgroundSecondary }]}
482
+ onPress={() => setRecordingEnabled(!recordingEnabled)}
483
+ >
484
+ <MaterialCommunityIcons
485
+ name={recordingEnabled ? 'record-circle' : 'record-circle-outline'}
486
+ size={20}
487
+ color={recordingEnabled ? '#FF0000' : theme.colors.textSecondary}
488
+ />
489
+ <View style={{ flex: 1 }}>
490
+ <Text style={[styles.toggleLabel, { color: theme.colors.text }]}>
491
+ Auto-record
492
+ </Text>
493
+ <Text style={{ fontSize: 11, color: theme.colors.textSecondary }}>
494
+ Record audio when room goes live (max 1h, expires in 6 months)
495
+ </Text>
496
+ </View>
497
+ <View
498
+ style={[
499
+ styles.toggleIndicator,
500
+ {
501
+ backgroundColor: recordingEnabled ? theme.colors.primary : theme.colors.border,
502
+ },
503
+ ]}
504
+ >
505
+ <View
506
+ style={[
507
+ styles.toggleDot,
508
+ recordingEnabled && { transform: [{ translateX: 14 }] },
509
+ ]}
510
+ />
511
+ </View>
512
+ </TouchableOpacity>
513
+ </View>
514
+ </Scroll>
515
+
516
+ {renderFooterContent()}
517
+ </View>
518
+ );
519
+ });
520
+
521
+ CreateRoomSheet.displayName = 'CreateRoomSheet';
522
+
523
+ const styles = StyleSheet.create({
524
+ container: { flex: 1 },
525
+ header: {
526
+ flexDirection: 'row',
527
+ alignItems: 'center',
528
+ justifyContent: 'space-between',
529
+ paddingHorizontal: 12,
530
+ paddingVertical: 8,
531
+ borderBottomWidth: 0.5,
532
+ },
533
+ headerCloseBtn: { width: 28, height: 28, alignItems: 'center', justifyContent: 'center' },
534
+ headerTitle: { fontSize: 16, fontWeight: '600' },
535
+ scrollContent: { paddingVertical: 16, paddingBottom: 12 },
536
+ sectionPadded: { paddingHorizontal: 16 },
537
+ inputSection: { marginBottom: 16 },
538
+ label: { fontSize: 13, fontWeight: '600', marginBottom: 6 },
539
+ input: {
540
+ borderRadius: 12,
541
+ paddingHorizontal: 14,
542
+ paddingVertical: 10,
543
+ fontSize: 15,
544
+ },
545
+ textArea: {
546
+ borderRadius: 12,
547
+ paddingHorizontal: 14,
548
+ paddingVertical: 10,
549
+ fontSize: 15,
550
+ minHeight: 72,
551
+ textAlignVertical: 'top',
552
+ },
553
+ charCount: { fontSize: 11, marginTop: 4 },
554
+ typeSelector: {
555
+ flexDirection: 'row',
556
+ gap: 10,
557
+ },
558
+ typeCard: {
559
+ flex: 1,
560
+ alignItems: 'center',
561
+ paddingVertical: 14,
562
+ paddingHorizontal: 8,
563
+ borderRadius: 12,
564
+ borderWidth: 1,
565
+ gap: 4,
566
+ },
567
+ typeCardLabel: {
568
+ fontSize: 13,
569
+ fontWeight: '600',
570
+ marginTop: 2,
571
+ },
572
+ typeCardDesc: {
573
+ fontSize: 10,
574
+ textAlign: 'center',
575
+ },
576
+ chipList: { gap: 8, paddingHorizontal: 16 },
577
+ chip: {
578
+ flexDirection: 'row',
579
+ alignItems: 'center',
580
+ paddingHorizontal: 14,
581
+ paddingVertical: 8,
582
+ borderRadius: 20,
583
+ },
584
+ chipText: { fontSize: 13, fontWeight: '500' },
585
+ radioGroup: {
586
+ gap: 3,
587
+ },
588
+ radioRow: {
589
+ flexDirection: 'row',
590
+ alignItems: 'center',
591
+ gap: 10,
592
+ paddingHorizontal: 14,
593
+ paddingVertical: 12,
594
+ },
595
+ radioLabel: { fontSize: 14, flex: 1 },
596
+ radioCircle: {
597
+ width: 20,
598
+ height: 20,
599
+ borderRadius: 10,
600
+ borderWidth: 2,
601
+ alignItems: 'center',
602
+ justifyContent: 'center',
603
+ },
604
+ footer: {
605
+ gap: 10,
606
+ paddingHorizontal: 16,
607
+ paddingTop: 10,
608
+ paddingBottom: 14,
609
+ borderTopWidth: 0.5,
610
+ },
611
+ primaryButton: {
612
+ flexDirection: 'row',
613
+ alignItems: 'center',
614
+ justifyContent: 'center',
615
+ paddingVertical: 12,
616
+ borderRadius: 22,
617
+ gap: 6,
618
+ },
619
+ primaryButtonText: { fontSize: 15, fontWeight: '600' },
620
+ secondaryButton: {
621
+ flexDirection: 'row',
622
+ alignItems: 'center',
623
+ justifyContent: 'center',
624
+ paddingVertical: 12,
625
+ borderRadius: 22,
626
+ borderWidth: 1,
627
+ gap: 6,
628
+ },
629
+ secondaryButtonText: { fontSize: 15, fontWeight: '600' },
630
+ toggleRow: {
631
+ flexDirection: 'row',
632
+ alignItems: 'center',
633
+ gap: 10,
634
+ paddingHorizontal: 14,
635
+ paddingVertical: 12,
636
+ borderRadius: 12,
637
+ },
638
+ toggleLabel: { fontSize: 14, fontWeight: '500' },
639
+ toggleIndicator: {
640
+ width: 36,
641
+ height: 22,
642
+ borderRadius: 11,
643
+ justifyContent: 'center',
644
+ paddingHorizontal: 2,
645
+ },
646
+ toggleDot: {
647
+ width: 18,
648
+ height: 18,
649
+ borderRadius: 9,
650
+ backgroundColor: '#FFFFFF',
651
+ },
652
+ });
653
+
654
+ export default CreateRoomSheet;