@titan-design/react-ui 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (509) hide show
  1. package/README.md +46 -47
  2. package/dist/bodymap.js +768 -701
  3. package/dist/bodymap.js.map +1 -1
  4. package/dist/bodymap.mjs +770 -703
  5. package/dist/bodymap.mjs.map +1 -1
  6. package/dist/index.d.mts +1320 -215
  7. package/dist/index.d.ts +1320 -215
  8. package/dist/index.js +5996 -4498
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.mjs +5773 -4357
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/{pages-CvsFqNtx.d.mts → pages-CpW3OB3g.d.mts} +21 -3
  13. package/dist/{pages-B1hqnGIC.d.ts → pages-_3Ajpiqu.d.ts} +21 -3
  14. package/dist/pages.d.mts +1 -1
  15. package/dist/pages.d.ts +1 -1
  16. package/dist/pages.js +1435 -1428
  17. package/dist/pages.js.map +1 -1
  18. package/dist/pages.mjs +1443 -1436
  19. package/dist/pages.mjs.map +1 -1
  20. package/dist/theme/index.d.mts +202 -1042
  21. package/dist/theme/index.d.ts +202 -1042
  22. package/dist/theme/index.js +215 -300
  23. package/dist/theme/index.js.map +1 -1
  24. package/dist/theme/index.mjs +202 -296
  25. package/dist/theme/index.mjs.map +1 -1
  26. package/dist/theme/tokens-css.js +62 -5
  27. package/dist/theme/tokens-css.js.map +1 -1
  28. package/dist/theme/tokens-css.mjs +62 -5
  29. package/dist/theme/tokens-css.mjs.map +1 -1
  30. package/dist/theme/tokens.d.mts +972 -0
  31. package/dist/theme/tokens.d.ts +972 -0
  32. package/dist/theme/tokens.js +904 -0
  33. package/dist/theme/tokens.js.map +1 -0
  34. package/dist/theme/tokens.mjs +880 -0
  35. package/dist/theme/tokens.mjs.map +1 -0
  36. package/docs/audits/2026-09-08-critique-addenda.md +51 -0
  37. package/docs/audits/2026-09-08-library-critique.md +212 -0
  38. package/docs/library-roadmap.md +99 -0
  39. package/package.json +7 -1
  40. package/src/arch/arch-graph.freshness.test.ts +52 -0
  41. package/src/arch/arch-graph.json +5021 -1617
  42. package/src/components/custom/ActiveWork/CoChangeChip.stories.tsx +44 -0
  43. package/src/components/custom/ActiveWork/CoChangeChip.test.tsx +29 -0
  44. package/src/components/custom/ActiveWork/CoChangeChip.tsx +48 -0
  45. package/src/components/custom/ActiveWork/Eyebrow.stories.tsx +25 -0
  46. package/src/components/custom/ActiveWork/Eyebrow.test.tsx +16 -0
  47. package/src/components/custom/ActiveWork/Eyebrow.tsx +26 -0
  48. package/src/components/custom/ActiveWork/FileActivityDetail.stories.tsx +50 -0
  49. package/src/components/custom/ActiveWork/FileActivityDetail.test.tsx +66 -0
  50. package/src/components/custom/ActiveWork/FileActivityDetail.tsx +202 -0
  51. package/src/components/custom/ActiveWork/FileActivityRow.stories.tsx +70 -0
  52. package/src/components/custom/ActiveWork/FileActivityRow.test.tsx +67 -0
  53. package/src/components/custom/ActiveWork/FileActivityRow.tsx +130 -0
  54. package/src/components/custom/ActiveWork/FileHistoryExplorer.stories.tsx +84 -0
  55. package/src/components/custom/ActiveWork/FileHistoryExplorer.test.tsx +99 -0
  56. package/src/components/custom/ActiveWork/FileHistoryExplorer.tsx +138 -0
  57. package/src/components/custom/ActiveWork/FilePathLabel.stories.tsx +39 -0
  58. package/src/components/custom/ActiveWork/FilePathLabel.test.tsx +53 -0
  59. package/src/components/custom/ActiveWork/FilePathLabel.tsx +63 -0
  60. package/src/components/custom/ActiveWork/InitiativeBrief.stories.tsx +50 -0
  61. package/src/components/custom/ActiveWork/InitiativeBrief.test.tsx +62 -0
  62. package/src/components/custom/ActiveWork/InitiativeBrief.tsx +181 -0
  63. package/src/components/custom/ActiveWork/InitiativeCard.stories.tsx +73 -0
  64. package/src/components/custom/ActiveWork/InitiativeCard.test.tsx +68 -0
  65. package/src/components/custom/ActiveWork/InitiativeCard.tsx +136 -0
  66. package/src/components/custom/ActiveWork/InitiativeHeader.stories.tsx +59 -0
  67. package/src/components/custom/ActiveWork/InitiativeHeader.test.tsx +40 -0
  68. package/src/components/custom/ActiveWork/InitiativeHeader.tsx +73 -0
  69. package/src/components/custom/ActiveWork/InitiativeReader.stories.tsx +145 -0
  70. package/src/components/custom/ActiveWork/OpenLoops.stories.tsx +58 -0
  71. package/src/components/custom/ActiveWork/OpenLoops.test.tsx +61 -0
  72. package/src/components/custom/ActiveWork/OpenLoops.tsx +107 -0
  73. package/src/components/custom/ActiveWork/PortfolioOverview.stories.tsx +101 -0
  74. package/src/components/custom/ActiveWork/PortfolioOverview.test.tsx +81 -0
  75. package/src/components/custom/ActiveWork/PortfolioOverview.tsx +83 -0
  76. package/src/components/custom/ActiveWork/README.md +305 -0
  77. package/src/components/custom/ActiveWork/SessionDetail.stories.tsx +71 -0
  78. package/src/components/custom/ActiveWork/SessionDetail.test.tsx +84 -0
  79. package/src/components/custom/ActiveWork/SessionDetail.tsx +180 -0
  80. package/src/components/custom/ActiveWork/SessionList.stories.tsx +69 -0
  81. package/src/components/custom/ActiveWork/SessionList.test.tsx +78 -0
  82. package/src/components/custom/ActiveWork/SessionList.tsx +103 -0
  83. package/src/components/custom/ActiveWork/SessionListItem.stories.tsx +64 -0
  84. package/src/components/custom/ActiveWork/SessionListItem.test.tsx +62 -0
  85. package/src/components/custom/ActiveWork/SessionListItem.tsx +152 -0
  86. package/src/components/custom/ActiveWork/SessionReader.stories.tsx +113 -0
  87. package/src/components/custom/ActiveWork/SeverityLabel.stories.tsx +51 -0
  88. package/src/components/custom/ActiveWork/SeverityLabel.test.tsx +68 -0
  89. package/src/components/custom/ActiveWork/SeverityLabel.tsx +97 -0
  90. package/src/components/custom/ActiveWork/TaskRow.stories.tsx +63 -0
  91. package/src/components/custom/ActiveWork/TaskRow.test.tsx +112 -0
  92. package/src/components/custom/ActiveWork/TaskRow.tsx +176 -0
  93. package/src/components/custom/ActiveWork/TaskTable.stories.tsx +123 -0
  94. package/src/components/custom/ActiveWork/TaskTable.test.tsx +233 -0
  95. package/src/components/custom/ActiveWork/TaskTable.tsx +321 -0
  96. package/src/components/custom/ActiveWork/active-work-depth.test.tsx +102 -0
  97. package/src/components/custom/ActiveWork/file-history-fixture.ts +91 -0
  98. package/src/components/custom/ActiveWork/format-time.test.ts +23 -0
  99. package/src/components/custom/ActiveWork/format-time.ts +32 -0
  100. package/src/components/custom/ActiveWork/index.ts +19 -0
  101. package/src/components/custom/ActiveWork/initiative-fixture.ts +104 -0
  102. package/src/components/custom/ActiveWork/session-fixture.ts +267 -0
  103. package/src/components/custom/ActiveWork/session-linkers.ts +56 -0
  104. package/src/components/custom/ActiveWork/task-list-fixture.ts +97 -0
  105. package/src/components/custom/CircularTimer/CircularTimer.stories.tsx +4 -3
  106. package/src/components/custom/DateTime/DateTime.stories.tsx +2 -1
  107. package/src/components/custom/DateTime/DateTime.test.tsx +3 -1
  108. package/src/components/custom/EmptyState/EmptyState.stories.tsx +22 -9
  109. package/src/components/custom/EmptyState/EmptyState.test.tsx +7 -13
  110. package/src/components/custom/EmptyState/EmptyState.tsx +4 -18
  111. package/src/components/custom/Fatigue/DualGhostSpark.stories.tsx +4 -3
  112. package/src/components/custom/Fatigue/FatigueLights.stories.tsx +2 -2
  113. package/src/components/custom/Fatigue/GhostSpark.stories.tsx +4 -3
  114. package/src/components/custom/Fatigue/LiveFatigueCard.stories.tsx +2 -2
  115. package/src/components/custom/Fatigue/LiveFatigueCard.tsx +8 -4
  116. package/src/components/custom/Fatigue/LiveFatiguePanel.stories.tsx +116 -6
  117. package/src/components/custom/Fatigue/LiveFatiguePanel.test.tsx +134 -0
  118. package/src/components/custom/Fatigue/LiveFatiguePanel.tsx +54 -83
  119. package/src/components/custom/Fatigue/README.md +40 -3
  120. package/src/components/custom/Fatigue/RomProgressionChart.stories.tsx +2 -2
  121. package/src/components/custom/Fatigue/SilverRedPalette.stories.tsx +2 -1
  122. package/src/components/custom/Fatigue/VelocityHero.stories.tsx +4 -3
  123. package/src/components/custom/Fatigue/VerdictHero.stories.tsx +2 -2
  124. package/src/components/custom/Fatigue/fatigue-mock.test.ts +0 -5
  125. package/src/components/custom/Fatigue/fatigue-mock.ts +2 -10
  126. package/src/components/custom/Fatigue/fatigue-tokens.ts +12 -0
  127. package/src/components/custom/Fatigue/index.ts +17 -5
  128. package/src/components/custom/Fatigue/panel-layout.test.ts +149 -0
  129. package/src/components/custom/Fatigue/panel-layout.ts +185 -0
  130. package/src/components/custom/Gauge/Gauge.stories.tsx +2 -2
  131. package/src/components/custom/Gauge/Gauge.test.tsx +1 -1
  132. package/src/components/custom/Gauge/Gauge.tsx +4 -1
  133. package/src/components/custom/Metric/Metric.stories.tsx +10 -1
  134. package/src/components/custom/Metric/Metric.test.tsx +1 -3
  135. package/src/components/custom/Metric/Metric.tsx +5 -20
  136. package/src/components/custom/Prose/MarkdownProse.stories.tsx +88 -0
  137. package/src/components/custom/Prose/MarkdownProse.test.tsx +87 -0
  138. package/src/components/custom/Prose/MarkdownProse.tsx +201 -0
  139. package/src/components/custom/Prose/README.md +58 -0
  140. package/src/components/custom/Prose/index.ts +1 -0
  141. package/src/components/custom/Scatter/Scatter.stories.tsx +46 -8
  142. package/src/components/custom/Scatter/Scatter.test.tsx +2 -2
  143. package/src/components/custom/Scatter/Scatter.tsx +116 -14
  144. package/src/components/custom/Sidebar/Sidebar.stories.tsx +40 -7
  145. package/src/components/custom/Sidebar/Sidebar.test.tsx +5 -1
  146. package/src/components/custom/Sidebar/Sidebar.tsx +16 -33
  147. package/src/components/custom/Table/Table.stories.tsx +98 -15
  148. package/src/components/custom/Table/Table.test.tsx +273 -86
  149. package/src/components/custom/Table/Table.tsx +159 -67
  150. package/src/components/custom/Table/column-fit.test.ts +75 -0
  151. package/src/components/custom/Table/column-fit.ts +116 -0
  152. package/src/components/custom/Table/index.ts +9 -0
  153. package/src/components/custom/TimerReadout/TimerReadout.stories.tsx +8 -6
  154. package/src/components/custom/Treemap/Treemap.stories.tsx +2 -2
  155. package/src/components/custom/Treemap/Treemap.test.tsx +1 -1
  156. package/src/components/custom/Treemap/Treemap.tsx +7 -2
  157. package/src/components/custom/Typography/Typography.stories.tsx +28 -1
  158. package/src/components/custom/Typography/Typography.test.tsx +34 -0
  159. package/src/components/custom/Typography/Typography.tsx +6 -0
  160. package/src/components/custom/Typography/index.ts +1 -8
  161. package/src/components/custom/Workout/ActiveWorkoutPage.stories.tsx +9 -1
  162. package/src/components/custom/Workout/BaseBadge.stories.tsx +19 -7
  163. package/src/components/custom/Workout/BaseBadge.test.tsx +31 -11
  164. package/src/components/custom/Workout/BaseBadge.tsx +3 -0
  165. package/src/components/custom/Workout/BodyMap.stories.tsx +4 -1
  166. package/src/components/custom/Workout/BodyMap.tsx +3 -1
  167. package/src/components/custom/Workout/BodyMapDetailPanel.stories.tsx +16 -4
  168. package/src/components/custom/Workout/BodyMapDetailPanel.test.tsx +11 -15
  169. package/src/components/custom/Workout/BodyMapDetailPanel.tsx +45 -9
  170. package/src/components/custom/Workout/CapacityBandChart.stories.tsx +10 -8
  171. package/src/components/custom/Workout/CapacityBandChart.test.tsx +24 -51
  172. package/src/components/custom/Workout/CapacityBandChart.tsx +139 -108
  173. package/src/components/custom/Workout/DeviationBar.stories.tsx +1 -1
  174. package/src/components/custom/Workout/DeviationBar.test.tsx +5 -2
  175. package/src/components/custom/Workout/DeviationBar.tsx +21 -16
  176. package/src/components/custom/Workout/DualVelocityStrip.stories.tsx +182 -0
  177. package/src/components/custom/Workout/DualVelocityStrip.test.tsx +3 -2
  178. package/src/components/custom/Workout/ExerciseCard.stories.tsx +8 -7
  179. package/src/components/custom/Workout/ExerciseCard.test.tsx +13 -3
  180. package/src/components/custom/Workout/ExerciseCard.tsx +42 -51
  181. package/src/components/custom/Workout/ExerciseCardHeading.stories.tsx +7 -7
  182. package/src/components/custom/Workout/ExerciseDetailPage.stories.tsx +9 -1
  183. package/src/components/custom/Workout/ExerciseHeading.stories.tsx +8 -8
  184. package/src/components/custom/Workout/ExerciseHeading.tsx +8 -5
  185. package/src/components/custom/Workout/ExerciseIndicator.stories.tsx +6 -4
  186. package/src/components/custom/Workout/ExerciseIndicator.test.tsx +27 -11
  187. package/src/components/custom/Workout/ExerciseIndicator.tsx +14 -15
  188. package/src/components/custom/Workout/FatigueMeter.stories.tsx +5 -5
  189. package/src/components/custom/Workout/InputBar.stories.tsx +4 -5
  190. package/src/components/custom/Workout/IntensityBar.stories.tsx +1 -1
  191. package/src/components/custom/Workout/IntensityBar.test.tsx +5 -1
  192. package/src/components/custom/Workout/IntensityBar.tsx +4 -2
  193. package/src/components/custom/Workout/LiveAuraFrame.stories.tsx +5 -4
  194. package/src/components/custom/Workout/MesoCard.stories.tsx +4 -1
  195. package/src/components/custom/Workout/MesoCard.test.tsx +7 -18
  196. package/src/components/custom/Workout/MesoCard.tsx +12 -9
  197. package/src/components/custom/Workout/MesoProgressBar.stories.tsx +1 -1
  198. package/src/components/custom/Workout/MesoProgressBar.test.tsx +18 -11
  199. package/src/components/custom/Workout/MesoProgressBar.tsx +15 -13
  200. package/src/components/custom/Workout/MesoStatusCard.stories.tsx +2 -1
  201. package/src/components/custom/Workout/MesoStatusCard.test.tsx +14 -44
  202. package/src/components/custom/Workout/MesoStatusCard.tsx +9 -23
  203. package/src/components/custom/Workout/MetricTiles.stories.tsx +3 -2
  204. package/src/components/custom/Workout/MuscleGroupChip.stories.tsx +2 -8
  205. package/src/components/custom/Workout/MuscleGroupChip.test.tsx +23 -31
  206. package/src/components/custom/Workout/MuscleGroupChip.tsx +28 -67
  207. package/src/components/custom/Workout/PlaceholderStrip.stories.tsx +1 -1
  208. package/src/components/custom/Workout/PlaceholderStrip.test.tsx +17 -10
  209. package/src/components/custom/Workout/PlaceholderStrip.tsx +9 -8
  210. package/src/components/custom/Workout/PrBadge.stories.tsx +2 -1
  211. package/src/components/custom/Workout/PrBadge.test.tsx +3 -9
  212. package/src/components/custom/Workout/PrBadge.tsx +13 -17
  213. package/src/components/custom/Workout/PrHistoryModal.stories.tsx +4 -1
  214. package/src/components/custom/Workout/PrHistoryModal.test.tsx +13 -36
  215. package/src/components/custom/Workout/PrHistoryModal.tsx +8 -4
  216. package/src/components/custom/Workout/ProgramPlanningPage.stories.tsx +6 -1
  217. package/src/components/custom/Workout/README.md +12 -7
  218. package/src/components/custom/Workout/ReadinessCheck.stories.tsx +3 -2
  219. package/src/components/custom/Workout/ReadinessCheck.test.tsx +12 -18
  220. package/src/components/custom/Workout/ReadinessCheck.tsx +19 -3
  221. package/src/components/custom/Workout/RestTimer.stories.tsx +3 -2
  222. package/src/components/custom/Workout/ScheduleTiles.stories.tsx +3 -2
  223. package/src/components/custom/Workout/ScheduleTiles.test.tsx +3 -4
  224. package/src/components/custom/Workout/ScheduleTiles.tsx +4 -7
  225. package/src/components/custom/Workout/SegmentedBar.stories.tsx +5 -5
  226. package/src/components/custom/Workout/SegmentedBar.tsx +6 -2
  227. package/src/components/custom/Workout/SegmentedProgressBar.stories.tsx +5 -5
  228. package/src/components/custom/Workout/SessionHeader.stories.tsx +6 -6
  229. package/src/components/custom/Workout/SessionHeader.tsx +12 -12
  230. package/src/components/custom/Workout/SessionRail.stories.tsx +12 -11
  231. package/src/components/custom/Workout/SessionRail.tsx +7 -9
  232. package/src/components/custom/Workout/SetBar.stories.tsx +10 -6
  233. package/src/components/custom/Workout/SetBar.test.tsx +49 -4
  234. package/src/components/custom/Workout/SetBar.tsx +38 -12
  235. package/src/components/custom/Workout/SetRow.stories.tsx +3 -2
  236. package/src/components/custom/Workout/SetRow.test.tsx +16 -2
  237. package/src/components/custom/Workout/SetRow.tsx +61 -23
  238. package/src/components/custom/Workout/SetStrip.stories.tsx +60 -5
  239. package/src/components/custom/Workout/SetStrip.test.tsx +25 -0
  240. package/src/components/custom/Workout/SetStrip.tsx +24 -4
  241. package/src/components/custom/Workout/SetTableHeader.stories.tsx +6 -6
  242. package/src/components/custom/Workout/SetTableHeader.tsx +9 -12
  243. package/src/components/custom/Workout/SetsRepsLoad.stories.tsx +7 -7
  244. package/src/components/custom/Workout/SetsRepsLoad.tsx +3 -5
  245. package/src/components/custom/Workout/Sparkline.stories.tsx +1 -1
  246. package/src/components/custom/Workout/Sparkline.test.tsx +37 -19
  247. package/src/components/custom/Workout/Sparkline.tsx +14 -18
  248. package/src/components/custom/Workout/StatusDot.stories.tsx +1 -1
  249. package/src/components/custom/Workout/StatusDot.test.tsx +44 -5
  250. package/src/components/custom/Workout/StatusDot.tsx +93 -63
  251. package/src/components/custom/Workout/StatusPill.stories.tsx +1 -1
  252. package/src/components/custom/Workout/StatusPill.test.tsx +6 -15
  253. package/src/components/custom/Workout/StatusPill.tsx +27 -38
  254. package/src/components/custom/Workout/StrengthTrendChart.stories.tsx +9 -3
  255. package/src/components/custom/Workout/StrengthTrendChart.test.tsx +15 -37
  256. package/src/components/custom/Workout/StrengthTrendChart.tsx +31 -30
  257. package/src/components/custom/Workout/SupersetWrapper.stories.tsx +27 -64
  258. package/src/components/custom/Workout/SupersetWrapper.test.tsx +16 -14
  259. package/src/components/custom/Workout/SupersetWrapper.tsx +17 -21
  260. package/src/components/custom/Workout/TempoDisplay.stories.tsx +22 -7
  261. package/src/components/custom/Workout/TempoDisplay.test.tsx +18 -4
  262. package/src/components/custom/Workout/TrainingStatusPage.stories.tsx +9 -1
  263. package/src/components/custom/Workout/VelocityStrip.compact.stories.tsx +4 -1
  264. package/src/components/custom/Workout/VelocityStrip.dual.stories.tsx +7 -4
  265. package/src/components/custom/Workout/VelocityStrip.expanded.stories.tsx +4 -1
  266. package/src/components/custom/Workout/VelocityStrip.hero.stories.tsx +4 -1
  267. package/src/components/custom/Workout/VelocityStrip.stories.tsx +12 -6
  268. package/src/components/custom/Workout/VelocityStrip.tsx +3 -0
  269. package/src/components/custom/Workout/VolumeLandmarkBar.stories.tsx +6 -7
  270. package/src/components/custom/Workout/VolumeLandmarkBar.tsx +15 -6
  271. package/src/components/custom/Workout/WeekRow.stories.tsx +4 -1
  272. package/src/components/custom/Workout/WeekRow.test.tsx +18 -15
  273. package/src/components/custom/Workout/WeekRow.tsx +23 -16
  274. package/src/components/custom/Workout/WeightBadge.stories.tsx +2 -1
  275. package/src/components/custom/Workout/WeightBadge.test.tsx +50 -19
  276. package/src/components/custom/Workout/WeightBadge.tsx +28 -27
  277. package/src/components/custom/Workout/WorkoutCard.stories.tsx +6 -1
  278. package/src/components/custom/Workout/WorkoutCard.test.tsx +18 -0
  279. package/src/components/custom/Workout/WorkoutCard.tsx +35 -57
  280. package/src/components/custom/Workout/WorkoutPill.stories.tsx +5 -2
  281. package/src/components/custom/Workout/WorkoutPill.test.tsx +39 -7
  282. package/src/components/custom/Workout/WorkoutPill.tsx +88 -57
  283. package/src/components/custom/Workout/ZoneTrack.stories.tsx +7 -6
  284. package/src/components/custom/Workout/ZoneTrack.tsx +10 -9
  285. package/src/components/custom/Workout/index.ts +5 -0
  286. package/src/components/custom/Workout/metricText.stories.tsx +6 -5
  287. package/src/components/custom/Workout/metricText.tsx +4 -0
  288. package/src/components/custom/Workout/setHeadingKit.tsx +207 -26
  289. package/src/components/custom/charts/README.md +61 -0
  290. package/src/components/custom/charts/SetBarChart.test.tsx +30 -1
  291. package/src/components/custom/charts/SetBarChart.tsx +42 -4
  292. package/src/components/custom/charts/SparkBars.stories.tsx +55 -0
  293. package/src/components/custom/charts/SparkBars.test.tsx +69 -0
  294. package/src/components/custom/charts/SparkBars.tsx +85 -0
  295. package/src/components/custom/charts/index.ts +3 -0
  296. package/src/components/custom/index.ts +3 -0
  297. package/src/components/custom/stepper/Stepper.stories.tsx +13 -10
  298. package/src/components/custom/stepper/Stepper.test.tsx +1 -7
  299. package/src/components/custom/stepper/Stepper.tsx +13 -28
  300. package/src/components/icons/icons.stories.tsx +1 -1
  301. package/src/components/icons/icons.tsx +51 -0
  302. package/src/components/shell/AppShell.stories.tsx +150 -0
  303. package/src/components/shell/AppShell.test.tsx +70 -0
  304. package/src/components/shell/AppShell.tsx +90 -0
  305. package/src/components/shell/BrandLockup.stories.tsx +66 -5
  306. package/src/components/shell/BrandLockup.test.tsx +34 -1
  307. package/src/components/shell/BrandLockup.tsx +27 -11
  308. package/src/components/shell/NavItem.stories.tsx +4 -4
  309. package/src/components/shell/NavItem.test.tsx +17 -0
  310. package/src/components/shell/NavItem.tsx +17 -5
  311. package/src/components/shell/README.md +90 -27
  312. package/src/components/shell/SideNav.stories.tsx +38 -7
  313. package/src/components/shell/SideNav.test.tsx +16 -8
  314. package/src/components/shell/SideNav.tsx +17 -17
  315. package/src/components/shell/TopBar.stories.tsx +44 -19
  316. package/src/components/shell/TopBar.test.tsx +34 -12
  317. package/src/components/shell/TopBar.tsx +61 -40
  318. package/src/components/shell/brands.tsx +66 -0
  319. package/src/components/shell/index.ts +9 -8
  320. package/src/components/shell/{DeviceIndicator.stories.tsx → workout/DeviceIndicator.stories.tsx} +2 -2
  321. package/src/components/shell/{DeviceIndicator.tsx → workout/DeviceIndicator.tsx} +2 -2
  322. package/src/components/shell/{DeviceMenu.stories.tsx → workout/DeviceMenu.stories.tsx} +2 -2
  323. package/src/components/shell/{DeviceMenu.tsx → workout/DeviceMenu.tsx} +3 -3
  324. package/src/components/shell/{DeviceRow.stories.tsx → workout/DeviceRow.stories.tsx} +2 -2
  325. package/src/components/shell/{DeviceRow.tsx → workout/DeviceRow.tsx} +3 -3
  326. package/src/components/shell/{SessionStatePill.stories.tsx → workout/SessionStatePill.stories.tsx} +2 -2
  327. package/src/components/shell/{SessionStatePill.tsx → workout/SessionStatePill.tsx} +5 -3
  328. package/src/components/shell/workout/WorkoutShell.stories.tsx +71 -0
  329. package/src/components/shell/{DashboardShell.test.tsx → workout/WorkoutShell.test.tsx} +19 -8
  330. package/src/components/shell/workout/WorkoutShell.tsx +77 -0
  331. package/src/components/shell/workout/WorkoutTopBar.stories.tsx +58 -0
  332. package/src/components/shell/workout/WorkoutTopBar.test.tsx +39 -0
  333. package/src/components/shell/workout/WorkoutTopBar.tsx +52 -0
  334. package/src/components/shell/workout/index.ts +9 -0
  335. package/src/components/shell/workout/workoutNavItems.tsx +16 -0
  336. package/src/components/ui/README.md +110 -0
  337. package/src/components/ui/alert/Alert.stories.tsx +1 -1
  338. package/src/components/ui/autocomplete/Autocomplete.stories.tsx +11 -13
  339. package/src/components/ui/autocomplete/Autocomplete.test.tsx +7 -25
  340. package/src/components/ui/autocomplete/Autocomplete.tsx +21 -28
  341. package/src/components/ui/avatar/Avatar.stories.tsx +1 -1
  342. package/src/components/ui/avatar/Avatar.tsx +2 -10
  343. package/src/components/ui/badge/Badge.stories.tsx +83 -28
  344. package/src/components/ui/badge/Badge.test.tsx +19 -3
  345. package/src/components/ui/badge/Badge.tsx +48 -55
  346. package/src/components/ui/breadcrumbs/Breadcrumbs.stories.tsx +1 -1
  347. package/src/components/ui/breadcrumbs/Breadcrumbs.tsx +4 -16
  348. package/src/components/ui/button/Button.stories.tsx +46 -12
  349. package/src/components/ui/button/Button.tsx +32 -25
  350. package/src/components/ui/card/Card.stories.tsx +90 -94
  351. package/src/components/ui/card/Card.test.tsx +80 -6
  352. package/src/components/ui/card/Card.tsx +150 -203
  353. package/src/components/ui/checkbox/Checkbox.stories.tsx +1 -1
  354. package/src/components/ui/checkbox/Checkbox.tsx +6 -26
  355. package/src/components/ui/chip/Chip.stories.tsx +37 -13
  356. package/src/components/ui/chip/Chip.test.tsx +10 -6
  357. package/src/components/ui/chip/Chip.tsx +76 -91
  358. package/src/components/ui/collapse/Collapse.stories.tsx +23 -23
  359. package/src/components/ui/collapse/Collapse.tsx +6 -11
  360. package/src/components/ui/data-row/DataRow.stories.tsx +9 -2
  361. package/src/components/ui/data-row/DataRow.test.tsx +5 -15
  362. package/src/components/ui/data-row/DataRow.tsx +18 -7
  363. package/src/components/ui/divider/Divider.stories.tsx +1 -1
  364. package/src/components/ui/divider/Divider.tsx +1 -5
  365. package/src/components/ui/drawer/Drawer.stories.tsx +5 -16
  366. package/src/components/ui/drawer/Drawer.tsx +13 -30
  367. package/src/components/ui/floating-overlay-depth.test.tsx +143 -0
  368. package/src/components/ui/form-field/FormField.stories.tsx +6 -20
  369. package/src/components/ui/form-field/FormField.test.tsx +1 -5
  370. package/src/components/ui/form-field/FormField.tsx +10 -46
  371. package/src/components/ui/help-tip/HelpTip.stories.tsx +8 -19
  372. package/src/components/ui/help-tip/HelpTip.test.tsx +1 -3
  373. package/src/components/ui/help-tip/HelpTip.tsx +21 -22
  374. package/src/components/ui/help-tip/index.ts +7 -1
  375. package/src/components/ui/icon-box/IconBox.stories.tsx +1 -1
  376. package/src/components/ui/icon-box/IconBox.test.tsx +1 -7
  377. package/src/components/ui/icon-box/IconBox.tsx +2 -12
  378. package/src/components/ui/indicator/Indicator.stories.tsx +1 -1
  379. package/src/components/ui/indicator/Indicator.tsx +20 -14
  380. package/src/components/ui/input/Input.stories.tsx +3 -11
  381. package/src/components/ui/input/Input.test.tsx +2 -10
  382. package/src/components/ui/input/Input.tsx +10 -25
  383. package/src/components/ui/input/index.ts +7 -1
  384. package/src/components/ui/link/Link.stories.tsx +19 -7
  385. package/src/components/ui/list-item/ListItem.stories.tsx +11 -2
  386. package/src/components/ui/list-item/ListItem.tsx +2 -9
  387. package/src/components/ui/menu/Menu.stories.tsx +21 -15
  388. package/src/components/ui/menu/Menu.test.tsx +2 -11
  389. package/src/components/ui/menu/Menu.tsx +12 -14
  390. package/src/components/ui/menu/index.ts +8 -1
  391. package/src/components/ui/modal/Modal.stories.tsx +2 -2
  392. package/src/components/ui/modal/Modal.tsx +29 -19
  393. package/src/components/ui/pill/Pill.stories.tsx +58 -23
  394. package/src/components/ui/pill/Pill.test.tsx +101 -3
  395. package/src/components/ui/pill/Pill.tsx +164 -49
  396. package/src/components/ui/pill/index.ts +1 -1
  397. package/src/components/ui/popover/Popover.stories.tsx +5 -7
  398. package/src/components/ui/popover/Popover.test.tsx +1 -6
  399. package/src/components/ui/popover/Popover.tsx +20 -15
  400. package/src/components/ui/popover/index.ts +7 -1
  401. package/src/components/ui/progress/Progress.stories.tsx +3 -12
  402. package/src/components/ui/progress/Progress.test.tsx +1 -5
  403. package/src/components/ui/radio/Radio.stories.tsx +42 -21
  404. package/src/components/ui/radio/Radio.test.tsx +6 -2
  405. package/src/components/ui/radio/Radio.tsx +23 -22
  406. package/src/components/ui/section/Section.stories.tsx +5 -14
  407. package/src/components/ui/section/Section.test.tsx +1 -6
  408. package/src/components/ui/section/Section.tsx +1 -3
  409. package/src/components/ui/section/index.ts +1 -5
  410. package/src/components/ui/select/Select.stories.tsx +3 -13
  411. package/src/components/ui/select/Select.test.tsx +2 -11
  412. package/src/components/ui/select/Select.tsx +14 -14
  413. package/src/components/ui/skeleton/Skeleton.stories.tsx +3 -11
  414. package/src/components/ui/skeleton/Skeleton.tsx +3 -14
  415. package/src/components/ui/skeleton/index.ts +1 -7
  416. package/src/components/ui/spinner/Spinner.stories.tsx +1 -1
  417. package/src/components/ui/spinner/Spinner.tsx +1 -4
  418. package/src/components/ui/stack/Stack.stories.tsx +1 -1
  419. package/src/components/ui/stack/Stack.tsx +1 -1
  420. package/src/components/ui/surface/Surface.stories.tsx +17 -5
  421. package/src/components/ui/surface/Surface.test.tsx +88 -28
  422. package/src/components/ui/surface/Surface.tsx +37 -87
  423. package/src/components/ui/surface/SurfaceContext.ts +22 -62
  424. package/src/components/ui/surface/index.ts +8 -0
  425. package/src/components/ui/surface/resolveSurface.ts +98 -0
  426. package/src/components/ui/surface/surface.contract.test.ts +6 -1
  427. package/src/components/ui/switch/Switch.stories.tsx +1 -1
  428. package/src/components/ui/switch/Switch.tsx +7 -6
  429. package/src/components/ui/tabs/Tabs.stories.tsx +1 -1
  430. package/src/components/ui/tabs/Tabs.tsx +7 -22
  431. package/src/components/ui/tabs/index.ts +1 -7
  432. package/src/components/ui/tile/Tile.stories.tsx +1 -1
  433. package/src/components/ui/tile/Tile.tsx +3 -0
  434. package/src/components/ui/toast/Toast.stories.tsx +1 -1
  435. package/src/components/ui/toast/Toast.test.tsx +2 -8
  436. package/src/components/ui/toast/Toast.tsx +43 -53
  437. package/src/components/ui/toast/index.ts +0 -1
  438. package/src/components/ui/toolbar-button/ToolbarButton.stories.tsx +92 -71
  439. package/src/components/ui/toolbar-button/ToolbarButton.test.tsx +3 -18
  440. package/src/components/ui/toolbar-button/ToolbarButton.tsx +25 -43
  441. package/src/components/ui/tooltip/Tooltip.stories.tsx +12 -3
  442. package/src/components/ui/tooltip/Tooltip.test.tsx +21 -3
  443. package/src/components/ui/tooltip/Tooltip.tsx +55 -36
  444. package/src/components/ui/tooltip/index.ts +1 -1
  445. package/src/components/ui/trigger/TriggerSurface.test.tsx +215 -0
  446. package/src/components/ui/trigger/TriggerSurface.tsx +81 -0
  447. package/src/components/ui/trigger/index.ts +2 -0
  448. package/src/stories/PresetShowcase.stories.tsx +100 -47
  449. package/src/test/no-device-internals.test.ts +3 -3
  450. package/src/theme/ChoosingTokens.stories.tsx +48 -0
  451. package/src/theme/ColorPalettes.stories.tsx +62 -45
  452. package/src/theme/ColorPrimitives.stories.tsx +35 -35
  453. package/src/theme/Depth.stories.tsx +132 -65
  454. package/src/theme/DepthCalibration.stories.tsx +24 -22
  455. package/src/theme/ThemeProvider.test.tsx +4 -4
  456. package/src/theme/barrel.ts +7 -6
  457. package/src/theme/color-stories.coverage.test.ts +1 -1
  458. package/src/theme/color-utils.ts +41 -29
  459. package/src/theme/config.completeness.test.ts +1 -1
  460. package/src/theme/config.ts +28 -0
  461. package/src/theme/elevation.test.ts +82 -56
  462. package/src/theme/elevation.ts +77 -561
  463. package/src/theme/global.css +30 -2
  464. package/src/theme/grey-ramp.test.ts +24 -8
  465. package/src/theme/lift.test.ts +39 -0
  466. package/src/theme/lift.ts +102 -0
  467. package/src/theme/materials.test.ts +5 -2
  468. package/src/theme/materials.ts +38 -4
  469. package/src/theme/native-theming-guard.test.ts +5 -5
  470. package/src/theme/presets/apply.ts +4 -0
  471. package/src/theme/presets/audiobook.ts +5 -2
  472. package/src/theme/presets/default.ts +4 -0
  473. package/src/theme/presets/index.ts +14 -1
  474. package/src/theme/presets/types.ts +1 -1
  475. package/src/theme/semantic-contrast.test.ts +13 -4
  476. package/src/theme/status-distinctness.test.ts +66 -0
  477. package/src/theme/surface-planes.test.ts +37 -0
  478. package/src/theme/surface-planes.ts +68 -0
  479. package/src/theme/token-export-guard.test.ts +102 -0
  480. package/src/theme/tokens/primitives.test.ts +15 -7
  481. package/src/theme/tokens/primitives.ts +67 -35
  482. package/src/theme/tokens/semantic.ts +71 -37
  483. package/src/theme/wash-ladder.test.ts +58 -0
  484. package/src/theme/workout-tokens.ts +1 -7
  485. package/src/types/jest-axe.d.ts +2 -6
  486. package/src/types/raw-md.d.ts +5 -0
  487. package/src/utils/colors.ts +4 -4
  488. package/src/utils/form.ts +1 -3
  489. package/src/utils/index.ts +2 -7
  490. package/src/utils/number-format.ts +17 -0
  491. package/src/utils/workout-format.ts +15 -6
  492. package/src/web-jsx/jsx-runtime.ts +1 -5
  493. package/tailwind.config.js +5 -0
  494. package/src/components/custom/Workout/ExerciseCardUnified.stories.tsx +0 -151
  495. package/src/components/custom/Workout/RowInventory.stories.tsx +0 -408
  496. package/src/components/custom/Workout/S3FullRail.stories.tsx +0 -46
  497. package/src/components/custom/Workout/S3SessionPace.stories.tsx +0 -95
  498. package/src/components/custom/Workout/S3SessionRailHeading.stories.tsx +0 -61
  499. package/src/components/custom/Workout/S3SetTypes.stories.tsx +0 -176
  500. package/src/components/custom/Workout/S3WorkoutExpansion.stories.tsx +0 -240
  501. package/src/components/shell/DashboardShell.stories.tsx +0 -65
  502. package/src/components/shell/DashboardShell.tsx +0 -75
  503. package/src/components/shell/SessionRailSpecimen.stories.tsx +0 -753
  504. package/src/theme/elevation.stories.tsx +0 -346
  505. package/src/utils/useTheme.ts +0 -72
  506. /package/src/components/shell/{DeviceIndicator.test.tsx → workout/DeviceIndicator.test.tsx} +0 -0
  507. /package/src/components/shell/{DeviceMenu.test.tsx → workout/DeviceMenu.test.tsx} +0 -0
  508. /package/src/components/shell/{DeviceRow.test.tsx → workout/DeviceRow.test.tsx} +0 -0
  509. /package/src/components/shell/{SessionStatePill.test.tsx → workout/SessionStatePill.test.tsx} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,11 +1,13 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as React$1 from 'react';
3
3
  import React__default, { ReactNode } from 'react';
4
- import { ViewProps, PressableProps, View, TextInputProps, TextInput, ImageSourcePropType, ModalProps as ModalProps$1, TextProps } from 'react-native';
5
- import { ThemeMode, ElevationLevel, GlowIntensity } from './theme/index.js';
6
- export { CATEGORICAL_CVD_SAFE_MAX, CategoricalVariant, ComponentType, CssPropertyEntry, CssPropertyManifest, ElevationConfig, FLOATING_ELEVATION_MIN, GradientStyle, ManifestValidationResult, PRESSED_ELEVATION_LEVEL, SURFACE_PLANE_STEPS, ShadowIntensity, ThemeConfig, ThemePreset, ThemePresetColors, ThemePresetFonts, ThemePresetRadii, ThemePresetShadows, ThemeProviderMode, ThemeProviderProps, VariantAxes, VariantOverride, applyThemePreset, audiobookPreset, barPaper, bestTextColor, buttonSizes, categoricalPalette, componentElevationRanges, darkThemeCSSVars, darken, defaultPreset, discreteRainbow, divergingScale, elevationSystem, getBaseSurfaceColor, getCategoricalColor, getDiscreteRainbowColor, getElevationConfig, getElevationShadow, getElevationSurface, getGlowShadow, getHoverColors, getPressedRecessShadow, getSemanticColors, getThemeCSSVars, getValidatedElevation, gluestackConfig, grainForTone, grainOpacityForTone, greyRamp, hexToRgb, hsvToRgb, insetWell, isCssPropertyManifest, isDark, lightThemeCSSVars, lighten, linearGradient, paperSheet, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveSpacing, primitiveTypography, primitiveZIndex, resolveColor, rgbToHex, rgbToHsv, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort, surfaceGradient, validateCssPropertyManifest } from './theme/index.js';
7
- import { S as SetStripSet, E as ExerciseIndicatorKind, a as SetRowProps } from './pages-B1hqnGIC.js';
8
- export { A as ActiveExerciseStatus, b as ActiveWorkoutExercise, c as ActiveWorkoutInput, d as ActiveWorkoutPageProps, e as ActiveWorkoutRest, f as ActiveWorkoutSuperset, C as CapacityBandChart, g as CapacityBandChartProps, h as CapacityBandDataPoint, i as CapacityBandProjection, D as DualVelocityStream, j as DualVelocityStrip, k as DualVelocityStripProps, l as ExerciseCard, m as ExerciseCardProps, n as ExerciseDetailEntry, o as ExerciseDetailHeader, p as ExerciseDetailPageProps, q as ExerciseDetailStats, r as ExerciseDetailTab, s as ExerciseIndicator, t as ExerciseIndicatorProps, u as ExerciseTrend, v as ExerciseVbt, w as ExerciseVbtSet, I as INDICATOR_PRECEDENCE, M as Meso, x as MesoCard, y as MesoCardProps, z as MesoProgressBar, B as MesoProgressBarProps, F as MesoStatus, G as MesoVolumeHeatmapEntry, P as PlanMeso, H as PlanWeek, J as PlanWorkout, K as ProgramBreadcrumb, L as ProgramNavLevel, N as ProgramPlanningPageProps, O as ProgramSelection, Q as SET_STRIP_VARIABLE_COLOR, R as SET_STRIP_ZONES, T as SetBar, U as SetBarProps, V as SetRow, W as SetRowState, X as SetRowUnit, Y as StrengthTrendChart, Z as StrengthTrendChartMesoBoundary, _ as StrengthTrendChartProps, $ as StrengthTrendDataPoint, a0 as VbtSummary, a1 as VelocitySet, a2 as VelocityStrip, a3 as VelocityStripProps, a4 as VelocityZoneBandProp, a5 as WeekRow, a6 as WeekRowProps, a7 as WeekRowWorkout, a8 as WorkoutCard, a9 as WorkoutCardProps, aa as WorkoutDot, ab as WorkoutDotStatus, ac as WorkoutGroup, ad as WorkoutMuscleGroup, ae as WorkoutMuscleVolumeStatus, af as WorkoutPill, ag as WorkoutPillProps, ah as WorkoutPillStatus, ai as WorkoutProgress, aj as WorkoutStatus, ak as calculateMeanVelocity, al as calculateVelocityLoss, am as getVelocityZoneColor, an as getVelocityZoneName, ao as resolveIndicator, ap as velocityZoneColor } from './pages-B1hqnGIC.js';
4
+ import { ViewProps, PressableProps, View, TextInputProps, TextInput, ImageSourcePropType, ModalProps as ModalProps$1, TextProps, ViewStyle, LayoutChangeEvent } from 'react-native';
5
+ import { SurfaceLevel, ElevationLevel, LiftOptions, GlowIntensity } from './theme/index.js';
6
+ export { CssPropertyEntry, CssPropertyManifest, ELEVATION_PLANE, FLOATING_ELEVATION_MIN, FLOATING_LIFT_MIN, GradientStyle, LIFT_RIM_ALPHA, LiftStep, ManifestValidationResult, PLANE_ORDER, PRESSED_ELEVATION_LEVEL, SURFACE_LEVEL_TOKEN, ShadowIntensity, ThemeConfig, ThemePreset, ThemePresetColors, ThemePresetFonts, ThemePresetRadii, ThemePresetShadows, ThemeProviderMode, ThemeProviderProps, VariantAxes, VariantOverride, applyThemePreset, audiobookPreset, barPaper, darkThemeCSSVars, darken, debossLabel, defaultPreset, elevationPlane, getElevationShadow, getElevationSurface, getGlowShadow, getHoverColors, getPressedRecessShadow, getThemeCSSVars, gluestackConfig, grainForTone, grainOpacityForTone, hexToRgb, hsvToRgb, insetWell, isCssPropertyManifest, isDark, liftShadow, liftStyle, lightThemeCSSVars, lighten, linearGradient, paperSheet, postIt, pressedLevel, raisedLevel, resolveColor, rgbToHex, rgbToHsv, surfaceBackground, surfaceGradient, validateCssPropertyManifest } from './theme/index.js';
7
+ import { ThemeMode } from './theme/tokens.js';
8
+ export { CATEGORICAL_CVD_SAFE_MAX, CategoricalVariant, SURFACE_PLANE_STEPS, alertRedVivid, bestTextColor, buttonSizes, categoricalPalette, discreteRainbow, divergingScale, getCategoricalColor, getDiscreteRainbowColor, getSemanticColors, greyRamp, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveSpacing, primitiveTypography, primitiveZIndex, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort } from './theme/tokens.js';
9
+ import { S as SetStripSet, E as ExerciseIndicatorKind, a as SetRowProps } from './pages-_3Ajpiqu.js';
10
+ export { A as ActiveExerciseStatus, b as ActiveWorkoutExercise, c as ActiveWorkoutInput, d as ActiveWorkoutPageProps, e as ActiveWorkoutRest, f as ActiveWorkoutSuperset, C as CapacityBandChart, g as CapacityBandChartProps, h as CapacityBandDataPoint, i as CapacityBandProjection, D as DualVelocityStream, j as DualVelocityStrip, k as DualVelocityStripProps, l as ExerciseCard, m as ExerciseCardProps, n as ExerciseDetailEntry, o as ExerciseDetailHeader, p as ExerciseDetailPageProps, q as ExerciseDetailStats, r as ExerciseDetailTab, s as ExerciseIndicator, t as ExerciseIndicatorProps, u as ExerciseTrend, v as ExerciseVbt, w as ExerciseVbtSet, I as INDICATOR_PRECEDENCE, M as Meso, x as MesoCard, y as MesoCardProps, z as MesoProgressBar, B as MesoProgressBarProps, F as MesoStatus, G as MesoVolumeHeatmapEntry, P as PlanMeso, H as PlanWeek, J as PlanWorkout, K as ProgramBreadcrumb, L as ProgramNavLevel, N as ProgramPlanningPageProps, O as ProgramSelection, Q as SET_STRIP_VARIABLE_COLOR, R as SET_STRIP_ZONES, T as SetBar, U as SetBarProps, V as SetRow, W as SetRowState, X as SetRowUnit, Y as StrengthTrendChart, Z as StrengthTrendChartMesoBoundary, _ as StrengthTrendChartProps, $ as StrengthTrendDataPoint, a0 as VbtSummary, a1 as VelocitySet, a2 as VelocityStrip, a3 as VelocityStripProps, a4 as VelocityZoneBandProp, a5 as WeekRow, a6 as WeekRowProps, a7 as WeekRowWorkout, a8 as WorkoutCard, a9 as WorkoutCardProps, aa as WorkoutDot, ab as WorkoutDotStatus, ac as WorkoutGroup, ad as WorkoutMuscleGroup, ae as WorkoutMuscleVolumeStatus, af as WorkoutPill, ag as WorkoutPillProps, ah as WorkoutPillStatus, ai as WorkoutProgress, aj as WorkoutStatus, ak as calculateMeanVelocity, al as calculateVelocityLoss, am as getVelocityZoneColor, an as getVelocityZoneName, ao as resolveIndicator, ap as velocityZoneColor } from './pages-_3Ajpiqu.js';
9
11
  export { M as MesoStatusBadge, a as MesoStatusBadgeVariant, b as MesoStatusCard, c as MesoStatusCardProps, d as MesoStatusCoaching, e as MesoStatusGauge, f as MesoStatusMetric, g as MesoStatusNextTarget } from './MesoStatusCard-CQk71hSi.js';
10
12
  import { VolumeLandmarks } from './bodymap.js';
11
13
  export { BodyMapData, BodyMapDetailPanelProps, BodyMapProps, ContributingExercise, MovementCategory, MuscleGroup, SimpleMuscleGroup, TrainingStatusMuscle, TrainingStatusPageProps, TrainingStatusSummary, UpcomingExercise } from './bodymap.js';
@@ -66,6 +68,14 @@ declare function CircleSlashIcon(props: IconProps): react_jsx_runtime.JSX.Elemen
66
68
  declare function AwardIcon(props: IconProps): react_jsx_runtime.JSX.Element;
67
69
  /** Info-circle glyph (mirrors lucide-react `Info`). ExerciseIndicator → `info`. */
68
70
  declare function InfoIcon(props: IconProps): react_jsx_runtime.JSX.Element;
71
+ /** Headphones glyph (mirrors lucide-react `Headphones`). Audiobook brand mark. */
72
+ declare function HeadphonesIcon({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
73
+ /** Kanban board glyph (mirrors lucide-react `SquareKanban`). Active-work brand mark. */
74
+ declare function KanbanIcon({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
75
+ /** Robot glyph (mirrors lucide-react `Bot`). Agent-dashboard brand mark. */
76
+ declare function BotIcon({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
77
+ /** Brain glyph (mirrors lucide-react `Brain`). Brain-app brand mark. */
78
+ declare function BrainIcon({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
69
79
 
70
80
  type AlertStatus = 'success' | 'info' | 'warning' | 'error';
71
81
  type AlertVariant = 'subtle' | 'outline' | 'solid';
@@ -282,11 +292,19 @@ interface PasswordInputProps extends Omit<InputProps, 'secureTextEntry' | 'right
282
292
  declare const PasswordInput: React__default.ForwardRefExoticComponent<PasswordInputProps & React__default.RefAttributes<TextInput>>;
283
293
 
284
294
  type CardVariant = 'elevated' | 'outline' | 'filled' | 'accent' | 'subtle';
295
+ /** Planes to lift above the enclosing Surface. */
285
296
  type CardElevation = 1 | 2 | 3;
286
297
  interface CardProps extends ViewProps {
287
- /** Visual variant */
298
+ /**
299
+ * How the card separates from its host:
300
+ * - `elevated` (default): lifts `elevation` planes and wears the lift (rim + shadow).
301
+ * - `accent`: as `elevated`, plus a left stripe.
302
+ * - `filled`: lifts `elevation` planes, tone only — for tiles nested in a lifted card.
303
+ * - `outline`: stays on the host plane with a hairline-strong edge — status borders.
304
+ * - `subtle`: stays on the host plane with a hairline-subtle edge.
305
+ */
288
306
  variant?: CardVariant;
289
- /** Elevation level (1=subtle, 2=standard, 3=prominent) */
307
+ /** Planes to lift above the enclosing Surface (default 2: page → the card plane). */
290
308
  elevation?: CardElevation;
291
309
  /** Whether the card is interactive (hoverable/pressable) */
292
310
  isInteractive?: boolean;
@@ -296,7 +314,10 @@ interface CardProps extends ViewProps {
296
314
  onPress?: () => void;
297
315
  /** Custom border color (hex, rgb, or CSS color). Useful for status cards. */
298
316
  borderColor?: string;
299
- /** Custom background color (hex, rgb, or CSS color). Useful for colored cards. */
317
+ /**
318
+ * Custom background color. The one way to override the plane: a `bg-*`
319
+ * className is discarded because the plane is written into `style`.
320
+ */
300
321
  bgColor?: string;
301
322
  /** Accent stripe color for accent variant (CSS color or hex) */
302
323
  accentColor?: string;
@@ -313,7 +334,14 @@ interface CardProps extends ViewProps {
313
334
  skeletonContentLines?: number;
314
335
  }
315
336
  /**
316
- * Card component for containing related content.
337
+ * Card component for containing related content. Sits `elevation` planes above
338
+ * the enclosing Surface and publishes its own plane, so a card nested in a card
339
+ * steps up again (and clamps at the top of the ramp).
340
+ *
341
+ * Lift sparingly: a card lifts off the page, but a small card lifted off a
342
+ * small card reads as clutter. Inside a card, organise with `CardInset`, a
343
+ * `filled` tile, or a divider, and keep a second lift for something that
344
+ * genuinely floats over the first.
317
345
  *
318
346
  * @example
319
347
  * <Card>
@@ -324,14 +352,6 @@ interface CardProps extends ViewProps {
324
352
  * <CardContent>
325
353
  * <Text>Card content goes here</Text>
326
354
  * </CardContent>
327
- * <CardFooter>
328
- * <Button>Action</Button>
329
- * </CardFooter>
330
- * </Card>
331
- *
332
- * // Interactive card
333
- * <Card isInteractive onPress={() => console.log('pressed')}>
334
- * <CardContent>Click me</CardContent>
335
355
  * </Card>
336
356
  */
337
357
  declare function Card({ variant, elevation, isInteractive, isLoading, onPress, borderColor, bgColor, accentColor, accentWidth, className, children, style, skeletonHasHeader, skeletonHasFooter, skeletonContentLines, ...props }: CardProps): react_jsx_runtime.JSX.Element;
@@ -431,7 +451,7 @@ interface BadgeProps extends ViewProps {
431
451
  children?: React__default.ReactNode;
432
452
  }
433
453
  /**
434
- * Badge component for status indicators and labels.
454
+ * Badge a `Pill` preset for status indicators and labels.
435
455
  *
436
456
  * @example
437
457
  * <Badge color="success">Active</Badge>
@@ -528,7 +548,7 @@ interface AvatarGroupProps {
528
548
  /**
529
549
  * Group of avatars with stacking effect.
530
550
  */
531
- declare function AvatarGroup({ children, max, size, className, }: AvatarGroupProps): react_jsx_runtime.JSX.Element;
551
+ declare function AvatarGroup({ children, max, size, className }: AvatarGroupProps): react_jsx_runtime.JSX.Element;
532
552
 
533
553
  type DividerOrientation = 'horizontal' | 'vertical';
534
554
  interface DividerProps extends ViewProps {
@@ -769,7 +789,7 @@ interface SkeletonCircleProps {
769
789
  /**
770
790
  * Circle skeleton for avatars.
771
791
  */
772
- declare function SkeletonCircle({ size, animation, className, }: SkeletonCircleProps): react_jsx_runtime.JSX.Element;
792
+ declare function SkeletonCircle({ size, animation, className }: SkeletonCircleProps): react_jsx_runtime.JSX.Element;
773
793
  interface SkeletonCardProps {
774
794
  /** Show image area */
775
795
  hasImage?: boolean;
@@ -856,7 +876,7 @@ interface TabProps {
856
876
  /**
857
877
  * Individual tab button.
858
878
  */
859
- declare function Tab({ index, isDisabled, className, children, }: TabProps): react_jsx_runtime.JSX.Element;
879
+ declare function Tab({ index, isDisabled, className, children }: TabProps): react_jsx_runtime.JSX.Element;
860
880
  interface TabPanelsProps {
861
881
  children?: React__default.ReactNode;
862
882
  className?: string;
@@ -897,7 +917,7 @@ interface ChipProps extends ViewProps {
897
917
  children?: React__default.ReactNode;
898
918
  }
899
919
  /**
900
- * Chip component for tags, labels, and filters.
920
+ * Chip a `Pill` preset for tags, labels, and filters.
901
921
  *
902
922
  * @example
903
923
  * <Chip>Default</Chip>
@@ -958,7 +978,22 @@ interface TooltipProps extends ViewProps {
958
978
  className?: string;
959
979
  /** Render tooltip via portal to escape overflow:hidden ancestors (web only) */
960
980
  usePortal?: boolean;
981
+ /**
982
+ * Controlled visibility. In this mode the tooltip renders no Pressable of its
983
+ * own, so it can sit inside a pressable row without taking its press; the
984
+ * caller owns hover (see {@link useHoverState}). Needed because RNW ends a
985
+ * wrapper's hover the moment a nested Pressable claims the pointer.
986
+ */
987
+ isOpen?: boolean;
961
988
  }
989
+ /** Hover state from pointer enter/leave on any View, for driving a controlled Tooltip. */
990
+ declare function useHoverState(): {
991
+ hovered: boolean;
992
+ hoverProps: {
993
+ onPointerEnter: () => void;
994
+ onPointerLeave: () => void;
995
+ };
996
+ };
962
997
  /**
963
998
  * Tooltip component for showing additional information on hover/press.
964
999
  *
@@ -975,7 +1010,7 @@ interface TooltipProps extends ViewProps {
975
1010
  * <Button><ButtonText>Hover me</ButtonText></Button>
976
1011
  * </Tooltip>
977
1012
  */
978
- declare function Tooltip({ label, content, children, placement, openDelay, closeDelay, hasArrow, isDisabled, className, usePortal: usePortalProp, ...props }: TooltipProps): react_jsx_runtime.JSX.Element;
1013
+ declare function Tooltip({ label, content, children, placement, openDelay, closeDelay, hasArrow, isDisabled, className, usePortal: usePortalProp, isOpen, ...props }: TooltipProps): react_jsx_runtime.JSX.Element;
979
1014
 
980
1015
  interface CollapseProps extends ViewProps {
981
1016
  /** Whether the collapse is initially open */
@@ -1004,12 +1039,14 @@ interface CollapseProps extends ViewProps {
1004
1039
  declare function Collapse({ defaultIsOpen, isOpen: controlledIsOpen, onToggle, className, children, ...props }: CollapseProps): react_jsx_runtime.JSX.Element;
1005
1040
  interface CollapseButtonProps {
1006
1041
  children?: React__default.ReactNode;
1042
+ /** Accessible name when the button carries no text of its own (a bare chevron). */
1043
+ accessibilityLabel?: string;
1007
1044
  className?: string;
1008
1045
  }
1009
1046
  /**
1010
1047
  * Button to toggle collapse state.
1011
1048
  */
1012
- declare function CollapseButton({ children, className }: CollapseButtonProps): react_jsx_runtime.JSX.Element;
1049
+ declare function CollapseButton({ children, accessibilityLabel, className }: CollapseButtonProps): react_jsx_runtime.JSX.Element;
1013
1050
  interface CollapseContentProps {
1014
1051
  children?: React__default.ReactNode;
1015
1052
  className?: string;
@@ -1334,11 +1371,11 @@ interface ToolbarButtonProps extends ViewProps {
1334
1371
  * ToolbarButton component for toolbar actions with toggle state support.
1335
1372
  *
1336
1373
  * Features:
1337
- * - Neumorphic styling with inset shadows for pressed/raised 3D effect
1374
+ * - Depth from the fill plus the lift (raised) or the inset recess (active)
1338
1375
  * - Active (pressed) state is the default visual appearance
1339
1376
  * - Set isActive={false} explicitly for the raised/inactive appearance
1340
1377
  * - Orange accent color on icon when isActive={true}
1341
- * - Hover states that lighten background and remove shadows
1378
+ * - Hover states that lighten the background
1342
1379
  *
1343
1380
  * @example
1344
1381
  * // Toggle button - orange icon when active
@@ -1821,6 +1858,9 @@ interface HelpTipProps extends ViewProps {
1821
1858
  * <Text>Email Address</Text>
1822
1859
  * <HelpTip content="We'll never share your email with anyone." size="sm" />
1823
1860
  * </View>
1861
+ *
1862
+ * @deprecated Use `Tooltip` (roadmap decision 5) — removed after AW-127
1863
+ * consumer migration.
1824
1864
  */
1825
1865
  declare function HelpTip({ content, size, placement, icon, color, isOpen: controlledIsOpen, hasArrow, maxWidth, iconClassName, tooltipClassName, className, ...props }: HelpTipProps): react_jsx_runtime.JSX.Element;
1826
1866
  interface LabelWithHelpProps extends ViewProps {
@@ -1844,6 +1884,9 @@ interface LabelWithHelpProps extends ViewProps {
1844
1884
  * helpContent="Your API key can be found in the developer settings."
1845
1885
  * isRequired
1846
1886
  * />
1887
+ *
1888
+ * @deprecated Use `Tooltip` beside your own label (roadmap decision 5) —
1889
+ * removed after AW-127 consumer migration.
1847
1890
  */
1848
1891
  declare function LabelWithHelp({ label, helpContent, isRequired, helpSize, className, ...props }: LabelWithHelpProps): react_jsx_runtime.JSX.Element;
1849
1892
 
@@ -1992,16 +2035,18 @@ interface SectionContentProps extends ViewProps {
1992
2035
  declare function SectionContent({ className, children, ...props }: SectionContentProps): react_jsx_runtime.JSX.Element;
1993
2036
 
1994
2037
  interface DataRowProps extends ViewProps {
1995
- /** Descriptive label shown on the left */
1996
- label: string;
2038
+ /** Descriptive label shown on the left -- string renders as Text, ReactNode renders inside a View */
2039
+ label: React__default.ReactNode;
1997
2040
  /** Value shown on the right -- string renders as Text, ReactNode renders inside a View */
1998
2041
  value: React__default.ReactNode;
2042
+ /** Additional className applied to the label element */
2043
+ labelClassName?: string;
1999
2044
  /** Additional className applied to the value element */
2000
2045
  valueClassName?: string;
2001
2046
  /** Additional className applied to the root container */
2002
2047
  className?: string;
2003
2048
  }
2004
- declare function DataRow({ label, value, valueClassName, className, ...props }: DataRowProps): react_jsx_runtime.JSX.Element;
2049
+ declare function DataRow({ label, value, labelClassName, valueClassName, className, ...props }: DataRowProps): react_jsx_runtime.JSX.Element;
2005
2050
 
2006
2051
  type IconBoxColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info' | 'neutral';
2007
2052
  type IconBoxSize = 'sm' | 'md' | 'lg';
@@ -2016,35 +2061,12 @@ interface IconBoxProps extends ViewProps {
2016
2061
  }
2017
2062
  declare function IconBox({ icon: Icon, color, size, className, ...props }: IconBoxProps): react_jsx_runtime.JSX.Element;
2018
2063
 
2019
- /**
2020
- * A Surface's depth on the dark surface ramp. Each addressable level maps to an
2021
- * EXISTING semantic surface/background token (already grounded in the derived
2022
- * surface ramp — TD-surface-tokens S-1 — and theme-aware) — Surface introduces
2023
- * no new hexes. Darkest → lightest:
2024
- * inset (#13100D) < background (#1C1916) < base (#252321) < elevated (#2A2827) < raised (#2D2C2B) < overlay (#302F2E)
2025
- *
2026
- * `frame` is the bezel the ramp sits inside — the top bar / side nav chrome —
2027
- * and the floor a `<Surface pressed>` clamps at (see {@link pressedLevel}).
2028
- *
2029
- * It replaced a separate `inset` level in TD-07.14. That level was RETIRED, not
2030
- * renamed: at ΔE 1.10 from the frame it was an imperceptible duplicate, which is
2031
- * exactly why pressed (surface − 1) kept collapsing into it.
2032
- */
2033
- type SurfaceLevel = 'frame' | 'background' | 'base' | 'elevated' | 'raised' | 'overlay';
2034
2064
  /** On-surface neutral text roles, resolved for the current surface + theme. */
2035
2065
  type OnSurfaceRole = 'primary' | 'secondary' | 'tertiary';
2036
- declare const SURFACE_LEVEL_TOKEN: {
2037
- readonly frame: "background-frame";
2038
- readonly background: "background-base";
2039
- readonly base: "surface-base";
2040
- readonly elevated: "surface-elevated";
2041
- readonly raised: "surface-raised";
2042
- readonly overlay: "surface-overlay";
2043
- };
2044
2066
  interface SurfaceContextValue {
2045
2067
  /** Active theme mode. Defaults to dark (the wall). */
2046
2068
  mode: ThemeMode;
2047
- /** Depth of the nearest enclosing Surface. */
2069
+ /** Plane of the nearest enclosing Surface. */
2048
2070
  level: SurfaceLevel;
2049
2071
  }
2050
2072
  declare const SurfaceContext: React$1.Context<SurfaceContextValue>;
@@ -2054,71 +2076,69 @@ declare function useSurface(): SurfaceContextValue;
2054
2076
  declare function useSurfaceMode(): ThemeMode;
2055
2077
  /**
2056
2078
  * Literal-hex on-surface neutral text colours for a theme mode. Uses
2057
- * `getSemanticColors` (literal hex — the TempoBar pattern), never `resolveColor`
2058
- * (which returns `var()` under the RNW vitest alias), so values stay real in
2059
- * tested component code and on raw-RN surfaces alike.
2079
+ * `getSemanticColors` (literal hex), never `resolveColor` (which returns `var()`
2080
+ * under the RNW vitest alias), so values stay real in tested component code and
2081
+ * on raw-RN surfaces alike.
2060
2082
  */
2061
2083
  declare function onSurfaceColors(mode: ThemeMode): Record<OnSurfaceRole, string>;
2062
2084
  /** Resolve one on-surface text colour for descendants of a Surface. */
2063
2085
  declare function useOnSurfaceColor(role?: OnSurfaceRole): string;
2064
- /** The background hex for a surface level under a theme mode (literal hex). */
2065
- declare function surfaceBackground(level: SurfaceLevel, mode: ThemeMode): string;
2066
- /**
2067
- * The level a `<Surface pressed>` resolves to: its parent's level stepped one
2068
- * index DOWN the ramp — the symmetric twin of a raised surface stepping up —
2069
- * clamped at the `frame` floor so a pressed surface never underflows the bezel.
2070
- * overlay→raised, raised→elevated, elevated→base, base→background,
2071
- * background→frame, frame→frame (clamped).
2072
- * Pressed exposes ONE level of depth only (no pressed-2).
2073
- */
2074
- declare function pressedLevel(parent: SurfaceLevel): SurfaceLevel;
2075
2086
 
2076
- interface SurfaceProps extends ViewProps {
2077
- /**
2078
- * Numeric depth → a computed lighten + shadow (the raised-card model). The
2079
- * background is derived from the base surface by lightening. Ignored for the
2080
- * background when `level` is set. Default 0 (flat card).
2081
- */
2082
- elevation?: ElevationLevel;
2083
- /**
2084
- * Named grey plane (shell / rail / stage). Sets the background directly
2085
- * from a semantic surface token — reaching the darker nav/page planes the
2086
- * lighten model can't — and drops the default rounding + auto shadow so the
2087
- * plane reads full-bleed. Composable with `elevation`'s glow.
2088
- */
2087
+ interface SurfaceDepthProps {
2088
+ /** Absolute plane, for shell roots (shell = background, page = base). No lift. */
2089
2089
  level?: SurfaceLevel;
2090
+ /** Planes to step UP from the enclosing Surface, with the lift treatment. */
2091
+ raise?: 1 | 2 | 3;
2090
2092
  /**
2091
- * Sunken "well": render ONE ramp step DOWN from the parent surface's level —
2092
- * the symmetric twin of a raised surface stepping up and add an inner-shadow
2093
- * recess so the surface reads pressed (darker fill + inset shadow). Relative to
2094
- * the enclosing Surface's level (not this surface's own `level`), and clamped
2095
- * at the ramp's `inset` floor so it never underflows. One level of depth only.
2093
+ * Numeric depth relative to the enclosing Surface: negative recesses, 0 sits
2094
+ * flat on the same plane, 1–3 lift, 4–5 float on the overlay plane.
2096
2095
  */
2096
+ elevation?: ElevationLevel;
2097
+ /** One plane DOWN with an inner-shadow recess. */
2097
2098
  pressed?: boolean;
2099
+ /** Force the lift treatment on or off regardless of the step taken. */
2100
+ lift?: boolean;
2101
+ /** Tune the lift (rim alpha). Specimens and hero surfaces only. */
2102
+ liftOptions?: LiftOptions;
2103
+ /** Override the inherited theme mode. */
2104
+ theme?: ThemeMode;
2105
+ }
2106
+ interface ResolvedSurface {
2107
+ mode: ThemeMode;
2108
+ plane: SurfaceLevel;
2109
+ backgroundColor: string;
2110
+ /** Recess or lift, to compose after `backgroundColor`. */
2111
+ depthStyle: ViewStyle;
2112
+ /** Planes stepped up (0 when flat, pressed, or an absolute plane). */
2113
+ step: number;
2114
+ lifted: boolean;
2115
+ }
2116
+ /** Pure resolution: the plane, its hex, and the treatment. */
2117
+ declare function resolveSurfaceDepth(inherited: SurfaceContextValue, props: SurfaceDepthProps): ResolvedSurface;
2118
+ /** The resolved depth of a container at this point in the tree. */
2119
+ declare function useResolvedSurface(props: SurfaceDepthProps): ResolvedSurface;
2120
+
2121
+ interface SurfaceProps extends ViewProps, SurfaceDepthProps {
2098
2122
  glowColor?: string;
2099
2123
  glowIntensity?: GlowIntensity;
2100
- /**
2101
- * Theme mode. Also seeds the on-surface colour CONTEXT so descendant text /
2102
- * icons resolve their colour from this surface instead of a `text-*` className
2103
- * that silently fails to black on raw RN. Inherits the nearest Surface /
2104
- * ThemeProvider when omitted (default dark — the wall).
2105
- */
2106
- theme?: ThemeMode;
2107
- /** Round the corners. Defaults on for the card model, off for a `level` plane. */
2124
+ /** Round the corners. Defaults on for a lifted or pressed surface, off for an absolute plane. */
2108
2125
  rounded?: boolean;
2109
2126
  className?: string;
2110
2127
  children?: React__default.ReactNode;
2111
2128
  }
2112
2129
  /**
2113
2130
  * A container that OWNS its background and establishes an on-surface colour
2114
- * context. Two grounded ways to pick the background:
2115
- * - `elevation` (numeric): the raised-card model lighten-from-base + shadow.
2116
- * - `level` (named): a flat grey plane straight from a semantic token,
2117
- * for the shell / rail / stage backgrounds.
2118
- * Either way, descendants read the surface via {@link useOnSurfaceColor} /
2119
- * {@link useSurfaceMode} rather than hard-coding `getSemanticColors('dark')`.
2120
- */
2121
- declare function Surface({ elevation, level, pressed, glowColor, glowIntensity, theme, rounded, className, style, children, ...props }: SurfaceProps): react_jsx_runtime.JSX.Element;
2131
+ * context. Depth is relative to the enclosing Surface:
2132
+ * - `raise` / positive `elevation`: step up the ramp and wear the lift
2133
+ * treatment (rim-light + ambient shadow). Clamps at `overlay`.
2134
+ * - `pressed` / negative `elevation`: step down with an inner-shadow recess.
2135
+ * - `level` (absolute): a flat grey plane straight from a token, for shell
2136
+ * roots only (shell = background, page = base). No lift.
2137
+ * - nothing: sit flat on the inherited plane.
2138
+ * Descendants read the surface via {@link useOnSurfaceColor} / {@link useSurfaceMode}
2139
+ * rather than hard-coding `getSemanticColors('dark')`.
2140
+ */
2141
+ declare function Surface({ elevation, level, raise, pressed, lift, liftOptions, glowColor, glowIntensity, theme, rounded, className, style, children, ...props }: SurfaceProps): react_jsx_runtime.JSX.Element;
2122
2142
 
2123
2143
  interface ListItemProps extends PressableProps {
2124
2144
  className?: string;
@@ -2150,28 +2170,55 @@ interface ListItemDividerProps extends ViewProps {
2150
2170
  }
2151
2171
  declare function ListItemDivider({ inset, className, ...props }: ListItemDividerProps): react_jsx_runtime.JSX.Element;
2152
2172
 
2153
- type PillVariant = 'subtle' | 'outline';
2173
+ type PillVariant = 'solid' | 'subtle' | 'outline';
2174
+ /** Semantic tone. `brand-secondary` is the accent, not a second brand. */
2175
+ type PillTone = 'neutral' | 'brand' | 'brand-secondary' | 'success' | 'warning' | 'error' | 'info';
2176
+ /** Legacy palette names, kept so existing `color=` call sites keep working. */
2154
2177
  type PillColor = 'default' | 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info';
2155
- type PillSize = 'xs' | 'sm' | 'md';
2178
+ type PillSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
2156
2179
  interface PillProps extends ViewProps {
2157
2180
  /** Pill content */
2158
- children: React__default.ReactNode;
2181
+ children?: React__default.ReactNode;
2159
2182
  /** Visual variant */
2160
2183
  variant?: PillVariant;
2161
- /** Color scheme */
2184
+ /** Semantic tone */
2185
+ tone?: PillTone;
2186
+ /** @deprecated Use `tone` — `color` maps onto it and is kept for call-site compatibility. */
2162
2187
  color?: PillColor;
2163
2188
  /** Size */
2164
2189
  size?: PillSize;
2165
2190
  /** Fully rounded (default true) or slight radius */
2166
2191
  rounded?: boolean;
2167
- /** Element before the label (e.g., Indicator dot) */
2192
+ /** Leading slot: `'dot'` renders a tone-matched dot, any node renders as-is. */
2193
+ leading?: React__default.ReactNode | 'dot';
2194
+ /**
2195
+ * Colour the leading dot independently of the capsule. For the pattern where
2196
+ * the label is neutral and only the dot carries status, so a row of chips
2197
+ * stays quiet and the dots are the signal.
2198
+ */
2199
+ dotTone?: PillTone;
2200
+ /** @deprecated Use `leading`. */
2168
2201
  leftElement?: React__default.ReactNode;
2202
+ /** Trailing slot (dismiss affordance, counter) */
2203
+ trailing?: React__default.ReactNode;
2169
2204
  /** Press handler (makes pill interactive) */
2170
2205
  onPress?: () => void;
2171
- /** Additional className */
2206
+ /** Non-interactive and dimmed */
2207
+ isDisabled?: boolean;
2208
+ /** Additional className on the container */
2172
2209
  className?: string;
2210
+ /** Additional className on the label, for presets that own their typography */
2211
+ textClassName?: string;
2173
2212
  }
2174
- declare function Pill({ children, variant, color, size, rounded, leftElement, onPress, className, ...props }: PillProps): react_jsx_runtime.JSX.Element;
2213
+ /**
2214
+ * The single pill primitive: a capsule of tone-coloured label with optional
2215
+ * leading and trailing slots. `Badge`, `Chip`, `StatusPill` and
2216
+ * `MuscleGroupChip` are presets over it.
2217
+ *
2218
+ * @example
2219
+ * <Pill tone="success" leading="dot">Active</Pill>
2220
+ */
2221
+ declare function Pill(props: PillProps): react_jsx_runtime.JSX.Element;
2175
2222
 
2176
2223
  interface TileProps extends ViewProps {
2177
2224
  /** Uppercase micro-label shown above the value */
@@ -2194,10 +2241,13 @@ interface TileProps extends ViewProps {
2194
2241
  * @example
2195
2242
  * <Tile label="Volume" value="76%" />
2196
2243
  * <Tile label="Fatigue" value="MOD" valueColor="#F5A623" />
2244
+ *
2245
+ * @deprecated Use the `Card` stat preset (roadmap decision 1) — removed after
2246
+ * AW-127 consumer migration.
2197
2247
  */
2198
2248
  declare function Tile({ label, value, valueColor, align, className, ...props }: TileProps): react_jsx_runtime.JSX.Element;
2199
2249
 
2200
- type TypographyVariant = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'body1' | 'body2' | 'subtitle1' | 'subtitle2' | 'caption' | 'overline' | 'button' | 'mono' | 'monoLabel';
2250
+ type TypographyVariant = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'body1' | 'body2' | 'subtitle1' | 'subtitle2' | 'caption' | 'overline' | 'button' | 'mono' | 'monoLabel' | 'microLabel' | 'boldLabel';
2201
2251
  type TypographyColor = 'primary' | 'secondary' | 'tertiary' | 'disabled' | 'inverse' | 'success' | 'error' | 'warning' | 'info' | 'inherit';
2202
2252
  type TypographyAlign = 'left' | 'center' | 'right' | 'justify';
2203
2253
  type TypographyMarginBottom = 'none' | 'sm' | 'md' | 'lg';
@@ -2378,6 +2428,12 @@ interface SidebarDividerProps {
2378
2428
  declare function SidebarDivider({ className }: SidebarDividerProps): react_jsx_runtime.JSX.Element;
2379
2429
 
2380
2430
  type SortDirection = 'asc' | 'desc' | null;
2431
+ /**
2432
+ * Row height / cell padding axis. `comfortable` is the default reading density;
2433
+ * `dense` is the scannable-grid density for tables whose job is to fit many rows
2434
+ * on screen at once (a backlog, a log, an audit list).
2435
+ */
2436
+ type TableDensity = 'comfortable' | 'dense';
2381
2437
  interface TableProps extends ViewProps {
2382
2438
  /** Currently sorted column */
2383
2439
  sortColumn?: string;
@@ -2399,6 +2455,14 @@ interface TableProps extends ViewProps {
2399
2455
  isLoading?: boolean;
2400
2456
  /** Number of skeleton rows to show when loading */
2401
2457
  loadingRowCount?: number;
2458
+ /** Row height / cell padding. Defaults to `comfortable`. */
2459
+ density?: TableDensity;
2460
+ /**
2461
+ * Width the columns need, below which the table scrolls horizontally instead
2462
+ * of squeezing them into overlap. Pair with {@link useColumnFit}, which drops
2463
+ * columns first and reports what the survivors need.
2464
+ */
2465
+ contentMinWidth?: number;
2402
2466
  /** Additional className */
2403
2467
  className?: string;
2404
2468
  children?: React__default.ReactNode;
@@ -2426,7 +2490,7 @@ interface TableProps extends ViewProps {
2426
2490
  * </TableBody>
2427
2491
  * </Table>
2428
2492
  */
2429
- declare function Table({ sortColumn, sortDirection, onSort, selectedRows, onSelectRow, onSelectAll, selectable, rowIds, isLoading, loadingRowCount, className, children, ...props }: TableProps): react_jsx_runtime.JSX.Element;
2493
+ declare function Table({ sortColumn, sortDirection, onSort, selectedRows, onSelectRow, onSelectAll, selectable, rowIds, isLoading, loadingRowCount, density, contentMinWidth, className, children, ...props }: TableProps): react_jsx_runtime.JSX.Element;
2430
2494
  interface TableHeaderProps {
2431
2495
  children?: React__default.ReactNode;
2432
2496
  className?: string;
@@ -2459,6 +2523,8 @@ declare function TableRow({ isSelected, isHoverable, className, children, ...pro
2459
2523
  interface TableHeaderCellProps extends Omit<PressableProps, 'children'> {
2460
2524
  /** Sort key for this column */
2461
2525
  sortKey?: string;
2526
+ /** Full column name behind an abbreviated label: shown on hover and used as the accessible sort name. */
2527
+ tooltip?: string;
2462
2528
  /** Text alignment */
2463
2529
  align?: 'left' | 'center' | 'right';
2464
2530
  /** Cell width in pixels */
@@ -2470,7 +2536,7 @@ interface TableHeaderCellProps extends Omit<PressableProps, 'children'> {
2470
2536
  /**
2471
2537
  * Table header cell with optional sorting.
2472
2538
  */
2473
- declare function TableHeaderCell({ sortKey, align, width, className, children, onPress, ...props }: TableHeaderCellProps): react_jsx_runtime.JSX.Element;
2539
+ declare function TableHeaderCell({ sortKey, tooltip, align, width, className, children, onPress, ...props }: TableHeaderCellProps): react_jsx_runtime.JSX.Element;
2474
2540
  interface TableCellProps extends ViewProps {
2475
2541
  /** Text alignment */
2476
2542
  align?: 'left' | 'center' | 'right';
@@ -2513,11 +2579,24 @@ interface TablePaginationProps {
2513
2579
  * />
2514
2580
  */
2515
2581
  declare function TablePagination({ page, pageSize, totalItems, pageSizeOptions, onPageChange, onPageSizeChange, className, }: TablePaginationProps): react_jsx_runtime.JSX.Element;
2582
+ /**
2583
+ * An ascending comparator for one column. Returning 0 lets the caller express a
2584
+ * tie-break inside the same function; `useTable` inverts the result for `desc`
2585
+ * rather than reversing the array, so ties keep their relative order both ways.
2586
+ */
2587
+ type TableComparator<T> = (a: T, b: T) => number;
2516
2588
  interface UseTableOptions<T> {
2517
2589
  data: T[];
2518
2590
  defaultPageSize?: number;
2519
2591
  defaultSortColumn?: string;
2520
2592
  defaultSortDirection?: SortDirection;
2593
+ /**
2594
+ * Per-column ascending comparators, for columns whose order is not their raw
2595
+ * field order — a severity ranked critical→low rather than alphabetically, a
2596
+ * numeric field that should sort blanks last, a date read newest-first.
2597
+ * Columns absent from the map fall back to the default field compare.
2598
+ */
2599
+ comparators?: Partial<Record<keyof T & string, TableComparator<T>>> & Record<string, TableComparator<T> | undefined>;
2521
2600
  }
2522
2601
  interface UseTableReturn<T> {
2523
2602
  sortedData: T[];
@@ -2545,7 +2624,75 @@ interface UseTableReturn<T> {
2545
2624
  * defaultPageSize: 10,
2546
2625
  * })
2547
2626
  */
2548
- declare function useTable<T extends Record<string, any>>({ data, defaultPageSize, defaultSortColumn, defaultSortDirection, }: UseTableOptions<T>): UseTableReturn<T>;
2627
+ declare function useTable<T extends Record<string, any>>({ data, defaultPageSize, defaultSortColumn, defaultSortDirection, comparators, }: UseTableOptions<T>): UseTableReturn<T>;
2628
+
2629
+ /**
2630
+ * One column's terms for the fit calculation: how much room it needs, and where
2631
+ * it sits in the drop order.
2632
+ */
2633
+ interface TableColumnFit {
2634
+ /** Matches the key the caller renders the column under. */
2635
+ key: string;
2636
+ /**
2637
+ * Narrowest width in px at which the column still reads — its header label
2638
+ * plus the sort affordance, or its content, whichever is wider. Real numbers
2639
+ * matter here: the fit is arithmetic over these, not a guess at a breakpoint.
2640
+ */
2641
+ minWidth: number;
2642
+ /**
2643
+ * Drop order: the lowest number leaves first. A column with no `dropPriority`
2644
+ * never drops, which is what keeps the identifying columns on screen when the
2645
+ * table runs out of room.
2646
+ */
2647
+ dropPriority?: number;
2648
+ }
2649
+ interface ColumnFitResult {
2650
+ /** The keys still rendered, in declaration order. */
2651
+ visibleKeys: string[];
2652
+ /** What the survivors need. Hand to `Table`'s `contentMinWidth`. */
2653
+ contentMinWidth: number;
2654
+ /** Nothing droppable is left and the survivors still overflow: the table scrolls. */
2655
+ isScrolling: boolean;
2656
+ }
2657
+ /**
2658
+ * Drops columns one at a time in the declared order until the rest fit, then
2659
+ * stops. Dropping cannot take an undroppable column, so once those are all that
2660
+ * is left the table overflows on purpose and scrolls horizontally — scroll is
2661
+ * the floor under dropping, not an alternative to it.
2662
+ *
2663
+ * `available` of `null` means "not measured yet": everything renders.
2664
+ */
2665
+ declare function fitColumns(columns: TableColumnFit[], available: number | null): ColumnFitResult;
2666
+ interface UseMeasuredWidthResult {
2667
+ /** The measured width, or `null` until the first layout pass. */
2668
+ width: number | null;
2669
+ onLayout: (event: LayoutChangeEvent) => void;
2670
+ }
2671
+ /**
2672
+ * The width of whatever it is attached to, from the `onLayout` pass every other
2673
+ * width-aware table here already uses — no resize observer, and no window
2674
+ * width standing in for a column that lives inside a much narrower card.
2675
+ *
2676
+ * `override` pins the width instead of measuring, so a story or a test can hold
2677
+ * one breakpoint still.
2678
+ */
2679
+ declare function useMeasuredWidth(override?: number): UseMeasuredWidthResult;
2680
+ interface UseColumnFitResult extends ColumnFitResult {
2681
+ isVisible: (key: string) => boolean;
2682
+ }
2683
+ /**
2684
+ * {@link fitColumns} as a hook, with a membership test for the render pass.
2685
+ *
2686
+ * @example
2687
+ * const { width, onLayout } = useMeasuredWidth()
2688
+ * const fit = useColumnFit(COLUMNS, width)
2689
+ * <View onLayout={onLayout}>
2690
+ * <Table contentMinWidth={fit.contentMinWidth}>
2691
+ * {COLUMNS.filter((c) => fit.isVisible(c.key)).map(renderColumn)}
2692
+ * </Table>
2693
+ * </View>
2694
+ */
2695
+ declare function useColumnFit(columns: TableColumnFit[], available: number | null): UseColumnFitResult;
2549
2696
 
2550
2697
  interface EmptyStateProps extends ViewProps {
2551
2698
  /** Icon component to display */
@@ -2826,6 +2973,9 @@ interface BaseBadgeProps extends ViewProps {
2826
2973
  className?: string;
2827
2974
  children?: ReactNode;
2828
2975
  }
2976
+ /**
2977
+ * @deprecated Use `<Pill tone="…" variant="…">` — removed after AW-127 consumer migration.
2978
+ */
2829
2979
  declare function BaseBadge({ variant, size, icon, onPress, className, children, ...props }: BaseBadgeProps): react_jsx_runtime.JSX.Element;
2830
2980
 
2831
2981
  type WeightBadgeSize = BaseBadgeSize;
@@ -2846,6 +2996,9 @@ interface WeightBadgeProps extends Omit<BaseBadgeProps, 'variant' | 'icon' | 'ch
2846
2996
  onPress?: () => void;
2847
2997
  className?: string;
2848
2998
  }
2999
+ /**
3000
+ * @deprecated Use `<Pill tone="neutral">` — removed after AW-127 consumer migration.
3001
+ */
2849
3002
  declare function WeightBadge({ value, unit, reps, delta, isPr, showIcon, size, onPress, className, ...props }: WeightBadgeProps): react_jsx_runtime.JSX.Element;
2850
3003
 
2851
3004
  type PRType = 'e1rm' | 'weight' | 'reps' | 'volume' | 'velocity';
@@ -2961,6 +3114,10 @@ interface MuscleGroupChipProps extends ViewProps {
2961
3114
  onPress?: () => void;
2962
3115
  className?: string;
2963
3116
  }
3117
+ /**
3118
+ * MuscleGroupChip — a `Pill` preset that labels a muscle group with a
3119
+ * volume-status dot. The dot tone is the pill's tone; the capsule stays neutral.
3120
+ */
2964
3121
  declare function MuscleGroupChip({ name, volumeStatus, onPress, className, ...props }: MuscleGroupChipProps): react_jsx_runtime.JSX.Element;
2965
3122
 
2966
3123
  interface SparklineProps extends ViewProps {
@@ -3029,6 +3186,10 @@ interface MetricCellProps {
3029
3186
  color: string;
3030
3187
  fontSize?: number;
3031
3188
  }
3189
+ /**
3190
+ * @deprecated Use `<Metric size="…" align="…">` (roadmap decision 11) — removed
3191
+ * after AW-127 consumer migration.
3192
+ */
3032
3193
  declare function MetricCell({ children, color, fontSize }: MetricCellProps): react_jsx_runtime.JSX.Element;
3033
3194
 
3034
3195
  interface SetsRepsLoadProps extends ViewProps {
@@ -3054,13 +3215,16 @@ interface SegmentedBarSegment {
3054
3215
  weight?: number;
3055
3216
  /** Fraction 0..1 of the slot the coloured fill covers, left-aligned. Default 1 (full). */
3056
3217
  fill?: number;
3057
- /** Fill colour — a literal hex (RNW-safe), never a `var()` token ref. */
3218
+ /** Fill colour. Pass `resolveColor(token)` — a plain fill takes a `var()` ref fine. */
3058
3219
  color: string;
3059
3220
  /** When true the fill animates on the shared active-pulse loop. */
3060
3221
  pulse?: boolean;
3061
3222
  /**
3062
3223
  * When pulsing, interpolate the fill's `backgroundColor` from→to over the loop
3063
3224
  * (full opacity). Omit to fall back to the default opacity breathe.
3225
+ *
3226
+ * Literal hex only: `Animated.interpolate` parses these two endpoints itself
3227
+ * and cannot read a `var()` ref, so `resolveColor(token)` does not work here.
3064
3228
  */
3065
3229
  pulseColor?: [from: string, to: string];
3066
3230
  /**
@@ -3100,7 +3264,8 @@ interface SegmentedBarProps extends ViewProps {
3100
3264
  * presentational atom the per-set strips are built from. Each segment is a flex
3101
3265
  * slot (flex = `weight`) holding a left-aligned fill (`fill` fraction, `color`);
3102
3266
  * `pulse` segments breathe on a shared active-pulse loop, and `marker` drops a
3103
- * vertical line at a fraction of the total width. Colours are passed-in literal hex.
3267
+ * vertical line at a fraction of the total width. Every colour is injected by the
3268
+ * composer, so this atom holds no palette of its own.
3104
3269
  */
3105
3270
  declare function SegmentedBar({ segments, height, gap, radius, marker, segmentTestID, style, ...props }: SegmentedBarProps): react_jsx_runtime.JSX.Element;
3106
3271
 
@@ -3186,8 +3351,8 @@ interface ScheduleTilesProps extends ViewProps {
3186
3351
  * ScheduleTiles — Date / Time / Until row for an upcoming session.
3187
3352
  *
3188
3353
  * An HStack of three {@link Tile}s derived from a single scheduled moment. The
3189
- * Until value reuses {@link formatDateTime} relative formatting and turns
3190
- * accent-orange only when the session is less than a day away.
3354
+ * Until value reuses {@link formatDateTime} relative formatting and takes the
3355
+ * `brand-primary` accent only when the session is less than a day away.
3191
3356
  *
3192
3357
  * @example
3193
3358
  * <ScheduleTiles when={Date.now() + 5 * 60 * 60 * 1000} />
@@ -3378,10 +3543,11 @@ declare function SessionRail({ title, exercises, setsDone, elapsedMs, budgetMs,
3378
3543
 
3379
3544
  interface SupersetWrapperProps {
3380
3545
  label?: string;
3546
+ /** Rail and label-chip colour. Defaults to the `brand-primary` token. */
3381
3547
  color?: string;
3382
3548
  children: React__default.ReactNode;
3383
3549
  }
3384
- declare function SupersetWrapper({ label, color, children, }: SupersetWrapperProps): react_jsx_runtime.JSX.Element;
3550
+ declare function SupersetWrapper({ label, color, children }: SupersetWrapperProps): react_jsx_runtime.JSX.Element;
3385
3551
 
3386
3552
  type PrRecordType = 'e1rm' | 'weight' | 'reps' | 'volume' | 'velocity';
3387
3553
  interface PrRecord {
@@ -3650,12 +3816,11 @@ interface StatusPillProps extends ViewProps {
3650
3816
  /** Resolved semantic color for a verdict status. */
3651
3817
  declare function statusPillColor(status: StatusPillStatus): string;
3652
3818
  /**
3653
- * Verdict pill: a glowing status dot + colored verdict text, in a tinted,
3654
- * bordered capsule. Composes {@link StatusDot} for the dot so the glow/color
3655
- * stays consistent with the atom. Tint and border are derived from the same
3656
- * semantic token via `alpha()` — no per-status raw hex.
3819
+ * Verdict pill: a glowing status dot + coloured verdict text in a tinted
3820
+ * capsule. A `Pill` preset tone, tint and border all come from the pill's
3821
+ * semantic tone, so no per-status colour is computed here.
3657
3822
  */
3658
- declare function StatusPill({ status, label, className, style, ...props }: StatusPillProps): react_jsx_runtime.JSX.Element;
3823
+ declare function StatusPill({ status, label, className, ...props }: StatusPillProps): react_jsx_runtime.JSX.Element;
3659
3824
 
3660
3825
  /**
3661
3826
  * Coaching-category flood level for the live surface. Mirrors {@link StatusPill}:
@@ -3806,14 +3971,6 @@ interface LiveFatigueModel {
3806
3971
  targetTempoSeconds: [number, number, number, number] | null;
3807
3972
  }
3808
3973
 
3809
- interface LiveFatiguePanelHeader {
3810
- /** Exercise name — the large title. */
3811
- title: string;
3812
- /** Prescription / block line under the title. */
3813
- subtitle?: string;
3814
- /** Right-aligned progress meta, e.g. "SET 3 · REP 7 / 8". */
3815
- meta?: string;
3816
- }
3817
3974
  interface LiveFatiguePanelVelocity {
3818
3975
  /** Per-rep MEAN concentric velocity (m/s), ordered by rep. */
3819
3976
  velocities: number[];
@@ -3825,16 +3982,91 @@ interface LiveFatiguePanelProps {
3825
3982
  model: LiveFatigueModel;
3826
3983
  /** The velocity-hero data (its own source — not on the fatigue model). */
3827
3984
  velocity: LiveFatiguePanelVelocity;
3828
- /** Optional lite exercise header. Omitted → no header row. */
3829
- header?: LiveFatiguePanelHeader;
3830
3985
  /** Aura-flood category. Defaults to the verdict-derived category. */
3831
3986
  aura?: LiveAuraCategory;
3832
3987
  /** Panel body height in px. Default 508. */
3833
3988
  bodyHeight?: number;
3834
- /** Fixed fatigue-card column width. Default 318. */
3989
+ /**
3990
+ * Pin the fatigue-card column width instead of letting the tier choose it. Ignored when
3991
+ * the panel is stacked (the card fills the content width there).
3992
+ */
3835
3993
  cardWidth?: number;
3994
+ /**
3995
+ * Override the measured container width, in px. The panel measures itself, so this is
3996
+ * for tests (`onLayout` never fires under jsdom) and for a consumer that already knows
3997
+ * the width it is about to hand the panel.
3998
+ */
3999
+ containerWidth?: number;
3836
4000
  }
3837
- declare function LiveFatiguePanel({ model, velocity, header, aura, bodyHeight, cardWidth, }: LiveFatiguePanelProps): react_jsx_runtime.JSX.Element;
4001
+ declare function LiveFatiguePanel({ model, velocity, aura, bodyHeight, cardWidth, containerWidth, }: LiveFatiguePanelProps): react_jsx_runtime.JSX.Element;
4002
+
4003
+ /** titan's breakpoint scale, re-exported as the panel's tier edges. Sourced, not chosen. */
4004
+ declare const PANEL_BREAKPOINTS: {
4005
+ readonly xs: 0;
4006
+ readonly sm: 600;
4007
+ readonly md: 1000;
4008
+ readonly lg: 1200;
4009
+ readonly xl: 1920;
4010
+ };
4011
+ type PanelTier = keyof typeof PANEL_BREAKPOINTS;
4012
+ /**
4013
+ * The tier for a measured container width. An unmeasured container (0, before the first
4014
+ * `onLayout`) resolves to `md` — today's side-by-side geometry — so the first paint matches
4015
+ * what the panel has always rendered rather than flashing a stacked layout.
4016
+ */
4017
+ declare function panelTier(width: number): PanelTier;
4018
+ /** titan's long-standing card column width, and the floor every wider tier clamps to. */
4019
+ declare const CARD_WIDTH_BASE = 318;
4020
+ /**
4021
+ * CHOSEN. At wall width a 318px card is ~17% of the content row against ~34% at the `md`
4022
+ * edge, so it reads as a sliver beside the hero. 0.22 pulls it back toward the `md`
4023
+ * proportion without letting the hero lose its lead.
4024
+ */
4025
+ declare const CARD_WIDTH_XL_RATIO = 0.22;
4026
+ /**
4027
+ * CHOSEN. The cap. The card's internal charts (`RomProgressionChart`, `GhostSpark`) were
4028
+ * drawn around ~318 and go sparse rather than richer past roughly 1.5x that, so the
4029
+ * expansion stops at 460 (reached at 2091px) instead of tracking the container forever.
4030
+ */
4031
+ declare const CARD_WIDTH_MAX = 460;
4032
+ /**
4033
+ * CHOSEN. Stacked, the CARD takes the larger share of the one body height. Its sections
4034
+ * have hard floors — the verdict hero, the three lights, the ROM chart and the ghost spark —
4035
+ * while the velocity hero is a bar plot that scales continuously, so squeezing the hero
4036
+ * degrades gracefully and squeezing the card overflows it.
4037
+ */
4038
+ declare const CARD_HEIGHT_SHARE_STACKED = 0.55;
4039
+ /** What the hero reserves above its plot for the `VELOCITY · this set` eyebrow, px. */
4040
+ declare const HERO_EYEBROW_ALLOWANCE = 26;
4041
+ interface PanelLayout {
4042
+ tier: PanelTier;
4043
+ /** Card below the hero rather than beside it. */
4044
+ stacked: boolean;
4045
+ /** Uniform padding around the body row, px. */
4046
+ padding: number;
4047
+ /** Gap between the hero and the card, px — column gap when row, row gap when stacked. */
4048
+ gap: number;
4049
+ /**
4050
+ * Card width, px. Stacked, this is the full content width, so the card takes a real
4051
+ * number rather than needing a second `onLayout` of its own to size its charts.
4052
+ */
4053
+ cardWidth: number;
4054
+ }
4055
+ /** The whole layout for a measured container width. */
4056
+ declare function panelLayout(width: number): PanelLayout;
4057
+ interface PanelBodySplit {
4058
+ /** Height handed to the velocity hero's plot, px. */
4059
+ heroHeight: number;
4060
+ /** Height handed to the fatigue card, px. */
4061
+ cardHeight: number;
4062
+ }
4063
+ /**
4064
+ * The ONE body height split across the hero and the card (TD-03.60). Side by side both
4065
+ * take the full height; stacked they share it by {@link CARD_HEIGHT_SHARE_STACKED} with the
4066
+ * gap taken out first, and neither drops below its floor. Either way both numbers come from
4067
+ * this one call, so changing `bodyHeight` moves both or neither.
4068
+ */
4069
+ declare function panelBodySplit(bodyHeight: number, layout: PanelLayout): PanelBodySplit;
3838
4070
 
3839
4071
  interface LiveFatigueCardProps {
3840
4072
  /** The live fatigue read-model for the current set. */
@@ -4188,18 +4420,925 @@ interface GaugeProps extends Omit<ViewProps, 'children'> {
4188
4420
  */
4189
4421
  declare function Gauge({ value, min, max, size, label, unit, thresholds, color, className, ...props }: GaugeProps): react_jsx_runtime.JSX.Element;
4190
4422
 
4423
+ interface SparkBarsProps extends Omit<ViewProps, 'accessibilityLabel'> {
4424
+ /** The series, oldest first. Negative values draw in `negativeColor`. */
4425
+ values: number[];
4426
+ /** Overall bar-field height in px. */
4427
+ height?: number;
4428
+ /** Width of a single bar in px. */
4429
+ barWidth?: number;
4430
+ /** Gap between bars in px. */
4431
+ gap?: number;
4432
+ /** Keep only the last N values — a sparkline is a recent-history glance, not an archive. */
4433
+ maxBars?: number;
4434
+ /** Fill for non-negative bars. Defaults to `result-improve`. */
4435
+ color?: string;
4436
+ /** Fill for negative bars. Defaults to `result-degrade`. */
4437
+ negativeColor?: string;
4438
+ /** Screen-reader description. Defaults to a bar count. */
4439
+ label?: string;
4440
+ className?: string;
4441
+ }
4442
+ /**
4443
+ * SparkBars — a tiny bar-mark sparkline for a signed series.
4444
+ *
4445
+ * The bar-mark counterpart to {@link Sparkline}: where a line reads a
4446
+ * *trajectory*, bars read *discrete per-period magnitude*, which is what
4447
+ * per-session activity and per-session net growth actually are. Bars are scaled
4448
+ * by absolute value so a negative period is as tall as an equally large
4449
+ * positive one, and tinted with `negativeColor` to carry the sign.
4450
+ *
4451
+ * @example
4452
+ * <SparkBars values={[3, 8, -2, 14]} height={22} />
4453
+ */
4454
+ declare function SparkBars({ values, height, barWidth, gap, maxBars, color, negativeColor, label, className, ...props }: SparkBarsProps): react_jsx_runtime.JSX.Element;
4455
+
4456
+ interface EyebrowProps {
4457
+ children: ReactNode;
4458
+ className?: string;
4459
+ }
4460
+ /**
4461
+ * Eyebrow — an uppercase micro-label used above a value or a section of
4462
+ * content (e.g. "Focused · by rank", a stat tile's caption). Composes
4463
+ * {@link Typography}'s `overline` variant; never hand-roll the letter-spacing.
4464
+ */
4465
+ declare function Eyebrow({ children, className }: EyebrowProps): react_jsx_runtime.JSX.Element;
4466
+
4467
+ /** How much a task hurts if left undone. Ordered worst-first by {@link SEVERITY_RANK}. */
4468
+ type TaskSeverity = 'critical' | 'high' | 'medium' | 'low';
4469
+ /**
4470
+ * Sort weight per severity, worst-first. Exported so a table can rank a severity
4471
+ * column by meaning rather than alphabetically ("critical" < "high" < "low" as
4472
+ * strings puts low in the middle).
4473
+ */
4474
+ declare const SEVERITY_RANK: Record<TaskSeverity, number>;
4475
+ /** Severities worst-first — the canonical order for legends and pickers. */
4476
+ declare const SEVERITY_ORDER: TaskSeverity[];
4477
+ /** Rank for a possibly-absent severity; unset sorts after every real value. */
4478
+ declare function severityRank(severity?: TaskSeverity): number;
4479
+ /**
4480
+ * Severity to its display label and {@link Indicator} colour. Critical and high
4481
+ * both read as error; the vivid step separates "drop everything" from "serious".
4482
+ */
4483
+ declare const SEVERITY_META: Record<TaskSeverity, {
4484
+ label: string;
4485
+ dot: React.ComponentProps<typeof Indicator>['color'];
4486
+ }>;
4487
+ /**
4488
+ * Severity as a fill for an area mark (a {@link SegmentedBar} segment), where
4489
+ * {@link SEVERITY_META} gives the point-mark dot colour.
4490
+ *
4491
+ * `low` diverges deliberately: as a dot among four it needs to stay legible, but
4492
+ * as a bar segment it should recede, so it takes `text-tertiary` rather than
4493
+ * `status-info`. Both live here so the severity vocabulary has one owner.
4494
+ */
4495
+ declare const SEVERITY_BAR_COLOR: Record<TaskSeverity, string>;
4496
+ interface SeverityLabelProps {
4497
+ /** Omitted renders the em-dash placeholder rather than nothing, so columns stay aligned. */
4498
+ severity?: TaskSeverity;
4499
+ /** Hides the text, leaving only the dot — for a legend key or a very tight column. */
4500
+ dotOnly?: boolean;
4501
+ className?: string;
4502
+ }
4503
+ /**
4504
+ * SeverityLabel — a task's severity as a coloured dot plus its label.
4505
+ *
4506
+ * Composes {@link Indicator}; never hand-roll a status dot (there are already two
4507
+ * dot primitives in the system, and this is not a third). Used by
4508
+ * {@link TaskRow} and {@link TaskTable}'s legend.
4509
+ *
4510
+ * @deprecated Use `<Pill tone="…" leading="dot">` — removed after AW-127 consumer migration.
4511
+ */
4512
+ declare function SeverityLabel({ severity, dotOnly, className }: SeverityLabelProps): react_jsx_runtime.JSX.Element;
4513
+
4514
+ type InitiativeState = 'focused' | 'backburner' | 'paused' | 'done';
4515
+ /** Initiative state → label + {@link StatusDot} variant. One owner; the initiative header reads it too. */
4516
+ declare const INITIATIVE_STATE_META: Record<InitiativeState, {
4517
+ label: string;
4518
+ dot: StatusDotVariant;
4519
+ }>;
4520
+ interface InitiativeCardTopTask {
4521
+ id: string;
4522
+ title: string;
4523
+ }
4524
+ interface InitiativeCardProps extends ViewProps {
4525
+ /** Initiative title, e.g. "active-work — durable workspace state". */
4526
+ title: string;
4527
+ /** Short slug shown under the title, e.g. "active-work". */
4528
+ slug: string;
4529
+ /** Lifecycle state — drives the status dot and card accent. */
4530
+ state: InitiativeState;
4531
+ /** Focused rank (1-based). Omit for non-ranked states. */
4532
+ rank?: number;
4533
+ /** Ship-target label, e.g. "2026-Q3". */
4534
+ shipTarget?: string;
4535
+ /** Count of open tasks for this initiative. */
4536
+ openCount: number;
4537
+ /** Open-task counts by severity, driving the segmented mix bar. Bar is omitted when all-zero. */
4538
+ severityCounts: Record<TaskSeverity, number>;
4539
+ /** The highest-priority open task, if any. Renders "no open tasks" when omitted. */
4540
+ topTask?: InitiativeCardTopTask;
4541
+ className?: string;
4542
+ }
4543
+ /**
4544
+ * InitiativeCard — an at-a-glance summary of one active-work initiative: state,
4545
+ * rank, open-task count, a severity-mix bar, and its top-priority open task.
4546
+ * Composes Card / Pill / StatusDot / SegmentedBar / Typography — never
4547
+ * hand-rolled. Used by {@link PortfolioOverview}.
4548
+ *
4549
+ * Sits on the card plane above the page like every other content card; the
4550
+ * `accent` stripe is reserved for the focused state, where it carries meaning.
4551
+ */
4552
+ declare function InitiativeCard({ title, slug, state, rank, shipTarget, openCount, severityCounts, topTask, className, ...props }: InitiativeCardProps): react_jsx_runtime.JSX.Element;
4553
+
4554
+ interface PortfolioOverviewStat {
4555
+ value: string;
4556
+ label: string;
4557
+ }
4558
+ interface PortfolioOverviewSection {
4559
+ /** Section eyebrow, e.g. "Focused · by rank" or "Backburner". */
4560
+ heading: string;
4561
+ items: InitiativeCardProps[];
4562
+ }
4563
+ interface PortfolioOverviewProps extends ViewProps {
4564
+ title: string;
4565
+ subtitle?: string;
4566
+ /** KPI tiles rendered above the sections, e.g. Focused / Open tasks / Initiatives. */
4567
+ stats: PortfolioOverviewStat[];
4568
+ /** Initiative groups, rendered top-to-bottom in the order given. */
4569
+ sections: PortfolioOverviewSection[];
4570
+ className?: string;
4571
+ }
4572
+ /**
4573
+ * PortfolioOverview — at-a-glance status across every tracked initiative: a
4574
+ * KPI row followed by initiative groups (typically Focused, then Backburner).
4575
+ * Composes Card / Metric / Eyebrow / {@link InitiativeCard} — presentational
4576
+ * only, all data supplied by props.
4577
+ *
4578
+ * Data plan: the caller is responsible for computing `stats` and `sections`
4579
+ * from its own source of truth (e.g. the active-work session-mining export).
4580
+ * This component has no fetch/store dependency, so wiring it to a live data
4581
+ * source is a caller-side concern — flagged here as the integration's only
4582
+ * open gap.
4583
+ */
4584
+ declare function PortfolioOverview({ title, subtitle, stats, sections, className, ...props }: PortfolioOverviewProps): react_jsx_runtime.JSX.Element;
4585
+
4586
+ /** Split a path into its directory prefix (trailing slash kept) and basename. */
4587
+ declare function splitPath(path: string): {
4588
+ dir: string;
4589
+ base: string;
4590
+ };
4591
+ /** Basename size on the type scale, with the directory one step quieter. */
4592
+ type FilePathLabelSize = 'sm' | 'md';
4593
+ interface FilePathLabelProps extends ViewProps {
4594
+ /** A repo-relative path, e.g. `src/commands/open.ts`. */
4595
+ path: string;
4596
+ /** `md` for standalone rows, `sm` for dense contexts like chips. */
4597
+ size?: FilePathLabelSize;
4598
+ /** Render only the basename, dropping the directory prefix. */
4599
+ baseOnly?: boolean;
4600
+ className?: string;
4601
+ }
4602
+ /**
4603
+ * FilePathLabel — a file path with the directory dimmed and the basename bright.
4604
+ *
4605
+ * In a list of paths the basename is the identifier and the directory is
4606
+ * disambiguation, so they get different weight rather than one flat string. The
4607
+ * directory shrinks first under width pressure; the basename never truncates.
4608
+ */
4609
+ declare function FilePathLabel({ path, size, baseOnly, className, ...props }: FilePathLabelProps): react_jsx_runtime.JSX.Element;
4610
+
4611
+ /** Fill per event kind, shared by the row's counts and the detail pane's tiles. */
4612
+ interface FileEventColors {
4613
+ reads: string;
4614
+ writes: string;
4615
+ edits: string;
4616
+ }
4617
+ /**
4618
+ * Reads/writes/edits read as *importance* rather than as peer categories: reads
4619
+ * are cheap and quiet, writes are the consequential ones, edits sit between.
4620
+ */
4621
+ declare const FILE_EVENT_COLOR_SEMANTIC: FileEventColors;
4622
+ /**
4623
+ * The same three as *peer categories*, taken in order from the canonical
4624
+ * CVD-safe palette (TOKENS.md §2).
4625
+ */
4626
+ declare const FILE_EVENT_COLOR_CATEGORICAL: FileEventColors;
4627
+ /**
4628
+ * The family default: the three event kinds are peer categories, so they take
4629
+ * the canonical CVD-safe palette in order rather than a hand-picked triple.
4630
+ * Costs three of `CATEGORICAL_CVD_SAFE_MAX` — a view that also plots series
4631
+ * needs to start from index 3, or supply its own `eventColors`.
4632
+ */
4633
+ declare const FILE_EVENT_COLOR: FileEventColors;
4634
+ /** Per-file activity mined from session transcripts. */
4635
+ interface FileActivity {
4636
+ /** Repo-relative path. */
4637
+ path: string;
4638
+ reads: number;
4639
+ writes: number;
4640
+ edits: number;
4641
+ /** Total events across reads + writes + edits. */
4642
+ touches: number;
4643
+ /** Per-session net char delta, oldest first. Drives the sparkline. */
4644
+ timeline: number[];
4645
+ }
4646
+ interface FileActivityRowProps {
4647
+ file: FileActivity;
4648
+ /** Renders the selected treatment (one tone up from the list pane + leading accent bar). */
4649
+ selected?: boolean;
4650
+ onSelect?: () => void;
4651
+ /** Override the read/write/edit fills. Defaults to {@link FILE_EVENT_COLOR}. */
4652
+ eventColors?: FileEventColors;
4653
+ }
4654
+ /**
4655
+ * FileActivityRow — one file in the ranked "hottest files" list: its path, total
4656
+ * touches, the read/write/edit split, and a sparkline of per-session growth.
4657
+ *
4658
+ * Composes {@link FilePathLabel} and {@link SparkBars}. Used by
4659
+ * {@link FileHistoryExplorer}.
4660
+ */
4661
+ declare function FileActivityRow({ file, selected, onSelect, eventColors, }: FileActivityRowProps): react_jsx_runtime.JSX.Element;
4662
+
4663
+ /** Another file that tends to change in the same session as this one. */
4664
+ interface FileCoChange {
4665
+ path: string;
4666
+ count: number;
4667
+ }
4668
+ /** {@link FileActivity} plus the history only the detail pane shows. */
4669
+ interface FileActivityDetailData extends FileActivity {
4670
+ /** Distinct sessions that touched this file. */
4671
+ sessions: number;
4672
+ charsAdded: number;
4673
+ charsRemoved: number;
4674
+ /** `charsAdded - charsRemoved`; negative means the file net-shrank. */
4675
+ netGrowth: number;
4676
+ firstTouched?: string | null;
4677
+ lastTouched?: string | null;
4678
+ coChange: FileCoChange[];
4679
+ }
4680
+ interface FileActivityDetailProps {
4681
+ file: FileActivityDetailData;
4682
+ /** Override the read/write/edit fills. Defaults to {@link FILE_EVENT_COLOR}. */
4683
+ eventColors?: FileEventColors;
4684
+ className?: string;
4685
+ }
4686
+ /**
4687
+ * FileActivityDetail — the right-hand pane of {@link FileHistoryExplorer}: one
4688
+ * file's full mined history. Activity split, net char growth over sessions, and
4689
+ * the files it changes together with — the co-change list being the part a
4690
+ * plain file tree cannot show.
4691
+ *
4692
+ * Composes Card / CardInset / Tile / Pill / DataRow / DateTime plus
4693
+ * {@link SparkBars}, {@link FilePathLabel} and {@link Eyebrow}.
4694
+ *
4695
+ * One lift only: the pane itself. Inside it the activity split reads as filled
4696
+ * tiles a plane up and the growth block as a `CardInset` well a plane down.
4697
+ */
4698
+ declare function FileActivityDetail({ file, eventColors, className, }: FileActivityDetailProps): react_jsx_runtime.JSX.Element;
4699
+
4700
+ interface CoChangeChipProps {
4701
+ /** One side of the pair. */
4702
+ a: string;
4703
+ /** The other side. Order is not meaningful — co-change is symmetric. */
4704
+ b: string;
4705
+ /** How many sessions changed both files. */
4706
+ count: number;
4707
+ className?: string;
4708
+ }
4709
+ /**
4710
+ * CoChangeChip — one symmetric "these two files change together" pair.
4711
+ *
4712
+ * Only basenames are shown: at chip size the directory is noise, and the pair
4713
+ * is a pointer into {@link FileActivityDetail} rather than a full identifier.
4714
+ * Used by {@link FileHistoryExplorer}'s repo-wide co-change strip.
4715
+ *
4716
+ * @deprecated Use `<Pill tone="brand" size="xs">` — removed after AW-127 consumer migration.
4717
+ */
4718
+ declare function CoChangeChip({ a, b, count, className }: CoChangeChipProps): react_jsx_runtime.JSX.Element;
4719
+
4720
+ /** A KPI shown in the strip above the explorer. */
4721
+ interface FileHistoryStat {
4722
+ label: string;
4723
+ value: string;
4724
+ }
4725
+ /** A repo-wide co-change pair, strongest first. */
4726
+ interface CoChangeEdge {
4727
+ a: string;
4728
+ b: string;
4729
+ count: number;
4730
+ }
4731
+ interface FileHistoryExplorerProps extends ViewProps {
4732
+ /** KPI tiles, e.g. Files / File events / Sessions / Transcripts. */
4733
+ stats: FileHistoryStat[];
4734
+ /** Files for the ranked list, already sorted (typically by descending touches). */
4735
+ files: FileActivityDetailData[];
4736
+ /** Repo-wide co-change pairs, already sorted by descending count. */
4737
+ coEdges?: CoChangeEdge[];
4738
+ /** Caption under the KPI strip explaining where the numbers came from. */
4739
+ provenance?: string;
4740
+ /** Cap on ranked rows rendered. */
4741
+ maxRows?: number;
4742
+ /** Cap on co-change chips rendered. */
4743
+ maxCoEdges?: number;
4744
+ /** Selected file path. Omit to let the explorer manage selection itself. */
4745
+ selectedPath?: string;
4746
+ /** Fires on row press. Required for the selection to move when `selectedPath` is set. */
4747
+ onSelectFile?: (path: string) => void;
4748
+ className?: string;
4749
+ }
4750
+ /**
4751
+ * FileHistoryExplorer — a file browser ranked by mined activity instead of
4752
+ * alphabetised by name: a KPI strip, a two-pane hottest-files list ⇄ detail,
4753
+ * and the repo's strongest co-change pairs.
4754
+ *
4755
+ * Composes Card / Tile / Divider plus {@link FileActivityRow},
4756
+ * {@link FileActivityDetail}, {@link CoChangeChip} and {@link Eyebrow}.
4757
+ * Selection is controlled when `selectedPath` is supplied and internal
4758
+ * otherwise.
4759
+ *
4760
+ * Data plan: presentational only — no fetch or store dependency. The caller
4761
+ * derives `stats`, `files` and `coEdges` from its own source of truth (the
4762
+ * active-work session-history miner). Wiring that export to these props is a
4763
+ * caller-side concern and the integration's only open gap; a shared adapter is
4764
+ * deliberately out of scope for this unit.
4765
+ */
4766
+ declare function FileHistoryExplorer({ stats, files, coEdges, provenance, maxRows, maxCoEdges, selectedPath, onSelectFile, className, ...props }: FileHistoryExplorerProps): react_jsx_runtime.JSX.Element;
4767
+
4768
+ /**
4769
+ * A compact age label for a dense column: `today`, `4d ago`, `3mo ago`.
4770
+ *
4771
+ * Deliberately not `DateTime format="relative"` — that renders Intl prose ("4
4772
+ * days ago"), which is too long for a 74px column, and it reads `Date.now()`
4773
+ * internally so a story or a visual baseline could never be deterministic. `now`
4774
+ * is injected here for exactly that reason.
4775
+ */
4776
+ declare function formatTaskAge(iso: string | null | undefined, now: number): string;
4777
+ /**
4778
+ * A session's wall-clock length as `1h 4m` or `42m`. Empty when the span is
4779
+ * missing, unparseable or not positive, so callers can drop the separator
4780
+ * rather than render `0m`.
4781
+ */
4782
+ declare function formatSessionDuration(started: string, ended: string): string;
4783
+
4784
+ type TaskSortKey = 'slug' | 'id' | 'title' | 'severity' | 'priority' | 'estimate' | 'updated';
4785
+ /** Any column the table can leave out; `title` is the one column that always renders. */
4786
+ type TaskColumnKey = Exclude<TaskSortKey, 'title'> | 'tags';
4787
+ /** How the severity column renders: `auto` collapses to the dot below {@link COMPACT_SEVERITY_BELOW}. */
4788
+ type SeverityDisplay = 'auto' | 'full' | 'dot';
4789
+ /**
4790
+ * Table width under which severity collapses to its dot. Below this the fixed
4791
+ * columns leave the flexible title under ~220px, which is where titles stop
4792
+ * being scannable; the dot gives 68px back.
4793
+ */
4794
+ declare const COMPACT_SEVERITY_BELOW = 840;
4795
+ interface TaskTableProps {
4796
+ tasks: TaskListItem[];
4797
+ /**
4798
+ * Reference timestamp for the age column. Injected rather than read from the
4799
+ * clock so stories, tests and visual baselines render identically forever.
4800
+ */
4801
+ now: number;
4802
+ /** Column sorted on first render. Defaults to `priority`. */
4803
+ defaultSortKey?: TaskSortKey;
4804
+ /** Hides the severity legend above the grid. */
4805
+ hideLegend?: boolean;
4806
+ /** Severity column mode. Defaults to `auto`, driven by the table's measured width. */
4807
+ severityDisplay?: SeverityDisplay;
4808
+ /** Columns to leave out, for an embedded table that already knows its context. */
4809
+ hideColumns?: TaskColumnKey[];
4810
+ /**
4811
+ * Pins the width the column fit runs against instead of measuring it. For
4812
+ * stories and tests that need to hold one step of the drop order still.
4813
+ */
4814
+ fitWidth?: number;
4815
+ /** Eyebrow over the grid. Defaults to the backlog wording, `N open · all initiatives`. */
4816
+ label?: string;
4817
+ className?: string;
4818
+ }
4819
+ /**
4820
+ * TaskTable — every open task across initiatives in one dense, sortable grid.
4821
+ *
4822
+ * Composes {@link Table} at `density="dense"` and drives it with
4823
+ * {@link useTable}, passing per-column comparators so severity ranks by meaning
4824
+ * and age reads newest-first. Rows are {@link TaskRow}; the legend tallies
4825
+ * {@link SeverityLabel}.
4826
+ *
4827
+ * Narrow it and it adapts twice, in order: severity collapses to its dot, then
4828
+ * whole columns drop along {@link TASK_DROP_ORDER}. `title` and `id` are not in
4829
+ * that order and never drop; under them the table scrolls horizontally.
4830
+ */
4831
+ declare function TaskTable({ tasks, now, defaultSortKey, hideLegend, severityDisplay, hideColumns, fitWidth, label, className, }: TaskTableProps): react_jsx_runtime.JSX.Element;
4832
+
4833
+ /** One open task, as the task list renders it. */
4834
+ interface TaskListItem {
4835
+ /** Initiative slug the task belongs to. */
4836
+ slug: string;
4837
+ /** Per-initiative task id, e.g. `AW-22`. */
4838
+ id: string;
4839
+ title: string;
4840
+ severity?: TaskSeverity;
4841
+ /** Lower sorts first; unique within an initiative, not globally. */
4842
+ priority: number;
4843
+ /** Rough size. Absent means unestimated, which sorts last. */
4844
+ estimate?: number;
4845
+ tags?: string[];
4846
+ /** ISO date the task last changed, used for the age column. */
4847
+ updated: string;
4848
+ }
4849
+ /**
4850
+ * Fixed column widths, shared by {@link TaskRow} and {@link TaskTable}'s header
4851
+ * so the two cannot drift. `title` is the flexible column: it renders with no
4852
+ * width and only declares the floor it may be squeezed to.
4853
+ *
4854
+ * Every fixed width holds its own header — the uppercase label, the 4px gap and
4855
+ * the sort glyph, inside the dense cell's 16px of padding. A column narrower
4856
+ * than its own header is what let `SEV` and `PRI` paint over each other.
4857
+ */
4858
+ declare const TASK_COLUMN_WIDTHS: {
4859
+ readonly slug: 132;
4860
+ readonly id: 66;
4861
+ /** The narrowest the flexible title column may be squeezed before a column drops instead. */
4862
+ readonly titleMin: 160;
4863
+ readonly severity: 112;
4864
+ /** The severity column once it has collapsed to its dot. */
4865
+ readonly severityCompact: 56;
4866
+ readonly priority: 56;
4867
+ readonly estimate: 56;
4868
+ readonly tags: 150;
4869
+ readonly age: 74;
4870
+ };
4871
+ interface TaskRowProps {
4872
+ task: TaskListItem;
4873
+ /** Pre-formatted age label (e.g. "3d ago"). Passed in so rows stay pure and deterministic. */
4874
+ ageLabel: string;
4875
+ /** Collapse severity to its dot (word on hover); the table decides this from its width. */
4876
+ severityDotOnly?: boolean;
4877
+ /** Columns the table left out; the row skips their cells so header and body stay aligned. */
4878
+ hideColumns?: TaskColumnKey[];
4879
+ }
4880
+ /**
4881
+ * TaskRow — one task as a dense grid row: initiative, id, title, severity,
4882
+ * priority, estimate, tags and age.
4883
+ *
4884
+ * Composes {@link TableRow} / {@link TableCell} for row semantics and density,
4885
+ * {@link SeverityLabel} for the severity dot, and {@link Pill} for tags. Used by
4886
+ * {@link TaskTable}.
4887
+ */
4888
+ declare function TaskRow({ task, ageLabel, severityDotOnly, hideColumns }: TaskRowProps): react_jsx_runtime.JSX.Element;
4889
+
4890
+ /** How a linked reference reads: brand for the domain's own ids, link for cross-references, muted for asides. */
4891
+ type ProseLinkTone = 'brand' | 'link' | 'muted';
4892
+ /**
4893
+ * A pattern the prose auto-links. Patterns must not carry the `g` flag or
4894
+ * capture groups: the renderer combines them into one tokenizer.
4895
+ */
4896
+ interface ProseLinker {
4897
+ /** Stable id, used in keys and test ids. */
4898
+ id: string;
4899
+ pattern: RegExp;
4900
+ tone?: ProseLinkTone;
4901
+ /** Text to show for a match. Defaults to the match itself. */
4902
+ label?: (ref: string) => string;
4903
+ /** When set the reference is pressable and exposes a link role. */
4904
+ onPress?: (ref: string) => void;
4905
+ }
4906
+ type ProseBlockType = 'h1' | 'h2' | 'h3' | 'li' | 'p';
4907
+ interface ProseBlock {
4908
+ type: ProseBlockType;
4909
+ text: string;
4910
+ }
4911
+ interface MarkdownProseProps {
4912
+ /** Markdown source. Headings, bullet lists, paragraphs, bold and code are understood. */
4913
+ body: string;
4914
+ /** Reference patterns to auto-link, tried in order. */
4915
+ linkers?: ProseLinker[];
4916
+ className?: string;
4917
+ testID?: string;
4918
+ }
4919
+ /**
4920
+ * Splits markdown into the block kinds this renderer understands. Consecutive
4921
+ * text lines join into one paragraph; a blank line ends it. An indented line
4922
+ * straight after a bullet continues that bullet. Deeper headings flatten to
4923
+ * h3, since session prose never needs more than three levels.
4924
+ */
4925
+ declare function parseProseBlocks(body: string): ProseBlock[];
4926
+ /**
4927
+ * MarkdownProse — renders a small, predictable markdown subset as themed prose
4928
+ * and auto-links references the caller describes.
4929
+ *
4930
+ * It is deliberately not a full markdown engine: headings, bullet lists,
4931
+ * paragraphs, bold and code cover the notes, briefs and session logs this
4932
+ * system reads, and anything richer would need a design pass of its own.
4933
+ * Composes {@link Typography}. Used by `SessionDetail` (session logs) and the
4934
+ * initiative reader (brief and handoff prose).
4935
+ */
4936
+ declare function MarkdownProse({ body, linkers, className, testID }: MarkdownProseProps): react_jsx_runtime.JSX.Element;
4937
+
4938
+ /** A per-initiative task id such as `AW-22` or `TD-07.14`. */
4939
+ declare const TASK_REF_PATTERN: RegExp;
4940
+ /** An Obsidian-style `[[name]]` link into notes or memory. */
4941
+ declare const WIKI_LINK_PATTERN: RegExp;
4942
+ /** A bare `#123` pull-request or issue number. */
4943
+ declare const PR_REF_PATTERN: RegExp;
4944
+ /** Every distinct task id in a body, in first-seen order. */
4945
+ declare function extractTaskRefs(body: string): string[];
4946
+ /** Task ids read in the brand colour and, when a handler is given, open the task. */
4947
+ declare function taskRefLinker(onPress?: (id: string) => void): ProseLinker;
4948
+ /** `[[name]]` links drop their brackets and read as links; the handler receives the bare name. */
4949
+ declare function wikiLinkLinker(onPress?: (name: string) => void): ProseLinker;
4950
+ /** PR numbers recede rather than compete with task ids; the handler receives the number. */
4951
+ declare function prRefLinker(onPress?: (number: number) => void): ProseLinker;
4952
+ interface SessionLinkHandlers {
4953
+ onPressTask?: (id: string) => void;
4954
+ onPressLink?: (name: string) => void;
4955
+ onPressPr?: (number: number) => void;
4956
+ }
4957
+ /** The three linkers a session log needs, in the order they should win a match. */
4958
+ declare function sessionLinkers(handlers?: SessionLinkHandlers): ProseLinker[];
4959
+
4960
+ /** One recorded session, as the session reader consumes it. */
4961
+ interface SessionSummary {
4962
+ id: string;
4963
+ /** The session file's name, when the host has it. */
4964
+ filename?: string;
4965
+ /** ISO timestamps. */
4966
+ started: string;
4967
+ ended: string;
4968
+ /** `canonical` is the mainline thread; anything else (`sidecar`, `adhoc`) is folded or parallel work. */
4969
+ track: string;
4970
+ /** The log's first heading, without the leading `#`. */
4971
+ title: string;
4972
+ /** The session log's markdown body. */
4973
+ body: string;
4974
+ }
4975
+ interface SessionListItemProps {
4976
+ session: SessionSummary;
4977
+ /** Reference instant for the age label, injected so renders are deterministic. */
4978
+ now: number;
4979
+ /** Renders the selected treatment (raised fill + leading accent bar). */
4980
+ selected?: boolean;
4981
+ onSelect?: () => void;
4982
+ }
4983
+ /** The row's footer as one string: age, wall-clock length, distinct tasks touched, and the track. */
4984
+ declare function sessionRowMeta(session: SessionSummary, now: number, taskCount: number): string;
4985
+ /** The exact end time behind the relative age. */
4986
+ declare function ExactTime({ session }: {
4987
+ session: SessionSummary;
4988
+ }): react_jsx_runtime.JSX.Element;
4989
+ /** The task ids behind the count. */
4990
+ declare function TaskIds({ refs }: {
4991
+ refs: string[];
4992
+ }): react_jsx_runtime.JSX.Element;
4993
+ /**
4994
+ * SessionListItem — one session in the reader's list, led by its title, with
4995
+ * a footer of age · duration · tasks touched · track. Hovering the age shows
4996
+ * the exact end time; hovering the task count lists the task ids.
4997
+ *
4998
+ * Composes {@link Tooltip} (controlled, so the row keeps its press),
4999
+ * {@link DateTime} and {@link Typography}. Used by {@link SessionList}.
5000
+ */
5001
+ declare function SessionListItem({ session, now, selected, onSelect, }: SessionListItemProps): react_jsx_runtime.JSX.Element;
5002
+
5003
+ interface SessionListProps {
5004
+ /** Newest first is the expected order; the list renders what it is given. */
5005
+ sessions: SessionSummary[];
5006
+ /** Reference instant for the age labels, injected so renders are deterministic. */
5007
+ now: number;
5008
+ selectedId?: string;
5009
+ onSelect?: (session: SessionSummary) => void;
5010
+ /** Heading over the list. Defaults to the session count. */
5011
+ label?: string;
5012
+ className?: string;
5013
+ }
5014
+ interface Period {
5015
+ label: string;
5016
+ sessions: SessionSummary[];
5017
+ }
5018
+ /** The calendar month a session ended in, as the list's period label. */
5019
+ declare function sessionPeriod(iso: string): string;
5020
+ /** Consecutive sessions in the same month, in the order given. */
5021
+ declare function groupByPeriod(sessions: SessionSummary[]): Period[];
5022
+ /**
5023
+ * SessionList — the selectable list half of the session reader. Owns no
5024
+ * selection state: the host holds `selectedId` and pairs the list with a
5025
+ * `SessionDetail`, so the two can be laid out however the surface needs.
5026
+ * Sessions are grouped under a hairline divider per calendar month once the
5027
+ * list spans more than one.
5028
+ *
5029
+ * Composes {@link Eyebrow}, {@link Divider} and {@link SessionListItem}.
5030
+ */
5031
+ declare function SessionList({ sessions, now, selectedId, onSelect, label, className, }: SessionListProps): react_jsx_runtime.JSX.Element;
5032
+
5033
+ interface SessionDetailProps extends SessionLinkHandlers {
5034
+ session: SessionSummary;
5035
+ /** Reference instant for the age label, injected so renders are deterministic. */
5036
+ now: number;
5037
+ /**
5038
+ * Task rows for the ids the log mentions, resolved by the host from its task
5039
+ * store. When given, the tasks-touched strip can expand into a table.
5040
+ */
5041
+ tasks?: TaskListItem[];
5042
+ className?: string;
5043
+ }
5044
+ /** The body without its leading h1: the card header carries the title. */
5045
+ declare function stripLeadingHeading(body: string): string;
5046
+ /**
5047
+ * SessionDetail — one session log, readable: its title, when it ran and for
5048
+ * how long, the tasks it touched (as pills, or as a table when the host
5049
+ * supplies the rows), then the markdown body with task ids, `[[name]]` links
5050
+ * and PR numbers auto-linked.
5051
+ *
5052
+ * Holds no selection state; pair it with {@link SessionList} in the host.
5053
+ * Composes {@link Card}, {@link Divider}, {@link Pill}, {@link Collapse},
5054
+ * {@link DateTime}, {@link TaskTable} and {@link MarkdownProse}.
5055
+ */
5056
+ declare function SessionDetail({ session, now, tasks, onPressTask, onPressLink, onPressPr, className, }: SessionDetailProps): react_jsx_runtime.JSX.Element;
5057
+
5058
+ interface InitiativeHeaderProps {
5059
+ title: string;
5060
+ /** Short slug shown under the title, e.g. `active-work`. */
5061
+ slug: string;
5062
+ state: InitiativeState;
5063
+ /** Focused rank (1-based). Shown as `#N` for a ranked state. */
5064
+ rank?: number;
5065
+ /** Ship-target label, e.g. `2026-Q3`. */
5066
+ shipTarget?: string;
5067
+ /** ISO date the brief last changed. */
5068
+ updated?: string;
5069
+ className?: string;
5070
+ }
5071
+ /**
5072
+ * InitiativeHeader — an initiative's identity line: title, slug, state, rank,
5073
+ * ship target and when it was last touched.
5074
+ *
5075
+ * Shares the state vocabulary with {@link InitiativeCard} through
5076
+ * `INITIATIVE_STATE_META`. Composes {@link StatusDot}, {@link Pill},
5077
+ * {@link DateTime} and {@link Typography}. Used by the initiative reader.
5078
+ */
5079
+ declare function InitiativeHeader({ title, slug, state, rank, shipTarget, updated, className, }: InitiativeHeaderProps): react_jsx_runtime.JSX.Element;
5080
+
5081
+ /** An initiative's durable brief, as the reader consumes it. */
5082
+ interface InitiativeBriefData {
5083
+ slug: string;
5084
+ title: string;
5085
+ state: string;
5086
+ rank?: number | null;
5087
+ shipTarget?: string | null;
5088
+ updated: string;
5089
+ /** The brief's markdown body. */
5090
+ body: string;
5091
+ }
5092
+ /** A brief section: an `##` heading and the prose beneath it, up to the next `##`. */
5093
+ interface BriefSection {
5094
+ heading: string;
5095
+ body: string;
5096
+ }
5097
+ interface InitiativeBriefProps {
5098
+ brief: InitiativeBriefData;
5099
+ /** Reference patterns to auto-link in the prose. */
5100
+ linkers?: ProseLinker[];
5101
+ className?: string;
5102
+ }
5103
+ /**
5104
+ * Splits a brief into its `##` sections, dropping the leading `#` title (the
5105
+ * header already shows it). Anything before the first `##` becomes a leading
5106
+ * section with an empty heading, so a brief with no sections still renders.
5107
+ */
5108
+ declare function splitBriefSections(body: string): BriefSection[];
5109
+ /**
5110
+ * InitiativeBrief — an initiative's brief prose as a single-open accordion of
5111
+ * its `##` sections: click any heading to open it, or step through them with
5112
+ * the prev/next controls in the header, which close the current section and
5113
+ * open the next. Prose before the first `##` always shows. References
5114
+ * auto-link from `linkers`.
5115
+ *
5116
+ * Composes {@link Eyebrow}, {@link MarkdownProse} and {@link Typography}. Used
5117
+ * by the initiative reader.
5118
+ */
5119
+ declare function InitiativeBrief({ brief, linkers, className }: InitiativeBriefProps): react_jsx_runtime.JSX.Element;
5120
+
5121
+ /** What a loop is about, so the reader can colour and label its kind. */
5122
+ type OpenLoopKind = 'task' | 'pr' | 'prose';
5123
+ /** One hanging thread from the session ledger, as the reader consumes it. */
5124
+ interface OpenLoop {
5125
+ /** Stable `<session-file-stem>#<id>` reference. */
5126
+ ref: string;
5127
+ kind: OpenLoopKind;
5128
+ /** The loop text, auto-linked like any prose. */
5129
+ text: string;
5130
+ /** The task this loop tracks, when kind is `task`. */
5131
+ targetRef?: string;
5132
+ /** ISO time the loop was opened; drives the age label. */
5133
+ openedAt?: string;
5134
+ /** The session file that opened it. */
5135
+ sessionFile?: string;
5136
+ }
5137
+ interface OpenLoopsProps {
5138
+ loops: OpenLoop[];
5139
+ /** Reference instant for the age labels, injected so renders are deterministic. */
5140
+ now: number;
5141
+ /** Reference patterns to auto-link in each loop's text. */
5142
+ linkers?: ProseLinker[];
5143
+ /** Heading over the list. Defaults to the loop count. */
5144
+ label?: string;
5145
+ /** Rendered when there are no open loops. */
5146
+ emptyLabel?: string;
5147
+ className?: string;
5148
+ }
5149
+ /**
5150
+ * OpenLoops — the initiative's hanging threads from the session ledger: each
5151
+ * loop's kind, age and auto-linked text. This is the durable "current state"
5152
+ * a session picks up, in place of a hand-maintained handoff document.
5153
+ *
5154
+ * Composes {@link Eyebrow}, {@link Pill}, {@link Divider} and
5155
+ * {@link MarkdownProse}. Used by the initiative reader.
5156
+ */
5157
+ declare function OpenLoops({ loops, now, linkers, label, emptyLabel, className, }: OpenLoopsProps): react_jsx_runtime.JSX.Element;
5158
+
5159
+ /** The apps that are expected to mount this shell. */
5160
+ type BrandKey = 'voltras' | 'audiobook' | 'active-work' | 'agents' | 'brain';
5161
+ interface BrandPreset {
5162
+ /** The mark glyph, rendered at 14px through the accent token via `currentColor`. */
5163
+ mark: ReactNode;
5164
+ /** Uppercase product wordmark. */
5165
+ wordmark: string;
5166
+ /** Semantic text token that colours the mark. */
5167
+ accentClassName: string;
5168
+ /**
5169
+ * The same accent as a background token, for the nav's active bar. Declared as
5170
+ * a literal alongside its `text-*` twin because Tailwind only emits classes it
5171
+ * can see in the source — a name built at runtime is never generated.
5172
+ */
5173
+ accentBarClassName: string;
5174
+ /** Default "/ subtitle" for that app's shell. */
5175
+ subtitle: string;
5176
+ }
5177
+ declare const brandPresets: Record<BrandKey, BrandPreset>;
5178
+ /** Every brand key, in the order the stories present them. */
5179
+ declare const brandKeys: BrandKey[];
5180
+
4191
5181
  interface BrandLockupProps extends ViewProps {
4192
- /** The "/ subtitle" that follows the wordmark. Default "wall dashboard". */
5182
+ /** Which app's identity to render. Defaults to `voltras`. */
5183
+ brand?: BrandKey;
5184
+ /** Replace the preset's mark glyph. */
5185
+ mark?: ReactNode;
5186
+ /** Replace the preset's wordmark. */
5187
+ wordmark?: string;
5188
+ /** Replace the preset's accent — a semantic `text-*` token class for the mark. */
5189
+ accentClassName?: string;
5190
+ /** The "/ subtitle" that follows the wordmark. Defaults to the brand's own. */
4193
5191
  subtitle?: string;
4194
5192
  /** Show the subtitle. Hidden at tablet width and below (S1-Q4 responsive). */
4195
5193
  showSubtitle?: boolean;
4196
5194
  className?: string;
4197
5195
  }
4198
5196
  /**
4199
- * Product identity lockup for the top bar: mark + VOLTRAS wordmark + optional
4200
- * subtitle. Composes the VoltrasMark icon + Typography. S1 · BrandLockup.
5197
+ * Product identity lockup for the top bar: mark + wordmark + optional subtitle.
5198
+ * Generic over the app: pick a `brand` preset, or override `mark` / `wordmark` /
5199
+ * `accentClassName` / `subtitle` piecemeal for an app that has no preset yet.
5200
+ * Composes an icon primitive + Typography. S1 · BrandLockup.
5201
+ */
5202
+ declare function BrandLockup({ brand, mark, wordmark, accentClassName, subtitle, showSubtitle, className, ...props }: BrandLockupProps): react_jsx_runtime.JSX.Element;
5203
+
5204
+ interface TopBarProps {
5205
+ /** Which app identity the default {@link BrandLockup} renders. */
5206
+ brand?: BrandKey;
5207
+ /** Brand subtitle. Defaults to the brand preset's own. */
5208
+ subtitle?: string;
5209
+ /** Force the subtitle on/off; defaults to container-responsive (hidden below ~1024px). */
5210
+ showSubtitle?: boolean;
5211
+ /**
5212
+ * Replace the whole brand region. Wins over `brand` / `subtitle`, and opts out
5213
+ * of the responsive subtitle collapse — the node owns its own behaviour.
5214
+ */
5215
+ leading?: ReactNode;
5216
+ /**
5217
+ * App chrome for the right cluster, left → right. An array is rendered with the
5218
+ * bar's own vertical dividers between the items, so an app supplies its
5219
+ * controls and the shell keeps the divider rhythm.
5220
+ */
5221
+ trailing?: ReactNode | ReactNode[];
5222
+ /** The moment to display in the clock (Date/timestamp). Omit for a live ticking clock. */
5223
+ time?: number | Date;
5224
+ /** Force the clock on/off; defaults to container-responsive (hidden below ~720px). */
5225
+ showClock?: boolean;
5226
+ className?: string;
5227
+ }
5228
+ /**
5229
+ * S1 · TopBar — the persistent shell chrome band, generic over the app. Brand
5230
+ * (left) + a `trailing` cluster of app-supplied chrome and the wall clock (clock
5231
+ * edge-pinned so spacing stays stable as the items' text changes). Collapses
5232
+ * subtitle then clock as its container narrows.
5233
+ *
5234
+ * @example
5235
+ * <TopBar brand="brain" trailing={[<IndexStatus />, <SearchScope />]} />
5236
+ */
5237
+ declare function TopBar({ brand, subtitle, showSubtitle, leading, trailing, time, showClock, className, }: TopBarProps): react_jsx_runtime.JSX.Element;
5238
+
5239
+ interface NavItemProps {
5240
+ /** The nav glyph (an icon from `components/icons`, rendered ~20px via `currentColor`). */
5241
+ icon: ReactNode;
5242
+ /** Short label shown under the glyph (uppercased for display; used as the accessible name). */
5243
+ label: string;
5244
+ /** Active category → left accent bar + accent-colored glyph & label. */
5245
+ active?: boolean;
5246
+ /**
5247
+ * A set is running for this category while it is NOT the active view
5248
+ * (live-elsewhere) → a quiet muted-green label tint. Ignored when `active`.
5249
+ */
5250
+ live?: boolean;
5251
+ /** Semantic `text-*` token for the active glyph and label. Defaults to the Voltras brand. */
5252
+ accentClassName?: string;
5253
+ /** Semantic `bg-*` token for the active bar. Pair it with `accentClassName`. */
5254
+ accentBarClassName?: string;
5255
+ onPress?: () => void;
5256
+ className?: string;
5257
+ }
5258
+ /**
5259
+ * Shell S2 · NavItem — one category button in the {@link SideNav}: a 20px glyph
5260
+ * over an uppercase micro-label in a 46×46 target. The button spans the full 60px
5261
+ * rail so the active **left accent bar** sits flush to the rail's edge. States:
5262
+ * active = accent bar + the accent token; `live` (while not active) tints only the
5263
+ * label `status-success-dark` (the glyph stays dim); otherwise dim `text-tertiary`.
5264
+ *
5265
+ * The accent follows the mounting app's brand, so a Brain shell reads yellow
5266
+ * throughout rather than showing a Voltras-orange active item under its own lockup.
5267
+ */
5268
+ declare function NavItem({ icon, label, active, live, accentClassName, accentBarClassName, onPress, className, }: NavItemProps): react_jsx_runtime.JSX.Element;
5269
+
5270
+ interface SideNavItem {
5271
+ /** Stable category key — matches `activeKey` / `liveKey`. */
5272
+ key: string;
5273
+ /** Micro-label shown under the glyph. */
5274
+ label: string;
5275
+ /** The glyph node (rendered ~20px via `currentColor`). */
5276
+ icon: ReactNode;
5277
+ }
5278
+ interface SideNavProps {
5279
+ /** Category items, top → bottom. The app owns its own categories. */
5280
+ items: SideNavItem[];
5281
+ /** Key of the active category. */
5282
+ activeKey: string;
5283
+ /** Called with the tapped item's key. */
5284
+ onNavigate?: (key: string) => void;
5285
+ /**
5286
+ * Key of a category with live activity while it is NOT active (e.g. a set
5287
+ * running off its view) → a quiet green cue on that item's label.
5288
+ */
5289
+ liveKey?: string | null;
5290
+ /** Semantic `text-*` token for the active item. Defaults to the Voltras brand. */
5291
+ accentClassName?: string;
5292
+ /** Semantic `bg-*` token for the active bar. Pair it with `accentClassName`. */
5293
+ accentBarClassName?: string;
5294
+ className?: string;
5295
+ }
5296
+ /**
5297
+ * Shell S2 · SideNav — the persistent 60px left rail that switches the main
5298
+ * viewport between an app's categories. Presentational: it renders `items` and
5299
+ * reports taps via `onNavigate`; the app owns its categories, routing, and which
5300
+ * key is `live`. Active item shows a left accent bar in the app's brand accent;
5301
+ * `liveKey` (when not the active view) tints that item's label a muted green.
5302
+ * Fixed 60px at every width — labels sit under the glyph, so they never change
5303
+ * the rail width.
5304
+ */
5305
+ declare function SideNav({ items, activeKey, onNavigate, liveKey, accentClassName, accentBarClassName, className, }: SideNavProps): react_jsx_runtime.JSX.Element;
5306
+
5307
+ interface AppShellProps {
5308
+ /** Which app identity the default {@link TopBar} and nav accent render. */
5309
+ brand?: BrandKey;
5310
+ /** Brand subtitle on the default top bar. */
5311
+ subtitle?: string;
5312
+ /** App chrome for the default top bar's right cluster (divider-separated). */
5313
+ topBarTrailing?: ReactNode | ReactNode[];
5314
+ /** Replace the whole top bar. Wins over `brand` / `subtitle` / `topBarTrailing`. */
5315
+ topBar?: ReactNode;
5316
+ /** Nav categories, top → bottom. */
5317
+ navItems?: SideNavItem[];
5318
+ /** Active nav category key. */
5319
+ activeKey?: string;
5320
+ /** A category with off-view live activity → a quiet cue on that item. */
5321
+ liveKey?: string | null;
5322
+ onNavigate?: (key: string) => void;
5323
+ /** Replace the whole left rail. Wins over `navItems` / `activeKey` / `liveKey`. */
5324
+ nav?: ReactNode;
5325
+ /** Main content region. A placeholder renders when omitted. */
5326
+ children?: ReactNode;
5327
+ className?: string;
5328
+ }
5329
+ /**
5330
+ * `AppShell` — the generic dashboard chrome: a {@link TopBar} band over a
5331
+ * {@link SideNav} rail and a `children` content region. It knows nothing about
5332
+ * any one app: chrome arrives through the `topBarTrailing` slot (or the whole
5333
+ * `topBar` / `nav` slots), and categories through `navItems`. An app builds its
5334
+ * own shell by composing this one — see `shell/workout/WorkoutShell`.
5335
+ *
5336
+ * @example
5337
+ * <AppShell brand="brain" navItems={brainNavItems} activeKey={key} onNavigate={go}>
5338
+ * <BrainPage />
5339
+ * </AppShell>
4201
5340
  */
4202
- declare function BrandLockup({ subtitle, showSubtitle, className, ...props }: BrandLockupProps): react_jsx_runtime.JSX.Element;
5341
+ declare function AppShell({ brand, subtitle, topBarTrailing, topBar, navItems, activeKey, liveKey, onNavigate, nav, children, className, }: AppShellProps): react_jsx_runtime.JSX.Element;
4203
5342
 
4204
5343
  type SessionState = 'live' | 'rest' | 'idle';
4205
5344
  interface SessionStatePillProps extends ViewProps {
@@ -4213,6 +5352,8 @@ interface SessionStatePillProps extends ViewProps {
4213
5352
  * The global session-state readout (dot + label). Shared: the top bar's status
4214
5353
  * and the Live-view header both use it (this is the ledger's "StatusPill",
4215
5354
  * Family C — built once). S1 · SessionStatePill.
5355
+ *
5356
+ * @deprecated Use `<Pill tone="…" leading="dot">` — removed after AW-127 consumer migration.
4216
5357
  */
4217
5358
  declare function SessionStatePill({ state, label, className, ...props }: SessionStatePillProps): react_jsx_runtime.JSX.Element;
4218
5359
 
@@ -4270,7 +5411,15 @@ interface DeviceMenuProps {
4270
5411
  */
4271
5412
  declare function DeviceMenu({ devices, isOpen, onOpenChange, onSelectDevice, className, }: DeviceMenuProps): react_jsx_runtime.JSX.Element;
4272
5413
 
4273
- interface TopBarProps {
5414
+ /** The four workout-dashboard categories with their locked S2 glyphs (activity · history · layers · figure). */
5415
+ declare const workoutNavItems: SideNavItem[];
5416
+ /**
5417
+ * @deprecated Use `workoutNavItems` — these are the workout app's categories,
5418
+ * not a generic shell default. `SideNav.items` is required now (AW-132).
5419
+ */
5420
+ declare const defaultNavItems: SideNavItem[];
5421
+
5422
+ interface WorkoutTopBarProps {
4274
5423
  /** Global session state → the status pill. */
4275
5424
  state: SessionState;
4276
5425
  /** Devices for the connection glyph + dropdown. */
@@ -4279,89 +5428,31 @@ interface TopBarProps {
4279
5428
  time?: number | Date;
4280
5429
  /** Brand subtitle. Default "wall dashboard". */
4281
5430
  subtitle?: string;
4282
- /** Force the subtitle on/off; defaults to container-responsive (hidden below ~1024px). */
5431
+ /** Force the subtitle on/off; defaults to container-responsive. */
4283
5432
  showSubtitle?: boolean;
4284
- /** Force the clock on/off; defaults to container-responsive (hidden below ~720px). */
5433
+ /** Force the clock on/off; defaults to container-responsive. */
4285
5434
  showClock?: boolean;
4286
5435
  onSelectDevice?: (device: Device) => void;
4287
5436
  className?: string;
4288
5437
  }
4289
5438
  /**
4290
- * S1 · TopBar — the persistent shell chrome band. Brand (left) + a right cluster
4291
- * of session state · device glyph · clock (clock edge-pinned so spacing stays
4292
- * stable as the state text changes). Collapses subtitle then clock as its
4293
- * container narrows.
5439
+ * The workout app's top bar — the generic {@link TopBar} with the workout's own
5440
+ * chrome in its `trailing` slot: session state, then the device menu. The bar
5441
+ * adds its dividers and the clock; this component only supplies the items.
4294
5442
  */
4295
- declare function TopBar({ state, devices, time, subtitle, showSubtitle, showClock, onSelectDevice, className, }: TopBarProps): react_jsx_runtime.JSX.Element;
5443
+ declare function WorkoutTopBar({ state, devices, time, subtitle, showSubtitle, showClock, onSelectDevice, className, }: WorkoutTopBarProps): react_jsx_runtime.JSX.Element;
4296
5444
 
4297
- interface NavItemProps {
4298
- /** The nav glyph (an icon from `components/icons`, rendered ~20px via `currentColor`). */
4299
- icon: ReactNode;
4300
- /** Short label shown under the glyph (uppercased for display; used as the accessible name). */
4301
- label: string;
4302
- /** Active category → left accent bar + brand-colored glyph & label. */
4303
- active?: boolean;
4304
- /**
4305
- * A set is running for this category while it is NOT the active view
4306
- * (live-elsewhere) → a quiet muted-green label tint. Ignored when `active`.
4307
- */
4308
- live?: boolean;
4309
- onPress?: () => void;
4310
- className?: string;
4311
- }
4312
5445
  /**
4313
- * Shell S2 · NavItem one category button in the {@link SideNav}: a 20px glyph
4314
- * over an uppercase micro-label in a 46×46 target. The button spans the full 60px
4315
- * rail so the active **left accent bar** sits flush to the rail's edge. States:
4316
- * active = accent bar + `brand-primary`; `live` (while not active) tints only the
4317
- * label `status-success-dark` (the glyph stays dim); otherwise dim `text-tertiary`.
5446
+ * `WorkoutShell` the workout wall-dashboard chrome. Composes the generic
5447
+ * {@link AppShell} and fills its top-bar slot with the workout's own
5448
+ * {@link WorkoutTopBar} (session state + device menu) and its nav slot with the
5449
+ * four workout categories. The generic shell knows none of this; this component
5450
+ * is the whole workout-specific surface. Driven entirely by props.
4318
5451
  */
4319
- declare function NavItem({ icon, label, active, live, onPress, className, }: NavItemProps): react_jsx_runtime.JSX.Element;
4320
-
4321
- interface SideNavItem {
4322
- /** Stable category key — matches `activeKey` / `liveKey`. */
4323
- key: string;
4324
- /** Micro-label shown under the glyph. */
4325
- label: string;
4326
- /** The glyph node (rendered ~20px via `currentColor`). */
4327
- icon: ReactNode;
4328
- }
4329
- interface SideNavProps {
4330
- /** Category items, top → bottom. Defaults to the four dashboard categories. */
4331
- items?: SideNavItem[];
4332
- /** Key of the active category. */
4333
- activeKey: string;
4334
- /** Called with the tapped item's key. */
4335
- onNavigate?: (key: string) => void;
4336
- /**
4337
- * Key of a category with live activity while it is NOT active (e.g. a set
4338
- * running off its view) → a quiet green cue on that item's label.
4339
- */
4340
- liveKey?: string | null;
4341
- className?: string;
4342
- }
4343
- /** The four dashboard categories with their locked S2 glyphs (activity · history · layers · figure). */
4344
- declare const defaultNavItems: SideNavItem[];
4345
- /**
4346
- * Shell S2 · SideNav — the persistent 60px left rail that switches the main
4347
- * viewport between categories (Live · Review · Program · Body). Presentational:
4348
- * it renders `items` and reports taps via `onNavigate`; the app owns routing and
4349
- * which key is `live`. Active item shows a left accent bar; `liveKey` (when not
4350
- * the active view) tints that item's label a muted green. Fixed 60px at every
4351
- * width — labels sit under the glyph, so they never change the rail width.
4352
- */
4353
- declare function SideNav({ items, activeKey, onNavigate, liveKey, className, }: SideNavProps): react_jsx_runtime.JSX.Element;
4354
-
4355
- /**
4356
- * `DashboardShell` — the wall-dashboard chrome: a persistent {@link SideNav} rail +
4357
- * {@link TopBar} over a main content region. A thin frame that wires the shell-nav
4358
- * organisms together and exposes a `children` content slot, so the dashboard app
4359
- * mounts one component instead of re-assembling the chrome. Driven entirely by props.
4360
- */
4361
- interface DashboardShellProps {
5452
+ interface WorkoutShellProps {
4362
5453
  /** Active nav category key. */
4363
5454
  activeKey?: string;
4364
- /** Nav categories, top → bottom. Defaults to SideNav's four dashboard categories. */
5455
+ /** Nav categories, top → bottom. Defaults to the four workout categories. */
4365
5456
  navItems?: SideNavItem[];
4366
5457
  /** A category with off-view live activity → a quiet cue on that item. */
4367
5458
  liveKey?: string | null;
@@ -4377,7 +5468,11 @@ interface DashboardShellProps {
4377
5468
  children?: ReactNode;
4378
5469
  className?: string;
4379
5470
  }
4380
- declare function DashboardShell({ activeKey, navItems, liveKey, state, devices, subtitle, onNavigate, onSelectDevice, children, className, }: DashboardShellProps): react_jsx_runtime.JSX.Element;
5471
+ declare function WorkoutShell({ activeKey, navItems, liveKey, state, devices, subtitle, onNavigate, onSelectDevice, children, className, }: WorkoutShellProps): react_jsx_runtime.JSX.Element;
5472
+ /** @deprecated Renamed to `WorkoutShell` — same props (AW-132). Removed after consumer migration. */
5473
+ declare const DashboardShell: typeof WorkoutShell;
5474
+ /** @deprecated Renamed to `WorkoutShellProps` (AW-132). */
5475
+ type DashboardShellProps = WorkoutShellProps;
4381
5476
 
4382
5477
  /**
4383
5478
  * Utility function to merge Tailwind CSS classes with proper conflict resolution.
@@ -4390,10 +5485,20 @@ declare function DashboardShell({ activeKey, navItems, liveKey, state, devices,
4390
5485
  declare function cn(...inputs: ClassValue[]): string;
4391
5486
 
4392
5487
  /**
4393
- * Color utility functions for the design system
5488
+ * Compact integer formatting for dense readouts (stat tiles, sparkline
5489
+ * captions) where a full-precision number would blow the column width.
5490
+ */
5491
+ /** 1234 → "1.2k", 1048576 → "1.0M", 42 → "42". Sign is preserved. */
5492
+ declare function formatCompact(n: number): string;
5493
+ /** Like {@link formatCompact} but always signed: 514689 → "+514.7k", -20 → "-20". */
5494
+ declare function formatSignedCompact(n: number): string;
5495
+
5496
+ /**
5497
+ * Color utility functions for the design system.
4394
5498
  *
4395
- * lighten/darken are re-exported from shadows.ts which uses HSV-based
4396
- * color math for more perceptually consistent results across hues.
5499
+ * `lighten`/`darken` are re-exported from `theme/color-utils`, which does the
5500
+ * HSV math. They are hover/state adjustments, not a depth ladder — planes come
5501
+ * from the grey ramp.
4397
5502
  */
4398
5503
 
4399
5504
  type StatusType = 'success' | 'error' | 'warning' | 'info';
@@ -4587,4 +5692,4 @@ interface PrescriptionInput {
4587
5692
  */
4588
5693
  declare function formatPrescription(p: PrescriptionInput | null | undefined): string | null;
4589
5694
 
4590
- export { Accordion, AccordionButton, type AccordionButtonProps, AccordionItem, type AccordionItemProps, AccordionPanel, type AccordionPanelProps, type AccordionProps, ActivityIcon, Alert, AlertDescription, type AlertDescriptionProps, type AlertProps, type AlertStatus, AlertTitle, type AlertTitleProps, AlertTriangleIcon, type AlertVariant, Autocomplete, type AutocompleteOption, type AutocompleteProps, Avatar, AvatarBadge, type AvatarBadgeProps, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarSize, AwardIcon, BAND_GAP, BAND_H, Badge, type BadgeColor, type BadgeProps, type BadgeSize, BadgeText, type BadgeTextProps, type BadgeVariant, BaseBadge, type BaseBadgeProps, type BaseBadgeSize, type BaseBadgeVariant, BluetoothIcon, BrandLockup, type BrandLockupProps, BreadcrumbItem, type BreadcrumbItemProps, Breadcrumbs, type BreadcrumbsProps, Button, type ButtonColor, ButtonIcon, type ButtonIconProps, type ButtonProps, type ButtonSize, ButtonSpinner, type ButtonSpinnerProps, ButtonText, type ButtonTextProps, type ButtonVariant, Caption, type CaptionProps, Card, CardContent, type CardContentProps, CardDescription, type CardDescriptionProps, type CardElevation, CardFooter, type CardFooterProps, CardHeader, type CardHeaderProps, type CardProps, CardSkeleton, type CardSkeletonProps, CardTitle, type CardTitleProps, type CardVariant, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxProps, type CheckboxSize, Chip, type ChipColor, type ChipProps, type ChipSize, type ChipVariant, CircleSlashIcon, CircularProgress, type CircularProgressProps, CircularTimer, type CircularTimerProps, Collapse, CollapseButton, type CollapseButtonProps, CollapseContent, type CollapseContentProps, type CollapseProps, DRIFT_GREY, DashboardShell, type DashboardShellProps, DataRow, type DataRowProps, DateTime, type DateTimeFormat, type DateTimeProps, DeviationBar, type DeviationBarProps, type Device, type DeviceConnState, DeviceIndicator, type DeviceIndicatorProps, DeviceMenu, type DeviceMenuProps, DeviceRow, type DeviceRowProps, type DeviceRowState, type DimensionTone, Divider, type DividerOrientation, type DividerProps, Drawer, DrawerBody, type DrawerBodyProps, DrawerFooter, type DrawerFooterProps, DrawerHeader, type DrawerHeaderProps, type DrawerPlacement, type DrawerProps, type DrawerSize, DualGhostSpark, type DualGhostSparkProps, DumbbellIcon, ElevationLevel, EmptyState, type EmptyStateProps, ExerciseCardHeading, type ExerciseCardHeadingProps, ExerciseHeading, type ExerciseHeadingProps, ExerciseIndicatorKind, FatigueLights, type FatigueLightsProps, FatigueMeter, type FatigueMeterProps, type FatigueVerdict, type FatigueVerdictState, type FieldState, type FieldWrapperProps, FormActions, type FormActionsProps, type FormErrors, FormField, type FormFieldProps, FormRow, type FormRowProps, FormSection, type FormSectionProps, type FormTouched, type FormValues, GRIND_THRESHOLD, Gauge, type GaugeProps, type GaugeThreshold, GhostBand, type GhostBandProps, GhostBloom, type GhostBloomProps, GhostSpark, type GhostSparkProps, GlowIntensity, HStack, Heading, type HeadingProps, HelpTip, type HelpTipIcon, type HelpTipPlacement, type HelpTipProps, type HelpTipSize, HistoryIcon, IconBox, type IconBoxProps, type IconProps, Indicator, type IndicatorColor, type IndicatorProps, type IndicatorPulse, type IndicatorSize, InfoIcon, Input, InputBar, type InputBarProps, InputGroup, type InputGroupProps, type InputProps, type InputSize, type InputVariant, IntensityBar, type IntensityBarProps, Label, type LabelProps, LabelWithHelp, type LabelWithHelpProps, LayersIcon, Link, type LinkColor, type LinkProps, type LinkUnderline, ListItem, ListItemContent, type ListItemContentProps, ListItemDivider, type ListItemDividerProps, ListItemIcon, type ListItemIconProps, type ListItemProps, ListItemTrailing, type ListItemTrailingProps, type LiveAuraCategory, LiveAuraFrame, type LiveAuraFrameProps, LiveFatigueCard, type LiveFatigueCardProps, type LiveFatigueModel, LiveFatiguePanel, type LiveFatiguePanelHeader, type LiveFatiguePanelProps, type LiveFatiguePanelVelocity, METRIC_FONT, Menu, MenuDivider, type MenuDividerProps, MenuGroup, type MenuGroupProps, MenuItem, type MenuItemProps, MenuList, type MenuListProps, type MenuProps, MenuTrigger, type MenuTriggerProps, Metric, MetricCell, type MetricCellProps, MetricGroup, type MetricGroupProps, type MetricProps, type MetricTileData, MetricTiles, type MetricTilesProps, type MetricTrend, Modal, ModalBody, type ModalBodyProps, ModalCloseButton, type ModalCloseButtonProps, ModalContent, type ModalContentProps, ModalFooter, type ModalFooterProps, ModalHeader, type ModalHeaderProps, type ModalProps, type ModalSize, ModalTitle, type ModalTitleProps, MuscleGroupChip, type MuscleGroupChipProps, NavItem, type NavItemProps, type OnSurfaceRole, Overline, type OverlineProps, PHASE_AXIS_COLOR, type PRType, type PaceTone, Paragraph, type ParagraphProps, PasswordInput, type PasswordInputProps, PersonStandingIcon, type PhaseSegment, Pill, type PillColor, type PillProps, type PillSize, type PillVariant, PlaceholderStrip, type PlaceholderStripProps, Popover, PopoverCloseButton, type PopoverCloseButtonProps, PopoverContent, type PopoverContentProps, type PopoverPlacement, type PopoverProps, PopoverTrigger, type PopoverTriggerProps, PrBadge, type PrBadgeProps, PrHistoryModal, type PrHistoryModalProps, type PrRecord, type PrRecordType, type PrescriptionInput, Progress, type ProgressColor, type ProgressProps, type ProgressSize, ProgressSteps, type ProgressStepsProps, type ProgressVariant, type Pt, RED_DEEP, RED_LIGHT, RED_MID, Radio, type RadioColor, RadioGroup, type RadioGroupProps, type RadioProps, type RadioSize, ReadinessCheck, type ReadinessCheckProps, type ReadinessFactor, type RepRomPoint, type RepVelocityCurve, RestTimer, type RestTimerProps, type ResultType, RomProgressionChart, type RomProgressionChartProps, SILVER, STATE_LABEL, SURFACE_LEVEL_TOKEN, type SamplePhase, ScaleIcon, Scatter, type ScatterAxis, type ScatterDatum, type ScatterProps, ScheduleTiles, type ScheduleTilesProps, Section, SectionContent, type SectionContentProps, SectionHeader, type SectionHeaderProps, type SectionProps, SegmentedBar, type SegmentedBarProps, type SegmentedBarSegment, SegmentedProgressBar, type SegmentedProgressBarProps, type SegmentedProgressBarSegment, Select, type SelectOption, type SelectProps, SessionHeader, type SessionHeaderPlanEntry, type SessionHeaderProps, SessionRail, type SessionRailExercise, type SessionRailProps, type SessionState, SessionStatePill, type SessionStatePillProps, SetRowProps, SetStrip, type SetStripProps, SetStripSet, SetTableHeader, type SetTableHeaderProps, SetsRepsLoad, type SetsRepsLoadProps, SideNav, type SideNavItem, type SideNavProps, Sidebar, SidebarContent, type SidebarContentProps, SidebarDivider, type SidebarDividerProps, SidebarFooter, type SidebarFooterProps, SidebarHeader, type SidebarHeaderProps, SidebarItem, type SidebarItemProps, type SidebarProps, SidebarSection, type SidebarSectionProps, Skeleton, type SkeletonAnimation, SkeletonCard, type SkeletonCardProps, SkeletonCircle, type SkeletonCircleProps, SkeletonListItem, type SkeletonListItemProps, type SkeletonProps, SkeletonText, type SkeletonTextProps, type SkeletonVariant, type SortDirection, Sparkline, type SparklineProps, Spinner, type SpinnerColor, type SpinnerProps, type SpinnerSize, Stack, type StackProps, StarIcon, StatusDot, type StatusDotProps, type StatusDotVariant, StatusPill, type StatusPillProps, type StatusPillStatus, type StatusType, StepContent, type StepContentProps, StepIndicator, type StepIndicatorProps, StepLabel, type StepLabelProps, type StepStatus, Stepper, type StepperOrientation, type StepperProps, Step as StepperStep, type StepProps as StepperStepProps, SupersetWrapper, type SupersetWrapperProps, Surface, SurfaceContext, type SurfaceContextValue, type SurfaceLevel, type SurfaceProps, SvgIcon, type SvgIconProps, Switch, type SwitchProps, type SwitchSize, TONE_COLOR, Tab, TabList, type TabListProps, TabPanel, type TabPanelProps, TabPanels, type TabPanelsProps, type TabProps, Table, TableBody, type TableBodyProps, TableCell, type TableCellProps, TableHeader, TableHeaderCell, type TableHeaderCellProps, type TableHeaderProps, TablePagination, type TablePaginationProps, type TableProps, TableRow, type TableRowProps, Tabs, type TabsOrientation, type TabsProps, type TabsVariant, TempoDisplay, type TempoDisplayProps, type TempoLivePhase, type TempoLiveReadout, type TempoLiveState, ThemeMode, Tile, type TileProps, type TimerMode, TimerReadout, type TimerReadoutProps, type TimerState, Toast, type ToastConfig, type ToastPosition, type ToastProps, ToastProvider, type ToastProviderProps, type ToastStatus, ToolbarButton, ToolbarButtonGroup, type ToolbarButtonGroupProps, type ToolbarButtonProps, type ToolbarButtonSize, type ToolbarButtonVariant, Tooltip, type TooltipPlacement, type TooltipProps, TopBar, type TopBarProps, Treemap, type TreemapDatum, type TreemapProps, type TreemapScale, TrendingDownIcon, Typography, type TypographyAlign, type TypographyColor, type TypographyProps, type TypographyVariant, type UseTableOptions, type UseTableReturn, type UseTimerOptions, VStack, VelocityHero, type VelocityHeroProps, type VelocitySample, VerdictHero, type VerdictHeroProps, VoltrasMark, VolumeLandmarkBar, type VolumeLandmarkBarProps, VolumeLandmarks, type VolumeStatus, type VolumeZone, type WarmUpStatus, type WarmUpValidation, WeightBadge, type WeightBadgeProps, type WeightBadgeSize, ZoneTrack, type ZoneTrackBand, type ZoneTrackMarker, type ZoneTrackProps, type ZoneTrackTick, type ZoneTrackZone, alpha, auraForVerdict, cn, composeValidators, createFieldId, defaultNavItems, formatDateTime, formatDuration, formatPrescription, formatSignedPct, formatVelocity, getContrastText, getFieldAriaProps, getFieldValidationProps, getLuminance, getResultColor, getStatusColor, ghostLineColor, hasMaxLength, hasMinLength, isEmpty, isValidEmail, liveAuraColor, mergePhaseSegments, onSurfaceColors, paceTone, paceToneColor, pressedLevel, roundRpe, roundTempo, roundWeight, rpeColor, smoothPath, statusPillColor, surfaceBackground, useOnSurfaceColor, useSurface, useSurfaceMode, useTable, useTimer, useToast, useToolbarButton, validationRules };
5695
+ export { Accordion, AccordionButton, type AccordionButtonProps, AccordionItem, type AccordionItemProps, AccordionPanel, type AccordionPanelProps, type AccordionProps, ActivityIcon, Alert, AlertDescription, type AlertDescriptionProps, type AlertProps, type AlertStatus, AlertTitle, type AlertTitleProps, AlertTriangleIcon, type AlertVariant, AppShell, type AppShellProps, Autocomplete, type AutocompleteOption, type AutocompleteProps, Avatar, AvatarBadge, type AvatarBadgeProps, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarSize, AwardIcon, BAND_GAP, BAND_H, Badge, type BadgeColor, type BadgeProps, type BadgeSize, BadgeText, type BadgeTextProps, type BadgeVariant, BaseBadge, type BaseBadgeProps, type BaseBadgeSize, type BaseBadgeVariant, BluetoothIcon, BotIcon, BrainIcon, type BrandKey, BrandLockup, type BrandLockupProps, type BrandPreset, BreadcrumbItem, type BreadcrumbItemProps, Breadcrumbs, type BreadcrumbsProps, type BriefSection, Button, type ButtonColor, ButtonIcon, type ButtonIconProps, type ButtonProps, type ButtonSize, ButtonSpinner, type ButtonSpinnerProps, ButtonText, type ButtonTextProps, type ButtonVariant, CARD_HEIGHT_SHARE_STACKED, CARD_WIDTH_BASE, CARD_WIDTH_MAX, CARD_WIDTH_XL_RATIO, COMPACT_SEVERITY_BELOW, Caption, type CaptionProps, Card, CardContent, type CardContentProps, CardDescription, type CardDescriptionProps, type CardElevation, CardFooter, type CardFooterProps, CardHeader, type CardHeaderProps, type CardProps, CardSkeleton, type CardSkeletonProps, CardTitle, type CardTitleProps, type CardVariant, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxProps, type CheckboxSize, Chip, type ChipColor, type ChipProps, type ChipSize, type ChipVariant, CircleSlashIcon, CircularProgress, type CircularProgressProps, CircularTimer, type CircularTimerProps, CoChangeChip, type CoChangeChipProps, type CoChangeEdge, Collapse, CollapseButton, type CollapseButtonProps, CollapseContent, type CollapseContentProps, type CollapseProps, type ColumnFitResult, DRIFT_GREY, DashboardShell, type DashboardShellProps, DataRow, type DataRowProps, DateTime, type DateTimeFormat, type DateTimeProps, DeviationBar, type DeviationBarProps, type Device, type DeviceConnState, DeviceIndicator, type DeviceIndicatorProps, DeviceMenu, type DeviceMenuProps, DeviceRow, type DeviceRowProps, type DeviceRowState, type DimensionTone, Divider, type DividerOrientation, type DividerProps, Drawer, DrawerBody, type DrawerBodyProps, DrawerFooter, type DrawerFooterProps, DrawerHeader, type DrawerHeaderProps, type DrawerPlacement, type DrawerProps, type DrawerSize, DualGhostSpark, type DualGhostSparkProps, DumbbellIcon, ElevationLevel, EmptyState, type EmptyStateProps, ExactTime, ExerciseCardHeading, type ExerciseCardHeadingProps, ExerciseHeading, type ExerciseHeadingProps, ExerciseIndicatorKind, Eyebrow, type EyebrowProps, FILE_EVENT_COLOR, FILE_EVENT_COLOR_CATEGORICAL, FILE_EVENT_COLOR_SEMANTIC, FatigueLights, type FatigueLightsProps, FatigueMeter, type FatigueMeterProps, type FatigueVerdict, type FatigueVerdictState, type FieldState, type FieldWrapperProps, type FileActivity, FileActivityDetail, type FileActivityDetailData, type FileActivityDetailProps, FileActivityRow, type FileActivityRowProps, type FileCoChange, type FileEventColors, FileHistoryExplorer, type FileHistoryExplorerProps, type FileHistoryStat, FilePathLabel, type FilePathLabelProps, type FilePathLabelSize, FormActions, type FormActionsProps, type FormErrors, FormField, type FormFieldProps, FormRow, type FormRowProps, FormSection, type FormSectionProps, type FormTouched, type FormValues, GRIND_THRESHOLD, Gauge, type GaugeProps, type GaugeThreshold, GhostBand, type GhostBandProps, GhostBloom, type GhostBloomProps, GhostSpark, type GhostSparkProps, GlowIntensity, HERO_EYEBROW_ALLOWANCE, HStack, Heading, type HeadingProps, HeadphonesIcon, HelpTip, type HelpTipIcon, type HelpTipPlacement, type HelpTipProps, type HelpTipSize, HistoryIcon, INITIATIVE_STATE_META, IconBox, type IconBoxProps, type IconProps, Indicator, type IndicatorColor, type IndicatorProps, type IndicatorPulse, type IndicatorSize, InfoIcon, InitiativeBrief, type InitiativeBriefData, type InitiativeBriefProps, InitiativeCard, type InitiativeCardProps, type InitiativeCardTopTask, InitiativeHeader, type InitiativeHeaderProps, type InitiativeState, Input, InputBar, type InputBarProps, InputGroup, type InputGroupProps, type InputProps, type InputSize, type InputVariant, IntensityBar, type IntensityBarProps, KanbanIcon, Label, type LabelProps, LabelWithHelp, type LabelWithHelpProps, LayersIcon, LiftOptions, Link, type LinkColor, type LinkProps, type LinkUnderline, ListItem, ListItemContent, type ListItemContentProps, ListItemDivider, type ListItemDividerProps, ListItemIcon, type ListItemIconProps, type ListItemProps, ListItemTrailing, type ListItemTrailingProps, type LiveAuraCategory, LiveAuraFrame, type LiveAuraFrameProps, LiveFatigueCard, type LiveFatigueCardProps, type LiveFatigueModel, LiveFatiguePanel, type LiveFatiguePanelProps, type LiveFatiguePanelVelocity, METRIC_FONT, MarkdownProse, type MarkdownProseProps, Menu, MenuDivider, type MenuDividerProps, MenuGroup, type MenuGroupProps, MenuItem, type MenuItemProps, MenuList, type MenuListProps, type MenuProps, MenuTrigger, type MenuTriggerProps, Metric, MetricCell, type MetricCellProps, MetricGroup, type MetricGroupProps, type MetricProps, type MetricTileData, MetricTiles, type MetricTilesProps, type MetricTrend, Modal, ModalBody, type ModalBodyProps, ModalCloseButton, type ModalCloseButtonProps, ModalContent, type ModalContentProps, ModalFooter, type ModalFooterProps, ModalHeader, type ModalHeaderProps, type ModalProps, type ModalSize, ModalTitle, type ModalTitleProps, MuscleGroupChip, type MuscleGroupChipProps, NavItem, type NavItemProps, type OnSurfaceRole, type OpenLoop, type OpenLoopKind, OpenLoops, type OpenLoopsProps, Overline, type OverlineProps, PANEL_BREAKPOINTS, PHASE_AXIS_COLOR, type PRType, PR_REF_PATTERN, type PaceTone, type PanelBodySplit, type PanelLayout, type PanelTier, Paragraph, type ParagraphProps, PasswordInput, type PasswordInputProps, PersonStandingIcon, type PhaseSegment, Pill, type PillColor, type PillProps, type PillSize, type PillTone, type PillVariant, PlaceholderStrip, type PlaceholderStripProps, Popover, PopoverCloseButton, type PopoverCloseButtonProps, PopoverContent, type PopoverContentProps, type PopoverPlacement, type PopoverProps, PopoverTrigger, type PopoverTriggerProps, PortfolioOverview, type PortfolioOverviewProps, type PortfolioOverviewSection, type PortfolioOverviewStat, PrBadge, type PrBadgeProps, PrHistoryModal, type PrHistoryModalProps, type PrRecord, type PrRecordType, type PrescriptionInput, Progress, type ProgressColor, type ProgressProps, type ProgressSize, ProgressSteps, type ProgressStepsProps, type ProgressVariant, type ProseBlock, type ProseBlockType, type ProseLinkTone, type ProseLinker, type Pt, RED_DEEP, RED_LIGHT, RED_MID, Radio, type RadioColor, RadioGroup, type RadioGroupProps, type RadioProps, type RadioSize, ReadinessCheck, type ReadinessCheckProps, type ReadinessFactor, type RepRomPoint, type RepVelocityCurve, type ResolvedSurface, RestTimer, type RestTimerProps, type ResultType, RomProgressionChart, type RomProgressionChartProps, SEVERITY_BAR_COLOR, SEVERITY_META, SEVERITY_ORDER, SEVERITY_RANK, SILVER, STATE_LABEL, type SamplePhase, ScaleIcon, Scatter, type ScatterAxis, type ScatterDatum, type ScatterProps, ScheduleTiles, type ScheduleTilesProps, Section, SectionContent, type SectionContentProps, SectionHeader, type SectionHeaderProps, type SectionProps, SegmentedBar, type SegmentedBarProps, type SegmentedBarSegment, SegmentedProgressBar, type SegmentedProgressBarProps, type SegmentedProgressBarSegment, Select, type SelectOption, type SelectProps, SessionDetail, type SessionDetailProps, SessionHeader, type SessionHeaderPlanEntry, type SessionHeaderProps, type SessionLinkHandlers, SessionList, SessionListItem, type SessionListItemProps, type SessionListProps, SessionRail, type SessionRailExercise, type SessionRailProps, type SessionState, SessionStatePill, type SessionStatePillProps, type SessionSummary, SetRowProps, SetStrip, type SetStripProps, SetStripSet, SetTableHeader, type SetTableHeaderProps, SetsRepsLoad, type SetsRepsLoadProps, type SeverityDisplay, SeverityLabel, type SeverityLabelProps, SideNav, type SideNavItem, type SideNavProps, Sidebar, SidebarContent, type SidebarContentProps, SidebarDivider, type SidebarDividerProps, SidebarFooter, type SidebarFooterProps, SidebarHeader, type SidebarHeaderProps, SidebarItem, type SidebarItemProps, type SidebarProps, SidebarSection, type SidebarSectionProps, Skeleton, type SkeletonAnimation, SkeletonCard, type SkeletonCardProps, SkeletonCircle, type SkeletonCircleProps, SkeletonListItem, type SkeletonListItemProps, type SkeletonProps, SkeletonText, type SkeletonTextProps, type SkeletonVariant, type SortDirection, SparkBars, type SparkBarsProps, Sparkline, type SparklineProps, Spinner, type SpinnerColor, type SpinnerProps, type SpinnerSize, Stack, type StackProps, StarIcon, StatusDot, type StatusDotProps, type StatusDotVariant, StatusPill, type StatusPillProps, type StatusPillStatus, type StatusType, StepContent, type StepContentProps, StepIndicator, type StepIndicatorProps, StepLabel, type StepLabelProps, type StepStatus, Stepper, type StepperOrientation, type StepperProps, Step as StepperStep, type StepProps as StepperStepProps, SupersetWrapper, type SupersetWrapperProps, Surface, SurfaceContext, type SurfaceContextValue, type SurfaceDepthProps, SurfaceLevel, type SurfaceProps, SvgIcon, type SvgIconProps, Switch, type SwitchProps, type SwitchSize, TASK_COLUMN_WIDTHS, TASK_REF_PATTERN, TONE_COLOR, Tab, TabList, type TabListProps, TabPanel, type TabPanelProps, TabPanels, type TabPanelsProps, type TabProps, Table, TableBody, type TableBodyProps, TableCell, type TableCellProps, type TableColumnFit, type TableComparator, type TableDensity, TableHeader, TableHeaderCell, type TableHeaderCellProps, type TableHeaderProps, TablePagination, type TablePaginationProps, type TableProps, TableRow, type TableRowProps, Tabs, type TabsOrientation, type TabsProps, type TabsVariant, type TaskColumnKey, TaskIds, type TaskListItem, TaskRow, type TaskRowProps, type TaskSeverity, TaskTable, type TaskTableProps, TempoDisplay, type TempoDisplayProps, type TempoLivePhase, type TempoLiveReadout, type TempoLiveState, ThemeMode, Tile, type TileProps, type TimerMode, TimerReadout, type TimerReadoutProps, type TimerState, Toast, type ToastConfig, type ToastPosition, type ToastProps, ToastProvider, type ToastProviderProps, type ToastStatus, ToolbarButton, ToolbarButtonGroup, type ToolbarButtonGroupProps, type ToolbarButtonProps, type ToolbarButtonSize, type ToolbarButtonVariant, Tooltip, type TooltipPlacement, type TooltipProps, TopBar, type TopBarProps, Treemap, type TreemapDatum, type TreemapProps, type TreemapScale, TrendingDownIcon, Typography, type TypographyAlign, type TypographyColor, type TypographyProps, type TypographyVariant, type UseColumnFitResult, type UseMeasuredWidthResult, type UseTableOptions, type UseTableReturn, type UseTimerOptions, VStack, VelocityHero, type VelocityHeroProps, type VelocitySample, VerdictHero, type VerdictHeroProps, VoltrasMark, VolumeLandmarkBar, type VolumeLandmarkBarProps, VolumeLandmarks, type VolumeStatus, type VolumeZone, WIKI_LINK_PATTERN, type WarmUpStatus, type WarmUpValidation, WeightBadge, type WeightBadgeProps, type WeightBadgeSize, WorkoutShell, type WorkoutShellProps, WorkoutTopBar, type WorkoutTopBarProps, ZoneTrack, type ZoneTrackBand, type ZoneTrackMarker, type ZoneTrackProps, type ZoneTrackTick, type ZoneTrackZone, alpha, auraForVerdict, brandKeys, brandPresets, cn, composeValidators, createFieldId, defaultNavItems, extractTaskRefs, fitColumns, formatCompact, formatDateTime, formatDuration, formatPrescription, formatSessionDuration, formatSignedCompact, formatSignedPct, formatTaskAge, formatVelocity, getContrastText, getFieldAriaProps, getFieldValidationProps, getLuminance, getResultColor, getStatusColor, ghostLineColor, groupByPeriod, hasMaxLength, hasMinLength, isEmpty, isValidEmail, liveAuraColor, mergePhaseSegments, onSurfaceColors, paceTone, paceToneColor, panelBodySplit, panelLayout, panelTier, parseProseBlocks, prRefLinker, resolveSurfaceDepth, roundRpe, roundTempo, roundWeight, rpeColor, sessionLinkers, sessionPeriod, sessionRowMeta, severityRank, smoothPath, splitBriefSections, splitPath, statusPillColor, stripLeadingHeading, taskRefLinker, useColumnFit, useHoverState, useMeasuredWidth, useOnSurfaceColor, useResolvedSurface, useSurface, useSurfaceMode, useTable, useTimer, useToast, useToolbarButton, validationRules, wikiLinkLinker, workoutNavItems };