@q9labsai/chalk-react-native 4.1.17 → 5.0.1

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 (544) hide show
  1. package/README.md +134 -29
  2. package/android/build.gradle +35 -0
  3. package/android/compatibility/ModuleApiCompatibility.java +215 -0
  4. package/android/src/main/AndroidManifest.xml +2 -1
  5. package/android/src/main/java/ai/q9labs/chalk/reactnative/ChalkSpaceForegroundService.java +105 -31
  6. package/android/src/main/kotlin/ai/q9labs/chalk/reactnative/ChalkAndroidConnectionServicePackage.kt +2 -0
  7. package/android/src/main/kotlin/ai/q9labs/chalk/reactnative/ChalkAudioRouteModule.kt +137 -0
  8. package/android/src/main/kotlin/ai/q9labs/chalk/reactnative/ChalkCallServiceModule.kt +32 -0
  9. package/android/src/main/kotlin/ai/q9labs/chalk/reactnative/CommunicationDeviceListener.kt +23 -0
  10. package/android/src/test/kotlin/ai/q9labs/chalk/compatibility/UnsafeSignatures.kt +29 -0
  11. package/dist/android/call-service.d.ts +4 -0
  12. package/dist/android/call-service.d.ts.map +1 -0
  13. package/dist/avatar/FaceAvatar.d.ts +19 -0
  14. package/dist/avatar/FaceAvatar.d.ts.map +1 -0
  15. package/dist/avatar/tile-avatar-size.d.ts +3 -0
  16. package/dist/avatar/tile-avatar-size.d.ts.map +1 -0
  17. package/dist/chunk-GYVZSOGQ.js +30 -0
  18. package/dist/chunk-IHE6EA3T.js +25 -0
  19. package/dist/chunk-OIBT2FNM.js +1479 -0
  20. package/dist/client.d.ts +1 -5
  21. package/dist/client.d.ts.map +1 -1
  22. package/dist/client.js +185 -2
  23. package/dist/components/EmbeddedWhiteboard.d.ts.map +1 -1
  24. package/dist/components/native-media-visibility.d.ts +3 -2
  25. package/dist/components/native-media-visibility.d.ts.map +1 -1
  26. package/dist/components/useAndroidCallService.d.ts +8 -0
  27. package/dist/components/useAndroidCallService.d.ts.map +1 -0
  28. package/dist/dev.d.ts +10 -0
  29. package/dist/dev.d.ts.map +1 -0
  30. package/dist/dev.js +10 -0
  31. package/dist/dock/Dock.d.ts +23 -0
  32. package/dist/dock/Dock.d.ts.map +1 -0
  33. package/dist/dock/LeaveMenu.d.ts +12 -0
  34. package/dist/dock/LeaveMenu.d.ts.map +1 -0
  35. package/dist/dock/MoreSheet.d.ts +17 -0
  36. package/dist/dock/MoreSheet.d.ts.map +1 -0
  37. package/dist/dock/ReactionBurst.d.ts +8 -0
  38. package/dist/dock/ReactionBurst.d.ts.map +1 -0
  39. package/dist/dock/RoutePicker.d.ts +16 -0
  40. package/dist/dock/RoutePicker.d.ts.map +1 -0
  41. package/dist/dock/audio-route.d.ts +25 -0
  42. package/dist/dock/audio-route.d.ts.map +1 -0
  43. package/dist/error-YOPTEH5N.wav +0 -0
  44. package/dist/frame/CallFrame.d.ts +17 -0
  45. package/dist/frame/CallFrame.d.ts.map +1 -0
  46. package/dist/frame/Chalk.d.ts +40 -0
  47. package/dist/frame/Chalk.d.ts.map +1 -0
  48. package/dist/frame/back-handler.d.ts +6 -0
  49. package/dist/frame/back-handler.d.ts.map +1 -0
  50. package/dist/frame/dev-scenario.d.ts +28 -0
  51. package/dist/frame/dev-scenario.d.ts.map +1 -0
  52. package/dist/frame/device-layout.d.ts +16 -0
  53. package/dist/frame/device-layout.d.ts.map +1 -0
  54. package/dist/frame/measurement.d.ts +28 -0
  55. package/dist/frame/measurement.d.ts.map +1 -0
  56. package/dist/frame/portal.d.ts +24 -0
  57. package/dist/frame/portal.d.ts.map +1 -0
  58. package/dist/frame/preferences.d.ts +21 -0
  59. package/dist/frame/preferences.d.ts.map +1 -0
  60. package/dist/frame/regions.d.ts +25 -0
  61. package/dist/frame/regions.d.ts.map +1 -0
  62. package/dist/hand-DFWVXPH2.wav +0 -0
  63. package/dist/haptics/haptics.d.ts +12 -0
  64. package/dist/haptics/haptics.d.ts.map +1 -0
  65. package/dist/header/CallDetailsSheet.d.ts +18 -0
  66. package/dist/header/CallDetailsSheet.d.ts.map +1 -0
  67. package/dist/header/Header.d.ts +17 -0
  68. package/dist/header/Header.d.ts.map +1 -0
  69. package/dist/header/QrCode.d.ts +6 -0
  70. package/dist/header/QrCode.d.ts.map +1 -0
  71. package/dist/icons/Icon.d.ts +12 -0
  72. package/dist/icons/Icon.d.ts.map +1 -0
  73. package/dist/icons/icon-element.d.ts +24 -0
  74. package/dist/icons/icon-element.d.ts.map +1 -0
  75. package/dist/icons/icon-paths.d.ts +530 -0
  76. package/dist/icons/icon-paths.d.ts.map +1 -0
  77. package/dist/index.d.ts +6 -9
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +2956 -38
  80. package/dist/join-Z6RL5AHE.wav +0 -0
  81. package/dist/knock-4VBQSHK4.wav +0 -0
  82. package/dist/leave-MQLZOWQD.wav +0 -0
  83. package/dist/limbo/Limbo.d.ts +25 -0
  84. package/dist/limbo/Limbo.d.ts.map +1 -0
  85. package/dist/limbo/Veil.d.ts +10 -0
  86. package/dist/limbo/Veil.d.ts.map +1 -0
  87. package/dist/media/native-capture-error.d.ts +7 -0
  88. package/dist/media/native-capture-error.d.ts.map +1 -0
  89. package/dist/message-6Y6WJGTB.wav +0 -0
  90. package/dist/motion/MovingFrame.d.ts +36 -0
  91. package/dist/motion/MovingFrame.d.ts.map +1 -0
  92. package/dist/motion/motion.d.ts +82 -0
  93. package/dist/motion/motion.d.ts.map +1 -0
  94. package/dist/motion/presence.d.ts +6 -0
  95. package/dist/motion/presence.d.ts.map +1 -0
  96. package/dist/motion/press.d.ts +15 -0
  97. package/dist/motion/press.d.ts.map +1 -0
  98. package/dist/mute-H5SJFXVI.wav +0 -0
  99. package/dist/primitives/BottomSheet.d.ts +36 -0
  100. package/dist/primitives/BottomSheet.d.ts.map +1 -0
  101. package/dist/primitives/ChalkText.d.ts +13 -0
  102. package/dist/primitives/ChalkText.d.ts.map +1 -0
  103. package/dist/primitives/CopyButton.d.ts +11 -0
  104. package/dist/primitives/CopyButton.d.ts.map +1 -0
  105. package/dist/primitives/IconButton.d.ts +26 -0
  106. package/dist/primitives/IconButton.d.ts.map +1 -0
  107. package/dist/primitives/Menu.d.ts +39 -0
  108. package/dist/primitives/Menu.d.ts.map +1 -0
  109. package/dist/primitives/NameTag.d.ts +19 -0
  110. package/dist/primitives/NameTag.d.ts.map +1 -0
  111. package/dist/primitives/PillButton.d.ts +19 -0
  112. package/dist/primitives/PillButton.d.ts.map +1 -0
  113. package/dist/primitives/SegmentedControl.d.ts +17 -0
  114. package/dist/primitives/SegmentedControl.d.ts.map +1 -0
  115. package/dist/primitives/SheetGroup.d.ts +24 -0
  116. package/dist/primitives/SheetGroup.d.ts.map +1 -0
  117. package/dist/primitives/Switch.d.ts +9 -0
  118. package/dist/primitives/Switch.d.ts.map +1 -0
  119. package/dist/primitives/TileShell.d.ts +18 -0
  120. package/dist/primitives/TileShell.d.ts.map +1 -0
  121. package/dist/primitives/announce.d.ts +3 -0
  122. package/dist/primitives/announce.d.ts.map +1 -0
  123. package/dist/primitives/menu-placement.d.ts +32 -0
  124. package/dist/primitives/menu-placement.d.ts.map +1 -0
  125. package/dist/primitives/toast/Toast.d.ts +8 -0
  126. package/dist/primitives/toast/Toast.d.ts.map +1 -0
  127. package/dist/primitives/toast/ToastStack.d.ts +18 -0
  128. package/dist/primitives/toast/ToastStack.d.ts.map +1 -0
  129. package/dist/primitives/toast/toast-store.d.ts +39 -0
  130. package/dist/primitives/toast/toast-store.d.ts.map +1 -0
  131. package/dist/recording-Q4GB77Y4.wav +0 -0
  132. package/dist/sheets/people-chat/ChatNotices.d.ts +14 -0
  133. package/dist/sheets/people-chat/ChatNotices.d.ts.map +1 -0
  134. package/dist/sheets/people-chat/ChatTab.d.ts +6 -0
  135. package/dist/sheets/people-chat/ChatTab.d.ts.map +1 -0
  136. package/dist/sheets/people-chat/Composer.d.ts +7 -0
  137. package/dist/sheets/people-chat/Composer.d.ts.map +1 -0
  138. package/dist/sheets/people-chat/PeopleChatSheet.d.ts +17 -0
  139. package/dist/sheets/people-chat/PeopleChatSheet.d.ts.map +1 -0
  140. package/dist/sheets/people-chat/PeopleTab.d.ts +3 -0
  141. package/dist/sheets/people-chat/PeopleTab.d.ts.map +1 -0
  142. package/dist/sheets/people-chat/PhotoViewer.d.ts +19 -0
  143. package/dist/sheets/people-chat/PhotoViewer.d.ts.map +1 -0
  144. package/dist/sheets/people-chat/TextField.d.ts +4 -0
  145. package/dist/sheets/people-chat/TextField.d.ts.map +1 -0
  146. package/dist/sheets/people-chat/attachments.d.ts +33 -0
  147. package/dist/sheets/people-chat/attachments.d.ts.map +1 -0
  148. package/dist/sheets/people-chat/chat-model.d.ts +64 -0
  149. package/dist/sheets/people-chat/chat-model.d.ts.map +1 -0
  150. package/dist/sheets/people-chat/people-model.d.ts +43 -0
  151. package/dist/sheets/people-chat/people-model.d.ts.map +1 -0
  152. package/dist/sounds/sounds.d.ts +33 -0
  153. package/dist/sounds/sounds.d.ts.map +1 -0
  154. package/dist/space-client/create-native-space-client.d.ts +0 -4
  155. package/dist/space-client/create-native-space-client.d.ts.map +1 -1
  156. package/dist/space-client/random-uuid.d.ts +7 -0
  157. package/dist/space-client/random-uuid.d.ts.map +1 -0
  158. package/dist/stage/ContentTile.d.ts +18 -0
  159. package/dist/stage/ContentTile.d.ts.map +1 -0
  160. package/dist/stage/ParticipantTile.d.ts +18 -0
  161. package/dist/stage/ParticipantTile.d.ts.map +1 -0
  162. package/dist/stage/Stage.d.ts +14 -0
  163. package/dist/stage/Stage.d.ts.map +1 -0
  164. package/dist/stage/TileSheet.d.ts +12 -0
  165. package/dist/stage/TileSheet.d.ts.map +1 -0
  166. package/dist/stage/camera.d.ts +7 -0
  167. package/dist/stage/camera.d.ts.map +1 -0
  168. package/dist/stage/layout.d.ts +57 -0
  169. package/dist/stage/layout.d.ts.map +1 -0
  170. package/dist/stage/space-selector.d.ts +10 -0
  171. package/dist/stage/space-selector.d.ts.map +1 -0
  172. package/dist/stage/stage-view.d.ts +23 -0
  173. package/dist/stage/stage-view.d.ts.map +1 -0
  174. package/dist/status/CallOverlays.d.ts +17 -0
  175. package/dist/status/CallOverlays.d.ts.map +1 -0
  176. package/dist/status/ChalkArrival.d.ts +24 -0
  177. package/dist/status/ChalkArrival.d.ts.map +1 -0
  178. package/dist/status/StatusPage.d.ts +14 -0
  179. package/dist/status/StatusPage.d.ts.map +1 -0
  180. package/dist/status/call-screen.d.ts +20 -0
  181. package/dist/status/call-screen.d.ts.map +1 -0
  182. package/dist/test-VD2KAM4D.wav +0 -0
  183. package/dist/theme/theme.d.ts +15 -0
  184. package/dist/theme/theme.d.ts.map +1 -0
  185. package/dist/theme/tokens.d.ts +248 -0
  186. package/dist/theme/tokens.d.ts.map +1 -0
  187. package/dist/toasts/CallEventToasts.d.ts +21 -0
  188. package/dist/toasts/CallEventToasts.d.ts.map +1 -0
  189. package/dist/toasts/notices.d.ts +34 -0
  190. package/dist/toasts/notices.d.ts.map +1 -0
  191. package/dist/ui/ChalkUI.d.ts +12 -0
  192. package/dist/ui/ChalkUI.d.ts.map +1 -0
  193. package/dist/ui.d.ts +25 -0
  194. package/dist/ui.d.ts.map +1 -0
  195. package/dist/ui.js +77 -0
  196. package/dist/unmute-2XR2LICU.wav +0 -0
  197. package/embedded/chalk-whiteboard/asset-manifest.json +2 -2
  198. package/embedded/chalk-whiteboard/renderer.js +510 -510
  199. package/ios/ChalkAudioRouteModule.swift +93 -0
  200. package/ios/ChalkAudioRouteModuleBridge.m +9 -0
  201. package/package.json +46 -76
  202. package/src/android/call-service.ts +19 -0
  203. package/src/avatar/FaceAvatar.tsx +145 -0
  204. package/src/avatar/tile-avatar-size.ts +4 -0
  205. package/src/client.ts +1 -5
  206. package/src/components/EmbeddedWhiteboard.tsx +14 -71
  207. package/src/components/native-media-visibility.ts +1 -2
  208. package/src/components/useAndroidCallService.ts +41 -0
  209. package/src/dev.ts +9 -0
  210. package/src/dock/Dock.tsx +95 -0
  211. package/src/dock/LeaveMenu.tsx +21 -0
  212. package/src/dock/MoreSheet.tsx +233 -0
  213. package/src/dock/ReactionBurst.tsx +55 -0
  214. package/src/dock/RoutePicker.tsx +42 -0
  215. package/src/dock/audio-route.ts +69 -0
  216. package/src/frame/CallFrame.tsx +209 -0
  217. package/src/frame/Chalk.tsx +83 -0
  218. package/src/frame/back-handler.ts +19 -0
  219. package/src/frame/dev-scenario.ts +48 -0
  220. package/src/frame/device-layout.tsx +31 -0
  221. package/src/frame/measurement.ts +44 -0
  222. package/src/frame/portal.tsx +107 -0
  223. package/src/frame/preferences.tsx +48 -0
  224. package/src/frame/regions.test.ts +38 -0
  225. package/src/frame/regions.ts +60 -0
  226. package/src/haptics/haptics.ts +19 -0
  227. package/src/header/CallDetailsSheet.tsx +139 -0
  228. package/src/header/Header.tsx +107 -0
  229. package/src/header/QrCode.tsx +34 -0
  230. package/src/icons/Icon.tsx +35 -0
  231. package/src/icons/icon-element.ts +11 -0
  232. package/src/icons/icon-paths.ts +199 -0
  233. package/src/index.ts +6 -9
  234. package/src/limbo/Limbo.tsx +159 -0
  235. package/src/limbo/Veil.tsx +36 -0
  236. package/src/media/native-capture-error.test.ts +19 -0
  237. package/src/media/native-capture-error.ts +13 -0
  238. package/src/motion/MovingFrame.tsx +101 -0
  239. package/src/motion/motion.ts +33 -0
  240. package/src/motion/presence.ts +20 -0
  241. package/src/motion/press.ts +35 -0
  242. package/src/primitives/BottomSheet.tsx +211 -0
  243. package/src/primitives/ChalkText.tsx +23 -0
  244. package/src/primitives/CopyButton.tsx +78 -0
  245. package/src/primitives/IconButton.tsx +90 -0
  246. package/src/primitives/Menu.tsx +212 -0
  247. package/src/primitives/NameTag.tsx +68 -0
  248. package/src/primitives/PillButton.tsx +56 -0
  249. package/src/primitives/SegmentedControl.tsx +55 -0
  250. package/src/primitives/SheetGroup.tsx +72 -0
  251. package/src/primitives/Switch.tsx +39 -0
  252. package/src/primitives/TileShell.tsx +53 -0
  253. package/src/primitives/announce.ts +7 -0
  254. package/src/primitives/menu-placement.test.ts +50 -0
  255. package/src/primitives/menu-placement.ts +43 -0
  256. package/src/primitives/toast/Toast.tsx +50 -0
  257. package/src/primitives/toast/ToastStack.tsx +89 -0
  258. package/src/primitives/toast/toast-store.ts +86 -0
  259. package/src/sheets/people-chat/ChatNotices.tsx +69 -0
  260. package/src/sheets/people-chat/ChatTab.tsx +186 -0
  261. package/src/sheets/people-chat/Composer.tsx +182 -0
  262. package/src/sheets/people-chat/PeopleChatSheet.tsx +100 -0
  263. package/src/sheets/people-chat/PeopleTab.tsx +326 -0
  264. package/src/sheets/people-chat/PhotoViewer.tsx +132 -0
  265. package/src/sheets/people-chat/TextField.tsx +14 -0
  266. package/src/sheets/people-chat/attachments.tsx +183 -0
  267. package/src/sheets/people-chat/chat-model.ts +157 -0
  268. package/src/sheets/people-chat/people-chat-model.test.ts +98 -0
  269. package/src/sheets/people-chat/people-model.ts +68 -0
  270. package/src/sounds/assets/error.wav +0 -0
  271. package/src/sounds/assets/hand.wav +0 -0
  272. package/src/sounds/assets/join.wav +0 -0
  273. package/src/sounds/assets/knock.wav +0 -0
  274. package/src/sounds/assets/leave.wav +0 -0
  275. package/src/sounds/assets/message.wav +0 -0
  276. package/src/sounds/assets/mute.wav +0 -0
  277. package/src/sounds/assets/recording.wav +0 -0
  278. package/src/sounds/assets/test.wav +0 -0
  279. package/src/sounds/assets/unmute.wav +0 -0
  280. package/src/sounds/assets.d.ts +5 -0
  281. package/src/sounds/sounds.ts +50 -0
  282. package/src/space-client/create-native-space-client.ts +20 -181
  283. package/src/space-client/random-uuid.ts +17 -0
  284. package/src/space-client/whiteboard-watchdog.test.ts +23 -0
  285. package/src/stage/ContentTile.tsx +100 -0
  286. package/src/stage/ParticipantTile.tsx +140 -0
  287. package/src/stage/Stage.tsx +152 -0
  288. package/src/stage/TileSheet.tsx +116 -0
  289. package/src/stage/camera.ts +20 -0
  290. package/src/stage/layout.test.ts +77 -0
  291. package/src/stage/layout.ts +226 -0
  292. package/src/stage/space-selector.ts +31 -0
  293. package/src/stage/stage-view.tsx +68 -0
  294. package/src/status/CallOverlays.tsx +47 -0
  295. package/src/status/ChalkArrival.tsx +53 -0
  296. package/src/status/StatusPage.tsx +123 -0
  297. package/src/status/call-screen.test.ts +42 -0
  298. package/src/status/call-screen.ts +29 -0
  299. package/src/theme/theme.tsx +28 -0
  300. package/src/theme/tokens.ts +247 -0
  301. package/src/toasts/CallEventToasts.tsx +192 -0
  302. package/src/toasts/notices.test.ts +92 -0
  303. package/src/toasts/notices.ts +62 -0
  304. package/src/ui/ChalkUI.tsx +49 -0
  305. package/src/ui.ts +24 -0
  306. package/dist/android.d.ts +0 -2
  307. package/dist/android.d.ts.map +0 -1
  308. package/dist/android.js +0 -62
  309. package/dist/chunk-2OS7SSXE.js +0 -552
  310. package/dist/chunk-5DQ4KBRH.js +0 -690
  311. package/dist/chunk-ITLUHTVS.js +0 -5271
  312. package/dist/chunk-JB4LNWVP.js +0 -247
  313. package/dist/components/Chalk.d.ts +0 -79
  314. package/dist/components/Chalk.d.ts.map +0 -1
  315. package/dist/components/ChatMessageList.d.ts +0 -11
  316. package/dist/components/ChatMessageList.d.ts.map +0 -1
  317. package/dist/components/Entrance.d.ts +0 -22
  318. package/dist/components/Entrance.d.ts.map +0 -1
  319. package/dist/components/EntranceView.android.d.ts +0 -4
  320. package/dist/components/EntranceView.android.d.ts.map +0 -1
  321. package/dist/components/EntranceView.d.ts +0 -18
  322. package/dist/components/EntranceView.d.ts.map +0 -1
  323. package/dist/components/EntranceView.ios-pad.d.ts +0 -3
  324. package/dist/components/EntranceView.ios-pad.d.ts.map +0 -1
  325. package/dist/components/EntranceView.ios-phone.d.ts +0 -3
  326. package/dist/components/EntranceView.ios-phone.d.ts.map +0 -1
  327. package/dist/components/EntranceView.macos.d.ts +0 -4
  328. package/dist/components/EntranceView.macos.d.ts.map +0 -1
  329. package/dist/components/FaceAvatar.d.ts +0 -16
  330. package/dist/components/FaceAvatar.d.ts.map +0 -1
  331. package/dist/components/GradientSurface.d.ts +0 -14
  332. package/dist/components/GradientSurface.d.ts.map +0 -1
  333. package/dist/components/MediaView.d.ts +0 -14
  334. package/dist/components/MediaView.d.ts.map +0 -1
  335. package/dist/components/ReactionPicker.d.ts +0 -10
  336. package/dist/components/ReactionPicker.d.ts.map +0 -1
  337. package/dist/components/SpaceView.android.d.ts +0 -2
  338. package/dist/components/SpaceView.android.d.ts.map +0 -1
  339. package/dist/components/SpaceView.d.ts +0 -33
  340. package/dist/components/SpaceView.d.ts.map +0 -1
  341. package/dist/components/SpaceView.ios-pad.d.ts +0 -2
  342. package/dist/components/SpaceView.ios-pad.d.ts.map +0 -1
  343. package/dist/components/SpaceView.ios-phone.d.ts +0 -2
  344. package/dist/components/SpaceView.ios-phone.d.ts.map +0 -1
  345. package/dist/components/SpaceView.macos.d.ts +0 -2
  346. package/dist/components/SpaceView.macos.d.ts.map +0 -1
  347. package/dist/components/SpaceView.shared.d.ts +0 -3
  348. package/dist/components/SpaceView.shared.d.ts.map +0 -1
  349. package/dist/components/episode-diagnostic-render-observer.d.ts +0 -2
  350. package/dist/components/episode-diagnostic-render-observer.d.ts.map +0 -1
  351. package/dist/components/logo/Logo.d.ts +0 -11
  352. package/dist/components/logo/Logo.d.ts.map +0 -1
  353. package/dist/components/native-animation-controller.d.ts +0 -7
  354. package/dist/components/native-animation-controller.d.ts.map +0 -1
  355. package/dist/components/native-chat.d.ts +0 -8
  356. package/dist/components/native-chat.d.ts.map +0 -1
  357. package/dist/components/native-entrance/entrance-controller-store.d.ts +0 -34
  358. package/dist/components/native-entrance/entrance-controller-store.d.ts.map +0 -1
  359. package/dist/components/native-entrance/useEntranceController.d.ts +0 -19
  360. package/dist/components/native-entrance/useEntranceController.d.ts.map +0 -1
  361. package/dist/components/native-joining-loading-animation.d.ts +0 -9
  362. package/dist/components/native-joining-loading-animation.d.ts.map +0 -1
  363. package/dist/components/native-space-view/AppearanceSettings.d.ts +0 -2
  364. package/dist/components/native-space-view/AppearanceSettings.d.ts.map +0 -1
  365. package/dist/components/native-space-view/FeedbackSheet.d.ts +0 -12
  366. package/dist/components/native-space-view/FeedbackSheet.d.ts.map +0 -1
  367. package/dist/components/native-space-view/ParticipantActionSheet.d.ts +0 -9
  368. package/dist/components/native-space-view/ParticipantActionSheet.d.ts.map +0 -1
  369. package/dist/components/native-space-view/SettingsSheet.d.ts +0 -7
  370. package/dist/components/native-space-view/SettingsSheet.d.ts.map +0 -1
  371. package/dist/components/native-space-view/SpaceActionMenu.d.ts +0 -10
  372. package/dist/components/native-space-view/SpaceActionMenu.d.ts.map +0 -1
  373. package/dist/components/native-space-view/SpaceBottomDock.android.d.ts +0 -4
  374. package/dist/components/native-space-view/SpaceBottomDock.android.d.ts.map +0 -1
  375. package/dist/components/native-space-view/SpaceChatAttachment.d.ts +0 -8
  376. package/dist/components/native-space-view/SpaceChatAttachment.d.ts.map +0 -1
  377. package/dist/components/native-space-view/SpaceChatSheet.d.ts +0 -5
  378. package/dist/components/native-space-view/SpaceChatSheet.d.ts.map +0 -1
  379. package/dist/components/native-space-view/SpaceGrid.android.d.ts +0 -8
  380. package/dist/components/native-space-view/SpaceGrid.android.d.ts.map +0 -1
  381. package/dist/components/native-space-view/SpaceMoreSheet.d.ts +0 -7
  382. package/dist/components/native-space-view/SpaceMoreSheet.d.ts.map +0 -1
  383. package/dist/components/native-space-view/SpacePanelSheet.d.ts +0 -5
  384. package/dist/components/native-space-view/SpacePanelSheet.d.ts.map +0 -1
  385. package/dist/components/native-space-view/SpacePeopleSheet.d.ts +0 -5
  386. package/dist/components/native-space-view/SpacePeopleSheet.d.ts.map +0 -1
  387. package/dist/components/native-space-view/SpaceStage.android.d.ts +0 -29
  388. package/dist/components/native-space-view/SpaceStage.android.d.ts.map +0 -1
  389. package/dist/components/native-space-view/SpaceSurfacePrimitives.d.ts +0 -30
  390. package/dist/components/native-space-view/SpaceSurfacePrimitives.d.ts.map +0 -1
  391. package/dist/components/native-space-view/SpaceTopBar.android.d.ts +0 -11
  392. package/dist/components/native-space-view/SpaceTopBar.android.d.ts.map +0 -1
  393. package/dist/components/native-space-view/SpaceWhiteboardSurface.d.ts +0 -15
  394. package/dist/components/native-space-view/SpaceWhiteboardSurface.d.ts.map +0 -1
  395. package/dist/components/native-space-view/diagnostics.d.ts +0 -48
  396. package/dist/components/native-space-view/diagnostics.d.ts.map +0 -1
  397. package/dist/components/native-space-view/format-space-duration.d.ts +0 -2
  398. package/dist/components/native-space-view/format-space-duration.d.ts.map +0 -1
  399. package/dist/components/native-space-view/native-space-grid-keys.d.ts +0 -3
  400. package/dist/components/native-space-view/native-space-grid-keys.d.ts.map +0 -1
  401. package/dist/components/native-space-view/native-space-page-store.d.ts +0 -8
  402. package/dist/components/native-space-view/native-space-page-store.d.ts.map +0 -1
  403. package/dist/components/native-space-view/space-chat-attachments.d.ts +0 -15
  404. package/dist/components/native-space-view/space-chat-attachments.d.ts.map +0 -1
  405. package/dist/components/native-space-view/space-panel-layout.d.ts +0 -10
  406. package/dist/components/native-space-view/space-panel-layout.d.ts.map +0 -1
  407. package/dist/components/native-space-view/space-progressive-surface-helpers.d.ts +0 -16
  408. package/dist/components/native-space-view/space-progressive-surface-helpers.d.ts.map +0 -1
  409. package/dist/components/native-space-view/space-progressive-surface-types.d.ts +0 -3
  410. package/dist/components/native-space-view/space-progressive-surface-types.d.ts.map +0 -1
  411. package/dist/components/native-space-view/types.d.ts +0 -24
  412. package/dist/components/native-space-view/types.d.ts.map +0 -1
  413. package/dist/components/native-space-view/useSpaceViewController.contract.d.ts +0 -41
  414. package/dist/components/native-space-view/useSpaceViewController.contract.d.ts.map +0 -1
  415. package/dist/components/native-space-view/useSpaceViewController.d.ts +0 -156
  416. package/dist/components/native-space-view/useSpaceViewController.d.ts.map +0 -1
  417. package/dist/components/native-space-view/useSpaceViewDerived.d.ts +0 -12
  418. package/dist/components/native-space-view/useSpaceViewDerived.d.ts.map +0 -1
  419. package/dist/components/native-space-view/useSpaceViewPanels.d.ts +0 -70
  420. package/dist/components/native-space-view/useSpaceViewPanels.d.ts.map +0 -1
  421. package/dist/feedback/native-capture.d.ts +0 -9
  422. package/dist/feedback/native-capture.d.ts.map +0 -1
  423. package/dist/feedback/native-evidence.d.ts +0 -3
  424. package/dist/feedback/native-evidence.d.ts.map +0 -1
  425. package/dist/hooks/entrance-preview-store.d.ts +0 -16
  426. package/dist/hooks/entrance-preview-store.d.ts.map +0 -1
  427. package/dist/hooks/useEntrancePreview.d.ts +0 -7
  428. package/dist/hooks/useEntrancePreview.d.ts.map +0 -1
  429. package/dist/hooks/useLayout.d.ts +0 -16
  430. package/dist/hooks/useLayout.d.ts.map +0 -1
  431. package/dist/hooks/usePanels.d.ts +0 -12
  432. package/dist/hooks/usePanels.d.ts.map +0 -1
  433. package/dist/ios-pad.d.ts +0 -2
  434. package/dist/ios-pad.d.ts.map +0 -1
  435. package/dist/ios-pad.js +0 -62
  436. package/dist/ios-phone.d.ts +0 -2
  437. package/dist/ios-phone.d.ts.map +0 -1
  438. package/dist/ios-phone.js +0 -62
  439. package/dist/ios.d.ts +0 -2
  440. package/dist/ios.d.ts.map +0 -1
  441. package/dist/ios.js +0 -62
  442. package/dist/macos.d.ts +0 -2
  443. package/dist/macos.d.ts.map +0 -1
  444. package/dist/macos.js +0 -62
  445. package/dist/space-client/cloudflare-rtk-native.d.ts +0 -3
  446. package/dist/space-client/cloudflare-rtk-native.d.ts.map +0 -1
  447. package/dist/telemetry.d.ts +0 -63
  448. package/dist/telemetry.d.ts.map +0 -1
  449. package/dist/ui/appearance.d.ts +0 -246
  450. package/dist/ui/appearance.d.ts.map +0 -1
  451. package/dist/ui/appearance.js +0 -14
  452. package/dist/ui/native-appearance-context.d.ts +0 -15
  453. package/dist/ui/native-appearance-context.d.ts.map +0 -1
  454. package/dist/ui/native-theme.d.ts +0 -17
  455. package/dist/ui/native-theme.d.ts.map +0 -1
  456. package/dist/ui/native-types.d.ts +0 -38
  457. package/dist/ui/native-types.d.ts.map +0 -1
  458. package/dist/ui/participant-avatar.d.ts +0 -21
  459. package/dist/ui/participant-avatar.d.ts.map +0 -1
  460. package/dist/ui/theme-tokens.d.ts +0 -25
  461. package/dist/ui/theme-tokens.d.ts.map +0 -1
  462. package/dist/ui/theme.d.ts +0 -404
  463. package/dist/ui/theme.d.ts.map +0 -1
  464. package/dist/ui/theme.js +0 -8
  465. package/dist/utils/native-space-layout.d.ts +0 -42
  466. package/dist/utils/native-space-layout.d.ts.map +0 -1
  467. package/src/android.ts +0 -1
  468. package/src/components/Chalk.tsx +0 -363
  469. package/src/components/ChatMessageList.tsx +0 -209
  470. package/src/components/Entrance.tsx +0 -42
  471. package/src/components/EntranceView.android.tsx +0 -274
  472. package/src/components/EntranceView.ios-pad.tsx +0 -326
  473. package/src/components/EntranceView.ios-phone.tsx +0 -271
  474. package/src/components/EntranceView.macos.tsx +0 -278
  475. package/src/components/EntranceView.tsx +0 -38
  476. package/src/components/FaceAvatar.tsx +0 -120
  477. package/src/components/GradientSurface.tsx +0 -23
  478. package/src/components/MediaView.tsx +0 -76
  479. package/src/components/ReactionPicker.tsx +0 -98
  480. package/src/components/SpaceView.android.tsx +0 -1
  481. package/src/components/SpaceView.ios-pad.tsx +0 -1
  482. package/src/components/SpaceView.ios-phone.tsx +0 -1
  483. package/src/components/SpaceView.macos.tsx +0 -1
  484. package/src/components/SpaceView.shared.tsx +0 -98
  485. package/src/components/SpaceView.tsx +0 -54
  486. package/src/components/episode-diagnostic-render-observer.ts +0 -12
  487. package/src/components/logo/Logo.tsx +0 -309
  488. package/src/components/native-animation-controller.ts +0 -36
  489. package/src/components/native-chat.ts +0 -23
  490. package/src/components/native-entrance/entrance-controller-store.ts +0 -112
  491. package/src/components/native-entrance/useEntranceController.ts +0 -60
  492. package/src/components/native-joining-loading-animation.ts +0 -26
  493. package/src/components/native-space-view/AppearanceSettings.tsx +0 -114
  494. package/src/components/native-space-view/FeedbackSheet.tsx +0 -296
  495. package/src/components/native-space-view/ParticipantActionSheet.tsx +0 -99
  496. package/src/components/native-space-view/SettingsSheet.tsx +0 -164
  497. package/src/components/native-space-view/SpaceActionMenu.tsx +0 -109
  498. package/src/components/native-space-view/SpaceBottomDock.android.tsx +0 -115
  499. package/src/components/native-space-view/SpaceChatAttachment.tsx +0 -105
  500. package/src/components/native-space-view/SpaceChatSheet.tsx +0 -184
  501. package/src/components/native-space-view/SpaceGrid.android.tsx +0 -323
  502. package/src/components/native-space-view/SpaceMoreSheet.tsx +0 -190
  503. package/src/components/native-space-view/SpacePanelSheet.tsx +0 -45
  504. package/src/components/native-space-view/SpacePeopleSheet.tsx +0 -116
  505. package/src/components/native-space-view/SpaceStage.android.tsx +0 -372
  506. package/src/components/native-space-view/SpaceSurfacePrimitives.tsx +0 -75
  507. package/src/components/native-space-view/SpaceTopBar.android.tsx +0 -113
  508. package/src/components/native-space-view/SpaceWhiteboardSurface.tsx +0 -69
  509. package/src/components/native-space-view/diagnostics.ts +0 -84
  510. package/src/components/native-space-view/format-space-duration.ts +0 -3
  511. package/src/components/native-space-view/native-space-grid-keys.ts +0 -6
  512. package/src/components/native-space-view/native-space-page-store.ts +0 -41
  513. package/src/components/native-space-view/space-chat-attachments.test.ts +0 -26
  514. package/src/components/native-space-view/space-chat-attachments.ts +0 -37
  515. package/src/components/native-space-view/space-panel-layout.ts +0 -10
  516. package/src/components/native-space-view/space-progressive-surface-helpers.ts +0 -33
  517. package/src/components/native-space-view/space-progressive-surface-types.ts +0 -3
  518. package/src/components/native-space-view/types.ts +0 -25
  519. package/src/components/native-space-view/useSpaceViewController.contract.ts +0 -34
  520. package/src/components/native-space-view/useSpaceViewController.ts +0 -416
  521. package/src/components/native-space-view/useSpaceViewDerived.ts +0 -29
  522. package/src/components/native-space-view/useSpaceViewPanels.ts +0 -170
  523. package/src/feedback/native-capture.ts +0 -62
  524. package/src/feedback/native-evidence.ts +0 -37
  525. package/src/hooks/entrance-preview-store.ts +0 -99
  526. package/src/hooks/useEntrancePreview.ts +0 -26
  527. package/src/hooks/useLayout.ts +0 -37
  528. package/src/hooks/usePanels.ts +0 -30
  529. package/src/ios-pad.ts +0 -1
  530. package/src/ios-phone.ts +0 -1
  531. package/src/ios.ts +0 -1
  532. package/src/macos.ts +0 -1
  533. package/src/space-client/cloudflare-rtk-native.ts +0 -104
  534. package/src/telemetry.ts +0 -234
  535. package/src/types/hugeicons-direct.d.ts +0 -4
  536. package/src/types/react-native-safe-area-context.d.ts +0 -8
  537. package/src/ui/appearance.ts +0 -808
  538. package/src/ui/native-appearance-context.tsx +0 -74
  539. package/src/ui/native-theme.tsx +0 -54
  540. package/src/ui/native-types.ts +0 -40
  541. package/src/ui/participant-avatar.ts +0 -47
  542. package/src/ui/theme-tokens.ts +0 -41
  543. package/src/ui/theme.ts +0 -214
  544. package/src/utils/native-space-layout.ts +0 -135
@@ -1,164 +0,0 @@
1
- import CheckmarkCircle01Icon from "@hugeicons/core-free-icons/dist/esm/CheckmarkCircle01Icon";
2
- import Mic01Icon from "@hugeicons/core-free-icons/dist/esm/Mic01Icon";
3
- import MicOff01Icon from "@hugeicons/core-free-icons/dist/esm/MicOff01Icon";
4
- import Speaker01Icon from "@hugeicons/core-free-icons/dist/esm/Speaker01Icon";
5
- import Video01Icon from "@hugeicons/core-free-icons/dist/esm/Video01Icon";
6
- import VideoOffIcon from "@hugeicons/core-free-icons/dist/esm/VideoOffIcon";
7
- import { HugeiconsIcon } from "@hugeicons/react-native";
8
- import { useEffect, useState } from "react";
9
- import { Modal, Platform, Pressable, ScrollView, StyleSheet, Text, View } from "react-native";
10
-
11
- import { Theme } from "../../ui/theme";
12
- import { CloseButton, IconTile, SheetGrip } from "./SpaceSurfacePrimitives";
13
- import type { SpaceController } from "./space-progressive-surface-types";
14
- import { AppearanceSettings } from "./AppearanceSettings";
15
-
16
- type SettingsTab = "devices" | "appearance" | "space";
17
-
18
- export function SettingsSheet({ controller, isOpen, onClose }: { readonly controller: SpaceController; readonly isOpen: boolean; readonly onClose: () => void }): React.JSX.Element {
19
- const [tab, setTab] = useState<SettingsTab>("devices");
20
-
21
- useEffect(() => {
22
- if (!isOpen) setTab("devices");
23
- }, [isOpen]);
24
-
25
- return (
26
- <Modal animationType="slide" onRequestClose={onClose} transparent visible={isOpen}>
27
- <View style={styles.modalRoot}>
28
- <Pressable accessibilityLabel="Close Settings" onPress={onClose} style={styles.backdrop} />
29
- <View style={styles.sheet}>
30
- <SheetGrip />
31
- <View style={styles.header}>
32
- <Text style={styles.title}>Settings</Text>
33
- <CloseButton label="Close Settings" onPress={onClose} />
34
- </View>
35
- <View accessibilityRole="tablist" style={styles.tabs}>
36
- {(["devices", "appearance", "space"] as const).map((nextTab) => (
37
- <Pressable accessibilityRole="tab" accessibilityState={{ selected: tab === nextTab }} key={nextTab} onPress={() => setTab(nextTab)} style={({ pressed }) => [styles.tab, tab === nextTab && styles.tabSelected, pressed && styles.pressed]}>
38
- <Text style={[styles.tabText, tab === nextTab && styles.tabTextSelected]}>{nextTab[0]!.toUpperCase() + nextTab.slice(1)}</Text>
39
- </Pressable>
40
- ))}
41
- </View>
42
- <ScrollView contentContainerStyle={styles.content} showsVerticalScrollIndicator={false}>
43
- {tab === "devices" ? <DevicesSettings controller={controller} /> : null}
44
- {tab === "appearance" ? <AppearanceSettings /> : null}
45
- {tab === "space" ? <SpaceSettings controller={controller} /> : null}
46
- </ScrollView>
47
- <Pressable accessibilityRole="button" onPress={onClose} style={({ pressed }) => [styles.doneButton, pressed && styles.pressed]}>
48
- <Text style={styles.doneText}>Done</Text>
49
- </Pressable>
50
- </View>
51
- </View>
52
- </Modal>
53
- );
54
- }
55
-
56
- function DevicesSettings({ controller }: { readonly controller: SpaceController }): React.JSX.Element {
57
- const microphoneEnabled = !controller.isMuted;
58
- const cameraEnabled = !controller.isCameraOff;
59
- return (
60
- <View style={styles.section}>
61
- <Text style={styles.sectionIntro}>Use the controls below to set what you share in this Episode.</Text>
62
- <DeviceControl disabled={controller.simulatorMediaDisabled} enabled={microphoneEnabled} icon={microphoneEnabled ? Mic01Icon : MicOff01Icon} label="Microphone" onPress={controller.toggleAudio} value={microphoneEnabled ? "On" : "Off"} />
63
- <DeviceControl disabled={controller.simulatorMediaDisabled} enabled={cameraEnabled} icon={cameraEnabled ? Video01Icon : VideoOffIcon} label="Camera" onPress={controller.toggleVideo} value={cameraEnabled ? "On" : "Off"} />
64
- <View style={styles.deviceRow}>
65
- <IconTile icon={Speaker01Icon} />
66
- <View style={styles.rowCopy}>
67
- <Text style={styles.rowLabel}>Speaker</Text>
68
- <Text style={styles.rowMeta}>System audio output</Text>
69
- </View>
70
- <Text style={styles.rowValue}>Automatic</Text>
71
- </View>
72
- <View style={styles.readyCard}>
73
- <HugeiconsIcon color={Theme.colors.success} icon={CheckmarkCircle01Icon} size={22} />
74
- <Text style={styles.readyText}>{controller.simulatorMediaDisabled ? "Device controls are unavailable here" : "Devices are ready"}</Text>
75
- </View>
76
- </View>
77
- );
78
- }
79
-
80
- function DeviceControl({ disabled, enabled, icon, label, onPress, value }: { readonly disabled: boolean; readonly enabled: boolean; readonly icon: React.ComponentProps<typeof HugeiconsIcon>["icon"]; readonly label: string; readonly onPress: () => void; readonly value: string }): React.JSX.Element {
81
- return (
82
- <Pressable accessibilityLabel={`${label} ${value}`} accessibilityRole="button" disabled={disabled} onPress={onPress} style={({ pressed }) => [styles.deviceRow, disabled && styles.disabled, pressed && styles.pressed]}>
83
- <IconTile icon={icon} color={enabled ? Theme.colors.ink : Theme.colors.error} wash={enabled ? Theme.colors.surface : Theme.colors.washPink} />
84
- <View style={styles.rowCopy}>
85
- <Text style={styles.rowLabel}>{label}</Text>
86
- <Text style={styles.rowMeta}>{disabled ? "Unavailable on this device" : "Tap to change state"}</Text>
87
- </View>
88
- <Text style={[styles.rowValue, !enabled && styles.valueOff]}>{value}</Text>
89
- </Pressable>
90
- );
91
- }
92
-
93
- function SpaceSettings({ controller }: { readonly controller: SpaceController }): React.JSX.Element {
94
- return (
95
- <View style={styles.section}>
96
- <Text style={styles.sectionIntro}>Canonical information about this Space and its current Episode.</Text>
97
- <InfoRow label="Space" value="Current Space" />
98
- <InfoRow label="Episode" value={controller.formattedDuration} />
99
- <InfoRow label="People" value={String(controller.participantCount)} />
100
- <View style={styles.infoCard}>
101
- <Text style={styles.infoTitle}>Space content stays here</Text>
102
- <Text style={styles.infoText}>Chat and Board content belong to this Space and remain available across Episodes.</Text>
103
- </View>
104
- </View>
105
- );
106
- }
107
-
108
- function InfoRow({ label, value }: { readonly label: string; readonly value: string }): React.JSX.Element {
109
- return (
110
- <View style={styles.infoRow}>
111
- <Text style={styles.rowLabel}>{label}</Text>
112
- <Text numberOfLines={1} style={styles.infoValue}>
113
- {value || "—"}
114
- </Text>
115
- </View>
116
- );
117
- }
118
-
119
- const styles = StyleSheet.create({
120
- modalRoot: { flex: 1, justifyContent: "flex-end" },
121
- backdrop: { ...StyleSheet.absoluteFillObject, backgroundColor: Theme.colors.darkOverlay22 },
122
- sheet: {
123
- backgroundColor: Theme.colors.surface,
124
- borderColor: Theme.colors.line,
125
- borderTopLeftRadius: Theme.radius.xl,
126
- borderTopRightRadius: Theme.radius.xl,
127
- elevation: 8,
128
- flex: 1,
129
- marginTop: 72,
130
- overflow: "hidden",
131
- paddingBottom: Platform.OS === "ios" ? Theme.spacing.md : Theme.spacing.xs,
132
- shadowColor: Theme.colors.ink,
133
- shadowOffset: { height: -8, width: 0 },
134
- shadowOpacity: 0.12,
135
- shadowRadius: 22,
136
- },
137
- header: { alignItems: "center", borderBottomColor: Theme.colors.line, borderBottomWidth: 1, flexDirection: "row", justifyContent: "space-between", minHeight: 78, paddingHorizontal: Theme.spacing.lg },
138
- title: { ...Theme.typography.heading, color: Theme.colors.ink },
139
- tabs: { backgroundColor: Theme.colors.paper2, borderColor: Theme.colors.line, borderRadius: Theme.radius.md, borderWidth: 1, flexDirection: "row", margin: Theme.spacing.lg, padding: 3 },
140
- tab: { alignItems: "center", borderRadius: Theme.radius.sm, flex: 1, justifyContent: "center", minHeight: 46, paddingHorizontal: Theme.spacing.sm },
141
- tabSelected: { backgroundColor: Theme.colors.surface, ...Theme.shadows.sm },
142
- tabText: { color: Theme.colors.ink2, fontSize: 14, fontWeight: "500" },
143
- tabTextSelected: { color: Theme.colors.ink, fontWeight: "700" },
144
- content: { paddingBottom: Theme.spacing.lg, paddingHorizontal: Theme.spacing.lg },
145
- section: { gap: Theme.spacing.md },
146
- sectionIntro: { ...Theme.typography.body, color: Theme.colors.ink2, marginBottom: Theme.spacing.sm },
147
- deviceRow: { alignItems: "center", borderColor: Theme.colors.line, borderRadius: Theme.radius.md, borderWidth: 1, flexDirection: "row", gap: Theme.spacing.md, minHeight: 70, padding: Theme.spacing.md },
148
- rowCopy: { flex: 1, minWidth: 0 },
149
- rowLabel: { color: Theme.colors.ink, fontSize: 16, fontWeight: "600" },
150
- rowMeta: { color: Theme.colors.ink2, fontSize: 13, lineHeight: 18, marginTop: 3 },
151
- rowValue: { color: Theme.colors.success, fontSize: 14, fontWeight: "700" },
152
- valueOff: { color: Theme.colors.error },
153
- readyCard: { alignItems: "center", backgroundColor: Theme.colors.successBackground, borderColor: Theme.colors.line, borderRadius: Theme.radius.md, borderWidth: 1, flexDirection: "row", gap: Theme.spacing.sm, minHeight: 58, paddingHorizontal: Theme.spacing.md },
154
- readyText: { color: Theme.colors.ink2, fontSize: 15, fontWeight: "600" },
155
- disabled: { opacity: 0.52 },
156
- infoRow: { alignItems: "center", borderBottomColor: Theme.colors.line, borderBottomWidth: 1, flexDirection: "row", justifyContent: "space-between", minHeight: 54, paddingHorizontal: Theme.spacing.sm },
157
- infoValue: { color: Theme.colors.ink2, flexShrink: 1, fontSize: 15, marginLeft: Theme.spacing.md, maxWidth: "62%", textAlign: "right" },
158
- infoCard: { backgroundColor: Theme.colors.washBlue, borderColor: Theme.colors.line, borderRadius: Theme.radius.md, borderWidth: 1, gap: Theme.spacing.sm, marginTop: Theme.spacing.sm, padding: Theme.spacing.md },
159
- infoTitle: { color: Theme.colors.ink, fontSize: 15, fontWeight: "700" },
160
- infoText: { color: Theme.colors.ink2, fontSize: 14, lineHeight: 20 },
161
- doneButton: { alignItems: "center", borderColor: Theme.colors.lineStrong, borderRadius: Theme.radius.md, borderWidth: 1, justifyContent: "center", margin: Theme.spacing.lg, minHeight: 52 },
162
- doneText: { color: Theme.colors.ink, fontSize: 16, fontWeight: "700" },
163
- pressed: { opacity: 0.72, transform: [{ scale: 0.985 }] },
164
- });
@@ -1,109 +0,0 @@
1
- import type { Reaction } from "@q9labsai/chalk-client";
2
- import { Modal, Pressable, StyleSheet, Text, View } from "react-native";
3
-
4
- import { Theme } from "../../ui/theme";
5
- import { useNativeTheme } from "../../ui/native-theme";
6
- import type { useSpaceViewController } from "./useSpaceViewController";
7
-
8
- type Controller = ReturnType<typeof useSpaceViewController>;
9
-
10
- export function SpaceActionMenu({ controller, onOpenDiagnostics, onOpenFeedback }: { readonly controller: Controller; readonly onOpenDiagnostics?: () => void; readonly onOpenFeedback?: () => void }): React.JSX.Element {
11
- const theme = useNativeTheme();
12
- const actions: { label: string; onPress: () => void; disabled?: boolean }[] = [
13
- ...(controller.canInvite ? [{ label: "Invite participants", onPress: controller.handleInviteParticipants }] : []),
14
- ...(controller.canParticipants ? [{ label: "Participants", onPress: () => controller.openPanel("participants") }] : []),
15
- ...(controller.canChat ? [{ label: "Chat", onPress: () => controller.openPanel("chat") }] : []),
16
- ...(controller.canScreenShare ? [{ label: controller.screenShare.isLocalSharing ? "Stop presenting" : "Present screen", onPress: controller.toggleScreenShare }] : []),
17
- ...(controller.canHandRaise ? [{ label: controller.handRaised ? "Lower hand" : "Raise hand", onPress: controller.toggleHand }] : []),
18
- ...(controller.canWhiteboard ? [{ label: controller.whiteboard.isOpen ? "Close whiteboard" : "Open whiteboard", onPress: controller.whiteboard.toggle }] : []),
19
- ...(controller.canReactions
20
- ? [
21
- {
22
- label: "Reactions",
23
- onPress: () => {
24
- controller.setActionsOpen(false);
25
- controller.setReactionPickerOpen(true);
26
- },
27
- },
28
- ]
29
- : []),
30
- ...(controller.canManageRecording
31
- ? [
32
- {
33
- label: controller.recording?.status === "recording" ? "Stop recording" : "Start recording",
34
- disabled: !controller.canToggleRecording,
35
- onPress: controller.toggleRecording,
36
- },
37
- ]
38
- : []),
39
- ...(controller.canSettings ? [{ label: "Settings", onPress: () => controller.openPanel("settings") }] : []),
40
- ...(onOpenDiagnostics
41
- ? [
42
- {
43
- label: "Diagnostics",
44
- onPress: () => {
45
- controller.setActionsOpen(false);
46
- onOpenDiagnostics();
47
- },
48
- },
49
- ]
50
- : []),
51
- ...(onOpenFeedback
52
- ? [
53
- {
54
- label: "Feedback",
55
- onPress: () => {
56
- controller.setActionsOpen(false);
57
- onOpenFeedback();
58
- },
59
- },
60
- ]
61
- : []),
62
- ...(["grid", "focus", "presentation"] as const).map((layout) => ({
63
- label: `${layout === "grid" ? "Grid" : layout === "focus" ? "Focus" : "Presentation"} layout${controller.layout.layout === layout ? " (selected)" : ""}`,
64
- onPress: () => {
65
- controller.layout.setLayout(layout);
66
- controller.setActionsOpen(false);
67
- },
68
- })),
69
- ];
70
- return (
71
- <Modal animationType="slide" onRequestClose={() => controller.setActionsOpen(false)} transparent visible={controller.actionsOpen}>
72
- <Pressable onPress={() => controller.setActionsOpen(false)} style={styles.backdrop}>
73
- <View style={[styles.sheet, { backgroundColor: theme.colors.background }]}>
74
- <Text style={[styles.title, { color: theme.colors.foreground }]}>Space actions</Text>
75
- {actions.map((action) => (
76
- <Pressable accessibilityRole="button" accessibilityState={{ disabled: action.disabled ?? false }} disabled={action.disabled} key={action.label} onPress={action.onPress} style={({ pressed }) => [styles.action, { backgroundColor: theme.colors.card }, pressed && styles.pressed]}>
77
- <Text style={[styles.actionText, { color: theme.colors.foreground }]}>{action.label}</Text>
78
- </Pressable>
79
- ))}
80
- <Pressable onPress={controller.handleLeave} style={[styles.action, styles.dangerAction, { backgroundColor: theme.colors.card, borderColor: theme.colors.error }]}>
81
- <Text style={[styles.actionText, styles.dangerText, { color: theme.colors.error }]}>Leave space</Text>
82
- </Pressable>
83
- </View>
84
- </Pressable>
85
- </Modal>
86
- );
87
- }
88
-
89
- export function selectSpaceReaction(controller: Controller, reaction: string): void {
90
- controller.sendReaction(reaction as Reaction);
91
- }
92
-
93
- const styles = StyleSheet.create({
94
- backdrop: { flex: 1, justifyContent: "flex-end", backgroundColor: Theme.colors.darkOverlay55 },
95
- sheet: {
96
- gap: 8,
97
- borderTopLeftRadius: 24,
98
- borderTopRightRadius: 24,
99
- backgroundColor: Theme.colors.background,
100
- padding: 24,
101
- paddingBottom: 40,
102
- },
103
- title: { ...Theme.typography.title, color: Theme.colors.foreground },
104
- action: { borderRadius: 14, backgroundColor: Theme.colors.card, padding: 16 },
105
- actionText: { color: Theme.colors.foreground, fontSize: 16, fontWeight: "600" },
106
- dangerAction: { marginTop: 8, borderWidth: 1, borderColor: Theme.colors.error },
107
- dangerText: { color: Theme.colors.error, fontWeight: "700" },
108
- pressed: { opacity: 0.65 },
109
- });
@@ -1,115 +0,0 @@
1
- import CallEnd01Icon from "@hugeicons/core-free-icons/dist/esm/CallEnd01Icon";
2
- import Chat01Icon from "@hugeicons/core-free-icons/dist/esm/Chat01Icon";
3
- import Mic01Icon from "@hugeicons/core-free-icons/dist/esm/Mic01Icon";
4
- import MicOff01Icon from "@hugeicons/core-free-icons/dist/esm/MicOff01Icon";
5
- import MoreHorizontalIcon from "@hugeicons/core-free-icons/dist/esm/MoreHorizontalIcon";
6
- import Video01Icon from "@hugeicons/core-free-icons/dist/esm/Video01Icon";
7
- import VideoOffIcon from "@hugeicons/core-free-icons/dist/esm/VideoOffIcon";
8
- import { HugeiconsIcon } from "@hugeicons/react-native";
9
- import { Platform, Pressable, StyleSheet, Text, View } from "react-native";
10
- import { Theme } from "../../ui/theme";
11
- import { useNativeTheme } from "../../ui/native-theme";
12
-
13
- import type { SpaceBottomDockProps } from "./types";
14
-
15
- export function SpaceBottomDockAndroid({ simulatorMediaDisabled, isMuted, isCameraOff, unreadChatCount, onToggleAudio, onToggleVideo, onOpenChat, onOpenMore, onLeave }: SpaceBottomDockProps): React.JSX.Element {
16
- const theme = useNativeTheme();
17
- return (
18
- <View style={[styles.bottomDock, { backgroundColor: theme.colors.darkCanvas, borderColor: theme.colors.border }]}>
19
- <View style={styles.controlPill}>
20
- <Pressable
21
- disabled={simulatorMediaDisabled}
22
- onPress={onToggleAudio}
23
- style={({ pressed }) => [styles.controlButton, { backgroundColor: isMuted ? theme.colors.error : theme.colors.controlsBackground }, simulatorMediaDisabled && styles.controlButtonDisabled, pressed && styles.controlButtonPressed]}
24
- >
25
- <HugeiconsIcon color={isMuted ? theme.colors.onDark : theme.colors.primary} icon={isMuted ? MicOff01Icon : Mic01Icon} size={22} />
26
- </Pressable>
27
- <Pressable
28
- disabled={simulatorMediaDisabled}
29
- onPress={onToggleVideo}
30
- style={({ pressed }) => [styles.controlButton, { backgroundColor: isCameraOff ? theme.colors.error : theme.colors.controlsBackground }, simulatorMediaDisabled && styles.controlButtonDisabled, pressed && styles.controlButtonPressed]}
31
- >
32
- <HugeiconsIcon color={isCameraOff ? theme.colors.onDark : theme.colors.primary} icon={isCameraOff ? VideoOffIcon : Video01Icon} size={22} />
33
- </Pressable>
34
- {onOpenChat ? (
35
- <Pressable onPress={onOpenChat} style={({ pressed }) => [styles.controlButton, { backgroundColor: theme.colors.controlsBackground }, pressed && styles.controlButtonPressed]}>
36
- <HugeiconsIcon color={theme.colors.onDark} icon={Chat01Icon} size={22} />
37
- {unreadChatCount > 0 ? (
38
- <View style={[styles.controlBadge, { backgroundColor: theme.colors.primary, borderColor: theme.colors.darkCanvas }]}>
39
- <Text style={[styles.controlBadgeText, { color: theme.colors.primaryForeground }]}>{unreadChatCount > 9 ? "9+" : String(unreadChatCount)}</Text>
40
- </View>
41
- ) : null}
42
- </Pressable>
43
- ) : null}
44
- <Pressable onPress={onOpenMore} style={({ pressed }) => [styles.controlButton, { backgroundColor: theme.colors.controlsBackground }, pressed && styles.controlButtonPressed]}>
45
- <HugeiconsIcon color={theme.colors.onDark} icon={MoreHorizontalIcon} size={22} />
46
- </Pressable>
47
- <Pressable onPress={onLeave} style={({ pressed }) => [styles.controlButton, styles.controlButtonEndCall, { backgroundColor: theme.colors.error }, pressed && styles.controlButtonPressed]}>
48
- <HugeiconsIcon color={theme.colors.onDark} icon={CallEnd01Icon} size={22} />
49
- </Pressable>
50
- </View>
51
- </View>
52
- );
53
- }
54
-
55
- export { SpaceBottomDockAndroid as SpaceBottomDock };
56
-
57
- const styles = StyleSheet.create({
58
- bottomDock: {
59
- paddingTop: 20,
60
- paddingBottom: Platform.OS === "ios" ? 38 : 24,
61
- paddingHorizontal: 24,
62
- backgroundColor: Theme.colors.darkCanvas,
63
- borderTopWidth: 1,
64
- borderColor: Theme.colors.whiteOverlay06,
65
- width: "100%",
66
- },
67
- controlPill: {
68
- flexDirection: "row",
69
- alignItems: "center",
70
- justifyContent: "space-between",
71
- width: "100%",
72
- },
73
- controlButton: {
74
- width: 48,
75
- height: 48,
76
- borderRadius: 24,
77
- alignItems: "center",
78
- justifyContent: "center",
79
- backgroundColor: Theme.colors.whiteOverlay08,
80
- },
81
- controlButtonDisabled: {
82
- opacity: 0.45,
83
- },
84
- controlButtonPressed: {
85
- opacity: 0.7,
86
- transform: [{ scale: 0.92 }],
87
- },
88
- controlButtonDanger: {
89
- backgroundColor: Theme.colors.dangerStrong,
90
- },
91
- controlButtonEndCall: {
92
- backgroundColor: Theme.colors.error,
93
- width: 68,
94
- borderRadius: 18,
95
- },
96
- controlBadge: {
97
- position: "absolute",
98
- top: -2,
99
- right: -2,
100
- minWidth: 18,
101
- height: 18,
102
- borderRadius: 9,
103
- backgroundColor: Theme.colors.primary,
104
- alignItems: "center",
105
- justifyContent: "center",
106
- paddingHorizontal: 4,
107
- borderWidth: 2,
108
- borderColor: Theme.colors.darkCanvas,
109
- },
110
- controlBadgeText: {
111
- color: Theme.colors.onDark,
112
- fontSize: 10,
113
- fontWeight: "800",
114
- },
115
- });
@@ -1,105 +0,0 @@
1
- import type { ChatAttachment } from "@q9labsai/chalk-client";
2
- import { useEffect, useState } from "react";
3
- import { Image, Pressable, StyleSheet, Text, View } from "react-native";
4
-
5
- import { Theme } from "../../ui/theme";
6
-
7
- export function SpaceChatAttachment({ attachment, isLocal, onOpen, resolveUrl }: { readonly attachment: ChatAttachment; readonly isLocal: boolean; readonly onOpen: (attachmentId: string) => void; readonly resolveUrl: (attachmentId: string) => Promise<string | null> }): React.JSX.Element {
8
- const isImage = attachment.mimeType.startsWith("image/");
9
- const [previewUrl, setPreviewUrl] = useState<string | null>(null);
10
- const [previewFailed, setPreviewFailed] = useState(false);
11
- const [retryGeneration, setRetryGeneration] = useState(0);
12
-
13
- useEffect(() => {
14
- if (!isImage || previewUrl || previewFailed) return;
15
- let cancelled = false;
16
- void resolveUrl(attachment.attachmentId).then(
17
- (url) => {
18
- if (cancelled) return;
19
- if (!url) {
20
- reportAttachmentPreviewFailure(attachment.attachmentId, "resolve");
21
- setPreviewFailed(true);
22
- return;
23
- }
24
- setPreviewUrl(url);
25
- setPreviewFailed(false);
26
- },
27
- () => {
28
- if (cancelled) return;
29
- reportAttachmentPreviewFailure(attachment.attachmentId, "resolve");
30
- setPreviewFailed(true);
31
- },
32
- );
33
- return () => {
34
- cancelled = true;
35
- };
36
- }, [attachment.attachmentId, isImage, previewFailed, previewUrl, resolveUrl, retryGeneration]);
37
-
38
- if (!isImage) {
39
- return (
40
- <Pressable accessibilityRole="link" onPress={() => onOpen(attachment.attachmentId)} style={({ pressed }) => [styles.attachmentLink, pressed && styles.pressed]}>
41
- <Text numberOfLines={1} style={[styles.attachment, isLocal && styles.localText]}>
42
- {attachment.fileName}
43
- </Text>
44
- </Pressable>
45
- );
46
- }
47
-
48
- if (previewFailed) {
49
- return (
50
- <View style={styles.previewError}>
51
- <Text accessibilityLiveRegion="polite" style={[styles.previewErrorText, isLocal && styles.localText]}>
52
- Image preview unavailable
53
- </Text>
54
- <Pressable
55
- accessibilityLabel={`Retry preview for ${attachment.fileName}`}
56
- accessibilityRole="button"
57
- style={styles.retryButton}
58
- onPress={() => {
59
- setPreviewFailed(false);
60
- setPreviewUrl(null);
61
- setRetryGeneration((current) => current + 1);
62
- }}
63
- >
64
- <Text style={[styles.retry, isLocal && styles.localText]}>Retry preview</Text>
65
- </Pressable>
66
- </View>
67
- );
68
- }
69
-
70
- if (!previewUrl) return <Text style={[styles.previewLoading, isLocal && styles.localText]}>Loading {attachment.fileName}…</Text>;
71
-
72
- return (
73
- <Pressable accessibilityLabel={`Open ${attachment.fileName}`} accessibilityRole="imagebutton" onPress={() => onOpen(attachment.attachmentId)} style={({ pressed }) => [styles.imagePreviewButton, pressed && styles.pressed]}>
74
- <Image
75
- accessibilityLabel={attachment.fileName}
76
- onError={() => {
77
- reportAttachmentPreviewFailure(attachment.attachmentId, "render");
78
- setPreviewFailed(true);
79
- setPreviewUrl(null);
80
- }}
81
- resizeMode="cover"
82
- source={{ uri: previewUrl }}
83
- style={styles.imagePreview}
84
- />
85
- </Pressable>
86
- );
87
- }
88
-
89
- function reportAttachmentPreviewFailure(attachmentId: string, operation: "render" | "resolve"): void {
90
- console.warn("Chat attachment preview unavailable.", { attachmentId, operation });
91
- }
92
-
93
- const styles = StyleSheet.create({
94
- attachmentLink: { justifyContent: "center", marginTop: 4, maxWidth: "100%", minHeight: 32 },
95
- attachment: { color: Theme.colors.information, fontSize: 14 },
96
- imagePreviewButton: { borderRadius: Theme.radius.sm, marginTop: Theme.spacing.sm, maxWidth: "100%", overflow: "hidden" },
97
- imagePreview: { height: 160, width: 240 },
98
- previewLoading: { color: Theme.colors.ink2, fontSize: 13, marginTop: Theme.spacing.sm },
99
- previewError: { borderColor: Theme.colors.line, borderRadius: Theme.radius.sm, borderWidth: 1, marginTop: Theme.spacing.sm, width: 240, maxWidth: "100%", minHeight: 160, justifyContent: "center", alignItems: "center", padding: Theme.spacing.md },
100
- previewErrorText: { color: Theme.colors.ink2, fontSize: 13 },
101
- retryButton: { minHeight: 44, justifyContent: "center", paddingHorizontal: Theme.spacing.sm },
102
- retry: { color: Theme.colors.information, fontSize: 13, fontWeight: "700", marginTop: 6 },
103
- localText: { color: Theme.colors.surface },
104
- pressed: { opacity: 0.72, transform: [{ scale: 0.98 }] },
105
- });