forge-openclaw-plugin 0.3.15 → 0.3.17

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 (415) hide show
  1. package/README.md +6 -6
  2. package/dist/assets/{action-bar-B9MYlps2.js → action-bar-D3CEYlj4.js} +1 -1
  3. package/dist/assets/{activity-page-DbzbChcE.js → activity-page-Ce1pHIu5.js} +1 -1
  4. package/dist/assets/{ai-surface-workspace-CF0257Hs.js → ai-surface-workspace-DEliwOjF.js} +1 -1
  5. package/dist/assets/artifacts-page-BgyFVIVM.js +2 -0
  6. package/dist/assets/{atlas-panel-CO3RYAKn.js → atlas-panel-VZOnJa1c.js} +1 -1
  7. package/dist/assets/{board-CuxQRKPJ.js → board-DprRipIG.js} +1 -1
  8. package/dist/assets/{calendar-page-BuuHKEHC.js → calendar-page-Zstsn4uG.js} +1 -1
  9. package/dist/assets/{calendar-rules-DKftgNx5.js → calendar-rules-BGIBuEDk.js} +1 -1
  10. package/dist/assets/{calendar-week-toolbar-ChIpkT-G.js → calendar-week-toolbar-DXFkMkbq.js} +1 -1
  11. package/dist/assets/{charts-BzT4pUPg.js → charts-C5S0-BL7.js} +1 -1
  12. package/dist/assets/{companion-sync-lab-page-BZRX4Btw.js → companion-sync-lab-page-DIPPLFKt.js} +1 -1
  13. package/dist/assets/{daily-metrics-dashboard-CXDsaAQd.js → daily-metrics-dashboard-CG-OOCJz.js} +1 -1
  14. package/dist/assets/{define-workbench-box-CpG0Zb1L.js → define-workbench-box-BEEdtBkQ.js} +1 -1
  15. package/dist/assets/{entity-link-multiselect-Dl4rZqdg.js → entity-link-multiselect-BfDAROHB.js} +1 -1
  16. package/dist/assets/{entity-note-count-link-Bs1aKYyD.js → entity-note-count-link-BGOiaash.js} +1 -1
  17. package/dist/assets/{entity-notes-surface-B56XSw7M.js → entity-notes-surface-DPsJwqQa.js} +1 -1
  18. package/dist/assets/execution-board-Dg-2GSKv.js +1 -0
  19. package/dist/assets/{faceted-token-search-Dg2rjknH.js → faceted-token-search-DV7MSVYb.js} +1 -1
  20. package/dist/assets/{flagship-signal-deck-C6KVPhmM.js → flagship-signal-deck-D3wVL3bC.js} +1 -1
  21. package/dist/assets/{floating-action-menu-DAFAEBcA.js → floating-action-menu-BUs382px.js} +1 -1
  22. package/dist/assets/{forms-D1qJ3oOP.js → forms-ByKjodjN.js} +1 -1
  23. package/dist/assets/{generic-node-view-C6DK5hJ6.js → generic-node-view-BY5dbPXJ.js} +1 -1
  24. package/dist/assets/{goal-detail-page-CC4VXud6.js → goal-detail-page-MYr6j2B4.js} +1 -1
  25. package/dist/assets/{goal-dialog-15hD8EBp.js → goal-dialog-nkdME5Uy.js} +1 -1
  26. package/dist/assets/goals-page-BsFeBzU1.js +1 -0
  27. package/dist/assets/{graph-BF4IsheG.js → graph-CHVj0Z7n.js} +1 -1
  28. package/dist/assets/habits-page-wO461EVU.js +1 -0
  29. package/dist/assets/{health-boxes-DqgvIYoL.js → health-boxes-BphMeSJj.js} +1 -1
  30. package/dist/assets/index-CSd8ylsy.css +1 -0
  31. package/dist/assets/index-gmPaoLN-.js +2 -0
  32. package/dist/assets/{inline-note-fields-COgzxr_7.js → inline-note-fields-BvQwmMAv.js} +1 -1
  33. package/dist/assets/{insight-flow-dialog-Dmb6NSGp.js → insight-flow-dialog-H_eaOmst.js} +1 -1
  34. package/dist/assets/{insights-page-OnqR4cYI.js → insights-page-DINYe3cB.js} +3 -3
  35. package/dist/assets/{kanban-boxes-BWUzntCV.js → kanban-boxes-oACOTDYG.js} +1 -1
  36. package/dist/assets/{kanban-page-BI16Gzp_.js → kanban-page-BGLXH91f.js} +1 -1
  37. package/dist/assets/knowledge-graph-page-VfMvw5jL.js +1 -0
  38. package/dist/assets/{life-force-page-CDEXEQai.js → life-force-page-DQPb6UL-.js} +1 -1
  39. package/dist/assets/{life-force-workspace-C7UOnJEf.js → life-force-workspace-BJ1aI3JE.js} +1 -1
  40. package/dist/assets/{maps-BTVHALP8.js → maps-CvEHVkBk.js} +1 -1
  41. package/dist/assets/{metric-tile-boeHB1R1.js → metric-tile-CbEe19Gd.js} +1 -1
  42. package/dist/assets/{motion-DcgUnXhY.js → motion-BibSzp57.js} +1 -1
  43. package/dist/assets/{movement-boxes-BUSqaTL2.js → movement-boxes-dtDYhw5c.js} +1 -1
  44. package/dist/assets/{movement-page-DcbO0497.js → movement-page-BhmwCHjs.js} +1 -1
  45. package/dist/assets/{note-markdown-DXXI3W3V.js → note-markdown-CG8u2d6p.js} +1 -1
  46. package/dist/assets/{note-tags-input-CYh3TVW2.js → note-tags-input-D_conqDO.js} +1 -1
  47. package/dist/assets/{notes-boxes-CMJXX2K0.js → notes-boxes-BLKucFqW.js} +1 -1
  48. package/dist/assets/notes-page-CafVxWjb.js +1 -0
  49. package/dist/assets/{open-in-graph-button-4UYrp1XP.js → open-in-graph-button-DFQ4r6SN.js} +1 -1
  50. package/dist/assets/{orbit-map-BwK7sDaC.js → orbit-map-DsEl3ori.js} +1 -1
  51. package/dist/assets/overview-page-BffcX-pM.js +1 -0
  52. package/dist/assets/page-hero-U603l9rQ.js +1 -0
  53. package/dist/assets/pill-cluster-BYVFNppV.js +1 -0
  54. package/dist/assets/{preference-entity-handoff-button-C2ATjvws.js → preference-entity-handoff-button-cPrTpHsV.js} +1 -1
  55. package/dist/assets/{preferences-page-BAexXHye.js → preferences-page-DQjFIOmt.js} +1 -1
  56. package/dist/assets/{project-collections-B9nr-Ts-.js → project-collections-B9OGHGqm.js} +1 -1
  57. package/dist/assets/project-detail-page-r1Sw2kcO.js +1 -0
  58. package/dist/assets/{project-dialog-CBA-D65n.js → project-dialog-B2_PcXAf.js} +1 -1
  59. package/dist/assets/project-management-hierarchy-page-qLNG8hsh.js +1 -0
  60. package/dist/assets/{project-management-section-nav-DJ3QKCtr.js → project-management-section-nav-DFUlmMEB.js} +1 -1
  61. package/dist/assets/{projects-boxes-iBu_PRqe.js → projects-boxes-BA7_XaqX.js} +1 -1
  62. package/dist/assets/projects-page-B6ggXWFw.js +1 -0
  63. package/dist/assets/psyche-behaviors-page-ByWpXlLq.js +5 -0
  64. package/dist/assets/{psyche-flashcards-page-DQaw_vUQ.js → psyche-flashcards-page-B9nSc0mk.js} +1 -1
  65. package/dist/assets/{psyche-goal-map-page-C-ZTVOEP.js → psyche-goal-map-page-BQU7qI88.js} +1 -1
  66. package/dist/assets/{psyche-graph-DYzeClxn.js → psyche-graph-DCeP7r2b.js} +1 -1
  67. package/dist/assets/{psyche-metrics-page-C9hKn10A.js → psyche-metrics-page-DD2lOP-J.js} +1 -1
  68. package/dist/assets/psyche-mode-guide-page-DbtZgnjr.js +1 -0
  69. package/dist/assets/psyche-modes-page-3zFJWFQf.js +1 -0
  70. package/dist/assets/psyche-page-D5vXYkfB.js +1 -0
  71. package/dist/assets/psyche-patterns-page-BneAAeKS.js +5 -0
  72. package/dist/assets/{psyche-questionnaire-builder-page-gRwdGXde.js → psyche-questionnaire-builder-page-BH1la5C9.js} +1 -1
  73. package/dist/assets/{psyche-questionnaire-detail-page-CIP9b2UI.js → psyche-questionnaire-detail-page-DYav634P.js} +1 -1
  74. package/dist/assets/psyche-questionnaire-run-detail-page-9VaijhJm.js +1 -0
  75. package/dist/assets/{psyche-questionnaire-run-page-CXiJyd5i.js → psyche-questionnaire-run-page-e1T6k_dS.js} +1 -1
  76. package/dist/assets/{psyche-questionnaires-page-CFPKwA3O.js → psyche-questionnaires-page-Dyv367z9.js} +1 -1
  77. package/dist/assets/{psyche-report-detail-page-dU30a2WE.js → psyche-report-detail-page-hqxHIXw2.js} +3 -3
  78. package/dist/assets/psyche-reports-page-DhIfcGbt.js +1 -0
  79. package/dist/assets/{psyche-schemas-DDol0j-g.js → psyche-schemas-Cg51Ztxz.js} +1 -1
  80. package/dist/assets/psyche-schemas-beliefs-page-Dgb5o9vx.js +9 -0
  81. package/dist/assets/{psyche-screen-time-page-lIe6GQxJ.js → psyche-screen-time-page-D6MnJGNa.js} +1 -1
  82. package/dist/assets/{psyche-self-observation-page-BTE3KfIl.js → psyche-self-observation-page-C1Vyezbv.js} +1 -1
  83. package/dist/assets/{psyche-values-page-DclBZ9xw.js → psyche-values-page-B_JWVw1Q.js} +2 -2
  84. package/dist/assets/{question-flow-dialog-Ded2E85L.js → question-flow-dialog-yMYVk998.js} +2 -2
  85. package/dist/assets/{report-chain-fields-DY640iqL.js → report-chain-fields-D4NM9a6I.js} +1 -1
  86. package/dist/assets/rewards-page-B5-bcL4R.js +1 -0
  87. package/dist/assets/{scheduling-rules-editor-jakFfxqF.js → scheduling-rules-editor-De72IUax.js} +1 -1
  88. package/dist/assets/{schema-badge-30B5syHA.js → schema-badge-jX28kUa6.js} +1 -1
  89. package/dist/assets/{schemas-Db29G8NU.js → schemas-BlFy-uPR.js} +1 -1
  90. package/dist/assets/{select-menu-BF2zI3RW.js → select-menu-BXv1rsVc.js} +1 -1
  91. package/dist/assets/{settings-agents-page-Bh-Bv6FQ.js → settings-agents-page-DN_np10S.js} +1 -1
  92. package/dist/assets/settings-bin-page-BM5BpK_i.js +1 -0
  93. package/dist/assets/{settings-calendar-page-BA4_Qqiu.js → settings-calendar-page-Cg0gSSFs.js} +3 -3
  94. package/dist/assets/{settings-data-page-K4kpmQJY.js → settings-data-page-Dwmp2rLy.js} +1 -1
  95. package/dist/assets/{settings-logs-page-DkuNPAZo.js → settings-logs-page-DQNM21Re.js} +1 -1
  96. package/dist/assets/{settings-mobile-page-4pCNwD91.js → settings-mobile-page-DQdiRa-a.js} +1 -1
  97. package/dist/assets/settings-models-page-CAEPpuHF.js +1 -0
  98. package/dist/assets/{settings-page-B_Be0vOY.js → settings-page-Cl2KiCFg.js} +1 -1
  99. package/dist/assets/{settings-rewards-page-C6nFTWJu.js → settings-rewards-page-DoIUumhe.js} +1 -1
  100. package/dist/assets/{settings-section-nav-Lo-VKCfZ.js → settings-section-nav-D_N87IG0.js} +1 -1
  101. package/dist/assets/{settings-users-page-CVzNp4-m.js → settings-users-page-CPesR62N.js} +1 -1
  102. package/dist/assets/{settings-wiki-page-DXM--7BB.js → settings-wiki-page-BxMQM5Vi.js} +1 -1
  103. package/dist/assets/{sleep-page-DvPdZMKx.js → sleep-page-DUYmQKrg.js} +1 -1
  104. package/dist/assets/{sports-page-DjuZlOur.js → sports-page-Bzi5TF9T.js} +1 -1
  105. package/dist/assets/{state-Bpe5dF3T.js → state-BFyKSULP.js} +1 -1
  106. package/dist/assets/{strategies-page-PE1IlatS.js → strategies-page-C-T2MZx4.js} +1 -1
  107. package/dist/assets/{strategy-detail-page-C4KiEGCI.js → strategy-detail-page-3tYuSZu-.js} +1 -1
  108. package/dist/assets/{strategy-dialog-Cwf7Y3P5.js → strategy-dialog-BWm4slo4.js} +1 -1
  109. package/dist/assets/{surface-ubuOfukq.js → surface-BJObZeRw.js} +1 -1
  110. package/dist/assets/{table-U7otr5go.js → table-CTLroJKN.js} +1 -1
  111. package/dist/assets/task-detail-page-ZZOXSpSF.js +1 -0
  112. package/dist/assets/{task-dialog-CI_Fy_FW.js → task-dialog-2wy0xI7f.js} +5 -5
  113. package/dist/assets/timebox-planning-dialog-C6h0Hp71.js +1 -0
  114. package/dist/assets/{today-boxes-CYuxSkZf.js → today-boxes-B_TdgSDz.js} +1 -1
  115. package/dist/assets/today-page-Dipns9tl.js +1 -0
  116. package/dist/assets/training-load-page-B78e1-o-.js +1 -0
  117. package/dist/assets/{ui-B9TWEtCx.js → ui-uo_bNP7c.js} +1 -1
  118. package/dist/assets/{use-anchored-overlay-position-BY4kNzPj.js → use-anchored-overlay-position-BSxFX6Hi.js} +1 -1
  119. package/dist/assets/{use-psyche-focus-target-BhNedCZB.js → use-psyche-focus-target-1GLkhYiv.js} +1 -1
  120. package/dist/assets/{user-badge-ByhC6bMU.js → user-badge-C4eZu1e_.js} +1 -1
  121. package/dist/assets/{user-select-field-fx129Uh6.js → user-select-field-CmKwcbZt.js} +1 -1
  122. package/dist/assets/{utility-widgets-ilORjDmg.js → utility-widgets-B06wQFrd.js} +2 -2
  123. package/dist/assets/{vendor-BwL6m4SE.js → vendor-B7FKSwHK.js} +222 -212
  124. package/dist/assets/{vitals-page-mdEqIm_9.js → vitals-page-BC7QFsm2.js} +1 -1
  125. package/dist/assets/{weekly-review-page-C8W-yg5r.js → weekly-review-page-BjNsNoWj.js} +1 -1
  126. package/dist/assets/{weight-loss-page-BApTknCn.js → weight-loss-page-BOahGY9r.js} +1 -1
  127. package/dist/assets/{wiki-article-markdown-DBccllQg.js → wiki-article-markdown-DO47HnZf.js} +2 -2
  128. package/dist/assets/{wiki-editor-page-BfRfH1O3.js → wiki-editor-page-OWRUHl4O.js} +5 -5
  129. package/dist/assets/{wiki-ingest-history-page-C-6H3MU6.js → wiki-ingest-history-page-CuHpg2lZ.js} +1 -1
  130. package/dist/assets/{wiki-ingest-modal-DnlhByD_.js → wiki-ingest-modal-EZ3kX-vA.js} +1 -1
  131. package/dist/assets/wiki-page-BPV3HIgu.js +1 -0
  132. package/dist/assets/{workbench-flow-page-_-NKIx5R.js → workbench-flow-page-C53KueEz.js} +3 -3
  133. package/dist/assets/{workbench-page-NIAzggwX.js → workbench-page-DJ7nT2JQ.js} +1 -1
  134. package/dist/assets/workout-detail-page-Dhyu0q7o.js +2 -0
  135. package/dist/index.html +8 -8
  136. package/dist/openclaw/api-client.js +28 -2
  137. package/dist/openclaw/local-runtime.js +31 -14
  138. package/dist/openclaw/parity.d.ts +1 -1
  139. package/dist/openclaw/parity.js +10 -0
  140. package/dist/openclaw/routes.js +78 -0
  141. package/dist/openclaw/tools.js +42 -0
  142. package/dist/server/apps/api/migrations/072_artifact_store.sql +106 -0
  143. package/dist/server/{server → apps/api}/src/app.js +365 -4
  144. package/dist/server/{server → apps/api}/src/connectors/box-registry.js +3 -3
  145. package/dist/server/{server → apps/api}/src/db.js +23 -4
  146. package/dist/server/{server → apps/api}/src/health-weight-loss.js +1 -1
  147. package/dist/server/{server → apps/api}/src/openapi.js +570 -1
  148. package/dist/server/{server → apps/api}/src/questionnaire-seeds.js +1 -1
  149. package/dist/server/{server → apps/api}/src/repositories/ai-connectors.js +1 -1
  150. package/dist/server/apps/api/src/repositories/entity-links.js +66 -0
  151. package/dist/server/{server → apps/api}/src/repositories/habits.js +1 -1
  152. package/dist/server/apps/api/src/services/artifacts.js +1059 -0
  153. package/dist/server/{server → apps/api}/src/services/companion-iroh.js +4 -1
  154. package/dist/server/{server → apps/api}/src/services/doctor.js +3 -3
  155. package/dist/server/{server → apps/api}/src/services/entity-crud.js +22 -0
  156. package/dist/server/{server → apps/api}/src/services/gamification-assets.js +1 -1
  157. package/dist/server/{server → apps/api}/src/services/gamification.js +1 -1
  158. package/dist/server/{server → apps/api}/src/services/knowledge-graph.js +48 -3
  159. package/dist/server/{server → apps/api}/src/services/psyche-observation-calendar.js +1 -0
  160. package/dist/server/{server → apps/api}/src/types.js +4 -2
  161. package/dist/server/{server → apps/api}/src/watch-mobile.js +1 -1
  162. package/dist/server/{src → apps/web/src}/lib/api.js +69 -0
  163. package/dist/server/{src → apps/web/src}/lib/entity-visuals.js +10 -1
  164. package/dist/server/{src → apps/web/src}/lib/knowledge-graph-types.js +9 -0
  165. package/openclaw.plugin.json +2 -1
  166. package/package.json +3 -3
  167. package/server/index.js +3 -3
  168. package/server/migrations/072_artifact_store.sql +106 -0
  169. package/skills/forge-openclaw/SKILL.md +60 -7
  170. package/skills/forge-openclaw/entity_conversation_playbooks.md +212 -14
  171. package/skills/forge-openclaw/psyche_entity_playbooks.md +20 -0
  172. package/dist/assets/execution-board-D66C_ikW.js +0 -1
  173. package/dist/assets/goals-page-CQ2lJMzI.js +0 -1
  174. package/dist/assets/habits-page-a7KVPaQp.js +0 -1
  175. package/dist/assets/index-ClJbJhca.css +0 -1
  176. package/dist/assets/index-FpGANF9S.js +0 -2
  177. package/dist/assets/knowledge-graph-page-DxEBaEke.js +0 -1
  178. package/dist/assets/notes-page-DvHMcQey.js +0 -1
  179. package/dist/assets/overview-page-Z5vaUTm3.js +0 -1
  180. package/dist/assets/page-hero-DvrM83_C.js +0 -1
  181. package/dist/assets/pill-cluster-DYI3Ibj8.js +0 -1
  182. package/dist/assets/project-detail-page-B9PqyPu9.js +0 -1
  183. package/dist/assets/project-management-hierarchy-page-DXK14jn0.js +0 -1
  184. package/dist/assets/projects-page-CdAk-ByT.js +0 -1
  185. package/dist/assets/psyche-behaviors-page-CbhhTfU2.js +0 -5
  186. package/dist/assets/psyche-mode-guide-page-CR8e984W.js +0 -1
  187. package/dist/assets/psyche-modes-page-lQdpAcY3.js +0 -1
  188. package/dist/assets/psyche-page-CTdIDkw9.js +0 -1
  189. package/dist/assets/psyche-patterns-page-Drgm-f7I.js +0 -5
  190. package/dist/assets/psyche-questionnaire-run-detail-page-SYndwtF3.js +0 -1
  191. package/dist/assets/psyche-reports-page-Cn0EBndy.js +0 -1
  192. package/dist/assets/psyche-schemas-beliefs-page-Bab4xSWv.js +0 -9
  193. package/dist/assets/rewards-page-FxUXB76B.js +0 -1
  194. package/dist/assets/settings-bin-page-DT8JJero.js +0 -1
  195. package/dist/assets/settings-models-page-CZHG3t7W.js +0 -1
  196. package/dist/assets/task-detail-page-B3SMFZQ3.js +0 -1
  197. package/dist/assets/timebox-planning-dialog-BtFuVoA1.js +0 -1
  198. package/dist/assets/today-page-CHGpLEZ3.js +0 -1
  199. package/dist/assets/training-load-page-GZJF-Yy5.js +0 -1
  200. package/dist/assets/wiki-page-DPZ55e3x.js +0 -1
  201. package/dist/assets/workout-detail-page-3fxr6HL4.js +0 -2
  202. /package/dist/server/{server → apps/api}/migrations/001_core.sql +0 -0
  203. /package/dist/server/{server → apps/api}/migrations/002_psyche.sql +0 -0
  204. /package/dist/server/{server → apps/api}/migrations/003_habits.sql +0 -0
  205. /package/dist/server/{server → apps/api}/migrations/004_habit_links.sql +0 -0
  206. /package/dist/server/{server → apps/api}/migrations/005_habit_psyche_links.sql +0 -0
  207. /package/dist/server/{server → apps/api}/migrations/006_work_adjustments.sql +0 -0
  208. /package/dist/server/{server → apps/api}/migrations/007_weekly_review_closures.sql +0 -0
  209. /package/dist/server/{server → apps/api}/migrations/008_calendar_execution.sql +0 -0
  210. /package/dist/server/{server → apps/api}/migrations/009_true_calendar_events.sql +0 -0
  211. /package/dist/server/{server → apps/api}/migrations/010_calendar_selection_state.sql +0 -0
  212. /package/dist/server/{server → apps/api}/migrations/011_calendar_timezone_backfill.sql +0 -0
  213. /package/dist/server/{server → apps/api}/migrations/012_work_block_ranges.sql +0 -0
  214. /package/dist/server/{server → apps/api}/migrations/013_microsoft_local_auth_settings.sql +0 -0
  215. /package/dist/server/{server → apps/api}/migrations/014_note_tags_and_ephemeral.sql +0 -0
  216. /package/dist/server/{server → apps/api}/migrations/015_multi_user_and_strategies.sql +0 -0
  217. /package/dist/server/{server → apps/api}/migrations/016_health_companion.sql +0 -0
  218. /package/dist/server/{server → apps/api}/migrations/016_strategy_contracts_and_user_graph.sql +0 -0
  219. /package/dist/server/{server → apps/api}/migrations/017_preferences.sql +0 -0
  220. /package/dist/server/{server → apps/api}/migrations/018_preference_catalogs.sql +0 -0
  221. /package/dist/server/{server → apps/api}/migrations/019_wiki_memory.sql +0 -0
  222. /package/dist/server/{server → apps/api}/migrations/020_wiki_page_hierarchy.sql +0 -0
  223. /package/dist/server/{server → apps/api}/migrations/021_hide_evidence_from_wiki_index.sql +0 -0
  224. /package/dist/server/{server → apps/api}/migrations/022_wiki_ingest_background.sql +0 -0
  225. /package/dist/server/{server → apps/api}/migrations/023_diagnostic_logs.sql +0 -0
  226. /package/dist/server/{server → apps/api}/migrations/024_questionnaires.sql +0 -0
  227. /package/dist/server/{server → apps/api}/migrations/025_ai_model_connections.sql +0 -0
  228. /package/dist/server/{server → apps/api}/migrations/026_custom_theme_settings.sql +0 -0
  229. /package/dist/server/{server → apps/api}/migrations/027_ai_processors.sql +0 -0
  230. /package/dist/server/{server → apps/api}/migrations/028_movement_domain.sql +0 -0
  231. /package/dist/server/{server → apps/api}/migrations/029_watch_micro_capture.sql +0 -0
  232. /package/dist/server/{server → apps/api}/migrations/030_surface_layouts.sql +0 -0
  233. /package/dist/server/{server → apps/api}/migrations/031_ai_processor_runtime_upgrades.sql +0 -0
  234. /package/dist/server/{server → apps/api}/migrations/032_ai_connectors.sql +0 -0
  235. /package/dist/server/{server → apps/api}/migrations/033_movement_trip_point_sync.sql +0 -0
  236. /package/dist/server/{server → apps/api}/migrations/034_movement_segment_sync.sql +0 -0
  237. /package/dist/server/{server → apps/api}/migrations/035_google_local_auth_settings.sql +0 -0
  238. /package/dist/server/{server → apps/api}/migrations/036_google_local_auth_client_secret.sql +0 -0
  239. /package/dist/server/{server → apps/api}/migrations/037_workbench_public_inputs_and_run_inputs.sql +0 -0
  240. /package/dist/server/{server → apps/api}/migrations/038_data_management_settings.sql +0 -0
  241. /package/dist/server/{server → apps/api}/migrations/039_life_force_and_action_points.sql +0 -0
  242. /package/dist/server/{server → apps/api}/migrations/040_screen_time_domain.sql +0 -0
  243. /package/dist/server/{server → apps/api}/migrations/041_companion_source_states.sql +0 -0
  244. /package/dist/server/{server → apps/api}/migrations/042_movement_boxes.sql +0 -0
  245. /package/dist/server/{server → apps/api}/migrations/043_movement_box_overlap_overrides.sql +0 -0
  246. /package/dist/server/{server → apps/api}/migrations/044_macos_local_calendar_provider.sql +0 -0
  247. /package/dist/server/{server → apps/api}/migrations/045_sleep_nights_and_raw_segments.sql +0 -0
  248. /package/dist/server/{server → apps/api}/migrations/046_work_item_hierarchy.sql +0 -0
  249. /package/dist/server/{server → apps/api}/migrations/047_sleep_source_records.sql +0 -0
  250. /package/dist/server/{server → apps/api}/migrations/048_task_run_git_context.sql +0 -0
  251. /package/dist/server/{server → apps/api}/migrations/049_agent_runtime_sessions.sql +0 -0
  252. /package/dist/server/{server → apps/api}/migrations/050_agent_token_bootstrap_policy.sql +0 -0
  253. /package/dist/server/{server → apps/api}/migrations/051_agent_token_scope_policy.sql +0 -0
  254. /package/dist/server/{server → apps/api}/migrations/052_agent_identity_tightening.sql +0 -0
  255. /package/dist/server/{server → apps/api}/migrations/053_agent_runtime_session_canonical_labels.sql +0 -0
  256. /package/dist/server/{server → apps/api}/migrations/054_sqlite_backed_wiki_memory.sql +0 -0
  257. /package/dist/server/{server → apps/api}/migrations/055_gamification_progression.sql +0 -0
  258. /package/dist/server/{server → apps/api}/migrations/056_gamification_equipment.sql +0 -0
  259. /package/dist/server/{server → apps/api}/migrations/057_gamification_catalog_cleanup.sql +0 -0
  260. /package/dist/server/{server → apps/api}/migrations/058_gamification_theme_preference.sql +0 -0
  261. /package/dist/server/{server → apps/api}/migrations/059_data_backup_retention.sql +0 -0
  262. /package/dist/server/{server → apps/api}/migrations/060_psyche_devrage_metrics.sql +0 -0
  263. /package/dist/server/{server → apps/api}/migrations/061_health_workout_raw_evidence.sql +0 -0
  264. /package/dist/server/{server → apps/api}/migrations/062_health_mobile_sync_sessions.sql +0 -0
  265. /package/dist/server/{server → apps/api}/migrations/063_psyche_flashcards.sql +0 -0
  266. /package/dist/server/{server → apps/api}/migrations/064_health_workout_time_series_identity.sql +0 -0
  267. /package/dist/server/{server → apps/api}/migrations/065_weight_loss_nutrition_insights.sql +0 -0
  268. /package/dist/server/{server → apps/api}/migrations/066_watch_action_receipts.sql +0 -0
  269. /package/dist/server/{server → apps/api}/migrations/067_weight_loss_daily_active_overrides.sql +0 -0
  270. /package/dist/server/{server → apps/api}/migrations/068_remove_generated_movement_wiki_logs.sql +0 -0
  271. /package/dist/server/{server → apps/api}/migrations/069_psyche_devrage_cumulative_rage.sql +0 -0
  272. /package/dist/server/{server → apps/api}/migrations/070_health_mobile_sync_completion_index.sql +0 -0
  273. /package/dist/server/{server → apps/api}/migrations/071_agent_runtime_claude_identity.sql +0 -0
  274. /package/dist/server/{server → apps/api}/src/data-management-types.js +0 -0
  275. /package/dist/server/{server → apps/api}/src/debug.js +0 -0
  276. /package/dist/server/{server → apps/api}/src/demo-data.js +0 -0
  277. /package/dist/server/{server → apps/api}/src/discovery-advertiser.js +0 -0
  278. /package/dist/server/{server → apps/api}/src/e2e-server.js +0 -0
  279. /package/dist/server/{server → apps/api}/src/errors.js +0 -0
  280. /package/dist/server/{server → apps/api}/src/health-workout-adapters.js +0 -0
  281. /package/dist/server/{server → apps/api}/src/health-workout-analytics.js +0 -0
  282. /package/dist/server/{server → apps/api}/src/health.js +0 -0
  283. /package/dist/server/{server → apps/api}/src/index.js +0 -0
  284. /package/dist/server/{server → apps/api}/src/managers/base.js +0 -0
  285. /package/dist/server/{server → apps/api}/src/managers/contracts.js +0 -0
  286. /package/dist/server/{server → apps/api}/src/managers/platform/api-gateway-manager.js +0 -0
  287. /package/dist/server/{server → apps/api}/src/managers/platform/audit-manager.js +0 -0
  288. /package/dist/server/{server → apps/api}/src/managers/platform/authentication-manager.js +0 -0
  289. /package/dist/server/{server → apps/api}/src/managers/platform/authorization-manager.js +0 -0
  290. /package/dist/server/{server → apps/api}/src/managers/platform/background-job-manager.js +0 -0
  291. /package/dist/server/{server → apps/api}/src/managers/platform/configuration-manager.js +0 -0
  292. /package/dist/server/{server → apps/api}/src/managers/platform/database-manager.js +0 -0
  293. /package/dist/server/{server → apps/api}/src/managers/platform/event-bus-manager.js +0 -0
  294. /package/dist/server/{server → apps/api}/src/managers/platform/external-service-manager.js +0 -0
  295. /package/dist/server/{server → apps/api}/src/managers/platform/health-manager.js +0 -0
  296. /package/dist/server/{server → apps/api}/src/managers/platform/llm-manager.js +0 -0
  297. /package/dist/server/{server → apps/api}/src/managers/platform/migration-manager.js +0 -0
  298. /package/dist/server/{server → apps/api}/src/managers/platform/mock-workbench-provider.js +0 -0
  299. /package/dist/server/{server → apps/api}/src/managers/platform/openai-responses-provider.js +0 -0
  300. /package/dist/server/{server → apps/api}/src/managers/platform/search-index-manager.js +0 -0
  301. /package/dist/server/{server → apps/api}/src/managers/platform/secrets-manager.js +0 -0
  302. /package/dist/server/{server → apps/api}/src/managers/platform/session-manager.js +0 -0
  303. /package/dist/server/{server → apps/api}/src/managers/platform/storage-manager.js +0 -0
  304. /package/dist/server/{server → apps/api}/src/managers/platform/token-manager.js +0 -0
  305. /package/dist/server/{server → apps/api}/src/managers/platform/transaction-manager.js +0 -0
  306. /package/dist/server/{server → apps/api}/src/managers/platform/trusted-network.js +0 -0
  307. /package/dist/server/{server → apps/api}/src/managers/runtime.js +0 -0
  308. /package/dist/server/{server → apps/api}/src/managers/type-guards.js +0 -0
  309. /package/dist/server/{server → apps/api}/src/movement.js +0 -0
  310. /package/dist/server/{server → apps/api}/src/preferences-seeds.js +0 -0
  311. /package/dist/server/{server → apps/api}/src/preferences-types.js +0 -0
  312. /package/dist/server/{server → apps/api}/src/psyche-types.js +0 -0
  313. /package/dist/server/{server → apps/api}/src/questionnaire-flow.js +0 -0
  314. /package/dist/server/{server → apps/api}/src/questionnaire-types.js +0 -0
  315. /package/dist/server/{server → apps/api}/src/repositories/activity-events.js +0 -0
  316. /package/dist/server/{server → apps/api}/src/repositories/agent-runtime-sessions.js +0 -0
  317. /package/dist/server/{server → apps/api}/src/repositories/ai-processors.js +0 -0
  318. /package/dist/server/{server → apps/api}/src/repositories/calendar.js +0 -0
  319. /package/dist/server/{server → apps/api}/src/repositories/collaboration.js +0 -0
  320. /package/dist/server/{server → apps/api}/src/repositories/deleted-entities.js +0 -0
  321. /package/dist/server/{server → apps/api}/src/repositories/diagnostic-logs.js +0 -0
  322. /package/dist/server/{server → apps/api}/src/repositories/domains.js +0 -0
  323. /package/dist/server/{server → apps/api}/src/repositories/entity-ownership.js +0 -0
  324. /package/dist/server/{server → apps/api}/src/repositories/event-log.js +0 -0
  325. /package/dist/server/{server → apps/api}/src/repositories/gamification.js +0 -0
  326. /package/dist/server/{server → apps/api}/src/repositories/goals.js +0 -0
  327. /package/dist/server/{server → apps/api}/src/repositories/model-settings.js +0 -0
  328. /package/dist/server/{server → apps/api}/src/repositories/notes.js +0 -0
  329. /package/dist/server/{server → apps/api}/src/repositories/preferences.js +0 -0
  330. /package/dist/server/{server → apps/api}/src/repositories/projects.js +0 -0
  331. /package/dist/server/{server → apps/api}/src/repositories/psyche.js +0 -0
  332. /package/dist/server/{server → apps/api}/src/repositories/questionnaires.js +0 -0
  333. /package/dist/server/{server → apps/api}/src/repositories/rewards.js +0 -0
  334. /package/dist/server/{server → apps/api}/src/repositories/settings.js +0 -0
  335. /package/dist/server/{server → apps/api}/src/repositories/strategies.js +0 -0
  336. /package/dist/server/{server → apps/api}/src/repositories/surface-layouts.js +0 -0
  337. /package/dist/server/{server → apps/api}/src/repositories/tags.js +0 -0
  338. /package/dist/server/{server → apps/api}/src/repositories/task-runs.js +0 -0
  339. /package/dist/server/{server → apps/api}/src/repositories/tasks.js +0 -0
  340. /package/dist/server/{server → apps/api}/src/repositories/users.js +0 -0
  341. /package/dist/server/{server → apps/api}/src/repositories/weekly-reviews.js +0 -0
  342. /package/dist/server/{server → apps/api}/src/repositories/wiki-memory.js +0 -0
  343. /package/dist/server/{server → apps/api}/src/repositories/work-adjustments.js +0 -0
  344. /package/dist/server/{server → apps/api}/src/runtime-data-root.js +0 -0
  345. /package/dist/server/{server → apps/api}/src/screen-time.js +0 -0
  346. /package/dist/server/{server → apps/api}/src/seed-demo.js +0 -0
  347. /package/dist/server/{server → apps/api}/src/services/calendar-runtime.js +0 -0
  348. /package/dist/server/{server → apps/api}/src/services/context.js +0 -0
  349. /package/dist/server/{server → apps/api}/src/services/dashboard.js +0 -0
  350. /package/dist/server/{server → apps/api}/src/services/data-management.js +0 -0
  351. /package/dist/server/{server → apps/api}/src/services/devrage-scanner.js +0 -0
  352. /package/dist/server/{server → apps/api}/src/services/devrage.js +0 -0
  353. /package/dist/server/{server → apps/api}/src/services/git-helper.js +0 -0
  354. /package/dist/server/{server → apps/api}/src/services/google-calendar-oauth-config.js +0 -0
  355. /package/dist/server/{server → apps/api}/src/services/insights.js +0 -0
  356. /package/dist/server/{server → apps/api}/src/services/legacy-wiki-markdown-import.js +0 -0
  357. /package/dist/server/{server → apps/api}/src/services/life-force-model.js +0 -0
  358. /package/dist/server/{server → apps/api}/src/services/life-force.js +0 -0
  359. /package/dist/server/{server → apps/api}/src/services/macos-calendar-helper.js +0 -0
  360. /package/dist/server/{server → apps/api}/src/services/openai-codex-oauth.js +0 -0
  361. /package/dist/server/{server → apps/api}/src/services/projects.js +0 -0
  362. /package/dist/server/{server → apps/api}/src/services/psyche.js +0 -0
  363. /package/dist/server/{server → apps/api}/src/services/relations.js +0 -0
  364. /package/dist/server/{server → apps/api}/src/services/reviews.js +0 -0
  365. /package/dist/server/{server → apps/api}/src/services/run-recovery.js +0 -0
  366. /package/dist/server/{server → apps/api}/src/services/tagging.js +0 -0
  367. /package/dist/server/{server → apps/api}/src/services/task-run-watchdog.js +0 -0
  368. /package/dist/server/{server → apps/api}/src/services/work-time.js +0 -0
  369. /package/dist/server/{server → apps/api}/src/web.js +0 -0
  370. /package/dist/server/{src → apps/web/src}/components/customization/utility-widgets.js +0 -0
  371. /package/dist/server/{src → apps/web/src}/components/ui/info-tooltip.js +0 -0
  372. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/calendar/calendar-boxes.js +0 -0
  373. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/goals/goals-boxes.js +0 -0
  374. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/habits/habits-boxes.js +0 -0
  375. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/health/health-boxes.js +0 -0
  376. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/insights/insights-boxes.js +0 -0
  377. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/kanban/kanban-boxes.js +0 -0
  378. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/movement/movement-boxes.js +0 -0
  379. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/notes/notes-boxes.js +0 -0
  380. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/overview/overview-boxes.js +0 -0
  381. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/preferences/preferences-boxes.js +0 -0
  382. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/projects/projects-boxes.js +0 -0
  383. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/psyche/psyche-boxes.js +0 -0
  384. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/questionnaires/questionnaires-boxes.js +0 -0
  385. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/review/review-boxes.js +0 -0
  386. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/shared/define-workbench-box.js +0 -0
  387. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/shared/generic-node-view.js +0 -0
  388. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/strategies/strategies-boxes.js +0 -0
  389. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/tasks/tasks-boxes.js +0 -0
  390. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/today/today-boxes.js +0 -0
  391. /package/dist/server/{src → apps/web/src}/components/workbench-boxes/wiki/wiki-boxes.js +0 -0
  392. /package/dist/server/{src → apps/web/src}/lib/api-error.js +0 -0
  393. /package/dist/server/{src → apps/web/src}/lib/calendar-name-deduper.js +0 -0
  394. /package/dist/server/{src → apps/web/src}/lib/data-management-types.js +0 -0
  395. /package/dist/server/{src → apps/web/src}/lib/date-keys.js +0 -0
  396. /package/dist/server/{src → apps/web/src}/lib/diagnostics.js +0 -0
  397. /package/dist/server/{src → apps/web/src}/lib/gamification-catalog.js +0 -0
  398. /package/dist/server/{src → apps/web/src}/lib/knowledge-graph.js +0 -0
  399. /package/dist/server/{src → apps/web/src}/lib/psyche-schemas.js +0 -0
  400. /package/dist/server/{src → apps/web/src}/lib/psyche-types.js +0 -0
  401. /package/dist/server/{src → apps/web/src}/lib/questionnaire-types.js +0 -0
  402. /package/dist/server/{src → apps/web/src}/lib/runtime-paths.js +0 -0
  403. /package/dist/server/{src → apps/web/src}/lib/schemas.js +0 -0
  404. /package/dist/server/{src → apps/web/src}/lib/snapshot-normalizer.js +0 -0
  405. /package/dist/server/{src → apps/web/src}/lib/theme-system.js +0 -0
  406. /package/dist/server/{src → apps/web/src}/lib/types.js +0 -0
  407. /package/dist/server/{src → apps/web/src}/lib/utils.js +0 -0
  408. /package/dist/server/{src → apps/web/src}/lib/weight-loss-energy-model.js +0 -0
  409. /package/dist/server/{src → apps/web/src}/lib/weight-loss-types.js +0 -0
  410. /package/dist/server/{src → apps/web/src}/lib/workbench/boxes.js +0 -0
  411. /package/dist/server/{src → apps/web/src}/lib/workbench/contracts.js +0 -0
  412. /package/dist/server/{src → apps/web/src}/lib/workbench/nodes.js +0 -0
  413. /package/dist/server/{src → apps/web/src}/lib/workbench/registry.js +0 -0
  414. /package/dist/server/{src → apps/web/src}/lib/workbench/runtime.js +0 -0
  415. /package/dist/server/{src → apps/web/src}/lib/workbench/tool-catalog.js +0 -0
@@ -1 +1 @@
1
- import{r as p,j as e,aC as Pe,bq as we,aV as qe,bW as Se,bs as Qe,cm as Ze}from"./vendor-BwL6m4SE.js";import{j as Ue,i as W,k as Ge}from"./state-Bpe5dF3T.js";import{E as Ye}from"./entity-link-multiselect-Dl4rZqdg.js";import{F as je}from"./faceted-token-search-Dg2rjknH.js";import{d as Xe,S as Je,e as et,C as g,k as c,I as H,aA as tt,T as at,B as ie,e1 as st,be as rt,b3 as it,b4 as nt,b5 as lt,b6 as ot,b9 as dt}from"./index-FpGANF9S.js";import{P as ct}from"./page-hero-DvrM83_C.js";import{c as ut,d as J,e as xt}from"./health-boxes-DqgvIYoL.js";import{f as mt}from"./date-keys-BnZV4PNO.js";import{b as pt,p as ht}from"./health-link-options-Cpx8w7uM.js";import{R as P,A as vt,C as ee,X as q,Y as K,T as Q,a as ke,e as ye,B as ne,f as gt,d as ft,g as bt,c as le,S as jt,h as kt}from"./charts-BzT4pUPg.js";import"./use-anchored-overlay-position-BY4kNzPj.js";import"./motion-DcgUnXhY.js";import"./ui-B9TWEtCx.js";import"./board-CuxQRKPJ.js";import"./forms-D1qJ3oOP.js";import"./generic-node-view-C6DK5hJ6.js";import"./graph-BF4IsheG.js";import"./define-workbench-box-CpG0Zb1L.js";function Z({className:t,children:r}){const s=p.useRef(null),[l,o]=p.useState(!1);return p.useEffect(()=>{const h=()=>{const b=s.current;o(!!(b&&b.clientWidth>0&&b.clientHeight>0))},f=window.requestAnimationFrame(h),j=typeof ResizeObserver>"u"?null:new ResizeObserver(h);return s.current&&j&&j.observe(s.current),window.addEventListener("resize",h),()=>{window.cancelAnimationFrame(f),j==null||j.disconnect(),window.removeEventListener("resize",h)}},[]),e.jsx("div",{ref:s,className:t,children:l?r:null})}const G={below_z1:"#94a3b8",zone_1:"#38bdf8",zone_2:"#22c55e",zone_3:"#eab308",zone_4:"#f97316",zone_5:"#ef4444"},V=["below_z1","zone_1","zone_2","zone_3","zone_4","zone_5"];function z(t){return t?t.replace(/^activity_/i,"").replaceAll("_"," ").replace(/\s+/g," ").replace(/\b\w/g,r=>r.toUpperCase()):"Unknown"}function B(t){return`${Math.round(t/60)}m`}function de(t){return t?`${(t/1e3).toFixed(1)} km`:"n/a"}function Y(t,r){const s=new Intl.DateTimeFormat(void 0,{weekday:"short",day:"numeric",month:"short"}),l=new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit"});return`${s.format(new Date(t))} · ${l.format(new Date(t))} - ${l.format(new Date(r))}`}function ae(t){return mt(new Date(t))}function U(t){return{subjectiveEffort:t.subjectiveEffort!==null?String(t.subjectiveEffort):"",moodBefore:t.moodBefore??"",moodAfter:t.moodAfter??"",meaningText:t.meaningText??"",plannedContext:t.plannedContext??"",socialContext:t.socialContext??"",tagsText:Array.isArray(t.tags)?t.tags.join(", "):"",linkValues:Array.isArray(t.links)?t.links.map(r=>`${r.entityType}:${r.entityId}`):[]}}function Ae(t){return t.trim().toLowerCase()}function k(t){var r;return((r=t.workoutTypeLabel)==null?void 0:r.trim())||z(t.workoutType)}function _(t){var r;return((r=t.activityFamilyLabel)==null?void 0:r.trim())||z(t.activityFamily)}function Ce(t){return z(t.sourceSystem??t.source)}function yt(t){return t==null?"n/a":typeof t=="boolean"?t?"Yes":"No":typeof t=="number"?Number.isInteger(t)?String(t):t.toFixed(1):t}function Nt(t){const r=yt(t.value);return!t.unit||t.unit==="count"?r:`${r} ${t.unit}`}function wt(t,r){return Ae([t.workoutType,k(t),t.activityFamily,_(t),t.sourceSystem,Ce(t),t.sourceType,t.sourceDevice,t.reconciliationStatus,t.moodBefore,t.moodAfter,t.meaningText,t.plannedContext,t.socialContext,t.tags.join(" "),r.moodBefore,r.moodAfter,r.meaningText,r.plannedContext,r.socialContext,r.tagsText,Y(t.startedAt,t.endedAt)].join(" "))}function St(t){const r=new Map;for(const s of t)r.set(`workout:${s.workoutType}`,{id:`workout:${s.workoutType}`,label:k(s),description:"Workout type",searchText:`${k(s)} workout`,badge:e.jsx(c,{tone:"meta",children:k(s)})}),r.set(`source:${s.sourceType}`,{id:`source:${s.sourceType}`,label:s.sourceType.replaceAll("_"," "),description:"Source type",searchText:`${s.sourceType} source`,badge:e.jsx(c,{tone:"meta",className:"capitalize",children:s.sourceType.replaceAll("_"," ")})}),r.set(`status:${s.reconciliationStatus}`,{id:`status:${s.reconciliationStatus}`,label:s.reconciliationStatus.replaceAll("_"," "),description:"Reconciliation status",searchText:`${s.reconciliationStatus} status`,badge:e.jsx(c,{tone:"meta",className:"capitalize",children:s.reconciliationStatus.replaceAll("_"," ")})});return r.set("linked:yes",{id:"linked:yes",label:"Linked",description:"Already tied to Forge or Psyche context",badge:e.jsx(c,{tone:"meta",children:"Linked"})}),r.set("linked:no",{id:"linked:no",label:"Needs links",description:"No Forge or Psyche links yet",badge:e.jsx(c,{tone:"meta",children:"Needs links"})}),r.set("habit:yes",{id:"habit:yes",label:"Habit-generated",description:"Created from a habit completion",badge:e.jsx(c,{tone:"meta",children:"Habit-generated"})}),r.set("effort:rated",{id:"effort:rated",label:"Effort rated",description:"Already has a subjective effort score",badge:e.jsx(c,{tone:"meta",children:"Effort rated"})}),Array.from(r.values())}function At(t,r){return r.every(s=>s.startsWith("workout:")?t.workoutType===s.slice(8):s.startsWith("source:")?t.sourceType===s.slice(7):s.startsWith("status:")?t.reconciliationStatus===s.slice(7):s==="linked:yes"?t.links.length>0:s==="linked:no"?t.links.length===0:s==="habit:yes"?!!t.generatedFromHabitId:s==="effort:rated"?t.subjectiveEffort!==null:!0)}function te(t,r,s){if(!t||t.length===0)return null;const l=[...t].filter(o=>o.dateKey<=r&&o[s]!=null).sort((o,h)=>h.dateKey.localeCompare(o.dateKey))[0];return(l==null?void 0:l[s])??null}function Ct(t){return[t.workoutType,t.workoutTypeLabel,t.activityFamily,t.activityFamilyLabel].filter(Boolean).join(" ").toLowerCase().includes("kickboxing")}function Tt(t){const r=new Map;for(const s of t){const l=`type:${s.workoutType}`;r.set(l,{id:l,label:k(s),description:_(s),searchText:`${k(s)} ${_(s)} ${s.workoutType}`,badge:e.jsx(c,{tone:"meta",children:k(s)})})}return[...r.values()].sort((s,l)=>s.label.localeCompare(l.label))}function Mt(t,r,s,l,o){const h=r.filter(u=>u.startsWith("type:")).map(u=>u.slice(5)),f=new Set(h),j=ae(new Date().toISOString()),b=new Date(`${j}T12:00:00.000Z`);b.setUTCDate(b.getUTCDate()-90);const n=b.toISOString().slice(0,10);return t.filter(u=>{if(f.size>0&&!f.has(u.workoutType))return!1;const x=ae(u.startedAt);return s==="recent_90"?x>=n:!(s==="custom"&&(l&&x<l||o&&x>o))}).sort((u,x)=>Date.parse(u.startedAt)-Date.parse(x.startedAt))}function oe(t){var s;const r=Object.fromEntries(V.map(l=>[l,0]));for(const l of t)for(const o of((s=l.analytics)==null?void 0:s.zoneDurations)??[])V.includes(o.key)&&(r[o.key]+=o.seconds);return r}function Ne(t){const r=Object.values(t).reduce((s,l)=>s+l,0);return Object.fromEntries(V.map(s=>[s,r>0?Number((t[s]/r*100).toFixed(1)):0]))}function Rt(t,r,s){const l=typeof(s==null?void 0:s.dataKey)=="string"?s.dataKey:typeof r=="string"?r:"",o=typeof t=="number"?Number(t.toFixed(1)):String(t??"n/a");return l==="restingHeartRate"||r==="Resting HR"?[`${o} bpm`,"Resting HR"]:l==="vo2Max"||r==="VO2max"?[`${o} ml/kg/min`,"VO2max"]:[`${o}%`,z(l)]}function Et(t,r){const s=t.map((n,u)=>{var y,M,D;const x=ae(n.startedAt),w=t.slice(Math.max(0,u-2),u+1),N=oe(w),T=Ne(N);return{id:n.id,dateKey:x,date:x.slice(5),session:k(n),durationMinutes:Math.round(n.durationSeconds/60),confidence:((y=n.analytics)==null?void 0:y.confidence)??"unavailable",restingHeartRate:((D=(M=n.analytics)==null?void 0:M.hrSummary)==null?void 0:D.restingHr)??te(r,x,"restingHeartRate"),vo2Max:te(r,x,"vo2Max"),...T}}),l=t.map((n,u)=>{var T,y,M;const x=ae(n.startedAt),w=oe(t.slice(0,u+1)),N=Ne(w);return{id:n.id,dateKey:x,date:x.slice(5),session:k(n),durationMinutes:Math.round(n.durationSeconds/60),confidence:((T=n.analytics)==null?void 0:T.confidence)??"unavailable",restingHeartRate:((M=(y=n.analytics)==null?void 0:y.hrSummary)==null?void 0:M.restingHr)??te(r,x,"restingHeartRate"),vo2Max:te(r,x,"vo2Max"),...N}}),o=oe(t),h=Object.values(o).reduce((n,u)=>n+u,0),f=V.map(n=>{var x;const u=((x=t.flatMap(w=>{var N;return((N=w.analytics)==null?void 0:N.zoneDurations)??[]}).find(w=>w.key===n))==null?void 0:x.label)??z(n);return{key:n,zone:u,percentage:h>0?Number((o[n]/h*100).toFixed(1)):0,fill:G[n]??"#f8fafc"}}),j=t.filter(n=>{var u,x;return(((x=(u=n.analytics)==null?void 0:u.dataQuality)==null?void 0:x.heartRateSampleCount)??0)>0}).length,b=[...new Set(t.map(n=>k(n)))];return{sessions:t,lineData:s,expandingLineData:l,averageZoneData:f,rawHrCount:j,exerciseLabels:b}}function zt({session:t,draft:r,linkOptions:s,pending:l,step:o,onStepChange:h,onDraftChange:f,onSave:j}){var n,u,x,w,N,T,y,M,D;const b=[{id:"context",title:"Session context",description:"Quick facts, effort, and how this session happened."},{id:"reflection",title:"Reflection",description:"Mood, meaning, and what the session actually did for you."},{id:"links",title:"Links",description:"Tie the session back to Forge and Psyche context."}];return e.jsxs("div",{className:"grid gap-5",children:[e.jsx("div",{className:"rounded-[24px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 text-lg text-[var(--ui-ink-strong)]",children:[e.jsx(we,{className:"size-4 text-[var(--primary)]"}),e.jsx("span",{children:k(t)})]}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:Y(t.startedAt,t.endedAt)})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(c,{children:B(t.durationSeconds)}),t.totalEnergyKcal?e.jsxs(c,{tone:"meta",children:[Math.round(t.totalEnergyKcal)," kcal"]}):null,t.distanceMeters?e.jsx(c,{tone:"meta",children:de(t.distanceMeters)}):null,e.jsx(c,{tone:"meta",children:_(t)}),e.jsx(c,{tone:"meta",className:"capitalize",children:t.reconciliationStatus.replaceAll("_"," ")})]})]})}),e.jsx("div",{className:"grid gap-2 sm:grid-cols-3",children:b.map((i,L)=>e.jsxs("button",{type:"button",onClick:()=>h(L),className:`rounded-[20px] border px-4 py-3 text-left transition ${o===L?"border-[var(--primary)] bg-[var(--primary)]/10 text-[var(--ui-ink-strong)]":"border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] text-[var(--ui-ink-soft)] hover:bg-[var(--ui-surface-2)] hover:text-[var(--ui-ink-strong)]"}`,children:[e.jsxs("div",{className:"text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:["Step ",L+1]}),e.jsx("div",{className:"mt-2 text-sm font-medium",children:i.title})]},i.id))}),e.jsxs("div",{className:"rounded-[24px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:b[o].title}),e.jsx("div",{className:"mt-2 text-sm leading-6 text-[var(--ui-ink-soft)]",children:b[o].description}),o===0?e.jsxs("div",{className:"mt-4 grid gap-4",children:[e.jsxs("div",{className:"grid gap-3 md:grid-cols-3",children:[e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Activity family"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)] capitalize",children:_(t)})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Source system"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:Ce(t)})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Source device"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:t.sourceDevice||"n/a"})]})]}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-3",children:[e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Steps"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:t.stepCount??"n/a"})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Avg HR"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:t.averageHeartRate?Math.round(t.averageHeartRate):"n/a"})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Max HR"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:t.maxHeartRate?Math.round(t.maxHeartRate):"n/a"})]})]}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-3",children:[e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Effort"}),e.jsx(H,{type:"number",min:1,max:10,value:r.subjectiveEffort,onChange:i=>f({subjectiveEffort:i.target.value})})]}),e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Planned vs spontaneous"}),e.jsx(H,{value:r.plannedContext,onChange:i=>f({plannedContext:i.target.value}),placeholder:"Planned recovery block"})]}),e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Social context"}),e.jsx(H,{value:r.socialContext,onChange:i=>f({socialContext:i.target.value}),placeholder:"Solo, coach, group class, partner"})]})]}),e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Tags"}),e.jsx(H,{value:r.tagsText,onChange:i=>f({tagsText:i.target.value}),placeholder:"recovery, interval-block, stress-release"})]})]}):null,o===1?e.jsxs("div",{className:"mt-4 grid gap-4",children:[e.jsxs("div",{className:"grid gap-3 md:grid-cols-2",children:[e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Mood before"}),e.jsx(H,{value:r.moodBefore,onChange:i=>f({moodBefore:i.target.value})})]}),e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Mood after"}),e.jsx(H,{value:r.moodAfter,onChange:i=>f({moodAfter:i.target.value})})]})]}),e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Meaning, impact, and why this session mattered"}),e.jsx(at,{className:"min-h-[160px]",value:r.meaningText,onChange:i=>f({meaningText:i.target.value}),placeholder:"This session was planned as active recovery after a heavy work block and helped reset stress before sleep."})]})]}):null,o===2?e.jsxs("div",{className:"mt-4 grid gap-3",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Search goals, projects, habits, values, beliefs, patterns, or reports and attach the ones that explain this session."}),e.jsx(Ye,{options:s,selectedValues:r.linkValues,onChange:i=>f({linkValues:i}),placeholder:"Search Forge and Psyche records…"})]}):null,e.jsxs("div",{className:"mt-5 grid gap-4 border-t border-[var(--ui-border-subtle)] pt-5",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Captured data"}),e.jsx("div",{className:"mt-2 text-sm leading-6 text-[var(--ui-ink-soft)]",children:"Source-native workout metrics, events, and phases exposed through the adapter layer."})]}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-2 xl:grid-cols-3",children:[(((n=t.details)==null?void 0:n.metrics)??[]).slice(0,12).map(i=>e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:i.label}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:Nt(i)}),e.jsxs("div",{className:"mt-1 text-xs uppercase tracking-[0.14em] text-[var(--ui-ink-faint)]",children:[z(i.category)," ·"," ",z(i.statistic)]})]},`${i.category}:${i.key}:${i.statistic}`)),(((x=(u=t.details)==null?void 0:u.metrics)==null?void 0:x.length)??0)===0?e.jsx("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4 text-sm text-[var(--ui-ink-faint)]",children:"No provider metrics were captured for this session yet."}):null]}),(((N=(w=t.details)==null?void 0:w.events)==null?void 0:N.length)??0)>0?e.jsxs("div",{className:"grid gap-3",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Workout events"}),e.jsx("div",{className:"grid gap-2",children:(T=t.details)==null?void 0:T.events.map(i=>e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] px-4 py-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx("div",{className:"text-[var(--ui-ink-strong)]",children:i.label}),e.jsx(c,{tone:"meta",children:B(i.durationSeconds)})]}),e.jsx("div",{className:"mt-1 text-sm text-[var(--ui-ink-soft)]",children:Y(i.startedAt,i.endedAt??i.startedAt)})]},`${i.type}:${i.startedAt}`))})]}):null,(((M=(y=t.details)==null?void 0:y.components)==null?void 0:M.length)??0)>0?e.jsxs("div",{className:"grid gap-3",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Workout phases"}),e.jsx("div",{className:"grid gap-2",children:(D=t.details)==null?void 0:D.components.map(i=>e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] px-4 py-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx("div",{className:"text-[var(--ui-ink-strong)]",children:i.activity.canonicalLabel}),e.jsx(c,{tone:"meta",children:B(i.durationSeconds)})]}),e.jsx("div",{className:"mt-1 text-sm text-[var(--ui-ink-soft)]",children:Y(i.startedAt,i.endedAt??i.startedAt)})]},i.externalUid))})]}):null]})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-faint)]",children:o<b.length-1?"Move through the session one step at a time, then save when the context is clean.":"Everything is in place. Save the session metadata back into Forge."}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(ie,{type:"button",variant:"secondary",onClick:()=>h(Math.max(0,o-1)),disabled:o===0,children:"Back"}),o<b.length-1?e.jsxs(ie,{type:"button",onClick:()=>h(o+1),children:["Next",e.jsx(Se,{className:"size-4"})]}):null,e.jsxs(ie,{type:"button",pending:l,pendingLabel:"Saving",onClick:j,children:[e.jsx(Ze,{className:"size-4"}),"Save session"]})]})]})]})}function Yt(){var fe,be;const t=Xe(),r=Ue(),s=Array.isArray(t.selectedUserIds)?t.selectedUserIds:[],[l,o]=p.useState({}),[h,f]=p.useState(""),[j,b]=p.useState([]),[n,u]=p.useState([]),[x,w]=p.useState(""),[N,T]=p.useState("all"),[y,M]=p.useState("rolling_stack"),[D,i]=p.useState(""),[L,Te]=p.useState(""),[ce,Me]=p.useState(!1),[ue,se]=p.useState(null),[Re,X]=p.useState(0),S=W({queryKey:["forge-fitness",...s],queryFn:async()=>(await rt(s)).fitness}),Ee=W({queryKey:["forge-health-values",...s],queryFn:async()=>(await it(s)).values}),ze=W({queryKey:["forge-health-patterns",...s],queryFn:async()=>(await nt(s)).patterns}),De=W({queryKey:["forge-health-behaviors",...s],queryFn:async()=>(await lt(s)).behaviors}),Fe=W({queryKey:["forge-health-beliefs",...s],queryFn:async()=>(await ot(s)).beliefs}),He=W({queryKey:["forge-health-reports",...s],queryFn:async()=>(await dt(s)).reports});p.useEffect(()=>{S.data&&o(Object.fromEntries(S.data.sessions.map(a=>[a.id,U(a)])))},[S.data]),p.useEffect(()=>{if(ce||!S.data)return;const d=(S.data.analysisSessions??S.data.sessions).find(Ct);d&&u([`type:${d.workoutType}`]),Me(!0)},[ce,S.data]);const re=Ge({mutationFn:async a=>st(a.workoutId,{subjectiveEffort:a.subjectiveEffort.trim().length>0?Number(a.subjectiveEffort):null,moodBefore:a.moodBefore,moodAfter:a.moodAfter,meaningText:a.meaningText,plannedContext:a.plannedContext,socialContext:a.socialContext,tags:a.tagsText.split(",").map(d=>d.trim()).filter(Boolean),links:ht(a.linkValues)}),onSuccess:async()=>{await r.invalidateQueries({queryKey:["forge-fitness"]})}}),F=S.data,A=(F==null?void 0:F.sessions)??[],O=(F==null?void 0:F.analysisSessions)??A,Le=pt({goals:t.snapshot.dashboard.goals,projects:t.snapshot.dashboard.projects,tasks:t.snapshot.dashboard.tasks,habits:t.snapshot.dashboard.habits,values:Ee.data??[],patterns:ze.data??[],behaviors:De.data??[],beliefs:Fe.data??[],reports:He.data??[]}),$e=p.useMemo(()=>St(A),[A]),_e=p.useMemo(()=>Tt(O),[O]),I=p.useMemo(()=>{const a=Ae(h);return[...A].sort((d,m)=>new Date(m.startedAt).getTime()-new Date(d.startedAt).getTime()).filter(d=>{const m=l[d.id]??U(d);return(a.length===0||wt(d,m).includes(a))&&At(d,j)})},[l,h,j,A]),xe=p.useMemo(()=>Mt(O,n,N,D,L),[N,L,O,D,n]),me=I.length===A.length&&h.trim().length===0&&j.length===0?`${A.length} workout sessions visible`:`${I.length} of ${A.length} workout sessions visible`,R=I.find(a=>a.id===ue)??A.find(a=>a.id===ue)??null,pe=R?l[R.id]??U(R):null;if(S.isLoading)return e.jsx(Je,{eyebrow:"Sports",title:"Loading sports view",description:"Reading synced workouts and local reflection metadata.",columns:2,blocks:6});if(S.isError||!F)return e.jsx(et,{eyebrow:"Sports",error:S.error??new Error("Sports data unavailable"),onRetry:()=>void S.refetch()});const{summary:v,weeklyTrend:he,typeBreakdown:Oe}=F,ve=v.zoneMix??[],C=Et(xe,F.vitalsTrend),ge=n.length===0?"All exercise types":C.exerciseLabels.length>0?C.exerciseLabels.join(", "):`${n.length} selected types`,We=ve.map(a=>({zone:a.label,minutes:Math.round(a.seconds/60),percentage:Math.round(a.percentage*100),fill:G[a.key]??"#f8fafc"})),Ke=he.map(a=>{const d=Object.fromEntries((a.zoneDurations??[]).map(m=>[m.key,Math.round(m.seconds/60)]));return{date:a.dateKey.slice(5),duration:a.durationMinutes,load:a.trainingLoad??0,coverage:Math.round((a.heartRateCoverage??0)*100),...d}}),Be=O.map(a=>{var d,m,E,$;return{duration:Math.round(a.durationSeconds/60),intensity:Math.round((((m=(d=a.analytics)==null?void 0:d.load)==null?void 0:m.intensity)??0)*100),load:(($=(E=a.analytics)==null?void 0:E.load)==null?void 0:$.trimp)??0,type:k(a),name:k(a)}});function Ve(a,d){o(m=>{const E=m[a]??U(A.find($=>$.id===a));return{...m,[a]:{...E,...d}}})}async function Ie(a){const d=A.find(E=>E.id===a);if(!d)return;const m=l[a]??U(d);await re.mutateAsync({workoutId:a,subjectiveEffort:m.subjectiveEffort,moodBefore:m.moodBefore,moodAfter:m.moodAfter,meaningText:m.meaningText,plannedContext:m.plannedContext,socialContext:m.socialContext,tagsText:m.tagsText,linkValues:m.linkValues}),se(null),X(0)}return e.jsxs("div",{className:"grid gap-5",children:[e.jsx(ct,{entityKind:"project",title:"Sports",description:"A session-first training surface for workout data, subjective meaning, and links back into Forge execution and Psyche.",badge:`${A.length} sessions`}),e.jsx(ut,{children:e.jsxs("section",{className:"grid gap-4 lg:grid-cols-4",children:[e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Weekly volume"}),e.jsx("div",{className:"mt-3 font-display text-4xl text-[var(--primary)]",children:B(v.weeklyVolumeSeconds)}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Total training time in the recent week."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Exercise minutes"}),e.jsx("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:v.exerciseMinutes}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Aggregate exercise minutes from synced sessions."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Energy burned"}),e.jsx("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:v.energyBurnedKcal}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Recent weekly kcal."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Training streak"}),e.jsx("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:v.streakDays}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Distinct workout days in the recent week."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Average session"}),e.jsxs("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:[v.averageSessionMinutes,"m"]}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Mean duration across recent sessions."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Training load"}),e.jsx("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:v.totalTrainingLoad??"n/a"}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Forge TRIMP across recent sessions."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Linked sessions"}),e.jsx("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:v.linkedSessionCount}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Sessions already tied to Forge or Psyche entities."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"HR coverage"}),e.jsxs("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:[Math.round((v.averageHeartRateCoverage??0)*100),"%"]}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Average raw HR sample coverage."})]})]})}),e.jsx(J,{children:e.jsxs("section",{className:"grid gap-4 xl:grid-cols-[minmax(0,1.1fr)_minmax(320px,0.9fr)]",children:[e.jsxs(g,{className:"min-h-[320px]",children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Load and volume trend"}),e.jsx(Z,{className:"mt-4 h-[260px]",children:e.jsx(P,{width:"100%",height:"100%",minWidth:1,minHeight:1,children:e.jsxs(vt,{data:Ke,children:[e.jsx("defs",{children:e.jsxs("linearGradient",{id:"sportsLoad",x1:"0",y1:"0",x2:"0",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"#f97316",stopOpacity:.36}),e.jsx("stop",{offset:"100%",stopColor:"#f97316",stopOpacity:.04})]})}),e.jsx(ee,{stroke:"var(--ui-border-subtle)",vertical:!1}),e.jsx(q,{dataKey:"date",tick:{fill:"var(--ui-ink-faint)",fontSize:11}}),e.jsx(K,{tick:{fill:"var(--ui-ink-faint)",fontSize:11},width:34}),e.jsx(Q,{contentStyle:{background:"var(--ui-surface-popover)",border:"1px solid var(--ui-border-strong)",borderRadius:8,color:"var(--ui-ink-strong)"}}),e.jsx(ke,{type:"monotone",dataKey:"load",stroke:"#f97316",fill:"url(#sportsLoad)",strokeWidth:2}),e.jsx(ke,{type:"monotone",dataKey:"duration",stroke:"#38bdf8",fill:"var(--ui-info-soft)",strokeWidth:2})]})})})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Zone distribution"}),e.jsx("div",{className:"mt-4 grid gap-3",children:ve.map(a=>e.jsxs("div",{className:"grid gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 text-sm",children:[e.jsx("span",{className:"text-[var(--ui-ink)]",children:a.label}),e.jsxs("span",{className:"text-[var(--ui-ink-strong)]",children:[Math.round(a.percentage*100),"% ·"," ",B(a.seconds)]})]}),e.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-[var(--ui-surface-3)]",children:e.jsx("div",{className:"h-full rounded-full",style:{width:`${Math.max(1,a.percentage*100)}%`,background:G[a.key]??"#f8fafc"}})})]},a.key))}),e.jsx(Z,{className:"mt-5 h-[180px]",children:e.jsx(P,{width:"100%",height:"100%",minWidth:1,minHeight:1,children:e.jsxs(ye,{data:We,children:[e.jsx(q,{dataKey:"zone",tick:{fill:"var(--ui-ink-faint)",fontSize:10}}),e.jsx(K,{tick:{fill:"var(--ui-ink-faint)",fontSize:10},width:34}),e.jsx(Q,{contentStyle:{background:"var(--ui-surface-popover)",border:"1px solid var(--ui-border-strong)",borderRadius:8,color:"var(--ui-ink-strong)"}}),e.jsx(ne,{dataKey:"minutes",fill:"#f97316",radius:[4,4,0,0]})]})})})]})]})}),e.jsx(J,{children:e.jsxs("section",{className:"grid gap-4",children:[e.jsxs(g,{className:"grid gap-4 overflow-hidden",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"HR zone analysis"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:"Filter all-time workout evidence by exercise type and date."})]}),e.jsxs(c,{tone:"meta",children:[xe.length," of ",O.length," ","sessions"]})]}),e.jsxs("div",{className:"grid gap-4 xl:grid-cols-[minmax(0,1fr)_minmax(280px,0.8fr)]",children:[e.jsx(je,{title:"Exercise types",description:"Select one, many, or none for all exercise types.",query:x,onQueryChange:w,options:_e,selectedOptionIds:n,onSelectedOptionIdsChange:u,resultSummary:ge,placeholder:"Search exercise types",emptyStateMessage:"No exercise type matches."}),e.jsxs("div",{className:"grid gap-3 rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Date range"}),e.jsx("div",{className:"grid grid-cols-3 gap-2",children:[["all","All time"],["recent_90","90 days"],["custom","Custom"]].map(([a,d])=>e.jsx("button",{type:"button",className:`rounded-[8px] border px-3 py-2 text-sm transition ${N===a?"border-[var(--primary)] bg-[var(--primary)]/12 text-[var(--ui-ink-strong)]":"border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] text-[var(--ui-ink-soft)] hover:bg-[var(--ui-surface-2)] hover:text-[var(--ui-ink-strong)]"}`,onClick:()=>T(a),children:d},a))}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Start"}),e.jsx(H,{type:"date",value:D,onChange:a=>{i(a.target.value),T("custom")}})]}),e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"End"}),e.jsx(H,{type:"date",value:L,onChange:a=>{Te(a.target.value),T("custom")}})]})]})]})]})]}),e.jsxs("div",{className:"grid gap-4 xl:grid-cols-[minmax(0,0.85fr)_minmax(0,1.15fr)]",children:[e.jsxs(g,{className:"min-h-[330px] overflow-hidden",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Average zones"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:"Duration-weighted proportion of time in each HR zone."})]}),e.jsx(c,{tone:"meta",children:ge})]}),e.jsx(Z,{className:"mt-4 h-[235px]",children:C.sessions.length>0?e.jsx(P,{width:"100%",height:"100%",minWidth:1,minHeight:1,children:e.jsxs(ye,{data:C.averageZoneData,children:[e.jsx(ee,{stroke:"var(--ui-border-subtle)",vertical:!1}),e.jsx(q,{dataKey:"zone",interval:0,tick:{fill:"var(--ui-ink-faint)",fontSize:10}}),e.jsx(K,{unit:"%",domain:[0,100],ticks:[0,25,50,75,100],tick:{fill:"var(--ui-ink-faint)",fontSize:10},width:38}),e.jsx(Q,{formatter:a=>[`${a}%`,"Average time"],contentStyle:{background:"var(--ui-surface-popover)",border:"1px solid var(--ui-border-strong)",borderRadius:8,color:"var(--ui-ink-strong)"}}),e.jsx(ne,{dataKey:"percentage",radius:[4,4,0,0],children:C.averageZoneData.map(a=>e.jsx(gt,{fill:a.fill},a.key))})]})}):e.jsx("div",{className:"grid h-full place-items-center rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-6 text-center text-sm leading-6 text-[var(--ui-ink-soft)]",children:"No selected sessions with zone analytics are available yet."})}),C.sessions.length>0?e.jsxs("div",{className:"mt-3 grid gap-2 text-sm text-[var(--ui-ink-soft)] sm:grid-cols-3",children:[e.jsxs("div",{children:[C.rawHrCount," sessions have raw HR timelines"]}),e.jsxs("div",{children:["Latest: ",((fe=C.lineData.at(-1))==null?void 0:fe.dateKey)??"n/a"]}),e.jsxs("div",{children:["VO2max points:"," ",C.lineData.filter(a=>a.vo2Max!=null).length]})]}):null]}),e.jsxs(g,{className:"min-h-[330px] overflow-hidden",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:y==="expanding_lines"?"Expanding zone lines":"Zone drift"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:y==="expanding_lines"?"Expanding all-session average with resting HR and VO2max overlay.":"Rolling duration-weighted zone mix with resting HR and VO2max overlay."})]}),e.jsxs("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:items-end",children:[e.jsx("div",{className:"grid grid-cols-2 gap-1 rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-1","aria-label":"Zone chart display",children:[["rolling_stack","Stacked"],["expanding_lines","Lines"]].map(([a,d])=>e.jsx("button",{type:"button",className:`min-h-9 rounded-[6px] px-3 py-1.5 text-xs font-medium transition ${y===a?"bg-[var(--primary)]/18 text-[var(--ui-ink-strong)]":"text-[var(--ui-ink-soft)] hover:bg-[var(--ui-surface-2)] hover:text-[var(--ui-ink-strong)]"}`,onClick:()=>M(a),children:d},a))}),e.jsx(c,{tone:"meta",children:"HRR zones"})]})]}),e.jsx(Z,{className:"mt-4 h-[255px]",children:C.lineData.length>0?e.jsx(P,{width:"100%",height:"100%",minWidth:1,minHeight:1,children:e.jsxs(ft,{data:y==="expanding_lines"?C.expandingLineData:C.lineData,children:[e.jsx(ee,{stroke:"var(--ui-border-subtle)",vertical:!1}),e.jsx(q,{dataKey:"date",tick:{fill:"var(--ui-ink-faint)",fontSize:10}}),e.jsx(K,{yAxisId:"zones",domain:[0,100],ticks:[0,25,50,75,100],unit:"%",tick:{fill:"var(--ui-ink-faint)",fontSize:10},width:38}),e.jsx(K,{yAxisId:"vitals",orientation:"right",tick:{fill:"var(--ui-ink-faint)",fontSize:10},width:42}),e.jsx(Q,{formatter:(a,d,m)=>Rt(a,d,m),contentStyle:{background:"var(--ui-surface-popover)",border:"1px solid var(--ui-border-strong)",borderRadius:8,color:"var(--ui-ink-strong)"}}),e.jsx(bt,{wrapperStyle:{color:"var(--ui-ink)",fontSize:11}}),y==="expanding_lines"?V.map(a=>e.jsx(le,{yAxisId:"zones",type:"monotone",dataKey:a,name:z(a),stroke:G[a],strokeWidth:2,dot:{r:2.5},activeDot:{r:4},connectNulls:!0},a)):V.map(a=>e.jsx(ne,{yAxisId:"zones",dataKey:a,stackId:"zones",fill:G[a],isAnimationActive:!1},a)),e.jsx(le,{yAxisId:"vitals",type:"monotone",dataKey:"restingHeartRate",name:"Resting HR",stroke:"var(--ui-ink-soft)",strokeWidth:2,dot:{r:3},connectNulls:!0}),e.jsx(le,{yAxisId:"vitals",type:"monotone",dataKey:"vo2Max",name:"VO2max",stroke:"#a78bfa",strokeWidth:2,dot:{r:3},connectNulls:!0})]})}):e.jsx("div",{className:"grid h-full place-items-center rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-6 text-center text-sm leading-6 text-[var(--ui-ink-soft)]",children:"Select workouts with HR evidence to unlock the time-series plot."})})]})]})]})}),e.jsx(J,{children:e.jsxs("section",{className:"grid gap-4 lg:grid-cols-[minmax(0,1fr)_360px]",children:[e.jsxs(g,{className:"min-h-[300px]",children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Duration vs intensity"}),e.jsx(Z,{className:"mt-4 h-[250px]",children:e.jsx(P,{width:"100%",height:"100%",minWidth:1,minHeight:1,children:e.jsxs(jt,{data:Be,children:[e.jsx(ee,{stroke:"var(--ui-border-subtle)"}),e.jsx(q,{type:"number",dataKey:"duration",name:"minutes",tick:{fill:"var(--ui-ink-faint)",fontSize:11}}),e.jsx(K,{type:"number",dataKey:"intensity",name:"intensity",tick:{fill:"var(--ui-ink-faint)",fontSize:11},width:38}),e.jsx(Q,{cursor:{strokeDasharray:"3 3"},contentStyle:{background:"var(--ui-surface-popover)",border:"1px solid var(--ui-border-strong)",borderRadius:8,color:"var(--ui-ink-strong)"}}),e.jsx(kt,{dataKey:"load",fill:"#f97316"})]})})})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Evidence quality"}),e.jsxs("div",{className:"mt-4 grid gap-3",children:[e.jsxs("div",{className:"rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Raw HR coverage"}),e.jsxs("div",{className:"mt-2 text-2xl text-[var(--ui-ink-strong)]",children:[Math.round((v.averageHeartRateCoverage??0)*100),"%"]})]}),e.jsxs("div",{className:"rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Route-backed workouts"}),e.jsx("div",{className:"mt-2 text-2xl text-[var(--ui-ink-strong)]",children:v.routeWorkoutCount??0})]}),e.jsxs("div",{className:"rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Top sport"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:v.topWorkoutTypeLabel??v.topWorkoutType??"n/a"})]})]})]})]})}),e.jsx(J,{children:e.jsxs("section",{className:"grid gap-4 lg:grid-cols-[1.05fr_0.95fr]",children:[e.jsxs(g,{className:"grid gap-4",children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Recent volume"}),e.jsx("div",{className:"grid gap-3",children:he.map(a=>e.jsxs("div",{className:"grid gap-2 rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] px-4 py-3 md:grid-cols-[110px_150px_minmax(0,1fr)_90px]",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:a.dateKey}),e.jsx("div",{className:"text-sm text-[var(--ui-ink-strong)]",children:a.workoutTypeLabel??z(a.workoutType)}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"h-2 flex-1 overflow-hidden rounded-full bg-[var(--ui-surface-3)]",children:e.jsx("div",{className:"h-full rounded-full bg-[var(--primary)]",style:{width:`${Math.min(100,a.durationMinutes/120*100)}%`}})}),e.jsxs("div",{className:"text-sm text-[var(--ui-ink-strong)]",children:[a.durationMinutes,"m"]})]}),e.jsxs("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:[a.energyKcal," kcal"]})]},a.id))}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-3",children:[e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Distance"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:de(v.distanceMeters)})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Planned sessions"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:v.plannedSessionCount})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Imported / merged"}),e.jsxs("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:[v.importedSessionCount," /"," ",v.reconciledSessionCount]})]})]})]}),e.jsxs(g,{className:"grid gap-4",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Training composition"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:"Workout type and provenance mix"})]}),e.jsx("div",{className:"grid gap-3",children:Oe.slice(0,6).map(a=>e.jsxs("div",{className:"grid gap-2 rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] px-4 py-3 md:grid-cols-[minmax(0,1fr)_90px_90px]",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[var(--ui-ink-strong)]",children:a.workoutTypeLabel??z(a.workoutType)}),e.jsxs("div",{className:"mt-1 text-sm text-[var(--ui-ink-soft)]",children:[a.sessionCount," sessions ·"," ",a.activityFamilyLabel??"Other"]})]}),e.jsxs("div",{className:"text-sm text-[var(--ui-ink)]",children:[a.totalMinutes,"m"]}),e.jsxs("div",{className:"text-sm text-[var(--ui-ink)]",children:[a.energyKcal," kcal"]})]},a.workoutType))}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-2",children:[e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Habit-generated"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:v.habitGeneratedSessionCount})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Forge-linked"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:v.linkedSessionCount})]})]})]})]})}),e.jsx(xt,{children:e.jsxs("section",{className:"grid gap-4 xl:grid-cols-[minmax(0,25rem)_minmax(0,1fr)]",children:[e.jsx(je,{title:"Session browser",description:"Search past activities by workout type, source, reconciliation state, or whether they still need context.",query:h,onQueryChange:f,options:$e,selectedOptionIds:j,onSelectedOptionIdsChange:b,resultSummary:me,placeholder:"Search workouts, devices, notes, moods, or filter chips",emptyStateMessage:"Keep typing or pick a filter chip to narrow the activity history."}),e.jsxs(g,{className:"grid gap-4",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Activity history"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:"Open a workout to add reflection and links in a guided modal."})]}),e.jsx(c,{tone:"meta",children:me})]}),e.jsx("div",{className:"max-h-[34rem] overflow-y-auto rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-3",children:I.length===0?e.jsx("div",{className:"flex min-h-[18rem] items-center justify-center p-6 text-center text-sm leading-6 text-[var(--ui-ink-faint)]",children:"No workout matches the current search yet. Clear some filters or search by workout type, device, or reflection text."}):e.jsx("div",{className:"grid gap-3",children:I.map(a=>{var m,E,$;const d=a.meaningText.trim().length>0||a.moodBefore.trim().length>0||a.moodAfter.trim().length>0||a.tags.length>0||a.links.length>0;return e.jsxs("div",{className:"grid w-full min-w-0 gap-3 rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] px-4 py-3 text-left transition hover:bg-[var(--ui-surface-2)]",children:[e.jsxs("div",{className:"grid min-w-0 gap-3 sm:flex sm:items-start sm:justify-between",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs(Pe,{to:`/sports/workouts/${a.id}`,className:"flex min-w-0 items-center gap-2 text-[var(--ui-ink-strong)] transition hover:text-[var(--primary)]",children:[e.jsx(we,{className:"size-4 shrink-0 text-[var(--primary)]"}),e.jsx("span",{className:"truncate text-base font-medium",children:k(a)})]}),e.jsxs("div",{className:"mt-2 flex min-w-0 items-center gap-2 text-sm text-[var(--ui-ink-soft)]",children:[e.jsx(qe,{className:"size-3.5 shrink-0"}),e.jsx("span",{className:"min-w-0 truncate",children:Y(a.startedAt,a.endedAt)})]}),e.jsxs("div",{className:"mt-2 text-sm text-[var(--ui-ink-faint)]",children:[_(a)," ·"," ",a.sourceDevice]})]}),e.jsxs("button",{type:"button","aria-label":`Edit ${k(a)} reflection`,className:"inline-flex w-fit max-w-full items-center gap-2 rounded-full bg-[var(--ui-surface-2)] px-3 py-1.5 text-xs text-[var(--ui-ink)] transition hover:bg-[var(--ui-surface-3)] hover:text-[var(--ui-ink-strong)]",onClick:()=>{se(a.id),X(0)},children:[e.jsx("span",{className:"truncate",children:d?"Reflected":"Needs reflection"}),e.jsx(Se,{className:"size-3.5 shrink-0"})]})]}),e.jsxs("div",{className:"flex min-w-0 flex-wrap gap-2",children:[e.jsx(c,{children:B(a.durationSeconds)}),a.totalEnergyKcal?e.jsxs(c,{tone:"meta",children:[Math.round(a.totalEnergyKcal)," kcal"]}):null,a.distanceMeters?e.jsx(c,{tone:"meta",children:de(a.distanceMeters)}):null,a.averageHeartRate?e.jsxs(c,{tone:"meta",children:[e.jsx(Qe,{className:"mr-1 size-3.5"}),Math.round(a.averageHeartRate)," bpm"]}):null,e.jsx(c,{tone:"meta",children:_(a)}),e.jsx(c,{tone:"meta",className:"capitalize",children:a.sourceType.replaceAll("_"," ")}),e.jsx(c,{tone:"meta",className:"capitalize",children:a.reconciliationStatus.replaceAll("_"," ")}),(m=a.analytics)!=null&&m.confidence?e.jsxs(c,{tone:"meta",children:[a.analytics.confidence," zones"]}):null,($=(E=a.analytics)==null?void 0:E.routeSummary)!=null&&$.hasRoute?e.jsx(c,{tone:"meta",children:"Route"}):null]})]},a.id)})})})]})]})}),R&&pe?e.jsx(tt,{open:!!R,onOpenChange:a=>{a||(se(null),X(0))},eyebrow:"Sports session",title:k(R),description:"Add contextual meaning without crowding the main training surface.",children:e.jsx(zt,{session:R,draft:pe,linkOptions:Le,pending:re.isPending&&((be=re.variables)==null?void 0:be.workoutId)===R.id,step:Re,onStepChange:X,onDraftChange:a=>Ve(R.id,a),onSave:()=>void Ie(R.id)})}):null]})}export{Yt as SportsPage,Rt as formatZoneTrendTooltipValue};
1
+ import{r as p,j as e,aC as Pe,br as we,aV as qe,bX as Se,bt as Qe,cq as Ze}from"./vendor-B7FKSwHK.js";import{j as Ue,i as K,k as Ge}from"./state-BFyKSULP.js";import{E as Xe}from"./entity-link-multiselect-BfDAROHB.js";import{F as je}from"./faceted-token-search-DV7MSVYb.js";import{d as Ye,S as Je,e as et,C as g,j as c,I as H,aJ as tt,T as at,B as ie,ea as st,bn as rt,bc as it,bd as nt,be as lt,bf as ot,bi as dt}from"./index-gmPaoLN-.js";import{P as ct}from"./page-hero-U603l9rQ.js";import{c as ut,d as J,e as xt}from"./health-boxes-BphMeSJj.js";import{f as mt}from"./date-keys-BnZV4PNO.js";import{b as pt,p as ht}from"./health-link-options-Cpx8w7uM.js";import{R as P,A as vt,C as ee,X as q,Y as W,T as Q,a as ye,e as ke,B as ne,f as gt,d as ft,g as bt,c as le,S as jt,h as yt}from"./charts-C5S0-BL7.js";import"./use-anchored-overlay-position-BSxFX6Hi.js";import"./motion-BibSzp57.js";import"./ui-uo_bNP7c.js";import"./board-DprRipIG.js";import"./forms-ByKjodjN.js";import"./generic-node-view-BY5dbPXJ.js";import"./graph-CHVj0Z7n.js";import"./define-workbench-box-BEEdtBkQ.js";function Z({className:t,children:r}){const s=p.useRef(null),[l,o]=p.useState(!1);return p.useEffect(()=>{const h=()=>{const b=s.current;o(!!(b&&b.clientWidth>0&&b.clientHeight>0))},f=window.requestAnimationFrame(h),j=typeof ResizeObserver>"u"?null:new ResizeObserver(h);return s.current&&j&&j.observe(s.current),window.addEventListener("resize",h),()=>{window.cancelAnimationFrame(f),j==null||j.disconnect(),window.removeEventListener("resize",h)}},[]),e.jsx("div",{ref:s,className:t,children:l?r:null})}const G={below_z1:"#94a3b8",zone_1:"#38bdf8",zone_2:"#22c55e",zone_3:"#eab308",zone_4:"#f97316",zone_5:"#ef4444"},V=["below_z1","zone_1","zone_2","zone_3","zone_4","zone_5"];function z(t){return t?t.replace(/^activity_/i,"").replaceAll("_"," ").replace(/\s+/g," ").replace(/\b\w/g,r=>r.toUpperCase()):"Unknown"}function B(t){return`${Math.round(t/60)}m`}function de(t){return t?`${(t/1e3).toFixed(1)} km`:"n/a"}function X(t,r){const s=new Intl.DateTimeFormat(void 0,{weekday:"short",day:"numeric",month:"short"}),l=new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit"});return`${s.format(new Date(t))} · ${l.format(new Date(t))} - ${l.format(new Date(r))}`}function ae(t){return mt(new Date(t))}function U(t){return{subjectiveEffort:t.subjectiveEffort!==null?String(t.subjectiveEffort):"",moodBefore:t.moodBefore??"",moodAfter:t.moodAfter??"",meaningText:t.meaningText??"",plannedContext:t.plannedContext??"",socialContext:t.socialContext??"",tagsText:Array.isArray(t.tags)?t.tags.join(", "):"",linkValues:Array.isArray(t.links)?t.links.map(r=>`${r.entityType}:${r.entityId}`):[]}}function Ae(t){return t.trim().toLowerCase()}function y(t){var r;return((r=t.workoutTypeLabel)==null?void 0:r.trim())||z(t.workoutType)}function _(t){var r;return((r=t.activityFamilyLabel)==null?void 0:r.trim())||z(t.activityFamily)}function Ce(t){return z(t.sourceSystem??t.source)}function kt(t){return t==null?"n/a":typeof t=="boolean"?t?"Yes":"No":typeof t=="number"?Number.isInteger(t)?String(t):t.toFixed(1):t}function Nt(t){const r=kt(t.value);return!t.unit||t.unit==="count"?r:`${r} ${t.unit}`}function wt(t,r){return Ae([t.workoutType,y(t),t.activityFamily,_(t),t.sourceSystem,Ce(t),t.sourceType,t.sourceDevice,t.reconciliationStatus,t.moodBefore,t.moodAfter,t.meaningText,t.plannedContext,t.socialContext,t.tags.join(" "),r.moodBefore,r.moodAfter,r.meaningText,r.plannedContext,r.socialContext,r.tagsText,X(t.startedAt,t.endedAt)].join(" "))}function St(t){const r=new Map;for(const s of t)r.set(`workout:${s.workoutType}`,{id:`workout:${s.workoutType}`,label:y(s),description:"Workout type",searchText:`${y(s)} workout`,badge:e.jsx(c,{tone:"meta",children:y(s)})}),r.set(`source:${s.sourceType}`,{id:`source:${s.sourceType}`,label:s.sourceType.replaceAll("_"," "),description:"Source type",searchText:`${s.sourceType} source`,badge:e.jsx(c,{tone:"meta",className:"capitalize",children:s.sourceType.replaceAll("_"," ")})}),r.set(`status:${s.reconciliationStatus}`,{id:`status:${s.reconciliationStatus}`,label:s.reconciliationStatus.replaceAll("_"," "),description:"Reconciliation status",searchText:`${s.reconciliationStatus} status`,badge:e.jsx(c,{tone:"meta",className:"capitalize",children:s.reconciliationStatus.replaceAll("_"," ")})});return r.set("linked:yes",{id:"linked:yes",label:"Linked",description:"Already tied to Forge or Psyche context",badge:e.jsx(c,{tone:"meta",children:"Linked"})}),r.set("linked:no",{id:"linked:no",label:"Needs links",description:"No Forge or Psyche links yet",badge:e.jsx(c,{tone:"meta",children:"Needs links"})}),r.set("habit:yes",{id:"habit:yes",label:"Habit-generated",description:"Created from a habit completion",badge:e.jsx(c,{tone:"meta",children:"Habit-generated"})}),r.set("effort:rated",{id:"effort:rated",label:"Effort rated",description:"Already has a subjective effort score",badge:e.jsx(c,{tone:"meta",children:"Effort rated"})}),Array.from(r.values())}function At(t,r){return r.every(s=>s.startsWith("workout:")?t.workoutType===s.slice(8):s.startsWith("source:")?t.sourceType===s.slice(7):s.startsWith("status:")?t.reconciliationStatus===s.slice(7):s==="linked:yes"?t.links.length>0:s==="linked:no"?t.links.length===0:s==="habit:yes"?!!t.generatedFromHabitId:s==="effort:rated"?t.subjectiveEffort!==null:!0)}function te(t,r,s){if(!t||t.length===0)return null;const l=[...t].filter(o=>o.dateKey<=r&&o[s]!=null).sort((o,h)=>h.dateKey.localeCompare(o.dateKey))[0];return(l==null?void 0:l[s])??null}function Ct(t){return[t.workoutType,t.workoutTypeLabel,t.activityFamily,t.activityFamilyLabel].filter(Boolean).join(" ").toLowerCase().includes("kickboxing")}function Tt(t){const r=new Map;for(const s of t){const l=`type:${s.workoutType}`;r.set(l,{id:l,label:y(s),description:_(s),searchText:`${y(s)} ${_(s)} ${s.workoutType}`,badge:e.jsx(c,{tone:"meta",children:y(s)})})}return[...r.values()].sort((s,l)=>s.label.localeCompare(l.label))}function Mt(t,r,s,l,o){const h=r.filter(u=>u.startsWith("type:")).map(u=>u.slice(5)),f=new Set(h),j=ae(new Date().toISOString()),b=new Date(`${j}T12:00:00.000Z`);b.setUTCDate(b.getUTCDate()-90);const n=b.toISOString().slice(0,10);return t.filter(u=>{if(f.size>0&&!f.has(u.workoutType))return!1;const x=ae(u.startedAt);return s==="recent_90"?x>=n:!(s==="custom"&&(l&&x<l||o&&x>o))}).sort((u,x)=>Date.parse(u.startedAt)-Date.parse(x.startedAt))}function oe(t){var s;const r=Object.fromEntries(V.map(l=>[l,0]));for(const l of t)for(const o of((s=l.analytics)==null?void 0:s.zoneDurations)??[])V.includes(o.key)&&(r[o.key]+=o.seconds);return r}function Ne(t){const r=Object.values(t).reduce((s,l)=>s+l,0);return Object.fromEntries(V.map(s=>[s,r>0?Number((t[s]/r*100).toFixed(1)):0]))}function Rt(t,r,s){const l=typeof(s==null?void 0:s.dataKey)=="string"?s.dataKey:typeof r=="string"?r:"",o=typeof t=="number"?Number(t.toFixed(1)):String(t??"n/a");return l==="restingHeartRate"||r==="Resting HR"?[`${o} bpm`,"Resting HR"]:l==="vo2Max"||r==="VO2max"?[`${o} ml/kg/min`,"VO2max"]:[`${o}%`,z(l)]}function Et(t,r){const s=t.map((n,u)=>{var k,M,D;const x=ae(n.startedAt),w=t.slice(Math.max(0,u-2),u+1),N=oe(w),T=Ne(N);return{id:n.id,dateKey:x,date:x.slice(5),session:y(n),durationMinutes:Math.round(n.durationSeconds/60),confidence:((k=n.analytics)==null?void 0:k.confidence)??"unavailable",restingHeartRate:((D=(M=n.analytics)==null?void 0:M.hrSummary)==null?void 0:D.restingHr)??te(r,x,"restingHeartRate"),vo2Max:te(r,x,"vo2Max"),...T}}),l=t.map((n,u)=>{var T,k,M;const x=ae(n.startedAt),w=oe(t.slice(0,u+1)),N=Ne(w);return{id:n.id,dateKey:x,date:x.slice(5),session:y(n),durationMinutes:Math.round(n.durationSeconds/60),confidence:((T=n.analytics)==null?void 0:T.confidence)??"unavailable",restingHeartRate:((M=(k=n.analytics)==null?void 0:k.hrSummary)==null?void 0:M.restingHr)??te(r,x,"restingHeartRate"),vo2Max:te(r,x,"vo2Max"),...N}}),o=oe(t),h=Object.values(o).reduce((n,u)=>n+u,0),f=V.map(n=>{var x;const u=((x=t.flatMap(w=>{var N;return((N=w.analytics)==null?void 0:N.zoneDurations)??[]}).find(w=>w.key===n))==null?void 0:x.label)??z(n);return{key:n,zone:u,percentage:h>0?Number((o[n]/h*100).toFixed(1)):0,fill:G[n]??"#f8fafc"}}),j=t.filter(n=>{var u,x;return(((x=(u=n.analytics)==null?void 0:u.dataQuality)==null?void 0:x.heartRateSampleCount)??0)>0}).length,b=[...new Set(t.map(n=>y(n)))];return{sessions:t,lineData:s,expandingLineData:l,averageZoneData:f,rawHrCount:j,exerciseLabels:b}}function zt({session:t,draft:r,linkOptions:s,pending:l,step:o,onStepChange:h,onDraftChange:f,onSave:j}){var n,u,x,w,N,T,k,M,D;const b=[{id:"context",title:"Session context",description:"Quick facts, effort, and how this session happened."},{id:"reflection",title:"Reflection",description:"Mood, meaning, and what the session actually did for you."},{id:"links",title:"Links",description:"Tie the session back to Forge and Psyche context."}];return e.jsxs("div",{className:"grid gap-5",children:[e.jsx("div",{className:"rounded-[24px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 text-lg text-[var(--ui-ink-strong)]",children:[e.jsx(we,{className:"size-4 text-[var(--primary)]"}),e.jsx("span",{children:y(t)})]}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:X(t.startedAt,t.endedAt)})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(c,{children:B(t.durationSeconds)}),t.totalEnergyKcal?e.jsxs(c,{tone:"meta",children:[Math.round(t.totalEnergyKcal)," kcal"]}):null,t.distanceMeters?e.jsx(c,{tone:"meta",children:de(t.distanceMeters)}):null,e.jsx(c,{tone:"meta",children:_(t)}),e.jsx(c,{tone:"meta",className:"capitalize",children:t.reconciliationStatus.replaceAll("_"," ")})]})]})}),e.jsx("div",{className:"grid gap-2 sm:grid-cols-3",children:b.map((i,L)=>e.jsxs("button",{type:"button",onClick:()=>h(L),className:`rounded-[20px] border px-4 py-3 text-left transition ${o===L?"border-[var(--primary)] bg-[var(--primary)]/10 text-[var(--ui-ink-strong)]":"border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] text-[var(--ui-ink-soft)] hover:bg-[var(--ui-surface-2)] hover:text-[var(--ui-ink-strong)]"}`,children:[e.jsxs("div",{className:"text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:["Step ",L+1]}),e.jsx("div",{className:"mt-2 text-sm font-medium",children:i.title})]},i.id))}),e.jsxs("div",{className:"rounded-[24px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:b[o].title}),e.jsx("div",{className:"mt-2 text-sm leading-6 text-[var(--ui-ink-soft)]",children:b[o].description}),o===0?e.jsxs("div",{className:"mt-4 grid gap-4",children:[e.jsxs("div",{className:"grid gap-3 md:grid-cols-3",children:[e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Activity family"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)] capitalize",children:_(t)})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Source system"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:Ce(t)})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Source device"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:t.sourceDevice||"n/a"})]})]}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-3",children:[e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Steps"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:t.stepCount??"n/a"})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Avg HR"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:t.averageHeartRate?Math.round(t.averageHeartRate):"n/a"})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Max HR"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:t.maxHeartRate?Math.round(t.maxHeartRate):"n/a"})]})]}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-3",children:[e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Effort"}),e.jsx(H,{type:"number",min:1,max:10,value:r.subjectiveEffort,onChange:i=>f({subjectiveEffort:i.target.value})})]}),e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Planned vs spontaneous"}),e.jsx(H,{value:r.plannedContext,onChange:i=>f({plannedContext:i.target.value}),placeholder:"Planned recovery block"})]}),e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Social context"}),e.jsx(H,{value:r.socialContext,onChange:i=>f({socialContext:i.target.value}),placeholder:"Solo, coach, group class, partner"})]})]}),e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Tags"}),e.jsx(H,{value:r.tagsText,onChange:i=>f({tagsText:i.target.value}),placeholder:"recovery, interval-block, stress-release"})]})]}):null,o===1?e.jsxs("div",{className:"mt-4 grid gap-4",children:[e.jsxs("div",{className:"grid gap-3 md:grid-cols-2",children:[e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Mood before"}),e.jsx(H,{value:r.moodBefore,onChange:i=>f({moodBefore:i.target.value})})]}),e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Mood after"}),e.jsx(H,{value:r.moodAfter,onChange:i=>f({moodAfter:i.target.value})})]})]}),e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Meaning, impact, and why this session mattered"}),e.jsx(at,{className:"min-h-[160px]",value:r.meaningText,onChange:i=>f({meaningText:i.target.value}),placeholder:"This session was planned as active recovery after a heavy work block and helped reset stress before sleep."})]})]}):null,o===2?e.jsxs("div",{className:"mt-4 grid gap-3",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Search goals, projects, habits, values, beliefs, patterns, or reports and attach the ones that explain this session."}),e.jsx(Xe,{options:s,selectedValues:r.linkValues,onChange:i=>f({linkValues:i}),placeholder:"Search Forge and Psyche records…"})]}):null,e.jsxs("div",{className:"mt-5 grid gap-4 border-t border-[var(--ui-border-subtle)] pt-5",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Captured data"}),e.jsx("div",{className:"mt-2 text-sm leading-6 text-[var(--ui-ink-soft)]",children:"Source-native workout metrics, events, and phases exposed through the adapter layer."})]}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-2 xl:grid-cols-3",children:[(((n=t.details)==null?void 0:n.metrics)??[]).slice(0,12).map(i=>e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:i.label}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:Nt(i)}),e.jsxs("div",{className:"mt-1 text-xs uppercase tracking-[0.14em] text-[var(--ui-ink-faint)]",children:[z(i.category)," ·"," ",z(i.statistic)]})]},`${i.category}:${i.key}:${i.statistic}`)),(((x=(u=t.details)==null?void 0:u.metrics)==null?void 0:x.length)??0)===0?e.jsx("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4 text-sm text-[var(--ui-ink-faint)]",children:"No provider metrics were captured for this session yet."}):null]}),(((N=(w=t.details)==null?void 0:w.events)==null?void 0:N.length)??0)>0?e.jsxs("div",{className:"grid gap-3",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Workout events"}),e.jsx("div",{className:"grid gap-2",children:(T=t.details)==null?void 0:T.events.map(i=>e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] px-4 py-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx("div",{className:"text-[var(--ui-ink-strong)]",children:i.label}),e.jsx(c,{tone:"meta",children:B(i.durationSeconds)})]}),e.jsx("div",{className:"mt-1 text-sm text-[var(--ui-ink-soft)]",children:X(i.startedAt,i.endedAt??i.startedAt)})]},`${i.type}:${i.startedAt}`))})]}):null,(((M=(k=t.details)==null?void 0:k.components)==null?void 0:M.length)??0)>0?e.jsxs("div",{className:"grid gap-3",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Workout phases"}),e.jsx("div",{className:"grid gap-2",children:(D=t.details)==null?void 0:D.components.map(i=>e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] px-4 py-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx("div",{className:"text-[var(--ui-ink-strong)]",children:i.activity.canonicalLabel}),e.jsx(c,{tone:"meta",children:B(i.durationSeconds)})]}),e.jsx("div",{className:"mt-1 text-sm text-[var(--ui-ink-soft)]",children:X(i.startedAt,i.endedAt??i.startedAt)})]},i.externalUid))})]}):null]})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-faint)]",children:o<b.length-1?"Move through the session one step at a time, then save when the context is clean.":"Everything is in place. Save the session metadata back into Forge."}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(ie,{type:"button",variant:"secondary",onClick:()=>h(Math.max(0,o-1)),disabled:o===0,children:"Back"}),o<b.length-1?e.jsxs(ie,{type:"button",onClick:()=>h(o+1),children:["Next",e.jsx(Se,{className:"size-4"})]}):null,e.jsxs(ie,{type:"button",pending:l,pendingLabel:"Saving",onClick:j,children:[e.jsx(Ze,{className:"size-4"}),"Save session"]})]})]})]})}function Xt(){var fe,be;const t=Ye(),r=Ue(),s=Array.isArray(t.selectedUserIds)?t.selectedUserIds:[],[l,o]=p.useState({}),[h,f]=p.useState(""),[j,b]=p.useState([]),[n,u]=p.useState([]),[x,w]=p.useState(""),[N,T]=p.useState("all"),[k,M]=p.useState("rolling_stack"),[D,i]=p.useState(""),[L,Te]=p.useState(""),[ce,Me]=p.useState(!1),[ue,se]=p.useState(null),[Re,Y]=p.useState(0),S=K({queryKey:["forge-fitness",...s],queryFn:async()=>(await rt(s)).fitness}),Ee=K({queryKey:["forge-health-values",...s],queryFn:async()=>(await it(s)).values}),ze=K({queryKey:["forge-health-patterns",...s],queryFn:async()=>(await nt(s)).patterns}),De=K({queryKey:["forge-health-behaviors",...s],queryFn:async()=>(await lt(s)).behaviors}),Fe=K({queryKey:["forge-health-beliefs",...s],queryFn:async()=>(await ot(s)).beliefs}),He=K({queryKey:["forge-health-reports",...s],queryFn:async()=>(await dt(s)).reports});p.useEffect(()=>{S.data&&o(Object.fromEntries(S.data.sessions.map(a=>[a.id,U(a)])))},[S.data]),p.useEffect(()=>{if(ce||!S.data)return;const d=(S.data.analysisSessions??S.data.sessions).find(Ct);d&&u([`type:${d.workoutType}`]),Me(!0)},[ce,S.data]);const re=Ge({mutationFn:async a=>st(a.workoutId,{subjectiveEffort:a.subjectiveEffort.trim().length>0?Number(a.subjectiveEffort):null,moodBefore:a.moodBefore,moodAfter:a.moodAfter,meaningText:a.meaningText,plannedContext:a.plannedContext,socialContext:a.socialContext,tags:a.tagsText.split(",").map(d=>d.trim()).filter(Boolean),links:ht(a.linkValues)}),onSuccess:async()=>{await r.invalidateQueries({queryKey:["forge-fitness"]})}}),F=S.data,A=(F==null?void 0:F.sessions)??[],O=(F==null?void 0:F.analysisSessions)??A,Le=pt({goals:t.snapshot.dashboard.goals,projects:t.snapshot.dashboard.projects,tasks:t.snapshot.dashboard.tasks,habits:t.snapshot.dashboard.habits,values:Ee.data??[],patterns:ze.data??[],behaviors:De.data??[],beliefs:Fe.data??[],reports:He.data??[]}),$e=p.useMemo(()=>St(A),[A]),_e=p.useMemo(()=>Tt(O),[O]),I=p.useMemo(()=>{const a=Ae(h);return[...A].sort((d,m)=>new Date(m.startedAt).getTime()-new Date(d.startedAt).getTime()).filter(d=>{const m=l[d.id]??U(d);return(a.length===0||wt(d,m).includes(a))&&At(d,j)})},[l,h,j,A]),xe=p.useMemo(()=>Mt(O,n,N,D,L),[N,L,O,D,n]),me=I.length===A.length&&h.trim().length===0&&j.length===0?`${A.length} workout sessions visible`:`${I.length} of ${A.length} workout sessions visible`,R=I.find(a=>a.id===ue)??A.find(a=>a.id===ue)??null,pe=R?l[R.id]??U(R):null;if(S.isLoading)return e.jsx(Je,{eyebrow:"Sports",title:"Loading sports view",description:"Reading synced workouts and local reflection metadata.",columns:2,blocks:6});if(S.isError||!F)return e.jsx(et,{eyebrow:"Sports",error:S.error??new Error("Sports data unavailable"),onRetry:()=>void S.refetch()});const{summary:v,weeklyTrend:he,typeBreakdown:Oe}=F,ve=v.zoneMix??[],C=Et(xe,F.vitalsTrend),ge=n.length===0?"All exercise types":C.exerciseLabels.length>0?C.exerciseLabels.join(", "):`${n.length} selected types`,Ke=ve.map(a=>({zone:a.label,minutes:Math.round(a.seconds/60),percentage:Math.round(a.percentage*100),fill:G[a.key]??"#f8fafc"})),We=he.map(a=>{const d=Object.fromEntries((a.zoneDurations??[]).map(m=>[m.key,Math.round(m.seconds/60)]));return{date:a.dateKey.slice(5),duration:a.durationMinutes,load:a.trainingLoad??0,coverage:Math.round((a.heartRateCoverage??0)*100),...d}}),Be=O.map(a=>{var d,m,E,$;return{duration:Math.round(a.durationSeconds/60),intensity:Math.round((((m=(d=a.analytics)==null?void 0:d.load)==null?void 0:m.intensity)??0)*100),load:(($=(E=a.analytics)==null?void 0:E.load)==null?void 0:$.trimp)??0,type:y(a),name:y(a)}});function Ve(a,d){o(m=>{const E=m[a]??U(A.find($=>$.id===a));return{...m,[a]:{...E,...d}}})}async function Ie(a){const d=A.find(E=>E.id===a);if(!d)return;const m=l[a]??U(d);await re.mutateAsync({workoutId:a,subjectiveEffort:m.subjectiveEffort,moodBefore:m.moodBefore,moodAfter:m.moodAfter,meaningText:m.meaningText,plannedContext:m.plannedContext,socialContext:m.socialContext,tagsText:m.tagsText,linkValues:m.linkValues}),se(null),Y(0)}return e.jsxs("div",{className:"grid gap-5",children:[e.jsx(ct,{entityKind:"project",title:"Sports",description:"A session-first training surface for workout data, subjective meaning, and links back into Forge execution and Psyche.",badge:`${A.length} sessions`}),e.jsx(ut,{children:e.jsxs("section",{className:"grid gap-4 lg:grid-cols-4",children:[e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Weekly volume"}),e.jsx("div",{className:"mt-3 font-display text-4xl text-[var(--primary)]",children:B(v.weeklyVolumeSeconds)}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Total training time in the recent week."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Exercise minutes"}),e.jsx("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:v.exerciseMinutes}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Aggregate exercise minutes from synced sessions."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Energy burned"}),e.jsx("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:v.energyBurnedKcal}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Recent weekly kcal."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Training streak"}),e.jsx("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:v.streakDays}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Distinct workout days in the recent week."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Average session"}),e.jsxs("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:[v.averageSessionMinutes,"m"]}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Mean duration across recent sessions."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Training load"}),e.jsx("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:v.totalTrainingLoad??"n/a"}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Forge TRIMP across recent sessions."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Linked sessions"}),e.jsx("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:v.linkedSessionCount}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Sessions already tied to Forge or Psyche entities."})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"HR coverage"}),e.jsxs("div",{className:"mt-3 font-display text-4xl text-[var(--ui-ink-strong)]",children:[Math.round((v.averageHeartRateCoverage??0)*100),"%"]}),e.jsx("div",{className:"mt-2 text-sm text-[var(--ui-ink-soft)]",children:"Average raw HR sample coverage."})]})]})}),e.jsx(J,{children:e.jsxs("section",{className:"grid gap-4 xl:grid-cols-[minmax(0,1.1fr)_minmax(320px,0.9fr)]",children:[e.jsxs(g,{className:"min-h-[320px]",children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Load and volume trend"}),e.jsx(Z,{className:"mt-4 h-[260px]",children:e.jsx(P,{width:"100%",height:"100%",minWidth:1,minHeight:1,children:e.jsxs(vt,{data:We,children:[e.jsx("defs",{children:e.jsxs("linearGradient",{id:"sportsLoad",x1:"0",y1:"0",x2:"0",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"#f97316",stopOpacity:.36}),e.jsx("stop",{offset:"100%",stopColor:"#f97316",stopOpacity:.04})]})}),e.jsx(ee,{stroke:"var(--ui-border-subtle)",vertical:!1}),e.jsx(q,{dataKey:"date",tick:{fill:"var(--ui-ink-faint)",fontSize:11}}),e.jsx(W,{tick:{fill:"var(--ui-ink-faint)",fontSize:11},width:34}),e.jsx(Q,{contentStyle:{background:"var(--ui-surface-popover)",border:"1px solid var(--ui-border-strong)",borderRadius:8,color:"var(--ui-ink-strong)"}}),e.jsx(ye,{type:"monotone",dataKey:"load",stroke:"#f97316",fill:"url(#sportsLoad)",strokeWidth:2}),e.jsx(ye,{type:"monotone",dataKey:"duration",stroke:"#38bdf8",fill:"var(--ui-info-soft)",strokeWidth:2})]})})})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Zone distribution"}),e.jsx("div",{className:"mt-4 grid gap-3",children:ve.map(a=>e.jsxs("div",{className:"grid gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 text-sm",children:[e.jsx("span",{className:"text-[var(--ui-ink)]",children:a.label}),e.jsxs("span",{className:"text-[var(--ui-ink-strong)]",children:[Math.round(a.percentage*100),"% ·"," ",B(a.seconds)]})]}),e.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-[var(--ui-surface-3)]",children:e.jsx("div",{className:"h-full rounded-full",style:{width:`${Math.max(1,a.percentage*100)}%`,background:G[a.key]??"#f8fafc"}})})]},a.key))}),e.jsx(Z,{className:"mt-5 h-[180px]",children:e.jsx(P,{width:"100%",height:"100%",minWidth:1,minHeight:1,children:e.jsxs(ke,{data:Ke,children:[e.jsx(q,{dataKey:"zone",tick:{fill:"var(--ui-ink-faint)",fontSize:10}}),e.jsx(W,{tick:{fill:"var(--ui-ink-faint)",fontSize:10},width:34}),e.jsx(Q,{contentStyle:{background:"var(--ui-surface-popover)",border:"1px solid var(--ui-border-strong)",borderRadius:8,color:"var(--ui-ink-strong)"}}),e.jsx(ne,{dataKey:"minutes",fill:"#f97316",radius:[4,4,0,0]})]})})})]})]})}),e.jsx(J,{children:e.jsxs("section",{className:"grid gap-4",children:[e.jsxs(g,{className:"grid gap-4 overflow-hidden",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"HR zone analysis"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:"Filter all-time workout evidence by exercise type and date."})]}),e.jsxs(c,{tone:"meta",children:[xe.length," of ",O.length," ","sessions"]})]}),e.jsxs("div",{className:"grid gap-4 xl:grid-cols-[minmax(0,1fr)_minmax(280px,0.8fr)]",children:[e.jsx(je,{title:"Exercise types",description:"Select one, many, or none for all exercise types.",query:x,onQueryChange:w,options:_e,selectedOptionIds:n,onSelectedOptionIdsChange:u,resultSummary:ge,placeholder:"Search exercise types",emptyStateMessage:"No exercise type matches."}),e.jsxs("div",{className:"grid gap-3 rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Date range"}),e.jsx("div",{className:"grid grid-cols-3 gap-2",children:[["all","All time"],["recent_90","90 days"],["custom","Custom"]].map(([a,d])=>e.jsx("button",{type:"button",className:`rounded-[8px] border px-3 py-2 text-sm transition ${N===a?"border-[var(--primary)] bg-[var(--primary)]/12 text-[var(--ui-ink-strong)]":"border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] text-[var(--ui-ink-soft)] hover:bg-[var(--ui-surface-2)] hover:text-[var(--ui-ink-strong)]"}`,onClick:()=>T(a),children:d},a))}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Start"}),e.jsx(H,{type:"date",value:D,onChange:a=>{i(a.target.value),T("custom")}})]}),e.jsxs("label",{className:"grid gap-2",children:[e.jsx("span",{className:"text-sm text-[var(--ui-ink-soft)]",children:"End"}),e.jsx(H,{type:"date",value:L,onChange:a=>{Te(a.target.value),T("custom")}})]})]})]})]})]}),e.jsxs("div",{className:"grid gap-4 xl:grid-cols-[minmax(0,0.85fr)_minmax(0,1.15fr)]",children:[e.jsxs(g,{className:"min-h-[330px] overflow-hidden",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Average zones"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:"Duration-weighted proportion of time in each HR zone."})]}),e.jsx(c,{tone:"meta",children:ge})]}),e.jsx(Z,{className:"mt-4 h-[235px]",children:C.sessions.length>0?e.jsx(P,{width:"100%",height:"100%",minWidth:1,minHeight:1,children:e.jsxs(ke,{data:C.averageZoneData,children:[e.jsx(ee,{stroke:"var(--ui-border-subtle)",vertical:!1}),e.jsx(q,{dataKey:"zone",interval:0,tick:{fill:"var(--ui-ink-faint)",fontSize:10}}),e.jsx(W,{unit:"%",domain:[0,100],ticks:[0,25,50,75,100],tick:{fill:"var(--ui-ink-faint)",fontSize:10},width:38}),e.jsx(Q,{formatter:a=>[`${a}%`,"Average time"],contentStyle:{background:"var(--ui-surface-popover)",border:"1px solid var(--ui-border-strong)",borderRadius:8,color:"var(--ui-ink-strong)"}}),e.jsx(ne,{dataKey:"percentage",radius:[4,4,0,0],children:C.averageZoneData.map(a=>e.jsx(gt,{fill:a.fill},a.key))})]})}):e.jsx("div",{className:"grid h-full place-items-center rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-6 text-center text-sm leading-6 text-[var(--ui-ink-soft)]",children:"No selected sessions with zone analytics are available yet."})}),C.sessions.length>0?e.jsxs("div",{className:"mt-3 grid gap-2 text-sm text-[var(--ui-ink-soft)] sm:grid-cols-3",children:[e.jsxs("div",{children:[C.rawHrCount," sessions have raw HR timelines"]}),e.jsxs("div",{children:["Latest: ",((fe=C.lineData.at(-1))==null?void 0:fe.dateKey)??"n/a"]}),e.jsxs("div",{children:["VO2max points:"," ",C.lineData.filter(a=>a.vo2Max!=null).length]})]}):null]}),e.jsxs(g,{className:"min-h-[330px] overflow-hidden",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:k==="expanding_lines"?"Expanding zone lines":"Zone drift"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:k==="expanding_lines"?"Expanding all-session average with resting HR and VO2max overlay.":"Rolling duration-weighted zone mix with resting HR and VO2max overlay."})]}),e.jsxs("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:items-end",children:[e.jsx("div",{className:"grid grid-cols-2 gap-1 rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-1","aria-label":"Zone chart display",children:[["rolling_stack","Stacked"],["expanding_lines","Lines"]].map(([a,d])=>e.jsx("button",{type:"button",className:`min-h-9 rounded-[6px] px-3 py-1.5 text-xs font-medium transition ${k===a?"bg-[var(--primary)]/18 text-[var(--ui-ink-strong)]":"text-[var(--ui-ink-soft)] hover:bg-[var(--ui-surface-2)] hover:text-[var(--ui-ink-strong)]"}`,onClick:()=>M(a),children:d},a))}),e.jsx(c,{tone:"meta",children:"HRR zones"})]})]}),e.jsx(Z,{className:"mt-4 h-[255px]",children:C.lineData.length>0?e.jsx(P,{width:"100%",height:"100%",minWidth:1,minHeight:1,children:e.jsxs(ft,{data:k==="expanding_lines"?C.expandingLineData:C.lineData,children:[e.jsx(ee,{stroke:"var(--ui-border-subtle)",vertical:!1}),e.jsx(q,{dataKey:"date",tick:{fill:"var(--ui-ink-faint)",fontSize:10}}),e.jsx(W,{yAxisId:"zones",domain:[0,100],ticks:[0,25,50,75,100],unit:"%",tick:{fill:"var(--ui-ink-faint)",fontSize:10},width:38}),e.jsx(W,{yAxisId:"vitals",orientation:"right",tick:{fill:"var(--ui-ink-faint)",fontSize:10},width:42}),e.jsx(Q,{formatter:(a,d,m)=>Rt(a,d,m),contentStyle:{background:"var(--ui-surface-popover)",border:"1px solid var(--ui-border-strong)",borderRadius:8,color:"var(--ui-ink-strong)"}}),e.jsx(bt,{wrapperStyle:{color:"var(--ui-ink)",fontSize:11}}),k==="expanding_lines"?V.map(a=>e.jsx(le,{yAxisId:"zones",type:"monotone",dataKey:a,name:z(a),stroke:G[a],strokeWidth:2,dot:{r:2.5},activeDot:{r:4},connectNulls:!0},a)):V.map(a=>e.jsx(ne,{yAxisId:"zones",dataKey:a,stackId:"zones",fill:G[a],isAnimationActive:!1},a)),e.jsx(le,{yAxisId:"vitals",type:"monotone",dataKey:"restingHeartRate",name:"Resting HR",stroke:"var(--ui-ink-soft)",strokeWidth:2,dot:{r:3},connectNulls:!0}),e.jsx(le,{yAxisId:"vitals",type:"monotone",dataKey:"vo2Max",name:"VO2max",stroke:"#a78bfa",strokeWidth:2,dot:{r:3},connectNulls:!0})]})}):e.jsx("div",{className:"grid h-full place-items-center rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-6 text-center text-sm leading-6 text-[var(--ui-ink-soft)]",children:"Select workouts with HR evidence to unlock the time-series plot."})})]})]})]})}),e.jsx(J,{children:e.jsxs("section",{className:"grid gap-4 lg:grid-cols-[minmax(0,1fr)_360px]",children:[e.jsxs(g,{className:"min-h-[300px]",children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Duration vs intensity"}),e.jsx(Z,{className:"mt-4 h-[250px]",children:e.jsx(P,{width:"100%",height:"100%",minWidth:1,minHeight:1,children:e.jsxs(jt,{data:Be,children:[e.jsx(ee,{stroke:"var(--ui-border-subtle)"}),e.jsx(q,{type:"number",dataKey:"duration",name:"minutes",tick:{fill:"var(--ui-ink-faint)",fontSize:11}}),e.jsx(W,{type:"number",dataKey:"intensity",name:"intensity",tick:{fill:"var(--ui-ink-faint)",fontSize:11},width:38}),e.jsx(Q,{cursor:{strokeDasharray:"3 3"},contentStyle:{background:"var(--ui-surface-popover)",border:"1px solid var(--ui-border-strong)",borderRadius:8,color:"var(--ui-ink-strong)"}}),e.jsx(yt,{dataKey:"load",fill:"#f97316"})]})})})]}),e.jsxs(g,{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Evidence quality"}),e.jsxs("div",{className:"mt-4 grid gap-3",children:[e.jsxs("div",{className:"rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Raw HR coverage"}),e.jsxs("div",{className:"mt-2 text-2xl text-[var(--ui-ink-strong)]",children:[Math.round((v.averageHeartRateCoverage??0)*100),"%"]})]}),e.jsxs("div",{className:"rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Route-backed workouts"}),e.jsx("div",{className:"mt-2 text-2xl text-[var(--ui-ink-strong)]",children:v.routeWorkoutCount??0})]}),e.jsxs("div",{className:"rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Top sport"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:v.topWorkoutTypeLabel??v.topWorkoutType??"n/a"})]})]})]})]})}),e.jsx(J,{children:e.jsxs("section",{className:"grid gap-4 lg:grid-cols-[1.05fr_0.95fr]",children:[e.jsxs(g,{className:"grid gap-4",children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Recent volume"}),e.jsx("div",{className:"grid gap-3",children:he.map(a=>e.jsxs("div",{className:"grid gap-2 rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] px-4 py-3 md:grid-cols-[110px_150px_minmax(0,1fr)_90px]",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:a.dateKey}),e.jsx("div",{className:"text-sm text-[var(--ui-ink-strong)]",children:a.workoutTypeLabel??z(a.workoutType)}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"h-2 flex-1 overflow-hidden rounded-full bg-[var(--ui-surface-3)]",children:e.jsx("div",{className:"h-full rounded-full bg-[var(--primary)]",style:{width:`${Math.min(100,a.durationMinutes/120*100)}%`}})}),e.jsxs("div",{className:"text-sm text-[var(--ui-ink-strong)]",children:[a.durationMinutes,"m"]})]}),e.jsxs("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:[a.energyKcal," kcal"]})]},a.id))}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-3",children:[e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Distance"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:de(v.distanceMeters)})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Planned sessions"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:v.plannedSessionCount})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Imported / merged"}),e.jsxs("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:[v.importedSessionCount," /"," ",v.reconciledSessionCount]})]})]})]}),e.jsxs(g,{className:"grid gap-4",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Training composition"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:"Workout type and provenance mix"})]}),e.jsx("div",{className:"grid gap-3",children:Oe.slice(0,6).map(a=>e.jsxs("div",{className:"grid gap-2 rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] px-4 py-3 md:grid-cols-[minmax(0,1fr)_90px_90px]",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[var(--ui-ink-strong)]",children:a.workoutTypeLabel??z(a.workoutType)}),e.jsxs("div",{className:"mt-1 text-sm text-[var(--ui-ink-soft)]",children:[a.sessionCount," sessions ·"," ",a.activityFamilyLabel??"Other"]})]}),e.jsxs("div",{className:"text-sm text-[var(--ui-ink)]",children:[a.totalMinutes,"m"]}),e.jsxs("div",{className:"text-sm text-[var(--ui-ink)]",children:[a.energyKcal," kcal"]})]},a.workoutType))}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-2",children:[e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Habit-generated"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:v.habitGeneratedSessionCount})]}),e.jsxs("div",{className:"rounded-[18px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-4",children:[e.jsx("div",{className:"text-sm text-[var(--ui-ink-soft)]",children:"Forge-linked"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:v.linkedSessionCount})]})]})]})]})}),e.jsx(xt,{children:e.jsxs("section",{className:"grid gap-4 xl:grid-cols-[minmax(0,25rem)_minmax(0,1fr)]",children:[e.jsx(je,{title:"Session browser",description:"Search past activities by workout type, source, reconciliation state, or whether they still need context.",query:h,onQueryChange:f,options:$e,selectedOptionIds:j,onSelectedOptionIdsChange:b,resultSummary:me,placeholder:"Search workouts, devices, notes, moods, or filter chips",emptyStateMessage:"Keep typing or pick a filter chip to narrow the activity history."}),e.jsxs(g,{className:"grid gap-4",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-label text-[11px] uppercase tracking-[0.18em] text-[var(--ui-ink-faint)]",children:"Activity history"}),e.jsx("div",{className:"mt-2 text-lg text-[var(--ui-ink-strong)]",children:"Open a workout to add reflection and links in a guided modal."})]}),e.jsx(c,{tone:"meta",children:me})]}),e.jsx("div",{className:"max-h-[34rem] overflow-y-auto rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] p-3",children:I.length===0?e.jsx("div",{className:"flex min-h-[18rem] items-center justify-center p-6 text-center text-sm leading-6 text-[var(--ui-ink-faint)]",children:"No workout matches the current search yet. Clear some filters or search by workout type, device, or reflection text."}):e.jsx("div",{className:"grid gap-3",children:I.map(a=>{var m,E,$;const d=a.meaningText.trim().length>0||a.moodBefore.trim().length>0||a.moodAfter.trim().length>0||a.tags.length>0||a.links.length>0;return e.jsxs("div",{className:"grid w-full min-w-0 gap-3 rounded-[8px] border border-[var(--ui-border-subtle)] bg-[var(--ui-surface-1)] px-4 py-3 text-left transition hover:bg-[var(--ui-surface-2)]",children:[e.jsxs("div",{className:"grid min-w-0 gap-3 sm:flex sm:items-start sm:justify-between",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs(Pe,{to:`/sports/workouts/${a.id}`,className:"flex min-w-0 items-center gap-2 text-[var(--ui-ink-strong)] transition hover:text-[var(--primary)]",children:[e.jsx(we,{className:"size-4 shrink-0 text-[var(--primary)]"}),e.jsx("span",{className:"truncate text-base font-medium",children:y(a)})]}),e.jsxs("div",{className:"mt-2 flex min-w-0 items-center gap-2 text-sm text-[var(--ui-ink-soft)]",children:[e.jsx(qe,{className:"size-3.5 shrink-0"}),e.jsx("span",{className:"min-w-0 truncate",children:X(a.startedAt,a.endedAt)})]}),e.jsxs("div",{className:"mt-2 text-sm text-[var(--ui-ink-faint)]",children:[_(a)," ·"," ",a.sourceDevice]})]}),e.jsxs("button",{type:"button","aria-label":`Edit ${y(a)} reflection`,className:"inline-flex w-fit max-w-full items-center gap-2 rounded-full bg-[var(--ui-surface-2)] px-3 py-1.5 text-xs text-[var(--ui-ink)] transition hover:bg-[var(--ui-surface-3)] hover:text-[var(--ui-ink-strong)]",onClick:()=>{se(a.id),Y(0)},children:[e.jsx("span",{className:"truncate",children:d?"Reflected":"Needs reflection"}),e.jsx(Se,{className:"size-3.5 shrink-0"})]})]}),e.jsxs("div",{className:"flex min-w-0 flex-wrap gap-2",children:[e.jsx(c,{children:B(a.durationSeconds)}),a.totalEnergyKcal?e.jsxs(c,{tone:"meta",children:[Math.round(a.totalEnergyKcal)," kcal"]}):null,a.distanceMeters?e.jsx(c,{tone:"meta",children:de(a.distanceMeters)}):null,a.averageHeartRate?e.jsxs(c,{tone:"meta",children:[e.jsx(Qe,{className:"mr-1 size-3.5"}),Math.round(a.averageHeartRate)," bpm"]}):null,e.jsx(c,{tone:"meta",children:_(a)}),e.jsx(c,{tone:"meta",className:"capitalize",children:a.sourceType.replaceAll("_"," ")}),e.jsx(c,{tone:"meta",className:"capitalize",children:a.reconciliationStatus.replaceAll("_"," ")}),(m=a.analytics)!=null&&m.confidence?e.jsxs(c,{tone:"meta",children:[a.analytics.confidence," zones"]}):null,($=(E=a.analytics)==null?void 0:E.routeSummary)!=null&&$.hasRoute?e.jsx(c,{tone:"meta",children:"Route"}):null]})]},a.id)})})})]})]})}),R&&pe?e.jsx(tt,{open:!!R,onOpenChange:a=>{a||(se(null),Y(0))},eyebrow:"Sports session",title:y(R),description:"Add contextual meaning without crowding the main training surface.",children:e.jsx(zt,{session:R,draft:pe,linkOptions:Le,pending:re.isPending&&((be=re.variables)==null?void 0:be.workoutId)===R.id,step:Re,onStepChange:Y,onDraftChange:a=>Ve(R.id,a),onSave:()=>void Ie(R.id)})}):null]})}export{Xt as SportsPage,Rt as formatZoneTrendTooltipValue};