@q9labsai/chalk-react-native 5.0.0 → 5.1.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 (252) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/android/build.gradle +38 -0
  3. package/android/compatibility/ModuleApiCompatibility.java +215 -0
  4. package/android/src/main/kotlin/ai/q9labs/chalk/reactnative/ChalkAudioRouteModule.kt +5 -6
  5. package/android/src/main/kotlin/ai/q9labs/chalk/reactnative/CommunicationDeviceListener.kt +23 -0
  6. package/dist/android/call-service.d.ts +0 -1
  7. package/dist/android/connection-service.d.ts +0 -1
  8. package/dist/avatar/FaceAvatar.d.ts +0 -1
  9. package/dist/avatar/tile-avatar-size.d.ts +0 -1
  10. package/dist/callkit/callkit.d.ts +0 -1
  11. package/dist/callkit/resolve-space-callkit-options.d.ts +0 -1
  12. package/dist/{chunk-OIBT2FNM.js → chunk-MBZRE4US.js} +2 -3
  13. package/dist/client.d.ts +0 -1
  14. package/dist/client.js +8 -5
  15. package/dist/clipboard-store.d.ts +0 -1
  16. package/dist/clipboard.d.ts +0 -1
  17. package/dist/components/EmbeddedWhiteboard.d.ts +0 -1
  18. package/dist/components/RtcVideoView.d.ts +0 -1
  19. package/dist/components/android-connection-service-controller.d.ts +0 -1
  20. package/dist/components/native-media-visibility.d.ts +0 -1
  21. package/dist/components/native-space-callkit-controller.d.ts +0 -1
  22. package/dist/components/native-space-view/screen-share-availability.d.ts +0 -1
  23. package/dist/components/rtc-video-view-availability.d.ts +0 -1
  24. package/dist/components/space-lifecycle.d.ts +0 -1
  25. package/dist/components/useAndroidCallService.d.ts +0 -1
  26. package/dist/components/useAndroidConnectionService.d.ts +0 -1
  27. package/dist/context/space-client-context.d.ts +0 -1
  28. package/dist/dev.d.ts +0 -1
  29. package/dist/diagnostics.d.ts +0 -1
  30. package/dist/dock/Dock.d.ts +0 -1
  31. package/dist/dock/LeaveMenu.d.ts +0 -1
  32. package/dist/dock/MoreSheet.d.ts +0 -1
  33. package/dist/dock/ReactionBurst.d.ts +0 -1
  34. package/dist/dock/RoutePicker.d.ts +0 -1
  35. package/dist/dock/audio-route.d.ts +0 -1
  36. package/dist/frame/CallFrame.d.ts +0 -1
  37. package/dist/frame/Chalk.d.ts +0 -1
  38. package/dist/frame/back-handler.d.ts +0 -1
  39. package/dist/frame/dev-scenario.d.ts +0 -1
  40. package/dist/frame/device-layout.d.ts +0 -1
  41. package/dist/frame/measurement.d.ts +0 -1
  42. package/dist/frame/portal.d.ts +0 -1
  43. package/dist/frame/preferences.d.ts +0 -1
  44. package/dist/frame/regions.d.ts +0 -1
  45. package/dist/haptics/haptics.d.ts +0 -1
  46. package/dist/header/CallDetailsSheet.d.ts +0 -1
  47. package/dist/header/Header.d.ts +0 -1
  48. package/dist/header/QrCode.d.ts +0 -1
  49. package/dist/hooks/external-store.d.ts +0 -1
  50. package/dist/hooks/space-hooks.d.ts +0 -1
  51. package/dist/icons/Icon.d.ts +0 -1
  52. package/dist/icons/icon-element.d.ts +0 -1
  53. package/dist/icons/icon-paths.d.ts +0 -1
  54. package/dist/index.d.ts +0 -1
  55. package/dist/index.js +45 -17
  56. package/dist/invites.d.ts +0 -1
  57. package/dist/limbo/Limbo.d.ts +0 -1
  58. package/dist/limbo/Veil.d.ts +0 -1
  59. package/dist/media/native-capture-error.d.ts +0 -1
  60. package/dist/media/native-webrtc.d.ts +0 -1
  61. package/dist/motion/MovingFrame.d.ts +0 -1
  62. package/dist/motion/motion.d.ts +0 -1
  63. package/dist/motion/presence.d.ts +0 -1
  64. package/dist/motion/press.d.ts +0 -1
  65. package/dist/platform/platform.d.ts +0 -1
  66. package/dist/primitives/BottomSheet.d.ts +0 -1
  67. package/dist/primitives/ChalkText.d.ts +0 -1
  68. package/dist/primitives/CopyButton.d.ts +0 -1
  69. package/dist/primitives/IconButton.d.ts +0 -1
  70. package/dist/primitives/Menu.d.ts +0 -1
  71. package/dist/primitives/NameTag.d.ts +0 -1
  72. package/dist/primitives/PillButton.d.ts +0 -1
  73. package/dist/primitives/SegmentedControl.d.ts +0 -1
  74. package/dist/primitives/SheetGroup.d.ts +0 -1
  75. package/dist/primitives/Switch.d.ts +0 -1
  76. package/dist/primitives/TileShell.d.ts +0 -1
  77. package/dist/primitives/announce.d.ts +0 -1
  78. package/dist/primitives/menu-placement.d.ts +0 -1
  79. package/dist/primitives/toast/Toast.d.ts +0 -1
  80. package/dist/primitives/toast/ToastStack.d.ts +0 -1
  81. package/dist/primitives/toast/toast-store.d.ts +0 -1
  82. package/dist/runtime.d.ts +0 -1
  83. package/dist/sheets/people-chat/ChatNotices.d.ts +0 -1
  84. package/dist/sheets/people-chat/ChatTab.d.ts +0 -1
  85. package/dist/sheets/people-chat/Composer.d.ts +0 -1
  86. package/dist/sheets/people-chat/PeopleChatSheet.d.ts +0 -1
  87. package/dist/sheets/people-chat/PeopleTab.d.ts +0 -1
  88. package/dist/sheets/people-chat/PhotoViewer.d.ts +0 -1
  89. package/dist/sheets/people-chat/TextField.d.ts +0 -1
  90. package/dist/sheets/people-chat/attachments.d.ts +0 -1
  91. package/dist/sheets/people-chat/chat-model.d.ts +0 -1
  92. package/dist/sheets/people-chat/people-model.d.ts +0 -1
  93. package/dist/sounds/sounds.d.ts +0 -1
  94. package/dist/space-client/create-native-space-client.d.ts +0 -1
  95. package/dist/space-client/random-uuid.d.ts +0 -1
  96. package/dist/stage/ContentTile.d.ts +0 -1
  97. package/dist/stage/ParticipantTile.d.ts +0 -1
  98. package/dist/stage/Stage.d.ts +0 -1
  99. package/dist/stage/TileSheet.d.ts +0 -1
  100. package/dist/stage/camera.d.ts +0 -1
  101. package/dist/stage/layout.d.ts +0 -1
  102. package/dist/stage/space-selector.d.ts +0 -1
  103. package/dist/stage/stage-view.d.ts +0 -1
  104. package/dist/status/CallOverlays.d.ts +1 -2
  105. package/dist/status/ChalkArrival.d.ts +0 -1
  106. package/dist/status/StatusPage.d.ts +0 -1
  107. package/dist/status/call-screen.d.ts +0 -1
  108. package/dist/theme/theme.d.ts +0 -1
  109. package/dist/theme/tokens.d.ts +0 -1
  110. package/dist/toasts/CallEventToasts.d.ts +1 -2
  111. package/dist/toasts/media-failure-copy.d.ts +2 -0
  112. package/dist/toasts/notices.d.ts +0 -1
  113. package/dist/ui/ChalkUI.d.ts +0 -1
  114. package/dist/ui.d.ts +0 -1
  115. package/dist/ui.js +1 -1
  116. package/dist/utils/build-chalk-invite-link.d.ts +0 -1
  117. package/dist/utils/ios-simulator.d.ts +0 -1
  118. package/dist/whiteboard/embedded-whiteboard-assets.d.ts +0 -1
  119. package/dist/whiteboard/embedded-whiteboard-viewport.d.ts +0 -1
  120. package/embedded/chalk-whiteboard/asset-manifest.json +2 -2
  121. package/embedded/chalk-whiteboard/renderer.js +579 -579
  122. package/package.json +8 -4
  123. package/src/components/rtc-video-view-availability.ts +1 -1
  124. package/src/dock/Dock.tsx +4 -2
  125. package/src/dock/MoreSheet.tsx +3 -2
  126. package/src/frame/CallFrame.tsx +4 -4
  127. package/src/frame/device-layout.tsx +2 -3
  128. package/src/space-client/create-native-space-client.ts +8 -5
  129. package/src/stage/TileSheet.tsx +5 -1
  130. package/src/status/CallOverlays.tsx +18 -3
  131. package/src/toasts/CallEventToasts.tsx +16 -7
  132. package/src/toasts/media-failure-copy.ts +10 -0
  133. package/dist/android/call-service.d.ts.map +0 -1
  134. package/dist/android/connection-service.d.ts.map +0 -1
  135. package/dist/avatar/FaceAvatar.d.ts.map +0 -1
  136. package/dist/avatar/tile-avatar-size.d.ts.map +0 -1
  137. package/dist/callkit/callkit.d.ts.map +0 -1
  138. package/dist/callkit/resolve-space-callkit-options.d.ts.map +0 -1
  139. package/dist/client.d.ts.map +0 -1
  140. package/dist/clipboard-store.d.ts.map +0 -1
  141. package/dist/clipboard.d.ts.map +0 -1
  142. package/dist/components/EmbeddedWhiteboard.d.ts.map +0 -1
  143. package/dist/components/RtcVideoView.d.ts.map +0 -1
  144. package/dist/components/android-connection-service-controller.d.ts.map +0 -1
  145. package/dist/components/native-media-visibility.d.ts.map +0 -1
  146. package/dist/components/native-space-callkit-controller.d.ts.map +0 -1
  147. package/dist/components/native-space-view/screen-share-availability.d.ts.map +0 -1
  148. package/dist/components/rtc-video-view-availability.d.ts.map +0 -1
  149. package/dist/components/space-lifecycle.d.ts.map +0 -1
  150. package/dist/components/useAndroidCallService.d.ts.map +0 -1
  151. package/dist/components/useAndroidConnectionService.d.ts.map +0 -1
  152. package/dist/context/space-client-context.d.ts.map +0 -1
  153. package/dist/dev.d.ts.map +0 -1
  154. package/dist/diagnostics.d.ts.map +0 -1
  155. package/dist/dock/Dock.d.ts.map +0 -1
  156. package/dist/dock/LeaveMenu.d.ts.map +0 -1
  157. package/dist/dock/MoreSheet.d.ts.map +0 -1
  158. package/dist/dock/ReactionBurst.d.ts.map +0 -1
  159. package/dist/dock/RoutePicker.d.ts.map +0 -1
  160. package/dist/dock/audio-route.d.ts.map +0 -1
  161. package/dist/frame/CallFrame.d.ts.map +0 -1
  162. package/dist/frame/Chalk.d.ts.map +0 -1
  163. package/dist/frame/back-handler.d.ts.map +0 -1
  164. package/dist/frame/dev-scenario.d.ts.map +0 -1
  165. package/dist/frame/device-layout.d.ts.map +0 -1
  166. package/dist/frame/measurement.d.ts.map +0 -1
  167. package/dist/frame/portal.d.ts.map +0 -1
  168. package/dist/frame/preferences.d.ts.map +0 -1
  169. package/dist/frame/regions.d.ts.map +0 -1
  170. package/dist/haptics/haptics.d.ts.map +0 -1
  171. package/dist/header/CallDetailsSheet.d.ts.map +0 -1
  172. package/dist/header/Header.d.ts.map +0 -1
  173. package/dist/header/QrCode.d.ts.map +0 -1
  174. package/dist/hooks/external-store.d.ts.map +0 -1
  175. package/dist/hooks/space-hooks.d.ts.map +0 -1
  176. package/dist/icons/Icon.d.ts.map +0 -1
  177. package/dist/icons/icon-element.d.ts.map +0 -1
  178. package/dist/icons/icon-paths.d.ts.map +0 -1
  179. package/dist/index.d.ts.map +0 -1
  180. package/dist/invites.d.ts.map +0 -1
  181. package/dist/limbo/Limbo.d.ts.map +0 -1
  182. package/dist/limbo/Veil.d.ts.map +0 -1
  183. package/dist/media/native-capture-error.d.ts.map +0 -1
  184. package/dist/media/native-webrtc.d.ts.map +0 -1
  185. package/dist/motion/MovingFrame.d.ts.map +0 -1
  186. package/dist/motion/motion.d.ts.map +0 -1
  187. package/dist/motion/presence.d.ts.map +0 -1
  188. package/dist/motion/press.d.ts.map +0 -1
  189. package/dist/platform/platform.d.ts.map +0 -1
  190. package/dist/primitives/BottomSheet.d.ts.map +0 -1
  191. package/dist/primitives/ChalkText.d.ts.map +0 -1
  192. package/dist/primitives/CopyButton.d.ts.map +0 -1
  193. package/dist/primitives/IconButton.d.ts.map +0 -1
  194. package/dist/primitives/Menu.d.ts.map +0 -1
  195. package/dist/primitives/NameTag.d.ts.map +0 -1
  196. package/dist/primitives/PillButton.d.ts.map +0 -1
  197. package/dist/primitives/SegmentedControl.d.ts.map +0 -1
  198. package/dist/primitives/SheetGroup.d.ts.map +0 -1
  199. package/dist/primitives/Switch.d.ts.map +0 -1
  200. package/dist/primitives/TileShell.d.ts.map +0 -1
  201. package/dist/primitives/announce.d.ts.map +0 -1
  202. package/dist/primitives/menu-placement.d.ts.map +0 -1
  203. package/dist/primitives/toast/Toast.d.ts.map +0 -1
  204. package/dist/primitives/toast/ToastStack.d.ts.map +0 -1
  205. package/dist/primitives/toast/toast-store.d.ts.map +0 -1
  206. package/dist/runtime.d.ts.map +0 -1
  207. package/dist/sheets/people-chat/ChatNotices.d.ts.map +0 -1
  208. package/dist/sheets/people-chat/ChatTab.d.ts.map +0 -1
  209. package/dist/sheets/people-chat/Composer.d.ts.map +0 -1
  210. package/dist/sheets/people-chat/PeopleChatSheet.d.ts.map +0 -1
  211. package/dist/sheets/people-chat/PeopleTab.d.ts.map +0 -1
  212. package/dist/sheets/people-chat/PhotoViewer.d.ts.map +0 -1
  213. package/dist/sheets/people-chat/TextField.d.ts.map +0 -1
  214. package/dist/sheets/people-chat/attachments.d.ts.map +0 -1
  215. package/dist/sheets/people-chat/chat-model.d.ts.map +0 -1
  216. package/dist/sheets/people-chat/people-model.d.ts.map +0 -1
  217. package/dist/sounds/sounds.d.ts.map +0 -1
  218. package/dist/space-client/create-native-space-client.d.ts.map +0 -1
  219. package/dist/space-client/random-uuid.d.ts.map +0 -1
  220. package/dist/stage/ContentTile.d.ts.map +0 -1
  221. package/dist/stage/ParticipantTile.d.ts.map +0 -1
  222. package/dist/stage/Stage.d.ts.map +0 -1
  223. package/dist/stage/TileSheet.d.ts.map +0 -1
  224. package/dist/stage/camera.d.ts.map +0 -1
  225. package/dist/stage/layout.d.ts.map +0 -1
  226. package/dist/stage/space-selector.d.ts.map +0 -1
  227. package/dist/stage/stage-view.d.ts.map +0 -1
  228. package/dist/status/CallOverlays.d.ts.map +0 -1
  229. package/dist/status/ChalkArrival.d.ts.map +0 -1
  230. package/dist/status/StatusPage.d.ts.map +0 -1
  231. package/dist/status/call-screen.d.ts.map +0 -1
  232. package/dist/theme/theme.d.ts.map +0 -1
  233. package/dist/theme/tokens.d.ts.map +0 -1
  234. package/dist/toasts/CallEventToasts.d.ts.map +0 -1
  235. package/dist/toasts/notices.d.ts.map +0 -1
  236. package/dist/ui/ChalkUI.d.ts.map +0 -1
  237. package/dist/ui.d.ts.map +0 -1
  238. package/dist/utils/build-chalk-invite-link.d.ts.map +0 -1
  239. package/dist/utils/ios-simulator.d.ts.map +0 -1
  240. package/dist/whiteboard/embedded-whiteboard-assets.d.ts.map +0 -1
  241. package/dist/whiteboard/embedded-whiteboard-viewport.d.ts.map +0 -1
  242. package/src/callkit/callkit.test.ts +0 -97
  243. package/src/components/native-space-view/screen-share-availability.test.ts +0 -16
  244. package/src/frame/regions.test.ts +0 -38
  245. package/src/media/native-capture-error.test.ts +0 -19
  246. package/src/primitives/menu-placement.test.ts +0 -50
  247. package/src/sheets/people-chat/people-chat-model.test.ts +0 -98
  248. package/src/space-client/whiteboard-watchdog.test.ts +0 -23
  249. package/src/stage/layout.test.ts +0 -77
  250. package/src/status/call-screen.test.ts +0 -42
  251. package/src/toasts/notices.test.ts +0 -92
  252. package/src/whiteboard/embedded-whiteboard-viewport.test.ts +0 -13
@@ -21,4 +21,3 @@ export declare function PortalHost({ layer }: {
21
21
  * read this count, not the entries, or each publish re-renders the portal and loops.
22
22
  */
23
23
  export declare function usePortalCount(layer: PortalLayer): number;
24
- //# sourceMappingURL=portal.d.ts.map
@@ -18,4 +18,3 @@ type ProviderProps = {
18
18
  export declare function PreferencesProvider({ colorScheme, onColorSchemeChange, soundsEnabled, onSoundsEnabledChange, children }: ProviderProps): React.JSX.Element;
19
19
  export declare function usePreferences(): CallPreferences;
20
20
  export {};
21
- //# sourceMappingURL=preferences.d.ts.map
@@ -22,4 +22,3 @@ export declare const STAGE_GAP = 8;
22
22
  * `cardOpen` is the iPad side card, which takes 352 pt from the stage.
23
23
  */
24
24
  export declare function frameRegions(arrangement: Arrangement, width: number, height: number, insets: EdgeInsets, cardOpen?: boolean): FrameRegions;
25
- //# sourceMappingURL=regions.d.ts.map
@@ -9,4 +9,3 @@ export declare const haptics: {
9
9
  readonly sheetDetent: () => void;
10
10
  };
11
11
  export type HapticMoment = keyof typeof haptics;
12
- //# sourceMappingURL=haptics.d.ts.map
@@ -15,4 +15,3 @@ export type CallDetailsSheetProps = {
15
15
  export declare function CallDetailsSheet({ open, onClose, callName, inviteLink, returnFocusRef }: CallDetailsSheetProps): React.JSX.Element;
16
16
  /** The link as people read it, `chalkmeet.com/q9-team`, without the scheme or the invite token. */
17
17
  export declare function displayLink(link: string): string;
18
- //# sourceMappingURL=CallDetailsSheet.d.ts.map
@@ -14,4 +14,3 @@ export type HeaderProps = {
14
14
  */
15
15
  export declare const Header: import("react").NamedExoticComponent<HeaderProps & import("react").RefAttributes<View>>;
16
16
  export declare function formatElapsed(milliseconds: number): string;
17
- //# sourceMappingURL=Header.d.ts.map
@@ -3,4 +3,3 @@ export declare const QrCode: import("react").MemoExoticComponent<({ value, size
3
3
  readonly value: string;
4
4
  readonly size: number;
5
5
  }) => React.JSX.Element>;
6
- //# sourceMappingURL=QrCode.d.ts.map
@@ -7,4 +7,3 @@ export interface ExternalStore<State> {
7
7
  subscribe: (listener: () => void) => () => void;
8
8
  }
9
9
  export declare function useManagerState<State>(manager: ExternalStateManager<State>): State;
10
- //# sourceMappingURL=external-store.d.ts.map
@@ -8,4 +8,3 @@ export declare function useReactions(): SpaceSnapshot["reactions"];
8
8
  export declare function useRecording(): SpaceSnapshot["recording"];
9
9
  export declare function useWhiteboard(): SpaceSnapshot["whiteboard"];
10
10
  export declare function useCan(capability: Capability): boolean;
11
- //# sourceMappingURL=space-hooks.d.ts.map
@@ -9,4 +9,3 @@ export type IconProps = {
9
9
  };
10
10
  /** One icon from the mockup's 24-unit, 1.75-stroke line set. Icons are decorative; label the control that holds them. */
11
11
  export declare const Icon: import("react").MemoExoticComponent<({ name, color, size, strokeWidth }: IconProps) => React.JSX.Element>;
12
- //# sourceMappingURL=Icon.d.ts.map
@@ -21,4 +21,3 @@ export type IconElement = (Stroke & {
21
21
  readonly r: number;
22
22
  });
23
23
  export {};
24
- //# sourceMappingURL=icon-element.d.ts.map
@@ -527,4 +527,3 @@ export declare const iconElements: {
527
527
  readonly d: "M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z";
528
528
  }];
529
529
  };
530
- //# sourceMappingURL=icon-paths.d.ts.map
package/dist/index.d.ts CHANGED
@@ -10,4 +10,3 @@ export { useCan, useChat, useConnection, useMedia, useParticipants, useReactions
10
10
  export { extractSpaceInviteFromLink, getClipboardInviteSuggestion, parseSpaceInviteLink } from "./invites";
11
11
  export type { SpaceInviteLink } from "./invites";
12
12
  export { buildChalkInviteLink } from "./utils/build-chalk-invite-link";
13
- //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -53,7 +53,7 @@ import {
53
53
  useTheme,
54
54
  useToasts,
55
55
  viewer
56
- } from "./chunk-OIBT2FNM.js";
56
+ } from "./chunk-MBZRE4US.js";
57
57
  import {
58
58
  useMeasuredRef
59
59
  } from "./chunk-GYVZSOGQ.js";
@@ -294,13 +294,14 @@ function RoutePicker({ open, onClose, onSelect, output, anchorRef }) {
294
294
  // src/dock/Dock.tsx
295
295
  import { Fragment, jsx as jsx4, jsxs } from "react/jsx-runtime";
296
296
  var Dock = memo(function Dock2({ arrangement, microphoneOn, cameraOn, onToggleMicrophone, onToggleCamera, onOpenMore, onLeave, moreOpen, leaveOpen, moreRef, leaveRef }) {
297
+ const live = useConnection().status === "live";
297
298
  const size = arrangement === "pad" ? 44 : 52;
298
299
  const dockStyle = [styles.dock, arrangement === "pad" ? styles.pad : arrangement === "landscape" ? styles.landscape : styles.portrait];
299
300
  const dockRef = useMeasuredRef("frame.dock", dockStyle);
300
301
  const output = useAudioOutput();
301
302
  return /* @__PURE__ */ jsxs(View, { accessibilityLabel: "Call controls", accessibilityRole: "toolbar", pointerEvents: "box-none", ref: dockRef, style: dockStyle, testID: "frame.dock", children: [
302
- /* @__PURE__ */ jsx4(IconButton, { accessibilityLabel: microphoneOn ? "Mute microphone" : "Unmute microphone", icon: microphoneOn ? "mic" : "micOff", off: !microphoneOn, onCanvas: true, onPress: onToggleMicrophone, size, testID: "dock.microphone" }),
303
- /* @__PURE__ */ jsx4(IconButton, { accessibilityLabel: cameraOn ? "Turn off camera" : "Turn on camera", icon: cameraOn ? "cam" : "camOff", off: !cameraOn, onCanvas: true, onPress: onToggleCamera, size, testID: "dock.camera" }),
303
+ /* @__PURE__ */ jsx4(IconButton, { accessibilityLabel: microphoneOn ? "Mute microphone" : "Unmute microphone", icon: microphoneOn ? "mic" : "micOff", off: !microphoneOn, disabled: !live && !microphoneOn, onCanvas: true, onPress: onToggleMicrophone, size, testID: "dock.microphone" }),
304
+ /* @__PURE__ */ jsx4(IconButton, { accessibilityLabel: cameraOn ? "Turn off camera" : "Turn on camera", icon: cameraOn ? "cam" : "camOff", off: !cameraOn, disabled: !live && !cameraOn, onCanvas: true, onPress: onToggleCamera, size, testID: "dock.camera" }),
304
305
  output ? /* @__PURE__ */ jsx4(AudioOutputButton, { captioned: arrangement === "portrait", output, size }) : null,
305
306
  /* @__PURE__ */ jsx4(IconButton, { accessibilityLabel: "More options", expanded: moreOpen, icon: "more", onCanvas: true, onPress: onOpenMore, ref: moreRef, size, testID: "dock.more" }),
306
307
  arrangement === "pad" ? /* @__PURE__ */ jsx4(View, { style: styles.gap }) : null,
@@ -406,7 +407,8 @@ function MoreSheet({ open, onClose, onOpenPeople, onOpenChat, inviteLink, return
406
407
  const toasts = useToasts();
407
408
  const { soundsEnabled } = usePreferences();
408
409
  const canRaiseHand = useCan("raiseHand");
409
- const canReact = useCan("sendReaction");
410
+ const live = useConnection().status === "live";
411
+ const canReact = useCan("sendReaction") && live;
410
412
  const fail = useCallback5((message2) => () => toasts.show({ kind: "error", dismissible: true, message: message2 }), [toasts]);
411
413
  const toggleHand = useCallback5(() => {
412
414
  onClose();
@@ -1913,7 +1915,7 @@ function createNativeMediaStream(track) {
1913
1915
 
1914
1916
  // src/components/rtc-video-view-availability.ts
1915
1917
  function canRenderRtcVideoView(component) {
1916
- return typeof component === "function" || typeof component === "object" && component !== null;
1918
+ return typeof component === "string" && component.length > 0 || typeof component === "function" || typeof component === "object" && component !== null;
1917
1919
  }
1918
1920
 
1919
1921
  // src/components/RtcVideoView.tsx
@@ -2365,7 +2367,11 @@ function TileSheet({ participantId, open, onClose }) {
2365
2367
  icon: "flip",
2366
2368
  label: `Switch to the ${person.back ? "front" : "back"} camera`,
2367
2369
  onPress: run(() => {
2368
- if (person.otherCamera) client.media.selectCamera(person.otherCamera).then(() => announce(`Switched to the ${person.back ? "front" : "back"} camera`), failed("Couldn't switch the camera."));
2370
+ const otherCamera2 = person.otherCamera;
2371
+ if (otherCamera2)
2372
+ client.media.selectCamera(otherCamera2).then(() => {
2373
+ announce(`Switched to the ${person.back ? "front" : "back"} camera`);
2374
+ }, failed("Couldn't switch the camera."));
2369
2375
  }),
2370
2376
  testID: "tile-sheet.flip"
2371
2377
  }
@@ -2564,6 +2570,10 @@ var styles19 = StyleSheet20.create({
2564
2570
  // src/status/CallOverlays.tsx
2565
2571
  import { jsx as jsx30, jsxs as jsxs21 } from "react/jsx-runtime";
2566
2572
  function CallOverlays({ screen, callName, rejoining, onHold, onRejoin, onHome }) {
2573
+ const { colors } = useTheme();
2574
+ const layout = useDeviceLayout();
2575
+ const { header } = frameRegions(layout.arrangement, layout.width, layout.height, layout.insets);
2576
+ const connection = useConnection();
2567
2577
  const recording2 = useRecording().current?.status === "recording";
2568
2578
  const queuedMessages = useChat().pendingSends.filter((send) => send.status === "queued").length;
2569
2579
  useBackHandler(screen.kind === "status", onHome);
@@ -2572,10 +2582,11 @@ function CallOverlays({ screen, callName, rejoining, onHold, onRejoin, onHome })
2572
2582
  useEffect17(() => {
2573
2583
  if (clearsNotices) clear();
2574
2584
  }, [clear, clearsNotices]);
2575
- const limbo = screen.kind === "joining" ? { kind: "joining", rejoining } : screen.kind === "reconnecting" ? { kind: "reconnecting", queuedMessages } : screen.kind === "call" && onHold ? { kind: "hold" } : null;
2585
+ const limbo = screen.kind === "joining" ? { kind: "joining", rejoining } : screen.kind === "call" && onHold ? { kind: "hold" } : null;
2576
2586
  const veil = limbo === null ? "none" : limbo.kind === "joining" ? "limbo" : "paused";
2577
2587
  return /* @__PURE__ */ jsxs21(View20, { pointerEvents: "box-none", style: StyleSheet21.absoluteFill, children: [
2578
2588
  /* @__PURE__ */ jsx30(Veil, { level: screen.kind === "status" ? "none" : veil }),
2589
+ screen.kind === "reconnecting" || screen.kind === "call" && connection.syncHealth === "degraded" ? /* @__PURE__ */ jsx30(View20, { pointerEvents: "none", style: { position: "absolute", top: header.y + header.height + 4, left: layout.insets.left + 16, right: layout.insets.right + 16, alignItems: "center" }, testID: "connection.notice", children: /* @__PURE__ */ jsx30(ChalkText, { accessibilityLiveRegion: "polite", variant: "caption", style: { backgroundColor: colors.surface, borderRadius: 12, paddingHorizontal: 12, paddingVertical: 6 }, children: screen.kind === "reconnecting" ? `Reconnecting\u2026${queuedMessages ? ` ${queuedMessages} messages waiting to send.` : ""}` : "Connection is slow" }) }) : null,
2579
2590
  limbo ? /* @__PURE__ */ jsx30(Limbo, { callName, recording: recording2, state: limbo }) : null,
2580
2591
  screen.kind === "status" ? /* @__PURE__ */ jsx30(StatusPage, { callName, onHome, onRejoin, outcome: screen.outcome }) : null
2581
2592
  ] });
@@ -2622,6 +2633,15 @@ import { SpaceClientError } from "@q9labsai/chalk-client";
2622
2633
  import { useCallback as useCallback14, useEffect as useEffect18, useRef as useRef12 } from "react";
2623
2634
  import { Linking as Linking2, Platform as Platform7 } from "react-native";
2624
2635
 
2636
+ // src/toasts/media-failure-copy.ts
2637
+ var MEDIA_FAILURE_DETAILS = {
2638
+ "connection.invalid_state": "Still connecting. Try again in a moment.",
2639
+ "media.timeout": "The call did not respond. Try again."
2640
+ };
2641
+ function mediaFailureMessage(permission, code) {
2642
+ return code && MEDIA_FAILURE_DETAILS[code] || `Couldn\u2019t turn on your ${permission}. Try again.`;
2643
+ }
2644
+
2625
2645
  // src/toasts/notices.ts
2626
2646
  function callNotices(previous, next, ownMicrophoneChange) {
2627
2647
  if (previous.connection.status !== "live" || next.connection.status !== "live") return [];
@@ -2689,7 +2709,7 @@ function useCallEventToasts({ onOpenSettings, resumedAfterSettings }) {
2689
2709
  ownMicrophoneChange.current = true;
2690
2710
  }, []);
2691
2711
  const reportMediaFailure = useCallback14(
2692
- (permission, cause, retry) => {
2712
+ function reportMediaFailure2(permission, cause, retry) {
2693
2713
  const code = cause instanceof SpaceClientError ? cause.code : null;
2694
2714
  const icon = permission === "microphone" ? "micOff" : "camOff";
2695
2715
  const leading = /* @__PURE__ */ jsx32(Icon, { color: latest.current.colors.dangerText, name: icon });
@@ -2729,15 +2749,21 @@ function useCallEventToasts({ onOpenSettings, resumedAfterSettings }) {
2729
2749
  label: "Try again",
2730
2750
  testID: "toast.try-again",
2731
2751
  onPress: () => {
2732
- toasts.dismiss(id);
2733
- retry();
2752
+ void retry().then(
2753
+ () => toasts.dismiss(id),
2754
+ (cause2) => {
2755
+ if (cause2 instanceof SpaceClientError && cause2.code === "connection.invalid_state") return;
2756
+ toasts.dismiss(id);
2757
+ reportMediaFailure2(permission, cause2, retry);
2758
+ }
2759
+ );
2734
2760
  }
2735
2761
  }
2736
2762
  ]
2737
2763
  });
2738
2764
  return;
2739
2765
  }
2740
- toasts.show({ kind: "error", leading, dismissible: true, wrap: true, message: cause instanceof Error ? `Couldn\u2019t turn on your ${permission}. ${cause.message}` : `Couldn\u2019t turn on your ${permission}.` });
2766
+ toasts.show({ kind: "error", leading, dismissible: true, wrap: true, message: mediaFailureMessage(permission, code) });
2741
2767
  },
2742
2768
  [onOpenSettings, toasts]
2743
2769
  );
@@ -2776,8 +2802,10 @@ function noticeToast(notice, { client, toasts, colors, dismiss }) {
2776
2802
  const who = request.actorDisplayName ? firstName2(request.actorDisplayName) : "The host";
2777
2803
  const unmute2 = request.kind === "unmute";
2778
2804
  const accept = () => {
2779
- dismiss();
2780
- client.media.acceptRequest(request.requestId).catch(() => toasts.show({ kind: "error", dismissible: true, message: unmute2 ? "Couldn\u2019t unmute you." : "Couldn\u2019t turn on your camera." }));
2805
+ void client.media.acceptRequest(request.requestId).then(dismiss, (cause) => {
2806
+ if (cause instanceof SpaceClientError && cause.code === "connection.invalid_state") return;
2807
+ toasts.show({ kind: "error", dismissible: true, message: unmute2 ? "Couldn\u2019t unmute you." : "Couldn\u2019t turn on your camera." });
2808
+ });
2781
2809
  };
2782
2810
  return {
2783
2811
  input: {
@@ -2838,14 +2866,14 @@ function CallFrame({ displayName, callName = "Call", inviteLink, onLeave, onOpen
2838
2866
  haptics.mute();
2839
2867
  playSound(microphoneOn ? "mute" : "unmute", soundsEnabled);
2840
2868
  if (microphoneOn) noteOwnMicrophoneChange();
2841
- const turnOn = () => client.media.setMicrophoneEnabled(true).catch((cause) => reportMediaFailure("microphone", cause, turnOn));
2869
+ const turnOn = () => client.media.setMicrophoneEnabled(true);
2842
2870
  if (microphoneOn) client.media.setMicrophoneEnabled(false).catch(() => toasts.show({ kind: "error", dismissible: true, message: "Couldn\u2019t mute your microphone." }));
2843
- else void turnOn();
2871
+ else void turnOn().catch((cause) => reportMediaFailure("microphone", cause, turnOn));
2844
2872
  }, [client, microphoneOn, noteOwnMicrophoneChange, reportMediaFailure, soundsEnabled, toasts]);
2845
2873
  const toggleCamera = useCallback15(() => {
2846
- const turnOn = () => client.media.setCameraEnabled(true).catch((cause) => reportMediaFailure("camera", cause, turnOn));
2874
+ const turnOn = () => client.media.setCameraEnabled(true);
2847
2875
  if (cameraOn) client.media.setCameraEnabled(false).catch(() => toasts.show({ kind: "error", dismissible: true, message: "Couldn\u2019t turn off your camera." }));
2848
- else void turnOn();
2876
+ else void turnOn().catch((cause) => reportMediaFailure("camera", cause, turnOn));
2849
2877
  }, [cameraOn, client, reportMediaFailure, toasts]);
2850
2878
  const exit = useCallback15(
2851
2879
  (how) => {
package/dist/invites.d.ts CHANGED
@@ -5,4 +5,3 @@ export type SpaceInviteLink = {
5
5
  export declare function parseSpaceInviteLink(input: string): SpaceInviteLink | null;
6
6
  export declare function extractSpaceInviteFromLink(input: string): SpaceInviteLink | null;
7
7
  export declare function getClipboardInviteSuggestion(clipboardText: string | null | undefined, currentInput?: string): string | null;
8
- //# sourceMappingURL=invites.d.ts.map
@@ -22,4 +22,3 @@ export type LimboProps = {
22
22
  };
23
23
  /** The limbo card (`.lmsg`) centred over the veiled call, with the mockup's copy for each state. */
24
24
  export declare function Limbo({ state, callName, recording }: LimboProps): React.JSX.Element;
25
- //# sourceMappingURL=Limbo.d.ts.map
@@ -7,4 +7,3 @@ export type VeilLevel = "none" | "limbo" | "paused";
7
7
  export declare function Veil({ level }: {
8
8
  readonly level: VeilLevel;
9
9
  }): React.JSX.Element;
10
- //# sourceMappingURL=Veil.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * web, so the native adapter gives it that name and the call can offer Open Settings.
5
5
  */
6
6
  export declare function toNativeCaptureError(cause: unknown): unknown;
7
- //# sourceMappingURL=native-capture-error.d.ts.map
@@ -3,4 +3,3 @@ import type { MediaStream as NativeMediaStream, MediaStreamTrack as NativeMediaS
3
3
  export { MediaStream, RTCView, mediaDevices };
4
4
  export type { NativeMediaStream, NativeMediaStreamTrack };
5
5
  export declare function createNativeMediaStream(track: MediaStreamTrack | NativeMediaStreamTrack): NativeMediaStream;
6
- //# sourceMappingURL=native-webrtc.d.ts.map
@@ -33,4 +33,3 @@ export type MovingFrameProps = {
33
33
  * ```
34
34
  */
35
35
  export declare function MovingFrame({ frame, children, style, testID }: MovingFrameProps): React.JSX.Element;
36
- //# sourceMappingURL=MovingFrame.d.ts.map
@@ -79,4 +79,3 @@ export declare const timings: {
79
79
  export type TimingName = keyof typeof timings;
80
80
  /** `withTiming` with one of the named timings. Call it from a worklet or from JS. */
81
81
  export declare function animateTo(value: number, timing: TimingName): number;
82
- //# sourceMappingURL=motion.d.ts.map
@@ -3,4 +3,3 @@ import { type EntryExitAnimationFunction } from "react-native-reanimated";
3
3
  export declare const tileEntering: EntryExitAnimationFunction;
4
4
  /** A leaving tile fades out over 160 ms. Pass as `exiting` on an Animated.View. */
5
5
  export declare const tileLeaving: EntryExitAnimationFunction;
6
- //# sourceMappingURL=presence.d.ts.map
@@ -12,4 +12,3 @@ export type PressAnimation = {
12
12
  * background switches at once. Runs on the UI thread; reduced motion keeps the scale at 1.
13
13
  */
14
14
  export declare function usePressAnimation(family: keyof typeof pressScale): PressAnimation;
15
- //# sourceMappingURL=press.d.ts.map
@@ -1,3 +1,2 @@
1
1
  export type PlatformVariant = "android" | "ios-phone" | "ios-pad" | "macos" | "tvos";
2
2
  export declare function resolvePlatformVariant(): PlatformVariant;
3
- //# sourceMappingURL=platform.d.ts.map
@@ -33,4 +33,3 @@ export declare function BottomSheet({ open, onClose, accessibilityLabel, childre
33
33
  export declare function SheetDragRegion({ children }: {
34
34
  readonly children: ReactNode;
35
35
  }): React.JSX.Element;
36
- //# sourceMappingURL=BottomSheet.d.ts.map
@@ -10,4 +10,3 @@ export type ChalkTextProps = TextProps & {
10
10
  };
11
11
  /** Figtree text in one of the call's type styles. */
12
12
  export declare function ChalkText({ variant, tone, color, tabular, style, ...rest }: ChalkTextProps): React.JSX.Element;
13
- //# sourceMappingURL=ChalkText.d.ts.map
@@ -8,4 +8,3 @@ export type CopyButtonProps = {
8
8
  };
9
9
  /** The mockup's copy button (`.cp`): the copy icon turns into a green check for two seconds. */
10
10
  export declare const CopyButton: import("react").MemoExoticComponent<({ onCopy, accessibilityLabel, announcement, testID }: CopyButtonProps) => React.JSX.Element>;
11
- //# sourceMappingURL=CopyButton.d.ts.map
@@ -23,4 +23,3 @@ export type IconButtonProps = {
23
23
  };
24
24
  /** The mockup's round button (`.rb`): press scale 0.94 over 150 ms, background switches at once. */
25
25
  export declare const IconButton: import("react").NamedExoticComponent<IconButtonProps & import("react").RefAttributes<View>>;
26
- //# sourceMappingURL=IconButton.d.ts.map
@@ -36,4 +36,3 @@ export declare function MenuSection({ label }: {
36
36
  readonly label: string;
37
37
  }): React.JSX.Element;
38
38
  export declare function MenuSeparator(): React.JSX.Element;
39
- //# sourceMappingURL=Menu.d.ts.map
@@ -16,4 +16,3 @@ export type NameTagProps = {
16
16
  export declare const NameTag: import("react").MemoExoticComponent<({ name, muted, pinned, icon, you, handRaised, handOrder, testID }: NameTagProps) => React.JSX.Element>;
17
17
  /** The strip at the bottom of a tile that the name tag can cover, so tile content can keep clear of it. */
18
18
  export declare const nameTagZone: number;
19
- //# sourceMappingURL=NameTag.d.ts.map
@@ -16,4 +16,3 @@ export type PillButtonProps = {
16
16
  };
17
17
  /** The mockup's pill button (`.pb`, `.big`): primary inverts, secondary is raised, danger is red. */
18
18
  export declare const PillButton: import("react").NamedExoticComponent<PillButtonProps & import("react").RefAttributes<ViewType>>;
19
- //# sourceMappingURL=PillButton.d.ts.map
@@ -14,4 +14,3 @@ export type SegmentedControlProps<TValue extends string> = {
14
14
  };
15
15
  /** The mockup's segmented control (`.seg2`). The selected segment lifts onto a brighter surface. */
16
16
  export declare function SegmentedControl<TValue extends string>({ options, value, onChange, accessibilityLabel, size, testID }: SegmentedControlProps<TValue>): React.JSX.Element;
17
- //# sourceMappingURL=SegmentedControl.d.ts.map
@@ -21,4 +21,3 @@ export type SheetRowProps = {
21
21
  };
22
22
  /** A phone sheet row (`.srow`): 52 pt high, 16 pt text, an optional icon in front and a control at the end. */
23
23
  export declare function SheetRow({ label, icon, end, badge, accessibilityLabel, onPress, danger, testID }: SheetRowProps): React.JSX.Element;
24
- //# sourceMappingURL=SheetGroup.d.ts.map
@@ -6,4 +6,3 @@ export type SwitchProps = {
6
6
  };
7
7
  /** The mockup's switch (`.sw`): a 36 by 22 track, green when on, with a knob that slides 14 pt in 150 ms. */
8
8
  export declare const Switch: import("react").MemoExoticComponent<({ value, onValueChange, accessibilityLabel, testID }: SwitchProps) => React.JSX.Element>;
9
- //# sourceMappingURL=Switch.d.ts.map
@@ -15,4 +15,3 @@ export type TileShellProps = {
15
15
  * avatar and a `NameTag`.
16
16
  */
17
17
  export declare const TileShell: import("react").MemoExoticComponent<({ children, speaking, cameraOn, level, testID }: TileShellProps) => React.JSX.Element>;
18
- //# sourceMappingURL=TileShell.d.ts.map
@@ -1,3 +1,2 @@
1
1
  /** Speaks a message through VoiceOver or TalkBack, like the mockup's polite live region. Queued on iOS so it doesn't cut off the current utterance. */
2
2
  export declare function announce(message: string): void;
3
- //# sourceMappingURL=announce.d.ts.map
@@ -29,4 +29,3 @@ export declare function placeMenu(trigger: Rect, menu: {
29
29
  readonly width: number;
30
30
  readonly height: number;
31
31
  }, insets: Insets, keyboardHeight?: number): MenuPlacement;
32
- //# sourceMappingURL=menu-placement.d.ts.map
@@ -5,4 +5,3 @@ export type ToastProps = {
5
5
  };
6
6
  /** One event notice (`.toast`). Every notice in the call uses this look. */
7
7
  export declare const Toast: import("react").MemoExoticComponent<({ toast, onDismiss }: ToastProps) => React.JSX.Element>;
8
- //# sourceMappingURL=Toast.d.ts.map
@@ -15,4 +15,3 @@ export declare function useToastClearance(): (bottom: number | null) => void;
15
15
  * the top of the screen with the newest notice nearest the top edge, as in the mockup.
16
16
  */
17
17
  export declare function ToastStack(): React.JSX.Element;
18
- //# sourceMappingURL=ToastStack.d.ts.map
@@ -36,4 +36,3 @@ export type ToastStore = {
36
36
  };
37
37
  export declare function messageText(message: ToastInput["message"]): string;
38
38
  export declare function createToastStore(): ToastStore;
39
- //# sourceMappingURL=toast-store.d.ts.map
package/dist/runtime.d.ts CHANGED
@@ -35,4 +35,3 @@ export declare function getDeviceInfo({ appVersion, scriptUrl }?: {
35
35
  appVersion?: string | null;
36
36
  scriptUrl?: string | null;
37
37
  }): DeviceInfo;
38
- //# sourceMappingURL=runtime.d.ts.map
@@ -11,4 +11,3 @@ export type ChatNoticesProps = {
11
11
  * history when the call opens stay quiet.
12
12
  */
13
13
  export declare function ChatNotices({ chatVisible, sheetOpen, onOpenChat }: ChatNoticesProps): null;
14
- //# sourceMappingURL=ChatNotices.d.ts.map
@@ -3,4 +3,3 @@
3
3
  * is inverted, so it opens at the newest message and stays there as new ones arrive.
4
4
  */
5
5
  export declare function ChatTab(): React.JSX.Element;
6
- //# sourceMappingURL=ChatTab.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * rides on the keyboard.
5
5
  */
6
6
  export declare function Composer(): React.JSX.Element;
7
- //# sourceMappingURL=Composer.d.ts.map
@@ -14,4 +14,3 @@ export type PeopleChatSheetProps = {
14
14
  * the call and the call's chat. The tab row drags the sheet like the grabber does.
15
15
  */
16
16
  export declare function PeopleChatSheet({ open, tab, onTabChange, onClose, returnFocusRef }: PeopleChatSheetProps): React.JSX.Element;
17
- //# sourceMappingURL=PeopleChatSheet.d.ts.map
@@ -1,3 +1,2 @@
1
1
  /** The People tab: who is waiting, raised hands, and everyone in the call, with the host's actions. */
2
2
  export declare function PeopleTab(): React.JSX.Element;
3
- //# sourceMappingURL=PeopleTab.d.ts.map
@@ -16,4 +16,3 @@ type PhotoViewerProps = {
16
16
  */
17
17
  export declare function PhotoViewer({ viewing, onChange, onClose }: PhotoViewerProps): React.JSX.Element | null;
18
18
  export {};
19
- //# sourceMappingURL=PhotoViewer.d.ts.map
@@ -1,4 +1,3 @@
1
1
  import { TextInput, type TextInputProps } from "react-native";
2
2
  /** The text input inside a field (`input` in the mockup): the body type, no chrome of its own. */
3
3
  export declare const TextField: import("react").ForwardRefExoticComponent<TextInputProps & import("react").RefAttributes<TextInput>>;
4
- //# sourceMappingURL=TextField.d.ts.map
@@ -30,4 +30,3 @@ export declare const FileCard: import("react").MemoExoticComponent<({ attachment
30
30
  readonly sent: boolean;
31
31
  }) => React.JSX.Element>;
32
32
  export {};
33
- //# sourceMappingURL=attachments.d.ts.map
@@ -61,4 +61,3 @@ export declare function thumbnailLayout(count: number): {
61
61
  readonly shown: number;
62
62
  readonly more: number;
63
63
  };
64
- //# sourceMappingURL=chat-model.d.ts.map
@@ -40,4 +40,3 @@ export declare function peopleRows({ roster, waiting, handOrder, query }: People
40
40
  * the lists saw hands go up in; people who join with a hand already raised count from when they appear.
41
41
  */
42
42
  export declare function nextHandOrder(previous: readonly string[], roster: readonly Participant[]): readonly string[];
43
- //# sourceMappingURL=people-model.d.ts.map
@@ -30,4 +30,3 @@ export declare function playSound(name: SoundName, enabled: boolean): void;
30
30
  /** Frees the players when the call view goes away. */
31
31
  export declare function releaseSounds(): void;
32
32
  export {};
33
- //# sourceMappingURL=sounds.d.ts.map
@@ -12,4 +12,3 @@ export type NativeSpaceClientOptions = {
12
12
  readonly storage?: ReactNativeAsyncStorage;
13
13
  };
14
14
  export declare function createNativeSpaceClient(options: NativeSpaceClientOptions): SpaceClient;
15
- //# sourceMappingURL=create-native-space-client.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * what is missing with Expo's native secure generator, so runtimes with Web Crypto keep theirs.
5
5
  */
6
6
  export declare function ensureRandomUUID(): void;
7
- //# sourceMappingURL=random-uuid.d.ts.map
@@ -15,4 +15,3 @@ export type ContentTileProps = {
15
15
  };
16
16
  /** The shared screen or board as one stage tile (`.tile.content`), kept mounted while it moves. */
17
17
  export declare const ContentTile: import("react").MemoExoticComponent<({ content, inner, mini, onShowInSpotlight }: ContentTileProps) => React.JSX.Element>;
18
- //# sourceMappingURL=ContentTile.d.ts.map
@@ -15,4 +15,3 @@ export type ParticipantTileProps = {
15
15
  * it, and the stage keeps it mounted across every move so the video view keeps its surface.
16
16
  */
17
17
  export declare const ParticipantTile: import("react").MemoExoticComponent<({ id, width, height, float, pinned, mirror, onOpen }: ParticipantTileProps) => React.JSX.Element>;
18
- //# sourceMappingURL=ParticipantTile.d.ts.map
@@ -11,4 +11,3 @@ export type StageProps = {
11
11
  * remounted by a move, a layout switch or a sheet; only tiles on the stage subscribe to video.
12
12
  */
13
13
  export declare const Stage: import("react").MemoExoticComponent<({ frame, onOpenPeople }: StageProps) => React.JSX.Element>;
14
- //# sourceMappingURL=Stage.d.ts.map
@@ -9,4 +9,3 @@ export type TileSheetProps = {
9
9
  * host's mute and remove for someone else. Board following waits for board editing.
10
10
  */
11
11
  export declare function TileSheet({ participantId, open, onClose }: TileSheetProps): React.JSX.Element;
12
- //# sourceMappingURL=TileSheet.d.ts.map
@@ -4,4 +4,3 @@ export type CameraFacing = "front" | "back";
4
4
  export declare function cameraFacing(media: MediaSlice): CameraFacing;
5
5
  /** The camera facing the other way, or null when the phone has only one. */
6
6
  export declare function otherCamera(media: MediaSlice): MediaDevice | null;
7
- //# sourceMappingURL=camera.d.ts.map
@@ -54,4 +54,3 @@ export type StageOrder = {
54
54
  * speaking they swap places with the person in the spotlight, so only those two tiles move.
55
55
  */
56
56
  export declare function nextStageOrder(previous: StageOrder, present: readonly string[], selfId: string | null, speaker: string | null): StageOrder;
57
- //# sourceMappingURL=layout.d.ts.map
@@ -7,4 +7,3 @@ import type { SpaceSnapshot } from "@q9labsai/chalk-client";
7
7
  export declare function useSpaceSelector<T>(select: (snapshot: SpaceSnapshot) => T, isEqual?: (a: T, b: T) => boolean): T;
8
8
  /** Equal when both objects hold the same values under the same keys, compared with `Object.is`. */
9
9
  export declare function shallowEqual<T extends object>(a: T, b: T): boolean;
10
- //# sourceMappingURL=space-selector.d.ts.map
@@ -20,4 +20,3 @@ export declare function StageViewProvider({ children }: {
20
20
  readonly children: ReactNode;
21
21
  }): React.JSX.Element;
22
22
  export declare function useStageView(): StageView;
23
- //# sourceMappingURL=stage-view.d.ts.map
@@ -10,8 +10,7 @@ export type CallOverlaysProps = {
10
10
  readonly onHome: () => void;
11
11
  };
12
12
  /**
13
- * The overlays layer: the veil and limbo card while the call joins, reconnects or waits on a phone
13
+ * The overlays layer: a non-blocking connection notice, or a veil while the call joins or waits on a phone
14
14
  * call, and the status page once it's over. Android back on a status page goes Home.
15
15
  */
16
16
  export declare function CallOverlays({ screen, callName, rejoining, onHold, onRejoin, onHome }: CallOverlaysProps): React.JSX.Element;
17
- //# sourceMappingURL=CallOverlays.d.ts.map
@@ -21,4 +21,3 @@ export type ChalkArrivalProps = {
21
21
  */
22
22
  export declare function ChalkArrival({ colorScheme, ...props }: ChalkArrivalProps): React.JSX.Element;
23
23
  export declare function ArrivalScreen({ state, callName, onCancel, onRetry, recording }: Omit<ChalkArrivalProps, "colorScheme">): React.JSX.Element;
24
- //# sourceMappingURL=ChalkArrival.d.ts.map
@@ -11,4 +11,3 @@ export type StatusPageProps = {
11
11
  * and the ways forward as round actions with their names under them.
12
12
  */
13
13
  export declare function StatusPage({ outcome, callName, onRejoin, onHome }: StatusPageProps): React.JSX.Element;
14
- //# sourceMappingURL=StatusPage.d.ts.map
@@ -17,4 +17,3 @@ export type CallScreen = {
17
17
  * Only the server's own removal signal shows "removed"; any other exit nobody chose is `exited`.
18
18
  */
19
19
  export declare function callScreen(connection: ConnectionSlice, leftByChoice: boolean): CallScreen;
20
- //# sourceMappingURL=call-screen.d.ts.map
@@ -12,4 +12,3 @@ export declare function ThemeProvider({ colorScheme, children }: {
12
12
  }): React.JSX.Element;
13
13
  export declare function useTheme(): Theme;
14
14
  export declare function themeFor(colorScheme: ColorScheme): Theme;
15
- //# sourceMappingURL=theme.d.ts.map
@@ -245,4 +245,3 @@ export declare const pressScale: {
245
245
  readonly small: 0.92;
246
246
  readonly big: 0.98;
247
247
  };
248
- //# sourceMappingURL=tokens.d.ts.map
@@ -4,7 +4,7 @@ export type CallEventToasts = {
4
4
  /** Call before the person turns their own microphone off, so it isn't reported as a host mute. */
5
5
  readonly noteOwnMicrophoneChange: () => void;
6
6
  /** Says why turning on the microphone or camera failed, with the way forward (F1, K1, K2). */
7
- readonly reportMediaFailure: (permission: Permission, cause: unknown, retry: () => void) => void;
7
+ readonly reportMediaFailure: (permission: Permission, cause: unknown, retry: () => Promise<void>) => void;
8
8
  };
9
9
  export type CallEventToastsOptions = {
10
10
  /** Called just before Open Settings leaves the app, so the app can rejoin after iOS restarts it. */
@@ -18,4 +18,3 @@ export type CallEventToastsOptions = {
18
18
  * ending (F11), recording starting and stopping, and failed microphone or camera changes.
19
19
  */
20
20
  export declare function useCallEventToasts({ onOpenSettings, resumedAfterSettings }: CallEventToastsOptions): CallEventToasts;
21
- //# sourceMappingURL=CallEventToasts.d.ts.map