@mentra/engine 3.1.0-dev.98 → 3.1.1-beta.230

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 (40) hide show
  1. package/README.md +1 -1
  2. package/build/generated/releaseMetadata.js +6 -6
  3. package/build/generated/releaseMetadata.js.map +1 -1
  4. package/build/react/MentraLiveOtaFlow.d.ts.map +1 -1
  5. package/build/react/MentraLiveOtaFlow.js +65 -15
  6. package/build/react/MentraLiveOtaFlow.js.map +1 -1
  7. package/build/react/useMentraLiveOta.d.ts +9 -0
  8. package/build/react/useMentraLiveOta.d.ts.map +1 -1
  9. package/build/react/useMentraLiveOta.js +4 -0
  10. package/build/react/useMentraLiveOta.js.map +1 -1
  11. package/build/services/OtaArtifactDownloader.d.ts.map +1 -1
  12. package/build/services/OtaArtifactDownloader.js +10 -0
  13. package/build/services/OtaArtifactDownloader.js.map +1 -1
  14. package/build/services/OtaInstallCoordinator.d.ts +3 -0
  15. package/build/services/OtaInstallCoordinator.d.ts.map +1 -1
  16. package/build/services/OtaInstallCoordinator.js +12 -4
  17. package/build/services/OtaInstallCoordinator.js.map +1 -1
  18. package/build/services/OtaUpdateCheckService.d.ts +1 -1
  19. package/build/services/OtaUpdateCheckService.d.ts.map +1 -1
  20. package/build/services/OtaUpdateCheckService.js +5 -1
  21. package/build/services/OtaUpdateCheckService.js.map +1 -1
  22. package/build/services/PhoneStreamCoordinator.d.ts.map +1 -1
  23. package/build/services/PhoneStreamCoordinator.js +9 -6
  24. package/build/services/PhoneStreamCoordinator.js.map +1 -1
  25. package/build/stores/settings.d.ts.map +1 -1
  26. package/build/stores/settings.js +17 -2
  27. package/build/stores/settings.js.map +1 -1
  28. package/build/utils/devLogging.d.ts.map +1 -1
  29. package/build/utils/devLogging.js +0 -1
  30. package/build/utils/devLogging.js.map +1 -1
  31. package/package.json +7 -7
  32. package/src/generated/releaseMetadata.ts +6 -6
  33. package/src/react/MentraLiveOtaFlow.tsx +82 -14
  34. package/src/react/useMentraLiveOta.ts +9 -0
  35. package/src/services/OtaArtifactDownloader.ts +10 -0
  36. package/src/services/OtaInstallCoordinator.ts +13 -3
  37. package/src/services/OtaUpdateCheckService.ts +5 -1
  38. package/src/services/PhoneStreamCoordinator.ts +10 -6
  39. package/src/stores/settings.ts +17 -2
  40. package/src/utils/devLogging.ts +0 -1
package/README.md CHANGED
@@ -98,7 +98,7 @@ metadata and is not a completion marker.
98
98
  Customize presentation only. Engine must remain responsible for OTA ordering,
99
99
  hotspot staging, restart recovery, retries, and verification. The canonical
100
100
  stock and custom integration guide is
101
- [Update Mentra Live](https://docs.mentraglass.com/mentra-live/software-update).
101
+ [Update Mentra Live](https://docs.mentraglass.com/bluetooth-sdk/software-update).
102
102
 
103
103
  Released Engine packages contain a literal immutable OTA manifest URL and
104
104
  SHA-256 generated by coordinated release CI. Modern-glasses manifest selection
@@ -1,10 +1,10 @@
1
1
  export const ENGINE_RELEASE_METADATA = Object.freeze({
2
2
  "schemaVersion": 1,
3
- "familyBaseVersion": "3.1.0",
4
- "releaseIdentity": "3.1.0-dev.98",
5
- "releaseSetId": "mentra-3.1.0-dev.98",
6
- "sourceCommit": "a94462f1c85ea08a7c74e56640a0c277c5d66ac2",
7
- "otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.1.0/mentra-live-ota-3.1.0-dev.98.json",
8
- "otaManifestSha256": "91b45ddcb1e63ee53d6c2321cf94734ebf15b158b3cd95c7a73b4a850fa4c38e"
3
+ "familyBaseVersion": "3.1.1",
4
+ "releaseIdentity": "3.1.1-beta.230",
5
+ "releaseSetId": "mentra-3.1.1-beta.230",
6
+ "sourceCommit": "7e3a6599241f048f71f90d2164df84413e851115",
7
+ "otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.1.1/mentra-live-ota-3.1.1-beta.230.json",
8
+ "otaManifestSha256": "e19a72e6eafe9b2c6a472bdcb59f0d4b5fc6f0d69f8b21bed57ffb196cd1dd00"
9
9
  });
10
10
  //# sourceMappingURL=releaseMetadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,uBAAuB,GAAoC,MAAM,CAAC,MAAM,CAAC;IACpF,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,cAAc;IACjC,cAAc,EAAE,qBAAqB;IACrC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,uHAAuH;IACzI,mBAAmB,EAAE,kEAAkE;CACxF,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface EngineReleaseMetadata {\n schemaVersion: 1\n familyBaseVersion: string | null\n releaseIdentity: string | null\n releaseSetId: string | null\n sourceCommit: string | null\n otaManifestUrl: string | null\n otaManifestSha256: string | null\n}\n\nexport const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"3.1.0\",\n \"releaseIdentity\": \"3.1.0-dev.98\",\n \"releaseSetId\": \"mentra-3.1.0-dev.98\",\n \"sourceCommit\": \"a94462f1c85ea08a7c74e56640a0c277c5d66ac2\",\n \"otaManifestUrl\": \"https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.1.0/mentra-live-ota-3.1.0-dev.98.json\",\n \"otaManifestSha256\": \"91b45ddcb1e63ee53d6c2321cf94734ebf15b158b3cd95c7a73b4a850fa4c38e\"\n})\n"]}
1
+ {"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,uBAAuB,GAAoC,MAAM,CAAC,MAAM,CAAC;IACpF,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,gBAAgB;IACnC,cAAc,EAAE,uBAAuB;IACvC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,yHAAyH;IAC3I,mBAAmB,EAAE,kEAAkE;CACxF,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface EngineReleaseMetadata {\n schemaVersion: 1\n familyBaseVersion: string | null\n releaseIdentity: string | null\n releaseSetId: string | null\n sourceCommit: string | null\n otaManifestUrl: string | null\n otaManifestSha256: string | null\n}\n\nexport const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"3.1.1\",\n \"releaseIdentity\": \"3.1.1-beta.230\",\n \"releaseSetId\": \"mentra-3.1.1-beta.230\",\n \"sourceCommit\": \"7e3a6599241f048f71f90d2164df84413e851115\",\n \"otaManifestUrl\": \"https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.1.1/mentra-live-ota-3.1.1-beta.230.json\",\n \"otaManifestSha256\": \"e19a72e6eafe9b2c6a472bdcb59f0d4b5fc6f0d69f8b21bed57ffb196cd1dd00\"\n})\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MentraLiveOtaFlow.d.ts","sourceRoot":"","sources":["../../src/react/MentraLiveOtaFlow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAgB,MAAM,OAAO,CAAA;AACpC,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAA;AAKrB,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC3B,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAA;AAE7D,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAA;AAElG,MAAM,MAAM,sBAAsB,GAAG;IACnC,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,qBAAqB,CAAA;IACnC,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,+EAA+E;IAC/E,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,oGAAoG;IACpG,0BAA0B,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,KAAK,IAAI,CAAA;IACnF,0DAA0D;IAC1D,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,0BAA0B,CAAA;IACtC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAC7B,CAAA;AA4ED,wBAAgB,iBAAiB,CAAC,EAChC,YAAwD,EACxD,UAA0B,EAC1B,WAAqB,EACrB,iBAAwB,EACxB,UAAU,EACV,0BAA0B,EAC1B,eAAe,EACf,KAAK,EACL,SAAiB,EACjB,KAAK,EACL,SAA4B,GAC7B,EAAE,sBAAsB,qBA0BxB;AA+bD,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,MAAM,EACN,KAAK,GACN,EAAE;IACD,UAAU,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC1D,MAAM,EAAE,sBAAsB,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;CACd,4BA4BA"}
1
+ {"version":3,"file":"MentraLiveOtaFlow.d.ts","sourceRoot":"","sources":["../../src/react/MentraLiveOtaFlow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAgB,MAAM,OAAO,CAAA;AACpC,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAA;AAKrB,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC3B,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAA;AAE7D,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAA;AAElG,MAAM,MAAM,sBAAsB,GAAG;IACnC,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,qBAAqB,CAAA;IACnC,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,+EAA+E;IAC/E,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,oGAAoG;IACpG,0BAA0B,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,KAAK,IAAI,CAAA;IACnF,0DAA0D;IAC1D,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,0BAA0B,CAAA;IACtC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAC7B,CAAA;AAgGD,wBAAgB,iBAAiB,CAAC,EAChC,YAAwD,EACxD,UAA0B,EAC1B,WAAqB,EACrB,iBAAwB,EACxB,UAAU,EACV,0BAA0B,EAC1B,eAAe,EACf,KAAK,EACL,SAAiB,EACjB,KAAK,EACL,SAA4B,GAC7B,EAAE,sBAAsB,qBA0BxB;AA2eD,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,MAAM,EACN,KAAK,GACN,EAAE;IACD,UAAU,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC1D,MAAM,EAAE,sBAAsB,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;CACd,4BA8BA"}
@@ -15,6 +15,19 @@ const DEFAULT_THEME = {
15
15
  textDim: "#66736B",
16
16
  };
17
17
  const ENGLISH_COPY = {
18
+ "ota:downloadingToPhone": "Downloading update to phone...",
19
+ "ota:startingGlassesHotspot": "Starting glasses hotspot...",
20
+ "ota:connectingPhoneToGlasses": "Connecting phone to glasses...",
21
+ "ota:startingHotspotUpdate": "Starting update...",
22
+ "ota:transferringToGlasses": "Transferring update to glasses...",
23
+ "ota:installingOnGlasses": "Installing update on glasses...",
24
+ "ota:componentApk": "Glasses software",
25
+ "ota:componentMtk": "System firmware",
26
+ "ota:componentBes": "Bluetooth firmware",
27
+ "ota:updateFile": "File {{current}} of {{total}} · {{component}}",
28
+ "ota:updatePart": "Update {{current}} of {{total}} · {{component}}",
29
+ "ota:phoneFileProgress": "Each file downloads separately. Progress is for the current file.",
30
+ "ota:transferFileProgress": "Progress is for this file’s transfer from your phone.",
18
31
  "common:continue": "Continue",
19
32
  "common:done": "Done",
20
33
  "ota:checkingForUpdates": "Checking for updates",
@@ -59,6 +72,11 @@ const ENGLISH_COPY = {
59
72
  "ota:versionChangeFirmwarePassComplete": "Firmware updated",
60
73
  "ota:versionChangeFirmwarePassCompleteMessage": "Your glasses restarted with new firmware. One more step: they'll now continue to the required version.",
61
74
  };
75
+ const componentCopyKey = {
76
+ apk: "ota:componentApk",
77
+ mtk: "ota:componentMtk",
78
+ bes: "ota:componentBes",
79
+ };
62
80
  function defaultTranslate(key, options) {
63
81
  let value = ENGLISH_COPY[key] ?? key;
64
82
  for (const [name, replacement] of Object.entries(options ?? {})) {
@@ -179,21 +197,50 @@ function OtaFlowContent({ allowDevSkip, colors, controller, deviceName, superMod
179
197
  </FlowPage>);
180
198
  }
181
199
  if (state.screen === "starting" || state.screen === "preparing_hotspot") {
182
- const title = state.hotspotPhase === "downloading"
183
- ? "Downloading update to phone..."
200
+ const title = translate(state.hotspotPhase === "downloading"
201
+ ? "ota:downloadingToPhone"
184
202
  : state.hotspotPhase === "starting_hotspot"
185
- ? "Starting glasses hotspot..."
203
+ ? "ota:startingGlassesHotspot"
186
204
  : state.hotspotPhase === "joining_hotspot"
187
- ? "Connecting phone to glasses..."
188
- : "Starting update...";
205
+ ? "ota:connectingPhoneToGlasses"
206
+ : "ota:startingHotspotUpdate");
207
+ const artifact = state.hotspotPhase === "downloading" ? state.hotspotArtifact : null;
189
208
  return (<FlowPage colors={colors} icon="download" title={title}>
209
+ {artifact ? (<BodyText colors={colors}>
210
+ {translate("ota:updateFile", {
211
+ current: String(artifact.index + 1),
212
+ total: String(artifact.totalCount),
213
+ component: translate(componentCopyKey[artifact.kind]),
214
+ })}
215
+ </BodyText>) : null}
190
216
  {state.hotspotPhase === "downloading" && state.hotspotArtifactPercent !== null ? (<PercentText colors={colors} percent={state.hotspotArtifactPercent}/>) : null}
191
217
  <ActivityIndicator size="large" color={colors.foreground}/>
218
+ {state.hotspotPhase === "downloading" ? (<BodyText colors={colors}>{translate("ota:phoneFileProgress")}</BodyText>) : null}
192
219
  <BodyText colors={colors}>Do not disconnect your glasses</BodyText>
193
220
  </FlowPage>);
194
221
  }
195
222
  if (state.screen === "updating") {
196
- return (<FlowPage colors={colors} icon="download" title={state.phase === "download" ? "Downloading..." : "Installing..."}>
223
+ const hotspot = state.transport === "hotspot";
224
+ const title = hotspot
225
+ ? translate(state.phase === "download" ? "ota:transferringToGlasses" : "ota:installingOnGlasses")
226
+ : state.phase === "download"
227
+ ? "Downloading..."
228
+ : "Installing...";
229
+ const component = state.step ? translate(componentCopyKey[state.step]) : null;
230
+ const hasStepCount = state.currentStep !== null &&
231
+ state.totalSteps !== null &&
232
+ state.currentStep > 0 &&
233
+ state.currentStep <= state.totalSteps;
234
+ return (<FlowPage colors={colors} icon="download" title={title}>
235
+ {hotspot && component ? (<BodyText colors={colors}>
236
+ {hasStepCount
237
+ ? translate("ota:updatePart", {
238
+ current: String(state.currentStep),
239
+ total: String(state.totalSteps),
240
+ component,
241
+ })
242
+ : component}
243
+ </BodyText>) : null}
197
244
  {state.installingApkOnly ? (<ActivityIndicator size="large" color={colors.foreground}/>) : (<>
198
245
  <PercentText colors={colors} percent={state.progress ?? 0}/>
199
246
  <View style={[styles.progressTrack, { backgroundColor: colors.border }]}>
@@ -201,6 +248,7 @@ function OtaFlowContent({ allowDevSkip, colors, controller, deviceName, superMod
201
248
  </View>
202
249
  </>)}
203
250
  <BodyText colors={colors}>Do not disconnect your glasses</BodyText>
251
+ {hotspot && state.phase === "download" ? (<BodyText colors={colors}>{translate("ota:transferFileProgress")}</BodyText>) : null}
204
252
  {state.versionChange && state.phase === "install" ? (<BodyText colors={colors}>{translate("ota:downgradeDuration")}</BodyText>) : null}
205
253
  </FlowPage>);
206
254
  }
@@ -245,11 +293,11 @@ function OtaFlowContent({ allowDevSkip, colors, controller, deviceName, superMod
245
293
  }
246
294
  function FlowPage({ actions, children, colors, contentAlignment = "center", icon, title }) {
247
295
  return (<View style={styles.page} testID="mentra-live-ota-flow">
248
- <View style={[styles.centerContent, contentAlignment === "top" && styles.topContent]}>
296
+ <ScrollView contentContainerStyle={[styles.centerContent, contentAlignment === "top" && styles.topContent]} nestedScrollEnabled style={styles.contentScroll} testID="ota-page-scroll">
249
297
  <FlowIcon colors={colors} name={icon}/>
250
298
  <Text style={[styles.title, { color: colors.foreground }]}>{title}</Text>
251
299
  {children}
252
- </View>
300
+ </ScrollView>
253
301
  {actions ? <View style={styles.actions}>{actions}</View> : <View style={styles.actionSpacer}/>}
254
302
  </View>);
255
303
  }
@@ -342,7 +390,7 @@ export function ChangelogList({ changelogs, colors, title, }) {
342
390
  return null;
343
391
  return (<View style={[styles.changelogCard, { borderColor: colors.border }]} testID="ota-changelog-card">
344
392
  <Text style={[styles.changelogTitle, { color: colors.foreground }]}>{title}</Text>
345
- <ScrollView contentContainerStyle={styles.changelogContent} nestedScrollEnabled showsVerticalScrollIndicator style={styles.changelogList} testID="ota-changelog-scroll">
393
+ <ScrollView contentContainerStyle={styles.changelogContent} nestedScrollEnabled persistentScrollbar showsVerticalScrollIndicator style={styles.changelogList} testID="ota-changelog-scroll">
346
394
  {changelogs.map((entry, index) => (<View key={entry.version} style={[
347
395
  styles.changelogEntry,
348
396
  index > 0 && styles.changelogEntryDivider,
@@ -390,8 +438,9 @@ const styles = StyleSheet.create({
390
438
  paddingHorizontal: 20,
391
439
  },
392
440
  page: { flex: 1, paddingBottom: 24, paddingHorizontal: 24 },
393
- centerContent: { alignItems: "center", flex: 1, gap: 16, justifyContent: "center" },
394
- topContent: { justifyContent: "flex-start", paddingTop: 12 },
441
+ contentScroll: { flex: 1 },
442
+ centerContent: { alignItems: "center", flexGrow: 1, gap: 16, justifyContent: "center" },
443
+ topContent: { justifyContent: "flex-start", paddingBottom: 16, paddingTop: 12 },
395
444
  actionSpacer: { height: 48 },
396
445
  actions: { gap: 12 },
397
446
  icon: { fontSize: 64, fontWeight: "500", lineHeight: 72, textAlign: "center" },
@@ -403,16 +452,17 @@ const styles = StyleSheet.create({
403
452
  changelogCard: {
404
453
  borderRadius: 16,
405
454
  borderWidth: 1,
406
- flexShrink: 1,
455
+ flexGrow: 1,
407
456
  gap: 12,
408
- maxHeight: 300,
409
457
  maxWidth: 420,
458
+ minHeight: 200,
410
459
  padding: 16,
411
460
  width: "100%",
412
461
  },
413
462
  changelogTitle: { fontSize: 16, fontWeight: "700" },
414
- changelogList: { flexShrink: 1, maxHeight: 232, width: "100%" },
415
- changelogContent: { gap: 20, paddingBottom: 2 },
463
+ // Bound the notes themselves so the card can grow for its title, but not for all of the Markdown.
464
+ changelogList: { flexGrow: 1, height: 120, width: "100%" },
465
+ changelogContent: { gap: 20, paddingBottom: 4 },
416
466
  changelogEntry: { gap: 8 },
417
467
  changelogEntryDivider: { borderTopWidth: StyleSheet.hairlineWidth, paddingTop: 20 },
418
468
  changelogVersion: { fontSize: 14, fontWeight: "600" },
@@ -1 +1 @@
1
- {"version":3,"file":"MentraLiveOtaFlow.js","sourceRoot":"","sources":["../../src/react/MentraLiveOtaFlow.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable react-native/no-raw-text -- BodyText and PercentText are local Text wrappers. */\nimport React, {useMemo} from \"react\"\nimport {\n ActivityIndicator,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\"\nimport {useMarkdown, type MarkedStyles, type useMarkdownHookOptions} from \"react-native-marked\"\nimport {SafeAreaView} from \"react-native-safe-area-context\"\nimport Svg, {Path, Rect} from \"react-native-svg\"\n\nimport {\n MINIMUM_OTA_BATTERY_LEVEL,\n useMentraLiveOta,\n type MentraLiveOtaController,\n type MentraLiveOtaFlowPage,\n} from \"./useMentraLiveOta\"\n\nexport type {MentraLiveOtaFlowPage} from \"./useMentraLiveOta\"\n\nexport type MentraLiveOtaFlowTheme = {\n background: string\n border: string\n error: string\n foreground: string\n primary: string\n primaryText: string\n textDim: string\n}\n\nexport type MentraLiveOtaFlowTranslate = (key: string, options?: Record<string, string>) => string\n\nexport type MentraLiveOtaFlowProps = {\n /** Display name used in update copy. */\n deviceName?: string\n /** Entry page. `progress` exists for recovery/deep-link compatibility. */\n initialPage?: MentraLiveOtaFlowPage\n /** Start the OTA-only projections. Full Engine hosts should pass false. */\n initializeRuntime?: boolean\n /** Called after the final check or when the user leaves an optional update. */\n onFinished: () => void\n /** Host-owned Wi-Fi setup for glasses that do not support hotspot OTA. */\n onOpenWifiSetup: () => void\n /** Lets a host coordinate its global connection overlay with OTA progress and firmware restarts. */\n onFirmwareRestartingChange?: (restarting: boolean, progressActive: boolean) => void\n /** Enables the existing developer-only escape hatches. */\n allowDevSkip?: boolean\n /** Enables the existing super-mode interrupted-session escape hatch. */\n superMode?: boolean\n /** Optional host localization. Defaults to the Mentra App English OTA copy. */\n translate?: MentraLiveOtaFlowTranslate\n /** Optional host theme. Both hosts use the same layout and state machine. */\n theme?: Partial<MentraLiveOtaFlowTheme>\n style?: StyleProp<ViewStyle>\n}\n\nconst DEFAULT_THEME: MentraLiveOtaFlowTheme = {\n background: \"#FFFFFF\",\n border: \"#D7DFDA\",\n error: \"#C43131\",\n foreground: \"#0E2C1A\",\n primary: \"#00B869\",\n primaryText: \"#FFFFFF\",\n textDim: \"#66736B\",\n}\n\nconst ENGLISH_COPY: Record<string, string> = {\n \"common:continue\": \"Continue\",\n \"common:done\": \"Done\",\n \"ota:checkingForUpdates\": \"Checking for updates\",\n \"ota:checkingForUpdatesMessage\":\n \"Connected devices will perform automatic updates. Automatic updates can be disabled in Device Settings\",\n \"ota:finishingUpdate\": \"Finishing your update\",\n \"ota:checkingAdditionalUpdates\": \"Checking whether your glasses need any additional updates.\",\n \"ota:updateAvailable\": \"{{deviceName}} Update Available\",\n \"ota:batteryRequiredTitle\": \"Charge {{deviceName}} to Update\",\n \"ota:batteryRequiredMessage\":\n \"{{deviceName}} is currently at {{batteryLevel}}%. Charge it to at least {{minimumBatteryLevel}}% before updating.\",\n \"ota:batteryRequiredLiveUpdate\": \"This screen will update automatically as the battery charges.\",\n \"ota:updateConnectWifi\": \"Connect your {{deviceName}} to WiFi to install the update.\",\n \"ota:wifiRequiredTitle\": \"WiFi Needed for Update\",\n \"ota:updateDescription\":\n \"A new update is available for your glasses. We recommend updating now for the best experience.\",\n \"ota:updateSequenceMessage\":\n \"Your glasses may install more than one update and restart several times. Keep them nearby until finished.\",\n \"ota:releaseTransition\": \"{{fromVersion}} → {{toVersion}}\",\n \"ota:releaseTransitionUnknown\": \"Current version unknown → {{toVersion}}\",\n \"ota:updatedToVersion\": \"Updated to {{version}}\",\n \"ota:downgradeAvailable\": \"{{deviceName}} Version Change Required\",\n \"ota:downgradeDescription\":\n \"This app requires an earlier glasses software version. Your photos and videos will be preserved, but glasses settings will be reset and restored automatically after the change.\",\n \"ota:updateNow\": \"Update Now\",\n \"ota:setupWifi\": \"Setup WiFi\",\n \"ota:updateLater\": \"Later\",\n \"ota:updateComplete\": \"Update complete\",\n \"ota:whatsNew\": \"What's new\",\n \"ota:upToDate\": \"Up To Date\",\n \"ota:devBuild\": \"Development Build\",\n \"ota:devBuildNoOta\":\n \"This mobile app is a development build, so automatic glasses updates are disabled. Use the developer settings manifest override to update them manually.\",\n \"ota:noUpdatesAvailable\": \"Your glasses are running the latest version.\",\n \"ota:checkFailed\": \"Check Failed\",\n \"ota:checkFailedMessage\": \"Couldn't check for updates. Please check your connection and try again.\",\n \"ota:updateInfoUnavailable\": \"Update Info Unavailable\",\n \"ota:updateInfoUnavailableMessage\":\n \"Update information for this version of the app is unavailable. Please check the app store for a newer version of the Mentra App.\",\n \"ota:downgradeDuration\": \"Your glasses will restart twice — this may take up to 2 minutes.\",\n \"ota:versionChangeRestarting\": \"Installing a different version…\",\n \"ota:versionChangeVerifying\": \"Verifying your glasses…\",\n \"ota:versionChangeKeepNearby\": \"Keep your glasses nearby and connected. They will restart on their own.\",\n \"ota:restartingGlasses\": \"Restarting {{deviceName}}…\",\n \"ota:restartingGlassesMessage\":\n \"The update is installed. Keep your glasses nearby and leave this screen open while they finish starting.\",\n \"ota:restartingGlassesAutomatic\": \"We'll continue automatically when they're ready.\",\n \"ota:versionChangeComplete\": \"Version Change Complete\",\n \"ota:versionChangeCompleteMessage\":\n \"Your glasses are now on the required version. Their settings were reset and are being restored automatically.\",\n \"ota:versionChangeFirmwarePassComplete\": \"Firmware updated\",\n \"ota:versionChangeFirmwarePassCompleteMessage\":\n \"Your glasses restarted with new firmware. One more step: they'll now continue to the required version.\",\n}\n\nfunction defaultTranslate(key: string, options?: Record<string, string>): string {\n let value = ENGLISH_COPY[key] ?? key\n for (const [name, replacement] of Object.entries(options ?? {})) {\n value = value.replaceAll(`{{${name}}}`, replacement)\n }\n return value\n}\n\nexport function MentraLiveOtaFlow({\n allowDevSkip = typeof __DEV__ !== \"undefined\" && __DEV__,\n deviceName = \"Mentra Live\",\n initialPage = \"check\",\n initializeRuntime = true,\n onFinished,\n onFirmwareRestartingChange,\n onOpenWifiSetup,\n style,\n superMode = false,\n theme,\n translate = defaultTranslate,\n}: MentraLiveOtaFlowProps) {\n const colors = useMemo(() => ({...DEFAULT_THEME, ...theme}), [theme])\n const controller = useMentraLiveOta({\n initialPage,\n initializeRuntime,\n onFinished,\n onFirmwareRestartingChange,\n onOpenWifiSetup,\n })\n\n return (\n <SafeAreaView style={[styles.safeArea, {backgroundColor: colors.background}, style]}>\n <View style={styles.header}>\n <View />\n <MentraMark color={colors.primary} />\n </View>\n <OtaFlowContent\n allowDevSkip={allowDevSkip}\n colors={colors}\n controller={controller}\n deviceName={deviceName}\n superMode={superMode}\n translate={translate}\n />\n </SafeAreaView>\n )\n}\n\nfunction OtaFlowContent({\n allowDevSkip,\n colors,\n controller,\n deviceName,\n superMode,\n translate,\n}: {\n allowDevSkip: boolean\n colors: MentraLiveOtaFlowTheme\n controller: MentraLiveOtaController\n deviceName: string\n superMode: boolean\n translate: MentraLiveOtaFlowTranslate\n}) {\n const {state} = controller\n\n if (state.screen === \"initializing\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:checkingForUpdates\")}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"checking\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:checkingForUpdates\")}>\n <BodyText colors={colors}>{translate(\"ota:checkingForUpdatesMessage\")}</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"battery_required\") {\n return (\n <FlowPage\n actions={\n <>\n <FlowButton colors={colors} disabled label={translate(\"ota:updateNow\")} onPress={controller.install} />\n {state.canDismiss ? (\n <FlowButton colors={colors} label={translate(\"ota:updateLater\")} onPress={controller.finish} secondary />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:batteryRequiredTitle\", {deviceName})}>\n <BodyText colors={colors}>\n {translate(\"ota:batteryRequiredMessage\", {\n batteryLevel: String(state.batteryLevel),\n deviceName,\n minimumBatteryLevel: String(MINIMUM_OTA_BATTERY_LEVEL),\n })}\n </BodyText>\n <BodyText colors={colors}>{translate(\"ota:batteryRequiredLiveUpdate\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"finishing\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:finishingUpdate\")}>\n <BodyText colors={colors}>{translate(\"ota:checkingAdditionalUpdates\")}</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"update_available\" || state.screen === \"wifi_required\") {\n const titleKey =\n state.screen === \"wifi_required\"\n ? \"ota:wifiRequiredTitle\"\n : state.versionChange\n ? \"ota:downgradeAvailable\"\n : \"ota:updateAvailable\"\n return (\n <FlowPage\n colors={colors}\n icon=\"download\"\n title={translate(titleKey, {deviceName})}\n actions={\n <>\n <FlowButton\n colors={colors}\n disabled={!state.wifiStatusKnown}\n label={translate(state.screen === \"wifi_required\" ? \"ota:setupWifi\" : \"ota:updateNow\")}\n onPress={state.screen === \"wifi_required\" ? controller.openWifiSetup : controller.install}\n />\n {state.canDismiss ? (\n <FlowButton colors={colors} label={translate(\"ota:updateLater\")} onPress={controller.finish} secondary />\n ) : null}\n {allowDevSkip && state.updateRequired ? (\n <FlowButton colors={colors} label=\"Skip (dev only)\" onPress={controller.finish} secondary />\n ) : null}\n </>\n }>\n {state.releaseTransition ? (\n <BodyText colors={colors}>\n {state.releaseTransition.fromVersion\n ? translate(\"ota:releaseTransition\", {\n fromVersion: state.releaseTransition.fromVersion,\n toVersion: state.releaseTransition.toVersion,\n })\n : translate(\"ota:releaseTransitionUnknown\", {toVersion: state.releaseTransition.toVersion})}\n </BodyText>\n ) : null}\n <BodyText colors={colors}>\n {state.screen === \"wifi_required\"\n ? translate(\"ota:updateConnectWifi\", {deviceName})\n : translate(state.versionChange ? \"ota:downgradeDescription\" : \"ota:updateDescription\")}\n </BodyText>\n <BodyText colors={colors}>{translate(\"ota:updateSequenceMessage\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"dev_build\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={controller.finish} />}\n colors={colors}\n icon=\"settings\"\n title={translate(\"ota:devBuild\")}>\n <BodyText colors={colors}>{translate(\"ota:devBuildNoOta\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"up_to_date\") {\n return (\n <FlowPage\n actions={\n <FlowButton\n colors={colors}\n label={translate(state.completedUpdate ? \"common:done\" : \"common:continue\")}\n onPress={controller.finish}\n />\n }\n colors={colors}\n contentAlignment={state.changelogs.length > 0 ? \"top\" : \"center\"}\n icon=\"check\"\n title={translate(state.completedUpdate ? \"ota:updateComplete\" : \"ota:upToDate\")}>\n <BodyText colors={colors}>{translate(\"ota:noUpdatesAvailable\")}</BodyText>\n {state.releaseTransition ? (\n <BodyText colors={colors}>\n {translate(\"ota:updatedToVersion\", {version: state.releaseTransition.toVersion})}\n </BodyText>\n ) : null}\n <ChangelogList changelogs={state.changelogs} colors={colors} title={translate(\"ota:whatsNew\")} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"update_info_unavailable\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={controller.finish} />}\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:updateInfoUnavailable\")}>\n <BodyText colors={colors}>{translate(\"ota:updateInfoUnavailableMessage\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"check_failed\") {\n return (\n <FlowPage\n actions={\n <>\n <FlowButton colors={colors} label=\"Retry\" onPress={controller.retryCheck} />\n {allowDevSkip ? (\n <FlowButton colors={colors} label=\"Skip (dev only)\" onPress={controller.finish} secondary />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:checkFailed\")}>\n <BodyText colors={colors}>{translate(\"ota:checkFailedMessage\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.versionChangePhase === \"restarting\" || state.versionChangePhase === \"verifying\") {\n return (\n <FlowPage\n colors={colors}\n icon=\"download\"\n title={translate(\n state.versionChangePhase === \"verifying\" ? \"ota:versionChangeVerifying\" : \"ota:versionChangeRestarting\",\n )}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n <BodyText colors={colors}>{translate(\"ota:versionChangeKeepNearby\")}</BodyText>\n <BodyText colors={colors}>{translate(\"ota:downgradeDuration\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"starting\" || state.screen === \"preparing_hotspot\") {\n const title =\n state.hotspotPhase === \"downloading\"\n ? \"Downloading update to phone...\"\n : state.hotspotPhase === \"starting_hotspot\"\n ? \"Starting glasses hotspot...\"\n : state.hotspotPhase === \"joining_hotspot\"\n ? \"Connecting phone to glasses...\"\n : \"Starting update...\"\n return (\n <FlowPage colors={colors} icon=\"download\" title={title}>\n {state.hotspotPhase === \"downloading\" && state.hotspotArtifactPercent !== null ? (\n <PercentText colors={colors} percent={state.hotspotArtifactPercent} />\n ) : null}\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n <BodyText colors={colors}>Do not disconnect your glasses</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"updating\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={state.phase === \"download\" ? \"Downloading...\" : \"Installing...\"}>\n {state.installingApkOnly ? (\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n ) : (\n <>\n <PercentText colors={colors} percent={state.progress ?? 0} />\n <View style={[styles.progressTrack, {backgroundColor: colors.border}]}>\n <View\n style={[styles.progressFill, {backgroundColor: colors.primary, width: `${state.progress ?? 0}%`}]}\n />\n </View>\n </>\n )}\n <BodyText colors={colors}>Do not disconnect your glasses</BodyText>\n {state.versionChange && state.phase === \"install\" ? (\n <BodyText colors={colors}>{translate(\"ota:downgradeDuration\")}</BodyText>\n ) : null}\n </FlowPage>\n )\n }\n\n if (state.screen === \"restarting\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:restartingGlasses\", {deviceName})}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n <BodyText colors={colors}>{translate(\"ota:restartingGlassesMessage\")}</BodyText>\n <BodyText colors={colors}>{translate(\"ota:restartingGlassesAutomatic\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"complete\") {\n const title = state.versionChangeConverged\n ? translate(\"ota:versionChangeComplete\")\n : state.versionChange\n ? translate(\"ota:versionChangeFirmwarePassComplete\")\n : \"Update complete!\"\n const message = state.versionChangeConverged\n ? translate(\"ota:versionChangeCompleteMessage\")\n : state.versionChange\n ? translate(\"ota:versionChangeFirmwarePassCompleteMessage\")\n : \"Your glasses are up to date.\"\n return (\n <FlowPage\n actions={\n <FlowButton\n colors={colors}\n label={state.versionChange && !state.versionChangeConverged ? \"Continue\" : \"Done\"}\n onPress={controller.finish}\n />\n }\n colors={colors}\n contentAlignment={state.changelogs.length > 0 ? \"top\" : \"center\"}\n icon=\"check\"\n title={title}>\n <BodyText colors={colors}>{message}</BodyText>\n {state.releaseTransition ? (\n <BodyText colors={colors}>\n {translate(\"ota:updatedToVersion\", {version: state.releaseTransition.toVersion})}\n </BodyText>\n ) : null}\n <ChangelogList changelogs={state.changelogs} colors={colors} title={translate(\"ota:whatsNew\")} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"failed\") {\n return (\n <FlowPage\n actions={\n <>\n <FlowButton\n colors={colors}\n label={state.canRetry ? \"Retry\" : \"Done\"}\n onPress={state.canRetry ? controller.retryInstall : controller.finish}\n />\n {state.canOpenWifiSetup ? (\n <FlowButton colors={colors} label=\"Change WiFi\" onPress={controller.openWifiSetup} secondary />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title=\"Update Failed\">\n <BodyText colors={colors}>{state.error?.message}</BodyText>\n </FlowPage>\n )\n }\n\n return (\n <FlowPage\n actions={\n superMode ? (\n <FlowButton colors={colors} label=\"Skip (super)\" onPress={controller.discard} secondary />\n ) : undefined\n }\n colors={colors}\n icon=\"bluetooth\"\n title=\"Glasses disconnected\">\n <BodyText colors={colors}>Reconnecting...</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n}\n\ntype FlowPageProps = {\n actions?: React.ReactNode\n children?: React.ReactNode\n colors: MentraLiveOtaFlowTheme\n contentAlignment?: \"center\" | \"top\"\n icon: \"alert\" | \"bluetooth\" | \"check\" | \"download\" | \"settings\"\n title: string\n}\n\nfunction FlowPage({actions, children, colors, contentAlignment = \"center\", icon, title}: FlowPageProps) {\n return (\n <View style={styles.page} testID=\"mentra-live-ota-flow\">\n <View style={[styles.centerContent, contentAlignment === \"top\" && styles.topContent]}>\n <FlowIcon colors={colors} name={icon} />\n <Text style={[styles.title, {color: colors.foreground}]}>{title}</Text>\n {children}\n </View>\n {actions ? <View style={styles.actions}>{actions}</View> : <View style={styles.actionSpacer} />}\n </View>\n )\n}\n\nfunction BodyText({children, colors}: {children: React.ReactNode; colors: MentraLiveOtaFlowTheme}) {\n return <Text style={[styles.body, {color: colors.textDim}]}>{children}</Text>\n}\n\nfunction PercentText({colors, percent}: {colors: MentraLiveOtaFlowTheme; percent: number}) {\n return <Text style={[styles.percent, {color: colors.primary}]}>{Math.round(percent)}%</Text>\n}\n\nfunction ChangelogMarkdown({colors, markdown}: {colors: MentraLiveOtaFlowTheme; markdown: string}) {\n const markdownStyles = useMemo<MarkedStyles>(\n () => ({\n blockquote: {\n borderLeftColor: colors.primary,\n borderLeftWidth: 3,\n marginVertical: 2,\n opacity: 1,\n paddingLeft: 12,\n },\n code: {\n backgroundColor: colors.background,\n borderColor: colors.border,\n borderRadius: 8,\n borderWidth: 1,\n padding: 12,\n },\n codespan: {\n backgroundColor: colors.border,\n color: colors.foreground,\n fontFamily: \"monospace\",\n fontSize: 13,\n fontStyle: \"normal\",\n fontWeight: \"400\",\n },\n em: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n h1: {\n borderBottomWidth: 0,\n color: colors.foreground,\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n marginVertical: 0,\n paddingBottom: 0,\n },\n h2: {\n borderBottomWidth: 0,\n color: colors.foreground,\n fontSize: 17,\n fontWeight: \"700\",\n lineHeight: 23,\n marginVertical: 0,\n paddingBottom: 0,\n },\n h3: {color: colors.foreground, fontSize: 16, fontWeight: \"700\", lineHeight: 22, marginVertical: 0},\n h4: {color: colors.foreground, fontSize: 15, fontWeight: \"700\", lineHeight: 21, marginVertical: 0},\n h5: {color: colors.foreground, fontSize: 14, fontWeight: \"700\", lineHeight: 20, marginVertical: 0},\n h6: {color: colors.textDim, fontSize: 14, fontWeight: \"600\", lineHeight: 20, marginVertical: 0},\n hr: {borderBottomColor: colors.border, marginVertical: 2},\n image: {borderRadius: 8},\n li: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n link: {\n color: colors.primary,\n fontSize: 14,\n fontStyle: \"normal\",\n lineHeight: 20,\n textDecorationLine: \"underline\",\n },\n paragraph: {paddingVertical: 0},\n strikethrough: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n strong: {color: colors.foreground, fontSize: 14, fontWeight: \"700\", lineHeight: 20},\n table: {borderColor: colors.border, borderRadius: 8},\n tableCell: {padding: 8},\n text: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n }),\n [colors],\n )\n const markdownTheme = useMemo<NonNullable<useMarkdownHookOptions[\"theme\"]>>(\n () => ({\n colors: {\n background: colors.background,\n border: colors.border,\n code: colors.border,\n link: colors.primary,\n text: colors.textDim,\n },\n }),\n [colors],\n )\n const elements = useMarkdown(markdown, {colorScheme: \"light\", styles: markdownStyles, theme: markdownTheme})\n\n return (\n <View style={styles.changelogMarkdownContent} testID=\"ota-changelog-markdown\">\n {elements}\n </View>\n )\n}\n\nexport function ChangelogList({\n changelogs,\n colors,\n title,\n}: {\n changelogs: MentraLiveOtaController[\"state\"][\"changelogs\"]\n colors: MentraLiveOtaFlowTheme\n title: string\n}) {\n if (changelogs.length === 0) return null\n return (\n <View style={[styles.changelogCard, {borderColor: colors.border}]} testID=\"ota-changelog-card\">\n <Text style={[styles.changelogTitle, {color: colors.foreground}]}>{title}</Text>\n <ScrollView\n contentContainerStyle={styles.changelogContent}\n nestedScrollEnabled\n showsVerticalScrollIndicator\n style={styles.changelogList}\n testID=\"ota-changelog-scroll\">\n {changelogs.map((entry, index) => (\n <View\n key={entry.version}\n style={[\n styles.changelogEntry,\n index > 0 && styles.changelogEntryDivider,\n index > 0 && {borderTopColor: colors.border},\n ]}>\n <Text selectable style={[styles.changelogVersion, {color: colors.foreground}]}>\n {entry.version}\n </Text>\n <ChangelogMarkdown colors={colors} markdown={entry.markdown} />\n </View>\n ))}\n </ScrollView>\n </View>\n )\n}\n\nfunction FlowButton({\n colors,\n disabled = false,\n label,\n onPress,\n secondary = false,\n}: {\n colors: MentraLiveOtaFlowTheme\n disabled?: boolean\n label: string\n onPress: () => void\n secondary?: boolean\n}) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n disabled={disabled}\n onPress={onPress}\n style={({pressed}) => [\n styles.button,\n {\n backgroundColor: secondary ? colors.background : colors.foreground,\n borderColor: secondary ? colors.border : colors.foreground,\n opacity: disabled ? 0.45 : pressed ? 0.75 : 1,\n },\n ]}\n testID={`button-${label}`}>\n <Text style={[styles.buttonText, {color: secondary ? colors.foreground : colors.background}]}>{label}</Text>\n </Pressable>\n )\n}\n\nfunction MentraMark({color}: {color: string}) {\n return (\n <Svg width={33} height={18} viewBox=\"0 0 50 27\" fill=\"none\">\n <Rect y={14.8072} width={11.8457} height={11.8457} fill={color} />\n <Path d=\"M9.36639 0L30.7163 14.8072V26.6529L9.36639 11.8457V0Z\" fill={color} />\n <Path d=\"M28.6501 0L50 14.8072V26.6529L28.6501 11.8457V0Z\" fill={color} />\n </Svg>\n )\n}\n\nfunction FlowIcon({colors, name}: {colors: MentraLiveOtaFlowTheme; name: FlowPageProps[\"icon\"]}) {\n const color = name === \"alert\" || name === \"bluetooth\" ? colors.error : colors.primary\n const glyph =\n name === \"check\" ? \"✓\" : name === \"alert\" ? \"!\" : name === \"settings\" ? \"⚙\" : name === \"bluetooth\" ? \"⌁\" : \"↓\"\n return <Text style={[styles.icon, {color}]}>{glyph}</Text>\n}\n\nconst styles = StyleSheet.create({\n safeArea: {flex: 1},\n header: {\n alignItems: \"center\",\n flexDirection: \"row\",\n height: 48,\n justifyContent: \"space-between\",\n paddingHorizontal: 20,\n },\n page: {flex: 1, paddingBottom: 24, paddingHorizontal: 24},\n centerContent: {alignItems: \"center\", flex: 1, gap: 16, justifyContent: \"center\"},\n topContent: {justifyContent: \"flex-start\", paddingTop: 12},\n actionSpacer: {height: 48},\n actions: {gap: 12},\n icon: {fontSize: 64, fontWeight: \"500\", lineHeight: 72, textAlign: \"center\"},\n title: {fontSize: 20, fontWeight: \"600\", textAlign: \"center\"},\n body: {fontSize: 14, lineHeight: 20, maxWidth: 420, textAlign: \"center\"},\n percent: {fontSize: 30, fontVariant: [\"tabular-nums\"], fontWeight: \"700\"},\n progressTrack: {borderRadius: 4, height: 8, maxWidth: 420, overflow: \"hidden\", width: \"100%\"},\n progressFill: {borderRadius: 4, height: 8},\n changelogCard: {\n borderRadius: 16,\n borderWidth: 1,\n flexShrink: 1,\n gap: 12,\n maxHeight: 300,\n maxWidth: 420,\n padding: 16,\n width: \"100%\",\n },\n changelogTitle: {fontSize: 16, fontWeight: \"700\"},\n changelogList: {flexShrink: 1, maxHeight: 232, width: \"100%\"},\n changelogContent: {gap: 20, paddingBottom: 2},\n changelogEntry: {gap: 8},\n changelogEntryDivider: {borderTopWidth: StyleSheet.hairlineWidth, paddingTop: 20},\n changelogVersion: {fontSize: 14, fontWeight: \"600\"},\n changelogMarkdownContent: {gap: 10},\n button: {\n alignItems: \"center\",\n borderRadius: 50,\n borderWidth: 1,\n justifyContent: \"center\",\n minHeight: 44,\n paddingHorizontal: 20,\n },\n buttonText: {fontSize: 14, fontWeight: \"500\"},\n})\n"]}
1
+ {"version":3,"file":"MentraLiveOtaFlow.js","sourceRoot":"","sources":["../../src/react/MentraLiveOtaFlow.tsx"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,OAAO,KAAK,EAAE,EAAC,OAAO,EAAC,MAAM,OAAO,CAAA;AACpC,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,UAAU,EACV,IAAI,EACJ,IAAI,GAGL,MAAM,cAAc,CAAA;AACrB,OAAO,EAAC,WAAW,EAAiD,MAAM,qBAAqB,CAAA;AAC/F,OAAO,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAA;AAC3D,OAAO,GAAG,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAEhD,OAAO,EACL,yBAAyB,EACzB,gBAAgB,GAGjB,MAAM,oBAAoB,CAAA;AAwC3B,MAAM,aAAa,GAA2B;IAC5C,UAAU,EAAE,SAAS;IACrB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,SAAS;IACtB,OAAO,EAAE,SAAS;CACnB,CAAA;AAED,MAAM,YAAY,GAA2B;IAC3C,wBAAwB,EAAE,gCAAgC;IAC1D,4BAA4B,EAAE,6BAA6B;IAC3D,8BAA8B,EAAE,gCAAgC;IAChE,2BAA2B,EAAE,oBAAoB;IACjD,2BAA2B,EAAE,mCAAmC;IAChE,yBAAyB,EAAE,iCAAiC;IAC5D,kBAAkB,EAAE,kBAAkB;IACtC,kBAAkB,EAAE,iBAAiB;IACrC,kBAAkB,EAAE,oBAAoB;IACxC,gBAAgB,EAAE,+CAA+C;IACjE,gBAAgB,EAAE,iDAAiD;IACnE,uBAAuB,EAAE,mEAAmE;IAC5F,0BAA0B,EAAE,uDAAuD;IAEnF,iBAAiB,EAAE,UAAU;IAC7B,aAAa,EAAE,MAAM;IACrB,wBAAwB,EAAE,sBAAsB;IAChD,+BAA+B,EAC7B,wGAAwG;IAC1G,qBAAqB,EAAE,uBAAuB;IAC9C,+BAA+B,EAAE,4DAA4D;IAC7F,qBAAqB,EAAE,iCAAiC;IACxD,0BAA0B,EAAE,iCAAiC;IAC7D,4BAA4B,EAC1B,mHAAmH;IACrH,+BAA+B,EAAE,+DAA+D;IAChG,uBAAuB,EAAE,4DAA4D;IACrF,uBAAuB,EAAE,wBAAwB;IACjD,uBAAuB,EACrB,gGAAgG;IAClG,2BAA2B,EACzB,2GAA2G;IAC7G,uBAAuB,EAAE,iCAAiC;IAC1D,8BAA8B,EAAE,yCAAyC;IACzE,sBAAsB,EAAE,wBAAwB;IAChD,wBAAwB,EAAE,wCAAwC;IAClE,0BAA0B,EACxB,kLAAkL;IACpL,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,YAAY;IAC7B,iBAAiB,EAAE,OAAO;IAC1B,oBAAoB,EAAE,iBAAiB;IACvC,cAAc,EAAE,YAAY;IAC5B,cAAc,EAAE,YAAY;IAC5B,cAAc,EAAE,mBAAmB;IACnC,mBAAmB,EACjB,0JAA0J;IAC5J,wBAAwB,EAAE,8CAA8C;IACxE,iBAAiB,EAAE,cAAc;IACjC,wBAAwB,EAAE,yEAAyE;IACnG,2BAA2B,EAAE,yBAAyB;IACtD,kCAAkC,EAChC,kIAAkI;IACpI,uBAAuB,EAAE,kEAAkE;IAC3F,6BAA6B,EAAE,iCAAiC;IAChE,4BAA4B,EAAE,yBAAyB;IACvD,6BAA6B,EAAE,yEAAyE;IACxG,uBAAuB,EAAE,4BAA4B;IACrD,8BAA8B,EAC5B,0GAA0G;IAC5G,gCAAgC,EAAE,kDAAkD;IACpF,2BAA2B,EAAE,yBAAyB;IACtD,kCAAkC,EAChC,+GAA+G;IACjH,uCAAuC,EAAE,kBAAkB;IAC3D,8CAA8C,EAC5C,wGAAwG;CAC3G,CAAA;AAED,MAAM,gBAAgB,GAAG;IACvB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,kBAAkB;CACf,CAAA;AAEV,SAAS,gBAAgB,CAAC,GAAW,EAAE,OAAgC;IACrE,IAAI,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAA;IACpC,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,EAAE,WAAW,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,YAAY,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EACxD,UAAU,GAAG,aAAa,EAC1B,WAAW,GAAG,OAAO,EACrB,iBAAiB,GAAG,IAAI,EACxB,UAAU,EACV,0BAA0B,EAC1B,eAAe,EACf,KAAK,EACL,SAAS,GAAG,KAAK,EACjB,KAAK,EACL,SAAS,GAAG,gBAAgB,GACL;IACvB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAC,GAAG,aAAa,EAAE,GAAG,KAAK,EAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IACrE,MAAM,UAAU,GAAG,gBAAgB,CAAC;QAClC,WAAW;QACX,iBAAiB;QACjB,UAAU;QACV,0BAA0B;QAC1B,eAAe;KAChB,CAAC,CAAA;IAEF,OAAO,CACL,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAC,eAAe,EAAE,MAAM,CAAC,UAAU,EAAC,EAAE,KAAK,CAAC,CAAC,CAClF;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CACzB;QAAA,CAAC,IAAI,CAAC,AAAD,EACL;QAAA,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EACpC;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,cAAc,CACb,YAAY,CAAC,CAAC,YAAY,CAAC,CAC3B,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,SAAS,CAAC,CAAC,SAAS,CAAC,EAEzB;IAAA,EAAE,YAAY,CAAC,CAChB,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,YAAY,EACZ,MAAM,EACN,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,GAQV;IACC,MAAM,EAAC,KAAK,EAAC,GAAG,UAAU,CAAA;IAE1B,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QACpC,OAAO,CACL,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,CACnF;QAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAC3D;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,CACL,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,CACnF;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC,EAAE,QAAQ,CAChF;QAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAC3D;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;QACxC,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CACN,EACE;YAAA,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EACpG;YAAA,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAClB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAG,CAC1G,CAAC,CAAC,CAAC,IAAI,CACV;UAAA,GACF,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,CAAC,SAAS,CAAC,0BAA0B,EAAE,EAAC,UAAU,EAAC,CAAC,CAAC,CAC3D;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CACvB;UAAA,CAAC,SAAS,CAAC,4BAA4B,EAAE;gBACvC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;gBACxC,UAAU;gBACV,mBAAmB,EAAE,MAAM,CAAC,yBAAyB,CAAC;aACvD,CAAC,CACJ;QAAA,EAAE,QAAQ,CACV;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC,EAAE,QAAQ,CAClF;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,CACL,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAChF;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC,EAAE,QAAQ,CAChF;QAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAC3D;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,kBAAkB,IAAI,KAAK,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;QAC5E,MAAM,QAAQ,GACZ,KAAK,CAAC,MAAM,KAAK,eAAe;YAC9B,CAAC,CAAC,uBAAuB;YACzB,CAAC,CAAC,KAAK,CAAC,aAAa;gBACnB,CAAC,CAAC,wBAAwB;gBAC1B,CAAC,CAAC,qBAAqB,CAAA;QAC7B,OAAO,CACL,CAAC,QAAQ,CACP,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,UAAU,CACf,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAC,UAAU,EAAC,CAAC,CAAC,CACzC,OAAO,CAAC,CACN,EACE;YAAA,CAAC,UAAU,CACT,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CACjC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CACvF,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAE5F;YAAA,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAClB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAG,CAC1G,CAAC,CAAC,CAAC,IAAI,CACR;YAAA,CAAC,YAAY,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CACtC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAG,CAC7F,CAAC,CAAC,CAAC,IAAI,CACV;UAAA,GACF,CAAC,CACD;QAAA,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CACzB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CACvB;YAAA,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAW;oBAClC,CAAC,CAAC,SAAS,CAAC,uBAAuB,EAAE;wBACjC,WAAW,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW;wBAChD,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,SAAS;qBAC7C,CAAC;oBACJ,CAAC,CAAC,SAAS,CAAC,8BAA8B,EAAE,EAAC,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAC,CAAC,CAC/F;UAAA,EAAE,QAAQ,CAAC,CACZ,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CACvB;UAAA,CAAC,KAAK,CAAC,MAAM,KAAK,eAAe;gBAC/B,CAAC,CAAC,SAAS,CAAC,uBAAuB,EAAE,EAAC,UAAU,EAAC,CAAC;gBAClD,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAC3F;QAAA,EAAE,QAAQ,CACV;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,EAAE,QAAQ,CAC9E;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAG,CAAC,CACzG,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,UAAU,CACf,KAAK,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CACjC;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,EAAE,QAAQ,CACtE;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QAClC,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CACN,CAAC,UAAU,CACT,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAC5E,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAE/B,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,gBAAgB,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CACjE,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAChF;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,EAAE,QAAQ,CACzE;QAAA,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CACzB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CACvB;YAAA,CAAC,SAAS,CAAC,sBAAsB,EAAE,EAAC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAC,CAAC,CAClF;UAAA,EAAE,QAAQ,CAAC,CACZ,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,EAChG;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,yBAAyB,EAAE,CAAC;QAC/C,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAG,CAAC,CACzG,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,CAC9C;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC,EAAE,QAAQ,CACrF;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QACpC,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CACN,EACE;YAAA,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,EACzE;YAAA,CAAC,YAAY,CAAC,CAAC,CAAC,CACd,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAG,CAC7F,CAAC,CAAC,CAAC,IAAI,CACV;UAAA,GACF,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CACpC;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,EAAE,QAAQ,CAC3E;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,kBAAkB,KAAK,YAAY,IAAI,KAAK,CAAC,kBAAkB,KAAK,WAAW,EAAE,CAAC;QAC1F,OAAO,CACL,CAAC,QAAQ,CACP,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,UAAU,CACf,KAAK,CAAC,CAAC,SAAS,CACd,KAAK,CAAC,kBAAkB,KAAK,WAAW,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,6BAA6B,CACxG,CAAC,CACF;QAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EACzD;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,EAAE,QAAQ,CAC9E;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,EAAE,QAAQ,CAC1E;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;QACxE,MAAM,KAAK,GAAG,SAAS,CACrB,KAAK,CAAC,YAAY,KAAK,aAAa;YAClC,CAAC,CAAC,wBAAwB;YAC1B,CAAC,CAAC,KAAK,CAAC,YAAY,KAAK,kBAAkB;gBACzC,CAAC,CAAC,4BAA4B;gBAC9B,CAAC,CAAC,KAAK,CAAC,YAAY,KAAK,iBAAiB;oBACxC,CAAC,CAAC,8BAA8B;oBAChC,CAAC,CAAC,2BAA2B,CACpC,CAAA;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,KAAK,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAA;QACpF,OAAO,CACL,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CACrD;QAAA,CAAC,QAAQ,CAAC,CAAC,CAAC,CACV,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CACvB;YAAA,CAAC,SAAS,CAAC,gBAAgB,EAAE;oBAC3B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;oBACnC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAClC,SAAS,EAAE,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;iBACtD,CAAC,CACJ;UAAA,EAAE,QAAQ,CAAC,CACZ,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,KAAK,CAAC,YAAY,KAAK,aAAa,IAAI,KAAK,CAAC,sBAAsB,KAAK,IAAI,CAAC,CAAC,CAAC,CAC/E,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAG,CACvE,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EACzD;QAAA,CAAC,KAAK,CAAC,YAAY,KAAK,aAAa,CAAC,CAAC,CAAC,CACtC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAC1E,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,8BAA8B,EAAE,QAAQ,CACpE;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAA;QAC7C,MAAM,KAAK,GAAG,OAAO;YACnB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,yBAAyB,CAAC;YACjG,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,UAAU;gBAC1B,CAAC,CAAC,gBAAgB;gBAClB,CAAC,CAAC,eAAe,CAAA;QACrB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC7E,MAAM,YAAY,GAChB,KAAK,CAAC,WAAW,KAAK,IAAI;YAC1B,KAAK,CAAC,UAAU,KAAK,IAAI;YACzB,KAAK,CAAC,WAAW,GAAG,CAAC;YACrB,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,CAAA;QACvC,OAAO,CACL,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CACrD;QAAA,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,CACtB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CACvB;YAAA,CAAC,YAAY;oBACX,CAAC,CAAC,SAAS,CAAC,gBAAgB,EAAE;wBAC1B,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;wBAClC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;wBAC/B,SAAS;qBACV,CAAC;oBACJ,CAAC,CAAC,SAAS,CACf;UAAA,EAAE,QAAQ,CAAC,CACZ,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CACzB,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAG,CAC7D,CAAC,CAAC,CAAC,CACF,EACE;YAAA,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,EAC1D;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,EAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC,CAAC,CACpE;cAAA,CAAC,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,EAAC,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAC,CAAC,CAAC,EAEtG;YAAA,EAAE,IAAI,CACR;UAAA,GAAG,CACJ,CACD;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,8BAA8B,EAAE,QAAQ,CAClE;QAAA,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,CACvC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,EAAE,QAAQ,CAAC,CAC7E,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAClD,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAC1E,CAAC,CAAC,CAAC,IAAI,CACV;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QAClC,OAAO,CACL,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,uBAAuB,EAAE,EAAC,UAAU,EAAC,CAAC,CAAC,CAChG;QAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EACzD;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC,EAAE,QAAQ,CAC/E;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC,EAAE,QAAQ,CACnF;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,sBAAsB;YACxC,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC;YACxC,CAAC,CAAC,KAAK,CAAC,aAAa;gBACnB,CAAC,CAAC,SAAS,CAAC,uCAAuC,CAAC;gBACpD,CAAC,CAAC,kBAAkB,CAAA;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,sBAAsB;YAC1C,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC;YAC/C,CAAC,CAAC,KAAK,CAAC,aAAa;gBACnB,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC;gBAC3D,CAAC,CAAC,8BAA8B,CAAA;QACpC,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CACN,CAAC,UAAU,CACT,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAClF,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAE/B,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,gBAAgB,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CACjE,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,CAAC,KAAK,CAAC,CACb;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,CAC7C;QAAA,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CACzB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CACvB;YAAA,CAAC,SAAS,CAAC,sBAAsB,EAAE,EAAC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAC,CAAC,CAClF;UAAA,EAAE,QAAQ,CAAC,CACZ,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,EAChG;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CACN,EACE;YAAA,CAAC,UAAU,CACT,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CACzC,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAExE;YAAA,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACxB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,SAAS,EAAG,CAChG,CAAC,CAAC,CAAC,IAAI,CACV;UAAA,GACF,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,eAAe,CACrB;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,CAC5D;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CACN,SAAS,CAAC,CAAC,CAAC,CACV,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAG,CAC3F,CAAC,CAAC,CAAC,SACN,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,WAAW,CAChB,KAAK,CAAC,sBAAsB,CAC5B;MAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,QAAQ,CACnD;MAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAC3D;IAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;AACH,CAAC;AAWD,SAAS,QAAQ,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,GAAG,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAgB;IACpG,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,sBAAsB,CACrD;MAAA,CAAC,UAAU,CACT,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAgB,KAAK,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAC/F,mBAAmB,CACnB,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAC5B,MAAM,CAAC,iBAAiB,CACxB;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EACrC;QAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CACtE;QAAA,CAAC,QAAQ,CACX;MAAA,EAAE,UAAU,CACZ;MAAA,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAG,CACjG;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,EAAC,QAAQ,EAAE,MAAM,EAA8D;IAC/F,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAA;AAC/E,CAAC;AAED,SAAS,WAAW,CAAC,EAAC,MAAM,EAAE,OAAO,EAAoD;IACvF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;AAC9F,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAqD;IAC/F,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,CAAC;QACL,UAAU,EAAE;YACV,eAAe,EAAE,MAAM,CAAC,OAAO;YAC/B,eAAe,EAAE,CAAC;YAClB,cAAc,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,EAAE;SAChB;QACD,IAAI,EAAE;YACJ,eAAe,EAAE,MAAM,CAAC,UAAU;YAClC,WAAW,EAAE,MAAM,CAAC,MAAM;YAC1B,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,EAAE;SACZ;QACD,QAAQ,EAAE;YACR,eAAe,EAAE,MAAM,CAAC,MAAM;YAC9B,KAAK,EAAE,MAAM,CAAC,UAAU;YACxB,UAAU,EAAE,WAAW;YACvB,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,KAAK;SAClB;QACD,EAAE,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAC;QACzD,EAAE,EAAE;YACF,iBAAiB,EAAE,CAAC;YACpB,KAAK,EAAE,MAAM,CAAC,UAAU;YACxB,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,EAAE;YACd,cAAc,EAAE,CAAC;YACjB,aAAa,EAAE,CAAC;SACjB;QACD,EAAE,EAAE;YACF,iBAAiB,EAAE,CAAC;YACpB,KAAK,EAAE,MAAM,CAAC,UAAU;YACxB,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,EAAE;YACd,cAAc,EAAE,CAAC;YACjB,aAAa,EAAE,CAAC;SACjB;QACD,EAAE,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAC;QAClG,EAAE,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAC;QAClG,EAAE,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAC;QAClG,EAAE,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAC;QAC/F,EAAE,EAAE,EAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,EAAC;QACzD,KAAK,EAAE,EAAC,YAAY,EAAE,CAAC,EAAC;QACxB,EAAE,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAC;QACzD,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC,OAAO;YACrB,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,EAAE;YACd,kBAAkB,EAAE,WAAW;SAChC;QACD,SAAS,EAAE,EAAC,eAAe,EAAE,CAAC,EAAC;QAC/B,aAAa,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAC;QACpE,MAAM,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAC;QACnF,KAAK,EAAE,EAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,EAAC;QACpD,SAAS,EAAE,EAAC,OAAO,EAAE,CAAC,EAAC;QACvB,IAAI,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAC;KAC5D,CAAC,EACF,CAAC,MAAM,CAAC,CACT,CAAA;IACD,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CAAC,CAAC;QACL,MAAM,EAAE;YACN,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI,EAAE,MAAM,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM,CAAC,OAAO;YACpB,IAAI,EAAE,MAAM,CAAC,OAAO;SACrB;KACF,CAAC,EACF,CAAC,MAAM,CAAC,CACT,CAAA;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAC,CAAC,CAAA;IAE5G,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAC3E;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,UAAU,EACV,MAAM,EACN,KAAK,GAKN;IACC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAExC,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,EAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAC5F;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAC/E;MAAA,CAAC,UAAU,CACT,qBAAqB,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAC/C,mBAAmB,CACnB,mBAAmB,CACnB,4BAA4B,CAC5B,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAC5B,MAAM,CAAC,sBAAsB,CAC7B;QAAA,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CACnB,KAAK,CAAC,CAAC;gBACL,MAAM,CAAC,cAAc;gBACrB,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,qBAAqB;gBACzC,KAAK,GAAG,CAAC,IAAI,EAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAC;aAC7C,CAAC,CACF;YAAA,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAC,CAAC,CAAC,CAC5E;cAAA,CAAC,KAAK,CAAC,OAAO,CAChB;YAAA,EAAE,IAAI,CACN;YAAA,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAC9D;UAAA,EAAE,IAAI,CAAC,CACR,CAAC,CACJ;MAAA,EAAE,UAAU,CACd;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,MAAM,EACN,QAAQ,GAAG,KAAK,EAChB,KAAK,EACL,OAAO,EACP,SAAS,GAAG,KAAK,GAOlB;IACC,OAAO,CACL,CAAC,SAAS,CACR,iBAAiB,CAAC,QAAQ,CAC1B,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,KAAK,CAAC,CAAC,CAAC,EAAC,OAAO,EAAC,EAAE,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM;YACb;gBACE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;gBAClE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;gBAC1D,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAC9C;SACF,CAAC,CACF,MAAM,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAC1B;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAC7G;IAAA,EAAE,SAAS,CAAC,CACb,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,EAAC,KAAK,EAAkB;IAC1C,OAAO,CACL,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CACzD;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAC/D;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,uDAAuD,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAC5E;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,kDAAkD,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EACzE;IAAA,EAAE,GAAG,CAAC,CACP,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,EAAC,MAAM,EAAE,IAAI,EAAgE;IAC7F,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;IACtF,MAAM,KAAK,GACT,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;IAChH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAC,KAAK,EAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE,EAAC,IAAI,EAAE,CAAC,EAAC;IACnB,MAAM,EAAE;QACN,UAAU,EAAE,QAAQ;QACpB,aAAa,EAAE,KAAK;QACpB,MAAM,EAAE,EAAE;QACV,cAAc,EAAE,eAAe;QAC/B,iBAAiB,EAAE,EAAE;KACtB;IACD,IAAI,EAAE,EAAC,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAC;IACzD,aAAa,EAAE,EAAC,IAAI,EAAE,CAAC,EAAC;IACxB,aAAa,EAAE,EAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAC;IACrF,UAAU,EAAE,EAAC,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAC;IAC7E,YAAY,EAAE,EAAC,MAAM,EAAE,EAAE,EAAC;IAC1B,OAAO,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC;IAClB,IAAI,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAC;IAC5E,KAAK,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAC;IAC7D,IAAI,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAC;IACxE,OAAO,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,KAAK,EAAC;IACzE,aAAa,EAAE,EAAC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAC;IAC7F,YAAY,EAAE,EAAC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC;IAC1C,aAAa,EAAE;QACb,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,CAAC;QACX,GAAG,EAAE,EAAE;QACP,QAAQ,EAAE,GAAG;QACb,SAAS,EAAE,GAAG;QACd,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,MAAM;KACd;IACD,cAAc,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAC;IACjD,kGAAkG;IAClG,aAAa,EAAE,EAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAC;IACxD,gBAAgB,EAAE,EAAC,GAAG,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAC;IAC7C,cAAc,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC;IACxB,qBAAqB,EAAE,EAAC,cAAc,EAAE,UAAU,CAAC,aAAa,EAAE,UAAU,EAAE,EAAE,EAAC;IACjF,gBAAgB,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAC;IACnD,wBAAwB,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC;IACnC,MAAM,EAAE;QACN,UAAU,EAAE,QAAQ;QACpB,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,QAAQ;QACxB,SAAS,EAAE,EAAE;QACb,iBAAiB,EAAE,EAAE;KACtB;IACD,UAAU,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAC;CAC9C,CAAC,CAAA","sourcesContent":["/* eslint-disable react-native/no-raw-text -- BodyText and PercentText are local Text wrappers. */\nimport React, {useMemo} from \"react\"\nimport {\n ActivityIndicator,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\"\nimport {useMarkdown, type MarkedStyles, type useMarkdownHookOptions} from \"react-native-marked\"\nimport {SafeAreaView} from \"react-native-safe-area-context\"\nimport Svg, {Path, Rect} from \"react-native-svg\"\n\nimport {\n MINIMUM_OTA_BATTERY_LEVEL,\n useMentraLiveOta,\n type MentraLiveOtaController,\n type MentraLiveOtaFlowPage,\n} from \"./useMentraLiveOta\"\n\nexport type {MentraLiveOtaFlowPage} from \"./useMentraLiveOta\"\n\nexport type MentraLiveOtaFlowTheme = {\n background: string\n border: string\n error: string\n foreground: string\n primary: string\n primaryText: string\n textDim: string\n}\n\nexport type MentraLiveOtaFlowTranslate = (key: string, options?: Record<string, string>) => string\n\nexport type MentraLiveOtaFlowProps = {\n /** Display name used in update copy. */\n deviceName?: string\n /** Entry page. `progress` exists for recovery/deep-link compatibility. */\n initialPage?: MentraLiveOtaFlowPage\n /** Start the OTA-only projections. Full Engine hosts should pass false. */\n initializeRuntime?: boolean\n /** Called after the final check or when the user leaves an optional update. */\n onFinished: () => void\n /** Host-owned Wi-Fi setup for glasses that do not support hotspot OTA. */\n onOpenWifiSetup: () => void\n /** Lets a host coordinate its global connection overlay with OTA progress and firmware restarts. */\n onFirmwareRestartingChange?: (restarting: boolean, progressActive: boolean) => void\n /** Enables the existing developer-only escape hatches. */\n allowDevSkip?: boolean\n /** Enables the existing super-mode interrupted-session escape hatch. */\n superMode?: boolean\n /** Optional host localization. Defaults to the Mentra App English OTA copy. */\n translate?: MentraLiveOtaFlowTranslate\n /** Optional host theme. Both hosts use the same layout and state machine. */\n theme?: Partial<MentraLiveOtaFlowTheme>\n style?: StyleProp<ViewStyle>\n}\n\nconst DEFAULT_THEME: MentraLiveOtaFlowTheme = {\n background: \"#FFFFFF\",\n border: \"#D7DFDA\",\n error: \"#C43131\",\n foreground: \"#0E2C1A\",\n primary: \"#00B869\",\n primaryText: \"#FFFFFF\",\n textDim: \"#66736B\",\n}\n\nconst ENGLISH_COPY: Record<string, string> = {\n \"ota:downloadingToPhone\": \"Downloading update to phone...\",\n \"ota:startingGlassesHotspot\": \"Starting glasses hotspot...\",\n \"ota:connectingPhoneToGlasses\": \"Connecting phone to glasses...\",\n \"ota:startingHotspotUpdate\": \"Starting update...\",\n \"ota:transferringToGlasses\": \"Transferring update to glasses...\",\n \"ota:installingOnGlasses\": \"Installing update on glasses...\",\n \"ota:componentApk\": \"Glasses software\",\n \"ota:componentMtk\": \"System firmware\",\n \"ota:componentBes\": \"Bluetooth firmware\",\n \"ota:updateFile\": \"File {{current}} of {{total}} · {{component}}\",\n \"ota:updatePart\": \"Update {{current}} of {{total}} · {{component}}\",\n \"ota:phoneFileProgress\": \"Each file downloads separately. Progress is for the current file.\",\n \"ota:transferFileProgress\": \"Progress is for this file’s transfer from your phone.\",\n\n \"common:continue\": \"Continue\",\n \"common:done\": \"Done\",\n \"ota:checkingForUpdates\": \"Checking for updates\",\n \"ota:checkingForUpdatesMessage\":\n \"Connected devices will perform automatic updates. Automatic updates can be disabled in Device Settings\",\n \"ota:finishingUpdate\": \"Finishing your update\",\n \"ota:checkingAdditionalUpdates\": \"Checking whether your glasses need any additional updates.\",\n \"ota:updateAvailable\": \"{{deviceName}} Update Available\",\n \"ota:batteryRequiredTitle\": \"Charge {{deviceName}} to Update\",\n \"ota:batteryRequiredMessage\":\n \"{{deviceName}} is currently at {{batteryLevel}}%. Charge it to at least {{minimumBatteryLevel}}% before updating.\",\n \"ota:batteryRequiredLiveUpdate\": \"This screen will update automatically as the battery charges.\",\n \"ota:updateConnectWifi\": \"Connect your {{deviceName}} to WiFi to install the update.\",\n \"ota:wifiRequiredTitle\": \"WiFi Needed for Update\",\n \"ota:updateDescription\":\n \"A new update is available for your glasses. We recommend updating now for the best experience.\",\n \"ota:updateSequenceMessage\":\n \"Your glasses may install more than one update and restart several times. Keep them nearby until finished.\",\n \"ota:releaseTransition\": \"{{fromVersion}} → {{toVersion}}\",\n \"ota:releaseTransitionUnknown\": \"Current version unknown → {{toVersion}}\",\n \"ota:updatedToVersion\": \"Updated to {{version}}\",\n \"ota:downgradeAvailable\": \"{{deviceName}} Version Change Required\",\n \"ota:downgradeDescription\":\n \"This app requires an earlier glasses software version. Your photos and videos will be preserved, but glasses settings will be reset and restored automatically after the change.\",\n \"ota:updateNow\": \"Update Now\",\n \"ota:setupWifi\": \"Setup WiFi\",\n \"ota:updateLater\": \"Later\",\n \"ota:updateComplete\": \"Update complete\",\n \"ota:whatsNew\": \"What's new\",\n \"ota:upToDate\": \"Up To Date\",\n \"ota:devBuild\": \"Development Build\",\n \"ota:devBuildNoOta\":\n \"This mobile app is a development build, so automatic glasses updates are disabled. Use the developer settings manifest override to update them manually.\",\n \"ota:noUpdatesAvailable\": \"Your glasses are running the latest version.\",\n \"ota:checkFailed\": \"Check Failed\",\n \"ota:checkFailedMessage\": \"Couldn't check for updates. Please check your connection and try again.\",\n \"ota:updateInfoUnavailable\": \"Update Info Unavailable\",\n \"ota:updateInfoUnavailableMessage\":\n \"Update information for this version of the app is unavailable. Please check the app store for a newer version of the Mentra App.\",\n \"ota:downgradeDuration\": \"Your glasses will restart twice — this may take up to 2 minutes.\",\n \"ota:versionChangeRestarting\": \"Installing a different version…\",\n \"ota:versionChangeVerifying\": \"Verifying your glasses…\",\n \"ota:versionChangeKeepNearby\": \"Keep your glasses nearby and connected. They will restart on their own.\",\n \"ota:restartingGlasses\": \"Restarting {{deviceName}}…\",\n \"ota:restartingGlassesMessage\":\n \"The update is installed. Keep your glasses nearby and leave this screen open while they finish starting.\",\n \"ota:restartingGlassesAutomatic\": \"We'll continue automatically when they're ready.\",\n \"ota:versionChangeComplete\": \"Version Change Complete\",\n \"ota:versionChangeCompleteMessage\":\n \"Your glasses are now on the required version. Their settings were reset and are being restored automatically.\",\n \"ota:versionChangeFirmwarePassComplete\": \"Firmware updated\",\n \"ota:versionChangeFirmwarePassCompleteMessage\":\n \"Your glasses restarted with new firmware. One more step: they'll now continue to the required version.\",\n}\n\nconst componentCopyKey = {\n apk: \"ota:componentApk\",\n mtk: \"ota:componentMtk\",\n bes: \"ota:componentBes\",\n} as const\n\nfunction defaultTranslate(key: string, options?: Record<string, string>): string {\n let value = ENGLISH_COPY[key] ?? key\n for (const [name, replacement] of Object.entries(options ?? {})) {\n value = value.replaceAll(`{{${name}}}`, replacement)\n }\n return value\n}\n\nexport function MentraLiveOtaFlow({\n allowDevSkip = typeof __DEV__ !== \"undefined\" && __DEV__,\n deviceName = \"Mentra Live\",\n initialPage = \"check\",\n initializeRuntime = true,\n onFinished,\n onFirmwareRestartingChange,\n onOpenWifiSetup,\n style,\n superMode = false,\n theme,\n translate = defaultTranslate,\n}: MentraLiveOtaFlowProps) {\n const colors = useMemo(() => ({...DEFAULT_THEME, ...theme}), [theme])\n const controller = useMentraLiveOta({\n initialPage,\n initializeRuntime,\n onFinished,\n onFirmwareRestartingChange,\n onOpenWifiSetup,\n })\n\n return (\n <SafeAreaView style={[styles.safeArea, {backgroundColor: colors.background}, style]}>\n <View style={styles.header}>\n <View />\n <MentraMark color={colors.primary} />\n </View>\n <OtaFlowContent\n allowDevSkip={allowDevSkip}\n colors={colors}\n controller={controller}\n deviceName={deviceName}\n superMode={superMode}\n translate={translate}\n />\n </SafeAreaView>\n )\n}\n\nfunction OtaFlowContent({\n allowDevSkip,\n colors,\n controller,\n deviceName,\n superMode,\n translate,\n}: {\n allowDevSkip: boolean\n colors: MentraLiveOtaFlowTheme\n controller: MentraLiveOtaController\n deviceName: string\n superMode: boolean\n translate: MentraLiveOtaFlowTranslate\n}) {\n const {state} = controller\n\n if (state.screen === \"initializing\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:checkingForUpdates\")}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"checking\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:checkingForUpdates\")}>\n <BodyText colors={colors}>{translate(\"ota:checkingForUpdatesMessage\")}</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"battery_required\") {\n return (\n <FlowPage\n actions={\n <>\n <FlowButton colors={colors} disabled label={translate(\"ota:updateNow\")} onPress={controller.install} />\n {state.canDismiss ? (\n <FlowButton colors={colors} label={translate(\"ota:updateLater\")} onPress={controller.finish} secondary />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:batteryRequiredTitle\", {deviceName})}>\n <BodyText colors={colors}>\n {translate(\"ota:batteryRequiredMessage\", {\n batteryLevel: String(state.batteryLevel),\n deviceName,\n minimumBatteryLevel: String(MINIMUM_OTA_BATTERY_LEVEL),\n })}\n </BodyText>\n <BodyText colors={colors}>{translate(\"ota:batteryRequiredLiveUpdate\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"finishing\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:finishingUpdate\")}>\n <BodyText colors={colors}>{translate(\"ota:checkingAdditionalUpdates\")}</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"update_available\" || state.screen === \"wifi_required\") {\n const titleKey =\n state.screen === \"wifi_required\"\n ? \"ota:wifiRequiredTitle\"\n : state.versionChange\n ? \"ota:downgradeAvailable\"\n : \"ota:updateAvailable\"\n return (\n <FlowPage\n colors={colors}\n icon=\"download\"\n title={translate(titleKey, {deviceName})}\n actions={\n <>\n <FlowButton\n colors={colors}\n disabled={!state.wifiStatusKnown}\n label={translate(state.screen === \"wifi_required\" ? \"ota:setupWifi\" : \"ota:updateNow\")}\n onPress={state.screen === \"wifi_required\" ? controller.openWifiSetup : controller.install}\n />\n {state.canDismiss ? (\n <FlowButton colors={colors} label={translate(\"ota:updateLater\")} onPress={controller.finish} secondary />\n ) : null}\n {allowDevSkip && state.updateRequired ? (\n <FlowButton colors={colors} label=\"Skip (dev only)\" onPress={controller.finish} secondary />\n ) : null}\n </>\n }>\n {state.releaseTransition ? (\n <BodyText colors={colors}>\n {state.releaseTransition.fromVersion\n ? translate(\"ota:releaseTransition\", {\n fromVersion: state.releaseTransition.fromVersion,\n toVersion: state.releaseTransition.toVersion,\n })\n : translate(\"ota:releaseTransitionUnknown\", {toVersion: state.releaseTransition.toVersion})}\n </BodyText>\n ) : null}\n <BodyText colors={colors}>\n {state.screen === \"wifi_required\"\n ? translate(\"ota:updateConnectWifi\", {deviceName})\n : translate(state.versionChange ? \"ota:downgradeDescription\" : \"ota:updateDescription\")}\n </BodyText>\n <BodyText colors={colors}>{translate(\"ota:updateSequenceMessage\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"dev_build\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={controller.finish} />}\n colors={colors}\n icon=\"settings\"\n title={translate(\"ota:devBuild\")}>\n <BodyText colors={colors}>{translate(\"ota:devBuildNoOta\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"up_to_date\") {\n return (\n <FlowPage\n actions={\n <FlowButton\n colors={colors}\n label={translate(state.completedUpdate ? \"common:done\" : \"common:continue\")}\n onPress={controller.finish}\n />\n }\n colors={colors}\n contentAlignment={state.changelogs.length > 0 ? \"top\" : \"center\"}\n icon=\"check\"\n title={translate(state.completedUpdate ? \"ota:updateComplete\" : \"ota:upToDate\")}>\n <BodyText colors={colors}>{translate(\"ota:noUpdatesAvailable\")}</BodyText>\n {state.releaseTransition ? (\n <BodyText colors={colors}>\n {translate(\"ota:updatedToVersion\", {version: state.releaseTransition.toVersion})}\n </BodyText>\n ) : null}\n <ChangelogList changelogs={state.changelogs} colors={colors} title={translate(\"ota:whatsNew\")} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"update_info_unavailable\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={controller.finish} />}\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:updateInfoUnavailable\")}>\n <BodyText colors={colors}>{translate(\"ota:updateInfoUnavailableMessage\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"check_failed\") {\n return (\n <FlowPage\n actions={\n <>\n <FlowButton colors={colors} label=\"Retry\" onPress={controller.retryCheck} />\n {allowDevSkip ? (\n <FlowButton colors={colors} label=\"Skip (dev only)\" onPress={controller.finish} secondary />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:checkFailed\")}>\n <BodyText colors={colors}>{translate(\"ota:checkFailedMessage\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.versionChangePhase === \"restarting\" || state.versionChangePhase === \"verifying\") {\n return (\n <FlowPage\n colors={colors}\n icon=\"download\"\n title={translate(\n state.versionChangePhase === \"verifying\" ? \"ota:versionChangeVerifying\" : \"ota:versionChangeRestarting\",\n )}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n <BodyText colors={colors}>{translate(\"ota:versionChangeKeepNearby\")}</BodyText>\n <BodyText colors={colors}>{translate(\"ota:downgradeDuration\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"starting\" || state.screen === \"preparing_hotspot\") {\n const title = translate(\n state.hotspotPhase === \"downloading\"\n ? \"ota:downloadingToPhone\"\n : state.hotspotPhase === \"starting_hotspot\"\n ? \"ota:startingGlassesHotspot\"\n : state.hotspotPhase === \"joining_hotspot\"\n ? \"ota:connectingPhoneToGlasses\"\n : \"ota:startingHotspotUpdate\",\n )\n const artifact = state.hotspotPhase === \"downloading\" ? state.hotspotArtifact : null\n return (\n <FlowPage colors={colors} icon=\"download\" title={title}>\n {artifact ? (\n <BodyText colors={colors}>\n {translate(\"ota:updateFile\", {\n current: String(artifact.index + 1),\n total: String(artifact.totalCount),\n component: translate(componentCopyKey[artifact.kind]),\n })}\n </BodyText>\n ) : null}\n {state.hotspotPhase === \"downloading\" && state.hotspotArtifactPercent !== null ? (\n <PercentText colors={colors} percent={state.hotspotArtifactPercent} />\n ) : null}\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n {state.hotspotPhase === \"downloading\" ? (\n <BodyText colors={colors}>{translate(\"ota:phoneFileProgress\")}</BodyText>\n ) : null}\n <BodyText colors={colors}>Do not disconnect your glasses</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"updating\") {\n const hotspot = state.transport === \"hotspot\"\n const title = hotspot\n ? translate(state.phase === \"download\" ? \"ota:transferringToGlasses\" : \"ota:installingOnGlasses\")\n : state.phase === \"download\"\n ? \"Downloading...\"\n : \"Installing...\"\n const component = state.step ? translate(componentCopyKey[state.step]) : null\n const hasStepCount =\n state.currentStep !== null &&\n state.totalSteps !== null &&\n state.currentStep > 0 &&\n state.currentStep <= state.totalSteps\n return (\n <FlowPage colors={colors} icon=\"download\" title={title}>\n {hotspot && component ? (\n <BodyText colors={colors}>\n {hasStepCount\n ? translate(\"ota:updatePart\", {\n current: String(state.currentStep),\n total: String(state.totalSteps),\n component,\n })\n : component}\n </BodyText>\n ) : null}\n {state.installingApkOnly ? (\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n ) : (\n <>\n <PercentText colors={colors} percent={state.progress ?? 0} />\n <View style={[styles.progressTrack, {backgroundColor: colors.border}]}>\n <View\n style={[styles.progressFill, {backgroundColor: colors.primary, width: `${state.progress ?? 0}%`}]}\n />\n </View>\n </>\n )}\n <BodyText colors={colors}>Do not disconnect your glasses</BodyText>\n {hotspot && state.phase === \"download\" ? (\n <BodyText colors={colors}>{translate(\"ota:transferFileProgress\")}</BodyText>\n ) : null}\n {state.versionChange && state.phase === \"install\" ? (\n <BodyText colors={colors}>{translate(\"ota:downgradeDuration\")}</BodyText>\n ) : null}\n </FlowPage>\n )\n }\n\n if (state.screen === \"restarting\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:restartingGlasses\", {deviceName})}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n <BodyText colors={colors}>{translate(\"ota:restartingGlassesMessage\")}</BodyText>\n <BodyText colors={colors}>{translate(\"ota:restartingGlassesAutomatic\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"complete\") {\n const title = state.versionChangeConverged\n ? translate(\"ota:versionChangeComplete\")\n : state.versionChange\n ? translate(\"ota:versionChangeFirmwarePassComplete\")\n : \"Update complete!\"\n const message = state.versionChangeConverged\n ? translate(\"ota:versionChangeCompleteMessage\")\n : state.versionChange\n ? translate(\"ota:versionChangeFirmwarePassCompleteMessage\")\n : \"Your glasses are up to date.\"\n return (\n <FlowPage\n actions={\n <FlowButton\n colors={colors}\n label={state.versionChange && !state.versionChangeConverged ? \"Continue\" : \"Done\"}\n onPress={controller.finish}\n />\n }\n colors={colors}\n contentAlignment={state.changelogs.length > 0 ? \"top\" : \"center\"}\n icon=\"check\"\n title={title}>\n <BodyText colors={colors}>{message}</BodyText>\n {state.releaseTransition ? (\n <BodyText colors={colors}>\n {translate(\"ota:updatedToVersion\", {version: state.releaseTransition.toVersion})}\n </BodyText>\n ) : null}\n <ChangelogList changelogs={state.changelogs} colors={colors} title={translate(\"ota:whatsNew\")} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"failed\") {\n return (\n <FlowPage\n actions={\n <>\n <FlowButton\n colors={colors}\n label={state.canRetry ? \"Retry\" : \"Done\"}\n onPress={state.canRetry ? controller.retryInstall : controller.finish}\n />\n {state.canOpenWifiSetup ? (\n <FlowButton colors={colors} label=\"Change WiFi\" onPress={controller.openWifiSetup} secondary />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title=\"Update Failed\">\n <BodyText colors={colors}>{state.error?.message}</BodyText>\n </FlowPage>\n )\n }\n\n return (\n <FlowPage\n actions={\n superMode ? (\n <FlowButton colors={colors} label=\"Skip (super)\" onPress={controller.discard} secondary />\n ) : undefined\n }\n colors={colors}\n icon=\"bluetooth\"\n title=\"Glasses disconnected\">\n <BodyText colors={colors}>Reconnecting...</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n}\n\ntype FlowPageProps = {\n actions?: React.ReactNode\n children?: React.ReactNode\n colors: MentraLiveOtaFlowTheme\n contentAlignment?: \"center\" | \"top\"\n icon: \"alert\" | \"bluetooth\" | \"check\" | \"download\" | \"settings\"\n title: string\n}\n\nfunction FlowPage({actions, children, colors, contentAlignment = \"center\", icon, title}: FlowPageProps) {\n return (\n <View style={styles.page} testID=\"mentra-live-ota-flow\">\n <ScrollView\n contentContainerStyle={[styles.centerContent, contentAlignment === \"top\" && styles.topContent]}\n nestedScrollEnabled\n style={styles.contentScroll}\n testID=\"ota-page-scroll\">\n <FlowIcon colors={colors} name={icon} />\n <Text style={[styles.title, {color: colors.foreground}]}>{title}</Text>\n {children}\n </ScrollView>\n {actions ? <View style={styles.actions}>{actions}</View> : <View style={styles.actionSpacer} />}\n </View>\n )\n}\n\nfunction BodyText({children, colors}: {children: React.ReactNode; colors: MentraLiveOtaFlowTheme}) {\n return <Text style={[styles.body, {color: colors.textDim}]}>{children}</Text>\n}\n\nfunction PercentText({colors, percent}: {colors: MentraLiveOtaFlowTheme; percent: number}) {\n return <Text style={[styles.percent, {color: colors.primary}]}>{Math.round(percent)}%</Text>\n}\n\nfunction ChangelogMarkdown({colors, markdown}: {colors: MentraLiveOtaFlowTheme; markdown: string}) {\n const markdownStyles = useMemo<MarkedStyles>(\n () => ({\n blockquote: {\n borderLeftColor: colors.primary,\n borderLeftWidth: 3,\n marginVertical: 2,\n opacity: 1,\n paddingLeft: 12,\n },\n code: {\n backgroundColor: colors.background,\n borderColor: colors.border,\n borderRadius: 8,\n borderWidth: 1,\n padding: 12,\n },\n codespan: {\n backgroundColor: colors.border,\n color: colors.foreground,\n fontFamily: \"monospace\",\n fontSize: 13,\n fontStyle: \"normal\",\n fontWeight: \"400\",\n },\n em: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n h1: {\n borderBottomWidth: 0,\n color: colors.foreground,\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n marginVertical: 0,\n paddingBottom: 0,\n },\n h2: {\n borderBottomWidth: 0,\n color: colors.foreground,\n fontSize: 17,\n fontWeight: \"700\",\n lineHeight: 23,\n marginVertical: 0,\n paddingBottom: 0,\n },\n h3: {color: colors.foreground, fontSize: 16, fontWeight: \"700\", lineHeight: 22, marginVertical: 0},\n h4: {color: colors.foreground, fontSize: 15, fontWeight: \"700\", lineHeight: 21, marginVertical: 0},\n h5: {color: colors.foreground, fontSize: 14, fontWeight: \"700\", lineHeight: 20, marginVertical: 0},\n h6: {color: colors.textDim, fontSize: 14, fontWeight: \"600\", lineHeight: 20, marginVertical: 0},\n hr: {borderBottomColor: colors.border, marginVertical: 2},\n image: {borderRadius: 8},\n li: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n link: {\n color: colors.primary,\n fontSize: 14,\n fontStyle: \"normal\",\n lineHeight: 20,\n textDecorationLine: \"underline\",\n },\n paragraph: {paddingVertical: 0},\n strikethrough: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n strong: {color: colors.foreground, fontSize: 14, fontWeight: \"700\", lineHeight: 20},\n table: {borderColor: colors.border, borderRadius: 8},\n tableCell: {padding: 8},\n text: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n }),\n [colors],\n )\n const markdownTheme = useMemo<NonNullable<useMarkdownHookOptions[\"theme\"]>>(\n () => ({\n colors: {\n background: colors.background,\n border: colors.border,\n code: colors.border,\n link: colors.primary,\n text: colors.textDim,\n },\n }),\n [colors],\n )\n const elements = useMarkdown(markdown, {colorScheme: \"light\", styles: markdownStyles, theme: markdownTheme})\n\n return (\n <View style={styles.changelogMarkdownContent} testID=\"ota-changelog-markdown\">\n {elements}\n </View>\n )\n}\n\nexport function ChangelogList({\n changelogs,\n colors,\n title,\n}: {\n changelogs: MentraLiveOtaController[\"state\"][\"changelogs\"]\n colors: MentraLiveOtaFlowTheme\n title: string\n}) {\n if (changelogs.length === 0) return null\n\n return (\n <View style={[styles.changelogCard, {borderColor: colors.border}]} testID=\"ota-changelog-card\">\n <Text style={[styles.changelogTitle, {color: colors.foreground}]}>{title}</Text>\n <ScrollView\n contentContainerStyle={styles.changelogContent}\n nestedScrollEnabled\n persistentScrollbar\n showsVerticalScrollIndicator\n style={styles.changelogList}\n testID=\"ota-changelog-scroll\">\n {changelogs.map((entry, index) => (\n <View\n key={entry.version}\n style={[\n styles.changelogEntry,\n index > 0 && styles.changelogEntryDivider,\n index > 0 && {borderTopColor: colors.border},\n ]}>\n <Text selectable style={[styles.changelogVersion, {color: colors.foreground}]}>\n {entry.version}\n </Text>\n <ChangelogMarkdown colors={colors} markdown={entry.markdown} />\n </View>\n ))}\n </ScrollView>\n </View>\n )\n}\n\nfunction FlowButton({\n colors,\n disabled = false,\n label,\n onPress,\n secondary = false,\n}: {\n colors: MentraLiveOtaFlowTheme\n disabled?: boolean\n label: string\n onPress: () => void\n secondary?: boolean\n}) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n disabled={disabled}\n onPress={onPress}\n style={({pressed}) => [\n styles.button,\n {\n backgroundColor: secondary ? colors.background : colors.foreground,\n borderColor: secondary ? colors.border : colors.foreground,\n opacity: disabled ? 0.45 : pressed ? 0.75 : 1,\n },\n ]}\n testID={`button-${label}`}>\n <Text style={[styles.buttonText, {color: secondary ? colors.foreground : colors.background}]}>{label}</Text>\n </Pressable>\n )\n}\n\nfunction MentraMark({color}: {color: string}) {\n return (\n <Svg width={33} height={18} viewBox=\"0 0 50 27\" fill=\"none\">\n <Rect y={14.8072} width={11.8457} height={11.8457} fill={color} />\n <Path d=\"M9.36639 0L30.7163 14.8072V26.6529L9.36639 11.8457V0Z\" fill={color} />\n <Path d=\"M28.6501 0L50 14.8072V26.6529L28.6501 11.8457V0Z\" fill={color} />\n </Svg>\n )\n}\n\nfunction FlowIcon({colors, name}: {colors: MentraLiveOtaFlowTheme; name: FlowPageProps[\"icon\"]}) {\n const color = name === \"alert\" || name === \"bluetooth\" ? colors.error : colors.primary\n const glyph =\n name === \"check\" ? \"✓\" : name === \"alert\" ? \"!\" : name === \"settings\" ? \"⚙\" : name === \"bluetooth\" ? \"⌁\" : \"↓\"\n return <Text style={[styles.icon, {color}]}>{glyph}</Text>\n}\n\nconst styles = StyleSheet.create({\n safeArea: {flex: 1},\n header: {\n alignItems: \"center\",\n flexDirection: \"row\",\n height: 48,\n justifyContent: \"space-between\",\n paddingHorizontal: 20,\n },\n page: {flex: 1, paddingBottom: 24, paddingHorizontal: 24},\n contentScroll: {flex: 1},\n centerContent: {alignItems: \"center\", flexGrow: 1, gap: 16, justifyContent: \"center\"},\n topContent: {justifyContent: \"flex-start\", paddingBottom: 16, paddingTop: 12},\n actionSpacer: {height: 48},\n actions: {gap: 12},\n icon: {fontSize: 64, fontWeight: \"500\", lineHeight: 72, textAlign: \"center\"},\n title: {fontSize: 20, fontWeight: \"600\", textAlign: \"center\"},\n body: {fontSize: 14, lineHeight: 20, maxWidth: 420, textAlign: \"center\"},\n percent: {fontSize: 30, fontVariant: [\"tabular-nums\"], fontWeight: \"700\"},\n progressTrack: {borderRadius: 4, height: 8, maxWidth: 420, overflow: \"hidden\", width: \"100%\"},\n progressFill: {borderRadius: 4, height: 8},\n changelogCard: {\n borderRadius: 16,\n borderWidth: 1,\n flexGrow: 1,\n gap: 12,\n maxWidth: 420,\n minHeight: 200,\n padding: 16,\n width: \"100%\",\n },\n changelogTitle: {fontSize: 16, fontWeight: \"700\"},\n // Bound the notes themselves so the card can grow for its title, but not for all of the Markdown.\n changelogList: {flexGrow: 1, height: 120, width: \"100%\"},\n changelogContent: {gap: 20, paddingBottom: 4},\n changelogEntry: {gap: 8},\n changelogEntryDivider: {borderTopWidth: StyleSheet.hairlineWidth, paddingTop: 20},\n changelogVersion: {fontSize: 14, fontWeight: \"600\"},\n changelogMarkdownContent: {gap: 10},\n button: {\n alignItems: \"center\",\n borderRadius: 50,\n borderWidth: 1,\n justifyContent: \"center\",\n minHeight: 44,\n paddingHorizontal: 20,\n },\n buttonText: {fontSize: 14, fontWeight: \"500\"},\n})\n"]}
@@ -30,6 +30,15 @@ export type MentraLiveOtaState = {
30
30
  hotspotSupported: boolean;
31
31
  hotspotPhase: MentraLiveOtaHotspotPhase;
32
32
  hotspotArtifactPercent: number | null;
33
+ /**
34
+ * Current phone download context. Index is zero-based; percent applies to this file only.
35
+ * Optional for source compatibility; this hook returns null when no file is active.
36
+ */
37
+ hotspotArtifact?: {
38
+ kind: MentraLiveOtaStep;
39
+ index: number;
40
+ totalCount: number;
41
+ } | null;
33
42
  phase: MentraLiveOtaInstallPhase | null;
34
43
  step: MentraLiveOtaStep | null;
35
44
  currentStep: number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"useMentraLiveOta.d.ts","sourceRoot":"","sources":["../../src/react/useMentraLiveOta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useMentraLiveOta.d.ts","sourceRoot":"","sources":["../../src/react/useMentraLiveOta.ts"],"names":[],"mappings":"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"}
@@ -470,6 +470,7 @@ export function useMentraLiveOta(options = {}) {
470
470
  hotspotSupported,
471
471
  hotspotPhase: "idle",
472
472
  hotspotArtifactPercent: null,
473
+ hotspotArtifact: null,
473
474
  phase: null,
474
475
  step: null,
475
476
  currentStep: null,
@@ -528,6 +529,7 @@ export function useMentraLiveOta(options = {}) {
528
529
  hotspotSupported,
529
530
  hotspotPhase: "idle",
530
531
  hotspotArtifactPercent: null,
532
+ hotspotArtifact: null,
531
533
  phase: null,
532
534
  step: null,
533
535
  currentStep: null,
@@ -570,6 +572,7 @@ export function useMentraLiveOta(options = {}) {
570
572
  }
571
573
  : null;
572
574
  const totalSteps = installSnapshot.otaStatus?.totalSteps ?? null;
575
+ const artifact = installSnapshot.hotspotArtifact;
573
576
  const changelogs = screen === "complete" ? releaseChangelogsForActiveChain() : [];
574
577
  return {
575
578
  screen,
@@ -585,6 +588,7 @@ export function useMentraLiveOta(options = {}) {
585
588
  hotspotSupported,
586
589
  hotspotPhase: installSnapshot.hotspotPhase,
587
590
  hotspotArtifactPercent: installSnapshot.hotspotArtifactPercent,
591
+ hotspotArtifact: artifact ? { kind: artifact.kind, index: artifact.index, totalCount: artifact.totalCount } : null,
588
592
  phase: installSnapshot.otaStatus?.phase ?? installSnapshot.otaProgress?.stage ?? null,
589
593
  step: installSnapshot.otaStatus?.stepType ?? null,
590
594
  currentStep: installSnapshot.otaStatus?.currentStep ?? null,