@elizaos/ui 2.0.0-alpha.385 → 2.0.0-alpha.392

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 (369) hide show
  1. package/apps/app-companion/src/components/companion/CompanionAppView.d.ts.map +1 -1
  2. package/apps/app-companion/src/components/companion/CompanionAppView.js +6 -4
  3. package/apps/app-companion/src/components/companion/CompanionView.d.ts.map +1 -1
  4. package/apps/app-companion/src/components/companion/CompanionView.js +6 -4
  5. package/apps/app-lifeops/src/api/client-lifeops.js +6 -0
  6. package/apps/app-lifeops/src/components/AppBlockerSettingsCard.d.ts +3 -0
  7. package/apps/app-lifeops/src/components/AppBlockerSettingsCard.d.ts.map +1 -0
  8. package/apps/app-lifeops/src/components/AppBlockerSettingsCard.js +189 -0
  9. package/apps/app-lifeops/src/components/BrowserBridgeSetupPanel.d.ts +2 -0
  10. package/apps/app-lifeops/src/components/BrowserBridgeSetupPanel.d.ts.map +1 -0
  11. package/apps/app-lifeops/src/components/BrowserBridgeSetupPanel.js +1065 -0
  12. package/apps/app-lifeops/src/components/BrowserBridgeStatusChip.d.ts +7 -0
  13. package/apps/app-lifeops/src/components/BrowserBridgeStatusChip.d.ts.map +1 -0
  14. package/apps/app-lifeops/src/components/BrowserBridgeStatusChip.js +71 -0
  15. package/apps/app-lifeops/src/components/DataSourcesStrip.d.ts +14 -0
  16. package/apps/app-lifeops/src/components/DataSourcesStrip.d.ts.map +1 -0
  17. package/apps/app-lifeops/src/components/DataSourcesStrip.js +36 -0
  18. package/apps/app-lifeops/src/components/EventEditorDrawer.d.ts +23 -0
  19. package/apps/app-lifeops/src/components/EventEditorDrawer.d.ts.map +1 -0
  20. package/apps/app-lifeops/src/components/EventEditorDrawer.js +514 -0
  21. package/apps/app-lifeops/src/components/LifeOpsActivitySignalsEffect.d.ts +2 -0
  22. package/apps/app-lifeops/src/components/LifeOpsActivitySignalsEffect.d.ts.map +1 -0
  23. package/apps/app-lifeops/src/components/LifeOpsActivitySignalsEffect.js +10 -0
  24. package/apps/app-lifeops/src/components/LifeOpsCalendarSection.d.ts +15 -0
  25. package/apps/app-lifeops/src/components/LifeOpsCalendarSection.d.ts.map +1 -0
  26. package/apps/app-lifeops/src/components/LifeOpsCalendarSection.js +515 -0
  27. package/apps/app-lifeops/src/components/LifeOpsChatAdapter.d.ts +34 -0
  28. package/apps/app-lifeops/src/components/LifeOpsChatAdapter.d.ts.map +1 -0
  29. package/apps/app-lifeops/src/components/LifeOpsChatAdapter.js +175 -0
  30. package/apps/app-lifeops/src/components/LifeOpsFeatureTogglesSection.d.ts +2 -0
  31. package/apps/app-lifeops/src/components/LifeOpsFeatureTogglesSection.d.ts.map +1 -0
  32. package/apps/app-lifeops/src/components/LifeOpsFeatureTogglesSection.js +99 -0
  33. package/apps/app-lifeops/src/components/LifeOpsHabitVisuals.d.ts +37 -0
  34. package/apps/app-lifeops/src/components/LifeOpsHabitVisuals.d.ts.map +1 -0
  35. package/apps/app-lifeops/src/components/LifeOpsHabitVisuals.js +88 -0
  36. package/apps/app-lifeops/src/components/LifeOpsInboxSection.d.ts +13 -0
  37. package/apps/app-lifeops/src/components/LifeOpsInboxSection.d.ts.map +1 -0
  38. package/apps/app-lifeops/src/components/LifeOpsInboxSection.js +490 -0
  39. package/apps/app-lifeops/src/components/LifeOpsLinkBankButton.d.ts +12 -0
  40. package/apps/app-lifeops/src/components/LifeOpsLinkBankButton.d.ts.map +1 -0
  41. package/apps/app-lifeops/src/components/LifeOpsLinkBankButton.js +92 -0
  42. package/apps/app-lifeops/src/components/LifeOpsLinkPaypalButton.d.ts +12 -0
  43. package/apps/app-lifeops/src/components/LifeOpsLinkPaypalButton.d.ts.map +1 -0
  44. package/apps/app-lifeops/src/components/LifeOpsLinkPaypalButton.js +160 -0
  45. package/apps/app-lifeops/src/components/LifeOpsMoneySection.d.ts +3 -0
  46. package/apps/app-lifeops/src/components/LifeOpsMoneySection.d.ts.map +1 -0
  47. package/apps/app-lifeops/src/components/LifeOpsMoneySection.js +373 -0
  48. package/apps/app-lifeops/src/components/LifeOpsNavRail.d.ts +9 -0
  49. package/apps/app-lifeops/src/components/LifeOpsNavRail.d.ts.map +1 -0
  50. package/apps/app-lifeops/src/components/LifeOpsNavRail.js +93 -0
  51. package/apps/app-lifeops/src/components/LifeOpsOperationalPanels.d.ts +4 -0
  52. package/apps/app-lifeops/src/components/LifeOpsOperationalPanels.d.ts.map +1 -0
  53. package/apps/app-lifeops/src/components/LifeOpsOperationalPanels.js +274 -0
  54. package/apps/app-lifeops/src/components/LifeOpsOverviewSection.d.ts +7 -0
  55. package/apps/app-lifeops/src/components/LifeOpsOverviewSection.d.ts.map +1 -0
  56. package/apps/app-lifeops/src/components/LifeOpsOverviewSection.js +657 -0
  57. package/apps/app-lifeops/src/components/LifeOpsPageSections.d.ts +42 -0
  58. package/apps/app-lifeops/src/components/LifeOpsPageSections.d.ts.map +1 -0
  59. package/apps/app-lifeops/src/components/LifeOpsPageSections.js +166 -0
  60. package/apps/app-lifeops/src/components/LifeOpsPageView.d.ts +2 -0
  61. package/apps/app-lifeops/src/components/LifeOpsPageView.d.ts.map +1 -0
  62. package/apps/app-lifeops/src/components/LifeOpsPageView.js +566 -0
  63. package/apps/app-lifeops/src/components/LifeOpsRemindersSection.d.ts +2 -0
  64. package/apps/app-lifeops/src/components/LifeOpsRemindersSection.d.ts.map +1 -0
  65. package/apps/app-lifeops/src/components/LifeOpsRemindersSection.js +749 -0
  66. package/apps/app-lifeops/src/components/LifeOpsResizableSidebar.d.ts +27 -0
  67. package/apps/app-lifeops/src/components/LifeOpsResizableSidebar.d.ts.map +1 -0
  68. package/apps/app-lifeops/src/components/LifeOpsResizableSidebar.js +106 -0
  69. package/apps/app-lifeops/src/components/LifeOpsScreenTimeSection.d.ts +2 -0
  70. package/apps/app-lifeops/src/components/LifeOpsScreenTimeSection.d.ts.map +1 -0
  71. package/apps/app-lifeops/src/components/LifeOpsScreenTimeSection.js +373 -0
  72. package/apps/app-lifeops/src/components/LifeOpsSectionContent.d.ts +10 -0
  73. package/apps/app-lifeops/src/components/LifeOpsSectionContent.d.ts.map +1 -0
  74. package/apps/app-lifeops/src/components/LifeOpsSectionContent.js +30 -0
  75. package/apps/app-lifeops/src/components/LifeOpsSelectionContext.d.ts +21 -0
  76. package/apps/app-lifeops/src/components/LifeOpsSelectionContext.d.ts.map +1 -0
  77. package/apps/app-lifeops/src/components/LifeOpsSelectionContext.js +30 -0
  78. package/apps/app-lifeops/src/components/LifeOpsSettingsSection.d.ts +20 -0
  79. package/apps/app-lifeops/src/components/LifeOpsSettingsSection.d.ts.map +1 -0
  80. package/apps/app-lifeops/src/components/LifeOpsSettingsSection.js +597 -0
  81. package/apps/app-lifeops/src/components/LifeOpsSetupGate.d.ts +13 -0
  82. package/apps/app-lifeops/src/components/LifeOpsSetupGate.d.ts.map +1 -0
  83. package/apps/app-lifeops/src/components/LifeOpsSetupGate.js +134 -0
  84. package/apps/app-lifeops/src/components/LifeOpsSleepSection.d.ts +10 -0
  85. package/apps/app-lifeops/src/components/LifeOpsSleepSection.d.ts.map +1 -0
  86. package/apps/app-lifeops/src/components/LifeOpsSleepSection.js +425 -0
  87. package/apps/app-lifeops/src/components/LifeOpsWorkspaceShell.d.ts +11 -0
  88. package/apps/app-lifeops/src/components/LifeOpsWorkspaceShell.d.ts.map +1 -0
  89. package/apps/app-lifeops/src/components/LifeOpsWorkspaceShell.js +49 -0
  90. package/apps/app-lifeops/src/components/LifeOpsWorkspaceView.d.ts +2 -0
  91. package/apps/app-lifeops/src/components/LifeOpsWorkspaceView.d.ts.map +1 -0
  92. package/apps/app-lifeops/src/components/LifeOpsWorkspaceView.js +1041 -0
  93. package/apps/app-lifeops/src/components/MessagingConnectorCards.d.ts +7 -0
  94. package/apps/app-lifeops/src/components/MessagingConnectorCards.d.ts.map +1 -0
  95. package/apps/app-lifeops/src/components/MessagingConnectorCards.js +643 -0
  96. package/apps/app-lifeops/src/components/MissingSourceCard.d.ts +9 -0
  97. package/apps/app-lifeops/src/components/MissingSourceCard.d.ts.map +1 -0
  98. package/apps/app-lifeops/src/components/MissingSourceCard.js +5 -0
  99. package/apps/app-lifeops/src/components/MobileSignalsSetupCard.d.ts +2 -0
  100. package/apps/app-lifeops/src/components/MobileSignalsSetupCard.d.ts.map +1 -0
  101. package/apps/app-lifeops/src/components/MobileSignalsSetupCard.js +163 -0
  102. package/apps/app-lifeops/src/components/SleepInspectionPanel.d.ts +8 -0
  103. package/apps/app-lifeops/src/components/SleepInspectionPanel.d.ts.map +1 -0
  104. package/apps/app-lifeops/src/components/SleepInspectionPanel.js +59 -0
  105. package/apps/app-lifeops/src/components/WebsiteBlockerSettingsCard.d.ts +3 -0
  106. package/apps/app-lifeops/src/components/WebsiteBlockerSettingsCard.d.ts.map +1 -0
  107. package/apps/app-lifeops/src/components/WebsiteBlockerSettingsCard.js +75 -0
  108. package/apps/app-lifeops/src/components/WhatsAppQrOverlay.d.ts +8 -0
  109. package/apps/app-lifeops/src/components/WhatsAppQrOverlay.d.ts.map +1 -0
  110. package/apps/app-lifeops/src/components/WhatsAppQrOverlay.js +48 -0
  111. package/apps/app-lifeops/src/components/lifeops-labels.d.ts +2 -0
  112. package/apps/app-lifeops/src/components/lifeops-labels.d.ts.map +1 -0
  113. package/apps/app-lifeops/src/components/lifeops-labels.js +5 -0
  114. package/apps/app-lifeops/src/events/index.d.ts +34 -0
  115. package/apps/app-lifeops/src/events/index.d.ts.map +1 -0
  116. package/apps/app-lifeops/src/events/index.js +23 -0
  117. package/apps/app-lifeops/src/hooks/useCalendarWeek.d.ts +28 -0
  118. package/apps/app-lifeops/src/hooks/useCalendarWeek.d.ts.map +1 -0
  119. package/apps/app-lifeops/src/hooks/useCalendarWeek.js +93 -0
  120. package/apps/app-lifeops/src/hooks/useDiscordConnector.d.ts +14 -0
  121. package/apps/app-lifeops/src/hooks/useDiscordConnector.d.ts.map +1 -0
  122. package/apps/app-lifeops/src/hooks/useDiscordConnector.js +126 -0
  123. package/apps/app-lifeops/src/hooks/useGoogleLifeOpsConnector.d.ts +29 -0
  124. package/apps/app-lifeops/src/hooks/useGoogleLifeOpsConnector.d.ts.map +1 -0
  125. package/apps/app-lifeops/src/hooks/useGoogleLifeOpsConnector.js +481 -0
  126. package/apps/app-lifeops/src/hooks/useIMessageConnector.d.ts +10 -0
  127. package/apps/app-lifeops/src/hooks/useIMessageConnector.d.ts.map +1 -0
  128. package/apps/app-lifeops/src/hooks/useIMessageConnector.js +50 -0
  129. package/apps/app-lifeops/src/hooks/useInbox.d.ts +34 -0
  130. package/apps/app-lifeops/src/hooks/useInbox.d.ts.map +1 -0
  131. package/apps/app-lifeops/src/hooks/useInbox.js +98 -0
  132. package/apps/app-lifeops/src/hooks/useLifeOpsActivitySignals.d.ts +2 -0
  133. package/apps/app-lifeops/src/hooks/useLifeOpsActivitySignals.d.ts.map +1 -0
  134. package/apps/app-lifeops/src/hooks/useLifeOpsActivitySignals.js +383 -0
  135. package/apps/app-lifeops/src/hooks/useLifeOpsAppState.d.ts +9 -0
  136. package/apps/app-lifeops/src/hooks/useLifeOpsAppState.d.ts.map +1 -0
  137. package/apps/app-lifeops/src/hooks/useLifeOpsAppState.js +83 -0
  138. package/apps/app-lifeops/src/hooks/useLifeOpsCapabilitiesStatus.d.ts +8 -0
  139. package/apps/app-lifeops/src/hooks/useLifeOpsCapabilitiesStatus.d.ts.map +1 -0
  140. package/apps/app-lifeops/src/hooks/useLifeOpsCapabilitiesStatus.js +60 -0
  141. package/apps/app-lifeops/src/hooks/useLifeOpsScheduleInspection.d.ts +18 -0
  142. package/apps/app-lifeops/src/hooks/useLifeOpsScheduleInspection.d.ts.map +1 -0
  143. package/apps/app-lifeops/src/hooks/useLifeOpsScheduleInspection.js +66 -0
  144. package/apps/app-lifeops/src/hooks/useLifeOpsScheduleState.d.ts +14 -0
  145. package/apps/app-lifeops/src/hooks/useLifeOpsScheduleState.d.ts.map +1 -0
  146. package/apps/app-lifeops/src/hooks/useLifeOpsScheduleState.js +79 -0
  147. package/apps/app-lifeops/src/hooks/useLifeOpsSection.d.ts +18 -0
  148. package/apps/app-lifeops/src/hooks/useLifeOpsSection.d.ts.map +1 -0
  149. package/apps/app-lifeops/src/hooks/useLifeOpsSection.js +78 -0
  150. package/apps/app-lifeops/src/hooks/useLifeOpsXConnector.d.ts +14 -0
  151. package/apps/app-lifeops/src/hooks/useLifeOpsXConnector.d.ts.map +1 -0
  152. package/apps/app-lifeops/src/hooks/useLifeOpsXConnector.js +160 -0
  153. package/apps/app-lifeops/src/hooks/useSignalConnector.d.ts +16 -0
  154. package/apps/app-lifeops/src/hooks/useSignalConnector.d.ts.map +1 -0
  155. package/apps/app-lifeops/src/hooks/useSignalConnector.js +198 -0
  156. package/apps/app-lifeops/src/hooks/useTelegramConnector.d.ts +21 -0
  157. package/apps/app-lifeops/src/hooks/useTelegramConnector.d.ts.map +1 -0
  158. package/apps/app-lifeops/src/hooks/useTelegramConnector.js +177 -0
  159. package/apps/app-lifeops/src/hooks/useWhatsAppConnector.d.ts +8 -0
  160. package/apps/app-lifeops/src/hooks/useWhatsAppConnector.d.ts.map +1 -0
  161. package/apps/app-lifeops/src/hooks/useWhatsAppConnector.js +58 -0
  162. package/apps/app-lifeops/src/hooks/useWhatsAppPairing.d.ts +12 -0
  163. package/apps/app-lifeops/src/hooks/useWhatsAppPairing.d.ts.map +1 -0
  164. package/apps/app-lifeops/src/hooks/useWhatsAppPairing.js +152 -0
  165. package/apps/app-lifeops/src/lifeops/discord-browser-scraper.js +1 -1
  166. package/apps/app-lifeops/src/lifeops/google-gmail.d.ts.map +1 -1
  167. package/apps/app-lifeops/src/lifeops/google-gmail.js +74 -26
  168. package/apps/app-lifeops/src/lifeops/google-managed-client.d.ts.map +1 -1
  169. package/apps/app-lifeops/src/lifeops/google-managed-client.js +4 -5
  170. package/apps/app-lifeops/src/lifeops/google-oauth.d.ts.map +1 -1
  171. package/apps/app-lifeops/src/lifeops/google-oauth.js +2 -2
  172. package/apps/app-lifeops/src/lifeops/owner-profile.d.ts.map +1 -1
  173. package/apps/app-lifeops/src/lifeops/owner-profile.js +1 -1
  174. package/apps/app-lifeops/src/lifeops/paypal-managed-client.d.ts.map +1 -1
  175. package/apps/app-lifeops/src/lifeops/paypal-managed-client.js +4 -5
  176. package/apps/app-lifeops/src/lifeops/plaid-managed-client.d.ts.map +1 -1
  177. package/apps/app-lifeops/src/lifeops/plaid-managed-client.js +4 -5
  178. package/apps/app-lifeops/src/lifeops/schedule-sync-client.js +2 -2
  179. package/apps/app-lifeops/src/lifeops/service-constants.d.ts +1 -0
  180. package/apps/app-lifeops/src/lifeops/service-constants.d.ts.map +1 -1
  181. package/apps/app-lifeops/src/lifeops/service-constants.js +1 -0
  182. package/apps/app-lifeops/src/lifeops/service-mixin-core.d.ts +1 -1
  183. package/apps/app-lifeops/src/lifeops/service-mixin-core.d.ts.map +1 -1
  184. package/apps/app-lifeops/src/lifeops/service-mixin-core.js +2 -1
  185. package/apps/app-lifeops/src/lifeops/service-mixin-imessage.js +1 -1
  186. package/apps/app-lifeops/src/lifeops/service-mixin-inbox.d.ts +3 -1
  187. package/apps/app-lifeops/src/lifeops/service-mixin-inbox.d.ts.map +1 -1
  188. package/apps/app-lifeops/src/lifeops/service-mixin-inbox.js +42 -13
  189. package/apps/app-lifeops/src/lifeops/service-mixin-reminders.d.ts.map +1 -1
  190. package/apps/app-lifeops/src/lifeops/service-mixin-reminders.js +3 -2
  191. package/apps/app-lifeops/src/lifeops/service-mixin-workflows.d.ts.map +1 -1
  192. package/apps/app-lifeops/src/lifeops/service-mixin-workflows.js +1 -1
  193. package/apps/app-lifeops/src/lifeops/service-normalize-calendar.d.ts.map +1 -1
  194. package/apps/app-lifeops/src/lifeops/service-normalize-calendar.js +3 -3
  195. package/apps/app-lifeops/src/lifeops/service-normalize-connector.d.ts +1 -1
  196. package/apps/app-lifeops/src/lifeops/service-normalize-connector.d.ts.map +1 -1
  197. package/apps/app-lifeops/src/lifeops/service-normalize-connector.js +2 -2
  198. package/apps/app-lifeops/src/lifeops/signal-auth.d.ts.map +1 -1
  199. package/apps/app-lifeops/src/lifeops/signal-auth.js +6 -3
  200. package/apps/app-lifeops/src/lifeops/telegram-auth.js +1 -1
  201. package/apps/app-lifeops/src/lifeops/travel-adapters/duffel.d.ts.map +1 -1
  202. package/apps/app-lifeops/src/lifeops/travel-adapters/duffel.js +31 -6
  203. package/apps/app-lifeops/src/lifeops/twilio.js +1 -1
  204. package/apps/app-lifeops/src/lifeops/x-poster.d.ts.map +1 -1
  205. package/apps/app-lifeops/src/lifeops/x-poster.js +13 -3
  206. package/apps/app-lifeops/src/lifeops-route.d.ts +74 -0
  207. package/apps/app-lifeops/src/lifeops-route.d.ts.map +1 -0
  208. package/apps/app-lifeops/src/lifeops-route.js +204 -0
  209. package/apps/app-lifeops/src/platform/lifeops-github.d.ts +15 -0
  210. package/apps/app-lifeops/src/platform/lifeops-github.d.ts.map +1 -0
  211. package/apps/app-lifeops/src/platform/lifeops-github.js +135 -0
  212. package/apps/app-lifeops/src/routes/cloud-features-routes.d.ts +2 -2
  213. package/apps/app-lifeops/src/routes/cloud-features-routes.d.ts.map +1 -1
  214. package/apps/app-lifeops/src/routes/cloud-features-routes.js +5 -3
  215. package/apps/app-lifeops/src/routes/lifeops-routes.d.ts.map +1 -1
  216. package/apps/app-lifeops/src/routes/lifeops-routes.js +15 -3
  217. package/apps/app-lifeops/src/routes/plugin.d.ts.map +1 -1
  218. package/apps/app-lifeops/src/routes/plugin.js +10 -1
  219. package/apps/app-lifeops/src/routes/travel-provider-relay-routes.d.ts +1 -1
  220. package/apps/app-lifeops/src/routes/travel-provider-relay-routes.d.ts.map +1 -1
  221. package/apps/app-lifeops/src/routes/travel-provider-relay-routes.js +4 -2
  222. package/apps/app-lifeops/src/routes/website-blocker-routes.d.ts +1 -1
  223. package/apps/app-lifeops/src/routes/website-blocker-routes.d.ts.map +1 -1
  224. package/apps/app-lifeops/src/ui.d.ts +11 -0
  225. package/apps/app-lifeops/src/ui.d.ts.map +1 -0
  226. package/apps/app-lifeops/src/ui.js +9 -0
  227. package/apps/app-lifeops/src/utils/lifeops-url.d.ts +5 -0
  228. package/apps/app-lifeops/src/utils/lifeops-url.d.ts.map +1 -0
  229. package/apps/app-lifeops/src/utils/lifeops-url.js +35 -0
  230. package/apps/app-lifeops/src/website-blocker/access.d.ts.map +1 -1
  231. package/apps/app-lifeops/src/website-blocker/access.js +1 -1
  232. package/apps/app-steward/src/routes/steward-compat-routes.d.ts +1 -1
  233. package/apps/app-steward/src/routes/steward-compat-routes.d.ts.map +1 -1
  234. package/apps/app-steward/src/routes/steward-compat-routes.js +3 -1
  235. package/apps/app-steward/src/routes/wallet-browser-compat-routes.d.ts +1 -1
  236. package/apps/app-steward/src/routes/wallet-browser-compat-routes.d.ts.map +1 -1
  237. package/apps/app-steward/src/routes/wallet-browser-compat-routes.js +3 -1
  238. package/apps/app-steward/src/routes/wallet-bsc-core-routes.d.ts.map +1 -1
  239. package/apps/app-steward/src/routes/wallet-bsc-core-routes.js +2 -1
  240. package/apps/app-steward/src/routes/wallet-compat-routes.d.ts +1 -1
  241. package/apps/app-steward/src/routes/wallet-compat-routes.d.ts.map +1 -1
  242. package/apps/app-steward/src/routes/wallet-compat-routes.js +3 -1
  243. package/apps/app-steward/src/routes/wallet-core-routes.d.ts.map +1 -1
  244. package/apps/app-steward/src/routes/wallet-core-routes.js +2 -1
  245. package/apps/app-steward/src/routes/wallet-trade-compat-routes.d.ts +1 -1
  246. package/apps/app-steward/src/routes/wallet-trade-compat-routes.d.ts.map +1 -1
  247. package/apps/app-steward/src/routes/wallet-trade-compat-routes.js +3 -1
  248. package/apps/app-training/src/core/dataset-generator.d.ts +1 -1
  249. package/apps/app-training/src/core/dataset-generator.d.ts.map +1 -1
  250. package/apps/app-training/src/core/roleplay-executor.d.ts +1 -1
  251. package/apps/app-training/src/core/roleplay-executor.d.ts.map +1 -1
  252. package/apps/app-training/src/core/trajectory-task-datasets.d.ts +1 -1
  253. package/apps/app-training/src/core/trajectory-task-datasets.d.ts.map +1 -1
  254. package/apps/app-training/src/index.d.ts +1 -2
  255. package/apps/app-training/src/index.d.ts.map +1 -1
  256. package/apps/app-training/src/index.js +1 -2
  257. package/apps/app-training/src/routes/training-routes.d.ts +1 -1
  258. package/apps/app-training/src/routes/training-routes.d.ts.map +1 -1
  259. package/apps/app-training/src/routes/training-routes.js +1 -1
  260. package/apps/app-training/src/routes/trajectory-routes.d.ts +1 -1
  261. package/apps/app-training/src/routes/trajectory-routes.d.ts.map +1 -1
  262. package/apps/app-training/src/routes/trajectory-routes.js +3 -1
  263. package/apps/app-training/src/services/training-service-like.d.ts +1 -1
  264. package/apps/app-training/src/services/training-service-like.d.ts.map +1 -1
  265. package/apps/app-training/src/services/training-service.d.ts +1 -1
  266. package/apps/app-training/src/services/training-service.d.ts.map +1 -1
  267. package/package.json +1 -1
  268. package/packages/agent/src/api/provider-switch-config.js +1 -1
  269. package/packages/agent/src/api/server-helpers-auth.d.ts.map +1 -1
  270. package/packages/agent/src/api/server-helpers-auth.js +5 -4
  271. package/packages/agent/src/providers/media-provider.d.ts +1 -1
  272. package/packages/agent/src/providers/media-provider.d.ts.map +1 -1
  273. package/packages/app-core/src/App.d.ts.map +1 -1
  274. package/packages/app-core/src/App.js +20 -12
  275. package/packages/app-core/src/api/auth.d.ts.map +1 -1
  276. package/packages/app-core/src/api/auth.js +5 -5
  277. package/packages/app-core/src/api/client-types-experience.d.ts +7 -0
  278. package/packages/app-core/src/api/client-types-experience.d.ts.map +1 -1
  279. package/packages/app-core/src/components/apps/helpers.d.ts +1 -1
  280. package/packages/app-core/src/components/apps/helpers.d.ts.map +1 -1
  281. package/packages/app-core/src/components/apps/helpers.js +1 -0
  282. package/packages/app-core/src/components/apps/internal-tool-apps.d.ts +11 -0
  283. package/packages/app-core/src/components/apps/internal-tool-apps.d.ts.map +1 -1
  284. package/packages/app-core/src/components/apps/internal-tool-apps.js +31 -0
  285. package/packages/app-core/src/components/apps/launch-history.d.ts +16 -0
  286. package/packages/app-core/src/components/apps/launch-history.d.ts.map +1 -0
  287. package/packages/app-core/src/components/apps/launch-history.js +77 -0
  288. package/packages/app-core/src/components/apps/per-app-config.d.ts +19 -0
  289. package/packages/app-core/src/components/apps/per-app-config.d.ts.map +1 -0
  290. package/packages/app-core/src/components/apps/per-app-config.js +99 -0
  291. package/packages/app-core/src/components/apps/useRegistryCatalog.d.ts +14 -0
  292. package/packages/app-core/src/components/apps/useRegistryCatalog.d.ts.map +1 -0
  293. package/packages/app-core/src/components/apps/useRegistryCatalog.js +52 -0
  294. package/packages/app-core/src/components/auth/LoginView.d.ts +1 -19
  295. package/packages/app-core/src/components/auth/LoginView.d.ts.map +1 -1
  296. package/packages/app-core/src/components/auth/LoginView.js +4 -99
  297. package/packages/app-core/src/components/character/CharacterExperienceWorkspace.d.ts.map +1 -1
  298. package/packages/app-core/src/components/character/CharacterExperienceWorkspace.js +14 -2
  299. package/packages/app-core/src/components/character/character-hub-helpers.d.ts.map +1 -1
  300. package/packages/app-core/src/components/character/character-hub-helpers.js +7 -0
  301. package/packages/app-core/src/components/character/character-hub-types.d.ts +7 -0
  302. package/packages/app-core/src/components/character/character-hub-types.d.ts.map +1 -1
  303. package/packages/app-core/src/components/onboarding/BootstrapStep.d.ts.map +1 -1
  304. package/packages/app-core/src/components/onboarding/BootstrapStep.js +3 -2
  305. package/packages/app-core/src/components/pages/AppDetailsView.d.ts +36 -0
  306. package/packages/app-core/src/components/pages/AppDetailsView.d.ts.map +1 -0
  307. package/packages/app-core/src/components/pages/AppDetailsView.js +289 -0
  308. package/packages/app-core/src/components/pages/AppsView.d.ts.map +1 -1
  309. package/packages/app-core/src/components/pages/AppsView.js +134 -42
  310. package/packages/app-core/src/components/shell/StartupShell.d.ts.map +1 -1
  311. package/packages/app-core/src/components/shell/StartupShell.js +2 -5
  312. package/packages/app-core/src/i18n/locales/en.json +256 -205
  313. package/packages/app-core/src/i18n/locales/es.json +256 -205
  314. package/packages/app-core/src/i18n/locales/ko.json +256 -205
  315. package/packages/app-core/src/i18n/locales/pt.json +256 -205
  316. package/packages/app-core/src/i18n/locales/tl.json +256 -205
  317. package/packages/app-core/src/i18n/locales/vi.json +256 -205
  318. package/packages/app-core/src/i18n/locales/zh-CN.json +256 -205
  319. package/packages/app-core/src/navigation/index.d.ts.map +1 -1
  320. package/packages/app-core/src/navigation/index.js +6 -0
  321. package/packages/app-core/src/shell/AppWindowRenderer.d.ts +17 -0
  322. package/packages/app-core/src/shell/AppWindowRenderer.d.ts.map +1 -0
  323. package/packages/app-core/src/shell/AppWindowRenderer.js +337 -0
  324. package/packages/app-core/src/shell/DetachedShellRoot.js +4 -1
  325. package/packages/app-core/src/shell/index.d.ts +1 -0
  326. package/packages/app-core/src/shell/index.d.ts.map +1 -1
  327. package/packages/app-core/src/shell/index.js +1 -0
  328. package/packages/app-core/src/state/startup-coordinator.d.ts.map +1 -1
  329. package/packages/app-core/src/state/startup-coordinator.js +0 -3
  330. package/packages/app-core/src/state/startup-phase-poll.d.ts.map +1 -1
  331. package/packages/app-core/src/state/startup-phase-poll.js +2 -4
  332. package/packages/app-core/src/state/usePluginsSkillsState.d.ts +6 -6
  333. package/packages/native-plugins/mobile-signals/src/definitions.d.ts +162 -0
  334. package/packages/native-plugins/mobile-signals/src/definitions.d.ts.map +1 -0
  335. package/packages/native-plugins/mobile-signals/src/definitions.js +1 -0
  336. package/packages/native-plugins/mobile-signals/src/index.d.ts +4 -0
  337. package/packages/native-plugins/mobile-signals/src/index.d.ts.map +1 -0
  338. package/packages/native-plugins/mobile-signals/src/index.js +6 -0
  339. package/packages/native-plugins/mobile-signals/src/web.d.ts +29 -0
  340. package/packages/native-plugins/mobile-signals/src/web.d.ts.map +1 -0
  341. package/packages/native-plugins/mobile-signals/src/web.js +269 -0
  342. package/packages/shared/src/app-hero-art.d.ts.map +1 -1
  343. package/packages/shared/src/app-hero-art.js +13 -0
  344. package/packages/shared/src/contracts/lifeops.d.ts +10 -0
  345. package/packages/shared/src/contracts/lifeops.d.ts.map +1 -1
  346. package/packages/shared/src/contracts/lifeops.js +5 -0
  347. package/packages/typescript/src/features/advanced-capabilities/experience/actions/record-experience.d.ts.map +1 -1
  348. package/packages/typescript/src/features/advanced-capabilities/experience/actions/record-experience.js +46 -4
  349. package/packages/typescript/src/features/advanced-capabilities/experience/evaluators/experienceEvaluator.d.ts.map +1 -1
  350. package/packages/typescript/src/features/advanced-capabilities/experience/evaluators/experienceEvaluator.js +34 -124
  351. package/packages/typescript/src/features/advanced-capabilities/experience/service.d.ts.map +1 -1
  352. package/packages/typescript/src/features/advanced-capabilities/experience/service.js +56 -0
  353. package/packages/typescript/src/features/advanced-capabilities/experience/types.d.ts +7 -0
  354. package/packages/typescript/src/features/advanced-capabilities/experience/types.d.ts.map +1 -1
  355. package/packages/typescript/src/features/advanced-capabilities/experience/utils/experienceText.d.ts +7 -0
  356. package/packages/typescript/src/features/advanced-capabilities/experience/utils/experienceText.d.ts.map +1 -0
  357. package/packages/typescript/src/features/advanced-capabilities/experience/utils/experienceText.js +123 -0
  358. package/apps/app-training/src/ui/FineTuningView.d.ts +0 -5
  359. package/apps/app-training/src/ui/FineTuningView.d.ts.map +0 -1
  360. package/apps/app-training/src/ui/FineTuningView.js +0 -388
  361. package/apps/app-training/src/ui/fine-tuning-panels.d.ts +0 -111
  362. package/apps/app-training/src/ui/fine-tuning-panels.d.ts.map +0 -1
  363. package/apps/app-training/src/ui/fine-tuning-panels.js +0 -130
  364. package/apps/app-training/src/ui/index.d.ts +0 -3
  365. package/apps/app-training/src/ui/index.d.ts.map +0 -1
  366. package/apps/app-training/src/ui/index.js +0 -2
  367. package/packages/app-core/src/api/trusted-local-request.d.ts +0 -4
  368. package/packages/app-core/src/api/trusted-local-request.d.ts.map +0 -1
  369. package/packages/app-core/src/api/trusted-local-request.js +0 -176
@@ -0,0 +1,27 @@
1
+ /**
2
+ * LifeOpsResizableSidebar - drag-to-resize wrapper for a sidebar panel.
3
+ *
4
+ * Renders children inside a width-controlled shell with a hit-targeted
5
+ * drag handle on the trailing edge. Width persists to localStorage under
6
+ * the supplied storage key and snaps to configurable bounds.
7
+ */
8
+ import { type ReactNode } from "react";
9
+ export interface LifeOpsResizableSidebarProps {
10
+ children: ReactNode;
11
+ /** localStorage key for persisting the width (in px). */
12
+ storageKey: string;
13
+ /** Default width in px when nothing is stored. */
14
+ defaultWidth: number;
15
+ /** Minimum width in px allowed by the drag. */
16
+ minWidth?: number;
17
+ /** Maximum width in px allowed by the drag. */
18
+ maxWidth?: number;
19
+ /** Which edge to drag from. Defaults to "right" (trailing edge). */
20
+ side?: "left" | "right";
21
+ /** Extra classes for the outer shell. */
22
+ className?: string;
23
+ /** data-testid applied to the outer shell. */
24
+ testId?: string;
25
+ }
26
+ export declare function LifeOpsResizableSidebar({ children, storageKey, defaultWidth, minWidth, maxWidth, side, className, testId, }: LifeOpsResizableSidebarProps): import("react/jsx-runtime").JSX.Element;
27
+ //# sourceMappingURL=LifeOpsResizableSidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LifeOpsResizableSidebar.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/components/LifeOpsResizableSidebar.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAGL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAEf,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,SAAS,CAAC;IACpB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuBD,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,QAAc,EACd,QAAc,EACd,IAAc,EACd,SAAS,EACT,MAAM,GACP,EAAE,4BAA4B,2CAiI9B"}
@@ -0,0 +1,106 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * LifeOpsResizableSidebar - drag-to-resize wrapper for a sidebar panel.
4
+ *
5
+ * Renders children inside a width-controlled shell with a hit-targeted
6
+ * drag handle on the trailing edge. Width persists to localStorage under
7
+ * the supplied storage key and snaps to configurable bounds.
8
+ */
9
+ import { useCallback, useEffect, useRef, useState, } from "react";
10
+ function readStoredWidth(key, fallback) {
11
+ if (typeof window === "undefined")
12
+ return fallback;
13
+ try {
14
+ const raw = window.localStorage.getItem(key);
15
+ if (!raw)
16
+ return fallback;
17
+ const n = Number.parseInt(raw, 10);
18
+ return Number.isFinite(n) && n > 0 ? n : fallback;
19
+ }
20
+ catch {
21
+ return fallback;
22
+ }
23
+ }
24
+ function writeStoredWidth(key, width) {
25
+ if (typeof window === "undefined")
26
+ return;
27
+ try {
28
+ window.localStorage.setItem(key, String(Math.round(width)));
29
+ }
30
+ catch {
31
+ /* ignore */
32
+ }
33
+ }
34
+ export function LifeOpsResizableSidebar({ children, storageKey, defaultWidth, minWidth = 220, maxWidth = 520, side = "right", className, testId, }) {
35
+ const [width, setWidth] = useState(() => readStoredWidth(storageKey, defaultWidth));
36
+ const startStateRef = useRef(null);
37
+ const handleMove = useCallback((event) => {
38
+ const state = startStateRef.current;
39
+ if (!state)
40
+ return;
41
+ const delta = event.clientX - state.startX;
42
+ const next = side === "right"
43
+ ? state.startWidth + delta
44
+ : state.startWidth - delta;
45
+ const clamped = Math.min(Math.max(next, minWidth), maxWidth);
46
+ setWidth(clamped);
47
+ }, [maxWidth, minWidth, side]);
48
+ const handleUp = useCallback((event) => {
49
+ const state = startStateRef.current;
50
+ startStateRef.current = null;
51
+ window.removeEventListener("pointermove", handleMove);
52
+ window.removeEventListener("pointerup", handleUp);
53
+ document.body.style.cursor = "";
54
+ document.body.style.userSelect = "";
55
+ if (state) {
56
+ const delta = event.clientX - state.startX;
57
+ const final = side === "right"
58
+ ? state.startWidth + delta
59
+ : state.startWidth - delta;
60
+ writeStoredWidth(storageKey, Math.min(Math.max(final, minWidth), maxWidth));
61
+ }
62
+ }, [handleMove, maxWidth, minWidth, side, storageKey]);
63
+ const handleDown = useCallback((event) => {
64
+ event.preventDefault();
65
+ startStateRef.current = {
66
+ startX: event.clientX,
67
+ startWidth: width,
68
+ };
69
+ document.body.style.cursor = "col-resize";
70
+ document.body.style.userSelect = "none";
71
+ window.addEventListener("pointermove", handleMove);
72
+ window.addEventListener("pointerup", handleUp);
73
+ }, [handleMove, handleUp, width]);
74
+ useEffect(() => {
75
+ return () => {
76
+ window.removeEventListener("pointermove", handleMove);
77
+ window.removeEventListener("pointerup", handleUp);
78
+ };
79
+ }, [handleMove, handleUp]);
80
+ const handleKey = useCallback((event) => {
81
+ if (event.key !== "ArrowLeft" && event.key !== "ArrowRight")
82
+ return;
83
+ event.preventDefault();
84
+ const step = event.shiftKey ? 32 : 8;
85
+ const direction = side === "right"
86
+ ? event.key === "ArrowRight"
87
+ ? 1
88
+ : -1
89
+ : event.key === "ArrowRight"
90
+ ? -1
91
+ : 1;
92
+ setWidth((current) => {
93
+ const next = Math.min(Math.max(current + direction * step, minWidth), maxWidth);
94
+ writeStoredWidth(storageKey, next);
95
+ return next;
96
+ });
97
+ }, [maxWidth, minWidth, side, storageKey]);
98
+ return (_jsxs("div", { "data-testid": testId, className: [
99
+ "relative flex h-full shrink-0",
100
+ side === "right" ? "flex-row" : "flex-row-reverse",
101
+ className ?? "",
102
+ ].join(" "), style: { width: `${width}px` }, children: [_jsx("div", { className: "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: children }), _jsxs("div", { role: "separator", "aria-orientation": "vertical", "aria-label": "Resize sidebar", tabIndex: 0, onPointerDown: handleDown, onKeyDown: handleKey, className: [
103
+ "group relative z-10 flex w-1 shrink-0 cursor-col-resize items-center justify-center",
104
+ "hover:bg-accent/15 focus-visible:bg-accent/20 focus-visible:outline-none",
105
+ ].join(" "), children: [_jsx("span", { "aria-hidden": true, className: "absolute inset-y-0 -left-1.5 right-auto w-4" }), _jsx("span", { "aria-hidden": true, className: "h-12 w-0.5 rounded-full bg-transparent transition-colors group-hover:bg-accent/50 group-focus-visible:bg-accent/60" })] })] }));
106
+ }
@@ -0,0 +1,2 @@
1
+ export declare function LifeOpsScreenTimeSection(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=LifeOpsScreenTimeSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LifeOpsScreenTimeSection.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/components/LifeOpsScreenTimeSection.tsx"],"names":[],"mappings":"AAkPA,wBAAgB,wBAAwB,4CA8gBvC"}
@@ -0,0 +1,373 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { client } from "@elizaos/app-core";
3
+ import { AppWindow, ArrowDown, ArrowRight, ArrowUp, AtSign, CalendarRange, Eye, Globe2, Loader2, MessageSquareText, Monitor, PlaySquare, RefreshCw, Send, Share2, Smartphone, } from "lucide-react";
4
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
5
+ import { BucketBars, DonutChart, formatDurationSeconds, HabitPanel, MetricTile, StackedBar, } from "./LifeOpsHabitVisuals.js";
6
+ const RANGE_OPTIONS = [
7
+ { key: "today", label: "Today" },
8
+ { key: "this-week", label: "This Week" },
9
+ { key: "7d", label: "Last 7d" },
10
+ { key: "30d", label: "Last 30d" },
11
+ ];
12
+ const CACHE_TTL_MS = 30_000;
13
+ function startOfLocalDay(date) {
14
+ const start = new Date(date);
15
+ start.setHours(0, 0, 0, 0);
16
+ return start;
17
+ }
18
+ function addDays(date, days) {
19
+ const next = new Date(date);
20
+ next.setDate(next.getDate() + days);
21
+ return next;
22
+ }
23
+ function computeRange(range) {
24
+ const now = new Date();
25
+ const until = now.toISOString();
26
+ if (range === "today") {
27
+ return { since: startOfLocalDay(now).toISOString(), until };
28
+ }
29
+ if (range === "this-week") {
30
+ const startToday = startOfLocalDay(now);
31
+ const dayOfWeek = startToday.getDay(); // Sunday = 0
32
+ const since = addDays(startToday, -dayOfWeek);
33
+ return { since: since.toISOString(), until };
34
+ }
35
+ if (range === "7d") {
36
+ const since = addDays(startOfLocalDay(now), -6);
37
+ return { since: since.toISOString(), until };
38
+ }
39
+ const since = addDays(startOfLocalDay(now), -29);
40
+ return { since: since.toISOString(), until };
41
+ }
42
+ function computePriorRange(range) {
43
+ if (range === "today")
44
+ return null;
45
+ const current = computeRange(range);
46
+ const sinceMs = Date.parse(current.since);
47
+ const untilMs = Date.parse(current.until);
48
+ const span = untilMs - sinceMs;
49
+ return {
50
+ since: new Date(sinceMs - span).toISOString(),
51
+ until: current.since,
52
+ };
53
+ }
54
+ function enumerateDays(period) {
55
+ const days = [];
56
+ const start = startOfLocalDay(new Date(Date.parse(period.since)));
57
+ const endMs = Date.parse(period.until);
58
+ let cursor = start;
59
+ while (cursor.getTime() <= endMs) {
60
+ days.push(cursor);
61
+ cursor = addDays(cursor, 1);
62
+ }
63
+ return days;
64
+ }
65
+ function formatDayLabel(date) {
66
+ return new Intl.DateTimeFormat(undefined, {
67
+ month: "numeric",
68
+ day: "numeric",
69
+ }).format(date);
70
+ }
71
+ function socialServiceSeconds(summary, key) {
72
+ return summary?.services.find((item) => item.key === key)?.totalSeconds ?? 0;
73
+ }
74
+ function sourceTone(state) {
75
+ switch (state) {
76
+ case "live":
77
+ return "bg-emerald-400";
78
+ case "partial":
79
+ return "bg-amber-300";
80
+ default:
81
+ return "bg-muted";
82
+ }
83
+ }
84
+ function deltaPercent(current, prior) {
85
+ if (prior <= 0) {
86
+ return current > 0 ? null : 0;
87
+ }
88
+ return Math.round(((current - prior) / prior) * 100);
89
+ }
90
+ function DeltaBadge({ percent }) {
91
+ if (percent === null) {
92
+ return (_jsxs("div", { className: "mt-1 inline-flex items-center gap-1 text-[10px] font-medium text-muted", children: [_jsx(ArrowRight, { className: "h-3 w-3", "aria-hidden": true }), "new"] }));
93
+ }
94
+ const Icon = percent > 0 ? ArrowUp : percent < 0 ? ArrowDown : ArrowRight;
95
+ const magnitude = Math.abs(percent);
96
+ return (_jsxs("div", { className: "mt-1 inline-flex items-center gap-1 text-[10px] font-medium text-muted", children: [_jsx(Icon, { className: "h-3 w-3", "aria-hidden": true }), magnitude, "% vs prior"] }));
97
+ }
98
+ function HistoryStrip({ days, }) {
99
+ const maxSeconds = days.reduce((max, day) => (day.totalSeconds > max ? day.totalSeconds : max), 0);
100
+ return (_jsx("div", { className: "flex items-end gap-1.5 overflow-x-auto py-2", children: days.map((day) => {
101
+ const ratio = maxSeconds > 0 ? day.totalSeconds / maxSeconds : 0;
102
+ const heightPct = Math.max(2, Math.round(ratio * 100));
103
+ return (_jsxs("div", { className: "flex min-w-[18px] flex-1 flex-col items-center gap-1", title: `${formatDayLabel(day.date)} - ${formatDurationSeconds(day.totalSeconds)}`, children: [_jsx("div", { className: "flex h-20 w-full items-end", children: _jsx("div", { className: "w-full rounded-sm bg-cyan-400/70", style: { height: `${heightPct}%` } }) }), _jsx("div", { className: "text-[10px] font-medium tabular-nums text-muted", children: formatDayLabel(day.date) })] }, day.date.toISOString()));
104
+ }) }));
105
+ }
106
+ async function fetchRangeData(period) {
107
+ const [breakdown, social] = await Promise.all([
108
+ client.getLifeOpsScreenTimeBreakdown({
109
+ since: period.since,
110
+ until: period.until,
111
+ topN: 16,
112
+ }),
113
+ client.getLifeOpsSocialHabitSummary({
114
+ since: period.since,
115
+ until: period.until,
116
+ topN: 12,
117
+ }),
118
+ ]);
119
+ return { breakdown, social };
120
+ }
121
+ async function fetchHistoryData(period) {
122
+ const days = enumerateDays(period);
123
+ const now = Date.now();
124
+ const results = await Promise.all(days.map(async (date) => {
125
+ const dayStart = startOfLocalDay(date);
126
+ const dayEnd = addDays(dayStart, 1);
127
+ const sinceIso = dayStart.toISOString();
128
+ const untilIso = new Date(Math.min(dayEnd.getTime(), now)).toISOString();
129
+ const breakdown = await client.getLifeOpsScreenTimeBreakdown({
130
+ since: sinceIso,
131
+ until: untilIso,
132
+ topN: 1,
133
+ });
134
+ return { date: dayStart, totalSeconds: breakdown.totalSeconds };
135
+ }));
136
+ return results;
137
+ }
138
+ export function LifeOpsScreenTimeSection() {
139
+ const [range, setRange] = useState("today");
140
+ const [data, setData] = useState(null);
141
+ const [priorData, setPriorData] = useState(null);
142
+ const [history, setHistory] = useState(null);
143
+ const [loading, setLoading] = useState(false);
144
+ const [error, setError] = useState(null);
145
+ const dataCache = useRef(new Map());
146
+ const priorCache = useRef(new Map());
147
+ const historyCache = useRef(new Map());
148
+ const load = useCallback(async (key, force = false) => {
149
+ setLoading(true);
150
+ setError(null);
151
+ const now = Date.now();
152
+ const cached = dataCache.current.get(key);
153
+ const cachedPrior = priorCache.current.get(key);
154
+ const cachedHistory = historyCache.current.get(key);
155
+ const fresh = (entry) => entry !== undefined && now - entry.fetchedAt < CACHE_TTL_MS;
156
+ if (!force &&
157
+ fresh(cached) &&
158
+ (key === "today" || fresh(cachedPrior)) &&
159
+ (key === "today" || fresh(cachedHistory))) {
160
+ setData(cached.value);
161
+ setPriorData(cachedPrior?.value ?? null);
162
+ setHistory(cachedHistory?.value ?? null);
163
+ setLoading(false);
164
+ return;
165
+ }
166
+ try {
167
+ const period = computeRange(key);
168
+ const priorPeriod = computePriorRange(key);
169
+ const [rangeData, priorRangeData, historyData] = await Promise.all([
170
+ fetchRangeData(period),
171
+ priorPeriod ? fetchRangeData(priorPeriod) : Promise.resolve(null),
172
+ key === "today"
173
+ ? Promise.resolve(null)
174
+ : fetchHistoryData(period),
175
+ ]);
176
+ const stamp = Date.now();
177
+ dataCache.current.set(key, { value: rangeData, fetchedAt: stamp });
178
+ if (priorRangeData) {
179
+ priorCache.current.set(key, {
180
+ value: priorRangeData,
181
+ fetchedAt: stamp,
182
+ });
183
+ }
184
+ else {
185
+ priorCache.current.delete(key);
186
+ }
187
+ if (historyData) {
188
+ historyCache.current.set(key, {
189
+ value: historyData,
190
+ fetchedAt: stamp,
191
+ });
192
+ }
193
+ else {
194
+ historyCache.current.delete(key);
195
+ }
196
+ setData(rangeData);
197
+ setPriorData(priorRangeData);
198
+ setHistory(historyData);
199
+ }
200
+ catch (cause) {
201
+ setError(cause instanceof Error && cause.message.trim().length > 0
202
+ ? cause.message.trim()
203
+ : "Screen time failed to load.");
204
+ }
205
+ finally {
206
+ setLoading(false);
207
+ }
208
+ }, []);
209
+ useEffect(() => {
210
+ void load(range);
211
+ }, [load, range]);
212
+ const breakdown = data?.breakdown ?? null;
213
+ const social = data?.social ?? null;
214
+ const priorBreakdown = priorData?.breakdown ?? null;
215
+ const priorSocial = priorData?.social ?? null;
216
+ const totalSeconds = breakdown?.totalSeconds ?? 0;
217
+ const appSeconds = breakdown?.bySource.find((item) => item.key === "app")?.totalSeconds ?? 0;
218
+ const webSeconds = breakdown?.bySource.find((item) => item.key === "website")?.totalSeconds ??
219
+ 0;
220
+ const phoneSeconds = breakdown?.byDevice.find((item) => item.key === "phone")?.totalSeconds ?? 0;
221
+ const categories = (breakdown?.byCategory ?? []).filter((item) => item.totalSeconds > 0);
222
+ const devices = (breakdown?.byDevice ?? []).filter((item) => item.totalSeconds > 0);
223
+ const browsers = (breakdown?.byBrowser ?? []).filter((item) => item.totalSeconds > 0);
224
+ const topTargets = breakdown?.items
225
+ .filter((item) => item.totalSeconds > 0)
226
+ .map((item) => ({
227
+ key: `${item.source}:${item.identifier}`,
228
+ label: item.displayName,
229
+ totalSeconds: item.totalSeconds,
230
+ })) ?? [];
231
+ const socialSeconds = social?.totalSeconds ?? 0;
232
+ const youtubeSeconds = socialServiceSeconds(social, "youtube");
233
+ const xSeconds = socialServiceSeconds(social, "x");
234
+ const services = (social?.services ?? []).filter((item) => item.totalSeconds > 0);
235
+ const surfaces = (social?.surfaces ?? []).filter((item) => item.totalSeconds > 0);
236
+ const sessionBuckets = social?.sessions
237
+ .filter((item) => item.totalSeconds > 0)
238
+ .map((item) => ({
239
+ key: `${item.source}:${item.identifier}`,
240
+ label: item.serviceLabel ?? item.displayName,
241
+ totalSeconds: item.totalSeconds,
242
+ })) ?? [];
243
+ const channels = (social?.messages.channels ?? []).filter((channel) => channel.opened > 0 || channel.outbound > 0 || channel.inbound > 0);
244
+ const messageOpened = social?.messages.opened ?? 0;
245
+ const messageOutbound = social?.messages.outbound ?? 0;
246
+ const messageInbound = social?.messages.inbound ?? 0;
247
+ const hasMessageActivity = messageOpened > 0 || messageOutbound > 0 || messageInbound > 0;
248
+ const hasUsage = totalSeconds > 0 ||
249
+ categories.length > 0 ||
250
+ devices.length > 0 ||
251
+ browsers.length > 0 ||
252
+ topTargets.length > 0 ||
253
+ socialSeconds > 0 ||
254
+ services.length > 0 ||
255
+ surfaces.length > 0 ||
256
+ sessionBuckets.length > 0 ||
257
+ hasMessageActivity;
258
+ const showDeltas = range !== "today" && priorData !== null;
259
+ const priorTotalSeconds = priorBreakdown?.totalSeconds ?? 0;
260
+ const priorAppSeconds = priorBreakdown?.bySource.find((item) => item.key === "app")
261
+ ?.totalSeconds ?? 0;
262
+ const priorWebSeconds = priorBreakdown?.bySource.find((item) => item.key === "website")
263
+ ?.totalSeconds ?? 0;
264
+ const priorPhoneSeconds = priorBreakdown?.byDevice.find((item) => item.key === "phone")
265
+ ?.totalSeconds ?? 0;
266
+ const priorSocialSeconds = priorSocial?.totalSeconds ?? 0;
267
+ const priorYoutubeSeconds = socialServiceSeconds(priorSocial, "youtube");
268
+ const priorXSeconds = socialServiceSeconds(priorSocial, "x");
269
+ const priorMessageOpened = priorSocial?.messages.opened ?? 0;
270
+ const totalLabel = useMemo(() => {
271
+ switch (range) {
272
+ case "today":
273
+ return "Today";
274
+ case "this-week":
275
+ return "This Week";
276
+ case "7d":
277
+ return "Last 7d";
278
+ case "30d":
279
+ return "Last 30d";
280
+ }
281
+ }, [range]);
282
+ const metricTiles = [
283
+ {
284
+ key: "total",
285
+ icon: _jsx(Monitor, {}),
286
+ value: formatDurationSeconds(totalSeconds),
287
+ label: totalLabel,
288
+ visible: totalSeconds > 0,
289
+ delta: showDeltas
290
+ ? deltaPercent(totalSeconds, priorTotalSeconds)
291
+ : undefined,
292
+ },
293
+ {
294
+ key: "apps",
295
+ icon: _jsx(AppWindow, {}),
296
+ value: formatDurationSeconds(appSeconds),
297
+ label: "Apps",
298
+ visible: appSeconds > 0,
299
+ delta: showDeltas
300
+ ? deltaPercent(appSeconds, priorAppSeconds)
301
+ : undefined,
302
+ },
303
+ {
304
+ key: "web",
305
+ icon: _jsx(Globe2, {}),
306
+ value: formatDurationSeconds(webSeconds),
307
+ label: "Web",
308
+ visible: webSeconds > 0,
309
+ delta: showDeltas
310
+ ? deltaPercent(webSeconds, priorWebSeconds)
311
+ : undefined,
312
+ },
313
+ {
314
+ key: "phone",
315
+ icon: _jsx(Smartphone, {}),
316
+ value: formatDurationSeconds(phoneSeconds),
317
+ label: "Phone",
318
+ visible: phoneSeconds > 0,
319
+ delta: showDeltas
320
+ ? deltaPercent(phoneSeconds, priorPhoneSeconds)
321
+ : undefined,
322
+ },
323
+ {
324
+ key: "social",
325
+ icon: _jsx(Share2, {}),
326
+ value: formatDurationSeconds(socialSeconds),
327
+ label: "Social",
328
+ visible: socialSeconds > 0,
329
+ delta: showDeltas
330
+ ? deltaPercent(socialSeconds, priorSocialSeconds)
331
+ : undefined,
332
+ },
333
+ {
334
+ key: "youtube",
335
+ icon: _jsx(PlaySquare, {}),
336
+ value: formatDurationSeconds(youtubeSeconds),
337
+ label: "YouTube",
338
+ visible: youtubeSeconds > 0,
339
+ delta: showDeltas
340
+ ? deltaPercent(youtubeSeconds, priorYoutubeSeconds)
341
+ : undefined,
342
+ },
343
+ {
344
+ key: "x",
345
+ icon: _jsx(AtSign, {}),
346
+ value: formatDurationSeconds(xSeconds),
347
+ label: "X",
348
+ visible: xSeconds > 0,
349
+ delta: showDeltas
350
+ ? deltaPercent(xSeconds, priorXSeconds)
351
+ : undefined,
352
+ },
353
+ {
354
+ key: "opened",
355
+ icon: _jsx(MessageSquareText, {}),
356
+ value: String(messageOpened),
357
+ label: "Opened",
358
+ visible: messageOpened > 0,
359
+ delta: showDeltas
360
+ ? deltaPercent(messageOpened, priorMessageOpened)
361
+ : undefined,
362
+ },
363
+ ].filter((item) => item.visible);
364
+ const showHistory = range !== "today" && history !== null && history.length > 0;
365
+ return (_jsxs("div", { className: "space-y-4", "data-testid": "lifeops-screen-time-section", children: [_jsxs("header", { className: "flex items-center justify-between gap-3 border-b border-border/20 pb-4", children: [_jsx("div", { className: "min-w-0", children: _jsx("h1", { className: "truncate text-2xl font-semibold tracking-tight text-txt", children: "Screen Time" }) }), _jsx("button", { type: "button", "aria-label": "Refresh screen time", title: "Refresh", className: "inline-flex h-9 w-9 items-center justify-center rounded-lg border border-border/20 bg-bg/30 text-muted transition-colors hover:border-accent/30 hover:text-txt disabled:opacity-40", onClick: () => void load(range, true), disabled: loading, children: _jsx(RefreshCw, { className: `h-3.5 w-3.5 ${loading ? "animate-spin" : ""}`, "aria-hidden": true }) })] }), _jsx("div", { className: "flex flex-wrap gap-2", role: "tablist", "aria-label": "Date range", children: RANGE_OPTIONS.map((option) => {
366
+ const active = option.key === range;
367
+ return (_jsxs("button", { type: "button", role: "tab", "aria-selected": active, onClick: () => setRange(option.key), className: `inline-flex h-8 items-center gap-1.5 rounded-lg border px-3 text-xs font-medium transition-colors ${active
368
+ ? "border-accent/40 bg-accent/15 text-txt"
369
+ : "border-border/20 bg-bg/30 text-muted hover:border-accent/30 hover:text-txt"}`, children: [option.key === range ? (_jsx(CalendarRange, { className: "h-3 w-3", "aria-hidden": true })) : null, option.label] }, option.key));
370
+ }) }), error ? (_jsx("div", { className: "rounded-lg border border-rose-500/30 bg-rose-500/10 px-3 py-2 text-xs text-rose-300", children: error })) : null, loading && !breakdown && !social ? (_jsxs("div", { className: "flex items-center gap-2 py-4 text-xs text-muted", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin", "aria-hidden": true }), "Loading screen time..."] })) : null, !loading && !error && (breakdown || social) && !hasUsage ? (_jsx(HabitPanel, { title: "Screen Time", icon: _jsx(Monitor, {}), children: _jsx("div", { className: "py-3 text-sm text-muted", children: "No screen activity in this range." }) })) : (_jsxs(_Fragment, { children: [metricTiles.length > 0 ? (_jsx("div", { className: metricTiles.length === 1
371
+ ? "grid gap-3"
372
+ : "grid grid-cols-2 gap-3 xl:grid-cols-4", children: metricTiles.map((tile) => (_jsxs("div", { className: "min-w-0", children: [_jsx(MetricTile, { icon: tile.icon, value: tile.value, label: tile.label }), tile.delta !== undefined ? (_jsx("div", { className: "px-3", children: _jsx(DeltaBadge, { percent: tile.delta }) })) : null] }, tile.key))) })) : null, showHistory ? (_jsx(HabitPanel, { title: "Daily History", icon: _jsx(CalendarRange, {}), children: _jsx(HistoryStrip, { days: history }) })) : null, categories.length > 0 ? (_jsx(HabitPanel, { title: "Categories", icon: _jsx(Monitor, {}), className: "xl:col-span-2", children: _jsxs("div", { className: "flex flex-col gap-5 lg:flex-row lg:items-center", children: [_jsx(DonutChart, { items: categories, totalSeconds: totalSeconds, label: totalLabel }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(StackedBar, { items: categories, totalSeconds: totalSeconds }), _jsx("div", { className: "mt-4", children: _jsx(BucketBars, { items: categories, totalSeconds: totalSeconds }) })] })] }) })) : null, _jsxs("div", { className: "grid gap-4 xl:grid-cols-3", children: [devices.length > 0 ? (_jsx(HabitPanel, { title: "Devices", icon: _jsx(Smartphone, {}), children: _jsx(BucketBars, { items: devices, totalSeconds: totalSeconds }) })) : null, browsers.length > 0 ? (_jsx(HabitPanel, { title: "Browsers", icon: _jsx(Globe2, {}), children: _jsx(BucketBars, { items: browsers, totalSeconds: webSeconds }) })) : null, topTargets.length > 0 ? (_jsx(HabitPanel, { title: "Apps and Sites", icon: _jsx(AppWindow, {}), children: _jsx(BucketBars, { items: topTargets, totalSeconds: totalSeconds, limit: 8 }) })) : null] }), services.length > 0 ? (_jsx(HabitPanel, { title: "Social Platforms", icon: _jsx(Share2, {}), children: _jsxs("div", { className: "flex flex-col gap-5 sm:flex-row sm:items-center", children: [_jsx(DonutChart, { items: services, totalSeconds: socialSeconds, label: "Social" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(StackedBar, { items: services, totalSeconds: socialSeconds }), _jsx("div", { className: "mt-4", children: _jsx(BucketBars, { items: services, totalSeconds: socialSeconds, emptyLabel: "No social time" }) })] })] }) })) : null, hasMessageActivity || channels.length > 0 ? (_jsxs(HabitPanel, { title: "Messages", icon: _jsx(MessageSquareText, {}), children: [_jsxs("div", { className: "grid grid-cols-3 gap-2", children: [_jsx(MetricTile, { icon: _jsx(Eye, {}), value: String(messageOpened), label: "Opened" }), _jsx(MetricTile, { icon: _jsx(Send, {}), value: String(messageOutbound), label: "Sent" }), _jsx(MetricTile, { icon: _jsx(MessageSquareText, {}), value: String(messageInbound), label: "Received" })] }), _jsx("div", { className: "mt-3", children: channels.map((channel) => (_jsxs("div", { className: "flex items-center justify-between gap-3 border-t border-border/10 py-2 text-xs", children: [_jsx("span", { className: "font-medium text-txt/90", children: channel.label }), _jsxs("span", { className: "inline-flex items-center gap-2 tabular-nums text-muted", children: [_jsxs("span", { className: "inline-flex items-center gap-1", children: [_jsx(Eye, { className: "h-3 w-3", "aria-hidden": true }), channel.opened] }), _jsxs("span", { className: "inline-flex items-center gap-1", children: [_jsx(Send, { className: "h-3 w-3", "aria-hidden": true }), channel.outbound] })] })] }, channel.channel))) })] })) : null, surfaces.length > 0 || sessionBuckets.length > 0 ? (_jsxs("div", { className: "grid gap-4 xl:grid-cols-2", children: [surfaces.length > 0 ? (_jsx(HabitPanel, { title: "Surfaces", icon: _jsx(Monitor, {}), children: _jsx(BucketBars, { items: surfaces, totalSeconds: socialSeconds }) })) : null, sessionBuckets.length > 0 ? (_jsx(HabitPanel, { title: "Sessions", icon: _jsx(Share2, {}), children: _jsx(BucketBars, { items: sessionBuckets, totalSeconds: socialSeconds, limit: 8 }) })) : null] })) : null] })), (social?.dataSources ?? []).length > 0 ? (_jsx("div", { className: "flex flex-wrap gap-2", children: (social?.dataSources ?? []).map((source) => (_jsxs("span", { title: source.label, className: "inline-flex h-8 items-center gap-2 rounded-lg border border-border/12 bg-bg/24 px-2 text-xs font-medium text-muted", children: [_jsx("span", { className: `h-2 w-2 rounded-full ${sourceTone(source.state)}` }), source.label] }, source.id))) })) : null] }));
373
+ }
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from "react";
2
+ import type { LifeOpsSection } from "../hooks/useLifeOpsSection.js";
3
+ interface LifeOpsSectionContentProps {
4
+ section: LifeOpsSection;
5
+ navigate: (section: LifeOpsSection) => void;
6
+ setupContent: ReactNode;
7
+ }
8
+ export declare function LifeOpsSectionContent({ section, navigate, setupContent, }: LifeOpsSectionContentProps): ReactNode;
9
+ export {};
10
+ //# sourceMappingURL=LifeOpsSectionContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LifeOpsSectionContent.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/components/LifeOpsSectionContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAapE,UAAU,0BAA0B;IAClC,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,SAAS,CAAC;CACzB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,QAAQ,EACR,YAAY,GACb,EAAE,0BAA0B,GAAG,SAAS,CAiCxC"}
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { LifeOpsCalendarSection } from "./LifeOpsCalendarSection.js";
3
+ import { LIFEOPS_MAIL_CHANNELS, LIFEOPS_MESSAGE_CHANNELS, LifeOpsInboxSection, } from "./LifeOpsInboxSection.js";
4
+ import { LifeOpsOverviewSection } from "./LifeOpsOverviewSection.js";
5
+ import { LifeOpsMoneySection } from "./LifeOpsMoneySection.js";
6
+ import { LifeOpsRemindersSection } from "./LifeOpsRemindersSection.js";
7
+ import { LifeOpsScreenTimeSection } from "./LifeOpsScreenTimeSection.js";
8
+ import { LifeOpsSleepSection } from "./LifeOpsSleepSection.js";
9
+ export function LifeOpsSectionContent({ section, navigate, setupContent, }) {
10
+ switch (section) {
11
+ case "overview":
12
+ return _jsx(LifeOpsOverviewSection, { onNavigate: navigate });
13
+ case "sleep":
14
+ return _jsx(LifeOpsSleepSection, {});
15
+ case "screen-time":
16
+ return _jsx(LifeOpsScreenTimeSection, {});
17
+ case "calendar":
18
+ return _jsx(LifeOpsCalendarSection, {});
19
+ case "messages":
20
+ return (_jsx(LifeOpsInboxSection, { channels: LIFEOPS_MESSAGE_CHANNELS, title: "Messages", emptyLabel: "No messages." }));
21
+ case "mail":
22
+ return (_jsx(LifeOpsInboxSection, { channels: LIFEOPS_MAIL_CHANNELS, title: "Mail", emptyLabel: "No mail." }));
23
+ case "reminders":
24
+ return _jsx(LifeOpsRemindersSection, {});
25
+ case "money":
26
+ return _jsx(LifeOpsMoneySection, {});
27
+ case "setup":
28
+ return setupContent;
29
+ }
30
+ }
@@ -0,0 +1,21 @@
1
+ export interface LifeOpsSelection {
2
+ eventId: string | null;
3
+ messageId: string | null;
4
+ reminderId: string | null;
5
+ }
6
+ interface SelectArgs {
7
+ eventId?: string | null;
8
+ messageId?: string | null;
9
+ reminderId?: string | null;
10
+ }
11
+ interface LifeOpsSelectionContextValue {
12
+ selection: LifeOpsSelection;
13
+ select: (args: SelectArgs) => void;
14
+ clearSelection: () => void;
15
+ }
16
+ export declare function LifeOpsSelectionProvider({ children, }: {
17
+ children: React.ReactNode;
18
+ }): import("react/jsx-runtime").JSX.Element;
19
+ export declare function useLifeOpsSelection(): LifeOpsSelectionContextValue;
20
+ export {};
21
+ //# sourceMappingURL=LifeOpsSelectionContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LifeOpsSelectionContext.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/components/LifeOpsSelectionContext.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,UAAU,4BAA4B;IACpC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACnC,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAWD,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CAyBA;AAED,wBAAgB,mBAAmB,IAAI,4BAA4B,CAQlE"}
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useMemo, useState, } from "react";
3
+ const EMPTY_SELECTION = {
4
+ eventId: null,
5
+ messageId: null,
6
+ reminderId: null,
7
+ };
8
+ const LifeOpsSelectionContext = createContext(null);
9
+ export function LifeOpsSelectionProvider({ children, }) {
10
+ const [selection, setSelection] = useState(EMPTY_SELECTION);
11
+ const select = useCallback((args) => {
12
+ setSelection({
13
+ eventId: args.eventId ?? null,
14
+ messageId: args.messageId ?? null,
15
+ reminderId: args.reminderId ?? null,
16
+ });
17
+ }, []);
18
+ const clearSelection = useCallback(() => {
19
+ setSelection(EMPTY_SELECTION);
20
+ }, []);
21
+ const value = useMemo(() => ({ selection, select, clearSelection }), [selection, select, clearSelection]);
22
+ return (_jsx(LifeOpsSelectionContext.Provider, { value: value, children: children }));
23
+ }
24
+ export function useLifeOpsSelection() {
25
+ const ctx = useContext(LifeOpsSelectionContext);
26
+ if (!ctx) {
27
+ throw new Error("useLifeOpsSelection must be used inside LifeOpsSelectionProvider");
28
+ }
29
+ return ctx;
30
+ }
@@ -0,0 +1,20 @@
1
+ export type GithubSetupState = {
2
+ identity: string;
3
+ status: string;
4
+ connectLabel?: string;
5
+ connectDisabled?: boolean;
6
+ disconnectDisabled?: boolean;
7
+ onConnect?: () => void;
8
+ onDisconnect?: () => void;
9
+ };
10
+ export interface LifeOpsSettingsSectionProps {
11
+ ownerGithub?: GithubSetupState;
12
+ agentGithub?: GithubSetupState;
13
+ githubError?: string | null;
14
+ cloudAction?: {
15
+ label: string;
16
+ onClick: () => void;
17
+ } | null;
18
+ }
19
+ export declare function LifeOpsSettingsSection({ ownerGithub, agentGithub, cloudAction, }?: LifeOpsSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
20
+ //# sourceMappingURL=LifeOpsSettingsSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LifeOpsSettingsSection.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/components/LifeOpsSettingsSection.tsx"],"names":[],"mappings":"AA4CA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,2BAA2B;IAC1C,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,GAAG,IAAI,CAAC;CACV;AAksCD,wBAAgB,sBAAsB,CAAC,EACrC,WAAkC,EAClC,WAAkC,EAClC,WAAkB,GACnB,GAAE,2BAAgC,2CAsFlC"}