@mentra/engine 0.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -0
- package/build/devtools.d.ts +11 -0
- package/build/devtools.d.ts.map +1 -0
- package/build/devtools.js +13 -0
- package/build/devtools.js.map +1 -0
- package/build/engine.d.ts +261 -0
- package/build/engine.d.ts.map +1 -0
- package/build/engine.js +170 -0
- package/build/engine.js.map +1 -0
- package/build/facades/dev.d.ts +58 -0
- package/build/facades/dev.d.ts.map +1 -0
- package/build/facades/dev.js +189 -0
- package/build/facades/dev.js.map +1 -0
- package/build/facades/display.d.ts +21 -0
- package/build/facades/display.d.ts.map +1 -0
- package/build/facades/display.js +17 -0
- package/build/facades/display.js.map +1 -0
- package/build/facades/displayMirror.d.ts +15 -0
- package/build/facades/displayMirror.d.ts.map +1 -0
- package/build/facades/displayMirror.js +29 -0
- package/build/facades/displayMirror.js.map +1 -0
- package/build/facades/gallery.d.ts +62 -0
- package/build/facades/gallery.d.ts.map +1 -0
- package/build/facades/gallery.js +61 -0
- package/build/facades/gallery.js.map +1 -0
- package/build/facades/glasses.d.ts +141 -0
- package/build/facades/glasses.d.ts.map +1 -0
- package/build/facades/glasses.js +199 -0
- package/build/facades/glasses.js.map +1 -0
- package/build/facades/glassesSettings.d.ts +13 -0
- package/build/facades/glassesSettings.d.ts.map +1 -0
- package/build/facades/glassesSettings.js +54 -0
- package/build/facades/glassesSettings.js.map +1 -0
- package/build/facades/glassesWifi.d.ts +25 -0
- package/build/facades/glassesWifi.d.ts.map +1 -0
- package/build/facades/glassesWifi.js +57 -0
- package/build/facades/glassesWifi.js.map +1 -0
- package/build/facades/miniapps.d.ts +43 -0
- package/build/facades/miniapps.d.ts.map +1 -0
- package/build/facades/miniapps.js +49 -0
- package/build/facades/miniapps.js.map +1 -0
- package/build/facades/notifications.d.ts +13 -0
- package/build/facades/notifications.d.ts.map +1 -0
- package/build/facades/notifications.js +12 -0
- package/build/facades/notifications.js.map +1 -0
- package/build/facades/ota.d.ts +103 -0
- package/build/facades/ota.d.ts.map +1 -0
- package/build/facades/ota.js +156 -0
- package/build/facades/ota.js.map +1 -0
- package/build/facades/pairing.d.ts +114 -0
- package/build/facades/pairing.d.ts.map +1 -0
- package/build/facades/pairing.js +275 -0
- package/build/facades/pairing.js.map +1 -0
- package/build/facades/permissions.d.ts +33 -0
- package/build/facades/permissions.d.ts.map +1 -0
- package/build/facades/permissions.js +155 -0
- package/build/facades/permissions.js.map +1 -0
- package/build/facades/phoneNotifications.d.ts +21 -0
- package/build/facades/phoneNotifications.d.ts.map +1 -0
- package/build/facades/phoneNotifications.js +51 -0
- package/build/facades/phoneNotifications.js.map +1 -0
- package/build/facades/reports.d.ts +36 -0
- package/build/facades/reports.d.ts.map +1 -0
- package/build/facades/reports.js +134 -0
- package/build/facades/reports.js.map +1 -0
- package/build/facades/session.d.ts +21 -0
- package/build/facades/session.d.ts.map +1 -0
- package/build/facades/session.js +52 -0
- package/build/facades/session.js.map +1 -0
- package/build/facades/settings.d.ts +37 -0
- package/build/facades/settings.d.ts.map +1 -0
- package/build/facades/settings.js +55 -0
- package/build/facades/settings.js.map +1 -0
- package/build/facades/speech.d.ts +30 -0
- package/build/facades/speech.d.ts.map +1 -0
- package/build/facades/speech.js +37 -0
- package/build/facades/speech.js.map +1 -0
- package/build/index.d.ts +43 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +45 -0
- package/build/index.js.map +1 -0
- package/build/internal.d.ts +67 -0
- package/build/internal.d.ts.map +1 -0
- package/build/internal.js +90 -0
- package/build/internal.js.map +1 -0
- package/build/runtime/bootstrap.d.ts +83 -0
- package/build/runtime/bootstrap.d.ts.map +1 -0
- package/build/runtime/bootstrap.js +56 -0
- package/build/runtime/bootstrap.js.map +1 -0
- package/build/runtime/config.d.ts +146 -0
- package/build/runtime/config.d.ts.map +1 -0
- package/build/runtime/config.js +18 -0
- package/build/runtime/config.js.map +1 -0
- package/build/runtime/streamConfig.d.ts +4 -0
- package/build/runtime/streamConfig.d.ts.map +1 -0
- package/build/runtime/streamConfig.js +38 -0
- package/build/runtime/streamConfig.js.map +1 -0
- package/build/services/AppRegistry.d.ts +269 -0
- package/build/services/AppRegistry.d.ts.map +1 -0
- package/build/services/AppRegistry.js +1079 -0
- package/build/services/AppRegistry.js.map +1 -0
- package/build/services/AudioCloudUplink.d.ts +9 -0
- package/build/services/AudioCloudUplink.d.ts.map +1 -0
- package/build/services/AudioCloudUplink.js +48 -0
- package/build/services/AudioCloudUplink.js.map +1 -0
- package/build/services/AudioPlaybackService.d.ts +175 -0
- package/build/services/AudioPlaybackService.d.ts.map +1 -0
- package/build/services/AudioPlaybackService.js +705 -0
- package/build/services/AudioPlaybackService.js.map +1 -0
- package/build/services/AutomaticReportResult.d.ts +20 -0
- package/build/services/AutomaticReportResult.d.ts.map +1 -0
- package/build/services/AutomaticReportResult.js +29 -0
- package/build/services/AutomaticReportResult.js.map +1 -0
- package/build/services/BlobStore.d.ts +91 -0
- package/build/services/BlobStore.d.ts.map +1 -0
- package/build/services/BlobStore.js +668 -0
- package/build/services/BlobStore.js.map +1 -0
- package/build/services/CaptionsTesterReportService.d.ts +4 -0
- package/build/services/CaptionsTesterReportService.d.ts.map +1 -0
- package/build/services/CaptionsTesterReportService.js +80 -0
- package/build/services/CaptionsTesterReportService.js.map +1 -0
- package/build/services/CloudAudioSubscriptionSync.d.ts +24 -0
- package/build/services/CloudAudioSubscriptionSync.d.ts.map +1 -0
- package/build/services/CloudAudioSubscriptionSync.js +39 -0
- package/build/services/CloudAudioSubscriptionSync.js.map +1 -0
- package/build/services/CloudClientService.d.ts +143 -0
- package/build/services/CloudClientService.d.ts.map +1 -0
- package/build/services/CloudClientService.js +644 -0
- package/build/services/CloudClientService.js.map +1 -0
- package/build/services/CloudTranscriptE2EMetrics.d.ts +4 -0
- package/build/services/CloudTranscriptE2EMetrics.d.ts.map +1 -0
- package/build/services/CloudTranscriptE2EMetrics.js +24 -0
- package/build/services/CloudTranscriptE2EMetrics.js.map +1 -0
- package/build/services/ConnectionCoordinator.d.ts +51 -0
- package/build/services/ConnectionCoordinator.d.ts.map +1 -0
- package/build/services/ConnectionCoordinator.js +34 -0
- package/build/services/ConnectionCoordinator.js.map +1 -0
- package/build/services/DevServerBridge.d.ts +63 -0
- package/build/services/DevServerBridge.d.ts.map +1 -0
- package/build/services/DevServerBridge.js +294 -0
- package/build/services/DevServerBridge.js.map +1 -0
- package/build/services/DeviceEventRouter.d.ts +3 -0
- package/build/services/DeviceEventRouter.d.ts.map +1 -0
- package/build/services/DeviceEventRouter.js +190 -0
- package/build/services/DeviceEventRouter.js.map +1 -0
- package/build/services/DeviceStoreHydration.d.ts +38 -0
- package/build/services/DeviceStoreHydration.d.ts.map +1 -0
- package/build/services/DeviceStoreHydration.js +124 -0
- package/build/services/DeviceStoreHydration.js.map +1 -0
- package/build/services/DisplayProcessor.d.ts +223 -0
- package/build/services/DisplayProcessor.d.ts.map +1 -0
- package/build/services/DisplayProcessor.js +552 -0
- package/build/services/DisplayProcessor.js.map +1 -0
- package/build/services/GlassesReadiness.d.ts +41 -0
- package/build/services/GlassesReadiness.d.ts.map +1 -0
- package/build/services/GlassesReadiness.js +82 -0
- package/build/services/GlassesReadiness.js.map +1 -0
- package/build/services/GlassesSettingsSync.d.ts +33 -0
- package/build/services/GlassesSettingsSync.d.ts.map +1 -0
- package/build/services/GlassesSettingsSync.js +121 -0
- package/build/services/GlassesSettingsSync.js.map +1 -0
- package/build/services/GlassesStatusProjection.d.ts +3 -0
- package/build/services/GlassesStatusProjection.d.ts.map +1 -0
- package/build/services/GlassesStatusProjection.js +65 -0
- package/build/services/GlassesStatusProjection.js.map +1 -0
- package/build/services/HeadingService.d.ts +27 -0
- package/build/services/HeadingService.d.ts.map +1 -0
- package/build/services/HeadingService.js +96 -0
- package/build/services/HeadingService.js.map +1 -0
- package/build/services/LocalDisplayManager.d.ts +139 -0
- package/build/services/LocalDisplayManager.d.ts.map +1 -0
- package/build/services/LocalDisplayManager.js +579 -0
- package/build/services/LocalDisplayManager.js.map +1 -0
- package/build/services/LocalMiniappRuntime.d.ts +439 -0
- package/build/services/LocalMiniappRuntime.d.ts.map +1 -0
- package/build/services/LocalMiniappRuntime.js +3695 -0
- package/build/services/LocalMiniappRuntime.js.map +1 -0
- package/build/services/LocalSttFallbackCoordinator.d.ts +57 -0
- package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -0
- package/build/services/LocalSttFallbackCoordinator.js +137 -0
- package/build/services/LocalSttFallbackCoordinator.js.map +1 -0
- package/build/services/MentraJSCrashController.d.ts +97 -0
- package/build/services/MentraJSCrashController.d.ts.map +1 -0
- package/build/services/MentraJSCrashController.js +138 -0
- package/build/services/MentraJSCrashController.js.map +1 -0
- package/build/services/MentraJSCrashloopReportService.d.ts +9 -0
- package/build/services/MentraJSCrashloopReportService.d.ts.map +1 -0
- package/build/services/MentraJSCrashloopReportService.js +54 -0
- package/build/services/MentraJSCrashloopReportService.js.map +1 -0
- package/build/services/MentraJSLogPipeline.d.ts +87 -0
- package/build/services/MentraJSLogPipeline.d.ts.map +1 -0
- package/build/services/MentraJSLogPipeline.js +137 -0
- package/build/services/MentraJSLogPipeline.js.map +1 -0
- package/build/services/MentraJSRouter.d.ts +203 -0
- package/build/services/MentraJSRouter.d.ts.map +1 -0
- package/build/services/MentraJSRouter.js +480 -0
- package/build/services/MentraJSRouter.js.map +1 -0
- package/build/services/MentraUIRouter.d.ts +137 -0
- package/build/services/MentraUIRouter.d.ts.map +1 -0
- package/build/services/MentraUIRouter.js +210 -0
- package/build/services/MentraUIRouter.js.map +1 -0
- package/build/services/MicStateCoordinator.d.ts +37 -0
- package/build/services/MicStateCoordinator.d.ts.map +1 -0
- package/build/services/MicStateCoordinator.js +81 -0
- package/build/services/MicStateCoordinator.js.map +1 -0
- package/build/services/MiniappEngine.d.ts +31 -0
- package/build/services/MiniappEngine.d.ts.map +1 -0
- package/build/services/MiniappEngine.js +119 -0
- package/build/services/MiniappEngine.js.map +1 -0
- package/build/services/MiniappLauncher.d.ts +129 -0
- package/build/services/MiniappLauncher.d.ts.map +1 -0
- package/build/services/MiniappLauncher.js +291 -0
- package/build/services/MiniappLauncher.js.map +1 -0
- package/build/services/MiniappRunningRegistry.d.ts +24 -0
- package/build/services/MiniappRunningRegistry.d.ts.map +1 -0
- package/build/services/MiniappRunningRegistry.js +52 -0
- package/build/services/MiniappRunningRegistry.js.map +1 -0
- package/build/services/NativeHttpResponse.d.ts +3 -0
- package/build/services/NativeHttpResponse.d.ts.map +1 -0
- package/build/services/NativeHttpResponse.js +6 -0
- package/build/services/NativeHttpResponse.js.map +1 -0
- package/build/services/NavigationHandlers.d.ts +90 -0
- package/build/services/NavigationHandlers.d.ts.map +1 -0
- package/build/services/NavigationHandlers.js +379 -0
- package/build/services/NavigationHandlers.js.map +1 -0
- package/build/services/NavigationService.d.ts +254 -0
- package/build/services/NavigationService.d.ts.map +1 -0
- package/build/services/NavigationService.js +553 -0
- package/build/services/NavigationService.js.map +1 -0
- package/build/services/NotificationsEmitter.d.ts +28 -0
- package/build/services/NotificationsEmitter.d.ts.map +1 -0
- package/build/services/NotificationsEmitter.js +22 -0
- package/build/services/NotificationsEmitter.js.map +1 -0
- package/build/services/OfflineSpeechModelService.d.ts +33 -0
- package/build/services/OfflineSpeechModelService.d.ts.map +1 -0
- package/build/services/OfflineSpeechModelService.js +136 -0
- package/build/services/OfflineSpeechModelService.js.map +1 -0
- package/build/services/OtaInstallCoordinator.d.ts +195 -0
- package/build/services/OtaInstallCoordinator.d.ts.map +1 -0
- package/build/services/OtaInstallCoordinator.js +1047 -0
- package/build/services/OtaInstallCoordinator.js.map +1 -0
- package/build/services/OtaService.d.ts +3 -0
- package/build/services/OtaService.d.ts.map +1 -0
- package/build/services/OtaService.js +65 -0
- package/build/services/OtaService.js.map +1 -0
- package/build/services/OtaUpdateCheckService.d.ts +65 -0
- package/build/services/OtaUpdateCheckService.d.ts.map +1 -0
- package/build/services/OtaUpdateCheckService.js +260 -0
- package/build/services/OtaUpdateCheckService.js.map +1 -0
- package/build/services/PairingIdentity.d.ts +80 -0
- package/build/services/PairingIdentity.d.ts.map +1 -0
- package/build/services/PairingIdentity.js +145 -0
- package/build/services/PairingIdentity.js.map +1 -0
- package/build/services/PhoneCalendarHelpers.d.ts +32 -0
- package/build/services/PhoneCalendarHelpers.d.ts.map +1 -0
- package/build/services/PhoneCalendarHelpers.js +157 -0
- package/build/services/PhoneCalendarHelpers.js.map +1 -0
- package/build/services/PhoneCalendarService.d.ts +5 -0
- package/build/services/PhoneCalendarService.d.ts.map +1 -0
- package/build/services/PhoneCalendarService.js +24 -0
- package/build/services/PhoneCalendarService.js.map +1 -0
- package/build/services/PhoneCameraFovCoordinator.d.ts +28 -0
- package/build/services/PhoneCameraFovCoordinator.d.ts.map +1 -0
- package/build/services/PhoneCameraFovCoordinator.js +180 -0
- package/build/services/PhoneCameraFovCoordinator.js.map +1 -0
- package/build/services/PhoneLocationService.d.ts +36 -0
- package/build/services/PhoneLocationService.d.ts.map +1 -0
- package/build/services/PhoneLocationService.js +115 -0
- package/build/services/PhoneLocationService.js.map +1 -0
- package/build/services/PhoneNotificationsSync.d.ts +3 -0
- package/build/services/PhoneNotificationsSync.d.ts.map +1 -0
- package/build/services/PhoneNotificationsSync.js +35 -0
- package/build/services/PhoneNotificationsSync.js.map +1 -0
- package/build/services/PhonePhotoCoordinator.d.ts +103 -0
- package/build/services/PhonePhotoCoordinator.d.ts.map +1 -0
- package/build/services/PhonePhotoCoordinator.js +326 -0
- package/build/services/PhonePhotoCoordinator.js.map +1 -0
- package/build/services/PhoneStreamCoordinator.d.ts +168 -0
- package/build/services/PhoneStreamCoordinator.d.ts.map +1 -0
- package/build/services/PhoneStreamCoordinator.js +632 -0
- package/build/services/PhoneStreamCoordinator.js.map +1 -0
- package/build/services/PhoneVideoCoordinator.d.ts +50 -0
- package/build/services/PhoneVideoCoordinator.d.ts.map +1 -0
- package/build/services/PhoneVideoCoordinator.js +147 -0
- package/build/services/PhoneVideoCoordinator.js.map +1 -0
- package/build/services/STTModelManager.d.ts +65 -0
- package/build/services/STTModelManager.d.ts.map +1 -0
- package/build/services/STTModelManager.js +292 -0
- package/build/services/STTModelManager.js.map +1 -0
- package/build/services/SceneRenderer.d.ts +90 -0
- package/build/services/SceneRenderer.d.ts.map +1 -0
- package/build/services/SceneRenderer.js +248 -0
- package/build/services/SceneRenderer.js.map +1 -0
- package/build/services/SentenceTtsPipeline.d.ts +31 -0
- package/build/services/SentenceTtsPipeline.d.ts.map +1 -0
- package/build/services/SentenceTtsPipeline.js +67 -0
- package/build/services/SentenceTtsPipeline.js.map +1 -0
- package/build/services/StreamLifecycleController.d.ts +67 -0
- package/build/services/StreamLifecycleController.d.ts.map +1 -0
- package/build/services/StreamLifecycleController.js +152 -0
- package/build/services/StreamLifecycleController.js.map +1 -0
- package/build/services/TTSModelManager.d.ts +90 -0
- package/build/services/TTSModelManager.d.ts.map +1 -0
- package/build/services/TTSModelManager.js +366 -0
- package/build/services/TTSModelManager.js.map +1 -0
- package/build/services/TranscriptionRouting.d.ts +12 -0
- package/build/services/TranscriptionRouting.d.ts.map +1 -0
- package/build/services/TranscriptionRouting.js +24 -0
- package/build/services/TranscriptionRouting.js.map +1 -0
- package/build/services/WebviewBridge.d.ts +22 -0
- package/build/services/WebviewBridge.d.ts.map +1 -0
- package/build/services/WebviewBridge.js +47 -0
- package/build/services/WebviewBridge.js.map +1 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.d.ts +17 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.d.ts.map +1 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.js +43 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.js.map +1 -0
- package/build/services/asg/asgCameraApi.d.ts +205 -0
- package/build/services/asg/asgCameraApi.d.ts.map +1 -0
- package/build/services/asg/asgCameraApi.js +1410 -0
- package/build/services/asg/asgCameraApi.js.map +1 -0
- package/build/services/asg/cameraRollExportCoordinator.d.ts +60 -0
- package/build/services/asg/cameraRollExportCoordinator.d.ts.map +1 -0
- package/build/services/asg/cameraRollExportCoordinator.js +618 -0
- package/build/services/asg/cameraRollExportCoordinator.js.map +1 -0
- package/build/services/asg/cameraRollExportLedger.d.ts +44 -0
- package/build/services/asg/cameraRollExportLedger.d.ts.map +1 -0
- package/build/services/asg/cameraRollExportLedger.js +78 -0
- package/build/services/asg/cameraRollExportLedger.js.map +1 -0
- package/build/services/asg/galleryMediaValidation.d.ts +29 -0
- package/build/services/asg/galleryMediaValidation.d.ts.map +1 -0
- package/build/services/asg/galleryMediaValidation.js +149 -0
- package/build/services/asg/galleryMediaValidation.js.map +1 -0
- package/build/services/asg/galleryNotices.d.ts +33 -0
- package/build/services/asg/galleryNotices.d.ts.map +1 -0
- package/build/services/asg/galleryNotices.js +29 -0
- package/build/services/asg/galleryNotices.js.map +1 -0
- package/build/services/asg/galleryPathMigration.d.ts +3 -0
- package/build/services/asg/galleryPathMigration.d.ts.map +1 -0
- package/build/services/asg/galleryPathMigration.js +26 -0
- package/build/services/asg/galleryPathMigration.js.map +1 -0
- package/build/services/asg/gallerySettingsService.d.ts +20 -0
- package/build/services/asg/gallerySettingsService.d.ts.map +1 -0
- package/build/services/asg/gallerySettingsService.js +53 -0
- package/build/services/asg/gallerySettingsService.js.map +1 -0
- package/build/services/asg/gallerySyncNotifications.d.ts +56 -0
- package/build/services/asg/gallerySyncNotifications.d.ts.map +1 -0
- package/build/services/asg/gallerySyncNotifications.js +198 -0
- package/build/services/asg/gallerySyncNotifications.js.map +1 -0
- package/build/services/asg/gallerySyncService.d.ts +137 -0
- package/build/services/asg/gallerySyncService.d.ts.map +1 -0
- package/build/services/asg/gallerySyncService.js +1933 -0
- package/build/services/asg/gallerySyncService.js.map +1 -0
- package/build/services/asg/galleryTransferLedger.d.ts +58 -0
- package/build/services/asg/galleryTransferLedger.d.ts.map +1 -0
- package/build/services/asg/galleryTransferLedger.js +225 -0
- package/build/services/asg/galleryTransferLedger.js.map +1 -0
- package/build/services/asg/localNetworkTransport.d.ts +15 -0
- package/build/services/asg/localNetworkTransport.d.ts.map +1 -0
- package/build/services/asg/localNetworkTransport.js +144 -0
- package/build/services/asg/localNetworkTransport.js.map +1 -0
- package/build/services/asg/localStorageService.d.ts +146 -0
- package/build/services/asg/localStorageService.d.ts.map +1 -0
- package/build/services/asg/localStorageService.js +572 -0
- package/build/services/asg/localStorageService.js.map +1 -0
- package/build/services/asg/mediaProcessingQueue.d.ts +70 -0
- package/build/services/asg/mediaProcessingQueue.d.ts.map +1 -0
- package/build/services/asg/mediaProcessingQueue.js +451 -0
- package/build/services/asg/mediaProcessingQueue.js.map +1 -0
- package/build/services/asgOtaVersionUrl.d.ts +2 -0
- package/build/services/asgOtaVersionUrl.d.ts.map +1 -0
- package/build/services/asgOtaVersionUrl.js +36 -0
- package/build/services/asgOtaVersionUrl.js.map +1 -0
- package/build/services/blobPaths.d.ts +31 -0
- package/build/services/blobPaths.d.ts.map +1 -0
- package/build/services/blobPaths.js +86 -0
- package/build/services/blobPaths.js.map +1 -0
- package/build/services/cloudStreamApi.d.ts +59 -0
- package/build/services/cloudStreamApi.d.ts.map +1 -0
- package/build/services/cloudStreamApi.js +81 -0
- package/build/services/cloudStreamApi.js.map +1 -0
- package/build/services/gallerySyncClock.d.ts +17 -0
- package/build/services/gallerySyncClock.d.ts.map +1 -0
- package/build/services/gallerySyncClock.js +21 -0
- package/build/services/gallerySyncClock.js.map +1 -0
- package/build/services/glassesClockSync.d.ts +20 -0
- package/build/services/glassesClockSync.d.ts.map +1 -0
- package/build/services/glassesClockSync.js +97 -0
- package/build/services/glassesClockSync.js.map +1 -0
- package/build/services/manifestVersionGate.d.ts +28 -0
- package/build/services/manifestVersionGate.d.ts.map +1 -0
- package/build/services/manifestVersionGate.js +41 -0
- package/build/services/manifestVersionGate.js.map +1 -0
- package/build/services/mentraUiShim.d.ts +38 -0
- package/build/services/mentraUiShim.d.ts.map +1 -0
- package/build/services/mentraUiShim.js +360 -0
- package/build/services/mentraUiShim.js.map +1 -0
- package/build/services/navigation/roadNameResolver.d.ts +67 -0
- package/build/services/navigation/roadNameResolver.d.ts.map +1 -0
- package/build/services/navigation/roadNameResolver.js +96 -0
- package/build/services/navigation/roadNameResolver.js.map +1 -0
- package/build/services/navigation/routesApiCodec.d.ts +38 -0
- package/build/services/navigation/routesApiCodec.d.ts.map +1 -0
- package/build/services/navigation/routesApiCodec.js +68 -0
- package/build/services/navigation/routesApiCodec.js.map +1 -0
- package/build/services/otaDisplayState.d.ts +42 -0
- package/build/services/otaDisplayState.d.ts.map +1 -0
- package/build/services/otaDisplayState.js +92 -0
- package/build/services/otaDisplayState.js.map +1 -0
- package/build/services/otaInstallPolicy.d.ts +81 -0
- package/build/services/otaInstallPolicy.d.ts.map +1 -0
- package/build/services/otaInstallPolicy.js +96 -0
- package/build/services/otaInstallPolicy.js.map +1 -0
- package/build/services/otaLegacyMapping.d.ts +22 -0
- package/build/services/otaLegacyMapping.d.ts.map +1 -0
- package/build/services/otaLegacyMapping.js +56 -0
- package/build/services/otaLegacyMapping.js.map +1 -0
- package/build/services/slimStreamStatus.d.ts +7 -0
- package/build/services/slimStreamStatus.d.ts.map +1 -0
- package/build/services/slimStreamStatus.js +26 -0
- package/build/services/slimStreamStatus.js.map +1 -0
- package/build/stores/apps.d.ts +104 -0
- package/build/stores/apps.d.ts.map +1 -0
- package/build/stores/apps.js +492 -0
- package/build/stores/apps.js.map +1 -0
- package/build/stores/bluetoothSettingKeys.d.ts +4 -0
- package/build/stores/bluetoothSettingKeys.d.ts.map +1 -0
- package/build/stores/bluetoothSettingKeys.js +31 -0
- package/build/stores/bluetoothSettingKeys.js.map +1 -0
- package/build/stores/cloudClientStatus.d.ts +9 -0
- package/build/stores/cloudClientStatus.d.ts.map +1 -0
- package/build/stores/cloudClientStatus.js +24 -0
- package/build/stores/cloudClientStatus.js.map +1 -0
- package/build/stores/connection.d.ts +22 -0
- package/build/stores/connection.d.ts.map +1 -0
- package/build/stores/connection.js +43 -0
- package/build/stores/connection.js.map +1 -0
- package/build/stores/core.d.ts +15 -0
- package/build/stores/core.d.ts.map +1 -0
- package/build/stores/core.js +21 -0
- package/build/stores/core.js.map +1 -0
- package/build/stores/display.d.ts +24 -0
- package/build/stores/display.d.ts.map +1 -0
- package/build/stores/display.js +96 -0
- package/build/stores/display.js.map +1 -0
- package/build/stores/gallerySync.d.ts +101 -0
- package/build/stores/gallerySync.d.ts.map +1 -0
- package/build/stores/gallerySync.js +217 -0
- package/build/stores/gallerySync.js.map +1 -0
- package/build/stores/glasses.d.ts +62 -0
- package/build/stores/glasses.d.ts.map +1 -0
- package/build/stores/glasses.js +203 -0
- package/build/stores/glasses.js.map +1 -0
- package/build/stores/settings.d.ts +37 -0
- package/build/stores/settings.d.ts.map +1 -0
- package/build/stores/settings.js +922 -0
- package/build/stores/settings.js.map +1 -0
- package/build/types/applet.d.ts +96 -0
- package/build/types/applet.d.ts.map +1 -0
- package/build/types/applet.js +5 -0
- package/build/types/applet.js.map +1 -0
- package/build/types/asg.d.ts +53 -0
- package/build/types/asg.d.ts.map +1 -0
- package/build/types/asg.js +2 -0
- package/build/types/asg.js.map +1 -0
- package/build/types/capabilities/even-realities-g1.d.ts +12 -0
- package/build/types/capabilities/even-realities-g1.d.ts.map +1 -0
- package/build/types/capabilities/even-realities-g1.js +55 -0
- package/build/types/capabilities/even-realities-g1.js.map +1 -0
- package/build/types/capabilities/even-realities-g2.d.ts +12 -0
- package/build/types/capabilities/even-realities-g2.d.ts.map +1 -0
- package/build/types/capabilities/even-realities-g2.js +75 -0
- package/build/types/capabilities/even-realities-g2.js.map +1 -0
- package/build/types/capabilities/mentra-display.d.ts +12 -0
- package/build/types/capabilities/mentra-display.d.ts.map +1 -0
- package/build/types/capabilities/mentra-display.js +63 -0
- package/build/types/capabilities/mentra-display.js.map +1 -0
- package/build/types/capabilities/mentra-live.d.ts +12 -0
- package/build/types/capabilities/mentra-live.d.ts.map +1 -0
- package/build/types/capabilities/mentra-live.js +92 -0
- package/build/types/capabilities/mentra-live.js.map +1 -0
- package/build/types/capabilities/none.d.ts +13 -0
- package/build/types/capabilities/none.d.ts.map +1 -0
- package/build/types/capabilities/none.js +65 -0
- package/build/types/capabilities/none.js.map +1 -0
- package/build/types/capabilities/simulated-glasses.d.ts +13 -0
- package/build/types/capabilities/simulated-glasses.d.ts.map +1 -0
- package/build/types/capabilities/simulated-glasses.js +65 -0
- package/build/types/capabilities/simulated-glasses.js.map +1 -0
- package/build/types/capabilities/vuzix-z100.d.ts +12 -0
- package/build/types/capabilities/vuzix-z100.d.ts.map +1 -0
- package/build/types/capabilities/vuzix-z100.js +52 -0
- package/build/types/capabilities/vuzix-z100.js.map +1 -0
- package/build/types/enums.d.ts +40 -0
- package/build/types/enums.d.ts.map +1 -0
- package/build/types/enums.js +44 -0
- package/build/types/enums.js.map +1 -0
- package/build/types/hardware.d.ts +160 -0
- package/build/types/hardware.d.ts.map +1 -0
- package/build/types/hardware.js +36 -0
- package/build/types/hardware.js.map +1 -0
- package/build/types/index.d.ts +11 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/index.js +10 -0
- package/build/types/index.js.map +1 -0
- package/build/utils/GlobalEventEmitter.d.ts +10 -0
- package/build/utils/GlobalEventEmitter.d.ts.map +1 -0
- package/build/utils/GlobalEventEmitter.js +13 -0
- package/build/utils/GlobalEventEmitter.js.map +1 -0
- package/build/utils/cloudClient/RnUdpAdapter.d.ts +3 -0
- package/build/utils/cloudClient/RnUdpAdapter.d.ts.map +1 -0
- package/build/utils/cloudClient/RnUdpAdapter.js +41 -0
- package/build/utils/cloudClient/RnUdpAdapter.js.map +1 -0
- package/build/utils/cloudClient/cloudSecureStore.d.ts +3 -0
- package/build/utils/cloudClient/cloudSecureStore.d.ts.map +1 -0
- package/build/utils/cloudClient/cloudSecureStore.js +26 -0
- package/build/utils/cloudClient/cloudSecureStore.js.map +1 -0
- package/build/utils/debouncedPatch.d.ts +6 -0
- package/build/utils/debouncedPatch.d.ts.map +1 -0
- package/build/utils/debouncedPatch.js +25 -0
- package/build/utils/debouncedPatch.js.map +1 -0
- package/build/utils/devLogging.d.ts +26 -0
- package/build/utils/devLogging.d.ts.map +1 -0
- package/build/utils/devLogging.js +116 -0
- package/build/utils/devLogging.js.map +1 -0
- package/build/utils/devMiniappLaunch.d.ts +44 -0
- package/build/utils/devMiniappLaunch.d.ts.map +1 -0
- package/build/utils/devMiniappLaunch.js +52 -0
- package/build/utils/devMiniappLaunch.js.map +1 -0
- package/build/utils/diagnosticContext.d.ts +3 -0
- package/build/utils/diagnosticContext.d.ts.map +1 -0
- package/build/utils/diagnosticContext.js +119 -0
- package/build/utils/diagnosticContext.js.map +1 -0
- package/build/utils/display/composer/ColumnComposer.d.ts +131 -0
- package/build/utils/display/composer/ColumnComposer.d.ts.map +1 -0
- package/build/utils/display/composer/ColumnComposer.js +204 -0
- package/build/utils/display/composer/ColumnComposer.js.map +1 -0
- package/build/utils/display/composer/index.d.ts +9 -0
- package/build/utils/display/composer/index.d.ts.map +1 -0
- package/build/utils/display/composer/index.js +9 -0
- package/build/utils/display/composer/index.js.map +1 -0
- package/build/utils/display/helpers/DisplayHelpers.d.ts +165 -0
- package/build/utils/display/helpers/DisplayHelpers.d.ts.map +1 -0
- package/build/utils/display/helpers/DisplayHelpers.js +312 -0
- package/build/utils/display/helpers/DisplayHelpers.js.map +1 -0
- package/build/utils/display/helpers/ScrollView.d.ts +183 -0
- package/build/utils/display/helpers/ScrollView.d.ts.map +1 -0
- package/build/utils/display/helpers/ScrollView.js +257 -0
- package/build/utils/display/helpers/ScrollView.js.map +1 -0
- package/build/utils/display/helpers/index.d.ts +11 -0
- package/build/utils/display/helpers/index.d.ts.map +1 -0
- package/build/utils/display/helpers/index.js +10 -0
- package/build/utils/display/helpers/index.js.map +1 -0
- package/build/utils/display/index.d.ts +174 -0
- package/build/utils/display/index.d.ts.map +1 -0
- package/build/utils/display/index.js +185 -0
- package/build/utils/display/index.js.map +1 -0
- package/build/utils/display/measurer/TextMeasurer.d.ts +160 -0
- package/build/utils/display/measurer/TextMeasurer.d.ts.map +1 -0
- package/build/utils/display/measurer/TextMeasurer.js +273 -0
- package/build/utils/display/measurer/TextMeasurer.js.map +1 -0
- package/build/utils/display/measurer/index.d.ts +10 -0
- package/build/utils/display/measurer/index.d.ts.map +1 -0
- package/build/utils/display/measurer/index.js +11 -0
- package/build/utils/display/measurer/index.js.map +1 -0
- package/build/utils/display/measurer/script-detection.d.ts +53 -0
- package/build/utils/display/measurer/script-detection.d.ts.map +1 -0
- package/build/utils/display/measurer/script-detection.js +184 -0
- package/build/utils/display/measurer/script-detection.js.map +1 -0
- package/build/utils/display/profiles/g1.d.ts +33 -0
- package/build/utils/display/profiles/g1.d.ts.map +1 -0
- package/build/utils/display/profiles/g1.js +213 -0
- package/build/utils/display/profiles/g1.js.map +1 -0
- package/build/utils/display/profiles/g2.d.ts +13 -0
- package/build/utils/display/profiles/g2.d.ts.map +1 -0
- package/build/utils/display/profiles/g2.js +34 -0
- package/build/utils/display/profiles/g2.js.map +1 -0
- package/build/utils/display/profiles/index.d.ts +12 -0
- package/build/utils/display/profiles/index.d.ts.map +1 -0
- package/build/utils/display/profiles/index.js +15 -0
- package/build/utils/display/profiles/index.js.map +1 -0
- package/build/utils/display/profiles/nex.d.ts +10 -0
- package/build/utils/display/profiles/nex.d.ts.map +1 -0
- package/build/utils/display/profiles/nex.js +150 -0
- package/build/utils/display/profiles/nex.js.map +1 -0
- package/build/utils/display/profiles/types.d.ts +103 -0
- package/build/utils/display/profiles/types.d.ts.map +1 -0
- package/build/utils/display/profiles/types.js +2 -0
- package/build/utils/display/profiles/types.js.map +1 -0
- package/build/utils/display/profiles/z100.d.ts +33 -0
- package/build/utils/display/profiles/z100.d.ts.map +1 -0
- package/build/utils/display/profiles/z100.js +182 -0
- package/build/utils/display/profiles/z100.js.map +1 -0
- package/build/utils/display/scene/degrade.d.ts +25 -0
- package/build/utils/display/scene/degrade.d.ts.map +1 -0
- package/build/utils/display/scene/degrade.js +64 -0
- package/build/utils/display/scene/degrade.js.map +1 -0
- package/build/utils/display/scene/differ.d.ts +38 -0
- package/build/utils/display/scene/differ.d.ts.map +1 -0
- package/build/utils/display/scene/differ.js +107 -0
- package/build/utils/display/scene/differ.js.map +1 -0
- package/build/utils/display/scene/index.d.ts +10 -0
- package/build/utils/display/scene/index.d.ts.map +1 -0
- package/build/utils/display/scene/index.js +6 -0
- package/build/utils/display/scene/index.js.map +1 -0
- package/build/utils/display/scene/process.d.ts +35 -0
- package/build/utils/display/scene/process.d.ts.map +1 -0
- package/build/utils/display/scene/process.js +187 -0
- package/build/utils/display/scene/process.js.map +1 -0
- package/build/utils/display/scene/store.d.ts +48 -0
- package/build/utils/display/scene/store.d.ts.map +1 -0
- package/build/utils/display/scene/store.js +0 -0
- package/build/utils/display/scene/store.js.map +1 -0
- package/build/utils/display/scene/types.d.ts +120 -0
- package/build/utils/display/scene/types.d.ts.map +1 -0
- package/build/utils/display/scene/types.js +0 -0
- package/build/utils/display/scene/types.js.map +1 -0
- package/build/utils/display/wrapper/TextWrapper.d.ts +102 -0
- package/build/utils/display/wrapper/TextWrapper.d.ts.map +1 -0
- package/build/utils/display/wrapper/TextWrapper.js +471 -0
- package/build/utils/display/wrapper/TextWrapper.js.map +1 -0
- package/build/utils/display/wrapper/index.d.ts +12 -0
- package/build/utils/display/wrapper/index.d.ts.map +1 -0
- package/build/utils/display/wrapper/index.js +12 -0
- package/build/utils/display/wrapper/index.js.map +1 -0
- package/build/utils/display/wrapper/types.d.ts +75 -0
- package/build/utils/display/wrapper/types.d.ts.map +1 -0
- package/build/utils/display/wrapper/types.js +11 -0
- package/build/utils/display/wrapper/types.js.map +1 -0
- package/build/utils/e2eMetrics.d.ts +6 -0
- package/build/utils/e2eMetrics.d.ts.map +1 -0
- package/build/utils/e2eMetrics.js +27 -0
- package/build/utils/e2eMetrics.js.map +1 -0
- package/build/utils/hardware/hardware.d.ts +42 -0
- package/build/utils/hardware/hardware.d.ts.map +1 -0
- package/build/utils/hardware/hardware.js +127 -0
- package/build/utils/hardware/hardware.js.map +1 -0
- package/build/utils/hardware/index.d.ts +2 -0
- package/build/utils/hardware/index.d.ts.map +1 -0
- package/build/utils/hardware/index.js +2 -0
- package/build/utils/hardware/index.js.map +1 -0
- package/build/utils/miniappGlobals.d.ts +60 -0
- package/build/utils/miniappGlobals.d.ts.map +1 -0
- package/build/utils/miniappGlobals.js +224 -0
- package/build/utils/miniappGlobals.js.map +1 -0
- package/build/utils/permissions/MediaLibraryPermissions.d.ts +45 -0
- package/build/utils/permissions/MediaLibraryPermissions.d.ts.map +1 -0
- package/build/utils/permissions/MediaLibraryPermissions.js +145 -0
- package/build/utils/permissions/MediaLibraryPermissions.js.map +1 -0
- package/build/utils/permissions/galleryDisplayName.d.ts +8 -0
- package/build/utils/permissions/galleryDisplayName.d.ts.map +1 -0
- package/build/utils/permissions/galleryDisplayName.js +25 -0
- package/build/utils/permissions/galleryDisplayName.js.map +1 -0
- package/build/utils/storage/index.d.ts +3 -0
- package/build/utils/storage/index.d.ts.map +1 -0
- package/build/utils/storage/index.js +3 -0
- package/build/utils/storage/index.js.map +1 -0
- package/build/utils/storage/storage.d.ts +24 -0
- package/build/utils/storage/storage.d.ts.map +1 -0
- package/build/utils/storage/storage.js +85 -0
- package/build/utils/storage/storage.js.map +1 -0
- package/build/utils/storage/zip.d.ts +3 -0
- package/build/utils/storage/zip.d.ts.map +1 -0
- package/build/utils/storage/zip.js +14 -0
- package/build/utils/storage/zip.js.map +1 -0
- package/build/utils/timers/index.d.ts +3 -0
- package/build/utils/timers/index.d.ts.map +1 -0
- package/build/utils/timers/index.js +3 -0
- package/build/utils/timers/index.js.map +1 -0
- package/build/utils/timers/timers.d.ts +9 -0
- package/build/utils/timers/timers.d.ts.map +1 -0
- package/build/utils/timers/timers.js +105 -0
- package/build/utils/timers/timers.js.map +1 -0
- package/package.json +120 -0
- package/src/devtools.ts +13 -0
- package/src/engine.ts +173 -0
- package/src/facades/dev.ts +198 -0
- package/src/facades/display.ts +17 -0
- package/src/facades/displayMirror.ts +33 -0
- package/src/facades/gallery.ts +69 -0
- package/src/facades/glasses.ts +206 -0
- package/src/facades/glassesSettings.ts +56 -0
- package/src/facades/glassesWifi.ts +68 -0
- package/src/facades/miniapps.ts +55 -0
- package/src/facades/notifications.ts +15 -0
- package/src/facades/ota.ts +174 -0
- package/src/facades/pairing.ts +329 -0
- package/src/facades/permissions.ts +165 -0
- package/src/facades/phoneNotifications.ts +50 -0
- package/src/facades/reports.ts +185 -0
- package/src/facades/session.ts +55 -0
- package/src/facades/settings.ts +57 -0
- package/src/facades/speech.ts +38 -0
- package/src/index.ts +191 -0
- package/src/internal.ts +159 -0
- package/src/runtime/bootstrap.ts +118 -0
- package/src/runtime/config.ts +147 -0
- package/src/runtime/streamConfig.ts +34 -0
- package/src/services/AppRegistry.ts +1190 -0
- package/src/services/AudioCloudUplink.ts +50 -0
- package/src/services/AudioPlaybackService.ts +813 -0
- package/src/services/AutomaticReportResult.ts +48 -0
- package/src/services/BlobStore.ts +746 -0
- package/src/services/CaptionsTesterReportService.ts +107 -0
- package/src/services/CloudAudioSubscriptionSync.ts +41 -0
- package/src/services/CloudClientService.ts +689 -0
- package/src/services/CloudTranscriptE2EMetrics.ts +27 -0
- package/src/services/ConnectionCoordinator.ts +65 -0
- package/src/services/DevServerBridge.ts +332 -0
- package/src/services/DeviceEventRouter.ts +238 -0
- package/src/services/DeviceStoreHydration.ts +130 -0
- package/src/services/DisplayProcessor.ts +775 -0
- package/src/services/GlassesReadiness.ts +103 -0
- package/src/services/GlassesSettingsSync.ts +134 -0
- package/src/services/GlassesStatusProjection.ts +73 -0
- package/src/services/HeadingService.ts +98 -0
- package/src/services/LocalDisplayManager.ts +703 -0
- package/src/services/LocalMiniappRuntime.ts +4213 -0
- package/src/services/LocalSttFallbackCoordinator.ts +147 -0
- package/src/services/MentraJSCrashController.ts +189 -0
- package/src/services/MentraJSCrashloopReportService.ts +66 -0
- package/src/services/MentraJSLogPipeline.ts +166 -0
- package/src/services/MentraJSRouter.ts +557 -0
- package/src/services/MentraUIRouter.ts +244 -0
- package/src/services/MicStateCoordinator.ts +94 -0
- package/src/services/MiniappEngine.ts +143 -0
- package/src/services/MiniappLauncher.ts +340 -0
- package/src/services/MiniappRunningRegistry.ts +57 -0
- package/src/services/NativeHttpResponse.ts +6 -0
- package/src/services/NavigationHandlers.ts +423 -0
- package/src/services/NavigationService.ts +731 -0
- package/src/services/NotificationsEmitter.ts +48 -0
- package/src/services/OfflineSpeechModelService.ts +168 -0
- package/src/services/OtaInstallCoordinator.ts +1205 -0
- package/src/services/OtaService.ts +83 -0
- package/src/services/OtaUpdateCheckService.ts +386 -0
- package/src/services/PairingIdentity.ts +154 -0
- package/src/services/PhoneCalendarHelpers.ts +212 -0
- package/src/services/PhoneCalendarService.ts +42 -0
- package/src/services/PhoneCameraFovCoordinator.ts +195 -0
- package/src/services/PhoneLocationService.ts +122 -0
- package/src/services/PhoneNotificationsSync.ts +44 -0
- package/src/services/PhonePhotoCoordinator.ts +409 -0
- package/src/services/PhoneStreamCoordinator.ts +777 -0
- package/src/services/PhoneVideoCoordinator.ts +189 -0
- package/src/services/STTModelManager.ts +360 -0
- package/src/services/SceneRenderer.ts +292 -0
- package/src/services/SentenceTtsPipeline.ts +106 -0
- package/src/services/StreamLifecycleController.ts +213 -0
- package/src/services/TTSModelManager.ts +466 -0
- package/src/services/TranscriptionRouting.ts +37 -0
- package/src/services/WebviewBridge.ts +50 -0
- package/src/services/asg/GalleryMediaIntegrityReportService.ts +70 -0
- package/src/services/asg/asgCameraApi.ts +1695 -0
- package/src/services/asg/cameraRollExportCoordinator.ts +627 -0
- package/src/services/asg/cameraRollExportLedger.ts +122 -0
- package/src/services/asg/galleryMediaValidation.ts +183 -0
- package/src/services/asg/galleryNotices.ts +61 -0
- package/src/services/asg/galleryPathMigration.ts +22 -0
- package/src/services/asg/gallerySettingsService.ts +68 -0
- package/src/services/asg/gallerySyncNotifications.ts +236 -0
- package/src/services/asg/gallerySyncService.ts +2269 -0
- package/src/services/asg/galleryTransferLedger.ts +312 -0
- package/src/services/asg/localNetworkTransport.ts +173 -0
- package/src/services/asg/localStorageService.ts +652 -0
- package/src/services/asg/mediaProcessingQueue.ts +518 -0
- package/src/services/asgOtaVersionUrl.ts +41 -0
- package/src/services/blobPaths.ts +86 -0
- package/src/services/cloudStreamApi.ts +154 -0
- package/src/services/gallerySyncClock.ts +39 -0
- package/src/services/glassesClockSync.ts +115 -0
- package/src/services/manifestVersionGate.ts +43 -0
- package/src/services/mentraUiShim.ts +366 -0
- package/src/services/navigation/roadNameResolver.ts +112 -0
- package/src/services/navigation/routesApiCodec.ts +69 -0
- package/src/services/otaDisplayState.ts +115 -0
- package/src/services/otaInstallPolicy.ts +106 -0
- package/src/services/otaLegacyMapping.ts +71 -0
- package/src/services/slimStreamStatus.ts +28 -0
- package/src/stores/apps.ts +614 -0
- package/src/stores/bluetoothSettingKeys.ts +36 -0
- package/src/stores/cloudClientStatus.ts +37 -0
- package/src/stores/connection.ts +69 -0
- package/src/stores/core.ts +32 -0
- package/src/stores/display.ts +121 -0
- package/src/stores/gallerySync.ts +380 -0
- package/src/stores/glasses.ts +309 -0
- package/src/stores/settings.ts +1001 -0
- package/src/types/applet.ts +112 -0
- package/src/types/asg.ts +58 -0
- package/src/types/capabilities/even-realities-g1.ts +67 -0
- package/src/types/capabilities/even-realities-g2.ts +88 -0
- package/src/types/capabilities/mentra-display.ts +75 -0
- package/src/types/capabilities/mentra-live.ts +103 -0
- package/src/types/capabilities/none.ts +76 -0
- package/src/types/capabilities/simulated-glasses.ts +76 -0
- package/src/types/capabilities/vuzix-z100.ts +64 -0
- package/src/types/enums.ts +43 -0
- package/src/types/hardware.ts +203 -0
- package/src/types/index.ts +37 -0
- package/src/utils/GlobalEventEmitter.ts +14 -0
- package/src/utils/cloudClient/RnUdpAdapter.ts +47 -0
- package/src/utils/cloudClient/cloudSecureStore.ts +28 -0
- package/src/utils/debouncedPatch.ts +28 -0
- package/src/utils/devLogging.ts +140 -0
- package/src/utils/devMiniappLaunch.ts +68 -0
- package/src/utils/diagnosticContext.ts +155 -0
- package/src/utils/display/composer/ColumnComposer.ts +285 -0
- package/src/utils/display/composer/index.ts +15 -0
- package/src/utils/display/helpers/DisplayHelpers.ts +413 -0
- package/src/utils/display/helpers/ScrollView.ts +337 -0
- package/src/utils/display/helpers/index.ts +14 -0
- package/src/utils/display/index.ts +273 -0
- package/src/utils/display/measurer/TextMeasurer.ts +346 -0
- package/src/utils/display/measurer/index.ts +21 -0
- package/src/utils/display/measurer/script-detection.ts +218 -0
- package/src/utils/display/profiles/g1.ts +236 -0
- package/src/utils/display/profiles/g2.ts +39 -0
- package/src/utils/display/profiles/index.ts +28 -0
- package/src/utils/display/profiles/nex.ts +166 -0
- package/src/utils/display/profiles/types.ts +132 -0
- package/src/utils/display/profiles/z100.ts +198 -0
- package/src/utils/display/scene/degrade.ts +80 -0
- package/src/utils/display/scene/differ.ts +128 -0
- package/src/utils/display/scene/index.ts +21 -0
- package/src/utils/display/scene/process.ts +214 -0
- package/src/utils/display/scene/store.ts +0 -0
- package/src/utils/display/scene/types.ts +0 -0
- package/src/utils/display/wrapper/TextWrapper.ts +546 -0
- package/src/utils/display/wrapper/index.ts +15 -0
- package/src/utils/display/wrapper/types.ts +102 -0
- package/src/utils/e2eMetrics.ts +30 -0
- package/src/utils/hardware/hardware.ts +166 -0
- package/src/utils/hardware/index.ts +1 -0
- package/src/utils/miniappGlobals.ts +260 -0
- package/src/utils/permissions/MediaLibraryPermissions.ts +161 -0
- package/src/utils/permissions/galleryDisplayName.ts +28 -0
- package/src/utils/storage/index.ts +2 -0
- package/src/utils/storage/storage.ts +101 -0
- package/src/utils/storage/zip.ts +13 -0
- package/src/utils/timers/index.ts +2 -0
- package/src/utils/timers/timers.ts +139 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import NetInfo from "@react-native-community/netinfo";
|
|
2
|
+
import Constants from "expo-constants";
|
|
3
|
+
import * as Location from "expo-location";
|
|
4
|
+
import { Platform } from "react-native";
|
|
5
|
+
import { useAppStatusStore } from "../stores/apps";
|
|
6
|
+
import { useConnectionStore } from "../stores/connection";
|
|
7
|
+
import { useCoreStore } from "../stores/core";
|
|
8
|
+
import { useGlassesStore } from "../stores/glasses";
|
|
9
|
+
import { SETTINGS, useSettingsStore } from "../stores/settings";
|
|
10
|
+
const SENSITIVE_SETTINGS_KEYS = ["core_token", "auth_token", "auth_email"];
|
|
11
|
+
const SENSITIVE_GLASSES_KEYS = ["hotspotPassword"];
|
|
12
|
+
/**
|
|
13
|
+
* The glasses store keeps hotspot credentials NESTED (`hotspot: {state, ssid,
|
|
14
|
+
* password, localIp}`), not just on the legacy top-level `hotspotPassword` key —
|
|
15
|
+
* strip the password before the state is attached to a report.
|
|
16
|
+
*/
|
|
17
|
+
function redactNestedCredentials(glasses) {
|
|
18
|
+
const hotspot = glasses.hotspot;
|
|
19
|
+
if (hotspot && typeof hotspot === "object" && "password" in hotspot) {
|
|
20
|
+
const { password: _password, ...rest } = hotspot;
|
|
21
|
+
return { ...glasses, hotspot: { ...rest, password: "[REDACTED]" } };
|
|
22
|
+
}
|
|
23
|
+
return glasses;
|
|
24
|
+
}
|
|
25
|
+
export async function collectDiagnosticContext(extra) {
|
|
26
|
+
const appletState = useAppStatusStore.getState();
|
|
27
|
+
const settingsState = useSettingsStore.getState();
|
|
28
|
+
const { setCoreInfo: _setCoreInfo, reset: _resetBluetooth, ...coreState } = useCoreStore.getState();
|
|
29
|
+
const { setStatus: _setConnectionStatus, setUrl: _setConnectionUrl, setError: _setConnectionError, incrementReconnectAttempts: _incrementReconnectAttempts, resetReconnectAttempts: _resetReconnectAttempts, reset: _resetConnection, ...connectionState } = useConnectionStore.getState();
|
|
30
|
+
const { setGlassesInfo: _setGlassesInfo, setBatteryInfo: _setBatteryInfo, setWifiInfo: _setWifiInfo, setHotspotInfo: _setHotspotInfo, setOtaUpdateAvailable: _setOtaUpdateAvailable, setOtaProgress: _setOtaProgress, setOtaInProgress: _setOtaInProgress, setMtkUpdatedThisSession: _setMtkUpdatedThisSession, clearOtaState: _clearOtaState, reset: _resetGlasses, ...glassesState } = useGlassesStore.getState();
|
|
31
|
+
const filteredGlasses = redactNestedCredentials(Object.fromEntries(Object.entries(glassesState).filter(([key]) => !SENSITIVE_GLASSES_KEYS.includes(key))));
|
|
32
|
+
const filteredSettings = Object.fromEntries(Object.entries(settingsState.settings || {}).filter(([key]) => !SENSITIVE_SETTINGS_KEYS.includes(key)));
|
|
33
|
+
let networkInfo = { type: "unknown", isConnected: false, isInternetReachable: false };
|
|
34
|
+
try {
|
|
35
|
+
const netState = await NetInfo.fetch();
|
|
36
|
+
networkInfo = {
|
|
37
|
+
type: netState.type,
|
|
38
|
+
isConnected: netState.isConnected ?? false,
|
|
39
|
+
isInternetReachable: netState.isInternetReachable ?? false,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.log("diagnosticContext: failed to get network info:", error);
|
|
44
|
+
}
|
|
45
|
+
let locationInfo;
|
|
46
|
+
try {
|
|
47
|
+
const { status } = await Location.getForegroundPermissionsAsync();
|
|
48
|
+
if (status === "granted") {
|
|
49
|
+
const location = await Location.getLastKnownPositionAsync();
|
|
50
|
+
if (location) {
|
|
51
|
+
locationInfo = {
|
|
52
|
+
latitude: Number(location.coords.latitude.toFixed(4)),
|
|
53
|
+
longitude: Number(location.coords.longitude.toFixed(4)),
|
|
54
|
+
};
|
|
55
|
+
try {
|
|
56
|
+
const [place] = await Location.reverseGeocodeAsync({
|
|
57
|
+
latitude: location.coords.latitude,
|
|
58
|
+
longitude: location.coords.longitude,
|
|
59
|
+
});
|
|
60
|
+
if (place) {
|
|
61
|
+
locationInfo.place = [place.city, place.region, place.country].filter(Boolean).join(", ");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.log("diagnosticContext: failed to reverse geocode:", error);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.log("diagnosticContext: failed to get location:", error);
|
|
72
|
+
}
|
|
73
|
+
const offlineMode = await useSettingsStore.getState().getSetting(SETTINGS.offline_mode.key);
|
|
74
|
+
const defaultWearable = await useSettingsStore.getState().getSetting(SETTINGS.default_wearable.key);
|
|
75
|
+
const apps = appletState.apps.map((app) => ({
|
|
76
|
+
packageName: app.packageName,
|
|
77
|
+
name: app.name,
|
|
78
|
+
running: app.running,
|
|
79
|
+
loading: app.loading,
|
|
80
|
+
healthy: app.healthy,
|
|
81
|
+
hidden: app.hidden,
|
|
82
|
+
type: app.type,
|
|
83
|
+
offline: app.offline,
|
|
84
|
+
local: app.local,
|
|
85
|
+
}));
|
|
86
|
+
return {
|
|
87
|
+
app: {
|
|
88
|
+
appVersion: process.env.EXPO_PUBLIC_MENTRAOS_VERSION || "version",
|
|
89
|
+
buildCommit: process.env.EXPO_PUBLIC_BUILD_COMMIT || "commit",
|
|
90
|
+
buildBranch: process.env.EXPO_PUBLIC_BUILD_BRANCH || "branch",
|
|
91
|
+
buildTime: process.env.EXPO_PUBLIC_BUILD_TIME || "time",
|
|
92
|
+
buildUser: process.env.EXPO_PUBLIC_BUILD_USER || "user",
|
|
93
|
+
},
|
|
94
|
+
phone: {
|
|
95
|
+
deviceName: Constants.deviceName || "deviceName",
|
|
96
|
+
osVersion: `${Platform.OS} ${Platform.Version}`,
|
|
97
|
+
platform: Platform.OS,
|
|
98
|
+
network: networkInfo,
|
|
99
|
+
location: locationInfo,
|
|
100
|
+
},
|
|
101
|
+
glasses: filteredGlasses,
|
|
102
|
+
runtime: {
|
|
103
|
+
core: coreState,
|
|
104
|
+
connection: connectionState,
|
|
105
|
+
},
|
|
106
|
+
apps: {
|
|
107
|
+
apps,
|
|
108
|
+
installed: apps.map((app) => app.packageName),
|
|
109
|
+
running: apps.filter((app) => app.running).map((app) => app.packageName),
|
|
110
|
+
},
|
|
111
|
+
settings: {
|
|
112
|
+
...filteredSettings,
|
|
113
|
+
offlineMode: !!offlineMode,
|
|
114
|
+
defaultWearable,
|
|
115
|
+
},
|
|
116
|
+
...extra,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=diagnosticContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnosticContext.js","sourceRoot":"","sources":["../../src/utils/diagnosticContext.ts"],"names":[],"mappings":"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","sourcesContent":["import NetInfo from \"@react-native-community/netinfo\"\nimport Constants from \"expo-constants\"\nimport * as Location from \"expo-location\"\nimport {Platform} from \"react-native\"\nimport type {ReportContext} from \"@mentra/cloud-client\"\n\nimport {useAppStatusStore} from \"../stores/apps\"\nimport {useConnectionStore} from \"../stores/connection\"\nimport {useCoreStore} from \"../stores/core\"\nimport {useGlassesStore} from \"../stores/glasses\"\nimport {SETTINGS, useSettingsStore} from \"../stores/settings\"\n\nconst SENSITIVE_SETTINGS_KEYS = [\"core_token\", \"auth_token\", \"auth_email\"] as const\nconst SENSITIVE_GLASSES_KEYS = [\"hotspotPassword\"] as const\n\n/**\n * The glasses store keeps hotspot credentials NESTED (`hotspot: {state, ssid,\n * password, localIp}`), not just on the legacy top-level `hotspotPassword` key —\n * strip the password before the state is attached to a report.\n */\nfunction redactNestedCredentials(glasses: Record<string, unknown>): Record<string, unknown> {\n const hotspot = glasses.hotspot\n if (hotspot && typeof hotspot === \"object\" && \"password\" in hotspot) {\n const {password: _password, ...rest} = hotspot as Record<string, unknown>\n return {...glasses, hotspot: {...rest, password: \"[REDACTED]\"}}\n }\n return glasses\n}\n\nexport async function collectDiagnosticContext(extra?: Partial<ReportContext>): Promise<ReportContext> {\n const appletState = useAppStatusStore.getState()\n const settingsState = useSettingsStore.getState()\n const {setCoreInfo: _setCoreInfo, reset: _resetBluetooth, ...coreState} = useCoreStore.getState()\n const {\n setStatus: _setConnectionStatus,\n setUrl: _setConnectionUrl,\n setError: _setConnectionError,\n incrementReconnectAttempts: _incrementReconnectAttempts,\n resetReconnectAttempts: _resetReconnectAttempts,\n reset: _resetConnection,\n ...connectionState\n } = useConnectionStore.getState()\n const {\n setGlassesInfo: _setGlassesInfo,\n setBatteryInfo: _setBatteryInfo,\n setWifiInfo: _setWifiInfo,\n setHotspotInfo: _setHotspotInfo,\n setOtaUpdateAvailable: _setOtaUpdateAvailable,\n setOtaProgress: _setOtaProgress,\n setOtaInProgress: _setOtaInProgress,\n setMtkUpdatedThisSession: _setMtkUpdatedThisSession,\n clearOtaState: _clearOtaState,\n reset: _resetGlasses,\n ...glassesState\n } = useGlassesStore.getState()\n\n const filteredGlasses = redactNestedCredentials(\n Object.fromEntries(\n Object.entries(glassesState).filter(\n ([key]) => !SENSITIVE_GLASSES_KEYS.includes(key as (typeof SENSITIVE_GLASSES_KEYS)[number]),\n ),\n ),\n )\n const filteredSettings = Object.fromEntries(\n Object.entries(settingsState.settings || {}).filter(\n ([key]) => !SENSITIVE_SETTINGS_KEYS.includes(key as (typeof SENSITIVE_SETTINGS_KEYS)[number]),\n ),\n )\n\n let networkInfo: Record<string, unknown> = {type: \"unknown\", isConnected: false, isInternetReachable: false}\n try {\n const netState = await NetInfo.fetch()\n networkInfo = {\n type: netState.type,\n isConnected: netState.isConnected ?? false,\n isInternetReachable: netState.isInternetReachable ?? false,\n }\n } catch (error) {\n console.log(\"diagnosticContext: failed to get network info:\", error)\n }\n\n let locationInfo: Record<string, unknown> | undefined\n try {\n const {status} = await Location.getForegroundPermissionsAsync()\n if (status === \"granted\") {\n const location = await Location.getLastKnownPositionAsync()\n if (location) {\n locationInfo = {\n latitude: Number(location.coords.latitude.toFixed(4)),\n longitude: Number(location.coords.longitude.toFixed(4)),\n }\n try {\n const [place] = await Location.reverseGeocodeAsync({\n latitude: location.coords.latitude,\n longitude: location.coords.longitude,\n })\n if (place) {\n locationInfo.place = [place.city, place.region, place.country].filter(Boolean).join(\", \")\n }\n } catch (error) {\n console.log(\"diagnosticContext: failed to reverse geocode:\", error)\n }\n }\n }\n } catch (error) {\n console.log(\"diagnosticContext: failed to get location:\", error)\n }\n\n const offlineMode = await useSettingsStore.getState().getSetting(SETTINGS.offline_mode.key)\n const defaultWearable = await useSettingsStore.getState().getSetting(SETTINGS.default_wearable.key)\n const apps = appletState.apps.map((app) => ({\n packageName: app.packageName,\n name: app.name,\n running: app.running,\n loading: app.loading,\n healthy: app.healthy,\n hidden: app.hidden,\n type: app.type,\n offline: app.offline,\n local: app.local,\n }))\n\n return {\n app: {\n appVersion: process.env.EXPO_PUBLIC_MENTRAOS_VERSION || \"version\",\n buildCommit: process.env.EXPO_PUBLIC_BUILD_COMMIT || \"commit\",\n buildBranch: process.env.EXPO_PUBLIC_BUILD_BRANCH || \"branch\",\n buildTime: process.env.EXPO_PUBLIC_BUILD_TIME || \"time\",\n buildUser: process.env.EXPO_PUBLIC_BUILD_USER || \"user\",\n },\n phone: {\n deviceName: Constants.deviceName || \"deviceName\",\n osVersion: `${Platform.OS} ${Platform.Version}`,\n platform: Platform.OS,\n network: networkInfo,\n location: locationInfo,\n },\n glasses: filteredGlasses,\n runtime: {\n core: coreState,\n connection: connectionState,\n },\n apps: {\n apps,\n installed: apps.map((app) => app.packageName),\n running: apps.filter((app) => app.running).map((app) => app.packageName),\n },\n settings: {\n ...filteredSettings,\n offlineMode: !!offlineMode,\n defaultWearable,\n },\n ...extra,\n }\n}\n"]}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ColumnComposer
|
|
3
|
+
*
|
|
4
|
+
* Handles composition of multi-column layouts like double_text_wall.
|
|
5
|
+
* This is the single source of truth for column layout logic, replacing
|
|
6
|
+
* the duplicate implementations in native iOS (G1Text.swift) and
|
|
7
|
+
* Android (G1Text.kt, G1.java).
|
|
8
|
+
*
|
|
9
|
+
* The composer:
|
|
10
|
+
* 1. Wraps each column's text to its allocated width
|
|
11
|
+
* 2. Merges columns line-by-line with pixel-precise space padding
|
|
12
|
+
* 3. Returns a single pre-composed string ready for native to chunk & send
|
|
13
|
+
*
|
|
14
|
+
* @see cloud/issues/026-mobile-display-processor for design docs
|
|
15
|
+
*/
|
|
16
|
+
import type { DisplayProfile } from "../profiles/types";
|
|
17
|
+
import type { BreakMode } from "../wrapper/types";
|
|
18
|
+
/**
|
|
19
|
+
* Configuration for column layout
|
|
20
|
+
*/
|
|
21
|
+
export interface ColumnConfig {
|
|
22
|
+
/** Width of the left column in pixels */
|
|
23
|
+
leftColumnWidthPx: number;
|
|
24
|
+
/** X position where the right column starts in pixels */
|
|
25
|
+
rightColumnStartPx: number;
|
|
26
|
+
/** Width of the right column in pixels (calculated from start position) */
|
|
27
|
+
rightColumnWidthPx: number;
|
|
28
|
+
/** Maximum number of lines to display */
|
|
29
|
+
maxLines: number;
|
|
30
|
+
/** Left margin in spaces (for indentation) */
|
|
31
|
+
leftMarginSpaces?: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Options for composing double text wall
|
|
35
|
+
*/
|
|
36
|
+
export interface ComposeOptions {
|
|
37
|
+
/** Break mode for text wrapping */
|
|
38
|
+
breakMode?: BreakMode;
|
|
39
|
+
/** Custom column configuration (overrides profile defaults) */
|
|
40
|
+
columnConfig?: Partial<ColumnConfig>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Result of column composition
|
|
44
|
+
*/
|
|
45
|
+
export interface ComposeResult {
|
|
46
|
+
/** The fully composed text with both columns merged */
|
|
47
|
+
composedText: string;
|
|
48
|
+
/** Lines from the left column (for debugging/preview) */
|
|
49
|
+
leftLines: string[];
|
|
50
|
+
/** Lines from the right column (for debugging/preview) */
|
|
51
|
+
rightLines: string[];
|
|
52
|
+
/** The column configuration that was used */
|
|
53
|
+
config: ColumnConfig;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Composes multi-column layouts for smart glasses displays.
|
|
57
|
+
*
|
|
58
|
+
* Usage:
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const composer = new ColumnComposer(G1_PROFILE)
|
|
61
|
+
* const result = composer.composeDoubleTextWall("Left content", "Right content")
|
|
62
|
+
* // result.composedText is ready to send to native SGC
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare class ColumnComposer {
|
|
66
|
+
private profile;
|
|
67
|
+
private measurer;
|
|
68
|
+
private wrapper;
|
|
69
|
+
private spaceWidthPx;
|
|
70
|
+
constructor(profile: DisplayProfile, breakMode?: BreakMode);
|
|
71
|
+
/**
|
|
72
|
+
* Compose a double text wall layout.
|
|
73
|
+
*
|
|
74
|
+
* Takes left and right text, wraps each to their column width,
|
|
75
|
+
* and merges them with pixel-precise space alignment.
|
|
76
|
+
*
|
|
77
|
+
* @param leftText - Text for the left column
|
|
78
|
+
* @param rightText - Text for the right column
|
|
79
|
+
* @param options - Optional composition settings
|
|
80
|
+
* @returns Composed result with merged text and metadata
|
|
81
|
+
*/
|
|
82
|
+
composeDoubleTextWall(leftText: string, rightText: string, options?: ComposeOptions): ComposeResult;
|
|
83
|
+
/**
|
|
84
|
+
* Get the default column configuration for the current profile.
|
|
85
|
+
*/
|
|
86
|
+
getDefaultColumnConfig(): ColumnConfig;
|
|
87
|
+
/**
|
|
88
|
+
* Update the break mode for text wrapping.
|
|
89
|
+
*/
|
|
90
|
+
setBreakMode(breakMode: BreakMode): void;
|
|
91
|
+
/**
|
|
92
|
+
* Get column configuration, merging defaults with overrides.
|
|
93
|
+
*/
|
|
94
|
+
private getColumnConfig;
|
|
95
|
+
/**
|
|
96
|
+
* Pad lines array to exactly `count` entries.
|
|
97
|
+
*/
|
|
98
|
+
private padLines;
|
|
99
|
+
/**
|
|
100
|
+
* Merge left and right columns with pixel-precise space alignment.
|
|
101
|
+
*
|
|
102
|
+
* For each line:
|
|
103
|
+
* 1. Take the left column text
|
|
104
|
+
* 2. Calculate its pixel width
|
|
105
|
+
* 3. Calculate how many spaces needed to reach rightColumnStartPx
|
|
106
|
+
* 4. Append spaces and right column text
|
|
107
|
+
*/
|
|
108
|
+
private mergeColumns;
|
|
109
|
+
/**
|
|
110
|
+
* Calculate the number of spaces needed to align to a target position.
|
|
111
|
+
*
|
|
112
|
+
* @param currentWidthPx - Current position in pixels
|
|
113
|
+
* @param targetPositionPx - Target position in pixels
|
|
114
|
+
* @returns Number of space characters needed
|
|
115
|
+
*/
|
|
116
|
+
private calculateSpacesForAlignment;
|
|
117
|
+
/**
|
|
118
|
+
* Remove en-space characters (U+2002) that may have been added during wrapping.
|
|
119
|
+
* Native implementations do this cleanup before merging.
|
|
120
|
+
*/
|
|
121
|
+
private cleanEnspaces;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create a ColumnComposer for a given profile.
|
|
125
|
+
*
|
|
126
|
+
* @param profile - Display profile to use
|
|
127
|
+
* @param breakMode - Break mode for text wrapping (default: "word")
|
|
128
|
+
* @returns Configured ColumnComposer instance
|
|
129
|
+
*/
|
|
130
|
+
export declare function createColumnComposer(profile: DisplayProfile, breakMode?: BreakMode): ColumnComposer;
|
|
131
|
+
//# sourceMappingURL=ColumnComposer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColumnComposer.d.ts","sourceRoot":"","sources":["../../../../src/utils/display/composer/ColumnComposer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAM/D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2EAA2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,6CAA6C;IAC7C,MAAM,EAAE,YAAY,CAAC;CACtB;AAMD;;;;;;;;;GASG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,cAAc,EAAE,SAAS,GAAE,SAAiC;IAejF;;;;;;;;;;OAUG;IACI,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,aAAa;IAgC9G;;OAEG;IACI,sBAAsB,IAAI,YAAY;IAI7C;;OAEG;IACI,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAU/C;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAQhB;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;IA+BpB;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IAmBnC;;;OAGG;IACH,OAAO,CAAC,aAAa;CAGtB;AAMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,GAAE,SAAkB,GAAG,cAAc,CAE3G"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ColumnComposer
|
|
3
|
+
*
|
|
4
|
+
* Handles composition of multi-column layouts like double_text_wall.
|
|
5
|
+
* This is the single source of truth for column layout logic, replacing
|
|
6
|
+
* the duplicate implementations in native iOS (G1Text.swift) and
|
|
7
|
+
* Android (G1Text.kt, G1.java).
|
|
8
|
+
*
|
|
9
|
+
* The composer:
|
|
10
|
+
* 1. Wraps each column's text to its allocated width
|
|
11
|
+
* 2. Merges columns line-by-line with pixel-precise space padding
|
|
12
|
+
* 3. Returns a single pre-composed string ready for native to chunk & send
|
|
13
|
+
*
|
|
14
|
+
* @see cloud/issues/026-mobile-display-processor for design docs
|
|
15
|
+
*/
|
|
16
|
+
import { TextMeasurer } from "../measurer/TextMeasurer";
|
|
17
|
+
import { TextWrapper } from "../wrapper/TextWrapper";
|
|
18
|
+
// =============================================================================
|
|
19
|
+
// ColumnComposer Class
|
|
20
|
+
// =============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* Composes multi-column layouts for smart glasses displays.
|
|
23
|
+
*
|
|
24
|
+
* Usage:
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const composer = new ColumnComposer(G1_PROFILE)
|
|
27
|
+
* const result = composer.composeDoubleTextWall("Left content", "Right content")
|
|
28
|
+
* // result.composedText is ready to send to native SGC
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export class ColumnComposer {
|
|
32
|
+
profile;
|
|
33
|
+
measurer;
|
|
34
|
+
wrapper;
|
|
35
|
+
spaceWidthPx;
|
|
36
|
+
constructor(profile, breakMode = "character-no-hyphen") {
|
|
37
|
+
this.profile = profile;
|
|
38
|
+
this.measurer = new TextMeasurer(profile);
|
|
39
|
+
this.wrapper = new TextWrapper(this.measurer, {
|
|
40
|
+
breakMode,
|
|
41
|
+
});
|
|
42
|
+
// Cache space width for alignment calculations
|
|
43
|
+
this.spaceWidthPx = this.measurer.measureText(" ");
|
|
44
|
+
}
|
|
45
|
+
// ===========================================================================
|
|
46
|
+
// Public API
|
|
47
|
+
// ===========================================================================
|
|
48
|
+
/**
|
|
49
|
+
* Compose a double text wall layout.
|
|
50
|
+
*
|
|
51
|
+
* Takes left and right text, wraps each to their column width,
|
|
52
|
+
* and merges them with pixel-precise space alignment.
|
|
53
|
+
*
|
|
54
|
+
* @param leftText - Text for the left column
|
|
55
|
+
* @param rightText - Text for the right column
|
|
56
|
+
* @param options - Optional composition settings
|
|
57
|
+
* @returns Composed result with merged text and metadata
|
|
58
|
+
*/
|
|
59
|
+
composeDoubleTextWall(leftText, rightText, options = {}) {
|
|
60
|
+
const config = this.getColumnConfig(options.columnConfig);
|
|
61
|
+
// Wrap each column independently
|
|
62
|
+
const leftWrapOptions = {
|
|
63
|
+
maxWidthPx: config.leftColumnWidthPx,
|
|
64
|
+
maxLines: config.maxLines,
|
|
65
|
+
};
|
|
66
|
+
const rightWrapOptions = {
|
|
67
|
+
maxWidthPx: config.rightColumnWidthPx,
|
|
68
|
+
maxLines: config.maxLines,
|
|
69
|
+
};
|
|
70
|
+
const leftResult = this.wrapper.wrap(leftText || "", leftWrapOptions);
|
|
71
|
+
const rightResult = this.wrapper.wrap(rightText || "", rightWrapOptions);
|
|
72
|
+
// Pad arrays to have exactly maxLines entries
|
|
73
|
+
const leftLines = this.padLines(leftResult.lines, config.maxLines);
|
|
74
|
+
const rightLines = this.padLines(rightResult.lines, config.maxLines);
|
|
75
|
+
// Merge columns with space alignment
|
|
76
|
+
const composedText = this.mergeColumns(leftLines, rightLines, config);
|
|
77
|
+
return {
|
|
78
|
+
composedText,
|
|
79
|
+
leftLines,
|
|
80
|
+
rightLines,
|
|
81
|
+
config,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get the default column configuration for the current profile.
|
|
86
|
+
*/
|
|
87
|
+
getDefaultColumnConfig() {
|
|
88
|
+
return this.getColumnConfig();
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Update the break mode for text wrapping.
|
|
92
|
+
*/
|
|
93
|
+
setBreakMode(breakMode) {
|
|
94
|
+
this.wrapper = new TextWrapper(this.measurer, {
|
|
95
|
+
breakMode,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
// ===========================================================================
|
|
99
|
+
// Private Methods
|
|
100
|
+
// ===========================================================================
|
|
101
|
+
/**
|
|
102
|
+
* Get column configuration, merging defaults with overrides.
|
|
103
|
+
*/
|
|
104
|
+
getColumnConfig(overrides) {
|
|
105
|
+
const displayWidth = this.profile.displayWidthPx;
|
|
106
|
+
// Default layout: 50% for left column, right starts at 55%
|
|
107
|
+
// This matches the native G1Text implementations
|
|
108
|
+
const defaults = {
|
|
109
|
+
leftColumnWidthPx: Math.floor(displayWidth * 0.5),
|
|
110
|
+
rightColumnStartPx: Math.floor(displayWidth * 0.55),
|
|
111
|
+
rightColumnWidthPx: displayWidth - Math.floor(displayWidth * 0.55),
|
|
112
|
+
maxLines: this.profile.maxLines,
|
|
113
|
+
leftMarginSpaces: 0,
|
|
114
|
+
};
|
|
115
|
+
return {
|
|
116
|
+
...defaults,
|
|
117
|
+
...overrides,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Pad lines array to exactly `count` entries.
|
|
122
|
+
*/
|
|
123
|
+
padLines(lines, count) {
|
|
124
|
+
const result = [...lines];
|
|
125
|
+
while (result.length < count) {
|
|
126
|
+
result.push("");
|
|
127
|
+
}
|
|
128
|
+
return result.slice(0, count);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Merge left and right columns with pixel-precise space alignment.
|
|
132
|
+
*
|
|
133
|
+
* For each line:
|
|
134
|
+
* 1. Take the left column text
|
|
135
|
+
* 2. Calculate its pixel width
|
|
136
|
+
* 3. Calculate how many spaces needed to reach rightColumnStartPx
|
|
137
|
+
* 4. Append spaces and right column text
|
|
138
|
+
*/
|
|
139
|
+
mergeColumns(leftLines, rightLines, config) {
|
|
140
|
+
const lines = [];
|
|
141
|
+
for (let i = 0; i < config.maxLines; i++) {
|
|
142
|
+
const leftText = this.cleanEnspaces(leftLines[i] || "");
|
|
143
|
+
const rightText = this.cleanEnspaces(rightLines[i] || "");
|
|
144
|
+
// Calculate pixel width of left text
|
|
145
|
+
const leftWidthPx = this.measurer.measureText(leftText);
|
|
146
|
+
// Calculate spaces needed to reach the right column start
|
|
147
|
+
const spacesNeeded = this.calculateSpacesForAlignment(leftWidthPx, config.rightColumnStartPx);
|
|
148
|
+
// Build the merged line
|
|
149
|
+
let line = "";
|
|
150
|
+
// Add left margin if configured
|
|
151
|
+
if (config.leftMarginSpaces && config.leftMarginSpaces > 0) {
|
|
152
|
+
line += " ".repeat(config.leftMarginSpaces);
|
|
153
|
+
}
|
|
154
|
+
line += leftText;
|
|
155
|
+
line += " ".repeat(spacesNeeded);
|
|
156
|
+
line += rightText;
|
|
157
|
+
lines.push(line);
|
|
158
|
+
}
|
|
159
|
+
return lines.join("\n");
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Calculate the number of spaces needed to align to a target position.
|
|
163
|
+
*
|
|
164
|
+
* @param currentWidthPx - Current position in pixels
|
|
165
|
+
* @param targetPositionPx - Target position in pixels
|
|
166
|
+
* @returns Number of space characters needed
|
|
167
|
+
*/
|
|
168
|
+
calculateSpacesForAlignment(currentWidthPx, targetPositionPx) {
|
|
169
|
+
const pixelsNeeded = targetPositionPx - currentWidthPx;
|
|
170
|
+
// Ensure at least one space for separation
|
|
171
|
+
if (pixelsNeeded <= 0) {
|
|
172
|
+
return 1;
|
|
173
|
+
}
|
|
174
|
+
// Calculate spaces needed. Use Math.floor (not Math.ceil) to ensure the
|
|
175
|
+
// right column never starts past rightColumnStartPx. Rounding up caused
|
|
176
|
+
// the right column to start 1–5px further right than planned, shrinking
|
|
177
|
+
// its usable width and causing the last character to wrap onto the next
|
|
178
|
+
// line's left position.
|
|
179
|
+
const spaces = Math.max(1, Math.floor(pixelsNeeded / this.spaceWidthPx));
|
|
180
|
+
// Cap at a reasonable maximum to prevent runaway spacing
|
|
181
|
+
return Math.min(spaces, 100);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Remove en-space characters (U+2002) that may have been added during wrapping.
|
|
185
|
+
* Native implementations do this cleanup before merging.
|
|
186
|
+
*/
|
|
187
|
+
cleanEnspaces(text) {
|
|
188
|
+
return text.replace(/\u2002/g, "");
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// =============================================================================
|
|
192
|
+
// Factory Function
|
|
193
|
+
// =============================================================================
|
|
194
|
+
/**
|
|
195
|
+
* Create a ColumnComposer for a given profile.
|
|
196
|
+
*
|
|
197
|
+
* @param profile - Display profile to use
|
|
198
|
+
* @param breakMode - Break mode for text wrapping (default: "word")
|
|
199
|
+
* @returns Configured ColumnComposer instance
|
|
200
|
+
*/
|
|
201
|
+
export function createColumnComposer(profile, breakMode = "word") {
|
|
202
|
+
return new ColumnComposer(profile, breakMode);
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=ColumnComposer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColumnComposer.js","sourceRoot":"","sources":["../../../../src/utils/display/composer/ColumnComposer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ColumnComposer\n *\n * Handles composition of multi-column layouts like double_text_wall.\n * This is the single source of truth for column layout logic, replacing\n * the duplicate implementations in native iOS (G1Text.swift) and\n * Android (G1Text.kt, G1.java).\n *\n * The composer:\n * 1. Wraps each column's text to its allocated width\n * 2. Merges columns line-by-line with pixel-precise space padding\n * 3. Returns a single pre-composed string ready for native to chunk & send\n *\n * @see cloud/issues/026-mobile-display-processor for design docs\n */\n\nimport type { DisplayProfile } from \"../profiles/types\";\nimport { TextMeasurer } from \"../measurer/TextMeasurer\";\nimport { TextWrapper } from \"../wrapper/TextWrapper\";\nimport type { WrapOptions, BreakMode } from \"../wrapper/types\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Configuration for column layout\n */\nexport interface ColumnConfig {\n /** Width of the left column in pixels */\n leftColumnWidthPx: number;\n /** X position where the right column starts in pixels */\n rightColumnStartPx: number;\n /** Width of the right column in pixels (calculated from start position) */\n rightColumnWidthPx: number;\n /** Maximum number of lines to display */\n maxLines: number;\n /** Left margin in spaces (for indentation) */\n leftMarginSpaces?: number;\n}\n\n/**\n * Options for composing double text wall\n */\nexport interface ComposeOptions {\n /** Break mode for text wrapping */\n breakMode?: BreakMode;\n /** Custom column configuration (overrides profile defaults) */\n columnConfig?: Partial<ColumnConfig>;\n}\n\n/**\n * Result of column composition\n */\nexport interface ComposeResult {\n /** The fully composed text with both columns merged */\n composedText: string;\n /** Lines from the left column (for debugging/preview) */\n leftLines: string[];\n /** Lines from the right column (for debugging/preview) */\n rightLines: string[];\n /** The column configuration that was used */\n config: ColumnConfig;\n}\n\n// =============================================================================\n// ColumnComposer Class\n// =============================================================================\n\n/**\n * Composes multi-column layouts for smart glasses displays.\n *\n * Usage:\n * ```typescript\n * const composer = new ColumnComposer(G1_PROFILE)\n * const result = composer.composeDoubleTextWall(\"Left content\", \"Right content\")\n * // result.composedText is ready to send to native SGC\n * ```\n */\nexport class ColumnComposer {\n private profile: DisplayProfile;\n private measurer: TextMeasurer;\n private wrapper: TextWrapper;\n private spaceWidthPx: number;\n\n constructor(profile: DisplayProfile, breakMode: BreakMode = \"character-no-hyphen\") {\n this.profile = profile;\n this.measurer = new TextMeasurer(profile);\n this.wrapper = new TextWrapper(this.measurer, {\n breakMode,\n });\n\n // Cache space width for alignment calculations\n this.spaceWidthPx = this.measurer.measureText(\" \");\n }\n\n // ===========================================================================\n // Public API\n // ===========================================================================\n\n /**\n * Compose a double text wall layout.\n *\n * Takes left and right text, wraps each to their column width,\n * and merges them with pixel-precise space alignment.\n *\n * @param leftText - Text for the left column\n * @param rightText - Text for the right column\n * @param options - Optional composition settings\n * @returns Composed result with merged text and metadata\n */\n public composeDoubleTextWall(leftText: string, rightText: string, options: ComposeOptions = {}): ComposeResult {\n const config = this.getColumnConfig(options.columnConfig);\n\n // Wrap each column independently\n const leftWrapOptions: WrapOptions = {\n maxWidthPx: config.leftColumnWidthPx,\n maxLines: config.maxLines,\n };\n\n const rightWrapOptions: WrapOptions = {\n maxWidthPx: config.rightColumnWidthPx,\n maxLines: config.maxLines,\n };\n\n const leftResult = this.wrapper.wrap(leftText || \"\", leftWrapOptions);\n const rightResult = this.wrapper.wrap(rightText || \"\", rightWrapOptions);\n\n // Pad arrays to have exactly maxLines entries\n const leftLines = this.padLines(leftResult.lines, config.maxLines);\n const rightLines = this.padLines(rightResult.lines, config.maxLines);\n\n // Merge columns with space alignment\n const composedText = this.mergeColumns(leftLines, rightLines, config);\n\n return {\n composedText,\n leftLines,\n rightLines,\n config,\n };\n }\n\n /**\n * Get the default column configuration for the current profile.\n */\n public getDefaultColumnConfig(): ColumnConfig {\n return this.getColumnConfig();\n }\n\n /**\n * Update the break mode for text wrapping.\n */\n public setBreakMode(breakMode: BreakMode): void {\n this.wrapper = new TextWrapper(this.measurer, {\n breakMode,\n });\n }\n\n // ===========================================================================\n // Private Methods\n // ===========================================================================\n\n /**\n * Get column configuration, merging defaults with overrides.\n */\n private getColumnConfig(overrides?: Partial<ColumnConfig>): ColumnConfig {\n const displayWidth = this.profile.displayWidthPx;\n\n // Default layout: 50% for left column, right starts at 55%\n // This matches the native G1Text implementations\n const defaults: ColumnConfig = {\n leftColumnWidthPx: Math.floor(displayWidth * 0.5),\n rightColumnStartPx: Math.floor(displayWidth * 0.55),\n rightColumnWidthPx: displayWidth - Math.floor(displayWidth * 0.55),\n maxLines: this.profile.maxLines,\n leftMarginSpaces: 0,\n };\n\n return {\n ...defaults,\n ...overrides,\n };\n }\n\n /**\n * Pad lines array to exactly `count` entries.\n */\n private padLines(lines: string[], count: number): string[] {\n const result = [...lines];\n while (result.length < count) {\n result.push(\"\");\n }\n return result.slice(0, count);\n }\n\n /**\n * Merge left and right columns with pixel-precise space alignment.\n *\n * For each line:\n * 1. Take the left column text\n * 2. Calculate its pixel width\n * 3. Calculate how many spaces needed to reach rightColumnStartPx\n * 4. Append spaces and right column text\n */\n private mergeColumns(leftLines: string[], rightLines: string[], config: ColumnConfig): string {\n const lines: string[] = [];\n\n for (let i = 0; i < config.maxLines; i++) {\n const leftText = this.cleanEnspaces(leftLines[i] || \"\");\n const rightText = this.cleanEnspaces(rightLines[i] || \"\");\n\n // Calculate pixel width of left text\n const leftWidthPx = this.measurer.measureText(leftText);\n\n // Calculate spaces needed to reach the right column start\n const spacesNeeded = this.calculateSpacesForAlignment(leftWidthPx, config.rightColumnStartPx);\n\n // Build the merged line\n let line = \"\";\n\n // Add left margin if configured\n if (config.leftMarginSpaces && config.leftMarginSpaces > 0) {\n line += \" \".repeat(config.leftMarginSpaces);\n }\n\n line += leftText;\n line += \" \".repeat(spacesNeeded);\n line += rightText;\n\n lines.push(line);\n }\n\n return lines.join(\"\\n\");\n }\n\n /**\n * Calculate the number of spaces needed to align to a target position.\n *\n * @param currentWidthPx - Current position in pixels\n * @param targetPositionPx - Target position in pixels\n * @returns Number of space characters needed\n */\n private calculateSpacesForAlignment(currentWidthPx: number, targetPositionPx: number): number {\n const pixelsNeeded = targetPositionPx - currentWidthPx;\n\n // Ensure at least one space for separation\n if (pixelsNeeded <= 0) {\n return 1;\n }\n\n // Calculate spaces needed. Use Math.floor (not Math.ceil) to ensure the\n // right column never starts past rightColumnStartPx. Rounding up caused\n // the right column to start 1–5px further right than planned, shrinking\n // its usable width and causing the last character to wrap onto the next\n // line's left position.\n const spaces = Math.max(1, Math.floor(pixelsNeeded / this.spaceWidthPx));\n\n // Cap at a reasonable maximum to prevent runaway spacing\n return Math.min(spaces, 100);\n }\n\n /**\n * Remove en-space characters (U+2002) that may have been added during wrapping.\n * Native implementations do this cleanup before merging.\n */\n private cleanEnspaces(text: string): string {\n return text.replace(/\\u2002/g, \"\");\n }\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Create a ColumnComposer for a given profile.\n *\n * @param profile - Display profile to use\n * @param breakMode - Break mode for text wrapping (default: \"word\")\n * @returns Configured ColumnComposer instance\n */\nexport function createColumnComposer(profile: DisplayProfile, breakMode: BreakMode = \"word\"): ColumnComposer {\n return new ColumnComposer(profile, breakMode);\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composer Module
|
|
3
|
+
*
|
|
4
|
+
* Handles composition of multi-column and complex layouts for smart glasses displays.
|
|
5
|
+
* This module provides the single source of truth for layout composition logic,
|
|
6
|
+
* replacing duplicate implementations in native iOS and Android code.
|
|
7
|
+
*/
|
|
8
|
+
export { ColumnComposer, createColumnComposer, type ColumnConfig, type ComposeOptions, type ComposeResult, } from "./ColumnComposer";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/display/composer/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composer Module
|
|
3
|
+
*
|
|
4
|
+
* Handles composition of multi-column and complex layouts for smart glasses displays.
|
|
5
|
+
* This module provides the single source of truth for layout composition logic,
|
|
6
|
+
* replacing duplicate implementations in native iOS and Android code.
|
|
7
|
+
*/
|
|
8
|
+
export { ColumnComposer, createColumnComposer, } from "./ColumnComposer";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/display/composer/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,cAAc,EACd,oBAAoB,GAIrB,MAAM,kBAAkB,CAAC","sourcesContent":["/**\n * Composer Module\n *\n * Handles composition of multi-column and complex layouts for smart glasses displays.\n * This module provides the single source of truth for layout composition logic,\n * replacing duplicate implementations in native iOS and Android code.\n */\n\nexport {\n ColumnComposer,\n createColumnComposer,\n type ColumnConfig,\n type ComposeOptions,\n type ComposeResult,\n} from \"./ColumnComposer\";\n"]}
|