@titan-design/react-ui 0.12.1 → 0.14.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 (531) hide show
  1. package/README.md +60 -47
  2. package/dist/bodymap.js +856 -736
  3. package/dist/bodymap.js.map +1 -1
  4. package/dist/bodymap.mjs +858 -738
  5. package/dist/bodymap.mjs.map +1 -1
  6. package/dist/index.d.mts +1431 -237
  7. package/dist/index.d.ts +1431 -237
  8. package/dist/index.js +6506 -4781
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.mjs +6280 -4642
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/{pages-B1hqnGIC.d.ts → pages-CsjsUn0G.d.ts} +51 -16
  13. package/dist/{pages-CvsFqNtx.d.mts → pages-ZbT_pD_U.d.mts} +51 -16
  14. package/dist/pages.d.mts +1 -1
  15. package/dist/pages.d.ts +1 -1
  16. package/dist/pages.js +1919 -1937
  17. package/dist/pages.js.map +1 -1
  18. package/dist/pages.mjs +1927 -1945
  19. package/dist/pages.mjs.map +1 -1
  20. package/dist/theme/index.d.mts +225 -140
  21. package/dist/theme/index.d.ts +225 -140
  22. package/dist/theme/index.js +298 -319
  23. package/dist/theme/index.js.map +1 -1
  24. package/dist/theme/index.mjs +283 -315
  25. package/dist/theme/index.mjs.map +1 -1
  26. package/dist/theme/tokens-css.js +145 -24
  27. package/dist/theme/tokens-css.js.map +1 -1
  28. package/dist/theme/tokens-css.mjs +145 -24
  29. package/dist/theme/tokens-css.mjs.map +1 -1
  30. package/dist/theme/tokens.d.mts +128 -11
  31. package/dist/theme/tokens.d.ts +128 -11
  32. package/dist/theme/tokens.js +126 -26
  33. package/dist/theme/tokens.js.map +1 -1
  34. package/dist/theme/tokens.mjs +124 -27
  35. package/dist/theme/tokens.mjs.map +1 -1
  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/docs/render-testing-pattern.md +130 -0
  40. package/package.json +1 -1
  41. package/src/arch/Architecture.stories.tsx +3 -1
  42. package/src/arch/arch-graph.freshness.test.ts +52 -0
  43. package/src/arch/arch-graph.json +4989 -1583
  44. package/src/components/custom/ActiveWork/CoChangeChip.stories.tsx +44 -0
  45. package/src/components/custom/ActiveWork/CoChangeChip.test.tsx +29 -0
  46. package/src/components/custom/ActiveWork/CoChangeChip.tsx +48 -0
  47. package/src/components/custom/ActiveWork/Eyebrow.stories.tsx +25 -0
  48. package/src/components/custom/ActiveWork/Eyebrow.test.tsx +16 -0
  49. package/src/components/custom/ActiveWork/Eyebrow.tsx +26 -0
  50. package/src/components/custom/ActiveWork/FileActivityDetail.stories.tsx +50 -0
  51. package/src/components/custom/ActiveWork/FileActivityDetail.test.tsx +66 -0
  52. package/src/components/custom/ActiveWork/FileActivityDetail.tsx +202 -0
  53. package/src/components/custom/ActiveWork/FileActivityRow.stories.tsx +70 -0
  54. package/src/components/custom/ActiveWork/FileActivityRow.test.tsx +67 -0
  55. package/src/components/custom/ActiveWork/FileActivityRow.tsx +130 -0
  56. package/src/components/custom/ActiveWork/FileHistoryExplorer.stories.tsx +84 -0
  57. package/src/components/custom/ActiveWork/FileHistoryExplorer.test.tsx +99 -0
  58. package/src/components/custom/ActiveWork/FileHistoryExplorer.tsx +138 -0
  59. package/src/components/custom/ActiveWork/FilePathLabel.stories.tsx +39 -0
  60. package/src/components/custom/ActiveWork/FilePathLabel.test.tsx +53 -0
  61. package/src/components/custom/ActiveWork/FilePathLabel.tsx +63 -0
  62. package/src/components/custom/ActiveWork/InitiativeBrief.stories.tsx +50 -0
  63. package/src/components/custom/ActiveWork/InitiativeBrief.test.tsx +62 -0
  64. package/src/components/custom/ActiveWork/InitiativeBrief.tsx +182 -0
  65. package/src/components/custom/ActiveWork/InitiativeCard.stories.tsx +73 -0
  66. package/src/components/custom/ActiveWork/InitiativeCard.test.tsx +68 -0
  67. package/src/components/custom/ActiveWork/InitiativeCard.tsx +136 -0
  68. package/src/components/custom/ActiveWork/InitiativeHeader.stories.tsx +59 -0
  69. package/src/components/custom/ActiveWork/InitiativeHeader.test.tsx +40 -0
  70. package/src/components/custom/ActiveWork/InitiativeHeader.tsx +73 -0
  71. package/src/components/custom/ActiveWork/InitiativeReader.stories.tsx +145 -0
  72. package/src/components/custom/ActiveWork/OpenLoops.stories.tsx +58 -0
  73. package/src/components/custom/ActiveWork/OpenLoops.test.tsx +61 -0
  74. package/src/components/custom/ActiveWork/OpenLoops.tsx +107 -0
  75. package/src/components/custom/ActiveWork/PortfolioOverview.stories.tsx +101 -0
  76. package/src/components/custom/ActiveWork/PortfolioOverview.test.tsx +81 -0
  77. package/src/components/custom/ActiveWork/PortfolioOverview.tsx +83 -0
  78. package/src/components/custom/ActiveWork/README.md +305 -0
  79. package/src/components/custom/ActiveWork/SessionDetail.stories.tsx +71 -0
  80. package/src/components/custom/ActiveWork/SessionDetail.test.tsx +84 -0
  81. package/src/components/custom/ActiveWork/SessionDetail.tsx +180 -0
  82. package/src/components/custom/ActiveWork/SessionList.stories.tsx +69 -0
  83. package/src/components/custom/ActiveWork/SessionList.test.tsx +78 -0
  84. package/src/components/custom/ActiveWork/SessionList.tsx +103 -0
  85. package/src/components/custom/ActiveWork/SessionListItem.stories.tsx +64 -0
  86. package/src/components/custom/ActiveWork/SessionListItem.test.tsx +62 -0
  87. package/src/components/custom/ActiveWork/SessionListItem.tsx +152 -0
  88. package/src/components/custom/ActiveWork/SessionReader.stories.tsx +113 -0
  89. package/src/components/custom/ActiveWork/SeverityLabel.stories.tsx +51 -0
  90. package/src/components/custom/ActiveWork/SeverityLabel.test.tsx +68 -0
  91. package/src/components/custom/ActiveWork/SeverityLabel.tsx +97 -0
  92. package/src/components/custom/ActiveWork/TaskRow.stories.tsx +63 -0
  93. package/src/components/custom/ActiveWork/TaskRow.test.tsx +112 -0
  94. package/src/components/custom/ActiveWork/TaskRow.tsx +176 -0
  95. package/src/components/custom/ActiveWork/TaskTable.stories.tsx +123 -0
  96. package/src/components/custom/ActiveWork/TaskTable.test.tsx +233 -0
  97. package/src/components/custom/ActiveWork/TaskTable.tsx +321 -0
  98. package/src/components/custom/ActiveWork/active-work-depth.test.tsx +102 -0
  99. package/src/components/custom/ActiveWork/file-history-fixture.ts +91 -0
  100. package/src/components/custom/ActiveWork/format-time.test.ts +23 -0
  101. package/src/components/custom/ActiveWork/format-time.ts +32 -0
  102. package/src/components/custom/ActiveWork/index.ts +19 -0
  103. package/src/components/custom/ActiveWork/initiative-fixture.ts +104 -0
  104. package/src/components/custom/ActiveWork/session-fixture.ts +267 -0
  105. package/src/components/custom/ActiveWork/session-linkers.ts +56 -0
  106. package/src/components/custom/ActiveWork/task-list-fixture.ts +97 -0
  107. package/src/components/custom/CircularTimer/CircularTimer.stories.tsx +12 -6
  108. package/src/components/custom/DateTime/DateTime.stories.tsx +2 -1
  109. package/src/components/custom/DateTime/DateTime.test.tsx +3 -1
  110. package/src/components/custom/EmptyState/EmptyState.stories.tsx +22 -9
  111. package/src/components/custom/EmptyState/EmptyState.test.tsx +7 -13
  112. package/src/components/custom/EmptyState/EmptyState.tsx +4 -18
  113. package/src/components/custom/Fatigue/DualGhostSpark.stories.tsx +4 -3
  114. package/src/components/custom/Fatigue/FatigueLights.stories.tsx +2 -2
  115. package/src/components/custom/Fatigue/GhostSpark.stories.tsx +4 -3
  116. package/src/components/custom/Fatigue/LiveFatigueCard.stories.tsx +2 -2
  117. package/src/components/custom/Fatigue/LiveFatigueCard.tsx +8 -4
  118. package/src/components/custom/Fatigue/LiveFatiguePanel.stories.tsx +116 -6
  119. package/src/components/custom/Fatigue/LiveFatiguePanel.test.tsx +134 -0
  120. package/src/components/custom/Fatigue/LiveFatiguePanel.tsx +54 -83
  121. package/src/components/custom/Fatigue/README.md +40 -3
  122. package/src/components/custom/Fatigue/RomProgressionChart.stories.tsx +2 -2
  123. package/src/components/custom/Fatigue/SilverRedPalette.stories.tsx +2 -1
  124. package/src/components/custom/Fatigue/VelocityHero.stories.tsx +4 -3
  125. package/src/components/custom/Fatigue/VerdictHero.stories.tsx +2 -2
  126. package/src/components/custom/Fatigue/fatigue-mock.test.ts +0 -5
  127. package/src/components/custom/Fatigue/fatigue-mock.ts +2 -10
  128. package/src/components/custom/Fatigue/fatigue-tokens.ts +12 -0
  129. package/src/components/custom/Fatigue/index.ts +17 -5
  130. package/src/components/custom/Fatigue/panel-layout.test.ts +149 -0
  131. package/src/components/custom/Fatigue/panel-layout.ts +185 -0
  132. package/src/components/custom/Gauge/Gauge.stories.tsx +6 -3
  133. package/src/components/custom/Gauge/Gauge.test.tsx +1 -1
  134. package/src/components/custom/Gauge/Gauge.tsx +7 -2
  135. package/src/components/custom/Metric/Metric.stories.tsx +10 -1
  136. package/src/components/custom/Metric/Metric.test.tsx +1 -3
  137. package/src/components/custom/Metric/Metric.tsx +5 -20
  138. package/src/components/custom/Prose/MarkdownProse.stories.tsx +88 -0
  139. package/src/components/custom/Prose/MarkdownProse.test.tsx +87 -0
  140. package/src/components/custom/Prose/MarkdownProse.tsx +201 -0
  141. package/src/components/custom/Prose/README.md +58 -0
  142. package/src/components/custom/Prose/index.ts +1 -0
  143. package/src/components/custom/Scatter/Scatter.stories.tsx +55 -14
  144. package/src/components/custom/Scatter/Scatter.test.tsx +2 -2
  145. package/src/components/custom/Scatter/Scatter.tsx +122 -18
  146. package/src/components/custom/Sidebar/Sidebar.stories.tsx +41 -8
  147. package/src/components/custom/Sidebar/Sidebar.test.tsx +5 -1
  148. package/src/components/custom/Sidebar/Sidebar.tsx +16 -33
  149. package/src/components/custom/Table/Table.stories.tsx +99 -16
  150. package/src/components/custom/Table/Table.test.tsx +273 -86
  151. package/src/components/custom/Table/Table.tsx +159 -67
  152. package/src/components/custom/Table/column-fit.test.ts +75 -0
  153. package/src/components/custom/Table/column-fit.ts +116 -0
  154. package/src/components/custom/Table/index.ts +9 -0
  155. package/src/components/custom/TimerReadout/TimerReadout.stories.tsx +8 -6
  156. package/src/components/custom/Treemap/Treemap.stories.tsx +15 -12
  157. package/src/components/custom/Treemap/Treemap.test.tsx +1 -1
  158. package/src/components/custom/Treemap/Treemap.tsx +11 -3
  159. package/src/components/custom/Typography/Typography.stories.tsx +28 -1
  160. package/src/components/custom/Typography/Typography.test.tsx +34 -0
  161. package/src/components/custom/Typography/Typography.tsx +6 -0
  162. package/src/components/custom/Typography/index.ts +1 -8
  163. package/src/components/custom/Workout/ActiveWorkoutPage.stories.tsx +11 -2
  164. package/src/components/custom/Workout/BaseBadge.stories.tsx +27 -11
  165. package/src/components/custom/Workout/BaseBadge.test.tsx +31 -11
  166. package/src/components/custom/Workout/BaseBadge.tsx +6 -2
  167. package/src/components/custom/Workout/BodyMap.stories.tsx +4 -1
  168. package/src/components/custom/Workout/BodyMap.tsx +8 -4
  169. package/src/components/custom/Workout/BodyMapDetailPanel.stories.tsx +28 -6
  170. package/src/components/custom/Workout/BodyMapDetailPanel.test.tsx +11 -15
  171. package/src/components/custom/Workout/BodyMapDetailPanel.tsx +50 -12
  172. package/src/components/custom/Workout/CapacityBandChart.stories.tsx +12 -9
  173. package/src/components/custom/Workout/CapacityBandChart.test.tsx +24 -51
  174. package/src/components/custom/Workout/CapacityBandChart.tsx +144 -111
  175. package/src/components/custom/Workout/DeviationBar.stories.tsx +1 -1
  176. package/src/components/custom/Workout/DeviationBar.test.tsx +10 -4
  177. package/src/components/custom/Workout/DeviationBar.tsx +24 -16
  178. package/src/components/custom/Workout/DualVelocityStrip.stories.tsx +183 -0
  179. package/src/components/custom/Workout/DualVelocityStrip.test.tsx +32 -18
  180. package/src/components/custom/Workout/ExerciseCard.stories.tsx +12 -11
  181. package/src/components/custom/Workout/ExerciseCard.test.tsx +52 -22
  182. package/src/components/custom/Workout/ExerciseCard.tsx +99 -183
  183. package/src/components/custom/Workout/ExerciseCardHeading.stories.tsx +95 -12
  184. package/src/components/custom/Workout/ExerciseCardHeading.test.tsx +189 -1
  185. package/src/components/custom/Workout/ExerciseCardHeading.tsx +167 -18
  186. package/src/components/custom/Workout/ExerciseDetailPage.stories.tsx +9 -1
  187. package/src/components/custom/Workout/ExerciseDetailPage.tsx +3 -2
  188. package/src/components/custom/Workout/ExerciseHeading.stories.tsx +8 -8
  189. package/src/components/custom/Workout/ExerciseHeading.tsx +194 -46
  190. package/src/components/custom/Workout/ExerciseIndicator.stories.tsx +12 -9
  191. package/src/components/custom/Workout/ExerciseIndicator.test.tsx +27 -11
  192. package/src/components/custom/Workout/ExerciseIndicator.tsx +14 -15
  193. package/src/components/custom/Workout/FatigueMeter.stories.tsx +5 -5
  194. package/src/components/custom/Workout/InputBar.stories.tsx +4 -5
  195. package/src/components/custom/Workout/InputBar.tsx +4 -2
  196. package/src/components/custom/Workout/IntensityBar.stories.tsx +1 -1
  197. package/src/components/custom/Workout/IntensityBar.test.tsx +5 -1
  198. package/src/components/custom/Workout/IntensityBar.tsx +8 -3
  199. package/src/components/custom/Workout/LiveAuraFrame.stories.tsx +5 -4
  200. package/src/components/custom/Workout/MesoCard.stories.tsx +4 -1
  201. package/src/components/custom/Workout/MesoCard.test.tsx +7 -18
  202. package/src/components/custom/Workout/MesoCard.tsx +14 -10
  203. package/src/components/custom/Workout/MesoProgressBar.stories.tsx +1 -1
  204. package/src/components/custom/Workout/MesoProgressBar.test.tsx +18 -11
  205. package/src/components/custom/Workout/MesoProgressBar.tsx +15 -13
  206. package/src/components/custom/Workout/MesoStatusCard.stories.tsx +2 -1
  207. package/src/components/custom/Workout/MesoStatusCard.test.tsx +14 -44
  208. package/src/components/custom/Workout/MesoStatusCard.tsx +20 -33
  209. package/src/components/custom/Workout/MetricTiles.stories.tsx +3 -2
  210. package/src/components/custom/Workout/MuscleGroupChip.stories.tsx +2 -8
  211. package/src/components/custom/Workout/MuscleGroupChip.test.tsx +23 -31
  212. package/src/components/custom/Workout/MuscleGroupChip.tsx +28 -67
  213. package/src/components/custom/Workout/PlaceholderStrip.stories.tsx +9 -4
  214. package/src/components/custom/Workout/PlaceholderStrip.test.tsx +17 -10
  215. package/src/components/custom/Workout/PlaceholderStrip.tsx +9 -8
  216. package/src/components/custom/Workout/PrBadge.stories.tsx +2 -1
  217. package/src/components/custom/Workout/PrBadge.test.tsx +3 -9
  218. package/src/components/custom/Workout/PrBadge.tsx +13 -17
  219. package/src/components/custom/Workout/PrHistoryModal.stories.tsx +16 -3
  220. package/src/components/custom/Workout/PrHistoryModal.test.tsx +13 -36
  221. package/src/components/custom/Workout/PrHistoryModal.tsx +8 -4
  222. package/src/components/custom/Workout/ProgramPlanningPage.stories.tsx +6 -1
  223. package/src/components/custom/Workout/README.md +68 -17
  224. package/src/components/custom/Workout/ReadinessCheck.stories.tsx +3 -2
  225. package/src/components/custom/Workout/ReadinessCheck.test.tsx +12 -18
  226. package/src/components/custom/Workout/ReadinessCheck.tsx +22 -4
  227. package/src/components/custom/Workout/RestTimer.stories.tsx +16 -4
  228. package/src/components/custom/Workout/RestTimer.tsx +4 -2
  229. package/src/components/custom/Workout/ScheduleTiles.stories.tsx +3 -2
  230. package/src/components/custom/Workout/ScheduleTiles.test.tsx +3 -4
  231. package/src/components/custom/Workout/ScheduleTiles.tsx +4 -7
  232. package/src/components/custom/Workout/SegmentedBar.stories.tsx +21 -17
  233. package/src/components/custom/Workout/SegmentedBar.tsx +10 -5
  234. package/src/components/custom/Workout/SegmentedProgressBar.stories.tsx +5 -5
  235. package/src/components/custom/Workout/SessionHeader.stories.tsx +6 -6
  236. package/src/components/custom/Workout/SessionHeader.tsx +12 -12
  237. package/src/components/custom/Workout/SessionRail.stories.tsx +12 -11
  238. package/src/components/custom/Workout/SessionRail.tsx +7 -9
  239. package/src/components/custom/Workout/SetBar.stories.tsx +10 -6
  240. package/src/components/custom/Workout/SetBar.test.tsx +49 -4
  241. package/src/components/custom/Workout/SetBar.tsx +38 -12
  242. package/src/components/custom/Workout/SetRow.stories.tsx +3 -2
  243. package/src/components/custom/Workout/SetRow.test.tsx +16 -2
  244. package/src/components/custom/Workout/SetRow.tsx +61 -23
  245. package/src/components/custom/Workout/SetStrip.stories.tsx +63 -7
  246. package/src/components/custom/Workout/SetStrip.test.tsx +25 -0
  247. package/src/components/custom/Workout/SetStrip.tsx +24 -4
  248. package/src/components/custom/Workout/SetTableHeader.stories.tsx +6 -6
  249. package/src/components/custom/Workout/SetTableHeader.tsx +9 -12
  250. package/src/components/custom/Workout/SetsRepsLoad.stories.tsx +7 -7
  251. package/src/components/custom/Workout/SetsRepsLoad.tsx +24 -12
  252. package/src/components/custom/Workout/Sparkline.stories.tsx +14 -11
  253. package/src/components/custom/Workout/Sparkline.test.tsx +37 -19
  254. package/src/components/custom/Workout/Sparkline.tsx +14 -18
  255. package/src/components/custom/Workout/StatusDot.stories.tsx +1 -1
  256. package/src/components/custom/Workout/StatusDot.test.tsx +44 -5
  257. package/src/components/custom/Workout/StatusDot.tsx +93 -63
  258. package/src/components/custom/Workout/StatusPill.stories.tsx +1 -1
  259. package/src/components/custom/Workout/StatusPill.test.tsx +6 -15
  260. package/src/components/custom/Workout/StatusPill.tsx +27 -38
  261. package/src/components/custom/Workout/StrengthTrendChart.stories.tsx +11 -4
  262. package/src/components/custom/Workout/StrengthTrendChart.test.tsx +15 -37
  263. package/src/components/custom/Workout/StrengthTrendChart.tsx +39 -36
  264. package/src/components/custom/Workout/SupersetWrapper.stories.tsx +27 -64
  265. package/src/components/custom/Workout/SupersetWrapper.test.tsx +16 -14
  266. package/src/components/custom/Workout/SupersetWrapper.tsx +17 -21
  267. package/src/components/custom/Workout/TempoDisplay.stories.tsx +26 -10
  268. package/src/components/custom/Workout/TempoDisplay.test.tsx +18 -4
  269. package/src/components/custom/Workout/TempoDisplay.tsx +2 -0
  270. package/src/components/custom/Workout/TrainingStatusPage.stories.tsx +9 -1
  271. package/src/components/custom/Workout/VelocityStrip.compact.stories.tsx +4 -1
  272. package/src/components/custom/Workout/VelocityStrip.dual.stories.tsx +10 -6
  273. package/src/components/custom/Workout/VelocityStrip.expanded.stories.tsx +5 -2
  274. package/src/components/custom/Workout/VelocityStrip.hero.stories.tsx +44 -1
  275. package/src/components/custom/Workout/VelocityStrip.stories.tsx +12 -6
  276. package/src/components/custom/Workout/VelocityStrip.test.tsx +48 -6
  277. package/src/components/custom/Workout/VelocityStrip.tsx +26 -14
  278. package/src/components/custom/Workout/VolumeLandmarkBar.stories.tsx +6 -7
  279. package/src/components/custom/Workout/VolumeLandmarkBar.tsx +15 -6
  280. package/src/components/custom/Workout/WeekRow.stories.tsx +4 -1
  281. package/src/components/custom/Workout/WeekRow.test.tsx +18 -15
  282. package/src/components/custom/Workout/WeekRow.tsx +23 -16
  283. package/src/components/custom/Workout/WeightBadge.stories.tsx +2 -1
  284. package/src/components/custom/Workout/WeightBadge.test.tsx +50 -19
  285. package/src/components/custom/Workout/WeightBadge.tsx +28 -27
  286. package/src/components/custom/Workout/WorkoutCard.stories.tsx +6 -1
  287. package/src/components/custom/Workout/WorkoutCard.test.tsx +18 -0
  288. package/src/components/custom/Workout/WorkoutCard.tsx +35 -57
  289. package/src/components/custom/Workout/WorkoutPill.stories.tsx +5 -2
  290. package/src/components/custom/Workout/WorkoutPill.test.tsx +39 -7
  291. package/src/components/custom/Workout/WorkoutPill.tsx +88 -57
  292. package/src/components/custom/Workout/ZoneTrack.stories.tsx +10 -7
  293. package/src/components/custom/Workout/ZoneTrack.tsx +10 -9
  294. package/src/components/custom/Workout/exerciseRowState.ts +29 -0
  295. package/src/components/custom/Workout/index.ts +17 -2
  296. package/src/components/custom/Workout/metricText.stories.tsx +15 -13
  297. package/src/components/custom/Workout/metricText.tsx +8 -2
  298. package/src/components/custom/Workout/setHeadingKit.tsx +219 -36
  299. package/src/components/custom/Workout/velocity-story-kit.tsx +2 -2
  300. package/src/components/custom/charts/README.md +66 -0
  301. package/src/components/custom/charts/SetBarChart.test.tsx +46 -1
  302. package/src/components/custom/charts/SetBarChart.tsx +56 -9
  303. package/src/components/custom/charts/SparkBars.stories.tsx +55 -0
  304. package/src/components/custom/charts/SparkBars.test.tsx +69 -0
  305. package/src/components/custom/charts/SparkBars.tsx +85 -0
  306. package/src/components/custom/charts/flatBarGeometry.test.ts +41 -0
  307. package/src/components/custom/charts/flatBarGeometry.ts +32 -0
  308. package/src/components/custom/charts/index.ts +3 -0
  309. package/src/components/custom/index.ts +3 -0
  310. package/src/components/custom/stepper/Stepper.stories.tsx +13 -10
  311. package/src/components/custom/stepper/Stepper.test.tsx +1 -7
  312. package/src/components/custom/stepper/Stepper.tsx +21 -34
  313. package/src/components/icons/icons.stories.tsx +1 -1
  314. package/src/components/icons/icons.tsx +51 -0
  315. package/src/components/shell/AppShell.stories.tsx +150 -0
  316. package/src/components/shell/AppShell.test.tsx +70 -0
  317. package/src/components/shell/AppShell.tsx +90 -0
  318. package/src/components/shell/BrandLockup.stories.tsx +66 -5
  319. package/src/components/shell/BrandLockup.test.tsx +34 -1
  320. package/src/components/shell/BrandLockup.tsx +27 -11
  321. package/src/components/shell/NavItem.stories.tsx +4 -4
  322. package/src/components/shell/NavItem.test.tsx +17 -0
  323. package/src/components/shell/NavItem.tsx +17 -5
  324. package/src/components/shell/README.md +89 -26
  325. package/src/components/shell/SideNav.stories.tsx +38 -7
  326. package/src/components/shell/SideNav.test.tsx +16 -8
  327. package/src/components/shell/SideNav.tsx +17 -17
  328. package/src/components/shell/TopBar.stories.tsx +44 -19
  329. package/src/components/shell/TopBar.test.tsx +34 -12
  330. package/src/components/shell/TopBar.tsx +61 -40
  331. package/src/components/shell/brands.tsx +66 -0
  332. package/src/components/shell/index.ts +9 -8
  333. package/src/components/shell/{DeviceIndicator.stories.tsx → workout/DeviceIndicator.stories.tsx} +2 -2
  334. package/src/components/shell/{DeviceIndicator.tsx → workout/DeviceIndicator.tsx} +2 -2
  335. package/src/components/shell/{DeviceMenu.stories.tsx → workout/DeviceMenu.stories.tsx} +2 -2
  336. package/src/components/shell/{DeviceMenu.tsx → workout/DeviceMenu.tsx} +3 -3
  337. package/src/components/shell/{DeviceRow.stories.tsx → workout/DeviceRow.stories.tsx} +2 -2
  338. package/src/components/shell/{DeviceRow.tsx → workout/DeviceRow.tsx} +3 -3
  339. package/src/components/shell/{SessionStatePill.stories.tsx → workout/SessionStatePill.stories.tsx} +2 -2
  340. package/src/components/shell/{SessionStatePill.tsx → workout/SessionStatePill.tsx} +5 -3
  341. package/src/components/shell/workout/WorkoutShell.stories.tsx +71 -0
  342. package/src/components/shell/{DashboardShell.test.tsx → workout/WorkoutShell.test.tsx} +19 -8
  343. package/src/components/shell/workout/WorkoutShell.tsx +77 -0
  344. package/src/components/shell/workout/WorkoutTopBar.stories.tsx +58 -0
  345. package/src/components/shell/workout/WorkoutTopBar.test.tsx +39 -0
  346. package/src/components/shell/workout/WorkoutTopBar.tsx +52 -0
  347. package/src/components/shell/workout/index.ts +9 -0
  348. package/src/components/shell/workout/workoutNavItems.tsx +16 -0
  349. package/src/components/ui/README.md +110 -0
  350. package/src/components/ui/alert/Alert.stories.tsx +15 -5
  351. package/src/components/ui/alert/Alert.tsx +24 -3
  352. package/src/components/ui/autocomplete/Autocomplete.stories.tsx +11 -13
  353. package/src/components/ui/autocomplete/Autocomplete.test.tsx +7 -25
  354. package/src/components/ui/autocomplete/Autocomplete.tsx +21 -28
  355. package/src/components/ui/avatar/Avatar.stories.tsx +1 -1
  356. package/src/components/ui/avatar/Avatar.tsx +2 -10
  357. package/src/components/ui/badge/Badge.stories.tsx +83 -28
  358. package/src/components/ui/badge/Badge.test.tsx +19 -3
  359. package/src/components/ui/badge/Badge.tsx +48 -55
  360. package/src/components/ui/breadcrumbs/Breadcrumbs.stories.tsx +1 -1
  361. package/src/components/ui/breadcrumbs/Breadcrumbs.tsx +4 -16
  362. package/src/components/ui/button/Button.stories.tsx +46 -12
  363. package/src/components/ui/button/Button.tsx +44 -37
  364. package/src/components/ui/card/Card.stories.tsx +90 -94
  365. package/src/components/ui/card/Card.test.tsx +80 -6
  366. package/src/components/ui/card/Card.tsx +150 -203
  367. package/src/components/ui/checkbox/Checkbox.stories.tsx +1 -1
  368. package/src/components/ui/checkbox/Checkbox.tsx +7 -27
  369. package/src/components/ui/chip/Chip.stories.tsx +37 -13
  370. package/src/components/ui/chip/Chip.test.tsx +10 -6
  371. package/src/components/ui/chip/Chip.tsx +76 -91
  372. package/src/components/ui/collapse/Collapse.stories.tsx +23 -23
  373. package/src/components/ui/collapse/Collapse.tsx +6 -11
  374. package/src/components/ui/data-row/DataRow.stories.tsx +14 -3
  375. package/src/components/ui/data-row/DataRow.test.tsx +5 -15
  376. package/src/components/ui/data-row/DataRow.tsx +18 -7
  377. package/src/components/ui/divider/Divider.stories.tsx +1 -1
  378. package/src/components/ui/divider/Divider.tsx +1 -5
  379. package/src/components/ui/drawer/Drawer.stories.tsx +5 -16
  380. package/src/components/ui/drawer/Drawer.tsx +13 -27
  381. package/src/components/ui/floating-overlay-depth.test.tsx +143 -0
  382. package/src/components/ui/form-field/FormField.stories.tsx +6 -20
  383. package/src/components/ui/form-field/FormField.test.tsx +1 -5
  384. package/src/components/ui/form-field/FormField.tsx +10 -46
  385. package/src/components/ui/help-tip/HelpTip.stories.tsx +8 -19
  386. package/src/components/ui/help-tip/HelpTip.test.tsx +1 -3
  387. package/src/components/ui/help-tip/HelpTip.tsx +21 -22
  388. package/src/components/ui/help-tip/index.ts +7 -1
  389. package/src/components/ui/icon-box/IconBox.stories.tsx +1 -1
  390. package/src/components/ui/icon-box/IconBox.test.tsx +1 -7
  391. package/src/components/ui/icon-box/IconBox.tsx +10 -18
  392. package/src/components/ui/indicator/Indicator.stories.tsx +5 -4
  393. package/src/components/ui/indicator/Indicator.tsx +20 -14
  394. package/src/components/ui/input/Input.stories.tsx +3 -11
  395. package/src/components/ui/input/Input.test.tsx +2 -10
  396. package/src/components/ui/input/Input.tsx +10 -25
  397. package/src/components/ui/input/index.ts +7 -1
  398. package/src/components/ui/link/Link.stories.tsx +19 -7
  399. package/src/components/ui/list-item/ListItem.stories.tsx +17 -5
  400. package/src/components/ui/list-item/ListItem.tsx +2 -9
  401. package/src/components/ui/menu/Menu.stories.tsx +21 -15
  402. package/src/components/ui/menu/Menu.test.tsx +2 -11
  403. package/src/components/ui/menu/Menu.tsx +12 -14
  404. package/src/components/ui/menu/index.ts +8 -1
  405. package/src/components/ui/modal/Modal.stories.tsx +2 -2
  406. package/src/components/ui/modal/Modal.tsx +31 -19
  407. package/src/components/ui/pill/Pill.stories.tsx +111 -23
  408. package/src/components/ui/pill/Pill.test.tsx +101 -3
  409. package/src/components/ui/pill/Pill.tsx +168 -49
  410. package/src/components/ui/pill/index.ts +1 -1
  411. package/src/components/ui/popover/Popover.stories.tsx +6 -8
  412. package/src/components/ui/popover/Popover.test.tsx +1 -6
  413. package/src/components/ui/popover/Popover.tsx +20 -15
  414. package/src/components/ui/popover/index.ts +7 -1
  415. package/src/components/ui/progress/Progress.stories.tsx +3 -12
  416. package/src/components/ui/progress/Progress.test.tsx +1 -5
  417. package/src/components/ui/progress/Progress.tsx +9 -6
  418. package/src/components/ui/radio/Radio.stories.tsx +42 -21
  419. package/src/components/ui/radio/Radio.test.tsx +6 -2
  420. package/src/components/ui/radio/Radio.tsx +23 -22
  421. package/src/components/ui/section/Section.stories.tsx +12 -21
  422. package/src/components/ui/section/Section.test.tsx +1 -6
  423. package/src/components/ui/section/Section.tsx +1 -3
  424. package/src/components/ui/section/index.ts +1 -5
  425. package/src/components/ui/select/Select.stories.tsx +3 -13
  426. package/src/components/ui/select/Select.test.tsx +2 -11
  427. package/src/components/ui/select/Select.tsx +16 -15
  428. package/src/components/ui/skeleton/Skeleton.stories.tsx +3 -11
  429. package/src/components/ui/skeleton/Skeleton.tsx +3 -14
  430. package/src/components/ui/skeleton/index.ts +1 -7
  431. package/src/components/ui/spinner/Spinner.stories.tsx +1 -1
  432. package/src/components/ui/spinner/Spinner.tsx +4 -5
  433. package/src/components/ui/stack/Stack.stories.tsx +8 -8
  434. package/src/components/ui/stack/Stack.tsx +1 -1
  435. package/src/components/ui/surface/Surface.stories.tsx +92 -33
  436. package/src/components/ui/surface/Surface.test.tsx +88 -28
  437. package/src/components/ui/surface/Surface.tsx +37 -87
  438. package/src/components/ui/surface/SurfaceContext.ts +22 -62
  439. package/src/components/ui/surface/index.ts +8 -0
  440. package/src/components/ui/surface/resolveSurface.ts +98 -0
  441. package/src/components/ui/surface/surface.contract.test.ts +6 -1
  442. package/src/components/ui/switch/Switch.stories.tsx +1 -1
  443. package/src/components/ui/switch/Switch.tsx +7 -6
  444. package/src/components/ui/tabs/Tabs.stories.tsx +1 -1
  445. package/src/components/ui/tabs/Tabs.tsx +8 -21
  446. package/src/components/ui/tabs/index.ts +1 -7
  447. package/src/components/ui/tile/Tile.stories.tsx +1 -1
  448. package/src/components/ui/tile/Tile.tsx +3 -0
  449. package/src/components/ui/toast/Toast.stories.tsx +1 -1
  450. package/src/components/ui/toast/Toast.test.tsx +2 -8
  451. package/src/components/ui/toast/Toast.tsx +49 -57
  452. package/src/components/ui/toast/index.ts +0 -1
  453. package/src/components/ui/toolbar-button/ToolbarButton.stories.tsx +92 -71
  454. package/src/components/ui/toolbar-button/ToolbarButton.test.tsx +3 -18
  455. package/src/components/ui/toolbar-button/ToolbarButton.tsx +38 -49
  456. package/src/components/ui/tooltip/Tooltip.stories.tsx +12 -3
  457. package/src/components/ui/tooltip/Tooltip.test.tsx +21 -3
  458. package/src/components/ui/tooltip/Tooltip.tsx +55 -36
  459. package/src/components/ui/tooltip/index.ts +1 -1
  460. package/src/components/ui/trigger/TriggerSurface.test.tsx +215 -0
  461. package/src/components/ui/trigger/TriggerSurface.tsx +81 -0
  462. package/src/components/ui/trigger/index.ts +2 -0
  463. package/src/stories/PresetShowcase.stories.tsx +101 -48
  464. package/src/test/no-device-internals.test.ts +3 -3
  465. package/src/test/no-raw-color.test.ts +39 -0
  466. package/src/theme/Alpha.stories.tsx +103 -0
  467. package/src/theme/ChoosingTokens.stories.tsx +48 -0
  468. package/src/theme/ColorPalettes.stories.tsx +62 -45
  469. package/src/theme/ColorPrimitives.stories.tsx +35 -35
  470. package/src/theme/Depth.stories.tsx +132 -65
  471. package/src/theme/DepthCalibration.stories.tsx +23 -21
  472. package/src/theme/ProposedTokensVW82.stories.tsx +414 -0
  473. package/src/theme/ThemeProvider.test.tsx +4 -4
  474. package/src/theme/barrel.ts +7 -6
  475. package/src/theme/color-stories.coverage.test.ts +1 -1
  476. package/src/theme/color-utils.ts +41 -29
  477. package/src/theme/config.completeness.test.ts +1 -1
  478. package/src/theme/config.ts +40 -0
  479. package/src/theme/elevation.test.ts +82 -56
  480. package/src/theme/elevation.ts +77 -561
  481. package/src/theme/global.css +45 -5
  482. package/src/theme/grey-ramp.test.ts +24 -8
  483. package/src/theme/lift.test.ts +39 -0
  484. package/src/theme/lift.ts +102 -0
  485. package/src/theme/materials.test.ts +5 -2
  486. package/src/theme/materials.ts +38 -4
  487. package/src/theme/native-theming-guard.test.ts +5 -5
  488. package/src/theme/presets/apply.ts +4 -0
  489. package/src/theme/presets/audiobook.ts +5 -2
  490. package/src/theme/presets/default.ts +4 -0
  491. package/src/theme/presets/index.ts +14 -1
  492. package/src/theme/presets/types.ts +1 -1
  493. package/src/theme/semantic-contrast.test.ts +13 -4
  494. package/src/theme/status-distinctness.test.ts +66 -0
  495. package/src/theme/subtle-tone-weight.test.ts +163 -0
  496. package/src/theme/surface-planes.test.ts +37 -0
  497. package/src/theme/surface-planes.ts +68 -0
  498. package/src/theme/tailwind-var-opacity.test.ts +163 -0
  499. package/src/theme/token-export-guard.test.ts +1 -3
  500. package/src/theme/tokens/primitives.test.ts +15 -7
  501. package/src/theme/tokens/primitives.ts +98 -33
  502. package/src/theme/tokens/semantic-hex-guard.test.ts +322 -0
  503. package/src/theme/tokens/semantic.ts +124 -54
  504. package/src/theme/wash-ladder.test.ts +58 -0
  505. package/src/theme/workout-tokens.ts +1 -7
  506. package/src/types/jest-axe.d.ts +2 -6
  507. package/src/types/raw-md.d.ts +5 -0
  508. package/src/utils/colors.alpha-adoption.test.ts +408 -0
  509. package/src/utils/colors.ts +4 -4
  510. package/src/utils/form.ts +1 -3
  511. package/src/utils/index.ts +2 -7
  512. package/src/utils/number-format.ts +17 -0
  513. package/src/utils/workout-format.ts +15 -6
  514. package/src/web-jsx/jsx-runtime.ts +1 -5
  515. package/tailwind.config.js +55 -9
  516. package/src/components/custom/Workout/ExerciseCardUnified.stories.tsx +0 -151
  517. package/src/components/custom/Workout/RowInventory.stories.tsx +0 -408
  518. package/src/components/custom/Workout/S3FullRail.stories.tsx +0 -46
  519. package/src/components/custom/Workout/S3SessionPace.stories.tsx +0 -95
  520. package/src/components/custom/Workout/S3SessionRailHeading.stories.tsx +0 -61
  521. package/src/components/custom/Workout/S3SetTypes.stories.tsx +0 -176
  522. package/src/components/custom/Workout/S3WorkoutExpansion.stories.tsx +0 -240
  523. package/src/components/shell/DashboardShell.stories.tsx +0 -65
  524. package/src/components/shell/DashboardShell.tsx +0 -75
  525. package/src/components/shell/SessionRailSpecimen.stories.tsx +0 -753
  526. package/src/theme/elevation.stories.tsx +0 -346
  527. package/src/utils/useTheme.ts +0 -72
  528. /package/src/components/shell/{DeviceIndicator.test.tsx → workout/DeviceIndicator.test.tsx} +0 -0
  529. /package/src/components/shell/{DeviceMenu.test.tsx → workout/DeviceMenu.test.tsx} +0 -0
  530. /package/src/components/shell/{DeviceRow.test.tsx → workout/DeviceRow.test.tsx} +0 -0
  531. /package/src/components/shell/{SessionStatePill.test.tsx → workout/SessionStatePill.test.tsx} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,13 +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';
4
+ import { ViewProps, PressableProps, View, TextInputProps, TextInput, ImageSourcePropType, ModalProps as ModalProps$1, TextProps, ViewStyle, LayoutChangeEvent, StyleProp } 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';
5
7
  import { ThemeMode } from './theme/tokens.js';
6
- export { CATEGORICAL_CVD_SAFE_MAX, CategoricalVariant, SURFACE_PLANE_STEPS, bestTextColor, buttonSizes, categoricalPalette, discreteRainbow, divergingScale, getCategoricalColor, getDiscreteRainbowColor, getSemanticColors, greyRamp, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveSpacing, primitiveTypography, primitiveZIndex, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort } from './theme/tokens.js';
7
- import { ElevationLevel, GlowIntensity } from './theme/index.js';
8
- export { ComponentType, CssPropertyEntry, CssPropertyManifest, ElevationConfig, FLOATING_ELEVATION_MIN, GradientStyle, ManifestValidationResult, PRESSED_ELEVATION_LEVEL, ShadowIntensity, ThemeConfig, ThemePreset, ThemePresetColors, ThemePresetFonts, ThemePresetRadii, ThemePresetShadows, ThemeProviderMode, ThemeProviderProps, VariantAxes, VariantOverride, applyThemePreset, audiobookPreset, barPaper, componentElevationRanges, darkThemeCSSVars, darken, defaultPreset, elevationSystem, getBaseSurfaceColor, getElevationConfig, getElevationShadow, getElevationSurface, getGlowShadow, getHoverColors, getPressedRecessShadow, getThemeCSSVars, getValidatedElevation, gluestackConfig, grainForTone, grainOpacityForTone, hexToRgb, hsvToRgb, insetWell, isCssPropertyManifest, isDark, lightThemeCSSVars, lighten, linearGradient, paperSheet, resolveColor, rgbToHex, rgbToHsv, surfaceGradient, validateCssPropertyManifest } from './theme/index.js';
9
- import { S as SetStripSet, E as ExerciseIndicatorKind, a as SetRowProps } from './pages-B1hqnGIC.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-B1hqnGIC.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, resultPaletteColors, semanticColorsDark, semanticColorsLight, semanticPins, semanticTypography, sequentialEffort } from './theme/tokens.js';
9
+ import { S as SetStripSet, E as ExerciseIndicatorKind, a as SetRowProps } from './pages-CsjsUn0G.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-CsjsUn0G.js';
11
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';
12
12
  import { VolumeLandmarks } from './bodymap.js';
13
13
  export { BodyMapData, BodyMapDetailPanelProps, BodyMapProps, ContributingExercise, MovementCategory, MuscleGroup, SimpleMuscleGroup, TrainingStatusMuscle, TrainingStatusPageProps, TrainingStatusSummary, UpcomingExercise } from './bodymap.js';
@@ -68,6 +68,14 @@ declare function CircleSlashIcon(props: IconProps): react_jsx_runtime.JSX.Elemen
68
68
  declare function AwardIcon(props: IconProps): react_jsx_runtime.JSX.Element;
69
69
  /** Info-circle glyph (mirrors lucide-react `Info`). ExerciseIndicator → `info`. */
70
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;
71
79
 
72
80
  type AlertStatus = 'success' | 'info' | 'warning' | 'error';
73
81
  type AlertVariant = 'subtle' | 'outline' | 'solid';
@@ -284,11 +292,19 @@ interface PasswordInputProps extends Omit<InputProps, 'secureTextEntry' | 'right
284
292
  declare const PasswordInput: React__default.ForwardRefExoticComponent<PasswordInputProps & React__default.RefAttributes<TextInput>>;
285
293
 
286
294
  type CardVariant = 'elevated' | 'outline' | 'filled' | 'accent' | 'subtle';
295
+ /** Planes to lift above the enclosing Surface. */
287
296
  type CardElevation = 1 | 2 | 3;
288
297
  interface CardProps extends ViewProps {
289
- /** 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
+ */
290
306
  variant?: CardVariant;
291
- /** Elevation level (1=subtle, 2=standard, 3=prominent) */
307
+ /** Planes to lift above the enclosing Surface (default 2: page → the card plane). */
292
308
  elevation?: CardElevation;
293
309
  /** Whether the card is interactive (hoverable/pressable) */
294
310
  isInteractive?: boolean;
@@ -298,7 +314,10 @@ interface CardProps extends ViewProps {
298
314
  onPress?: () => void;
299
315
  /** Custom border color (hex, rgb, or CSS color). Useful for status cards. */
300
316
  borderColor?: string;
301
- /** 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
+ */
302
321
  bgColor?: string;
303
322
  /** Accent stripe color for accent variant (CSS color or hex) */
304
323
  accentColor?: string;
@@ -315,7 +334,14 @@ interface CardProps extends ViewProps {
315
334
  skeletonContentLines?: number;
316
335
  }
317
336
  /**
318
- * 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.
319
345
  *
320
346
  * @example
321
347
  * <Card>
@@ -326,14 +352,6 @@ interface CardProps extends ViewProps {
326
352
  * <CardContent>
327
353
  * <Text>Card content goes here</Text>
328
354
  * </CardContent>
329
- * <CardFooter>
330
- * <Button>Action</Button>
331
- * </CardFooter>
332
- * </Card>
333
- *
334
- * // Interactive card
335
- * <Card isInteractive onPress={() => console.log('pressed')}>
336
- * <CardContent>Click me</CardContent>
337
355
  * </Card>
338
356
  */
339
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;
@@ -433,7 +451,7 @@ interface BadgeProps extends ViewProps {
433
451
  children?: React__default.ReactNode;
434
452
  }
435
453
  /**
436
- * Badge component for status indicators and labels.
454
+ * Badge a `Pill` preset for status indicators and labels.
437
455
  *
438
456
  * @example
439
457
  * <Badge color="success">Active</Badge>
@@ -530,7 +548,7 @@ interface AvatarGroupProps {
530
548
  /**
531
549
  * Group of avatars with stacking effect.
532
550
  */
533
- 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;
534
552
 
535
553
  type DividerOrientation = 'horizontal' | 'vertical';
536
554
  interface DividerProps extends ViewProps {
@@ -771,7 +789,7 @@ interface SkeletonCircleProps {
771
789
  /**
772
790
  * Circle skeleton for avatars.
773
791
  */
774
- 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;
775
793
  interface SkeletonCardProps {
776
794
  /** Show image area */
777
795
  hasImage?: boolean;
@@ -858,7 +876,7 @@ interface TabProps {
858
876
  /**
859
877
  * Individual tab button.
860
878
  */
861
- 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;
862
880
  interface TabPanelsProps {
863
881
  children?: React__default.ReactNode;
864
882
  className?: string;
@@ -899,7 +917,7 @@ interface ChipProps extends ViewProps {
899
917
  children?: React__default.ReactNode;
900
918
  }
901
919
  /**
902
- * Chip component for tags, labels, and filters.
920
+ * Chip a `Pill` preset for tags, labels, and filters.
903
921
  *
904
922
  * @example
905
923
  * <Chip>Default</Chip>
@@ -960,7 +978,22 @@ interface TooltipProps extends ViewProps {
960
978
  className?: string;
961
979
  /** Render tooltip via portal to escape overflow:hidden ancestors (web only) */
962
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;
963
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
+ };
964
997
  /**
965
998
  * Tooltip component for showing additional information on hover/press.
966
999
  *
@@ -977,7 +1010,7 @@ interface TooltipProps extends ViewProps {
977
1010
  * <Button><ButtonText>Hover me</ButtonText></Button>
978
1011
  * </Tooltip>
979
1012
  */
980
- 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;
981
1014
 
982
1015
  interface CollapseProps extends ViewProps {
983
1016
  /** Whether the collapse is initially open */
@@ -1006,12 +1039,14 @@ interface CollapseProps extends ViewProps {
1006
1039
  declare function Collapse({ defaultIsOpen, isOpen: controlledIsOpen, onToggle, className, children, ...props }: CollapseProps): react_jsx_runtime.JSX.Element;
1007
1040
  interface CollapseButtonProps {
1008
1041
  children?: React__default.ReactNode;
1042
+ /** Accessible name when the button carries no text of its own (a bare chevron). */
1043
+ accessibilityLabel?: string;
1009
1044
  className?: string;
1010
1045
  }
1011
1046
  /**
1012
1047
  * Button to toggle collapse state.
1013
1048
  */
1014
- declare function CollapseButton({ children, className }: CollapseButtonProps): react_jsx_runtime.JSX.Element;
1049
+ declare function CollapseButton({ children, accessibilityLabel, className }: CollapseButtonProps): react_jsx_runtime.JSX.Element;
1015
1050
  interface CollapseContentProps {
1016
1051
  children?: React__default.ReactNode;
1017
1052
  className?: string;
@@ -1336,11 +1371,11 @@ interface ToolbarButtonProps extends ViewProps {
1336
1371
  * ToolbarButton component for toolbar actions with toggle state support.
1337
1372
  *
1338
1373
  * Features:
1339
- * - Neumorphic styling with inset shadows for pressed/raised 3D effect
1374
+ * - Depth from the fill plus the lift (raised) or the inset recess (active)
1340
1375
  * - Active (pressed) state is the default visual appearance
1341
1376
  * - Set isActive={false} explicitly for the raised/inactive appearance
1342
1377
  * - Orange accent color on icon when isActive={true}
1343
- * - Hover states that lighten background and remove shadows
1378
+ * - Hover states that lighten the background
1344
1379
  *
1345
1380
  * @example
1346
1381
  * // Toggle button - orange icon when active
@@ -1823,6 +1858,9 @@ interface HelpTipProps extends ViewProps {
1823
1858
  * <Text>Email Address</Text>
1824
1859
  * <HelpTip content="We'll never share your email with anyone." size="sm" />
1825
1860
  * </View>
1861
+ *
1862
+ * @deprecated Use `Tooltip` (roadmap decision 5) — removed after AW-127
1863
+ * consumer migration.
1826
1864
  */
1827
1865
  declare function HelpTip({ content, size, placement, icon, color, isOpen: controlledIsOpen, hasArrow, maxWidth, iconClassName, tooltipClassName, className, ...props }: HelpTipProps): react_jsx_runtime.JSX.Element;
1828
1866
  interface LabelWithHelpProps extends ViewProps {
@@ -1846,6 +1884,9 @@ interface LabelWithHelpProps extends ViewProps {
1846
1884
  * helpContent="Your API key can be found in the developer settings."
1847
1885
  * isRequired
1848
1886
  * />
1887
+ *
1888
+ * @deprecated Use `Tooltip` beside your own label (roadmap decision 5) —
1889
+ * removed after AW-127 consumer migration.
1849
1890
  */
1850
1891
  declare function LabelWithHelp({ label, helpContent, isRequired, helpSize, className, ...props }: LabelWithHelpProps): react_jsx_runtime.JSX.Element;
1851
1892
 
@@ -1994,16 +2035,18 @@ interface SectionContentProps extends ViewProps {
1994
2035
  declare function SectionContent({ className, children, ...props }: SectionContentProps): react_jsx_runtime.JSX.Element;
1995
2036
 
1996
2037
  interface DataRowProps extends ViewProps {
1997
- /** Descriptive label shown on the left */
1998
- label: string;
2038
+ /** Descriptive label shown on the left -- string renders as Text, ReactNode renders inside a View */
2039
+ label: React__default.ReactNode;
1999
2040
  /** Value shown on the right -- string renders as Text, ReactNode renders inside a View */
2000
2041
  value: React__default.ReactNode;
2042
+ /** Additional className applied to the label element */
2043
+ labelClassName?: string;
2001
2044
  /** Additional className applied to the value element */
2002
2045
  valueClassName?: string;
2003
2046
  /** Additional className applied to the root container */
2004
2047
  className?: string;
2005
2048
  }
2006
- 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;
2007
2050
 
2008
2051
  type IconBoxColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info' | 'neutral';
2009
2052
  type IconBoxSize = 'sm' | 'md' | 'lg';
@@ -2018,35 +2061,12 @@ interface IconBoxProps extends ViewProps {
2018
2061
  }
2019
2062
  declare function IconBox({ icon: Icon, color, size, className, ...props }: IconBoxProps): react_jsx_runtime.JSX.Element;
2020
2063
 
2021
- /**
2022
- * A Surface's depth on the dark surface ramp. Each addressable level maps to an
2023
- * EXISTING semantic surface/background token (already grounded in the derived
2024
- * surface ramp — TD-surface-tokens S-1 — and theme-aware) — Surface introduces
2025
- * no new hexes. Darkest → lightest:
2026
- * inset (#13100D) < background (#1C1916) < base (#252321) < elevated (#2A2827) < raised (#2D2C2B) < overlay (#302F2E)
2027
- *
2028
- * `frame` is the bezel the ramp sits inside — the top bar / side nav chrome —
2029
- * and the floor a `<Surface pressed>` clamps at (see {@link pressedLevel}).
2030
- *
2031
- * It replaced a separate `inset` level in TD-07.14. That level was RETIRED, not
2032
- * renamed: at ΔE 1.10 from the frame it was an imperceptible duplicate, which is
2033
- * exactly why pressed (surface − 1) kept collapsing into it.
2034
- */
2035
- type SurfaceLevel = 'frame' | 'background' | 'base' | 'elevated' | 'raised' | 'overlay';
2036
2064
  /** On-surface neutral text roles, resolved for the current surface + theme. */
2037
2065
  type OnSurfaceRole = 'primary' | 'secondary' | 'tertiary';
2038
- declare const SURFACE_LEVEL_TOKEN: {
2039
- readonly frame: "background-frame";
2040
- readonly background: "background-base";
2041
- readonly base: "surface-base";
2042
- readonly elevated: "surface-elevated";
2043
- readonly raised: "surface-raised";
2044
- readonly overlay: "surface-overlay";
2045
- };
2046
2066
  interface SurfaceContextValue {
2047
2067
  /** Active theme mode. Defaults to dark (the wall). */
2048
2068
  mode: ThemeMode;
2049
- /** Depth of the nearest enclosing Surface. */
2069
+ /** Plane of the nearest enclosing Surface. */
2050
2070
  level: SurfaceLevel;
2051
2071
  }
2052
2072
  declare const SurfaceContext: React$1.Context<SurfaceContextValue>;
@@ -2056,71 +2076,69 @@ declare function useSurface(): SurfaceContextValue;
2056
2076
  declare function useSurfaceMode(): ThemeMode;
2057
2077
  /**
2058
2078
  * Literal-hex on-surface neutral text colours for a theme mode. Uses
2059
- * `getSemanticColors` (literal hex — the TempoBar pattern), never `resolveColor`
2060
- * (which returns `var()` under the RNW vitest alias), so values stay real in
2061
- * 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.
2062
2082
  */
2063
2083
  declare function onSurfaceColors(mode: ThemeMode): Record<OnSurfaceRole, string>;
2064
2084
  /** Resolve one on-surface text colour for descendants of a Surface. */
2065
2085
  declare function useOnSurfaceColor(role?: OnSurfaceRole): string;
2066
- /** The background hex for a surface level under a theme mode (literal hex). */
2067
- declare function surfaceBackground(level: SurfaceLevel, mode: ThemeMode): string;
2068
- /**
2069
- * The level a `<Surface pressed>` resolves to: its parent's level stepped one
2070
- * index DOWN the ramp — the symmetric twin of a raised surface stepping up —
2071
- * clamped at the `frame` floor so a pressed surface never underflows the bezel.
2072
- * overlay→raised, raised→elevated, elevated→base, base→background,
2073
- * background→frame, frame→frame (clamped).
2074
- * Pressed exposes ONE level of depth only (no pressed-2).
2075
- */
2076
- declare function pressedLevel(parent: SurfaceLevel): SurfaceLevel;
2077
2086
 
2078
- interface SurfaceProps extends ViewProps {
2079
- /**
2080
- * Numeric depth → a computed lighten + shadow (the raised-card model). The
2081
- * background is derived from the base surface by lightening. Ignored for the
2082
- * background when `level` is set. Default 0 (flat card).
2083
- */
2084
- elevation?: ElevationLevel;
2085
- /**
2086
- * Named grey plane (shell / rail / stage). Sets the background directly
2087
- * from a semantic surface token — reaching the darker nav/page planes the
2088
- * lighten model can't — and drops the default rounding + auto shadow so the
2089
- * plane reads full-bleed. Composable with `elevation`'s glow.
2090
- */
2087
+ interface SurfaceDepthProps {
2088
+ /** Absolute plane, for shell roots (shell = background, page = base). No lift. */
2091
2089
  level?: SurfaceLevel;
2090
+ /** Planes to step UP from the enclosing Surface, with the lift treatment. */
2091
+ raise?: 1 | 2 | 3;
2092
2092
  /**
2093
- * Sunken "well": render ONE ramp step DOWN from the parent surface's level —
2094
- * the symmetric twin of a raised surface stepping up and add an inner-shadow
2095
- * recess so the surface reads pressed (darker fill + inset shadow). Relative to
2096
- * the enclosing Surface's level (not this surface's own `level`), and clamped
2097
- * 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.
2098
2095
  */
2096
+ elevation?: ElevationLevel;
2097
+ /** One plane DOWN with an inner-shadow recess. */
2099
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 {
2100
2122
  glowColor?: string;
2101
2123
  glowIntensity?: GlowIntensity;
2102
- /**
2103
- * Theme mode. Also seeds the on-surface colour CONTEXT so descendant text /
2104
- * icons resolve their colour from this surface instead of a `text-*` className
2105
- * that silently fails to black on raw RN. Inherits the nearest Surface /
2106
- * ThemeProvider when omitted (default dark — the wall).
2107
- */
2108
- theme?: ThemeMode;
2109
- /** 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. */
2110
2125
  rounded?: boolean;
2111
2126
  className?: string;
2112
2127
  children?: React__default.ReactNode;
2113
2128
  }
2114
2129
  /**
2115
2130
  * A container that OWNS its background and establishes an on-surface colour
2116
- * context. Two grounded ways to pick the background:
2117
- * - `elevation` (numeric): the raised-card model lighten-from-base + shadow.
2118
- * - `level` (named): a flat grey plane straight from a semantic token,
2119
- * for the shell / rail / stage backgrounds.
2120
- * Either way, descendants read the surface via {@link useOnSurfaceColor} /
2121
- * {@link useSurfaceMode} rather than hard-coding `getSemanticColors('dark')`.
2122
- */
2123
- 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;
2124
2142
 
2125
2143
  interface ListItemProps extends PressableProps {
2126
2144
  className?: string;
@@ -2152,28 +2170,55 @@ interface ListItemDividerProps extends ViewProps {
2152
2170
  }
2153
2171
  declare function ListItemDivider({ inset, className, ...props }: ListItemDividerProps): react_jsx_runtime.JSX.Element;
2154
2172
 
2155
- 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. */
2156
2177
  type PillColor = 'default' | 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info';
2157
- type PillSize = 'xs' | 'sm' | 'md';
2178
+ type PillSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
2158
2179
  interface PillProps extends ViewProps {
2159
2180
  /** Pill content */
2160
- children: React__default.ReactNode;
2181
+ children?: React__default.ReactNode;
2161
2182
  /** Visual variant */
2162
2183
  variant?: PillVariant;
2163
- /** Color scheme */
2184
+ /** Semantic tone */
2185
+ tone?: PillTone;
2186
+ /** @deprecated Use `tone` — `color` maps onto it and is kept for call-site compatibility. */
2164
2187
  color?: PillColor;
2165
2188
  /** Size */
2166
2189
  size?: PillSize;
2167
2190
  /** Fully rounded (default true) or slight radius */
2168
2191
  rounded?: boolean;
2169
- /** 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`. */
2170
2201
  leftElement?: React__default.ReactNode;
2202
+ /** Trailing slot (dismiss affordance, counter) */
2203
+ trailing?: React__default.ReactNode;
2171
2204
  /** Press handler (makes pill interactive) */
2172
2205
  onPress?: () => void;
2173
- /** Additional className */
2206
+ /** Non-interactive and dimmed */
2207
+ isDisabled?: boolean;
2208
+ /** Additional className on the container */
2174
2209
  className?: string;
2210
+ /** Additional className on the label, for presets that own their typography */
2211
+ textClassName?: string;
2175
2212
  }
2176
- 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;
2177
2222
 
2178
2223
  interface TileProps extends ViewProps {
2179
2224
  /** Uppercase micro-label shown above the value */
@@ -2196,10 +2241,13 @@ interface TileProps extends ViewProps {
2196
2241
  * @example
2197
2242
  * <Tile label="Volume" value="76%" />
2198
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.
2199
2247
  */
2200
2248
  declare function Tile({ label, value, valueColor, align, className, ...props }: TileProps): react_jsx_runtime.JSX.Element;
2201
2249
 
2202
- 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';
2203
2251
  type TypographyColor = 'primary' | 'secondary' | 'tertiary' | 'disabled' | 'inverse' | 'success' | 'error' | 'warning' | 'info' | 'inherit';
2204
2252
  type TypographyAlign = 'left' | 'center' | 'right' | 'justify';
2205
2253
  type TypographyMarginBottom = 'none' | 'sm' | 'md' | 'lg';
@@ -2380,6 +2428,12 @@ interface SidebarDividerProps {
2380
2428
  declare function SidebarDivider({ className }: SidebarDividerProps): react_jsx_runtime.JSX.Element;
2381
2429
 
2382
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';
2383
2437
  interface TableProps extends ViewProps {
2384
2438
  /** Currently sorted column */
2385
2439
  sortColumn?: string;
@@ -2401,6 +2455,14 @@ interface TableProps extends ViewProps {
2401
2455
  isLoading?: boolean;
2402
2456
  /** Number of skeleton rows to show when loading */
2403
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;
2404
2466
  /** Additional className */
2405
2467
  className?: string;
2406
2468
  children?: React__default.ReactNode;
@@ -2428,7 +2490,7 @@ interface TableProps extends ViewProps {
2428
2490
  * </TableBody>
2429
2491
  * </Table>
2430
2492
  */
2431
- 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;
2432
2494
  interface TableHeaderProps {
2433
2495
  children?: React__default.ReactNode;
2434
2496
  className?: string;
@@ -2461,6 +2523,8 @@ declare function TableRow({ isSelected, isHoverable, className, children, ...pro
2461
2523
  interface TableHeaderCellProps extends Omit<PressableProps, 'children'> {
2462
2524
  /** Sort key for this column */
2463
2525
  sortKey?: string;
2526
+ /** Full column name behind an abbreviated label: shown on hover and used as the accessible sort name. */
2527
+ tooltip?: string;
2464
2528
  /** Text alignment */
2465
2529
  align?: 'left' | 'center' | 'right';
2466
2530
  /** Cell width in pixels */
@@ -2472,7 +2536,7 @@ interface TableHeaderCellProps extends Omit<PressableProps, 'children'> {
2472
2536
  /**
2473
2537
  * Table header cell with optional sorting.
2474
2538
  */
2475
- 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;
2476
2540
  interface TableCellProps extends ViewProps {
2477
2541
  /** Text alignment */
2478
2542
  align?: 'left' | 'center' | 'right';
@@ -2515,11 +2579,24 @@ interface TablePaginationProps {
2515
2579
  * />
2516
2580
  */
2517
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;
2518
2588
  interface UseTableOptions<T> {
2519
2589
  data: T[];
2520
2590
  defaultPageSize?: number;
2521
2591
  defaultSortColumn?: string;
2522
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>;
2523
2600
  }
2524
2601
  interface UseTableReturn<T> {
2525
2602
  sortedData: T[];
@@ -2547,7 +2624,75 @@ interface UseTableReturn<T> {
2547
2624
  * defaultPageSize: 10,
2548
2625
  * })
2549
2626
  */
2550
- 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;
2551
2696
 
2552
2697
  interface EmptyStateProps extends ViewProps {
2553
2698
  /** Icon component to display */
@@ -2828,6 +2973,9 @@ interface BaseBadgeProps extends ViewProps {
2828
2973
  className?: string;
2829
2974
  children?: ReactNode;
2830
2975
  }
2976
+ /**
2977
+ * @deprecated Use `<Pill tone="…" variant="…">` — removed after AW-127 consumer migration.
2978
+ */
2831
2979
  declare function BaseBadge({ variant, size, icon, onPress, className, children, ...props }: BaseBadgeProps): react_jsx_runtime.JSX.Element;
2832
2980
 
2833
2981
  type WeightBadgeSize = BaseBadgeSize;
@@ -2848,6 +2996,9 @@ interface WeightBadgeProps extends Omit<BaseBadgeProps, 'variant' | 'icon' | 'ch
2848
2996
  onPress?: () => void;
2849
2997
  className?: string;
2850
2998
  }
2999
+ /**
3000
+ * @deprecated Use `<Pill tone="neutral">` — removed after AW-127 consumer migration.
3001
+ */
2851
3002
  declare function WeightBadge({ value, unit, reps, delta, isPr, showIcon, size, onPress, className, ...props }: WeightBadgeProps): react_jsx_runtime.JSX.Element;
2852
3003
 
2853
3004
  type PRType = 'e1rm' | 'weight' | 'reps' | 'volume' | 'velocity';
@@ -2963,6 +3114,10 @@ interface MuscleGroupChipProps extends ViewProps {
2963
3114
  onPress?: () => void;
2964
3115
  className?: string;
2965
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
+ */
2966
3121
  declare function MuscleGroupChip({ name, volumeStatus, onPress, className, ...props }: MuscleGroupChipProps): react_jsx_runtime.JSX.Element;
2967
3122
 
2968
3123
  interface SparklineProps extends ViewProps {
@@ -3030,8 +3185,14 @@ interface MetricCellProps {
3030
3185
  /** Cell text color — value cells take a primary color, separators a muted one. */
3031
3186
  color: string;
3032
3187
  fontSize?: number;
3188
+ /** Cell font weight. Default 600 (the bold "digital readout" look). */
3189
+ weight?: 400 | 600;
3033
3190
  }
3034
- declare function MetricCell({ children, color, fontSize }: MetricCellProps): react_jsx_runtime.JSX.Element;
3191
+ /**
3192
+ * @deprecated Use `<Metric size="…" align="…">` (roadmap decision 11) — removed
3193
+ * after AW-127 consumer migration.
3194
+ */
3195
+ declare function MetricCell({ children, color, fontSize, weight }: MetricCellProps): react_jsx_runtime.JSX.Element;
3035
3196
 
3036
3197
  interface SetsRepsLoadProps extends ViewProps {
3037
3198
  sets: number;
@@ -3042,27 +3203,36 @@ interface SetsRepsLoadProps extends ViewProps {
3042
3203
  unit?: string;
3043
3204
  /** Cell font size (px). Default 11 — the compact rail/card scale. Raise for a wall read-out. */
3044
3205
  fontSize?: number;
3206
+ /**
3207
+ * Flatten the whole run to one dimmer, regular-weight tone (the collapsed/upcoming
3208
+ * card row) instead of the bright bold value / muted separator split (the rail).
3209
+ * Also drops the `×` separator's padding spaces — "3×6", not "3 × 6".
3210
+ */
3211
+ muted?: boolean;
3045
3212
  className?: string;
3046
3213
  }
3047
3214
  /**
3048
3215
  * The `sets × reps @ load` prescription line, in the TempoDisplay visual language
3049
- * (Inter · 600 · letter-spacing 1 · value cells with muted `×` / `@` separators).
3216
+ * (Inter · letter-spacing 1 · value cells with muted `×` / `@` separators).
3050
3217
  * Shares the {@link MetricCell} primitive with TempoDisplay so the two stay in step.
3051
3218
  */
3052
- declare function SetsRepsLoad({ sets, reps, load, unit, fontSize, className, ...props }: SetsRepsLoadProps): react_jsx_runtime.JSX.Element;
3219
+ declare function SetsRepsLoad({ sets, reps, load, unit, fontSize, muted, className, ...props }: SetsRepsLoadProps): react_jsx_runtime.JSX.Element;
3053
3220
 
3054
3221
  interface SegmentedBarSegment {
3055
3222
  /** Flex weight of this segment's slot. Default 1 (all segments equal width). */
3056
3223
  weight?: number;
3057
3224
  /** Fraction 0..1 of the slot the coloured fill covers, left-aligned. Default 1 (full). */
3058
3225
  fill?: number;
3059
- /** Fill colour — a literal hex (RNW-safe), never a `var()` token ref. */
3226
+ /** Fill colour. Pass `resolveColor(token)` — a plain fill takes a `var()` ref fine. */
3060
3227
  color: string;
3061
3228
  /** When true the fill animates on the shared active-pulse loop. */
3062
3229
  pulse?: boolean;
3063
3230
  /**
3064
3231
  * When pulsing, interpolate the fill's `backgroundColor` from→to over the loop
3065
3232
  * (full opacity). Omit to fall back to the default opacity breathe.
3233
+ *
3234
+ * Literal hex only: `Animated.interpolate` parses these two endpoints itself
3235
+ * and cannot read a `var()` ref, so `resolveColor(token)` does not work here.
3066
3236
  */
3067
3237
  pulseColor?: [from: string, to: string];
3068
3238
  /**
@@ -3102,7 +3272,8 @@ interface SegmentedBarProps extends ViewProps {
3102
3272
  * presentational atom the per-set strips are built from. Each segment is a flex
3103
3273
  * slot (flex = `weight`) holding a left-aligned fill (`fill` fraction, `color`);
3104
3274
  * `pulse` segments breathe on a shared active-pulse loop, and `marker` drops a
3105
- * vertical line at a fraction of the total width. Colours are passed-in literal hex.
3275
+ * vertical line at a fraction of the total width. Every colour is injected by the
3276
+ * composer, so this atom holds no palette of its own.
3106
3277
  */
3107
3278
  declare function SegmentedBar({ segments, height, gap, radius, marker, segmentTestID, style, ...props }: SegmentedBarProps): react_jsx_runtime.JSX.Element;
3108
3279
 
@@ -3188,8 +3359,8 @@ interface ScheduleTilesProps extends ViewProps {
3188
3359
  * ScheduleTiles — Date / Time / Until row for an upcoming session.
3189
3360
  *
3190
3361
  * An HStack of three {@link Tile}s derived from a single scheduled moment. The
3191
- * Until value reuses {@link formatDateTime} relative formatting and turns
3192
- * accent-orange only when the session is less than a day away.
3362
+ * Until value reuses {@link formatDateTime} relative formatting and takes the
3363
+ * `brand-primary` accent only when the session is less than a day away.
3193
3364
  *
3194
3365
  * @example
3195
3366
  * <ScheduleTiles when={Date.now() + 5 * 60 * 60 * 1000} />
@@ -3210,48 +3381,131 @@ interface SetStripProps extends ViewProps {
3210
3381
  */
3211
3382
  declare function SetStrip({ sets, height, className, ...props }: SetStripProps): react_jsx_runtime.JSX.Element;
3212
3383
 
3213
- interface ExerciseHeadingProps {
3384
+ /** `stacked` puts the prescription on its own line under the name; `inline` keeps one row. */
3385
+ type ExerciseHeadingLayout = 'stacked' | 'inline';
3386
+ interface ExerciseHeadingBaseProps {
3214
3387
  name: string;
3215
- /** Prescription line values (sets × reps @ load). */
3216
- sets: number;
3217
- reps: number | string;
3218
- /** Load value; a string (e.g. "—") passes through verbatim for an unset/discovery load. */
3219
- load: number | string;
3220
3388
  unit?: 'lbs' | 'kg';
3221
- /** Tempo tuple [eccentric, pauseBottom, concentric, pauseTop]; hidden when absent. */
3389
+ /** Tempo tuple [eccentric, pauseBottom, concentric, pauseTop]. `stacked` layout only. */
3222
3390
  tempo?: [number, number, number, number];
3223
3391
  /** Small PR / issue / info chip in the title row. */
3224
3392
  indicator?: ExerciseIndicatorKind;
3225
3393
  /** Dim the block as a not-yet-reached exercise (standalone use). */
3226
3394
  dimmed?: boolean;
3395
+ /** Row shape. Default `stacked`. */
3396
+ layout?: ExerciseHeadingLayout;
3397
+ /**
3398
+ * Render the structured `sets × reps @ load` prescription in one dimmer, regular
3399
+ * tone instead of the rail's bright/bold value cells. `stacked` (rail) never sets
3400
+ * this; `inline` (compact, upcoming) always does.
3401
+ */
3402
+ mutedPrescription?: boolean;
3403
+ /** Trailing right-edge caption (a previous best). `inline` layout only. */
3404
+ previousBest?: string;
3405
+ /** This exercise is being performed right now — the name takes the live tone, never animated. */
3406
+ isLive?: boolean;
3407
+ /**
3408
+ * Who owns the press. `self` (default) makes the name row the button. `ancestor`
3409
+ * renders it as a plain row, for a wrapper that presses as a whole — legal only in
3410
+ * `inline` layout, since `stacked`'s TempoDisplay sibling is itself a Pressable.
3411
+ */
3412
+ pressTarget?: 'self' | 'ancestor';
3227
3413
  /** Press target for the name row (expand / select). */
3228
3414
  onPress?: () => void;
3415
+ onPressIn?: () => void;
3416
+ onPressOut?: () => void;
3417
+ /** Web-only; on a touch surface these never fire and the row has no hover state. */
3418
+ onHoverIn?: () => void;
3419
+ onHoverOut?: () => void;
3229
3420
  }
3421
+ /**
3422
+ * The prescription is EITHER the structured `sets × reps @ load` triple, OR a
3423
+ * free-text line for an exercise whose numbers aren't loaded yet, OR absent.
3424
+ * Mixing the two is a type error rather than a silently half-rendered line.
3425
+ */
3426
+ type ExerciseHeadingPrescription = {
3427
+ sets: number;
3428
+ reps: number | string;
3429
+ load: number | string;
3430
+ prescription?: never;
3431
+ } | {
3432
+ prescription: string;
3433
+ sets?: never;
3434
+ reps?: never;
3435
+ load?: never;
3436
+ } | {
3437
+ sets?: never;
3438
+ reps?: never;
3439
+ load?: never;
3440
+ prescription?: never;
3441
+ };
3442
+ type ExerciseHeadingProps = ExerciseHeadingBaseProps & ExerciseHeadingPrescription;
3443
+ /** The row's accessible name. Exported so a wrapper that owns the press can reuse it. */
3444
+ declare function exerciseHeadingLabel(p: ExerciseHeadingProps, unit?: string): string;
3230
3445
  /**
3231
3446
  * The exercise-heading info block (no strip): the name + {@link ExerciseIndicator}
3232
- * title row over a tight {@link SetsRepsLoad} prescription line beside the real
3233
- * {@link TempoDisplay} (`showLabel={false}`). The name row is the sole press
3234
- * target TempoDisplay is a sibling, never a descendant, since it is itself a
3447
+ * title row, its prescription line, and `inline` only a trailing previous-best
3448
+ * caption. The name row is the sole press target: TempoDisplay and the previous-best
3449
+ * caption are siblings of it, never descendants, since TempoDisplay is itself a
3235
3450
  * Pressable (nesting would be an a11y nested-interactive violation).
3451
+ *
3452
+ * `layout` is the one axis that separates the session-rail row (`stacked`) from the
3453
+ * collapsed and upcoming card rows (`inline`) — same parts, same vocabulary, one row
3454
+ * instead of two. `inline` drops the tempo: it has no room for a second metric lockup.
3236
3455
  */
3237
- declare function ExerciseHeading({ name, sets, reps, load, unit, tempo, indicator, dimmed, onPress, }: ExerciseHeadingProps): react_jsx_runtime.JSX.Element;
3456
+ declare function ExerciseHeading(props: ExerciseHeadingProps): react_jsx_runtime.JSX.Element;
3238
3457
 
3239
- interface ExerciseCardHeadingProps extends ExerciseHeadingProps {
3458
+ /**
3459
+ * How much room the row gets, and therefore which shape it takes:
3460
+ * - `rail` — the session-rail row: two lines (name, then prescription + tempo).
3461
+ * - `compact` — the collapsed card row: one line, card padding.
3462
+ * - `upcoming` — `compact`, dimmed, with the previous-best caption.
3463
+ */
3464
+ type ExerciseRowDensity = 'rail' | 'compact' | 'upcoming';
3465
+ type ExerciseCardHeadingProps = ExerciseHeadingProps & {
3466
+ /** Row shape. Default `rail`. */
3467
+ density?: ExerciseRowDensity;
3240
3468
  /** Per-set performance data driving the strip; an empty list renders no strip. */
3241
- setStates: SetStripSet[];
3469
+ setStates?: SetStripSet[];
3242
3470
  /** Strip height in px. Default 8. */
3243
3471
  stripHeight?: number;
3472
+ /** The row the user has chosen — a persistent wash, distinct from transient hover. */
3473
+ isSelected?: boolean;
3474
+ /** Root style, for the chrome a card wraps the row in (superset radius, margins). */
3475
+ style?: StyleProp<ViewStyle>;
3244
3476
  /** Root testID. Default "exercise-card"; override when nested inside another card. */
3245
3477
  testID?: string;
3246
- }
3478
+ };
3247
3479
  /**
3248
- * The complete, standalone session-rail heading: an {@link ExerciseHeading} info
3249
- * block over its per-set {@link SetStrip}. The unit the rail lists — self-contained
3250
- * and independent of {@link ExerciseCard} (whose `rail` state delegates here).
3480
+ * The exercise row one component for all three densities the workout surfaces
3481
+ * list an exercise in: the standalone session-rail heading (`rail`), the collapsed
3482
+ * card row (`compact`) and the not-yet-reached row (`upcoming`). An
3483
+ * {@link ExerciseHeading} info block over its per-set {@link SetStrip}.
3484
+ *
3485
+ * Interaction states are washes from the `interactive-*` tokens (press > selection >
3486
+ * hover) plus a `isLive` name tone. All are static: this row renders on a wall display
3487
+ * during a set, where titan's "the grain never animates" rule applies.
3488
+ *
3251
3489
  * e1RM is intentionally dropped (a planning / live-panel concern). Dimming lives on
3252
3490
  * the outer wrapper so the strip dims with the heading.
3253
3491
  */
3254
- declare function ExerciseCardHeading({ setStates, stripHeight, dimmed, testID, ...heading }: ExerciseCardHeadingProps): react_jsx_runtime.JSX.Element;
3492
+ declare function ExerciseCardHeading(props: ExerciseCardHeadingProps): react_jsx_runtime.JSX.Element;
3493
+
3494
+ /** The interaction washes an exercise row can wear, beyond its resting look. */
3495
+ type ExerciseRowState = 'hovered' | 'selected' | 'pressed';
3496
+ /**
3497
+ * Literal-hex wash for one interaction state, in the same shape as
3498
+ * `onSurfaceColors`. Uses `getSemanticColors` rather than `resolveColor` so the
3499
+ * value survives where there are no CSS custom properties (the raw-RN wall SPA,
3500
+ * native) and stays assertable in tests.
3501
+ */
3502
+ declare function exerciseRowStateColor(state: ExerciseRowState, mode?: ThemeMode): string;
3503
+ /**
3504
+ * The tone for an exercise being performed right now. Static by construction —
3505
+ * a live row sits on a wall display, where titan's "the grain never animates"
3506
+ * rule applies just as much to a heading.
3507
+ */
3508
+ declare function exerciseLiveColor(mode?: ThemeMode): string;
3255
3509
 
3256
3510
  interface SetTableHeaderProps {
3257
3511
  /** Weight-column label: LBS / KG. Default lbs. */
@@ -3380,10 +3634,11 @@ declare function SessionRail({ title, exercises, setsDone, elapsedMs, budgetMs,
3380
3634
 
3381
3635
  interface SupersetWrapperProps {
3382
3636
  label?: string;
3637
+ /** Rail and label-chip colour. Defaults to the `brand-primary` token. */
3383
3638
  color?: string;
3384
3639
  children: React__default.ReactNode;
3385
3640
  }
3386
- declare function SupersetWrapper({ label, color, children, }: SupersetWrapperProps): react_jsx_runtime.JSX.Element;
3641
+ declare function SupersetWrapper({ label, color, children }: SupersetWrapperProps): react_jsx_runtime.JSX.Element;
3387
3642
 
3388
3643
  type PrRecordType = 'e1rm' | 'weight' | 'reps' | 'volume' | 'velocity';
3389
3644
  interface PrRecord {
@@ -3652,12 +3907,11 @@ interface StatusPillProps extends ViewProps {
3652
3907
  /** Resolved semantic color for a verdict status. */
3653
3908
  declare function statusPillColor(status: StatusPillStatus): string;
3654
3909
  /**
3655
- * Verdict pill: a glowing status dot + colored verdict text, in a tinted,
3656
- * bordered capsule. Composes {@link StatusDot} for the dot so the glow/color
3657
- * stays consistent with the atom. Tint and border are derived from the same
3658
- * semantic token via `alpha()` — no per-status raw hex.
3910
+ * Verdict pill: a glowing status dot + coloured verdict text in a tinted
3911
+ * capsule. A `Pill` preset tone, tint and border all come from the pill's
3912
+ * semantic tone, so no per-status colour is computed here.
3659
3913
  */
3660
- declare function StatusPill({ status, label, className, style, ...props }: StatusPillProps): react_jsx_runtime.JSX.Element;
3914
+ declare function StatusPill({ status, label, className, ...props }: StatusPillProps): react_jsx_runtime.JSX.Element;
3661
3915
 
3662
3916
  /**
3663
3917
  * Coaching-category flood level for the live surface. Mirrors {@link StatusPill}:
@@ -3808,14 +4062,6 @@ interface LiveFatigueModel {
3808
4062
  targetTempoSeconds: [number, number, number, number] | null;
3809
4063
  }
3810
4064
 
3811
- interface LiveFatiguePanelHeader {
3812
- /** Exercise name — the large title. */
3813
- title: string;
3814
- /** Prescription / block line under the title. */
3815
- subtitle?: string;
3816
- /** Right-aligned progress meta, e.g. "SET 3 · REP 7 / 8". */
3817
- meta?: string;
3818
- }
3819
4065
  interface LiveFatiguePanelVelocity {
3820
4066
  /** Per-rep MEAN concentric velocity (m/s), ordered by rep. */
3821
4067
  velocities: number[];
@@ -3827,16 +4073,91 @@ interface LiveFatiguePanelProps {
3827
4073
  model: LiveFatigueModel;
3828
4074
  /** The velocity-hero data (its own source — not on the fatigue model). */
3829
4075
  velocity: LiveFatiguePanelVelocity;
3830
- /** Optional lite exercise header. Omitted → no header row. */
3831
- header?: LiveFatiguePanelHeader;
3832
4076
  /** Aura-flood category. Defaults to the verdict-derived category. */
3833
4077
  aura?: LiveAuraCategory;
3834
4078
  /** Panel body height in px. Default 508. */
3835
4079
  bodyHeight?: number;
3836
- /** Fixed fatigue-card column width. Default 318. */
4080
+ /**
4081
+ * Pin the fatigue-card column width instead of letting the tier choose it. Ignored when
4082
+ * the panel is stacked (the card fills the content width there).
4083
+ */
3837
4084
  cardWidth?: number;
4085
+ /**
4086
+ * Override the measured container width, in px. The panel measures itself, so this is
4087
+ * for tests (`onLayout` never fires under jsdom) and for a consumer that already knows
4088
+ * the width it is about to hand the panel.
4089
+ */
4090
+ containerWidth?: number;
4091
+ }
4092
+ declare function LiveFatiguePanel({ model, velocity, aura, bodyHeight, cardWidth, containerWidth, }: LiveFatiguePanelProps): react_jsx_runtime.JSX.Element;
4093
+
4094
+ /** titan's breakpoint scale, re-exported as the panel's tier edges. Sourced, not chosen. */
4095
+ declare const PANEL_BREAKPOINTS: {
4096
+ readonly xs: 0;
4097
+ readonly sm: 600;
4098
+ readonly md: 1000;
4099
+ readonly lg: 1200;
4100
+ readonly xl: 1920;
4101
+ };
4102
+ type PanelTier = keyof typeof PANEL_BREAKPOINTS;
4103
+ /**
4104
+ * The tier for a measured container width. An unmeasured container (0, before the first
4105
+ * `onLayout`) resolves to `md` — today's side-by-side geometry — so the first paint matches
4106
+ * what the panel has always rendered rather than flashing a stacked layout.
4107
+ */
4108
+ declare function panelTier(width: number): PanelTier;
4109
+ /** titan's long-standing card column width, and the floor every wider tier clamps to. */
4110
+ declare const CARD_WIDTH_BASE = 318;
4111
+ /**
4112
+ * CHOSEN. At wall width a 318px card is ~17% of the content row against ~34% at the `md`
4113
+ * edge, so it reads as a sliver beside the hero. 0.22 pulls it back toward the `md`
4114
+ * proportion without letting the hero lose its lead.
4115
+ */
4116
+ declare const CARD_WIDTH_XL_RATIO = 0.22;
4117
+ /**
4118
+ * CHOSEN. The cap. The card's internal charts (`RomProgressionChart`, `GhostSpark`) were
4119
+ * drawn around ~318 and go sparse rather than richer past roughly 1.5x that, so the
4120
+ * expansion stops at 460 (reached at 2091px) instead of tracking the container forever.
4121
+ */
4122
+ declare const CARD_WIDTH_MAX = 460;
4123
+ /**
4124
+ * CHOSEN. Stacked, the CARD takes the larger share of the one body height. Its sections
4125
+ * have hard floors — the verdict hero, the three lights, the ROM chart and the ghost spark —
4126
+ * while the velocity hero is a bar plot that scales continuously, so squeezing the hero
4127
+ * degrades gracefully and squeezing the card overflows it.
4128
+ */
4129
+ declare const CARD_HEIGHT_SHARE_STACKED = 0.55;
4130
+ /** What the hero reserves above its plot for the `VELOCITY · this set` eyebrow, px. */
4131
+ declare const HERO_EYEBROW_ALLOWANCE = 26;
4132
+ interface PanelLayout {
4133
+ tier: PanelTier;
4134
+ /** Card below the hero rather than beside it. */
4135
+ stacked: boolean;
4136
+ /** Uniform padding around the body row, px. */
4137
+ padding: number;
4138
+ /** Gap between the hero and the card, px — column gap when row, row gap when stacked. */
4139
+ gap: number;
4140
+ /**
4141
+ * Card width, px. Stacked, this is the full content width, so the card takes a real
4142
+ * number rather than needing a second `onLayout` of its own to size its charts.
4143
+ */
4144
+ cardWidth: number;
4145
+ }
4146
+ /** The whole layout for a measured container width. */
4147
+ declare function panelLayout(width: number): PanelLayout;
4148
+ interface PanelBodySplit {
4149
+ /** Height handed to the velocity hero's plot, px. */
4150
+ heroHeight: number;
4151
+ /** Height handed to the fatigue card, px. */
4152
+ cardHeight: number;
3838
4153
  }
3839
- declare function LiveFatiguePanel({ model, velocity, header, aura, bodyHeight, cardWidth, }: LiveFatiguePanelProps): react_jsx_runtime.JSX.Element;
4154
+ /**
4155
+ * The ONE body height split across the hero and the card (TD-03.60). Side by side both
4156
+ * take the full height; stacked they share it by {@link CARD_HEIGHT_SHARE_STACKED} with the
4157
+ * gap taken out first, and neither drops below its floor. Either way both numbers come from
4158
+ * this one call, so changing `bodyHeight` moves both or neither.
4159
+ */
4160
+ declare function panelBodySplit(bodyHeight: number, layout: PanelLayout): PanelBodySplit;
3840
4161
 
3841
4162
  interface LiveFatigueCardProps {
3842
4163
  /** The live fatigue read-model for the current set. */
@@ -4190,18 +4511,925 @@ interface GaugeProps extends Omit<ViewProps, 'children'> {
4190
4511
  */
4191
4512
  declare function Gauge({ value, min, max, size, label, unit, thresholds, color, className, ...props }: GaugeProps): react_jsx_runtime.JSX.Element;
4192
4513
 
4514
+ interface SparkBarsProps extends Omit<ViewProps, 'accessibilityLabel'> {
4515
+ /** The series, oldest first. Negative values draw in `negativeColor`. */
4516
+ values: number[];
4517
+ /** Overall bar-field height in px. */
4518
+ height?: number;
4519
+ /** Width of a single bar in px. */
4520
+ barWidth?: number;
4521
+ /** Gap between bars in px. */
4522
+ gap?: number;
4523
+ /** Keep only the last N values — a sparkline is a recent-history glance, not an archive. */
4524
+ maxBars?: number;
4525
+ /** Fill for non-negative bars. Defaults to `result-improve`. */
4526
+ color?: string;
4527
+ /** Fill for negative bars. Defaults to `result-degrade`. */
4528
+ negativeColor?: string;
4529
+ /** Screen-reader description. Defaults to a bar count. */
4530
+ label?: string;
4531
+ className?: string;
4532
+ }
4533
+ /**
4534
+ * SparkBars — a tiny bar-mark sparkline for a signed series.
4535
+ *
4536
+ * The bar-mark counterpart to {@link Sparkline}: where a line reads a
4537
+ * *trajectory*, bars read *discrete per-period magnitude*, which is what
4538
+ * per-session activity and per-session net growth actually are. Bars are scaled
4539
+ * by absolute value so a negative period is as tall as an equally large
4540
+ * positive one, and tinted with `negativeColor` to carry the sign.
4541
+ *
4542
+ * @example
4543
+ * <SparkBars values={[3, 8, -2, 14]} height={22} />
4544
+ */
4545
+ declare function SparkBars({ values, height, barWidth, gap, maxBars, color, negativeColor, label, className, ...props }: SparkBarsProps): react_jsx_runtime.JSX.Element;
4546
+
4547
+ interface EyebrowProps {
4548
+ children: ReactNode;
4549
+ className?: string;
4550
+ }
4551
+ /**
4552
+ * Eyebrow — an uppercase micro-label used above a value or a section of
4553
+ * content (e.g. "Focused · by rank", a stat tile's caption). Composes
4554
+ * {@link Typography}'s `overline` variant; never hand-roll the letter-spacing.
4555
+ */
4556
+ declare function Eyebrow({ children, className }: EyebrowProps): react_jsx_runtime.JSX.Element;
4557
+
4558
+ /** How much a task hurts if left undone. Ordered worst-first by {@link SEVERITY_RANK}. */
4559
+ type TaskSeverity = 'critical' | 'high' | 'medium' | 'low';
4560
+ /**
4561
+ * Sort weight per severity, worst-first. Exported so a table can rank a severity
4562
+ * column by meaning rather than alphabetically ("critical" < "high" < "low" as
4563
+ * strings puts low in the middle).
4564
+ */
4565
+ declare const SEVERITY_RANK: Record<TaskSeverity, number>;
4566
+ /** Severities worst-first — the canonical order for legends and pickers. */
4567
+ declare const SEVERITY_ORDER: TaskSeverity[];
4568
+ /** Rank for a possibly-absent severity; unset sorts after every real value. */
4569
+ declare function severityRank(severity?: TaskSeverity): number;
4570
+ /**
4571
+ * Severity to its display label and {@link Indicator} colour. Critical and high
4572
+ * both read as error; the vivid step separates "drop everything" from "serious".
4573
+ */
4574
+ declare const SEVERITY_META: Record<TaskSeverity, {
4575
+ label: string;
4576
+ dot: React.ComponentProps<typeof Indicator>['color'];
4577
+ }>;
4578
+ /**
4579
+ * Severity as a fill for an area mark (a {@link SegmentedBar} segment), where
4580
+ * {@link SEVERITY_META} gives the point-mark dot colour.
4581
+ *
4582
+ * `low` diverges deliberately: as a dot among four it needs to stay legible, but
4583
+ * as a bar segment it should recede, so it takes `text-tertiary` rather than
4584
+ * `status-info`. Both live here so the severity vocabulary has one owner.
4585
+ */
4586
+ declare const SEVERITY_BAR_COLOR: Record<TaskSeverity, string>;
4587
+ interface SeverityLabelProps {
4588
+ /** Omitted renders the em-dash placeholder rather than nothing, so columns stay aligned. */
4589
+ severity?: TaskSeverity;
4590
+ /** Hides the text, leaving only the dot — for a legend key or a very tight column. */
4591
+ dotOnly?: boolean;
4592
+ className?: string;
4593
+ }
4594
+ /**
4595
+ * SeverityLabel — a task's severity as a coloured dot plus its label.
4596
+ *
4597
+ * Composes {@link Indicator}; never hand-roll a status dot (there are already two
4598
+ * dot primitives in the system, and this is not a third). Used by
4599
+ * {@link TaskRow} and {@link TaskTable}'s legend.
4600
+ *
4601
+ * @deprecated Use `<Pill tone="…" leading="dot">` — removed after AW-127 consumer migration.
4602
+ */
4603
+ declare function SeverityLabel({ severity, dotOnly, className }: SeverityLabelProps): react_jsx_runtime.JSX.Element;
4604
+
4605
+ type InitiativeState = 'focused' | 'backburner' | 'paused' | 'done';
4606
+ /** Initiative state → label + {@link StatusDot} variant. One owner; the initiative header reads it too. */
4607
+ declare const INITIATIVE_STATE_META: Record<InitiativeState, {
4608
+ label: string;
4609
+ dot: StatusDotVariant;
4610
+ }>;
4611
+ interface InitiativeCardTopTask {
4612
+ id: string;
4613
+ title: string;
4614
+ }
4615
+ interface InitiativeCardProps extends ViewProps {
4616
+ /** Initiative title, e.g. "active-work — durable workspace state". */
4617
+ title: string;
4618
+ /** Short slug shown under the title, e.g. "active-work". */
4619
+ slug: string;
4620
+ /** Lifecycle state — drives the status dot and card accent. */
4621
+ state: InitiativeState;
4622
+ /** Focused rank (1-based). Omit for non-ranked states. */
4623
+ rank?: number;
4624
+ /** Ship-target label, e.g. "2026-Q3". */
4625
+ shipTarget?: string;
4626
+ /** Count of open tasks for this initiative. */
4627
+ openCount: number;
4628
+ /** Open-task counts by severity, driving the segmented mix bar. Bar is omitted when all-zero. */
4629
+ severityCounts: Record<TaskSeverity, number>;
4630
+ /** The highest-priority open task, if any. Renders "no open tasks" when omitted. */
4631
+ topTask?: InitiativeCardTopTask;
4632
+ className?: string;
4633
+ }
4634
+ /**
4635
+ * InitiativeCard — an at-a-glance summary of one active-work initiative: state,
4636
+ * rank, open-task count, a severity-mix bar, and its top-priority open task.
4637
+ * Composes Card / Pill / StatusDot / SegmentedBar / Typography — never
4638
+ * hand-rolled. Used by {@link PortfolioOverview}.
4639
+ *
4640
+ * Sits on the card plane above the page like every other content card; the
4641
+ * `accent` stripe is reserved for the focused state, where it carries meaning.
4642
+ */
4643
+ declare function InitiativeCard({ title, slug, state, rank, shipTarget, openCount, severityCounts, topTask, className, ...props }: InitiativeCardProps): react_jsx_runtime.JSX.Element;
4644
+
4645
+ interface PortfolioOverviewStat {
4646
+ value: string;
4647
+ label: string;
4648
+ }
4649
+ interface PortfolioOverviewSection {
4650
+ /** Section eyebrow, e.g. "Focused · by rank" or "Backburner". */
4651
+ heading: string;
4652
+ items: InitiativeCardProps[];
4653
+ }
4654
+ interface PortfolioOverviewProps extends ViewProps {
4655
+ title: string;
4656
+ subtitle?: string;
4657
+ /** KPI tiles rendered above the sections, e.g. Focused / Open tasks / Initiatives. */
4658
+ stats: PortfolioOverviewStat[];
4659
+ /** Initiative groups, rendered top-to-bottom in the order given. */
4660
+ sections: PortfolioOverviewSection[];
4661
+ className?: string;
4662
+ }
4663
+ /**
4664
+ * PortfolioOverview — at-a-glance status across every tracked initiative: a
4665
+ * KPI row followed by initiative groups (typically Focused, then Backburner).
4666
+ * Composes Card / Metric / Eyebrow / {@link InitiativeCard} — presentational
4667
+ * only, all data supplied by props.
4668
+ *
4669
+ * Data plan: the caller is responsible for computing `stats` and `sections`
4670
+ * from its own source of truth (e.g. the active-work session-mining export).
4671
+ * This component has no fetch/store dependency, so wiring it to a live data
4672
+ * source is a caller-side concern — flagged here as the integration's only
4673
+ * open gap.
4674
+ */
4675
+ declare function PortfolioOverview({ title, subtitle, stats, sections, className, ...props }: PortfolioOverviewProps): react_jsx_runtime.JSX.Element;
4676
+
4677
+ /** Split a path into its directory prefix (trailing slash kept) and basename. */
4678
+ declare function splitPath(path: string): {
4679
+ dir: string;
4680
+ base: string;
4681
+ };
4682
+ /** Basename size on the type scale, with the directory one step quieter. */
4683
+ type FilePathLabelSize = 'sm' | 'md';
4684
+ interface FilePathLabelProps extends ViewProps {
4685
+ /** A repo-relative path, e.g. `src/commands/open.ts`. */
4686
+ path: string;
4687
+ /** `md` for standalone rows, `sm` for dense contexts like chips. */
4688
+ size?: FilePathLabelSize;
4689
+ /** Render only the basename, dropping the directory prefix. */
4690
+ baseOnly?: boolean;
4691
+ className?: string;
4692
+ }
4693
+ /**
4694
+ * FilePathLabel — a file path with the directory dimmed and the basename bright.
4695
+ *
4696
+ * In a list of paths the basename is the identifier and the directory is
4697
+ * disambiguation, so they get different weight rather than one flat string. The
4698
+ * directory shrinks first under width pressure; the basename never truncates.
4699
+ */
4700
+ declare function FilePathLabel({ path, size, baseOnly, className, ...props }: FilePathLabelProps): react_jsx_runtime.JSX.Element;
4701
+
4702
+ /** Fill per event kind, shared by the row's counts and the detail pane's tiles. */
4703
+ interface FileEventColors {
4704
+ reads: string;
4705
+ writes: string;
4706
+ edits: string;
4707
+ }
4708
+ /**
4709
+ * Reads/writes/edits read as *importance* rather than as peer categories: reads
4710
+ * are cheap and quiet, writes are the consequential ones, edits sit between.
4711
+ */
4712
+ declare const FILE_EVENT_COLOR_SEMANTIC: FileEventColors;
4713
+ /**
4714
+ * The same three as *peer categories*, taken in order from the canonical
4715
+ * CVD-safe palette (TOKENS.md §2).
4716
+ */
4717
+ declare const FILE_EVENT_COLOR_CATEGORICAL: FileEventColors;
4718
+ /**
4719
+ * The family default: the three event kinds are peer categories, so they take
4720
+ * the canonical CVD-safe palette in order rather than a hand-picked triple.
4721
+ * Costs three of `CATEGORICAL_CVD_SAFE_MAX` — a view that also plots series
4722
+ * needs to start from index 3, or supply its own `eventColors`.
4723
+ */
4724
+ declare const FILE_EVENT_COLOR: FileEventColors;
4725
+ /** Per-file activity mined from session transcripts. */
4726
+ interface FileActivity {
4727
+ /** Repo-relative path. */
4728
+ path: string;
4729
+ reads: number;
4730
+ writes: number;
4731
+ edits: number;
4732
+ /** Total events across reads + writes + edits. */
4733
+ touches: number;
4734
+ /** Per-session net char delta, oldest first. Drives the sparkline. */
4735
+ timeline: number[];
4736
+ }
4737
+ interface FileActivityRowProps {
4738
+ file: FileActivity;
4739
+ /** Renders the selected treatment (one tone up from the list pane + leading accent bar). */
4740
+ selected?: boolean;
4741
+ onSelect?: () => void;
4742
+ /** Override the read/write/edit fills. Defaults to {@link FILE_EVENT_COLOR}. */
4743
+ eventColors?: FileEventColors;
4744
+ }
4745
+ /**
4746
+ * FileActivityRow — one file in the ranked "hottest files" list: its path, total
4747
+ * touches, the read/write/edit split, and a sparkline of per-session growth.
4748
+ *
4749
+ * Composes {@link FilePathLabel} and {@link SparkBars}. Used by
4750
+ * {@link FileHistoryExplorer}.
4751
+ */
4752
+ declare function FileActivityRow({ file, selected, onSelect, eventColors, }: FileActivityRowProps): react_jsx_runtime.JSX.Element;
4753
+
4754
+ /** Another file that tends to change in the same session as this one. */
4755
+ interface FileCoChange {
4756
+ path: string;
4757
+ count: number;
4758
+ }
4759
+ /** {@link FileActivity} plus the history only the detail pane shows. */
4760
+ interface FileActivityDetailData extends FileActivity {
4761
+ /** Distinct sessions that touched this file. */
4762
+ sessions: number;
4763
+ charsAdded: number;
4764
+ charsRemoved: number;
4765
+ /** `charsAdded - charsRemoved`; negative means the file net-shrank. */
4766
+ netGrowth: number;
4767
+ firstTouched?: string | null;
4768
+ lastTouched?: string | null;
4769
+ coChange: FileCoChange[];
4770
+ }
4771
+ interface FileActivityDetailProps {
4772
+ file: FileActivityDetailData;
4773
+ /** Override the read/write/edit fills. Defaults to {@link FILE_EVENT_COLOR}. */
4774
+ eventColors?: FileEventColors;
4775
+ className?: string;
4776
+ }
4777
+ /**
4778
+ * FileActivityDetail — the right-hand pane of {@link FileHistoryExplorer}: one
4779
+ * file's full mined history. Activity split, net char growth over sessions, and
4780
+ * the files it changes together with — the co-change list being the part a
4781
+ * plain file tree cannot show.
4782
+ *
4783
+ * Composes Card / CardInset / Tile / Pill / DataRow / DateTime plus
4784
+ * {@link SparkBars}, {@link FilePathLabel} and {@link Eyebrow}.
4785
+ *
4786
+ * One lift only: the pane itself. Inside it the activity split reads as filled
4787
+ * tiles a plane up and the growth block as a `CardInset` well a plane down.
4788
+ */
4789
+ declare function FileActivityDetail({ file, eventColors, className, }: FileActivityDetailProps): react_jsx_runtime.JSX.Element;
4790
+
4791
+ interface CoChangeChipProps {
4792
+ /** One side of the pair. */
4793
+ a: string;
4794
+ /** The other side. Order is not meaningful — co-change is symmetric. */
4795
+ b: string;
4796
+ /** How many sessions changed both files. */
4797
+ count: number;
4798
+ className?: string;
4799
+ }
4800
+ /**
4801
+ * CoChangeChip — one symmetric "these two files change together" pair.
4802
+ *
4803
+ * Only basenames are shown: at chip size the directory is noise, and the pair
4804
+ * is a pointer into {@link FileActivityDetail} rather than a full identifier.
4805
+ * Used by {@link FileHistoryExplorer}'s repo-wide co-change strip.
4806
+ *
4807
+ * @deprecated Use `<Pill tone="brand" size="xs">` — removed after AW-127 consumer migration.
4808
+ */
4809
+ declare function CoChangeChip({ a, b, count, className }: CoChangeChipProps): react_jsx_runtime.JSX.Element;
4810
+
4811
+ /** A KPI shown in the strip above the explorer. */
4812
+ interface FileHistoryStat {
4813
+ label: string;
4814
+ value: string;
4815
+ }
4816
+ /** A repo-wide co-change pair, strongest first. */
4817
+ interface CoChangeEdge {
4818
+ a: string;
4819
+ b: string;
4820
+ count: number;
4821
+ }
4822
+ interface FileHistoryExplorerProps extends ViewProps {
4823
+ /** KPI tiles, e.g. Files / File events / Sessions / Transcripts. */
4824
+ stats: FileHistoryStat[];
4825
+ /** Files for the ranked list, already sorted (typically by descending touches). */
4826
+ files: FileActivityDetailData[];
4827
+ /** Repo-wide co-change pairs, already sorted by descending count. */
4828
+ coEdges?: CoChangeEdge[];
4829
+ /** Caption under the KPI strip explaining where the numbers came from. */
4830
+ provenance?: string;
4831
+ /** Cap on ranked rows rendered. */
4832
+ maxRows?: number;
4833
+ /** Cap on co-change chips rendered. */
4834
+ maxCoEdges?: number;
4835
+ /** Selected file path. Omit to let the explorer manage selection itself. */
4836
+ selectedPath?: string;
4837
+ /** Fires on row press. Required for the selection to move when `selectedPath` is set. */
4838
+ onSelectFile?: (path: string) => void;
4839
+ className?: string;
4840
+ }
4841
+ /**
4842
+ * FileHistoryExplorer — a file browser ranked by mined activity instead of
4843
+ * alphabetised by name: a KPI strip, a two-pane hottest-files list ⇄ detail,
4844
+ * and the repo's strongest co-change pairs.
4845
+ *
4846
+ * Composes Card / Tile / Divider plus {@link FileActivityRow},
4847
+ * {@link FileActivityDetail}, {@link CoChangeChip} and {@link Eyebrow}.
4848
+ * Selection is controlled when `selectedPath` is supplied and internal
4849
+ * otherwise.
4850
+ *
4851
+ * Data plan: presentational only — no fetch or store dependency. The caller
4852
+ * derives `stats`, `files` and `coEdges` from its own source of truth (the
4853
+ * active-work session-history miner). Wiring that export to these props is a
4854
+ * caller-side concern and the integration's only open gap; a shared adapter is
4855
+ * deliberately out of scope for this unit.
4856
+ */
4857
+ declare function FileHistoryExplorer({ stats, files, coEdges, provenance, maxRows, maxCoEdges, selectedPath, onSelectFile, className, ...props }: FileHistoryExplorerProps): react_jsx_runtime.JSX.Element;
4858
+
4859
+ /**
4860
+ * A compact age label for a dense column: `today`, `4d ago`, `3mo ago`.
4861
+ *
4862
+ * Deliberately not `DateTime format="relative"` — that renders Intl prose ("4
4863
+ * days ago"), which is too long for a 74px column, and it reads `Date.now()`
4864
+ * internally so a story or a visual baseline could never be deterministic. `now`
4865
+ * is injected here for exactly that reason.
4866
+ */
4867
+ declare function formatTaskAge(iso: string | null | undefined, now: number): string;
4868
+ /**
4869
+ * A session's wall-clock length as `1h 4m` or `42m`. Empty when the span is
4870
+ * missing, unparseable or not positive, so callers can drop the separator
4871
+ * rather than render `0m`.
4872
+ */
4873
+ declare function formatSessionDuration(started: string, ended: string): string;
4874
+
4875
+ type TaskSortKey = 'slug' | 'id' | 'title' | 'severity' | 'priority' | 'estimate' | 'updated';
4876
+ /** Any column the table can leave out; `title` is the one column that always renders. */
4877
+ type TaskColumnKey = Exclude<TaskSortKey, 'title'> | 'tags';
4878
+ /** How the severity column renders: `auto` collapses to the dot below {@link COMPACT_SEVERITY_BELOW}. */
4879
+ type SeverityDisplay = 'auto' | 'full' | 'dot';
4880
+ /**
4881
+ * Table width under which severity collapses to its dot. Below this the fixed
4882
+ * columns leave the flexible title under ~220px, which is where titles stop
4883
+ * being scannable; the dot gives 68px back.
4884
+ */
4885
+ declare const COMPACT_SEVERITY_BELOW = 840;
4886
+ interface TaskTableProps {
4887
+ tasks: TaskListItem[];
4888
+ /**
4889
+ * Reference timestamp for the age column. Injected rather than read from the
4890
+ * clock so stories, tests and visual baselines render identically forever.
4891
+ */
4892
+ now: number;
4893
+ /** Column sorted on first render. Defaults to `priority`. */
4894
+ defaultSortKey?: TaskSortKey;
4895
+ /** Hides the severity legend above the grid. */
4896
+ hideLegend?: boolean;
4897
+ /** Severity column mode. Defaults to `auto`, driven by the table's measured width. */
4898
+ severityDisplay?: SeverityDisplay;
4899
+ /** Columns to leave out, for an embedded table that already knows its context. */
4900
+ hideColumns?: TaskColumnKey[];
4901
+ /**
4902
+ * Pins the width the column fit runs against instead of measuring it. For
4903
+ * stories and tests that need to hold one step of the drop order still.
4904
+ */
4905
+ fitWidth?: number;
4906
+ /** Eyebrow over the grid. Defaults to the backlog wording, `N open · all initiatives`. */
4907
+ label?: string;
4908
+ className?: string;
4909
+ }
4910
+ /**
4911
+ * TaskTable — every open task across initiatives in one dense, sortable grid.
4912
+ *
4913
+ * Composes {@link Table} at `density="dense"` and drives it with
4914
+ * {@link useTable}, passing per-column comparators so severity ranks by meaning
4915
+ * and age reads newest-first. Rows are {@link TaskRow}; the legend tallies
4916
+ * {@link SeverityLabel}.
4917
+ *
4918
+ * Narrow it and it adapts twice, in order: severity collapses to its dot, then
4919
+ * whole columns drop along {@link TASK_DROP_ORDER}. `title` and `id` are not in
4920
+ * that order and never drop; under them the table scrolls horizontally.
4921
+ */
4922
+ declare function TaskTable({ tasks, now, defaultSortKey, hideLegend, severityDisplay, hideColumns, fitWidth, label, className, }: TaskTableProps): react_jsx_runtime.JSX.Element;
4923
+
4924
+ /** One open task, as the task list renders it. */
4925
+ interface TaskListItem {
4926
+ /** Initiative slug the task belongs to. */
4927
+ slug: string;
4928
+ /** Per-initiative task id, e.g. `AW-22`. */
4929
+ id: string;
4930
+ title: string;
4931
+ severity?: TaskSeverity;
4932
+ /** Lower sorts first; unique within an initiative, not globally. */
4933
+ priority: number;
4934
+ /** Rough size. Absent means unestimated, which sorts last. */
4935
+ estimate?: number;
4936
+ tags?: string[];
4937
+ /** ISO date the task last changed, used for the age column. */
4938
+ updated: string;
4939
+ }
4940
+ /**
4941
+ * Fixed column widths, shared by {@link TaskRow} and {@link TaskTable}'s header
4942
+ * so the two cannot drift. `title` is the flexible column: it renders with no
4943
+ * width and only declares the floor it may be squeezed to.
4944
+ *
4945
+ * Every fixed width holds its own header — the uppercase label, the 4px gap and
4946
+ * the sort glyph, inside the dense cell's 16px of padding. A column narrower
4947
+ * than its own header is what let `SEV` and `PRI` paint over each other.
4948
+ */
4949
+ declare const TASK_COLUMN_WIDTHS: {
4950
+ readonly slug: 132;
4951
+ readonly id: 66;
4952
+ /** The narrowest the flexible title column may be squeezed before a column drops instead. */
4953
+ readonly titleMin: 160;
4954
+ readonly severity: 112;
4955
+ /** The severity column once it has collapsed to its dot. */
4956
+ readonly severityCompact: 56;
4957
+ readonly priority: 56;
4958
+ readonly estimate: 56;
4959
+ readonly tags: 150;
4960
+ readonly age: 74;
4961
+ };
4962
+ interface TaskRowProps {
4963
+ task: TaskListItem;
4964
+ /** Pre-formatted age label (e.g. "3d ago"). Passed in so rows stay pure and deterministic. */
4965
+ ageLabel: string;
4966
+ /** Collapse severity to its dot (word on hover); the table decides this from its width. */
4967
+ severityDotOnly?: boolean;
4968
+ /** Columns the table left out; the row skips their cells so header and body stay aligned. */
4969
+ hideColumns?: TaskColumnKey[];
4970
+ }
4971
+ /**
4972
+ * TaskRow — one task as a dense grid row: initiative, id, title, severity,
4973
+ * priority, estimate, tags and age.
4974
+ *
4975
+ * Composes {@link TableRow} / {@link TableCell} for row semantics and density,
4976
+ * {@link SeverityLabel} for the severity dot, and {@link Pill} for tags. Used by
4977
+ * {@link TaskTable}.
4978
+ */
4979
+ declare function TaskRow({ task, ageLabel, severityDotOnly, hideColumns }: TaskRowProps): react_jsx_runtime.JSX.Element;
4980
+
4981
+ /** How a linked reference reads: brand for the domain's own ids, link for cross-references, muted for asides. */
4982
+ type ProseLinkTone = 'brand' | 'link' | 'muted';
4983
+ /**
4984
+ * A pattern the prose auto-links. Patterns must not carry the `g` flag or
4985
+ * capture groups: the renderer combines them into one tokenizer.
4986
+ */
4987
+ interface ProseLinker {
4988
+ /** Stable id, used in keys and test ids. */
4989
+ id: string;
4990
+ pattern: RegExp;
4991
+ tone?: ProseLinkTone;
4992
+ /** Text to show for a match. Defaults to the match itself. */
4993
+ label?: (ref: string) => string;
4994
+ /** When set the reference is pressable and exposes a link role. */
4995
+ onPress?: (ref: string) => void;
4996
+ }
4997
+ type ProseBlockType = 'h1' | 'h2' | 'h3' | 'li' | 'p';
4998
+ interface ProseBlock {
4999
+ type: ProseBlockType;
5000
+ text: string;
5001
+ }
5002
+ interface MarkdownProseProps {
5003
+ /** Markdown source. Headings, bullet lists, paragraphs, bold and code are understood. */
5004
+ body: string;
5005
+ /** Reference patterns to auto-link, tried in order. */
5006
+ linkers?: ProseLinker[];
5007
+ className?: string;
5008
+ testID?: string;
5009
+ }
5010
+ /**
5011
+ * Splits markdown into the block kinds this renderer understands. Consecutive
5012
+ * text lines join into one paragraph; a blank line ends it. An indented line
5013
+ * straight after a bullet continues that bullet. Deeper headings flatten to
5014
+ * h3, since session prose never needs more than three levels.
5015
+ */
5016
+ declare function parseProseBlocks(body: string): ProseBlock[];
5017
+ /**
5018
+ * MarkdownProse — renders a small, predictable markdown subset as themed prose
5019
+ * and auto-links references the caller describes.
5020
+ *
5021
+ * It is deliberately not a full markdown engine: headings, bullet lists,
5022
+ * paragraphs, bold and code cover the notes, briefs and session logs this
5023
+ * system reads, and anything richer would need a design pass of its own.
5024
+ * Composes {@link Typography}. Used by `SessionDetail` (session logs) and the
5025
+ * initiative reader (brief and handoff prose).
5026
+ */
5027
+ declare function MarkdownProse({ body, linkers, className, testID }: MarkdownProseProps): react_jsx_runtime.JSX.Element;
5028
+
5029
+ /** A per-initiative task id such as `AW-22` or `TD-07.14`. */
5030
+ declare const TASK_REF_PATTERN: RegExp;
5031
+ /** An Obsidian-style `[[name]]` link into notes or memory. */
5032
+ declare const WIKI_LINK_PATTERN: RegExp;
5033
+ /** A bare `#123` pull-request or issue number. */
5034
+ declare const PR_REF_PATTERN: RegExp;
5035
+ /** Every distinct task id in a body, in first-seen order. */
5036
+ declare function extractTaskRefs(body: string): string[];
5037
+ /** Task ids read in the brand colour and, when a handler is given, open the task. */
5038
+ declare function taskRefLinker(onPress?: (id: string) => void): ProseLinker;
5039
+ /** `[[name]]` links drop their brackets and read as links; the handler receives the bare name. */
5040
+ declare function wikiLinkLinker(onPress?: (name: string) => void): ProseLinker;
5041
+ /** PR numbers recede rather than compete with task ids; the handler receives the number. */
5042
+ declare function prRefLinker(onPress?: (number: number) => void): ProseLinker;
5043
+ interface SessionLinkHandlers {
5044
+ onPressTask?: (id: string) => void;
5045
+ onPressLink?: (name: string) => void;
5046
+ onPressPr?: (number: number) => void;
5047
+ }
5048
+ /** The three linkers a session log needs, in the order they should win a match. */
5049
+ declare function sessionLinkers(handlers?: SessionLinkHandlers): ProseLinker[];
5050
+
5051
+ /** One recorded session, as the session reader consumes it. */
5052
+ interface SessionSummary {
5053
+ id: string;
5054
+ /** The session file's name, when the host has it. */
5055
+ filename?: string;
5056
+ /** ISO timestamps. */
5057
+ started: string;
5058
+ ended: string;
5059
+ /** `canonical` is the mainline thread; anything else (`sidecar`, `adhoc`) is folded or parallel work. */
5060
+ track: string;
5061
+ /** The log's first heading, without the leading `#`. */
5062
+ title: string;
5063
+ /** The session log's markdown body. */
5064
+ body: string;
5065
+ }
5066
+ interface SessionListItemProps {
5067
+ session: SessionSummary;
5068
+ /** Reference instant for the age label, injected so renders are deterministic. */
5069
+ now: number;
5070
+ /** Renders the selected treatment (raised fill + leading accent bar). */
5071
+ selected?: boolean;
5072
+ onSelect?: () => void;
5073
+ }
5074
+ /** The row's footer as one string: age, wall-clock length, distinct tasks touched, and the track. */
5075
+ declare function sessionRowMeta(session: SessionSummary, now: number, taskCount: number): string;
5076
+ /** The exact end time behind the relative age. */
5077
+ declare function ExactTime({ session }: {
5078
+ session: SessionSummary;
5079
+ }): react_jsx_runtime.JSX.Element;
5080
+ /** The task ids behind the count. */
5081
+ declare function TaskIds({ refs }: {
5082
+ refs: string[];
5083
+ }): react_jsx_runtime.JSX.Element;
5084
+ /**
5085
+ * SessionListItem — one session in the reader's list, led by its title, with
5086
+ * a footer of age · duration · tasks touched · track. Hovering the age shows
5087
+ * the exact end time; hovering the task count lists the task ids.
5088
+ *
5089
+ * Composes {@link Tooltip} (controlled, so the row keeps its press),
5090
+ * {@link DateTime} and {@link Typography}. Used by {@link SessionList}.
5091
+ */
5092
+ declare function SessionListItem({ session, now, selected, onSelect, }: SessionListItemProps): react_jsx_runtime.JSX.Element;
5093
+
5094
+ interface SessionListProps {
5095
+ /** Newest first is the expected order; the list renders what it is given. */
5096
+ sessions: SessionSummary[];
5097
+ /** Reference instant for the age labels, injected so renders are deterministic. */
5098
+ now: number;
5099
+ selectedId?: string;
5100
+ onSelect?: (session: SessionSummary) => void;
5101
+ /** Heading over the list. Defaults to the session count. */
5102
+ label?: string;
5103
+ className?: string;
5104
+ }
5105
+ interface Period {
5106
+ label: string;
5107
+ sessions: SessionSummary[];
5108
+ }
5109
+ /** The calendar month a session ended in, as the list's period label. */
5110
+ declare function sessionPeriod(iso: string): string;
5111
+ /** Consecutive sessions in the same month, in the order given. */
5112
+ declare function groupByPeriod(sessions: SessionSummary[]): Period[];
5113
+ /**
5114
+ * SessionList — the selectable list half of the session reader. Owns no
5115
+ * selection state: the host holds `selectedId` and pairs the list with a
5116
+ * `SessionDetail`, so the two can be laid out however the surface needs.
5117
+ * Sessions are grouped under a hairline divider per calendar month once the
5118
+ * list spans more than one.
5119
+ *
5120
+ * Composes {@link Eyebrow}, {@link Divider} and {@link SessionListItem}.
5121
+ */
5122
+ declare function SessionList({ sessions, now, selectedId, onSelect, label, className, }: SessionListProps): react_jsx_runtime.JSX.Element;
5123
+
5124
+ interface SessionDetailProps extends SessionLinkHandlers {
5125
+ session: SessionSummary;
5126
+ /** Reference instant for the age label, injected so renders are deterministic. */
5127
+ now: number;
5128
+ /**
5129
+ * Task rows for the ids the log mentions, resolved by the host from its task
5130
+ * store. When given, the tasks-touched strip can expand into a table.
5131
+ */
5132
+ tasks?: TaskListItem[];
5133
+ className?: string;
5134
+ }
5135
+ /** The body without its leading h1: the card header carries the title. */
5136
+ declare function stripLeadingHeading(body: string): string;
5137
+ /**
5138
+ * SessionDetail — one session log, readable: its title, when it ran and for
5139
+ * how long, the tasks it touched (as pills, or as a table when the host
5140
+ * supplies the rows), then the markdown body with task ids, `[[name]]` links
5141
+ * and PR numbers auto-linked.
5142
+ *
5143
+ * Holds no selection state; pair it with {@link SessionList} in the host.
5144
+ * Composes {@link Card}, {@link Divider}, {@link Pill}, {@link Collapse},
5145
+ * {@link DateTime}, {@link TaskTable} and {@link MarkdownProse}.
5146
+ */
5147
+ declare function SessionDetail({ session, now, tasks, onPressTask, onPressLink, onPressPr, className, }: SessionDetailProps): react_jsx_runtime.JSX.Element;
5148
+
5149
+ interface InitiativeHeaderProps {
5150
+ title: string;
5151
+ /** Short slug shown under the title, e.g. `active-work`. */
5152
+ slug: string;
5153
+ state: InitiativeState;
5154
+ /** Focused rank (1-based). Shown as `#N` for a ranked state. */
5155
+ rank?: number;
5156
+ /** Ship-target label, e.g. `2026-Q3`. */
5157
+ shipTarget?: string;
5158
+ /** ISO date the brief last changed. */
5159
+ updated?: string;
5160
+ className?: string;
5161
+ }
5162
+ /**
5163
+ * InitiativeHeader — an initiative's identity line: title, slug, state, rank,
5164
+ * ship target and when it was last touched.
5165
+ *
5166
+ * Shares the state vocabulary with {@link InitiativeCard} through
5167
+ * `INITIATIVE_STATE_META`. Composes {@link StatusDot}, {@link Pill},
5168
+ * {@link DateTime} and {@link Typography}. Used by the initiative reader.
5169
+ */
5170
+ declare function InitiativeHeader({ title, slug, state, rank, shipTarget, updated, className, }: InitiativeHeaderProps): react_jsx_runtime.JSX.Element;
5171
+
5172
+ /** An initiative's durable brief, as the reader consumes it. */
5173
+ interface InitiativeBriefData {
5174
+ slug: string;
5175
+ title: string;
5176
+ state: string;
5177
+ rank?: number | null;
5178
+ shipTarget?: string | null;
5179
+ updated: string;
5180
+ /** The brief's markdown body. */
5181
+ body: string;
5182
+ }
5183
+ /** A brief section: an `##` heading and the prose beneath it, up to the next `##`. */
5184
+ interface BriefSection {
5185
+ heading: string;
5186
+ body: string;
5187
+ }
5188
+ interface InitiativeBriefProps {
5189
+ brief: InitiativeBriefData;
5190
+ /** Reference patterns to auto-link in the prose. */
5191
+ linkers?: ProseLinker[];
5192
+ className?: string;
5193
+ }
5194
+ /**
5195
+ * Splits a brief into its `##` sections, dropping the leading `#` title (the
5196
+ * header already shows it). Anything before the first `##` becomes a leading
5197
+ * section with an empty heading, so a brief with no sections still renders.
5198
+ */
5199
+ declare function splitBriefSections(body: string): BriefSection[];
5200
+ /**
5201
+ * InitiativeBrief — an initiative's brief prose as a single-open accordion of
5202
+ * its `##` sections: click any heading to open it, or step through them with
5203
+ * the prev/next controls in the header, which close the current section and
5204
+ * open the next. Prose before the first `##` always shows. References
5205
+ * auto-link from `linkers`.
5206
+ *
5207
+ * Composes {@link Eyebrow}, {@link MarkdownProse} and {@link Typography}. Used
5208
+ * by the initiative reader.
5209
+ */
5210
+ declare function InitiativeBrief({ brief, linkers, className }: InitiativeBriefProps): react_jsx_runtime.JSX.Element;
5211
+
5212
+ /** What a loop is about, so the reader can colour and label its kind. */
5213
+ type OpenLoopKind = 'task' | 'pr' | 'prose';
5214
+ /** One hanging thread from the session ledger, as the reader consumes it. */
5215
+ interface OpenLoop {
5216
+ /** Stable `<session-file-stem>#<id>` reference. */
5217
+ ref: string;
5218
+ kind: OpenLoopKind;
5219
+ /** The loop text, auto-linked like any prose. */
5220
+ text: string;
5221
+ /** The task this loop tracks, when kind is `task`. */
5222
+ targetRef?: string;
5223
+ /** ISO time the loop was opened; drives the age label. */
5224
+ openedAt?: string;
5225
+ /** The session file that opened it. */
5226
+ sessionFile?: string;
5227
+ }
5228
+ interface OpenLoopsProps {
5229
+ loops: OpenLoop[];
5230
+ /** Reference instant for the age labels, injected so renders are deterministic. */
5231
+ now: number;
5232
+ /** Reference patterns to auto-link in each loop's text. */
5233
+ linkers?: ProseLinker[];
5234
+ /** Heading over the list. Defaults to the loop count. */
5235
+ label?: string;
5236
+ /** Rendered when there are no open loops. */
5237
+ emptyLabel?: string;
5238
+ className?: string;
5239
+ }
5240
+ /**
5241
+ * OpenLoops — the initiative's hanging threads from the session ledger: each
5242
+ * loop's kind, age and auto-linked text. This is the durable "current state"
5243
+ * a session picks up, in place of a hand-maintained handoff document.
5244
+ *
5245
+ * Composes {@link Eyebrow}, {@link Pill}, {@link Divider} and
5246
+ * {@link MarkdownProse}. Used by the initiative reader.
5247
+ */
5248
+ declare function OpenLoops({ loops, now, linkers, label, emptyLabel, className, }: OpenLoopsProps): react_jsx_runtime.JSX.Element;
5249
+
5250
+ /** The apps that are expected to mount this shell. */
5251
+ type BrandKey = 'voltras' | 'audiobook' | 'active-work' | 'agents' | 'brain';
5252
+ interface BrandPreset {
5253
+ /** The mark glyph, rendered at 14px through the accent token via `currentColor`. */
5254
+ mark: ReactNode;
5255
+ /** Uppercase product wordmark. */
5256
+ wordmark: string;
5257
+ /** Semantic text token that colours the mark. */
5258
+ accentClassName: string;
5259
+ /**
5260
+ * The same accent as a background token, for the nav's active bar. Declared as
5261
+ * a literal alongside its `text-*` twin because Tailwind only emits classes it
5262
+ * can see in the source — a name built at runtime is never generated.
5263
+ */
5264
+ accentBarClassName: string;
5265
+ /** Default "/ subtitle" for that app's shell. */
5266
+ subtitle: string;
5267
+ }
5268
+ declare const brandPresets: Record<BrandKey, BrandPreset>;
5269
+ /** Every brand key, in the order the stories present them. */
5270
+ declare const brandKeys: BrandKey[];
5271
+
4193
5272
  interface BrandLockupProps extends ViewProps {
4194
- /** The "/ subtitle" that follows the wordmark. Default "wall dashboard". */
5273
+ /** Which app's identity to render. Defaults to `voltras`. */
5274
+ brand?: BrandKey;
5275
+ /** Replace the preset's mark glyph. */
5276
+ mark?: ReactNode;
5277
+ /** Replace the preset's wordmark. */
5278
+ wordmark?: string;
5279
+ /** Replace the preset's accent — a semantic `text-*` token class for the mark. */
5280
+ accentClassName?: string;
5281
+ /** The "/ subtitle" that follows the wordmark. Defaults to the brand's own. */
4195
5282
  subtitle?: string;
4196
5283
  /** Show the subtitle. Hidden at tablet width and below (S1-Q4 responsive). */
4197
5284
  showSubtitle?: boolean;
4198
5285
  className?: string;
4199
5286
  }
4200
5287
  /**
4201
- * Product identity lockup for the top bar: mark + VOLTRAS wordmark + optional
4202
- * subtitle. Composes the VoltrasMark icon + Typography. S1 · BrandLockup.
5288
+ * Product identity lockup for the top bar: mark + wordmark + optional subtitle.
5289
+ * Generic over the app: pick a `brand` preset, or override `mark` / `wordmark` /
5290
+ * `accentClassName` / `subtitle` piecemeal for an app that has no preset yet.
5291
+ * Composes an icon primitive + Typography. S1 · BrandLockup.
5292
+ */
5293
+ declare function BrandLockup({ brand, mark, wordmark, accentClassName, subtitle, showSubtitle, className, ...props }: BrandLockupProps): react_jsx_runtime.JSX.Element;
5294
+
5295
+ interface TopBarProps {
5296
+ /** Which app identity the default {@link BrandLockup} renders. */
5297
+ brand?: BrandKey;
5298
+ /** Brand subtitle. Defaults to the brand preset's own. */
5299
+ subtitle?: string;
5300
+ /** Force the subtitle on/off; defaults to container-responsive (hidden below ~1024px). */
5301
+ showSubtitle?: boolean;
5302
+ /**
5303
+ * Replace the whole brand region. Wins over `brand` / `subtitle`, and opts out
5304
+ * of the responsive subtitle collapse — the node owns its own behaviour.
5305
+ */
5306
+ leading?: ReactNode;
5307
+ /**
5308
+ * App chrome for the right cluster, left → right. An array is rendered with the
5309
+ * bar's own vertical dividers between the items, so an app supplies its
5310
+ * controls and the shell keeps the divider rhythm.
5311
+ */
5312
+ trailing?: ReactNode | ReactNode[];
5313
+ /** The moment to display in the clock (Date/timestamp). Omit for a live ticking clock. */
5314
+ time?: number | Date;
5315
+ /** Force the clock on/off; defaults to container-responsive (hidden below ~720px). */
5316
+ showClock?: boolean;
5317
+ className?: string;
5318
+ }
5319
+ /**
5320
+ * S1 · TopBar — the persistent shell chrome band, generic over the app. Brand
5321
+ * (left) + a `trailing` cluster of app-supplied chrome and the wall clock (clock
5322
+ * edge-pinned so spacing stays stable as the items' text changes). Collapses
5323
+ * subtitle then clock as its container narrows.
5324
+ *
5325
+ * @example
5326
+ * <TopBar brand="brain" trailing={[<IndexStatus />, <SearchScope />]} />
5327
+ */
5328
+ declare function TopBar({ brand, subtitle, showSubtitle, leading, trailing, time, showClock, className, }: TopBarProps): react_jsx_runtime.JSX.Element;
5329
+
5330
+ interface NavItemProps {
5331
+ /** The nav glyph (an icon from `components/icons`, rendered ~20px via `currentColor`). */
5332
+ icon: ReactNode;
5333
+ /** Short label shown under the glyph (uppercased for display; used as the accessible name). */
5334
+ label: string;
5335
+ /** Active category → left accent bar + accent-colored glyph & label. */
5336
+ active?: boolean;
5337
+ /**
5338
+ * A set is running for this category while it is NOT the active view
5339
+ * (live-elsewhere) → a quiet muted-green label tint. Ignored when `active`.
5340
+ */
5341
+ live?: boolean;
5342
+ /** Semantic `text-*` token for the active glyph and label. Defaults to the Voltras brand. */
5343
+ accentClassName?: string;
5344
+ /** Semantic `bg-*` token for the active bar. Pair it with `accentClassName`. */
5345
+ accentBarClassName?: string;
5346
+ onPress?: () => void;
5347
+ className?: string;
5348
+ }
5349
+ /**
5350
+ * Shell S2 · NavItem — one category button in the {@link SideNav}: a 20px glyph
5351
+ * over an uppercase micro-label in a 46×46 target. The button spans the full 60px
5352
+ * rail so the active **left accent bar** sits flush to the rail's edge. States:
5353
+ * active = accent bar + the accent token; `live` (while not active) tints only the
5354
+ * label `status-success-dark` (the glyph stays dim); otherwise dim `text-tertiary`.
5355
+ *
5356
+ * The accent follows the mounting app's brand, so a Brain shell reads yellow
5357
+ * throughout rather than showing a Voltras-orange active item under its own lockup.
5358
+ */
5359
+ declare function NavItem({ icon, label, active, live, accentClassName, accentBarClassName, onPress, className, }: NavItemProps): react_jsx_runtime.JSX.Element;
5360
+
5361
+ interface SideNavItem {
5362
+ /** Stable category key — matches `activeKey` / `liveKey`. */
5363
+ key: string;
5364
+ /** Micro-label shown under the glyph. */
5365
+ label: string;
5366
+ /** The glyph node (rendered ~20px via `currentColor`). */
5367
+ icon: ReactNode;
5368
+ }
5369
+ interface SideNavProps {
5370
+ /** Category items, top → bottom. The app owns its own categories. */
5371
+ items: SideNavItem[];
5372
+ /** Key of the active category. */
5373
+ activeKey: string;
5374
+ /** Called with the tapped item's key. */
5375
+ onNavigate?: (key: string) => void;
5376
+ /**
5377
+ * Key of a category with live activity while it is NOT active (e.g. a set
5378
+ * running off its view) → a quiet green cue on that item's label.
5379
+ */
5380
+ liveKey?: string | null;
5381
+ /** Semantic `text-*` token for the active item. Defaults to the Voltras brand. */
5382
+ accentClassName?: string;
5383
+ /** Semantic `bg-*` token for the active bar. Pair it with `accentClassName`. */
5384
+ accentBarClassName?: string;
5385
+ className?: string;
5386
+ }
5387
+ /**
5388
+ * Shell S2 · SideNav — the persistent 60px left rail that switches the main
5389
+ * viewport between an app's categories. Presentational: it renders `items` and
5390
+ * reports taps via `onNavigate`; the app owns its categories, routing, and which
5391
+ * key is `live`. Active item shows a left accent bar in the app's brand accent;
5392
+ * `liveKey` (when not the active view) tints that item's label a muted green.
5393
+ * Fixed 60px at every width — labels sit under the glyph, so they never change
5394
+ * the rail width.
5395
+ */
5396
+ declare function SideNav({ items, activeKey, onNavigate, liveKey, accentClassName, accentBarClassName, className, }: SideNavProps): react_jsx_runtime.JSX.Element;
5397
+
5398
+ interface AppShellProps {
5399
+ /** Which app identity the default {@link TopBar} and nav accent render. */
5400
+ brand?: BrandKey;
5401
+ /** Brand subtitle on the default top bar. */
5402
+ subtitle?: string;
5403
+ /** App chrome for the default top bar's right cluster (divider-separated). */
5404
+ topBarTrailing?: ReactNode | ReactNode[];
5405
+ /** Replace the whole top bar. Wins over `brand` / `subtitle` / `topBarTrailing`. */
5406
+ topBar?: ReactNode;
5407
+ /** Nav categories, top → bottom. */
5408
+ navItems?: SideNavItem[];
5409
+ /** Active nav category key. */
5410
+ activeKey?: string;
5411
+ /** A category with off-view live activity → a quiet cue on that item. */
5412
+ liveKey?: string | null;
5413
+ onNavigate?: (key: string) => void;
5414
+ /** Replace the whole left rail. Wins over `navItems` / `activeKey` / `liveKey`. */
5415
+ nav?: ReactNode;
5416
+ /** Main content region. A placeholder renders when omitted. */
5417
+ children?: ReactNode;
5418
+ className?: string;
5419
+ }
5420
+ /**
5421
+ * `AppShell` — the generic dashboard chrome: a {@link TopBar} band over a
5422
+ * {@link SideNav} rail and a `children` content region. It knows nothing about
5423
+ * any one app: chrome arrives through the `topBarTrailing` slot (or the whole
5424
+ * `topBar` / `nav` slots), and categories through `navItems`. An app builds its
5425
+ * own shell by composing this one — see `shell/workout/WorkoutShell`.
5426
+ *
5427
+ * @example
5428
+ * <AppShell brand="brain" navItems={brainNavItems} activeKey={key} onNavigate={go}>
5429
+ * <BrainPage />
5430
+ * </AppShell>
4203
5431
  */
4204
- declare function BrandLockup({ subtitle, showSubtitle, className, ...props }: BrandLockupProps): react_jsx_runtime.JSX.Element;
5432
+ declare function AppShell({ brand, subtitle, topBarTrailing, topBar, navItems, activeKey, liveKey, onNavigate, nav, children, className, }: AppShellProps): react_jsx_runtime.JSX.Element;
4205
5433
 
4206
5434
  type SessionState = 'live' | 'rest' | 'idle';
4207
5435
  interface SessionStatePillProps extends ViewProps {
@@ -4215,6 +5443,8 @@ interface SessionStatePillProps extends ViewProps {
4215
5443
  * The global session-state readout (dot + label). Shared: the top bar's status
4216
5444
  * and the Live-view header both use it (this is the ledger's "StatusPill",
4217
5445
  * Family C — built once). S1 · SessionStatePill.
5446
+ *
5447
+ * @deprecated Use `<Pill tone="…" leading="dot">` — removed after AW-127 consumer migration.
4218
5448
  */
4219
5449
  declare function SessionStatePill({ state, label, className, ...props }: SessionStatePillProps): react_jsx_runtime.JSX.Element;
4220
5450
 
@@ -4272,7 +5502,15 @@ interface DeviceMenuProps {
4272
5502
  */
4273
5503
  declare function DeviceMenu({ devices, isOpen, onOpenChange, onSelectDevice, className, }: DeviceMenuProps): react_jsx_runtime.JSX.Element;
4274
5504
 
4275
- interface TopBarProps {
5505
+ /** The four workout-dashboard categories with their locked S2 glyphs (activity · history · layers · figure). */
5506
+ declare const workoutNavItems: SideNavItem[];
5507
+ /**
5508
+ * @deprecated Use `workoutNavItems` — these are the workout app's categories,
5509
+ * not a generic shell default. `SideNav.items` is required now (AW-132).
5510
+ */
5511
+ declare const defaultNavItems: SideNavItem[];
5512
+
5513
+ interface WorkoutTopBarProps {
4276
5514
  /** Global session state → the status pill. */
4277
5515
  state: SessionState;
4278
5516
  /** Devices for the connection glyph + dropdown. */
@@ -4281,89 +5519,31 @@ interface TopBarProps {
4281
5519
  time?: number | Date;
4282
5520
  /** Brand subtitle. Default "wall dashboard". */
4283
5521
  subtitle?: string;
4284
- /** Force the subtitle on/off; defaults to container-responsive (hidden below ~1024px). */
5522
+ /** Force the subtitle on/off; defaults to container-responsive. */
4285
5523
  showSubtitle?: boolean;
4286
- /** Force the clock on/off; defaults to container-responsive (hidden below ~720px). */
5524
+ /** Force the clock on/off; defaults to container-responsive. */
4287
5525
  showClock?: boolean;
4288
5526
  onSelectDevice?: (device: Device) => void;
4289
5527
  className?: string;
4290
5528
  }
4291
5529
  /**
4292
- * S1 · TopBar — the persistent shell chrome band. Brand (left) + a right cluster
4293
- * of session state · device glyph · clock (clock edge-pinned so spacing stays
4294
- * stable as the state text changes). Collapses subtitle then clock as its
4295
- * container narrows.
5530
+ * The workout app's top bar — the generic {@link TopBar} with the workout's own
5531
+ * chrome in its `trailing` slot: session state, then the device menu. The bar
5532
+ * adds its dividers and the clock; this component only supplies the items.
4296
5533
  */
4297
- declare function TopBar({ state, devices, time, subtitle, showSubtitle, showClock, onSelectDevice, className, }: TopBarProps): react_jsx_runtime.JSX.Element;
5534
+ declare function WorkoutTopBar({ state, devices, time, subtitle, showSubtitle, showClock, onSelectDevice, className, }: WorkoutTopBarProps): react_jsx_runtime.JSX.Element;
4298
5535
 
4299
- interface NavItemProps {
4300
- /** The nav glyph (an icon from `components/icons`, rendered ~20px via `currentColor`). */
4301
- icon: ReactNode;
4302
- /** Short label shown under the glyph (uppercased for display; used as the accessible name). */
4303
- label: string;
4304
- /** Active category → left accent bar + brand-colored glyph & label. */
4305
- active?: boolean;
4306
- /**
4307
- * A set is running for this category while it is NOT the active view
4308
- * (live-elsewhere) → a quiet muted-green label tint. Ignored when `active`.
4309
- */
4310
- live?: boolean;
4311
- onPress?: () => void;
4312
- className?: string;
4313
- }
4314
5536
  /**
4315
- * Shell S2 · NavItem one category button in the {@link SideNav}: a 20px glyph
4316
- * over an uppercase micro-label in a 46×46 target. The button spans the full 60px
4317
- * rail so the active **left accent bar** sits flush to the rail's edge. States:
4318
- * active = accent bar + `brand-primary`; `live` (while not active) tints only the
4319
- * label `status-success-dark` (the glyph stays dim); otherwise dim `text-tertiary`.
5537
+ * `WorkoutShell` the workout wall-dashboard chrome. Composes the generic
5538
+ * {@link AppShell} and fills its top-bar slot with the workout's own
5539
+ * {@link WorkoutTopBar} (session state + device menu) and its nav slot with the
5540
+ * four workout categories. The generic shell knows none of this; this component
5541
+ * is the whole workout-specific surface. Driven entirely by props.
4320
5542
  */
4321
- declare function NavItem({ icon, label, active, live, onPress, className, }: NavItemProps): react_jsx_runtime.JSX.Element;
4322
-
4323
- interface SideNavItem {
4324
- /** Stable category key — matches `activeKey` / `liveKey`. */
4325
- key: string;
4326
- /** Micro-label shown under the glyph. */
4327
- label: string;
4328
- /** The glyph node (rendered ~20px via `currentColor`). */
4329
- icon: ReactNode;
4330
- }
4331
- interface SideNavProps {
4332
- /** Category items, top → bottom. Defaults to the four dashboard categories. */
4333
- items?: SideNavItem[];
4334
- /** Key of the active category. */
4335
- activeKey: string;
4336
- /** Called with the tapped item's key. */
4337
- onNavigate?: (key: string) => void;
4338
- /**
4339
- * Key of a category with live activity while it is NOT active (e.g. a set
4340
- * running off its view) → a quiet green cue on that item's label.
4341
- */
4342
- liveKey?: string | null;
4343
- className?: string;
4344
- }
4345
- /** The four dashboard categories with their locked S2 glyphs (activity · history · layers · figure). */
4346
- declare const defaultNavItems: SideNavItem[];
4347
- /**
4348
- * Shell S2 · SideNav — the persistent 60px left rail that switches the main
4349
- * viewport between categories (Live · Review · Program · Body). Presentational:
4350
- * it renders `items` and reports taps via `onNavigate`; the app owns routing and
4351
- * which key is `live`. Active item shows a left accent bar; `liveKey` (when not
4352
- * the active view) tints that item's label a muted green. Fixed 60px at every
4353
- * width — labels sit under the glyph, so they never change the rail width.
4354
- */
4355
- declare function SideNav({ items, activeKey, onNavigate, liveKey, className, }: SideNavProps): react_jsx_runtime.JSX.Element;
4356
-
4357
- /**
4358
- * `DashboardShell` — the wall-dashboard chrome: a persistent {@link SideNav} rail +
4359
- * {@link TopBar} over a main content region. A thin frame that wires the shell-nav
4360
- * organisms together and exposes a `children` content slot, so the dashboard app
4361
- * mounts one component instead of re-assembling the chrome. Driven entirely by props.
4362
- */
4363
- interface DashboardShellProps {
5543
+ interface WorkoutShellProps {
4364
5544
  /** Active nav category key. */
4365
5545
  activeKey?: string;
4366
- /** Nav categories, top → bottom. Defaults to SideNav's four dashboard categories. */
5546
+ /** Nav categories, top → bottom. Defaults to the four workout categories. */
4367
5547
  navItems?: SideNavItem[];
4368
5548
  /** A category with off-view live activity → a quiet cue on that item. */
4369
5549
  liveKey?: string | null;
@@ -4379,7 +5559,11 @@ interface DashboardShellProps {
4379
5559
  children?: ReactNode;
4380
5560
  className?: string;
4381
5561
  }
4382
- declare function DashboardShell({ activeKey, navItems, liveKey, state, devices, subtitle, onNavigate, onSelectDevice, children, className, }: DashboardShellProps): react_jsx_runtime.JSX.Element;
5562
+ declare function WorkoutShell({ activeKey, navItems, liveKey, state, devices, subtitle, onNavigate, onSelectDevice, children, className, }: WorkoutShellProps): react_jsx_runtime.JSX.Element;
5563
+ /** @deprecated Renamed to `WorkoutShell` — same props (AW-132). Removed after consumer migration. */
5564
+ declare const DashboardShell: typeof WorkoutShell;
5565
+ /** @deprecated Renamed to `WorkoutShellProps` (AW-132). */
5566
+ type DashboardShellProps = WorkoutShellProps;
4383
5567
 
4384
5568
  /**
4385
5569
  * Utility function to merge Tailwind CSS classes with proper conflict resolution.
@@ -4392,10 +5576,20 @@ declare function DashboardShell({ activeKey, navItems, liveKey, state, devices,
4392
5576
  declare function cn(...inputs: ClassValue[]): string;
4393
5577
 
4394
5578
  /**
4395
- * Color utility functions for the design system
5579
+ * Compact integer formatting for dense readouts (stat tiles, sparkline
5580
+ * captions) where a full-precision number would blow the column width.
5581
+ */
5582
+ /** 1234 → "1.2k", 1048576 → "1.0M", 42 → "42". Sign is preserved. */
5583
+ declare function formatCompact(n: number): string;
5584
+ /** Like {@link formatCompact} but always signed: 514689 → "+514.7k", -20 → "-20". */
5585
+ declare function formatSignedCompact(n: number): string;
5586
+
5587
+ /**
5588
+ * Color utility functions for the design system.
4396
5589
  *
4397
- * lighten/darken are re-exported from shadows.ts which uses HSV-based
4398
- * color math for more perceptually consistent results across hues.
5590
+ * `lighten`/`darken` are re-exported from `theme/color-utils`, which does the
5591
+ * HSV math. They are hover/state adjustments, not a depth ladder — planes come
5592
+ * from the grey ramp.
4399
5593
  */
4400
5594
 
4401
5595
  type StatusType = 'success' | 'error' | 'warning' | 'info';
@@ -4589,4 +5783,4 @@ interface PrescriptionInput {
4589
5783
  */
4590
5784
  declare function formatPrescription(p: PrescriptionInput | null | undefined): string | null;
4591
5785
 
4592
- 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 };
5786
+ 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 ExerciseHeadingLayout, type ExerciseHeadingProps, ExerciseIndicatorKind, type ExerciseRowDensity, type ExerciseRowState, 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, exerciseHeadingLabel, exerciseLiveColor, exerciseRowStateColor, 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 };