@mentra/miniapp 0.3.0-dev.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 (277) hide show
  1. package/README.md +259 -0
  2. package/dist/background/index.d.ts +59 -0
  3. package/dist/background/index.d.ts.map +1 -0
  4. package/dist/background/index.js +25 -0
  5. package/dist/background/index.js.map +1 -0
  6. package/dist/background/register.d.ts +38 -0
  7. package/dist/background/register.d.ts.map +1 -0
  8. package/dist/background/register.js +75 -0
  9. package/dist/background/register.js.map +1 -0
  10. package/dist/dev-reload.d.ts +21 -0
  11. package/dist/dev-reload.d.ts.map +1 -0
  12. package/dist/dev-reload.js +62 -0
  13. package/dist/dev-reload.js.map +1 -0
  14. package/dist/envelope.d.ts +23 -0
  15. package/dist/envelope.d.ts.map +1 -0
  16. package/dist/envelope.js +47 -0
  17. package/dist/envelope.js.map +1 -0
  18. package/dist/globals.d.ts +54 -0
  19. package/dist/globals.d.ts.map +1 -0
  20. package/dist/globals.js +12 -0
  21. package/dist/globals.js.map +1 -0
  22. package/dist/index.d.ts +58 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +31 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/modules/actions.d.ts +54 -0
  27. package/dist/modules/actions.d.ts.map +1 -0
  28. package/dist/modules/actions.js +122 -0
  29. package/dist/modules/actions.js.map +1 -0
  30. package/dist/modules/auth.d.ts +25 -0
  31. package/dist/modules/auth.d.ts.map +1 -0
  32. package/dist/modules/auth.js +52 -0
  33. package/dist/modules/auth.js.map +1 -0
  34. package/dist/modules/base64.d.ts +16 -0
  35. package/dist/modules/base64.d.ts.map +1 -0
  36. package/dist/modules/base64.js +92 -0
  37. package/dist/modules/base64.js.map +1 -0
  38. package/dist/modules/blob.d.ts +161 -0
  39. package/dist/modules/blob.d.ts.map +1 -0
  40. package/dist/modules/blob.js +277 -0
  41. package/dist/modules/blob.js.map +1 -0
  42. package/dist/modules/camera.d.ts +137 -0
  43. package/dist/modules/camera.d.ts.map +1 -0
  44. package/dist/modules/camera.js +104 -0
  45. package/dist/modules/camera.js.map +1 -0
  46. package/dist/modules/cloud.d.ts +34 -0
  47. package/dist/modules/cloud.d.ts.map +1 -0
  48. package/dist/modules/cloud.js +70 -0
  49. package/dist/modules/cloud.js.map +1 -0
  50. package/dist/modules/dashboard.d.ts +16 -0
  51. package/dist/modules/dashboard.d.ts.map +1 -0
  52. package/dist/modules/dashboard.js +27 -0
  53. package/dist/modules/dashboard.js.map +1 -0
  54. package/dist/modules/display.d.ts +106 -0
  55. package/dist/modules/display.d.ts.map +1 -0
  56. package/dist/modules/display.js +57 -0
  57. package/dist/modules/display.js.map +1 -0
  58. package/dist/modules/events.d.ts +167 -0
  59. package/dist/modules/events.d.ts.map +1 -0
  60. package/dist/modules/events.js +123 -0
  61. package/dist/modules/events.js.map +1 -0
  62. package/dist/modules/glasses.d.ts +28 -0
  63. package/dist/modules/glasses.d.ts.map +1 -0
  64. package/dist/modules/glasses.js +39 -0
  65. package/dist/modules/glasses.js.map +1 -0
  66. package/dist/modules/heading.d.ts +16 -0
  67. package/dist/modules/heading.d.ts.map +1 -0
  68. package/dist/modules/heading.js +20 -0
  69. package/dist/modules/heading.js.map +1 -0
  70. package/dist/modules/imu.d.ts +31 -0
  71. package/dist/modules/imu.d.ts.map +1 -0
  72. package/dist/modules/imu.js +40 -0
  73. package/dist/modules/imu.js.map +1 -0
  74. package/dist/modules/input.d.ts +34 -0
  75. package/dist/modules/input.d.ts.map +1 -0
  76. package/dist/modules/input.js +50 -0
  77. package/dist/modules/input.js.map +1 -0
  78. package/dist/modules/led.d.ts +35 -0
  79. package/dist/modules/led.d.ts.map +1 -0
  80. package/dist/modules/led.js +39 -0
  81. package/dist/modules/led.js.map +1 -0
  82. package/dist/modules/location.d.ts +27 -0
  83. package/dist/modules/location.d.ts.map +1 -0
  84. package/dist/modules/location.js +35 -0
  85. package/dist/modules/location.js.map +1 -0
  86. package/dist/modules/mic.d.ts +44 -0
  87. package/dist/modules/mic.d.ts.map +1 -0
  88. package/dist/modules/mic.js +67 -0
  89. package/dist/modules/mic.js.map +1 -0
  90. package/dist/modules/miniapps.d.ts +72 -0
  91. package/dist/modules/miniapps.d.ts.map +1 -0
  92. package/dist/modules/miniapps.js +48 -0
  93. package/dist/modules/miniapps.js.map +1 -0
  94. package/dist/modules/navigation.d.ts +326 -0
  95. package/dist/modules/navigation.d.ts.map +1 -0
  96. package/dist/modules/navigation.js +386 -0
  97. package/dist/modules/navigation.js.map +1 -0
  98. package/dist/modules/permissions.d.ts +58 -0
  99. package/dist/modules/permissions.d.ts.map +1 -0
  100. package/dist/modules/permissions.js +66 -0
  101. package/dist/modules/permissions.js.map +1 -0
  102. package/dist/modules/phone.d.ts +61 -0
  103. package/dist/modules/phone.d.ts.map +1 -0
  104. package/dist/modules/phone.js +94 -0
  105. package/dist/modules/phone.js.map +1 -0
  106. package/dist/modules/pivots/engine.d.ts +169 -0
  107. package/dist/modules/pivots/engine.d.ts.map +1 -0
  108. package/dist/modules/pivots/engine.js +779 -0
  109. package/dist/modules/pivots/engine.js.map +1 -0
  110. package/dist/modules/pivots/geometry.d.ts +84 -0
  111. package/dist/modules/pivots/geometry.d.ts.map +1 -0
  112. package/dist/modules/pivots/geometry.js +371 -0
  113. package/dist/modules/pivots/geometry.js.map +1 -0
  114. package/dist/modules/pivots/instructions.d.ts +139 -0
  115. package/dist/modules/pivots/instructions.d.ts.map +1 -0
  116. package/dist/modules/pivots/instructions.js +280 -0
  117. package/dist/modules/pivots/instructions.js.map +1 -0
  118. package/dist/modules/speaker.d.ts +163 -0
  119. package/dist/modules/speaker.d.ts.map +1 -0
  120. package/dist/modules/speaker.js +250 -0
  121. package/dist/modules/speaker.js.map +1 -0
  122. package/dist/modules/storage.d.ts +50 -0
  123. package/dist/modules/storage.d.ts.map +1 -0
  124. package/dist/modules/storage.js +99 -0
  125. package/dist/modules/storage.js.map +1 -0
  126. package/dist/modules/stream.d.ts +129 -0
  127. package/dist/modules/stream.d.ts.map +1 -0
  128. package/dist/modules/stream.js +52 -0
  129. package/dist/modules/stream.js.map +1 -0
  130. package/dist/modules/system.d.ts +45 -0
  131. package/dist/modules/system.d.ts.map +1 -0
  132. package/dist/modules/system.js +42 -0
  133. package/dist/modules/system.js.map +1 -0
  134. package/dist/modules/transcription.d.ts +67 -0
  135. package/dist/modules/transcription.d.ts.map +1 -0
  136. package/dist/modules/transcription.js +106 -0
  137. package/dist/modules/transcription.js.map +1 -0
  138. package/dist/modules/translation.d.ts +59 -0
  139. package/dist/modules/translation.d.ts.map +1 -0
  140. package/dist/modules/translation.js +119 -0
  141. package/dist/modules/translation.js.map +1 -0
  142. package/dist/modules/ui.d.ts +186 -0
  143. package/dist/modules/ui.d.ts.map +1 -0
  144. package/dist/modules/ui.js +293 -0
  145. package/dist/modules/ui.js.map +1 -0
  146. package/dist/protocol.d.ts +294 -0
  147. package/dist/protocol.d.ts.map +1 -0
  148. package/dist/protocol.js +320 -0
  149. package/dist/protocol.js.map +1 -0
  150. package/dist/react/MentraProvider.d.ts +33 -0
  151. package/dist/react/MentraProvider.d.ts.map +1 -0
  152. package/dist/react/MentraProvider.js +15 -0
  153. package/dist/react/MentraProvider.js.map +1 -0
  154. package/dist/react/MiniappHeader.d.ts +44 -0
  155. package/dist/react/MiniappHeader.d.ts.map +1 -0
  156. package/dist/react/MiniappHeader.js +32 -0
  157. package/dist/react/MiniappHeader.js.map +1 -0
  158. package/dist/react/index.d.ts +13 -0
  159. package/dist/react/index.d.ts.map +1 -0
  160. package/dist/react/index.js +9 -0
  161. package/dist/react/index.js.map +1 -0
  162. package/dist/react/useCapabilities.d.ts +26 -0
  163. package/dist/react/useCapabilities.d.ts.map +1 -0
  164. package/dist/react/useCapabilities.js +27 -0
  165. package/dist/react/useCapabilities.js.map +1 -0
  166. package/dist/react/useCapsuleHeaderStyle.d.ts +27 -0
  167. package/dist/react/useCapsuleHeaderStyle.d.ts.map +1 -0
  168. package/dist/react/useCapsuleHeaderStyle.js +36 -0
  169. package/dist/react/useCapsuleHeaderStyle.js.map +1 -0
  170. package/dist/react/useColorScheme.d.ts +18 -0
  171. package/dist/react/useColorScheme.d.ts.map +1 -0
  172. package/dist/react/useColorScheme.js +24 -0
  173. package/dist/react/useColorScheme.js.map +1 -0
  174. package/dist/react/useConnected.d.ts +17 -0
  175. package/dist/react/useConnected.d.ts.map +1 -0
  176. package/dist/react/useConnected.js +39 -0
  177. package/dist/react/useConnected.js.map +1 -0
  178. package/dist/react/useRpc.d.ts +29 -0
  179. package/dist/react/useRpc.d.ts.map +1 -0
  180. package/dist/react/useRpc.js +82 -0
  181. package/dist/react/useRpc.js.map +1 -0
  182. package/dist/react/useSafeArea.d.ts +21 -0
  183. package/dist/react/useSafeArea.d.ts.map +1 -0
  184. package/dist/react/useSafeArea.js +22 -0
  185. package/dist/react/useSafeArea.js.map +1 -0
  186. package/dist/session.d.ts +310 -0
  187. package/dist/session.d.ts.map +1 -0
  188. package/dist/session.js +653 -0
  189. package/dist/session.js.map +1 -0
  190. package/dist/sub-path-types.test-d.d.ts +28 -0
  191. package/dist/sub-path-types.test-d.d.ts.map +1 -0
  192. package/dist/sub-path-types.test-d.js +37 -0
  193. package/dist/sub-path-types.test-d.js.map +1 -0
  194. package/dist/transport/auto.d.ts +35 -0
  195. package/dist/transport/auto.d.ts.map +1 -0
  196. package/dist/transport/auto.js +125 -0
  197. package/dist/transport/auto.js.map +1 -0
  198. package/dist/transport/dispatch.d.ts +43 -0
  199. package/dist/transport/dispatch.d.ts.map +1 -0
  200. package/dist/transport/dispatch.js +91 -0
  201. package/dist/transport/dispatch.js.map +1 -0
  202. package/dist/transport/local-socket.d.ts +28 -0
  203. package/dist/transport/local-socket.d.ts.map +1 -0
  204. package/dist/transport/local-socket.js +80 -0
  205. package/dist/transport/local-socket.js.map +1 -0
  206. package/dist/transport/mock.d.ts +54 -0
  207. package/dist/transport/mock.d.ts.map +1 -0
  208. package/dist/transport/mock.js +205 -0
  209. package/dist/transport/mock.js.map +1 -0
  210. package/dist/transport/postmessage.d.ts +36 -0
  211. package/dist/transport/postmessage.d.ts.map +1 -0
  212. package/dist/transport/postmessage.js +78 -0
  213. package/dist/transport/postmessage.js.map +1 -0
  214. package/dist/transport/types.d.ts +25 -0
  215. package/dist/transport/types.d.ts.map +1 -0
  216. package/dist/transport/types.js +11 -0
  217. package/dist/transport/types.js.map +1 -0
  218. package/dist/ui/index.d.ts +98 -0
  219. package/dist/ui/index.d.ts.map +1 -0
  220. package/dist/ui/index.js +32 -0
  221. package/dist/ui/index.js.map +1 -0
  222. package/package.json +75 -0
  223. package/src/background/index.ts +152 -0
  224. package/src/background/register.ts +85 -0
  225. package/src/dev-reload.ts +60 -0
  226. package/src/envelope.ts +54 -0
  227. package/src/globals.ts +62 -0
  228. package/src/index.ts +171 -0
  229. package/src/modules/actions.ts +156 -0
  230. package/src/modules/auth.ts +68 -0
  231. package/src/modules/base64.ts +87 -0
  232. package/src/modules/blob.ts +341 -0
  233. package/src/modules/camera.ts +196 -0
  234. package/src/modules/cloud.ts +94 -0
  235. package/src/modules/dashboard.ts +31 -0
  236. package/src/modules/display.ts +122 -0
  237. package/src/modules/events.ts +264 -0
  238. package/src/modules/glasses.ts +44 -0
  239. package/src/modules/heading.ts +23 -0
  240. package/src/modules/imu.ts +44 -0
  241. package/src/modules/input.ts +71 -0
  242. package/src/modules/led.ts +61 -0
  243. package/src/modules/location.ts +39 -0
  244. package/src/modules/mic.ts +74 -0
  245. package/src/modules/miniapps.ts +90 -0
  246. package/src/modules/navigation.ts +670 -0
  247. package/src/modules/permissions.ts +84 -0
  248. package/src/modules/phone.ts +120 -0
  249. package/src/modules/pivots/engine.ts +863 -0
  250. package/src/modules/pivots/geometry.ts +409 -0
  251. package/src/modules/pivots/instructions.ts +343 -0
  252. package/src/modules/speaker.ts +328 -0
  253. package/src/modules/storage.ts +109 -0
  254. package/src/modules/stream.ts +163 -0
  255. package/src/modules/system.ts +76 -0
  256. package/src/modules/transcription.ts +128 -0
  257. package/src/modules/translation.ts +149 -0
  258. package/src/modules/ui.ts +498 -0
  259. package/src/protocol.ts +371 -0
  260. package/src/react/MentraProvider.tsx +50 -0
  261. package/src/react/MiniappHeader.tsx +122 -0
  262. package/src/react/index.ts +12 -0
  263. package/src/react/useCapabilities.ts +29 -0
  264. package/src/react/useCapsuleHeaderStyle.ts +54 -0
  265. package/src/react/useColorScheme.ts +26 -0
  266. package/src/react/useConnected.ts +47 -0
  267. package/src/react/useRpc.ts +106 -0
  268. package/src/react/useSafeArea.ts +40 -0
  269. package/src/session.ts +878 -0
  270. package/src/sub-path-types.test-d.ts +49 -0
  271. package/src/transport/auto.ts +143 -0
  272. package/src/transport/dispatch.ts +106 -0
  273. package/src/transport/local-socket.ts +93 -0
  274. package/src/transport/mock.ts +248 -0
  275. package/src/transport/postmessage.ts +95 -0
  276. package/src/transport/types.ts +26 -0
  277. package/src/ui/index.ts +122 -0
@@ -0,0 +1,320 @@
1
+ /**
2
+ * @fileoverview Wire protocol for @mentra/miniapp.
3
+ *
4
+ * Fresh miniapp-naming enum values. No legacy tpa_/app_/applet_ prefixes.
5
+ * These values are the contract between @mentra/miniapp (running in a WebView)
6
+ * and LocalMiniappRuntime (running on the phone).
7
+ *
8
+ * IMPORTANT: This file has NO runtime dependency on @mentra/sdk. The cloud SDK's
9
+ * wire protocol enums live in @mentra/sdk/types/message-types.ts and are used
10
+ * for cloud↔app communication, not phone↔miniapp.
11
+ */
12
+ // ============================================================================
13
+ // Miniapp → phone (request, via bridge envelope)
14
+ // ============================================================================
15
+ export var MiniappRequestType;
16
+ (function (MiniappRequestType) {
17
+ /** Handshake: miniapp announces itself and asks phone to bind the session. */
18
+ MiniappRequestType["CONNECT"] = "miniapp_connect";
19
+ /** Request a fresh miniapp-scoped backend auth token. */
20
+ MiniappRequestType["AUTH_REFRESH"] = "miniapp_auth_refresh";
21
+ /** Update the set of streams the miniapp is subscribed to. */
22
+ MiniappRequestType["SUBSCRIBE"] = "miniapp_subscribe";
23
+ /**
24
+ * Push a legacy display layout to the glasses. The SDK no longer emits this
25
+ * (render()/RENDER replaced it); hosts keep accepting it from bundles packed
26
+ * with older SDKs and from cloud-shaped layouts.
27
+ */
28
+ MiniappRequestType["DISPLAY"] = "miniapp_display";
29
+ /** Render a whole scene of positioned elements (replace-the-frame). */
30
+ MiniappRequestType["RENDER"] = "miniapp_render";
31
+ /** Play an arbitrary audio URL through the phone's audio playback service. */
32
+ MiniappRequestType["PLAY_AUDIO"] = "miniapp_play_audio";
33
+ /** Stop any audio playback this miniapp initiated. */
34
+ MiniappRequestType["STOP_AUDIO"] = "miniapp_stop_audio";
35
+ /** Speak text via cloud TTS — phone constructs the URL. */
36
+ MiniappRequestType["SPEAK"] = "miniapp_speak";
37
+ /**
38
+ * Live PCM output stream to the phone's audio playback service
39
+ * (speaker.createStream). OPEN provisions a native chunk player; WRITE
40
+ * appends base64 PCM (replies with {bufferedMs} for backpressure); CLOSE
41
+ * drains and finishes; ABORT drops immediately.
42
+ */
43
+ MiniappRequestType["SPEAKER_STREAM_OPEN"] = "miniapp_speaker_stream_open";
44
+ MiniappRequestType["SPEAKER_STREAM_WRITE"] = "miniapp_speaker_stream_write";
45
+ MiniappRequestType["SPEAKER_STREAM_CLOSE"] = "miniapp_speaker_stream_close";
46
+ MiniappRequestType["SPEAKER_STREAM_ABORT"] = "miniapp_speaker_stream_abort";
47
+ /** Control the glasses RGB LED. */
48
+ MiniappRequestType["RGB_LED"] = "miniapp_rgb_led";
49
+ /** One-shot location poll. */
50
+ MiniappRequestType["LOCATION_POLL"] = "miniapp_location_poll";
51
+ /** Start a turn-by-turn navigation trip. Android only. */
52
+ MiniappRequestType["NAVIGATION_START"] = "miniapp_navigation_start";
53
+ /** Stop the active navigation trip (if any). */
54
+ MiniappRequestType["NAVIGATION_STOP"] = "miniapp_navigation_stop";
55
+ /** Dev-only: nudge the simulator off-route to test rerouting. Android sim only. */
56
+ MiniappRequestType["NAVIGATION_DEVIATE"] = "miniapp_navigation_deviate";
57
+ /** Dev-only: lock simulated locations to the wrong sidewalk for pivot-trigger testing. */
58
+ MiniappRequestType["NAVIGATION_SET_WRONG_SIDEWALK"] = "miniapp_navigation_set_wrong_sidewalk";
59
+ /** Dev-only: take over the simulator and walk a polyline with crossings stripped. */
60
+ MiniappRequestType["NAVIGATION_SET_SKIP_CROSSINGS"] = "miniapp_navigation_set_skip_crossings";
61
+ /** Snapshot of the active trip (or null). Lets a miniapp opening mid-trip hydrate. */
62
+ MiniappRequestType["NAVIGATION_GET_STATE"] = "miniapp_navigation_get_state";
63
+ /** Compute a route without starting a trip. Replaces hand-rolled Directions calls. */
64
+ MiniappRequestType["NAVIGATION_COMPUTE_ROUTE"] = "miniapp_navigation_compute_route";
65
+ /** Reverse-geocode a coordinate to a short road name + full formatted
66
+ * address. `road` backs the engine's fallback for pivots whose Routes-API
67
+ * instruction didn't include a parseable road; `address` backs UI labels for
68
+ * dropped pins / POI taps. Resolved in the v2 cloud maps service (Mapbox
69
+ * today) via the host bridge — the miniapp never holds a maps token. */
70
+ MiniappRequestType["NAVIGATION_REVERSE_GEOCODE"] = "miniapp_navigation_reverse_geocode";
71
+ /** Type-ahead place search (autocomplete). Resolved in the v2 cloud maps
72
+ * service (Mapbox Search Box today) via the host bridge — the miniapp never
73
+ * holds a maps token. Pairs with NAVIGATION_PLACE_DETAILS via a sessionToken. */
74
+ MiniappRequestType["NAVIGATION_PLACE_AUTOCOMPLETE"] = "miniapp_navigation_place_autocomplete";
75
+ /** Resolve an autocomplete suggestion (placeId + sessionToken) to coordinates,
76
+ * in the v2 cloud maps service via the host bridge. */
77
+ MiniappRequestType["NAVIGATION_PLACE_DETAILS"] = "miniapp_navigation_place_details";
78
+ /** Trigger the Google Nav SDK T&C dialog up-front so start() doesn't have to. */
79
+ MiniappRequestType["NAVIGATION_REQUEST_PERMISSION"] = "miniapp_navigation_request_permission";
80
+ /** Phone-local simple storage. */
81
+ MiniappRequestType["STORAGE_GET"] = "miniapp_storage_get";
82
+ MiniappRequestType["STORAGE_SET"] = "miniapp_storage_set";
83
+ MiniappRequestType["STORAGE_DELETE"] = "miniapp_storage_delete";
84
+ MiniappRequestType["STORAGE_LIST"] = "miniapp_storage_list";
85
+ MiniappRequestType["STORAGE_CLEAR"] = "miniapp_storage_clear";
86
+ MiniappRequestType["STORAGE_HAS"] = "miniapp_storage_has";
87
+ MiniappRequestType["STORAGE_GET_ALL"] = "miniapp_storage_get_all";
88
+ MiniappRequestType["STORAGE_SET_MULTIPLE"] = "miniapp_storage_set_multiple";
89
+ MiniappRequestType["STORAGE_FLUSH"] = "miniapp_storage_flush";
90
+ /** Write camera FOV settings. */
91
+ MiniappRequestType["CAMERA_FOV"] = "miniapp_camera_fov";
92
+ /** Pre-warm the glasses camera so the next takePhoto() is near-instant. */
93
+ MiniappRequestType["CAMERA_WARM_UP"] = "miniapp_camera_warm_up";
94
+ /**
95
+ * Enable/disable raw accelerometer (IMU) streaming on the glasses. The
96
+ * accel stream also auto-enables on subscribe; this is an explicit override
97
+ * for callers who want to control the sensor directly. G2 only today.
98
+ */
99
+ MiniappRequestType["IMU_SET_ENABLED"] = "miniapp_imu_set_enabled";
100
+ /** Share content via the OS share sheet. */
101
+ MiniappRequestType["SHARE"] = "miniapp_share";
102
+ /** Open a URL in the system browser. */
103
+ MiniappRequestType["OPEN_URL"] = "miniapp_open_url";
104
+ /** Copy text to the system clipboard. */
105
+ MiniappRequestType["COPY_CLIPBOARD"] = "miniapp_copy_clipboard";
106
+ /** Download a file (triggers OS share sheet for save location). */
107
+ MiniappRequestType["DOWNLOAD"] = "miniapp_download";
108
+ /**
109
+ * Phone-local persistent binary blob storage, scoped to (userId, packageName).
110
+ * Unlike STORAGE_* (small string KV in MMKV), blobs are arbitrary bytes written
111
+ * to the phone filesystem. Large payloads are moved in chunks (BLOB_WRITE /
112
+ * BLOB_READ) so a single bridge message never carries a multi-MB string.
113
+ */
114
+ MiniappRequestType["BLOB_CREATE"] = "miniapp_blob_create";
115
+ MiniappRequestType["BLOB_WRITE"] = "miniapp_blob_write";
116
+ MiniappRequestType["BLOB_COMMIT"] = "miniapp_blob_commit";
117
+ MiniappRequestType["BLOB_ABORT"] = "miniapp_blob_abort";
118
+ MiniappRequestType["BLOB_GET"] = "miniapp_blob_get";
119
+ MiniappRequestType["BLOB_LIST"] = "miniapp_blob_list";
120
+ MiniappRequestType["BLOB_DELETE"] = "miniapp_blob_delete";
121
+ MiniappRequestType["BLOB_CLEAR"] = "miniapp_blob_clear";
122
+ MiniappRequestType["BLOB_USAGE"] = "miniapp_blob_usage";
123
+ MiniappRequestType["BLOB_OPEN_READ"] = "miniapp_blob_open_read";
124
+ MiniappRequestType["BLOB_READ"] = "miniapp_blob_read";
125
+ MiniappRequestType["BLOB_CLOSE_READ"] = "miniapp_blob_close_read";
126
+ /** Download a URL straight into a blob, host-side (no bytes cross the bridge). */
127
+ MiniappRequestType["BLOB_SET_FROM_URL"] = "miniapp_blob_set_from_url";
128
+ /** Open the OS file picker and import the chosen file into a blob, host-side. */
129
+ MiniappRequestType["BLOB_IMPORT"] = "miniapp_blob_import";
130
+ /** Share a stored blob from disk via the OS share sheet (no bytes cross the bridge). */
131
+ MiniappRequestType["BLOB_SHARE"] = "miniapp_blob_share";
132
+ /** Phone → miniapp liveness probe. Miniapp SDK auto-replies with PONG. */
133
+ MiniappRequestType["PING"] = "miniapp_ping";
134
+ /**
135
+ * Apply transcription configuration (language hints, vocabulary, diarization).
136
+ * Phone forwards to the cloud STT layer. Fire-and-forget; cached client-side
137
+ * so future reconnect logic can re-send.
138
+ */
139
+ MiniappRequestType["TRANSCRIPTION_CONFIG"] = "miniapp_transcription_config";
140
+ // ----- Deferred in v1 -----
141
+ /** Dashboard content update. Noop in v1. */
142
+ MiniappRequestType["DASHBOARD_CONTENT_UPDATE"] = "miniapp_dashboard_content_update";
143
+ // ----- Photos, streaming -----
144
+ MiniappRequestType["PHOTO"] = "miniapp_photo";
145
+ MiniappRequestType["VIDEO_RECORDING_START"] = "miniapp_video_recording_start";
146
+ MiniappRequestType["VIDEO_RECORDING_STOP"] = "miniapp_video_recording_stop";
147
+ MiniappRequestType["STREAM_START"] = "miniapp_stream_start";
148
+ MiniappRequestType["STREAM_STOP"] = "miniapp_stream_stop";
149
+ MiniappRequestType["MANAGED_STREAM_START"] = "miniapp_managed_stream_start";
150
+ MiniappRequestType["MANAGED_STREAM_STOP"] = "miniapp_managed_stream_stop";
151
+ /** Ask the host to open the glasses Wi-Fi setup flow (mirrors the cloud SDK's requestWifiSetup). */
152
+ MiniappRequestType["REQUEST_WIFI_SETUP"] = "miniapp_request_wifi_setup";
153
+ // ----- Inter-miniapp interop (SYSTEM apps only) -----
154
+ /** List installed miniapps (compatibility-filtered, with declared actions). */
155
+ MiniappRequestType["MINIAPPS_LIST"] = "miniapp_apps_list";
156
+ /** Start another miniapp (user-tap semantics). */
157
+ MiniappRequestType["MINIAPPS_START"] = "miniapp_apps_start";
158
+ /** Stop another miniapp. */
159
+ MiniappRequestType["MINIAPPS_STOP"] = "miniapp_apps_stop";
160
+ /** Invoke a declared action on another miniapp; headless-wakes it if stopped. */
161
+ MiniappRequestType["ACTION_INVOKE"] = "miniapp_action_invoke";
162
+ /** Target → host: the result of a delivered ACTION_CALL, correlated by callId. */
163
+ MiniappRequestType["ACTION_RESULT"] = "miniapp_action_result";
164
+ })(MiniappRequestType || (MiniappRequestType = {}));
165
+ // ============================================================================
166
+ // Phone → miniapp (response or push)
167
+ // ============================================================================
168
+ export var MiniappResponseType;
169
+ (function (MiniappResponseType) {
170
+ /** Response to CONNECT carrying userId, packageName, capabilities. */
171
+ MiniappResponseType["CONNECT_ACK"] = "miniapp_connect_ack";
172
+ /** Push: a streamed event for a subscribed stream. */
173
+ MiniappResponseType["EVENT"] = "miniapp_event";
174
+ /** Response to any request that needs a result (matched by requestId). */
175
+ MiniappResponseType["REQUEST_RESULT"] = "miniapp_request_result";
176
+ /** Push: glasses capabilities changed. */
177
+ MiniappResponseType["CAPABILITIES_UPDATE"] = "miniapp_capabilities_update";
178
+ /** Push: miniapp's foreground/background state changed. */
179
+ MiniappResponseType["VISIBILITY_CHANGE"] = "miniapp_visibility_change";
180
+ /** Push: host color scheme (light/dark) changed. */
181
+ MiniappResponseType["COLOR_SCHEME_CHANGE"] = "miniapp_color_scheme_change";
182
+ /**
183
+ * Push: speaker playback state transitioned. Per-miniapp; the runtime sends
184
+ * to the owning miniapp only. Carries {state, errorCode?, errorMessage?,
185
+ * durationMs?}. See SpeakerModule.onStateChange().
186
+ */
187
+ MiniappResponseType["SPEAKER_STATE"] = "miniapp_speaker_state";
188
+ /**
189
+ * Push: manifest-declared permissions changed (e.g. dev miniapp re-scanned
190
+ * with updated manifest). Carries a full PermissionRecord. SDK caches it
191
+ * and fires session.permissions.onUpdate handlers.
192
+ */
193
+ MiniappResponseType["PERMISSIONS_UPDATE"] = "miniapp_permissions_update";
194
+ /**
195
+ * Push: miniapp-scoped backend auth token changed. Carries a token minted for
196
+ * this packageName only; it is never a Core or runtime access token.
197
+ */
198
+ MiniappResponseType["AUTH_UPDATE"] = "miniapp_auth_update";
199
+ /** Reply to PING. SDK auto-handles this; developers never see it. */
200
+ MiniappResponseType["PONG"] = "miniapp_pong";
201
+ /**
202
+ * Host → target: deliver an action call (from another miniapp's
203
+ * session.actions.invoke) to this miniapp's session.actions.handle handler.
204
+ * Carries {callId, actionId, params, callerPackageName}. The SDK runs the
205
+ * handler and replies with an ACTION_RESULT request keyed by callId.
206
+ */
207
+ MiniappResponseType["ACTION_CALL"] = "miniapp_action_call";
208
+ /**
209
+ * Push: phone is about to tear down the miniapp's session. Gives the SDK
210
+ * a brief window (~50ms grace on the phone side) to fire one last
211
+ * `sendOneShot` before the transport closes — used to flush final
212
+ * cleanup like `display.render([])`. Synchronous handlers only.
213
+ */
214
+ MiniappResponseType["WILL_DISCONNECT"] = "miniapp_will_disconnect";
215
+ /** Async error not tied to a specific request. */
216
+ MiniappResponseType["ERROR"] = "miniapp_error";
217
+ })(MiniappResponseType || (MiniappResponseType = {}));
218
+ // ============================================================================
219
+ // Stream types a miniapp can subscribe to
220
+ // ============================================================================
221
+ export var MiniappStreamType;
222
+ (function (MiniappStreamType) {
223
+ // Hardware / input events
224
+ MiniappStreamType["BUTTON_PRESS"] = "button_press";
225
+ MiniappStreamType["TOUCH_EVENT"] = "touch_event";
226
+ MiniappStreamType["HEAD_POSITION"] = "head_position";
227
+ /**
228
+ * Raw accelerometer reading from the glasses IMU — `{x, y, z}` in g, plus a
229
+ * timestamp. G2 only today. A richer combined IMU stream (accel + gyro +
230
+ * magnetometer) is future work; this is the single-sensor precursor.
231
+ */
232
+ MiniappStreamType["ACCEL_DATA"] = "accel_data";
233
+ // Status
234
+ MiniappStreamType["GLASSES_BATTERY"] = "glasses_battery";
235
+ MiniappStreamType["PHONE_BATTERY"] = "phone_battery";
236
+ MiniappStreamType["GLASSES_CONNECTION"] = "glasses_connection";
237
+ /** Glasses Wi-Fi state (connected/ssid). Glasses with Wi-Fi only; needed for streaming. */
238
+ MiniappStreamType["GLASSES_WIFI"] = "glasses_wifi";
239
+ // Speech / audio (cloud or local)
240
+ MiniappStreamType["TRANSCRIPTION"] = "transcription";
241
+ MiniappStreamType["TRANSLATION"] = "translation";
242
+ MiniappStreamType["AUDIO_CHUNK"] = "audio_chunk";
243
+ MiniappStreamType["VAD"] = "vad";
244
+ // Phone sensors
245
+ MiniappStreamType["LOCATION_UPDATE"] = "location_update";
246
+ /** Compass heading in degrees (0=N, 90=E). Android only. */
247
+ MiniappStreamType["HEADING_UPDATE"] = "heading_update";
248
+ /** Turn-by-turn navigation event (maneuver / rerouting / arrived / error). */
249
+ MiniappStreamType["NAVIGATION_UPDATE"] = "navigation_update";
250
+ /** Active navigation route polyline — full path, fired once per route build. */
251
+ MiniappStreamType["NAVIGATION_ROUTE"] = "navigation_route";
252
+ MiniappStreamType["PHONE_NOTIFICATION"] = "phone_notification";
253
+ /**
254
+ * A previously-posted notification was dismissed by the user.
255
+ *
256
+ * Android-only today. iOS does not expose dismiss callbacks to apps
257
+ * (Apple privacy restriction); subscribing on iOS succeeds but no events
258
+ * fire. See agents/miniapp-speaker-state-and-notif-dismissed-plan.md.
259
+ */
260
+ MiniappStreamType["PHONE_NOTIFICATION_DISMISSED"] = "phone_notification_dismissed";
261
+ MiniappStreamType["CALENDAR_EVENT"] = "calendar_event";
262
+ // Photos, streaming
263
+ MiniappStreamType["PHOTO_TAKEN"] = "photo_taken";
264
+ MiniappStreamType["STREAM_STATUS"] = "stream_status";
265
+ })(MiniappStreamType || (MiniappStreamType = {}));
266
+ // ============================================================================
267
+ // Error codes
268
+ // ============================================================================
269
+ export var MiniappErrorCode;
270
+ (function (MiniappErrorCode) {
271
+ /** Request arguments failed host-side validation. */
272
+ MiniappErrorCode["INVALID_ARGUMENT"] = "INVALID_ARGUMENT";
273
+ /** The miniapp subscribed to a stream whose required permission wasn't in its manifest. */
274
+ MiniappErrorCode["PERMISSION_NOT_DECLARED"] = "PERMISSION_NOT_DECLARED";
275
+ /** Request routed to a method that isn't supported yet. */
276
+ MiniappErrorCode["NOT_IMPLEMENTED"] = "NOT_IMPLEMENTED";
277
+ /** Request timed out or the session was torn down before it could complete. */
278
+ MiniappErrorCode["REQUEST_ABORTED"] = "REQUEST_ABORTED";
279
+ /** Phone-side code path threw. Check `message`. */
280
+ MiniappErrorCode["INTERNAL"] = "INTERNAL";
281
+ /** Cloud TTS returned a non-2xx for a SPEAK request. */
282
+ MiniappErrorCode["TTS_TEXT_TOO_LONG"] = "TTS_TEXT_TOO_LONG";
283
+ MiniappErrorCode["TTS_INVALID_VOICE"] = "TTS_INVALID_VOICE";
284
+ MiniappErrorCode["TTS_UPSTREAM_ERROR"] = "TTS_UPSTREAM_ERROR";
285
+ /** Not connected / pre-ACK and transport closed. */
286
+ MiniappErrorCode["NOT_CONNECTED"] = "NOT_CONNECTED";
287
+ // ----- Inter-miniapp interop -----
288
+ /** Caller is not a system app — interop APIs (list/start/stop/invoke) are SYSTEM-only. */
289
+ MiniappErrorCode["NOT_PERMITTED"] = "NOT_PERMITTED";
290
+ /** Target miniapp is not installed. */
291
+ MiniappErrorCode["APP_NOT_FOUND"] = "APP_NOT_FOUND";
292
+ /** Target miniapp is incompatible with the connected glasses. */
293
+ MiniappErrorCode["APP_NOT_COMPATIBLE"] = "APP_NOT_COMPATIBLE";
294
+ /** Target miniapp does not declare the requested action. */
295
+ MiniappErrorCode["ACTION_NOT_FOUND"] = "ACTION_NOT_FOUND";
296
+ /** Target connected but never registered a handler for the action (within the buffer window). */
297
+ MiniappErrorCode["NO_ACTION_HANDLER"] = "NO_ACTION_HANDLER";
298
+ /** Target failed to wake / complete its CONNECT handshake for an invoke. */
299
+ MiniappErrorCode["WAKE_FAILED"] = "WAKE_FAILED";
300
+ /** Action handler did not return within the caller's timeout. */
301
+ MiniappErrorCode["ACTION_TIMEOUT"] = "ACTION_TIMEOUT";
302
+ /** Action params or result exceeded the 256 KB size cap. */
303
+ MiniappErrorCode["PAYLOAD_TOO_LARGE"] = "PAYLOAD_TOO_LARGE";
304
+ // ----- Blob storage / recorder -----
305
+ /** No blob with the given id in this miniapp's namespace. */
306
+ MiniappErrorCode["BLOB_NOT_FOUND"] = "BLOB_NOT_FOUND";
307
+ /** Writing this blob would exceed the per-app blob quota. */
308
+ MiniappErrorCode["BLOB_QUOTA_EXCEEDED"] = "BLOB_QUOTA_EXCEEDED";
309
+ /** Blob is larger than the requested in-memory read can hold. */
310
+ MiniappErrorCode["BLOB_TOO_LARGE"] = "BLOB_TOO_LARGE";
311
+ /** Write/read handle is unknown, already settled, or belongs to another app. */
312
+ MiniappErrorCode["BLOB_HANDLE_INVALID"] = "BLOB_HANDLE_INVALID";
313
+ /** Filesystem write failed (out of disk, permissions, etc.). */
314
+ MiniappErrorCode["BLOB_WRITE_FAILED"] = "BLOB_WRITE_FAILED";
315
+ /** `blob.setFromUrl` could not download the URL (network / non-2xx). */
316
+ MiniappErrorCode["BLOB_DOWNLOAD_FAILED"] = "BLOB_DOWNLOAD_FAILED";
317
+ /** `blob.importFile` failed (not the user cancelling — that resolves to null). */
318
+ MiniappErrorCode["BLOB_IMPORT_FAILED"] = "BLOB_IMPORT_FAILED";
319
+ })(MiniappErrorCode || (MiniappErrorCode = {}));
320
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @fileoverview MentraProvider — optional root provider for miniapp apps.
3
+ *
4
+ * Opt-in conveniences that would otherwise require boilerplate in every
5
+ * miniapp. Currently:
6
+ * - Keeps `<html class="dark">` in sync with the host's color scheme so the
7
+ * shared theme CSS switches automatically.
8
+ *
9
+ * Usage:
10
+ * createRoot(root).render(
11
+ * <MentraProvider>
12
+ * <App />
13
+ * </MentraProvider>
14
+ * )
15
+ *
16
+ * Each convenience is controllable via props so miniapps that manage these
17
+ * things themselves can opt out without forking the provider.
18
+ */
19
+ import { type ReactNode } from "react";
20
+ export interface MentraProviderProps {
21
+ children: ReactNode;
22
+ /**
23
+ * Toggle `document.documentElement.classList` "dark" to match the host's
24
+ * current color scheme. The toggle runs synchronously during render so
25
+ * children paint with the correct class on first mount — no flash.
26
+ *
27
+ * Default: true. Set to false if your app owns the `dark` class itself
28
+ * (e.g. you integrate a theming library like next-themes).
29
+ */
30
+ syncColorScheme?: boolean;
31
+ }
32
+ export declare function MentraProvider({ children, syncColorScheme }: MentraProviderProps): import("react").JSX.Element;
33
+ //# sourceMappingURL=MentraProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MentraProvider.d.ts","sourceRoot":"","sources":["../../src/react/MentraProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAA;AAIpC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAA;IACnB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,wBAAgB,cAAc,CAAC,EAAC,QAAQ,EAAE,eAAsB,EAAC,EAAE,mBAAmB,+BAarF"}
@@ -0,0 +1,15 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useColorScheme } from "./useColorScheme";
3
+ export function MentraProvider({ children, syncColorScheme = true }) {
4
+ const scheme = useColorScheme();
5
+ // Runs during render — before children paint, before effects fire.
6
+ if (syncColorScheme && typeof document !== "undefined") {
7
+ const el = document.documentElement;
8
+ const shouldBeDark = scheme === "dark";
9
+ if (el.classList.contains("dark") !== shouldBeDark) {
10
+ el.classList.toggle("dark", shouldBeDark);
11
+ }
12
+ }
13
+ return _jsx(_Fragment, { children: children });
14
+ }
15
+ //# sourceMappingURL=MentraProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MentraProvider.js","sourceRoot":"","sources":["../../src/react/MentraProvider.tsx"],"names":[],"mappings":";AAqBA,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAe/C,MAAM,UAAU,cAAc,CAAC,EAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,EAAsB;IACpF,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAE/B,mEAAmE;IACnE,IAAI,eAAe,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACvD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAA;QACnC,MAAM,YAAY,GAAG,MAAM,KAAK,MAAM,CAAA;QACtC,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,YAAY,EAAE,CAAC;YACnD,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,4BAAG,QAAQ,GAAI,CAAA;AACxB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @fileoverview MiniappHeader — drop-in header component that aligns with
3
+ * the host's floating capsule menu.
4
+ *
5
+ * The header has three slots: `left`, `title`, and `right`. Content auto-
6
+ * respects the safe area and leaves room for the capsule menu on the far
7
+ * top-right. Typical usage:
8
+ *
9
+ * <MiniappHeader
10
+ * title="My Miniapp"
11
+ * left={<BackButton onClick={goBack} />}
12
+ * right={<Badge>Connected</Badge>}
13
+ * />
14
+ *
15
+ * If `title` is a string it renders as a semantic <h1>. Pass a ReactNode if
16
+ * you need custom styling. The component itself is unstyled beyond the
17
+ * layout — use `className` or `style` for theming.
18
+ */
19
+ import type { CSSProperties, ReactNode } from "react";
20
+ import { type UseCapsuleHeaderStyleOptions } from "./useCapsuleHeaderStyle";
21
+ export interface MiniappHeaderProps extends UseCapsuleHeaderStyleOptions {
22
+ /** Title — string renders as <h1>; pass a node for custom markup. */
23
+ title?: ReactNode;
24
+ /** Left slot, typically a back button or logo. Overrides onBack if both set. */
25
+ left?: ReactNode;
26
+ /**
27
+ * Shortcut: when provided, renders a back chevron in the left slot that
28
+ * calls this handler. Ignored if `left` is explicitly set.
29
+ */
30
+ onBack?: () => void;
31
+ /** Right slot, typically a badge or action buttons. Sits to the left of the capsule. */
32
+ right?: ReactNode;
33
+ /** Custom className applied to the header element. */
34
+ className?: string;
35
+ /** Inline style overrides merged over the computed layout style. */
36
+ style?: CSSProperties;
37
+ /**
38
+ * When true, adds a 8px spacer <div> below the header so your next
39
+ * content doesn't sit flush against it. Default true.
40
+ */
41
+ bottomSpacer?: boolean;
42
+ }
43
+ export declare function MiniappHeader({ title, left, onBack, right, className, style, bottomSpacer, ...styleOptions }: MiniappHeaderProps): ReactNode;
44
+ //# sourceMappingURL=MiniappHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiniappHeader.d.ts","sourceRoot":"","sources":["../../src/react/MiniappHeader.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,OAAO,CAAA;AAEnD,OAAO,EAAwB,KAAK,4BAA4B,EAAC,MAAM,yBAAyB,CAAA;AAEhG,MAAM,WAAW,kBAAmB,SAAQ,4BAA4B;IACtE,qEAAqE;IACrE,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,gFAAgF;IAChF,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,wFAAwF;IACxF,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oEAAoE;IACpE,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAmCD,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,SAAS,EACT,KAAK,EACL,YAAmB,EACnB,GAAG,YAAY,EAChB,EAAE,kBAAkB,GAAG,SAAS,CAiChC"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCapsuleHeaderStyle } from "./useCapsuleHeaderStyle";
3
+ function BackChevron({ onBack }) {
4
+ return (_jsx("button", { type: "button", onClick: onBack, "aria-label": "Back", style: {
5
+ display: "inline-flex",
6
+ alignItems: "center",
7
+ justifyContent: "center",
8
+ width: 32,
9
+ height: 32,
10
+ marginLeft: -8,
11
+ padding: 0,
12
+ border: "none",
13
+ background: "transparent",
14
+ color: "inherit",
15
+ cursor: "pointer",
16
+ borderRadius: 8,
17
+ }, children: _jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: _jsx("path", { d: "M15 18l-6-6 6-6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }));
18
+ }
19
+ export function MiniappHeader({ title, left, onBack, right, className, style, bottomSpacer = true, ...styleOptions }) {
20
+ const computedStyle = useCapsuleHeaderStyle(styleOptions);
21
+ const resolvedLeft = left ?? (onBack ? _jsx(BackChevron, { onBack: onBack }) : null);
22
+ return (_jsxs(_Fragment, { children: [_jsxs("header", { className: className, style: { ...computedStyle, ...style }, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 10, minWidth: 0, flex: 1 }, children: [resolvedLeft, typeof title === "string" ? (_jsx("h1", { style: {
23
+ fontSize: 18,
24
+ fontWeight: 600,
25
+ lineHeight: 1,
26
+ margin: 0,
27
+ whiteSpace: "nowrap",
28
+ overflow: "hidden",
29
+ textOverflow: "ellipsis",
30
+ }, children: title })) : (title)] }), right ? (_jsx("div", { style: { display: "flex", alignItems: "center", gap: 8, flexShrink: 0 }, children: right })) : null] }), bottomSpacer ? _jsx("div", { style: { height: 8, flexShrink: 0 } }) : null] }));
31
+ }
32
+ //# sourceMappingURL=MiniappHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiniappHeader.js","sourceRoot":"","sources":["../../src/react/MiniappHeader.tsx"],"names":[],"mappings":";AAqBA,OAAO,EAAC,qBAAqB,EAAoC,MAAM,yBAAyB,CAAA;AAyBhG,SAAS,WAAW,CAAC,EAAC,MAAM,EAAuB;IACjD,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,gBACJ,MAAM,EACjB,KAAK,EAAE;YACL,OAAO,EAAE,aAAa;YACtB,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,CAAC,CAAC;YACd,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,aAAa;YACzB,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,CAAC;SAChB,YACD,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,iBAAa,MAAM,YAC5E,eACE,CAAC,EAAC,iBAAiB,EACnB,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,GAAG,EACf,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,GACtB,GACE,GACC,CACV,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,SAAS,EACT,KAAK,EACL,YAAY,GAAG,IAAI,EACnB,GAAG,YAAY,EACI;IACnB,MAAM,aAAa,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAA;IACzD,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,GAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAE9E,OAAO,CACL,8BACE,kBAAQ,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAC,GAAG,aAAa,EAAE,GAAG,KAAK,EAAC,aAC/D,eAAK,KAAK,EAAE,EAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAC,aAC/E,YAAY,EACZ,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC3B,aACE,KAAK,EAAE;oCACL,QAAQ,EAAE,EAAE;oCACZ,UAAU,EAAE,GAAG;oCACf,UAAU,EAAE,CAAC;oCACb,MAAM,EAAE,CAAC;oCACT,UAAU,EAAE,QAAQ;oCACpB,QAAQ,EAAE,QAAQ;oCAClB,YAAY,EAAE,UAAU;iCACzB,YACA,KAAK,GACH,CACN,CAAC,CAAC,CAAC,CACF,KAAK,CACN,IACG,EACL,KAAK,CAAC,CAAC,CAAC,CACP,cAAK,KAAK,EAAE,EAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAC,YAAG,KAAK,GAAO,CAC1F,CAAC,CAAC,CAAC,IAAI,IACD,EACR,YAAY,CAAC,CAAC,CAAC,cAAK,KAAK,EAAE,EAAC,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAC,GAAI,CAAC,CAAC,CAAC,IAAI,IAChE,CACJ,CAAA;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ export { useSafeArea } from "./useSafeArea";
2
+ export type { UseSafeAreaResult } from "./useSafeArea";
3
+ export { useColorScheme } from "./useColorScheme";
4
+ export { useCapabilities } from "./useCapabilities";
5
+ export { useConnected } from "./useConnected";
6
+ export { useCapsuleHeaderStyle } from "./useCapsuleHeaderStyle";
7
+ export type { UseCapsuleHeaderStyleOptions } from "./useCapsuleHeaderStyle";
8
+ export { MiniappHeader } from "./MiniappHeader";
9
+ export type { MiniappHeaderProps } from "./MiniappHeader";
10
+ export { MentraProvider } from "./MentraProvider";
11
+ export type { MentraProviderProps } from "./MentraProvider";
12
+ export { useRpc, type RpcCallable } from "./useRpc";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AACzC,YAAY,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAA;AACpD,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAA;AAC7D,YAAY,EAAC,4BAA4B,EAAC,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAC7C,YAAY,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAC/C,YAAY,EAAC,mBAAmB,EAAC,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAC,MAAM,EAAE,KAAK,WAAW,EAAC,MAAM,UAAU,CAAA"}
@@ -0,0 +1,9 @@
1
+ export { useSafeArea } from "./useSafeArea";
2
+ export { useColorScheme } from "./useColorScheme";
3
+ export { useCapabilities } from "./useCapabilities";
4
+ export { useConnected } from "./useConnected";
5
+ export { useCapsuleHeaderStyle } from "./useCapsuleHeaderStyle";
6
+ export { MiniappHeader } from "./MiniappHeader";
7
+ export { MentraProvider } from "./MentraProvider";
8
+ export { useRpc } from "./useRpc";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AAEzC,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAA;AAE7D,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAE7C,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAE/C,OAAO,EAAC,MAAM,EAAmB,MAAM,UAAU,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @fileoverview useCapabilities — React hook for the connected glasses'
3
+ * capability profile.
4
+ *
5
+ * The glasses `GlassesCapabilities` profile is *background-only* state: it
6
+ * arrives on the background `MiniappSession` (CONNECT_ACK / CAPABILITIES_UPDATE)
7
+ * and is never injected into the UI WebView, so there is no WebView-side source
8
+ * for it — this hook always returns `null`.
9
+ *
10
+ * If a UI page needs glasses capabilities, relay them from the background half
11
+ * over an app channel: read `session.capabilities` in a `session.ui.onOpen`
12
+ * handler, `session.ui.send("caps", ...)`, then read it in the UI with
13
+ * `mentra.on("caps", ...)`. See the example miniapp's `captions:snapshot`
14
+ * channel for the pattern.
15
+ *
16
+ * IMPORTANT: this hook must NOT construct a `MiniappSession`. That is the
17
+ * *background* (JSContext) API; inside a UI WebView its `CONNECT` never gets an
18
+ * ACK from the host's UI router and `session.connect()` times out
19
+ * ("CONNECT_ACK timeout") — the original reason this hook was rewritten.
20
+ *
21
+ * (Note: `window.MentraOS.capabilities` is a different thing — host *feature*
22
+ * flags like "share" / "open_url", not the glasses hardware profile.)
23
+ */
24
+ import { type GlassesCapabilities } from "../session";
25
+ export declare function useCapabilities(): GlassesCapabilities | null;
26
+ //# sourceMappingURL=useCapabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCapabilities.d.ts","sourceRoot":"","sources":["../../src/react/useCapabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAC,KAAK,mBAAmB,EAAC,MAAM,YAAY,CAAA;AAEnD,wBAAgB,eAAe,IAAI,mBAAmB,GAAG,IAAI,CAE5D"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @fileoverview useCapabilities — React hook for the connected glasses'
3
+ * capability profile.
4
+ *
5
+ * The glasses `GlassesCapabilities` profile is *background-only* state: it
6
+ * arrives on the background `MiniappSession` (CONNECT_ACK / CAPABILITIES_UPDATE)
7
+ * and is never injected into the UI WebView, so there is no WebView-side source
8
+ * for it — this hook always returns `null`.
9
+ *
10
+ * If a UI page needs glasses capabilities, relay them from the background half
11
+ * over an app channel: read `session.capabilities` in a `session.ui.onOpen`
12
+ * handler, `session.ui.send("caps", ...)`, then read it in the UI with
13
+ * `mentra.on("caps", ...)`. See the example miniapp's `captions:snapshot`
14
+ * channel for the pattern.
15
+ *
16
+ * IMPORTANT: this hook must NOT construct a `MiniappSession`. That is the
17
+ * *background* (JSContext) API; inside a UI WebView its `CONNECT` never gets an
18
+ * ACK from the host's UI router and `session.connect()` times out
19
+ * ("CONNECT_ACK timeout") — the original reason this hook was rewritten.
20
+ *
21
+ * (Note: `window.MentraOS.capabilities` is a different thing — host *feature*
22
+ * flags like "share" / "open_url", not the glasses hardware profile.)
23
+ */
24
+ export function useCapabilities() {
25
+ return null;
26
+ }
27
+ //# sourceMappingURL=useCapabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCapabilities.js","sourceRoot":"","sources":["../../src/react/useCapabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @fileoverview useCapsuleHeaderStyle — ready-to-spread React CSS props that
3
+ * vertically align a header row with the host's floating capsule menu.
4
+ *
5
+ * Use this when you want full control over header markup but want the
6
+ * alignment math done for you. If you just want a stock header, use
7
+ * <MiniappHeader> instead.
8
+ *
9
+ * Example:
10
+ * const style = useCapsuleHeaderStyle()
11
+ * <header style={style}>
12
+ * <h1>Hello</h1>
13
+ * </header>
14
+ */
15
+ import type { CSSProperties } from "react";
16
+ export interface UseCapsuleHeaderStyleOptions {
17
+ /** Extra left padding beyond the safe area. Default 20px. */
18
+ leftPadding?: number;
19
+ /** Extra space between the header content and the capsule menu. Default 16px. */
20
+ rightGap?: number;
21
+ /** Fallback header height when no capsule menu is present. Default 32px. */
22
+ fallbackHeight?: number;
23
+ /** Fallback top margin when no capsule menu is present. Default 16px. */
24
+ fallbackMarginTop?: number;
25
+ }
26
+ export declare function useCapsuleHeaderStyle(options?: UseCapsuleHeaderStyleOptions): CSSProperties;
27
+ //# sourceMappingURL=useCapsuleHeaderStyle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCapsuleHeaderStyle.d.ts","sourceRoot":"","sources":["../../src/react/useCapsuleHeaderStyle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,OAAO,CAAA;AAIxC,MAAM,WAAW,4BAA4B;IAC3C,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,4BAAiC,GACzC,aAAa,CAqBf"}