@titan-design/react-ui 0.12.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -47
- package/dist/bodymap.js +768 -701
- package/dist/bodymap.js.map +1 -1
- package/dist/bodymap.mjs +770 -703
- package/dist/bodymap.mjs.map +1 -1
- package/dist/index.d.mts +1319 -216
- package/dist/index.d.ts +1319 -216
- package/dist/index.js +5996 -4498
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5773 -4357
- package/dist/index.mjs.map +1 -1
- package/dist/{pages-CvsFqNtx.d.mts → pages-CpW3OB3g.d.mts} +21 -3
- package/dist/{pages-B1hqnGIC.d.ts → pages-_3Ajpiqu.d.ts} +21 -3
- package/dist/pages.d.mts +1 -1
- package/dist/pages.d.ts +1 -1
- package/dist/pages.js +1435 -1428
- package/dist/pages.js.map +1 -1
- package/dist/pages.mjs +1443 -1436
- package/dist/pages.mjs.map +1 -1
- package/dist/theme/index.d.mts +195 -134
- package/dist/theme/index.d.ts +195 -134
- package/dist/theme/index.js +215 -300
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/index.mjs +202 -296
- package/dist/theme/index.mjs.map +1 -1
- package/dist/theme/tokens-css.js +62 -5
- package/dist/theme/tokens-css.js.map +1 -1
- package/dist/theme/tokens-css.mjs +62 -5
- package/dist/theme/tokens-css.mjs.map +1 -1
- package/dist/theme/tokens.d.mts +73 -5
- package/dist/theme/tokens.d.ts +73 -5
- package/dist/theme/tokens.js +55 -7
- package/dist/theme/tokens.js.map +1 -1
- package/dist/theme/tokens.mjs +55 -8
- package/dist/theme/tokens.mjs.map +1 -1
- package/docs/audits/2026-09-08-critique-addenda.md +51 -0
- package/docs/audits/2026-09-08-library-critique.md +212 -0
- package/docs/library-roadmap.md +99 -0
- package/package.json +1 -1
- package/src/arch/arch-graph.freshness.test.ts +52 -0
- package/src/arch/arch-graph.json +5021 -1617
- package/src/components/custom/ActiveWork/CoChangeChip.stories.tsx +44 -0
- package/src/components/custom/ActiveWork/CoChangeChip.test.tsx +29 -0
- package/src/components/custom/ActiveWork/CoChangeChip.tsx +48 -0
- package/src/components/custom/ActiveWork/Eyebrow.stories.tsx +25 -0
- package/src/components/custom/ActiveWork/Eyebrow.test.tsx +16 -0
- package/src/components/custom/ActiveWork/Eyebrow.tsx +26 -0
- package/src/components/custom/ActiveWork/FileActivityDetail.stories.tsx +50 -0
- package/src/components/custom/ActiveWork/FileActivityDetail.test.tsx +66 -0
- package/src/components/custom/ActiveWork/FileActivityDetail.tsx +202 -0
- package/src/components/custom/ActiveWork/FileActivityRow.stories.tsx +70 -0
- package/src/components/custom/ActiveWork/FileActivityRow.test.tsx +67 -0
- package/src/components/custom/ActiveWork/FileActivityRow.tsx +130 -0
- package/src/components/custom/ActiveWork/FileHistoryExplorer.stories.tsx +84 -0
- package/src/components/custom/ActiveWork/FileHistoryExplorer.test.tsx +99 -0
- package/src/components/custom/ActiveWork/FileHistoryExplorer.tsx +138 -0
- package/src/components/custom/ActiveWork/FilePathLabel.stories.tsx +39 -0
- package/src/components/custom/ActiveWork/FilePathLabel.test.tsx +53 -0
- package/src/components/custom/ActiveWork/FilePathLabel.tsx +63 -0
- package/src/components/custom/ActiveWork/InitiativeBrief.stories.tsx +50 -0
- package/src/components/custom/ActiveWork/InitiativeBrief.test.tsx +62 -0
- package/src/components/custom/ActiveWork/InitiativeBrief.tsx +181 -0
- package/src/components/custom/ActiveWork/InitiativeCard.stories.tsx +73 -0
- package/src/components/custom/ActiveWork/InitiativeCard.test.tsx +68 -0
- package/src/components/custom/ActiveWork/InitiativeCard.tsx +136 -0
- package/src/components/custom/ActiveWork/InitiativeHeader.stories.tsx +59 -0
- package/src/components/custom/ActiveWork/InitiativeHeader.test.tsx +40 -0
- package/src/components/custom/ActiveWork/InitiativeHeader.tsx +73 -0
- package/src/components/custom/ActiveWork/InitiativeReader.stories.tsx +145 -0
- package/src/components/custom/ActiveWork/OpenLoops.stories.tsx +58 -0
- package/src/components/custom/ActiveWork/OpenLoops.test.tsx +61 -0
- package/src/components/custom/ActiveWork/OpenLoops.tsx +107 -0
- package/src/components/custom/ActiveWork/PortfolioOverview.stories.tsx +101 -0
- package/src/components/custom/ActiveWork/PortfolioOverview.test.tsx +81 -0
- package/src/components/custom/ActiveWork/PortfolioOverview.tsx +83 -0
- package/src/components/custom/ActiveWork/README.md +305 -0
- package/src/components/custom/ActiveWork/SessionDetail.stories.tsx +71 -0
- package/src/components/custom/ActiveWork/SessionDetail.test.tsx +84 -0
- package/src/components/custom/ActiveWork/SessionDetail.tsx +180 -0
- package/src/components/custom/ActiveWork/SessionList.stories.tsx +69 -0
- package/src/components/custom/ActiveWork/SessionList.test.tsx +78 -0
- package/src/components/custom/ActiveWork/SessionList.tsx +103 -0
- package/src/components/custom/ActiveWork/SessionListItem.stories.tsx +64 -0
- package/src/components/custom/ActiveWork/SessionListItem.test.tsx +62 -0
- package/src/components/custom/ActiveWork/SessionListItem.tsx +152 -0
- package/src/components/custom/ActiveWork/SessionReader.stories.tsx +113 -0
- package/src/components/custom/ActiveWork/SeverityLabel.stories.tsx +51 -0
- package/src/components/custom/ActiveWork/SeverityLabel.test.tsx +68 -0
- package/src/components/custom/ActiveWork/SeverityLabel.tsx +97 -0
- package/src/components/custom/ActiveWork/TaskRow.stories.tsx +63 -0
- package/src/components/custom/ActiveWork/TaskRow.test.tsx +112 -0
- package/src/components/custom/ActiveWork/TaskRow.tsx +176 -0
- package/src/components/custom/ActiveWork/TaskTable.stories.tsx +123 -0
- package/src/components/custom/ActiveWork/TaskTable.test.tsx +233 -0
- package/src/components/custom/ActiveWork/TaskTable.tsx +321 -0
- package/src/components/custom/ActiveWork/active-work-depth.test.tsx +102 -0
- package/src/components/custom/ActiveWork/file-history-fixture.ts +91 -0
- package/src/components/custom/ActiveWork/format-time.test.ts +23 -0
- package/src/components/custom/ActiveWork/format-time.ts +32 -0
- package/src/components/custom/ActiveWork/index.ts +19 -0
- package/src/components/custom/ActiveWork/initiative-fixture.ts +104 -0
- package/src/components/custom/ActiveWork/session-fixture.ts +267 -0
- package/src/components/custom/ActiveWork/session-linkers.ts +56 -0
- package/src/components/custom/ActiveWork/task-list-fixture.ts +97 -0
- package/src/components/custom/CircularTimer/CircularTimer.stories.tsx +4 -3
- package/src/components/custom/DateTime/DateTime.stories.tsx +2 -1
- package/src/components/custom/DateTime/DateTime.test.tsx +3 -1
- package/src/components/custom/EmptyState/EmptyState.stories.tsx +22 -9
- package/src/components/custom/EmptyState/EmptyState.test.tsx +7 -13
- package/src/components/custom/EmptyState/EmptyState.tsx +4 -18
- package/src/components/custom/Fatigue/DualGhostSpark.stories.tsx +4 -3
- package/src/components/custom/Fatigue/FatigueLights.stories.tsx +2 -2
- package/src/components/custom/Fatigue/GhostSpark.stories.tsx +4 -3
- package/src/components/custom/Fatigue/LiveFatigueCard.stories.tsx +2 -2
- package/src/components/custom/Fatigue/LiveFatigueCard.tsx +8 -4
- package/src/components/custom/Fatigue/LiveFatiguePanel.stories.tsx +116 -6
- package/src/components/custom/Fatigue/LiveFatiguePanel.test.tsx +134 -0
- package/src/components/custom/Fatigue/LiveFatiguePanel.tsx +54 -83
- package/src/components/custom/Fatigue/README.md +40 -3
- package/src/components/custom/Fatigue/RomProgressionChart.stories.tsx +2 -2
- package/src/components/custom/Fatigue/SilverRedPalette.stories.tsx +2 -1
- package/src/components/custom/Fatigue/VelocityHero.stories.tsx +4 -3
- package/src/components/custom/Fatigue/VerdictHero.stories.tsx +2 -2
- package/src/components/custom/Fatigue/fatigue-mock.test.ts +0 -5
- package/src/components/custom/Fatigue/fatigue-mock.ts +2 -10
- package/src/components/custom/Fatigue/fatigue-tokens.ts +12 -0
- package/src/components/custom/Fatigue/index.ts +17 -5
- package/src/components/custom/Fatigue/panel-layout.test.ts +149 -0
- package/src/components/custom/Fatigue/panel-layout.ts +185 -0
- package/src/components/custom/Gauge/Gauge.stories.tsx +2 -2
- package/src/components/custom/Gauge/Gauge.test.tsx +1 -1
- package/src/components/custom/Gauge/Gauge.tsx +4 -1
- package/src/components/custom/Metric/Metric.stories.tsx +10 -1
- package/src/components/custom/Metric/Metric.test.tsx +1 -3
- package/src/components/custom/Metric/Metric.tsx +5 -20
- package/src/components/custom/Prose/MarkdownProse.stories.tsx +88 -0
- package/src/components/custom/Prose/MarkdownProse.test.tsx +87 -0
- package/src/components/custom/Prose/MarkdownProse.tsx +201 -0
- package/src/components/custom/Prose/README.md +58 -0
- package/src/components/custom/Prose/index.ts +1 -0
- package/src/components/custom/Scatter/Scatter.stories.tsx +46 -8
- package/src/components/custom/Scatter/Scatter.test.tsx +2 -2
- package/src/components/custom/Scatter/Scatter.tsx +116 -14
- package/src/components/custom/Sidebar/Sidebar.stories.tsx +40 -7
- package/src/components/custom/Sidebar/Sidebar.test.tsx +5 -1
- package/src/components/custom/Sidebar/Sidebar.tsx +16 -33
- package/src/components/custom/Table/Table.stories.tsx +98 -15
- package/src/components/custom/Table/Table.test.tsx +273 -86
- package/src/components/custom/Table/Table.tsx +159 -67
- package/src/components/custom/Table/column-fit.test.ts +75 -0
- package/src/components/custom/Table/column-fit.ts +116 -0
- package/src/components/custom/Table/index.ts +9 -0
- package/src/components/custom/TimerReadout/TimerReadout.stories.tsx +8 -6
- package/src/components/custom/Treemap/Treemap.stories.tsx +2 -2
- package/src/components/custom/Treemap/Treemap.test.tsx +1 -1
- package/src/components/custom/Treemap/Treemap.tsx +7 -2
- package/src/components/custom/Typography/Typography.stories.tsx +28 -1
- package/src/components/custom/Typography/Typography.test.tsx +34 -0
- package/src/components/custom/Typography/Typography.tsx +6 -0
- package/src/components/custom/Typography/index.ts +1 -8
- package/src/components/custom/Workout/ActiveWorkoutPage.stories.tsx +9 -1
- package/src/components/custom/Workout/BaseBadge.stories.tsx +19 -7
- package/src/components/custom/Workout/BaseBadge.test.tsx +31 -11
- package/src/components/custom/Workout/BaseBadge.tsx +3 -0
- package/src/components/custom/Workout/BodyMap.stories.tsx +4 -1
- package/src/components/custom/Workout/BodyMap.tsx +3 -1
- package/src/components/custom/Workout/BodyMapDetailPanel.stories.tsx +16 -4
- package/src/components/custom/Workout/BodyMapDetailPanel.test.tsx +11 -15
- package/src/components/custom/Workout/BodyMapDetailPanel.tsx +45 -9
- package/src/components/custom/Workout/CapacityBandChart.stories.tsx +10 -8
- package/src/components/custom/Workout/CapacityBandChart.test.tsx +24 -51
- package/src/components/custom/Workout/CapacityBandChart.tsx +139 -108
- package/src/components/custom/Workout/DeviationBar.stories.tsx +1 -1
- package/src/components/custom/Workout/DeviationBar.test.tsx +5 -2
- package/src/components/custom/Workout/DeviationBar.tsx +21 -16
- package/src/components/custom/Workout/DualVelocityStrip.stories.tsx +182 -0
- package/src/components/custom/Workout/DualVelocityStrip.test.tsx +3 -2
- package/src/components/custom/Workout/ExerciseCard.stories.tsx +8 -7
- package/src/components/custom/Workout/ExerciseCard.test.tsx +13 -3
- package/src/components/custom/Workout/ExerciseCard.tsx +42 -51
- package/src/components/custom/Workout/ExerciseCardHeading.stories.tsx +7 -7
- package/src/components/custom/Workout/ExerciseDetailPage.stories.tsx +9 -1
- package/src/components/custom/Workout/ExerciseHeading.stories.tsx +8 -8
- package/src/components/custom/Workout/ExerciseHeading.tsx +8 -5
- package/src/components/custom/Workout/ExerciseIndicator.stories.tsx +6 -4
- package/src/components/custom/Workout/ExerciseIndicator.test.tsx +27 -11
- package/src/components/custom/Workout/ExerciseIndicator.tsx +14 -15
- package/src/components/custom/Workout/FatigueMeter.stories.tsx +5 -5
- package/src/components/custom/Workout/InputBar.stories.tsx +4 -5
- package/src/components/custom/Workout/IntensityBar.stories.tsx +1 -1
- package/src/components/custom/Workout/IntensityBar.test.tsx +5 -1
- package/src/components/custom/Workout/IntensityBar.tsx +4 -2
- package/src/components/custom/Workout/LiveAuraFrame.stories.tsx +5 -4
- package/src/components/custom/Workout/MesoCard.stories.tsx +4 -1
- package/src/components/custom/Workout/MesoCard.test.tsx +7 -18
- package/src/components/custom/Workout/MesoCard.tsx +12 -9
- package/src/components/custom/Workout/MesoProgressBar.stories.tsx +1 -1
- package/src/components/custom/Workout/MesoProgressBar.test.tsx +18 -11
- package/src/components/custom/Workout/MesoProgressBar.tsx +15 -13
- package/src/components/custom/Workout/MesoStatusCard.stories.tsx +2 -1
- package/src/components/custom/Workout/MesoStatusCard.test.tsx +14 -44
- package/src/components/custom/Workout/MesoStatusCard.tsx +9 -23
- package/src/components/custom/Workout/MetricTiles.stories.tsx +3 -2
- package/src/components/custom/Workout/MuscleGroupChip.stories.tsx +2 -8
- package/src/components/custom/Workout/MuscleGroupChip.test.tsx +23 -31
- package/src/components/custom/Workout/MuscleGroupChip.tsx +28 -67
- package/src/components/custom/Workout/PlaceholderStrip.stories.tsx +1 -1
- package/src/components/custom/Workout/PlaceholderStrip.test.tsx +17 -10
- package/src/components/custom/Workout/PlaceholderStrip.tsx +9 -8
- package/src/components/custom/Workout/PrBadge.stories.tsx +2 -1
- package/src/components/custom/Workout/PrBadge.test.tsx +3 -9
- package/src/components/custom/Workout/PrBadge.tsx +13 -17
- package/src/components/custom/Workout/PrHistoryModal.stories.tsx +4 -1
- package/src/components/custom/Workout/PrHistoryModal.test.tsx +13 -36
- package/src/components/custom/Workout/PrHistoryModal.tsx +8 -4
- package/src/components/custom/Workout/ProgramPlanningPage.stories.tsx +6 -1
- package/src/components/custom/Workout/README.md +11 -6
- package/src/components/custom/Workout/ReadinessCheck.stories.tsx +3 -2
- package/src/components/custom/Workout/ReadinessCheck.test.tsx +12 -18
- package/src/components/custom/Workout/ReadinessCheck.tsx +19 -3
- package/src/components/custom/Workout/RestTimer.stories.tsx +3 -2
- package/src/components/custom/Workout/ScheduleTiles.stories.tsx +3 -2
- package/src/components/custom/Workout/ScheduleTiles.test.tsx +3 -4
- package/src/components/custom/Workout/ScheduleTiles.tsx +4 -7
- package/src/components/custom/Workout/SegmentedBar.stories.tsx +5 -5
- package/src/components/custom/Workout/SegmentedBar.tsx +6 -2
- package/src/components/custom/Workout/SegmentedProgressBar.stories.tsx +5 -5
- package/src/components/custom/Workout/SessionHeader.stories.tsx +6 -6
- package/src/components/custom/Workout/SessionHeader.tsx +12 -12
- package/src/components/custom/Workout/SessionRail.stories.tsx +12 -11
- package/src/components/custom/Workout/SessionRail.tsx +7 -9
- package/src/components/custom/Workout/SetBar.stories.tsx +10 -6
- package/src/components/custom/Workout/SetBar.test.tsx +49 -4
- package/src/components/custom/Workout/SetBar.tsx +38 -12
- package/src/components/custom/Workout/SetRow.stories.tsx +3 -2
- package/src/components/custom/Workout/SetRow.test.tsx +16 -2
- package/src/components/custom/Workout/SetRow.tsx +61 -23
- package/src/components/custom/Workout/SetStrip.stories.tsx +60 -5
- package/src/components/custom/Workout/SetStrip.test.tsx +25 -0
- package/src/components/custom/Workout/SetStrip.tsx +24 -4
- package/src/components/custom/Workout/SetTableHeader.stories.tsx +6 -6
- package/src/components/custom/Workout/SetTableHeader.tsx +9 -12
- package/src/components/custom/Workout/SetsRepsLoad.stories.tsx +7 -7
- package/src/components/custom/Workout/SetsRepsLoad.tsx +3 -5
- package/src/components/custom/Workout/Sparkline.stories.tsx +1 -1
- package/src/components/custom/Workout/Sparkline.test.tsx +37 -19
- package/src/components/custom/Workout/Sparkline.tsx +14 -18
- package/src/components/custom/Workout/StatusDot.stories.tsx +1 -1
- package/src/components/custom/Workout/StatusDot.test.tsx +44 -5
- package/src/components/custom/Workout/StatusDot.tsx +93 -63
- package/src/components/custom/Workout/StatusPill.stories.tsx +1 -1
- package/src/components/custom/Workout/StatusPill.test.tsx +6 -15
- package/src/components/custom/Workout/StatusPill.tsx +27 -38
- package/src/components/custom/Workout/StrengthTrendChart.stories.tsx +9 -3
- package/src/components/custom/Workout/StrengthTrendChart.test.tsx +15 -37
- package/src/components/custom/Workout/StrengthTrendChart.tsx +31 -30
- package/src/components/custom/Workout/SupersetWrapper.stories.tsx +27 -64
- package/src/components/custom/Workout/SupersetWrapper.test.tsx +16 -14
- package/src/components/custom/Workout/SupersetWrapper.tsx +17 -21
- package/src/components/custom/Workout/TempoDisplay.stories.tsx +22 -7
- package/src/components/custom/Workout/TempoDisplay.test.tsx +18 -4
- package/src/components/custom/Workout/TrainingStatusPage.stories.tsx +9 -1
- package/src/components/custom/Workout/VelocityStrip.compact.stories.tsx +4 -1
- package/src/components/custom/Workout/VelocityStrip.dual.stories.tsx +7 -4
- package/src/components/custom/Workout/VelocityStrip.expanded.stories.tsx +4 -1
- package/src/components/custom/Workout/VelocityStrip.hero.stories.tsx +4 -1
- package/src/components/custom/Workout/VelocityStrip.stories.tsx +12 -6
- package/src/components/custom/Workout/VelocityStrip.tsx +3 -0
- package/src/components/custom/Workout/VolumeLandmarkBar.stories.tsx +6 -7
- package/src/components/custom/Workout/VolumeLandmarkBar.tsx +15 -6
- package/src/components/custom/Workout/WeekRow.stories.tsx +4 -1
- package/src/components/custom/Workout/WeekRow.test.tsx +18 -15
- package/src/components/custom/Workout/WeekRow.tsx +23 -16
- package/src/components/custom/Workout/WeightBadge.stories.tsx +2 -1
- package/src/components/custom/Workout/WeightBadge.test.tsx +50 -19
- package/src/components/custom/Workout/WeightBadge.tsx +28 -27
- package/src/components/custom/Workout/WorkoutCard.stories.tsx +6 -1
- package/src/components/custom/Workout/WorkoutCard.test.tsx +18 -0
- package/src/components/custom/Workout/WorkoutCard.tsx +35 -57
- package/src/components/custom/Workout/WorkoutPill.stories.tsx +5 -2
- package/src/components/custom/Workout/WorkoutPill.test.tsx +39 -7
- package/src/components/custom/Workout/WorkoutPill.tsx +88 -57
- package/src/components/custom/Workout/ZoneTrack.stories.tsx +7 -6
- package/src/components/custom/Workout/ZoneTrack.tsx +10 -9
- package/src/components/custom/Workout/index.ts +5 -0
- package/src/components/custom/Workout/metricText.stories.tsx +6 -5
- package/src/components/custom/Workout/metricText.tsx +4 -0
- package/src/components/custom/Workout/setHeadingKit.tsx +207 -26
- package/src/components/custom/charts/README.md +61 -0
- package/src/components/custom/charts/SetBarChart.test.tsx +30 -1
- package/src/components/custom/charts/SetBarChart.tsx +42 -4
- package/src/components/custom/charts/SparkBars.stories.tsx +55 -0
- package/src/components/custom/charts/SparkBars.test.tsx +69 -0
- package/src/components/custom/charts/SparkBars.tsx +85 -0
- package/src/components/custom/charts/index.ts +3 -0
- package/src/components/custom/index.ts +3 -0
- package/src/components/custom/stepper/Stepper.stories.tsx +13 -10
- package/src/components/custom/stepper/Stepper.test.tsx +1 -7
- package/src/components/custom/stepper/Stepper.tsx +13 -28
- package/src/components/icons/icons.stories.tsx +1 -1
- package/src/components/icons/icons.tsx +51 -0
- package/src/components/shell/AppShell.stories.tsx +150 -0
- package/src/components/shell/AppShell.test.tsx +70 -0
- package/src/components/shell/AppShell.tsx +90 -0
- package/src/components/shell/BrandLockup.stories.tsx +66 -5
- package/src/components/shell/BrandLockup.test.tsx +34 -1
- package/src/components/shell/BrandLockup.tsx +27 -11
- package/src/components/shell/NavItem.stories.tsx +4 -4
- package/src/components/shell/NavItem.test.tsx +17 -0
- package/src/components/shell/NavItem.tsx +17 -5
- package/src/components/shell/README.md +89 -26
- package/src/components/shell/SideNav.stories.tsx +38 -7
- package/src/components/shell/SideNav.test.tsx +16 -8
- package/src/components/shell/SideNav.tsx +17 -17
- package/src/components/shell/TopBar.stories.tsx +44 -19
- package/src/components/shell/TopBar.test.tsx +34 -12
- package/src/components/shell/TopBar.tsx +61 -40
- package/src/components/shell/brands.tsx +66 -0
- package/src/components/shell/index.ts +9 -8
- package/src/components/shell/{DeviceIndicator.stories.tsx → workout/DeviceIndicator.stories.tsx} +2 -2
- package/src/components/shell/{DeviceIndicator.tsx → workout/DeviceIndicator.tsx} +2 -2
- package/src/components/shell/{DeviceMenu.stories.tsx → workout/DeviceMenu.stories.tsx} +2 -2
- package/src/components/shell/{DeviceMenu.tsx → workout/DeviceMenu.tsx} +3 -3
- package/src/components/shell/{DeviceRow.stories.tsx → workout/DeviceRow.stories.tsx} +2 -2
- package/src/components/shell/{DeviceRow.tsx → workout/DeviceRow.tsx} +3 -3
- package/src/components/shell/{SessionStatePill.stories.tsx → workout/SessionStatePill.stories.tsx} +2 -2
- package/src/components/shell/{SessionStatePill.tsx → workout/SessionStatePill.tsx} +5 -3
- package/src/components/shell/workout/WorkoutShell.stories.tsx +71 -0
- package/src/components/shell/{DashboardShell.test.tsx → workout/WorkoutShell.test.tsx} +19 -8
- package/src/components/shell/workout/WorkoutShell.tsx +77 -0
- package/src/components/shell/workout/WorkoutTopBar.stories.tsx +58 -0
- package/src/components/shell/workout/WorkoutTopBar.test.tsx +39 -0
- package/src/components/shell/workout/WorkoutTopBar.tsx +52 -0
- package/src/components/shell/workout/index.ts +9 -0
- package/src/components/shell/workout/workoutNavItems.tsx +16 -0
- package/src/components/ui/README.md +110 -0
- package/src/components/ui/alert/Alert.stories.tsx +1 -1
- package/src/components/ui/autocomplete/Autocomplete.stories.tsx +11 -13
- package/src/components/ui/autocomplete/Autocomplete.test.tsx +7 -25
- package/src/components/ui/autocomplete/Autocomplete.tsx +21 -28
- package/src/components/ui/avatar/Avatar.stories.tsx +1 -1
- package/src/components/ui/avatar/Avatar.tsx +2 -10
- package/src/components/ui/badge/Badge.stories.tsx +83 -28
- package/src/components/ui/badge/Badge.test.tsx +19 -3
- package/src/components/ui/badge/Badge.tsx +48 -55
- package/src/components/ui/breadcrumbs/Breadcrumbs.stories.tsx +1 -1
- package/src/components/ui/breadcrumbs/Breadcrumbs.tsx +4 -16
- package/src/components/ui/button/Button.stories.tsx +46 -12
- package/src/components/ui/button/Button.tsx +32 -25
- package/src/components/ui/card/Card.stories.tsx +90 -94
- package/src/components/ui/card/Card.test.tsx +80 -6
- package/src/components/ui/card/Card.tsx +150 -203
- package/src/components/ui/checkbox/Checkbox.stories.tsx +1 -1
- package/src/components/ui/checkbox/Checkbox.tsx +6 -26
- package/src/components/ui/chip/Chip.stories.tsx +37 -13
- package/src/components/ui/chip/Chip.test.tsx +10 -6
- package/src/components/ui/chip/Chip.tsx +76 -91
- package/src/components/ui/collapse/Collapse.stories.tsx +23 -23
- package/src/components/ui/collapse/Collapse.tsx +6 -11
- package/src/components/ui/data-row/DataRow.stories.tsx +9 -2
- package/src/components/ui/data-row/DataRow.test.tsx +5 -15
- package/src/components/ui/data-row/DataRow.tsx +18 -7
- package/src/components/ui/divider/Divider.stories.tsx +1 -1
- package/src/components/ui/divider/Divider.tsx +1 -5
- package/src/components/ui/drawer/Drawer.stories.tsx +5 -16
- package/src/components/ui/drawer/Drawer.tsx +13 -30
- package/src/components/ui/floating-overlay-depth.test.tsx +143 -0
- package/src/components/ui/form-field/FormField.stories.tsx +6 -20
- package/src/components/ui/form-field/FormField.test.tsx +1 -5
- package/src/components/ui/form-field/FormField.tsx +10 -46
- package/src/components/ui/help-tip/HelpTip.stories.tsx +8 -19
- package/src/components/ui/help-tip/HelpTip.test.tsx +1 -3
- package/src/components/ui/help-tip/HelpTip.tsx +21 -22
- package/src/components/ui/help-tip/index.ts +7 -1
- package/src/components/ui/icon-box/IconBox.stories.tsx +1 -1
- package/src/components/ui/icon-box/IconBox.test.tsx +1 -7
- package/src/components/ui/icon-box/IconBox.tsx +2 -12
- package/src/components/ui/indicator/Indicator.stories.tsx +1 -1
- package/src/components/ui/indicator/Indicator.tsx +20 -14
- package/src/components/ui/input/Input.stories.tsx +3 -11
- package/src/components/ui/input/Input.test.tsx +2 -10
- package/src/components/ui/input/Input.tsx +10 -25
- package/src/components/ui/input/index.ts +7 -1
- package/src/components/ui/link/Link.stories.tsx +19 -7
- package/src/components/ui/list-item/ListItem.stories.tsx +11 -2
- package/src/components/ui/list-item/ListItem.tsx +2 -9
- package/src/components/ui/menu/Menu.stories.tsx +21 -15
- package/src/components/ui/menu/Menu.test.tsx +2 -11
- package/src/components/ui/menu/Menu.tsx +12 -14
- package/src/components/ui/menu/index.ts +8 -1
- package/src/components/ui/modal/Modal.stories.tsx +2 -2
- package/src/components/ui/modal/Modal.tsx +29 -19
- package/src/components/ui/pill/Pill.stories.tsx +58 -23
- package/src/components/ui/pill/Pill.test.tsx +101 -3
- package/src/components/ui/pill/Pill.tsx +164 -49
- package/src/components/ui/pill/index.ts +1 -1
- package/src/components/ui/popover/Popover.stories.tsx +5 -7
- package/src/components/ui/popover/Popover.test.tsx +1 -6
- package/src/components/ui/popover/Popover.tsx +20 -15
- package/src/components/ui/popover/index.ts +7 -1
- package/src/components/ui/progress/Progress.stories.tsx +3 -12
- package/src/components/ui/progress/Progress.test.tsx +1 -5
- package/src/components/ui/radio/Radio.stories.tsx +42 -21
- package/src/components/ui/radio/Radio.test.tsx +6 -2
- package/src/components/ui/radio/Radio.tsx +23 -22
- package/src/components/ui/section/Section.stories.tsx +5 -14
- package/src/components/ui/section/Section.test.tsx +1 -6
- package/src/components/ui/section/Section.tsx +1 -3
- package/src/components/ui/section/index.ts +1 -5
- package/src/components/ui/select/Select.stories.tsx +3 -13
- package/src/components/ui/select/Select.test.tsx +2 -11
- package/src/components/ui/select/Select.tsx +14 -14
- package/src/components/ui/skeleton/Skeleton.stories.tsx +3 -11
- package/src/components/ui/skeleton/Skeleton.tsx +3 -14
- package/src/components/ui/skeleton/index.ts +1 -7
- package/src/components/ui/spinner/Spinner.stories.tsx +1 -1
- package/src/components/ui/spinner/Spinner.tsx +1 -4
- package/src/components/ui/stack/Stack.stories.tsx +1 -1
- package/src/components/ui/stack/Stack.tsx +1 -1
- package/src/components/ui/surface/Surface.stories.tsx +17 -5
- package/src/components/ui/surface/Surface.test.tsx +88 -28
- package/src/components/ui/surface/Surface.tsx +37 -87
- package/src/components/ui/surface/SurfaceContext.ts +22 -62
- package/src/components/ui/surface/index.ts +8 -0
- package/src/components/ui/surface/resolveSurface.ts +98 -0
- package/src/components/ui/surface/surface.contract.test.ts +6 -1
- package/src/components/ui/switch/Switch.stories.tsx +1 -1
- package/src/components/ui/switch/Switch.tsx +7 -6
- package/src/components/ui/tabs/Tabs.stories.tsx +1 -1
- package/src/components/ui/tabs/Tabs.tsx +7 -22
- package/src/components/ui/tabs/index.ts +1 -7
- package/src/components/ui/tile/Tile.stories.tsx +1 -1
- package/src/components/ui/tile/Tile.tsx +3 -0
- package/src/components/ui/toast/Toast.stories.tsx +1 -1
- package/src/components/ui/toast/Toast.test.tsx +2 -8
- package/src/components/ui/toast/Toast.tsx +43 -53
- package/src/components/ui/toast/index.ts +0 -1
- package/src/components/ui/toolbar-button/ToolbarButton.stories.tsx +92 -71
- package/src/components/ui/toolbar-button/ToolbarButton.test.tsx +3 -18
- package/src/components/ui/toolbar-button/ToolbarButton.tsx +25 -43
- package/src/components/ui/tooltip/Tooltip.stories.tsx +12 -3
- package/src/components/ui/tooltip/Tooltip.test.tsx +21 -3
- package/src/components/ui/tooltip/Tooltip.tsx +55 -36
- package/src/components/ui/tooltip/index.ts +1 -1
- package/src/components/ui/trigger/TriggerSurface.test.tsx +215 -0
- package/src/components/ui/trigger/TriggerSurface.tsx +81 -0
- package/src/components/ui/trigger/index.ts +2 -0
- package/src/stories/PresetShowcase.stories.tsx +100 -47
- package/src/test/no-device-internals.test.ts +3 -3
- package/src/theme/ChoosingTokens.stories.tsx +48 -0
- package/src/theme/ColorPalettes.stories.tsx +62 -45
- package/src/theme/ColorPrimitives.stories.tsx +35 -35
- package/src/theme/Depth.stories.tsx +132 -65
- package/src/theme/DepthCalibration.stories.tsx +23 -21
- package/src/theme/ThemeProvider.test.tsx +4 -4
- package/src/theme/barrel.ts +7 -6
- package/src/theme/color-stories.coverage.test.ts +1 -1
- package/src/theme/color-utils.ts +41 -29
- package/src/theme/config.completeness.test.ts +1 -1
- package/src/theme/config.ts +28 -0
- package/src/theme/elevation.test.ts +82 -56
- package/src/theme/elevation.ts +77 -561
- package/src/theme/global.css +30 -2
- package/src/theme/grey-ramp.test.ts +24 -8
- package/src/theme/lift.test.ts +39 -0
- package/src/theme/lift.ts +102 -0
- package/src/theme/materials.test.ts +5 -2
- package/src/theme/materials.ts +38 -4
- package/src/theme/native-theming-guard.test.ts +5 -5
- package/src/theme/presets/apply.ts +4 -0
- package/src/theme/presets/audiobook.ts +5 -2
- package/src/theme/presets/default.ts +4 -0
- package/src/theme/presets/index.ts +14 -1
- package/src/theme/presets/types.ts +1 -1
- package/src/theme/semantic-contrast.test.ts +13 -4
- package/src/theme/status-distinctness.test.ts +66 -0
- package/src/theme/surface-planes.test.ts +37 -0
- package/src/theme/surface-planes.ts +68 -0
- package/src/theme/token-export-guard.test.ts +1 -3
- package/src/theme/tokens/primitives.test.ts +15 -7
- package/src/theme/tokens/primitives.ts +65 -33
- package/src/theme/tokens/semantic.ts +71 -37
- package/src/theme/wash-ladder.test.ts +58 -0
- package/src/theme/workout-tokens.ts +1 -7
- package/src/types/jest-axe.d.ts +2 -6
- package/src/types/raw-md.d.ts +5 -0
- package/src/utils/colors.ts +4 -4
- package/src/utils/form.ts +1 -3
- package/src/utils/index.ts +2 -7
- package/src/utils/number-format.ts +17 -0
- package/src/utils/workout-format.ts +15 -6
- package/src/web-jsx/jsx-runtime.ts +1 -5
- package/tailwind.config.js +5 -0
- package/src/components/custom/Workout/ExerciseCardUnified.stories.tsx +0 -151
- package/src/components/custom/Workout/RowInventory.stories.tsx +0 -408
- package/src/components/custom/Workout/S3FullRail.stories.tsx +0 -46
- package/src/components/custom/Workout/S3SessionPace.stories.tsx +0 -95
- package/src/components/custom/Workout/S3SessionRailHeading.stories.tsx +0 -61
- package/src/components/custom/Workout/S3SetTypes.stories.tsx +0 -176
- package/src/components/custom/Workout/S3WorkoutExpansion.stories.tsx +0 -240
- package/src/components/shell/DashboardShell.stories.tsx +0 -65
- package/src/components/shell/DashboardShell.tsx +0 -75
- package/src/components/shell/SessionRailSpecimen.stories.tsx +0 -753
- package/src/theme/elevation.stories.tsx +0 -346
- package/src/utils/useTheme.ts +0 -72
- /package/src/components/shell/{DeviceIndicator.test.tsx → workout/DeviceIndicator.test.tsx} +0 -0
- /package/src/components/shell/{DeviceMenu.test.tsx → workout/DeviceMenu.test.tsx} +0 -0
- /package/src/components/shell/{DeviceRow.test.tsx → workout/DeviceRow.test.tsx} +0 -0
- /package/src/components/shell/{SessionStatePill.test.tsx → workout/SessionStatePill.test.tsx} +0 -0
package/dist/index.d.mts
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 } from 'react-native';
|
|
5
|
+
import { SurfaceLevel, ElevationLevel, LiftOptions, GlowIntensity } from './theme/index.mjs';
|
|
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.mjs';
|
|
5
7
|
import { ThemeMode } from './theme/tokens.mjs';
|
|
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.mjs';
|
|
7
|
-
import {
|
|
8
|
-
export {
|
|
9
|
-
import { S as SetStripSet, E as ExerciseIndicatorKind, a as SetRowProps } from './pages-CvsFqNtx.mjs';
|
|
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-CvsFqNtx.mjs';
|
|
8
|
+
export { CATEGORICAL_CVD_SAFE_MAX, CategoricalVariant, SURFACE_PLANE_STEPS, alertRedVivid, bestTextColor, buttonSizes, categoricalPalette, discreteRainbow, divergingScale, getCategoricalColor, getDiscreteRainbowColor, getSemanticColors, greyRamp, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveSpacing, primitiveTypography, primitiveZIndex, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort } from './theme/tokens.mjs';
|
|
9
|
+
import { S as SetStripSet, E as ExerciseIndicatorKind, a as SetRowProps } from './pages-CpW3OB3g.mjs';
|
|
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-CpW3OB3g.mjs';
|
|
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.mjs';
|
|
12
12
|
import { VolumeLandmarks } from './bodymap.mjs';
|
|
13
13
|
export { BodyMapData, BodyMapDetailPanelProps, BodyMapProps, ContributingExercise, MovementCategory, MuscleGroup, SimpleMuscleGroup, TrainingStatusMuscle, TrainingStatusPageProps, TrainingStatusSummary, UpcomingExercise } from './bodymap.mjs';
|
|
@@ -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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
* -
|
|
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
|
|
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:
|
|
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
|
-
/**
|
|
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
|
|
2060
|
-
*
|
|
2061
|
-
*
|
|
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
|
|
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
|
-
*
|
|
2094
|
-
*
|
|
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.
|
|
2117
|
-
* - `
|
|
2118
|
-
*
|
|
2119
|
-
*
|
|
2120
|
-
*
|
|
2121
|
-
*
|
|
2122
|
-
|
|
2123
|
-
|
|
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
|
|
2181
|
+
children?: React__default.ReactNode;
|
|
2161
2182
|
/** Visual variant */
|
|
2162
2183
|
variant?: PillVariant;
|
|
2163
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
|
|
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 {
|
|
@@ -3031,6 +3186,10 @@ interface MetricCellProps {
|
|
|
3031
3186
|
color: string;
|
|
3032
3187
|
fontSize?: number;
|
|
3033
3188
|
}
|
|
3189
|
+
/**
|
|
3190
|
+
* @deprecated Use `<Metric size="…" align="…">` (roadmap decision 11) — removed
|
|
3191
|
+
* after AW-127 consumer migration.
|
|
3192
|
+
*/
|
|
3034
3193
|
declare function MetricCell({ children, color, fontSize }: MetricCellProps): react_jsx_runtime.JSX.Element;
|
|
3035
3194
|
|
|
3036
3195
|
interface SetsRepsLoadProps extends ViewProps {
|
|
@@ -3056,13 +3215,16 @@ interface SegmentedBarSegment {
|
|
|
3056
3215
|
weight?: number;
|
|
3057
3216
|
/** Fraction 0..1 of the slot the coloured fill covers, left-aligned. Default 1 (full). */
|
|
3058
3217
|
fill?: number;
|
|
3059
|
-
/** Fill colour — a
|
|
3218
|
+
/** Fill colour. Pass `resolveColor(token)` — a plain fill takes a `var()` ref fine. */
|
|
3060
3219
|
color: string;
|
|
3061
3220
|
/** When true the fill animates on the shared active-pulse loop. */
|
|
3062
3221
|
pulse?: boolean;
|
|
3063
3222
|
/**
|
|
3064
3223
|
* When pulsing, interpolate the fill's `backgroundColor` from→to over the loop
|
|
3065
3224
|
* (full opacity). Omit to fall back to the default opacity breathe.
|
|
3225
|
+
*
|
|
3226
|
+
* Literal hex only: `Animated.interpolate` parses these two endpoints itself
|
|
3227
|
+
* and cannot read a `var()` ref, so `resolveColor(token)` does not work here.
|
|
3066
3228
|
*/
|
|
3067
3229
|
pulseColor?: [from: string, to: string];
|
|
3068
3230
|
/**
|
|
@@ -3102,7 +3264,8 @@ interface SegmentedBarProps extends ViewProps {
|
|
|
3102
3264
|
* presentational atom the per-set strips are built from. Each segment is a flex
|
|
3103
3265
|
* slot (flex = `weight`) holding a left-aligned fill (`fill` fraction, `color`);
|
|
3104
3266
|
* `pulse` segments breathe on a shared active-pulse loop, and `marker` drops a
|
|
3105
|
-
* vertical line at a fraction of the total width.
|
|
3267
|
+
* vertical line at a fraction of the total width. Every colour is injected by the
|
|
3268
|
+
* composer, so this atom holds no palette of its own.
|
|
3106
3269
|
*/
|
|
3107
3270
|
declare function SegmentedBar({ segments, height, gap, radius, marker, segmentTestID, style, ...props }: SegmentedBarProps): react_jsx_runtime.JSX.Element;
|
|
3108
3271
|
|
|
@@ -3188,8 +3351,8 @@ interface ScheduleTilesProps extends ViewProps {
|
|
|
3188
3351
|
* ScheduleTiles — Date / Time / Until row for an upcoming session.
|
|
3189
3352
|
*
|
|
3190
3353
|
* An HStack of three {@link Tile}s derived from a single scheduled moment. The
|
|
3191
|
-
* Until value reuses {@link formatDateTime} relative formatting and
|
|
3192
|
-
*
|
|
3354
|
+
* Until value reuses {@link formatDateTime} relative formatting and takes the
|
|
3355
|
+
* `brand-primary` accent only when the session is less than a day away.
|
|
3193
3356
|
*
|
|
3194
3357
|
* @example
|
|
3195
3358
|
* <ScheduleTiles when={Date.now() + 5 * 60 * 60 * 1000} />
|
|
@@ -3380,10 +3543,11 @@ declare function SessionRail({ title, exercises, setsDone, elapsedMs, budgetMs,
|
|
|
3380
3543
|
|
|
3381
3544
|
interface SupersetWrapperProps {
|
|
3382
3545
|
label?: string;
|
|
3546
|
+
/** Rail and label-chip colour. Defaults to the `brand-primary` token. */
|
|
3383
3547
|
color?: string;
|
|
3384
3548
|
children: React__default.ReactNode;
|
|
3385
3549
|
}
|
|
3386
|
-
declare function SupersetWrapper({ label, color, children
|
|
3550
|
+
declare function SupersetWrapper({ label, color, children }: SupersetWrapperProps): react_jsx_runtime.JSX.Element;
|
|
3387
3551
|
|
|
3388
3552
|
type PrRecordType = 'e1rm' | 'weight' | 'reps' | 'volume' | 'velocity';
|
|
3389
3553
|
interface PrRecord {
|
|
@@ -3652,12 +3816,11 @@ interface StatusPillProps extends ViewProps {
|
|
|
3652
3816
|
/** Resolved semantic color for a verdict status. */
|
|
3653
3817
|
declare function statusPillColor(status: StatusPillStatus): string;
|
|
3654
3818
|
/**
|
|
3655
|
-
* Verdict pill: a glowing status dot +
|
|
3656
|
-
*
|
|
3657
|
-
*
|
|
3658
|
-
* semantic token via `alpha()` — no per-status raw hex.
|
|
3819
|
+
* Verdict pill: a glowing status dot + coloured verdict text in a tinted
|
|
3820
|
+
* capsule. A `Pill` preset — tone, tint and border all come from the pill's
|
|
3821
|
+
* semantic tone, so no per-status colour is computed here.
|
|
3659
3822
|
*/
|
|
3660
|
-
declare function StatusPill({ status, label, className,
|
|
3823
|
+
declare function StatusPill({ status, label, className, ...props }: StatusPillProps): react_jsx_runtime.JSX.Element;
|
|
3661
3824
|
|
|
3662
3825
|
/**
|
|
3663
3826
|
* Coaching-category flood level for the live surface. Mirrors {@link StatusPill}:
|
|
@@ -3808,14 +3971,6 @@ interface LiveFatigueModel {
|
|
|
3808
3971
|
targetTempoSeconds: [number, number, number, number] | null;
|
|
3809
3972
|
}
|
|
3810
3973
|
|
|
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
3974
|
interface LiveFatiguePanelVelocity {
|
|
3820
3975
|
/** Per-rep MEAN concentric velocity (m/s), ordered by rep. */
|
|
3821
3976
|
velocities: number[];
|
|
@@ -3827,16 +3982,91 @@ interface LiveFatiguePanelProps {
|
|
|
3827
3982
|
model: LiveFatigueModel;
|
|
3828
3983
|
/** The velocity-hero data (its own source — not on the fatigue model). */
|
|
3829
3984
|
velocity: LiveFatiguePanelVelocity;
|
|
3830
|
-
/** Optional lite exercise header. Omitted → no header row. */
|
|
3831
|
-
header?: LiveFatiguePanelHeader;
|
|
3832
3985
|
/** Aura-flood category. Defaults to the verdict-derived category. */
|
|
3833
3986
|
aura?: LiveAuraCategory;
|
|
3834
3987
|
/** Panel body height in px. Default 508. */
|
|
3835
3988
|
bodyHeight?: number;
|
|
3836
|
-
/**
|
|
3989
|
+
/**
|
|
3990
|
+
* Pin the fatigue-card column width instead of letting the tier choose it. Ignored when
|
|
3991
|
+
* the panel is stacked (the card fills the content width there).
|
|
3992
|
+
*/
|
|
3837
3993
|
cardWidth?: number;
|
|
3994
|
+
/**
|
|
3995
|
+
* Override the measured container width, in px. The panel measures itself, so this is
|
|
3996
|
+
* for tests (`onLayout` never fires under jsdom) and for a consumer that already knows
|
|
3997
|
+
* the width it is about to hand the panel.
|
|
3998
|
+
*/
|
|
3999
|
+
containerWidth?: number;
|
|
3838
4000
|
}
|
|
3839
|
-
declare function LiveFatiguePanel({ model, velocity,
|
|
4001
|
+
declare function LiveFatiguePanel({ model, velocity, aura, bodyHeight, cardWidth, containerWidth, }: LiveFatiguePanelProps): react_jsx_runtime.JSX.Element;
|
|
4002
|
+
|
|
4003
|
+
/** titan's breakpoint scale, re-exported as the panel's tier edges. Sourced, not chosen. */
|
|
4004
|
+
declare const PANEL_BREAKPOINTS: {
|
|
4005
|
+
readonly xs: 0;
|
|
4006
|
+
readonly sm: 600;
|
|
4007
|
+
readonly md: 1000;
|
|
4008
|
+
readonly lg: 1200;
|
|
4009
|
+
readonly xl: 1920;
|
|
4010
|
+
};
|
|
4011
|
+
type PanelTier = keyof typeof PANEL_BREAKPOINTS;
|
|
4012
|
+
/**
|
|
4013
|
+
* The tier for a measured container width. An unmeasured container (0, before the first
|
|
4014
|
+
* `onLayout`) resolves to `md` — today's side-by-side geometry — so the first paint matches
|
|
4015
|
+
* what the panel has always rendered rather than flashing a stacked layout.
|
|
4016
|
+
*/
|
|
4017
|
+
declare function panelTier(width: number): PanelTier;
|
|
4018
|
+
/** titan's long-standing card column width, and the floor every wider tier clamps to. */
|
|
4019
|
+
declare const CARD_WIDTH_BASE = 318;
|
|
4020
|
+
/**
|
|
4021
|
+
* CHOSEN. At wall width a 318px card is ~17% of the content row against ~34% at the `md`
|
|
4022
|
+
* edge, so it reads as a sliver beside the hero. 0.22 pulls it back toward the `md`
|
|
4023
|
+
* proportion without letting the hero lose its lead.
|
|
4024
|
+
*/
|
|
4025
|
+
declare const CARD_WIDTH_XL_RATIO = 0.22;
|
|
4026
|
+
/**
|
|
4027
|
+
* CHOSEN. The cap. The card's internal charts (`RomProgressionChart`, `GhostSpark`) were
|
|
4028
|
+
* drawn around ~318 and go sparse rather than richer past roughly 1.5x that, so the
|
|
4029
|
+
* expansion stops at 460 (reached at 2091px) instead of tracking the container forever.
|
|
4030
|
+
*/
|
|
4031
|
+
declare const CARD_WIDTH_MAX = 460;
|
|
4032
|
+
/**
|
|
4033
|
+
* CHOSEN. Stacked, the CARD takes the larger share of the one body height. Its sections
|
|
4034
|
+
* have hard floors — the verdict hero, the three lights, the ROM chart and the ghost spark —
|
|
4035
|
+
* while the velocity hero is a bar plot that scales continuously, so squeezing the hero
|
|
4036
|
+
* degrades gracefully and squeezing the card overflows it.
|
|
4037
|
+
*/
|
|
4038
|
+
declare const CARD_HEIGHT_SHARE_STACKED = 0.55;
|
|
4039
|
+
/** What the hero reserves above its plot for the `VELOCITY · this set` eyebrow, px. */
|
|
4040
|
+
declare const HERO_EYEBROW_ALLOWANCE = 26;
|
|
4041
|
+
interface PanelLayout {
|
|
4042
|
+
tier: PanelTier;
|
|
4043
|
+
/** Card below the hero rather than beside it. */
|
|
4044
|
+
stacked: boolean;
|
|
4045
|
+
/** Uniform padding around the body row, px. */
|
|
4046
|
+
padding: number;
|
|
4047
|
+
/** Gap between the hero and the card, px — column gap when row, row gap when stacked. */
|
|
4048
|
+
gap: number;
|
|
4049
|
+
/**
|
|
4050
|
+
* Card width, px. Stacked, this is the full content width, so the card takes a real
|
|
4051
|
+
* number rather than needing a second `onLayout` of its own to size its charts.
|
|
4052
|
+
*/
|
|
4053
|
+
cardWidth: number;
|
|
4054
|
+
}
|
|
4055
|
+
/** The whole layout for a measured container width. */
|
|
4056
|
+
declare function panelLayout(width: number): PanelLayout;
|
|
4057
|
+
interface PanelBodySplit {
|
|
4058
|
+
/** Height handed to the velocity hero's plot, px. */
|
|
4059
|
+
heroHeight: number;
|
|
4060
|
+
/** Height handed to the fatigue card, px. */
|
|
4061
|
+
cardHeight: number;
|
|
4062
|
+
}
|
|
4063
|
+
/**
|
|
4064
|
+
* The ONE body height split across the hero and the card (TD-03.60). Side by side both
|
|
4065
|
+
* take the full height; stacked they share it by {@link CARD_HEIGHT_SHARE_STACKED} with the
|
|
4066
|
+
* gap taken out first, and neither drops below its floor. Either way both numbers come from
|
|
4067
|
+
* this one call, so changing `bodyHeight` moves both or neither.
|
|
4068
|
+
*/
|
|
4069
|
+
declare function panelBodySplit(bodyHeight: number, layout: PanelLayout): PanelBodySplit;
|
|
3840
4070
|
|
|
3841
4071
|
interface LiveFatigueCardProps {
|
|
3842
4072
|
/** The live fatigue read-model for the current set. */
|
|
@@ -4190,18 +4420,925 @@ interface GaugeProps extends Omit<ViewProps, 'children'> {
|
|
|
4190
4420
|
*/
|
|
4191
4421
|
declare function Gauge({ value, min, max, size, label, unit, thresholds, color, className, ...props }: GaugeProps): react_jsx_runtime.JSX.Element;
|
|
4192
4422
|
|
|
4423
|
+
interface SparkBarsProps extends Omit<ViewProps, 'accessibilityLabel'> {
|
|
4424
|
+
/** The series, oldest first. Negative values draw in `negativeColor`. */
|
|
4425
|
+
values: number[];
|
|
4426
|
+
/** Overall bar-field height in px. */
|
|
4427
|
+
height?: number;
|
|
4428
|
+
/** Width of a single bar in px. */
|
|
4429
|
+
barWidth?: number;
|
|
4430
|
+
/** Gap between bars in px. */
|
|
4431
|
+
gap?: number;
|
|
4432
|
+
/** Keep only the last N values — a sparkline is a recent-history glance, not an archive. */
|
|
4433
|
+
maxBars?: number;
|
|
4434
|
+
/** Fill for non-negative bars. Defaults to `result-improve`. */
|
|
4435
|
+
color?: string;
|
|
4436
|
+
/** Fill for negative bars. Defaults to `result-degrade`. */
|
|
4437
|
+
negativeColor?: string;
|
|
4438
|
+
/** Screen-reader description. Defaults to a bar count. */
|
|
4439
|
+
label?: string;
|
|
4440
|
+
className?: string;
|
|
4441
|
+
}
|
|
4442
|
+
/**
|
|
4443
|
+
* SparkBars — a tiny bar-mark sparkline for a signed series.
|
|
4444
|
+
*
|
|
4445
|
+
* The bar-mark counterpart to {@link Sparkline}: where a line reads a
|
|
4446
|
+
* *trajectory*, bars read *discrete per-period magnitude*, which is what
|
|
4447
|
+
* per-session activity and per-session net growth actually are. Bars are scaled
|
|
4448
|
+
* by absolute value so a negative period is as tall as an equally large
|
|
4449
|
+
* positive one, and tinted with `negativeColor` to carry the sign.
|
|
4450
|
+
*
|
|
4451
|
+
* @example
|
|
4452
|
+
* <SparkBars values={[3, 8, -2, 14]} height={22} />
|
|
4453
|
+
*/
|
|
4454
|
+
declare function SparkBars({ values, height, barWidth, gap, maxBars, color, negativeColor, label, className, ...props }: SparkBarsProps): react_jsx_runtime.JSX.Element;
|
|
4455
|
+
|
|
4456
|
+
interface EyebrowProps {
|
|
4457
|
+
children: ReactNode;
|
|
4458
|
+
className?: string;
|
|
4459
|
+
}
|
|
4460
|
+
/**
|
|
4461
|
+
* Eyebrow — an uppercase micro-label used above a value or a section of
|
|
4462
|
+
* content (e.g. "Focused · by rank", a stat tile's caption). Composes
|
|
4463
|
+
* {@link Typography}'s `overline` variant; never hand-roll the letter-spacing.
|
|
4464
|
+
*/
|
|
4465
|
+
declare function Eyebrow({ children, className }: EyebrowProps): react_jsx_runtime.JSX.Element;
|
|
4466
|
+
|
|
4467
|
+
/** How much a task hurts if left undone. Ordered worst-first by {@link SEVERITY_RANK}. */
|
|
4468
|
+
type TaskSeverity = 'critical' | 'high' | 'medium' | 'low';
|
|
4469
|
+
/**
|
|
4470
|
+
* Sort weight per severity, worst-first. Exported so a table can rank a severity
|
|
4471
|
+
* column by meaning rather than alphabetically ("critical" < "high" < "low" as
|
|
4472
|
+
* strings puts low in the middle).
|
|
4473
|
+
*/
|
|
4474
|
+
declare const SEVERITY_RANK: Record<TaskSeverity, number>;
|
|
4475
|
+
/** Severities worst-first — the canonical order for legends and pickers. */
|
|
4476
|
+
declare const SEVERITY_ORDER: TaskSeverity[];
|
|
4477
|
+
/** Rank for a possibly-absent severity; unset sorts after every real value. */
|
|
4478
|
+
declare function severityRank(severity?: TaskSeverity): number;
|
|
4479
|
+
/**
|
|
4480
|
+
* Severity to its display label and {@link Indicator} colour. Critical and high
|
|
4481
|
+
* both read as error; the vivid step separates "drop everything" from "serious".
|
|
4482
|
+
*/
|
|
4483
|
+
declare const SEVERITY_META: Record<TaskSeverity, {
|
|
4484
|
+
label: string;
|
|
4485
|
+
dot: React.ComponentProps<typeof Indicator>['color'];
|
|
4486
|
+
}>;
|
|
4487
|
+
/**
|
|
4488
|
+
* Severity as a fill for an area mark (a {@link SegmentedBar} segment), where
|
|
4489
|
+
* {@link SEVERITY_META} gives the point-mark dot colour.
|
|
4490
|
+
*
|
|
4491
|
+
* `low` diverges deliberately: as a dot among four it needs to stay legible, but
|
|
4492
|
+
* as a bar segment it should recede, so it takes `text-tertiary` rather than
|
|
4493
|
+
* `status-info`. Both live here so the severity vocabulary has one owner.
|
|
4494
|
+
*/
|
|
4495
|
+
declare const SEVERITY_BAR_COLOR: Record<TaskSeverity, string>;
|
|
4496
|
+
interface SeverityLabelProps {
|
|
4497
|
+
/** Omitted renders the em-dash placeholder rather than nothing, so columns stay aligned. */
|
|
4498
|
+
severity?: TaskSeverity;
|
|
4499
|
+
/** Hides the text, leaving only the dot — for a legend key or a very tight column. */
|
|
4500
|
+
dotOnly?: boolean;
|
|
4501
|
+
className?: string;
|
|
4502
|
+
}
|
|
4503
|
+
/**
|
|
4504
|
+
* SeverityLabel — a task's severity as a coloured dot plus its label.
|
|
4505
|
+
*
|
|
4506
|
+
* Composes {@link Indicator}; never hand-roll a status dot (there are already two
|
|
4507
|
+
* dot primitives in the system, and this is not a third). Used by
|
|
4508
|
+
* {@link TaskRow} and {@link TaskTable}'s legend.
|
|
4509
|
+
*
|
|
4510
|
+
* @deprecated Use `<Pill tone="…" leading="dot">` — removed after AW-127 consumer migration.
|
|
4511
|
+
*/
|
|
4512
|
+
declare function SeverityLabel({ severity, dotOnly, className }: SeverityLabelProps): react_jsx_runtime.JSX.Element;
|
|
4513
|
+
|
|
4514
|
+
type InitiativeState = 'focused' | 'backburner' | 'paused' | 'done';
|
|
4515
|
+
/** Initiative state → label + {@link StatusDot} variant. One owner; the initiative header reads it too. */
|
|
4516
|
+
declare const INITIATIVE_STATE_META: Record<InitiativeState, {
|
|
4517
|
+
label: string;
|
|
4518
|
+
dot: StatusDotVariant;
|
|
4519
|
+
}>;
|
|
4520
|
+
interface InitiativeCardTopTask {
|
|
4521
|
+
id: string;
|
|
4522
|
+
title: string;
|
|
4523
|
+
}
|
|
4524
|
+
interface InitiativeCardProps extends ViewProps {
|
|
4525
|
+
/** Initiative title, e.g. "active-work — durable workspace state". */
|
|
4526
|
+
title: string;
|
|
4527
|
+
/** Short slug shown under the title, e.g. "active-work". */
|
|
4528
|
+
slug: string;
|
|
4529
|
+
/** Lifecycle state — drives the status dot and card accent. */
|
|
4530
|
+
state: InitiativeState;
|
|
4531
|
+
/** Focused rank (1-based). Omit for non-ranked states. */
|
|
4532
|
+
rank?: number;
|
|
4533
|
+
/** Ship-target label, e.g. "2026-Q3". */
|
|
4534
|
+
shipTarget?: string;
|
|
4535
|
+
/** Count of open tasks for this initiative. */
|
|
4536
|
+
openCount: number;
|
|
4537
|
+
/** Open-task counts by severity, driving the segmented mix bar. Bar is omitted when all-zero. */
|
|
4538
|
+
severityCounts: Record<TaskSeverity, number>;
|
|
4539
|
+
/** The highest-priority open task, if any. Renders "no open tasks" when omitted. */
|
|
4540
|
+
topTask?: InitiativeCardTopTask;
|
|
4541
|
+
className?: string;
|
|
4542
|
+
}
|
|
4543
|
+
/**
|
|
4544
|
+
* InitiativeCard — an at-a-glance summary of one active-work initiative: state,
|
|
4545
|
+
* rank, open-task count, a severity-mix bar, and its top-priority open task.
|
|
4546
|
+
* Composes Card / Pill / StatusDot / SegmentedBar / Typography — never
|
|
4547
|
+
* hand-rolled. Used by {@link PortfolioOverview}.
|
|
4548
|
+
*
|
|
4549
|
+
* Sits on the card plane above the page like every other content card; the
|
|
4550
|
+
* `accent` stripe is reserved for the focused state, where it carries meaning.
|
|
4551
|
+
*/
|
|
4552
|
+
declare function InitiativeCard({ title, slug, state, rank, shipTarget, openCount, severityCounts, topTask, className, ...props }: InitiativeCardProps): react_jsx_runtime.JSX.Element;
|
|
4553
|
+
|
|
4554
|
+
interface PortfolioOverviewStat {
|
|
4555
|
+
value: string;
|
|
4556
|
+
label: string;
|
|
4557
|
+
}
|
|
4558
|
+
interface PortfolioOverviewSection {
|
|
4559
|
+
/** Section eyebrow, e.g. "Focused · by rank" or "Backburner". */
|
|
4560
|
+
heading: string;
|
|
4561
|
+
items: InitiativeCardProps[];
|
|
4562
|
+
}
|
|
4563
|
+
interface PortfolioOverviewProps extends ViewProps {
|
|
4564
|
+
title: string;
|
|
4565
|
+
subtitle?: string;
|
|
4566
|
+
/** KPI tiles rendered above the sections, e.g. Focused / Open tasks / Initiatives. */
|
|
4567
|
+
stats: PortfolioOverviewStat[];
|
|
4568
|
+
/** Initiative groups, rendered top-to-bottom in the order given. */
|
|
4569
|
+
sections: PortfolioOverviewSection[];
|
|
4570
|
+
className?: string;
|
|
4571
|
+
}
|
|
4572
|
+
/**
|
|
4573
|
+
* PortfolioOverview — at-a-glance status across every tracked initiative: a
|
|
4574
|
+
* KPI row followed by initiative groups (typically Focused, then Backburner).
|
|
4575
|
+
* Composes Card / Metric / Eyebrow / {@link InitiativeCard} — presentational
|
|
4576
|
+
* only, all data supplied by props.
|
|
4577
|
+
*
|
|
4578
|
+
* Data plan: the caller is responsible for computing `stats` and `sections`
|
|
4579
|
+
* from its own source of truth (e.g. the active-work session-mining export).
|
|
4580
|
+
* This component has no fetch/store dependency, so wiring it to a live data
|
|
4581
|
+
* source is a caller-side concern — flagged here as the integration's only
|
|
4582
|
+
* open gap.
|
|
4583
|
+
*/
|
|
4584
|
+
declare function PortfolioOverview({ title, subtitle, stats, sections, className, ...props }: PortfolioOverviewProps): react_jsx_runtime.JSX.Element;
|
|
4585
|
+
|
|
4586
|
+
/** Split a path into its directory prefix (trailing slash kept) and basename. */
|
|
4587
|
+
declare function splitPath(path: string): {
|
|
4588
|
+
dir: string;
|
|
4589
|
+
base: string;
|
|
4590
|
+
};
|
|
4591
|
+
/** Basename size on the type scale, with the directory one step quieter. */
|
|
4592
|
+
type FilePathLabelSize = 'sm' | 'md';
|
|
4593
|
+
interface FilePathLabelProps extends ViewProps {
|
|
4594
|
+
/** A repo-relative path, e.g. `src/commands/open.ts`. */
|
|
4595
|
+
path: string;
|
|
4596
|
+
/** `md` for standalone rows, `sm` for dense contexts like chips. */
|
|
4597
|
+
size?: FilePathLabelSize;
|
|
4598
|
+
/** Render only the basename, dropping the directory prefix. */
|
|
4599
|
+
baseOnly?: boolean;
|
|
4600
|
+
className?: string;
|
|
4601
|
+
}
|
|
4602
|
+
/**
|
|
4603
|
+
* FilePathLabel — a file path with the directory dimmed and the basename bright.
|
|
4604
|
+
*
|
|
4605
|
+
* In a list of paths the basename is the identifier and the directory is
|
|
4606
|
+
* disambiguation, so they get different weight rather than one flat string. The
|
|
4607
|
+
* directory shrinks first under width pressure; the basename never truncates.
|
|
4608
|
+
*/
|
|
4609
|
+
declare function FilePathLabel({ path, size, baseOnly, className, ...props }: FilePathLabelProps): react_jsx_runtime.JSX.Element;
|
|
4610
|
+
|
|
4611
|
+
/** Fill per event kind, shared by the row's counts and the detail pane's tiles. */
|
|
4612
|
+
interface FileEventColors {
|
|
4613
|
+
reads: string;
|
|
4614
|
+
writes: string;
|
|
4615
|
+
edits: string;
|
|
4616
|
+
}
|
|
4617
|
+
/**
|
|
4618
|
+
* Reads/writes/edits read as *importance* rather than as peer categories: reads
|
|
4619
|
+
* are cheap and quiet, writes are the consequential ones, edits sit between.
|
|
4620
|
+
*/
|
|
4621
|
+
declare const FILE_EVENT_COLOR_SEMANTIC: FileEventColors;
|
|
4622
|
+
/**
|
|
4623
|
+
* The same three as *peer categories*, taken in order from the canonical
|
|
4624
|
+
* CVD-safe palette (TOKENS.md §2).
|
|
4625
|
+
*/
|
|
4626
|
+
declare const FILE_EVENT_COLOR_CATEGORICAL: FileEventColors;
|
|
4627
|
+
/**
|
|
4628
|
+
* The family default: the three event kinds are peer categories, so they take
|
|
4629
|
+
* the canonical CVD-safe palette in order rather than a hand-picked triple.
|
|
4630
|
+
* Costs three of `CATEGORICAL_CVD_SAFE_MAX` — a view that also plots series
|
|
4631
|
+
* needs to start from index 3, or supply its own `eventColors`.
|
|
4632
|
+
*/
|
|
4633
|
+
declare const FILE_EVENT_COLOR: FileEventColors;
|
|
4634
|
+
/** Per-file activity mined from session transcripts. */
|
|
4635
|
+
interface FileActivity {
|
|
4636
|
+
/** Repo-relative path. */
|
|
4637
|
+
path: string;
|
|
4638
|
+
reads: number;
|
|
4639
|
+
writes: number;
|
|
4640
|
+
edits: number;
|
|
4641
|
+
/** Total events across reads + writes + edits. */
|
|
4642
|
+
touches: number;
|
|
4643
|
+
/** Per-session net char delta, oldest first. Drives the sparkline. */
|
|
4644
|
+
timeline: number[];
|
|
4645
|
+
}
|
|
4646
|
+
interface FileActivityRowProps {
|
|
4647
|
+
file: FileActivity;
|
|
4648
|
+
/** Renders the selected treatment (one tone up from the list pane + leading accent bar). */
|
|
4649
|
+
selected?: boolean;
|
|
4650
|
+
onSelect?: () => void;
|
|
4651
|
+
/** Override the read/write/edit fills. Defaults to {@link FILE_EVENT_COLOR}. */
|
|
4652
|
+
eventColors?: FileEventColors;
|
|
4653
|
+
}
|
|
4654
|
+
/**
|
|
4655
|
+
* FileActivityRow — one file in the ranked "hottest files" list: its path, total
|
|
4656
|
+
* touches, the read/write/edit split, and a sparkline of per-session growth.
|
|
4657
|
+
*
|
|
4658
|
+
* Composes {@link FilePathLabel} and {@link SparkBars}. Used by
|
|
4659
|
+
* {@link FileHistoryExplorer}.
|
|
4660
|
+
*/
|
|
4661
|
+
declare function FileActivityRow({ file, selected, onSelect, eventColors, }: FileActivityRowProps): react_jsx_runtime.JSX.Element;
|
|
4662
|
+
|
|
4663
|
+
/** Another file that tends to change in the same session as this one. */
|
|
4664
|
+
interface FileCoChange {
|
|
4665
|
+
path: string;
|
|
4666
|
+
count: number;
|
|
4667
|
+
}
|
|
4668
|
+
/** {@link FileActivity} plus the history only the detail pane shows. */
|
|
4669
|
+
interface FileActivityDetailData extends FileActivity {
|
|
4670
|
+
/** Distinct sessions that touched this file. */
|
|
4671
|
+
sessions: number;
|
|
4672
|
+
charsAdded: number;
|
|
4673
|
+
charsRemoved: number;
|
|
4674
|
+
/** `charsAdded - charsRemoved`; negative means the file net-shrank. */
|
|
4675
|
+
netGrowth: number;
|
|
4676
|
+
firstTouched?: string | null;
|
|
4677
|
+
lastTouched?: string | null;
|
|
4678
|
+
coChange: FileCoChange[];
|
|
4679
|
+
}
|
|
4680
|
+
interface FileActivityDetailProps {
|
|
4681
|
+
file: FileActivityDetailData;
|
|
4682
|
+
/** Override the read/write/edit fills. Defaults to {@link FILE_EVENT_COLOR}. */
|
|
4683
|
+
eventColors?: FileEventColors;
|
|
4684
|
+
className?: string;
|
|
4685
|
+
}
|
|
4686
|
+
/**
|
|
4687
|
+
* FileActivityDetail — the right-hand pane of {@link FileHistoryExplorer}: one
|
|
4688
|
+
* file's full mined history. Activity split, net char growth over sessions, and
|
|
4689
|
+
* the files it changes together with — the co-change list being the part a
|
|
4690
|
+
* plain file tree cannot show.
|
|
4691
|
+
*
|
|
4692
|
+
* Composes Card / CardInset / Tile / Pill / DataRow / DateTime plus
|
|
4693
|
+
* {@link SparkBars}, {@link FilePathLabel} and {@link Eyebrow}.
|
|
4694
|
+
*
|
|
4695
|
+
* One lift only: the pane itself. Inside it the activity split reads as filled
|
|
4696
|
+
* tiles a plane up and the growth block as a `CardInset` well a plane down.
|
|
4697
|
+
*/
|
|
4698
|
+
declare function FileActivityDetail({ file, eventColors, className, }: FileActivityDetailProps): react_jsx_runtime.JSX.Element;
|
|
4699
|
+
|
|
4700
|
+
interface CoChangeChipProps {
|
|
4701
|
+
/** One side of the pair. */
|
|
4702
|
+
a: string;
|
|
4703
|
+
/** The other side. Order is not meaningful — co-change is symmetric. */
|
|
4704
|
+
b: string;
|
|
4705
|
+
/** How many sessions changed both files. */
|
|
4706
|
+
count: number;
|
|
4707
|
+
className?: string;
|
|
4708
|
+
}
|
|
4709
|
+
/**
|
|
4710
|
+
* CoChangeChip — one symmetric "these two files change together" pair.
|
|
4711
|
+
*
|
|
4712
|
+
* Only basenames are shown: at chip size the directory is noise, and the pair
|
|
4713
|
+
* is a pointer into {@link FileActivityDetail} rather than a full identifier.
|
|
4714
|
+
* Used by {@link FileHistoryExplorer}'s repo-wide co-change strip.
|
|
4715
|
+
*
|
|
4716
|
+
* @deprecated Use `<Pill tone="brand" size="xs">` — removed after AW-127 consumer migration.
|
|
4717
|
+
*/
|
|
4718
|
+
declare function CoChangeChip({ a, b, count, className }: CoChangeChipProps): react_jsx_runtime.JSX.Element;
|
|
4719
|
+
|
|
4720
|
+
/** A KPI shown in the strip above the explorer. */
|
|
4721
|
+
interface FileHistoryStat {
|
|
4722
|
+
label: string;
|
|
4723
|
+
value: string;
|
|
4724
|
+
}
|
|
4725
|
+
/** A repo-wide co-change pair, strongest first. */
|
|
4726
|
+
interface CoChangeEdge {
|
|
4727
|
+
a: string;
|
|
4728
|
+
b: string;
|
|
4729
|
+
count: number;
|
|
4730
|
+
}
|
|
4731
|
+
interface FileHistoryExplorerProps extends ViewProps {
|
|
4732
|
+
/** KPI tiles, e.g. Files / File events / Sessions / Transcripts. */
|
|
4733
|
+
stats: FileHistoryStat[];
|
|
4734
|
+
/** Files for the ranked list, already sorted (typically by descending touches). */
|
|
4735
|
+
files: FileActivityDetailData[];
|
|
4736
|
+
/** Repo-wide co-change pairs, already sorted by descending count. */
|
|
4737
|
+
coEdges?: CoChangeEdge[];
|
|
4738
|
+
/** Caption under the KPI strip explaining where the numbers came from. */
|
|
4739
|
+
provenance?: string;
|
|
4740
|
+
/** Cap on ranked rows rendered. */
|
|
4741
|
+
maxRows?: number;
|
|
4742
|
+
/** Cap on co-change chips rendered. */
|
|
4743
|
+
maxCoEdges?: number;
|
|
4744
|
+
/** Selected file path. Omit to let the explorer manage selection itself. */
|
|
4745
|
+
selectedPath?: string;
|
|
4746
|
+
/** Fires on row press. Required for the selection to move when `selectedPath` is set. */
|
|
4747
|
+
onSelectFile?: (path: string) => void;
|
|
4748
|
+
className?: string;
|
|
4749
|
+
}
|
|
4750
|
+
/**
|
|
4751
|
+
* FileHistoryExplorer — a file browser ranked by mined activity instead of
|
|
4752
|
+
* alphabetised by name: a KPI strip, a two-pane hottest-files list ⇄ detail,
|
|
4753
|
+
* and the repo's strongest co-change pairs.
|
|
4754
|
+
*
|
|
4755
|
+
* Composes Card / Tile / Divider plus {@link FileActivityRow},
|
|
4756
|
+
* {@link FileActivityDetail}, {@link CoChangeChip} and {@link Eyebrow}.
|
|
4757
|
+
* Selection is controlled when `selectedPath` is supplied and internal
|
|
4758
|
+
* otherwise.
|
|
4759
|
+
*
|
|
4760
|
+
* Data plan: presentational only — no fetch or store dependency. The caller
|
|
4761
|
+
* derives `stats`, `files` and `coEdges` from its own source of truth (the
|
|
4762
|
+
* active-work session-history miner). Wiring that export to these props is a
|
|
4763
|
+
* caller-side concern and the integration's only open gap; a shared adapter is
|
|
4764
|
+
* deliberately out of scope for this unit.
|
|
4765
|
+
*/
|
|
4766
|
+
declare function FileHistoryExplorer({ stats, files, coEdges, provenance, maxRows, maxCoEdges, selectedPath, onSelectFile, className, ...props }: FileHistoryExplorerProps): react_jsx_runtime.JSX.Element;
|
|
4767
|
+
|
|
4768
|
+
/**
|
|
4769
|
+
* A compact age label for a dense column: `today`, `4d ago`, `3mo ago`.
|
|
4770
|
+
*
|
|
4771
|
+
* Deliberately not `DateTime format="relative"` — that renders Intl prose ("4
|
|
4772
|
+
* days ago"), which is too long for a 74px column, and it reads `Date.now()`
|
|
4773
|
+
* internally so a story or a visual baseline could never be deterministic. `now`
|
|
4774
|
+
* is injected here for exactly that reason.
|
|
4775
|
+
*/
|
|
4776
|
+
declare function formatTaskAge(iso: string | null | undefined, now: number): string;
|
|
4777
|
+
/**
|
|
4778
|
+
* A session's wall-clock length as `1h 4m` or `42m`. Empty when the span is
|
|
4779
|
+
* missing, unparseable or not positive, so callers can drop the separator
|
|
4780
|
+
* rather than render `0m`.
|
|
4781
|
+
*/
|
|
4782
|
+
declare function formatSessionDuration(started: string, ended: string): string;
|
|
4783
|
+
|
|
4784
|
+
type TaskSortKey = 'slug' | 'id' | 'title' | 'severity' | 'priority' | 'estimate' | 'updated';
|
|
4785
|
+
/** Any column the table can leave out; `title` is the one column that always renders. */
|
|
4786
|
+
type TaskColumnKey = Exclude<TaskSortKey, 'title'> | 'tags';
|
|
4787
|
+
/** How the severity column renders: `auto` collapses to the dot below {@link COMPACT_SEVERITY_BELOW}. */
|
|
4788
|
+
type SeverityDisplay = 'auto' | 'full' | 'dot';
|
|
4789
|
+
/**
|
|
4790
|
+
* Table width under which severity collapses to its dot. Below this the fixed
|
|
4791
|
+
* columns leave the flexible title under ~220px, which is where titles stop
|
|
4792
|
+
* being scannable; the dot gives 68px back.
|
|
4793
|
+
*/
|
|
4794
|
+
declare const COMPACT_SEVERITY_BELOW = 840;
|
|
4795
|
+
interface TaskTableProps {
|
|
4796
|
+
tasks: TaskListItem[];
|
|
4797
|
+
/**
|
|
4798
|
+
* Reference timestamp for the age column. Injected rather than read from the
|
|
4799
|
+
* clock so stories, tests and visual baselines render identically forever.
|
|
4800
|
+
*/
|
|
4801
|
+
now: number;
|
|
4802
|
+
/** Column sorted on first render. Defaults to `priority`. */
|
|
4803
|
+
defaultSortKey?: TaskSortKey;
|
|
4804
|
+
/** Hides the severity legend above the grid. */
|
|
4805
|
+
hideLegend?: boolean;
|
|
4806
|
+
/** Severity column mode. Defaults to `auto`, driven by the table's measured width. */
|
|
4807
|
+
severityDisplay?: SeverityDisplay;
|
|
4808
|
+
/** Columns to leave out, for an embedded table that already knows its context. */
|
|
4809
|
+
hideColumns?: TaskColumnKey[];
|
|
4810
|
+
/**
|
|
4811
|
+
* Pins the width the column fit runs against instead of measuring it. For
|
|
4812
|
+
* stories and tests that need to hold one step of the drop order still.
|
|
4813
|
+
*/
|
|
4814
|
+
fitWidth?: number;
|
|
4815
|
+
/** Eyebrow over the grid. Defaults to the backlog wording, `N open · all initiatives`. */
|
|
4816
|
+
label?: string;
|
|
4817
|
+
className?: string;
|
|
4818
|
+
}
|
|
4819
|
+
/**
|
|
4820
|
+
* TaskTable — every open task across initiatives in one dense, sortable grid.
|
|
4821
|
+
*
|
|
4822
|
+
* Composes {@link Table} at `density="dense"` and drives it with
|
|
4823
|
+
* {@link useTable}, passing per-column comparators so severity ranks by meaning
|
|
4824
|
+
* and age reads newest-first. Rows are {@link TaskRow}; the legend tallies
|
|
4825
|
+
* {@link SeverityLabel}.
|
|
4826
|
+
*
|
|
4827
|
+
* Narrow it and it adapts twice, in order: severity collapses to its dot, then
|
|
4828
|
+
* whole columns drop along {@link TASK_DROP_ORDER}. `title` and `id` are not in
|
|
4829
|
+
* that order and never drop; under them the table scrolls horizontally.
|
|
4830
|
+
*/
|
|
4831
|
+
declare function TaskTable({ tasks, now, defaultSortKey, hideLegend, severityDisplay, hideColumns, fitWidth, label, className, }: TaskTableProps): react_jsx_runtime.JSX.Element;
|
|
4832
|
+
|
|
4833
|
+
/** One open task, as the task list renders it. */
|
|
4834
|
+
interface TaskListItem {
|
|
4835
|
+
/** Initiative slug the task belongs to. */
|
|
4836
|
+
slug: string;
|
|
4837
|
+
/** Per-initiative task id, e.g. `AW-22`. */
|
|
4838
|
+
id: string;
|
|
4839
|
+
title: string;
|
|
4840
|
+
severity?: TaskSeverity;
|
|
4841
|
+
/** Lower sorts first; unique within an initiative, not globally. */
|
|
4842
|
+
priority: number;
|
|
4843
|
+
/** Rough size. Absent means unestimated, which sorts last. */
|
|
4844
|
+
estimate?: number;
|
|
4845
|
+
tags?: string[];
|
|
4846
|
+
/** ISO date the task last changed, used for the age column. */
|
|
4847
|
+
updated: string;
|
|
4848
|
+
}
|
|
4849
|
+
/**
|
|
4850
|
+
* Fixed column widths, shared by {@link TaskRow} and {@link TaskTable}'s header
|
|
4851
|
+
* so the two cannot drift. `title` is the flexible column: it renders with no
|
|
4852
|
+
* width and only declares the floor it may be squeezed to.
|
|
4853
|
+
*
|
|
4854
|
+
* Every fixed width holds its own header — the uppercase label, the 4px gap and
|
|
4855
|
+
* the sort glyph, inside the dense cell's 16px of padding. A column narrower
|
|
4856
|
+
* than its own header is what let `SEV` and `PRI` paint over each other.
|
|
4857
|
+
*/
|
|
4858
|
+
declare const TASK_COLUMN_WIDTHS: {
|
|
4859
|
+
readonly slug: 132;
|
|
4860
|
+
readonly id: 66;
|
|
4861
|
+
/** The narrowest the flexible title column may be squeezed before a column drops instead. */
|
|
4862
|
+
readonly titleMin: 160;
|
|
4863
|
+
readonly severity: 112;
|
|
4864
|
+
/** The severity column once it has collapsed to its dot. */
|
|
4865
|
+
readonly severityCompact: 56;
|
|
4866
|
+
readonly priority: 56;
|
|
4867
|
+
readonly estimate: 56;
|
|
4868
|
+
readonly tags: 150;
|
|
4869
|
+
readonly age: 74;
|
|
4870
|
+
};
|
|
4871
|
+
interface TaskRowProps {
|
|
4872
|
+
task: TaskListItem;
|
|
4873
|
+
/** Pre-formatted age label (e.g. "3d ago"). Passed in so rows stay pure and deterministic. */
|
|
4874
|
+
ageLabel: string;
|
|
4875
|
+
/** Collapse severity to its dot (word on hover); the table decides this from its width. */
|
|
4876
|
+
severityDotOnly?: boolean;
|
|
4877
|
+
/** Columns the table left out; the row skips their cells so header and body stay aligned. */
|
|
4878
|
+
hideColumns?: TaskColumnKey[];
|
|
4879
|
+
}
|
|
4880
|
+
/**
|
|
4881
|
+
* TaskRow — one task as a dense grid row: initiative, id, title, severity,
|
|
4882
|
+
* priority, estimate, tags and age.
|
|
4883
|
+
*
|
|
4884
|
+
* Composes {@link TableRow} / {@link TableCell} for row semantics and density,
|
|
4885
|
+
* {@link SeverityLabel} for the severity dot, and {@link Pill} for tags. Used by
|
|
4886
|
+
* {@link TaskTable}.
|
|
4887
|
+
*/
|
|
4888
|
+
declare function TaskRow({ task, ageLabel, severityDotOnly, hideColumns }: TaskRowProps): react_jsx_runtime.JSX.Element;
|
|
4889
|
+
|
|
4890
|
+
/** How a linked reference reads: brand for the domain's own ids, link for cross-references, muted for asides. */
|
|
4891
|
+
type ProseLinkTone = 'brand' | 'link' | 'muted';
|
|
4892
|
+
/**
|
|
4893
|
+
* A pattern the prose auto-links. Patterns must not carry the `g` flag or
|
|
4894
|
+
* capture groups: the renderer combines them into one tokenizer.
|
|
4895
|
+
*/
|
|
4896
|
+
interface ProseLinker {
|
|
4897
|
+
/** Stable id, used in keys and test ids. */
|
|
4898
|
+
id: string;
|
|
4899
|
+
pattern: RegExp;
|
|
4900
|
+
tone?: ProseLinkTone;
|
|
4901
|
+
/** Text to show for a match. Defaults to the match itself. */
|
|
4902
|
+
label?: (ref: string) => string;
|
|
4903
|
+
/** When set the reference is pressable and exposes a link role. */
|
|
4904
|
+
onPress?: (ref: string) => void;
|
|
4905
|
+
}
|
|
4906
|
+
type ProseBlockType = 'h1' | 'h2' | 'h3' | 'li' | 'p';
|
|
4907
|
+
interface ProseBlock {
|
|
4908
|
+
type: ProseBlockType;
|
|
4909
|
+
text: string;
|
|
4910
|
+
}
|
|
4911
|
+
interface MarkdownProseProps {
|
|
4912
|
+
/** Markdown source. Headings, bullet lists, paragraphs, bold and code are understood. */
|
|
4913
|
+
body: string;
|
|
4914
|
+
/** Reference patterns to auto-link, tried in order. */
|
|
4915
|
+
linkers?: ProseLinker[];
|
|
4916
|
+
className?: string;
|
|
4917
|
+
testID?: string;
|
|
4918
|
+
}
|
|
4919
|
+
/**
|
|
4920
|
+
* Splits markdown into the block kinds this renderer understands. Consecutive
|
|
4921
|
+
* text lines join into one paragraph; a blank line ends it. An indented line
|
|
4922
|
+
* straight after a bullet continues that bullet. Deeper headings flatten to
|
|
4923
|
+
* h3, since session prose never needs more than three levels.
|
|
4924
|
+
*/
|
|
4925
|
+
declare function parseProseBlocks(body: string): ProseBlock[];
|
|
4926
|
+
/**
|
|
4927
|
+
* MarkdownProse — renders a small, predictable markdown subset as themed prose
|
|
4928
|
+
* and auto-links references the caller describes.
|
|
4929
|
+
*
|
|
4930
|
+
* It is deliberately not a full markdown engine: headings, bullet lists,
|
|
4931
|
+
* paragraphs, bold and code cover the notes, briefs and session logs this
|
|
4932
|
+
* system reads, and anything richer would need a design pass of its own.
|
|
4933
|
+
* Composes {@link Typography}. Used by `SessionDetail` (session logs) and the
|
|
4934
|
+
* initiative reader (brief and handoff prose).
|
|
4935
|
+
*/
|
|
4936
|
+
declare function MarkdownProse({ body, linkers, className, testID }: MarkdownProseProps): react_jsx_runtime.JSX.Element;
|
|
4937
|
+
|
|
4938
|
+
/** A per-initiative task id such as `AW-22` or `TD-07.14`. */
|
|
4939
|
+
declare const TASK_REF_PATTERN: RegExp;
|
|
4940
|
+
/** An Obsidian-style `[[name]]` link into notes or memory. */
|
|
4941
|
+
declare const WIKI_LINK_PATTERN: RegExp;
|
|
4942
|
+
/** A bare `#123` pull-request or issue number. */
|
|
4943
|
+
declare const PR_REF_PATTERN: RegExp;
|
|
4944
|
+
/** Every distinct task id in a body, in first-seen order. */
|
|
4945
|
+
declare function extractTaskRefs(body: string): string[];
|
|
4946
|
+
/** Task ids read in the brand colour and, when a handler is given, open the task. */
|
|
4947
|
+
declare function taskRefLinker(onPress?: (id: string) => void): ProseLinker;
|
|
4948
|
+
/** `[[name]]` links drop their brackets and read as links; the handler receives the bare name. */
|
|
4949
|
+
declare function wikiLinkLinker(onPress?: (name: string) => void): ProseLinker;
|
|
4950
|
+
/** PR numbers recede rather than compete with task ids; the handler receives the number. */
|
|
4951
|
+
declare function prRefLinker(onPress?: (number: number) => void): ProseLinker;
|
|
4952
|
+
interface SessionLinkHandlers {
|
|
4953
|
+
onPressTask?: (id: string) => void;
|
|
4954
|
+
onPressLink?: (name: string) => void;
|
|
4955
|
+
onPressPr?: (number: number) => void;
|
|
4956
|
+
}
|
|
4957
|
+
/** The three linkers a session log needs, in the order they should win a match. */
|
|
4958
|
+
declare function sessionLinkers(handlers?: SessionLinkHandlers): ProseLinker[];
|
|
4959
|
+
|
|
4960
|
+
/** One recorded session, as the session reader consumes it. */
|
|
4961
|
+
interface SessionSummary {
|
|
4962
|
+
id: string;
|
|
4963
|
+
/** The session file's name, when the host has it. */
|
|
4964
|
+
filename?: string;
|
|
4965
|
+
/** ISO timestamps. */
|
|
4966
|
+
started: string;
|
|
4967
|
+
ended: string;
|
|
4968
|
+
/** `canonical` is the mainline thread; anything else (`sidecar`, `adhoc`) is folded or parallel work. */
|
|
4969
|
+
track: string;
|
|
4970
|
+
/** The log's first heading, without the leading `#`. */
|
|
4971
|
+
title: string;
|
|
4972
|
+
/** The session log's markdown body. */
|
|
4973
|
+
body: string;
|
|
4974
|
+
}
|
|
4975
|
+
interface SessionListItemProps {
|
|
4976
|
+
session: SessionSummary;
|
|
4977
|
+
/** Reference instant for the age label, injected so renders are deterministic. */
|
|
4978
|
+
now: number;
|
|
4979
|
+
/** Renders the selected treatment (raised fill + leading accent bar). */
|
|
4980
|
+
selected?: boolean;
|
|
4981
|
+
onSelect?: () => void;
|
|
4982
|
+
}
|
|
4983
|
+
/** The row's footer as one string: age, wall-clock length, distinct tasks touched, and the track. */
|
|
4984
|
+
declare function sessionRowMeta(session: SessionSummary, now: number, taskCount: number): string;
|
|
4985
|
+
/** The exact end time behind the relative age. */
|
|
4986
|
+
declare function ExactTime({ session }: {
|
|
4987
|
+
session: SessionSummary;
|
|
4988
|
+
}): react_jsx_runtime.JSX.Element;
|
|
4989
|
+
/** The task ids behind the count. */
|
|
4990
|
+
declare function TaskIds({ refs }: {
|
|
4991
|
+
refs: string[];
|
|
4992
|
+
}): react_jsx_runtime.JSX.Element;
|
|
4993
|
+
/**
|
|
4994
|
+
* SessionListItem — one session in the reader's list, led by its title, with
|
|
4995
|
+
* a footer of age · duration · tasks touched · track. Hovering the age shows
|
|
4996
|
+
* the exact end time; hovering the task count lists the task ids.
|
|
4997
|
+
*
|
|
4998
|
+
* Composes {@link Tooltip} (controlled, so the row keeps its press),
|
|
4999
|
+
* {@link DateTime} and {@link Typography}. Used by {@link SessionList}.
|
|
5000
|
+
*/
|
|
5001
|
+
declare function SessionListItem({ session, now, selected, onSelect, }: SessionListItemProps): react_jsx_runtime.JSX.Element;
|
|
5002
|
+
|
|
5003
|
+
interface SessionListProps {
|
|
5004
|
+
/** Newest first is the expected order; the list renders what it is given. */
|
|
5005
|
+
sessions: SessionSummary[];
|
|
5006
|
+
/** Reference instant for the age labels, injected so renders are deterministic. */
|
|
5007
|
+
now: number;
|
|
5008
|
+
selectedId?: string;
|
|
5009
|
+
onSelect?: (session: SessionSummary) => void;
|
|
5010
|
+
/** Heading over the list. Defaults to the session count. */
|
|
5011
|
+
label?: string;
|
|
5012
|
+
className?: string;
|
|
5013
|
+
}
|
|
5014
|
+
interface Period {
|
|
5015
|
+
label: string;
|
|
5016
|
+
sessions: SessionSummary[];
|
|
5017
|
+
}
|
|
5018
|
+
/** The calendar month a session ended in, as the list's period label. */
|
|
5019
|
+
declare function sessionPeriod(iso: string): string;
|
|
5020
|
+
/** Consecutive sessions in the same month, in the order given. */
|
|
5021
|
+
declare function groupByPeriod(sessions: SessionSummary[]): Period[];
|
|
5022
|
+
/**
|
|
5023
|
+
* SessionList — the selectable list half of the session reader. Owns no
|
|
5024
|
+
* selection state: the host holds `selectedId` and pairs the list with a
|
|
5025
|
+
* `SessionDetail`, so the two can be laid out however the surface needs.
|
|
5026
|
+
* Sessions are grouped under a hairline divider per calendar month once the
|
|
5027
|
+
* list spans more than one.
|
|
5028
|
+
*
|
|
5029
|
+
* Composes {@link Eyebrow}, {@link Divider} and {@link SessionListItem}.
|
|
5030
|
+
*/
|
|
5031
|
+
declare function SessionList({ sessions, now, selectedId, onSelect, label, className, }: SessionListProps): react_jsx_runtime.JSX.Element;
|
|
5032
|
+
|
|
5033
|
+
interface SessionDetailProps extends SessionLinkHandlers {
|
|
5034
|
+
session: SessionSummary;
|
|
5035
|
+
/** Reference instant for the age label, injected so renders are deterministic. */
|
|
5036
|
+
now: number;
|
|
5037
|
+
/**
|
|
5038
|
+
* Task rows for the ids the log mentions, resolved by the host from its task
|
|
5039
|
+
* store. When given, the tasks-touched strip can expand into a table.
|
|
5040
|
+
*/
|
|
5041
|
+
tasks?: TaskListItem[];
|
|
5042
|
+
className?: string;
|
|
5043
|
+
}
|
|
5044
|
+
/** The body without its leading h1: the card header carries the title. */
|
|
5045
|
+
declare function stripLeadingHeading(body: string): string;
|
|
5046
|
+
/**
|
|
5047
|
+
* SessionDetail — one session log, readable: its title, when it ran and for
|
|
5048
|
+
* how long, the tasks it touched (as pills, or as a table when the host
|
|
5049
|
+
* supplies the rows), then the markdown body with task ids, `[[name]]` links
|
|
5050
|
+
* and PR numbers auto-linked.
|
|
5051
|
+
*
|
|
5052
|
+
* Holds no selection state; pair it with {@link SessionList} in the host.
|
|
5053
|
+
* Composes {@link Card}, {@link Divider}, {@link Pill}, {@link Collapse},
|
|
5054
|
+
* {@link DateTime}, {@link TaskTable} and {@link MarkdownProse}.
|
|
5055
|
+
*/
|
|
5056
|
+
declare function SessionDetail({ session, now, tasks, onPressTask, onPressLink, onPressPr, className, }: SessionDetailProps): react_jsx_runtime.JSX.Element;
|
|
5057
|
+
|
|
5058
|
+
interface InitiativeHeaderProps {
|
|
5059
|
+
title: string;
|
|
5060
|
+
/** Short slug shown under the title, e.g. `active-work`. */
|
|
5061
|
+
slug: string;
|
|
5062
|
+
state: InitiativeState;
|
|
5063
|
+
/** Focused rank (1-based). Shown as `#N` for a ranked state. */
|
|
5064
|
+
rank?: number;
|
|
5065
|
+
/** Ship-target label, e.g. `2026-Q3`. */
|
|
5066
|
+
shipTarget?: string;
|
|
5067
|
+
/** ISO date the brief last changed. */
|
|
5068
|
+
updated?: string;
|
|
5069
|
+
className?: string;
|
|
5070
|
+
}
|
|
5071
|
+
/**
|
|
5072
|
+
* InitiativeHeader — an initiative's identity line: title, slug, state, rank,
|
|
5073
|
+
* ship target and when it was last touched.
|
|
5074
|
+
*
|
|
5075
|
+
* Shares the state vocabulary with {@link InitiativeCard} through
|
|
5076
|
+
* `INITIATIVE_STATE_META`. Composes {@link StatusDot}, {@link Pill},
|
|
5077
|
+
* {@link DateTime} and {@link Typography}. Used by the initiative reader.
|
|
5078
|
+
*/
|
|
5079
|
+
declare function InitiativeHeader({ title, slug, state, rank, shipTarget, updated, className, }: InitiativeHeaderProps): react_jsx_runtime.JSX.Element;
|
|
5080
|
+
|
|
5081
|
+
/** An initiative's durable brief, as the reader consumes it. */
|
|
5082
|
+
interface InitiativeBriefData {
|
|
5083
|
+
slug: string;
|
|
5084
|
+
title: string;
|
|
5085
|
+
state: string;
|
|
5086
|
+
rank?: number | null;
|
|
5087
|
+
shipTarget?: string | null;
|
|
5088
|
+
updated: string;
|
|
5089
|
+
/** The brief's markdown body. */
|
|
5090
|
+
body: string;
|
|
5091
|
+
}
|
|
5092
|
+
/** A brief section: an `##` heading and the prose beneath it, up to the next `##`. */
|
|
5093
|
+
interface BriefSection {
|
|
5094
|
+
heading: string;
|
|
5095
|
+
body: string;
|
|
5096
|
+
}
|
|
5097
|
+
interface InitiativeBriefProps {
|
|
5098
|
+
brief: InitiativeBriefData;
|
|
5099
|
+
/** Reference patterns to auto-link in the prose. */
|
|
5100
|
+
linkers?: ProseLinker[];
|
|
5101
|
+
className?: string;
|
|
5102
|
+
}
|
|
5103
|
+
/**
|
|
5104
|
+
* Splits a brief into its `##` sections, dropping the leading `#` title (the
|
|
5105
|
+
* header already shows it). Anything before the first `##` becomes a leading
|
|
5106
|
+
* section with an empty heading, so a brief with no sections still renders.
|
|
5107
|
+
*/
|
|
5108
|
+
declare function splitBriefSections(body: string): BriefSection[];
|
|
5109
|
+
/**
|
|
5110
|
+
* InitiativeBrief — an initiative's brief prose as a single-open accordion of
|
|
5111
|
+
* its `##` sections: click any heading to open it, or step through them with
|
|
5112
|
+
* the prev/next controls in the header, which close the current section and
|
|
5113
|
+
* open the next. Prose before the first `##` always shows. References
|
|
5114
|
+
* auto-link from `linkers`.
|
|
5115
|
+
*
|
|
5116
|
+
* Composes {@link Eyebrow}, {@link MarkdownProse} and {@link Typography}. Used
|
|
5117
|
+
* by the initiative reader.
|
|
5118
|
+
*/
|
|
5119
|
+
declare function InitiativeBrief({ brief, linkers, className }: InitiativeBriefProps): react_jsx_runtime.JSX.Element;
|
|
5120
|
+
|
|
5121
|
+
/** What a loop is about, so the reader can colour and label its kind. */
|
|
5122
|
+
type OpenLoopKind = 'task' | 'pr' | 'prose';
|
|
5123
|
+
/** One hanging thread from the session ledger, as the reader consumes it. */
|
|
5124
|
+
interface OpenLoop {
|
|
5125
|
+
/** Stable `<session-file-stem>#<id>` reference. */
|
|
5126
|
+
ref: string;
|
|
5127
|
+
kind: OpenLoopKind;
|
|
5128
|
+
/** The loop text, auto-linked like any prose. */
|
|
5129
|
+
text: string;
|
|
5130
|
+
/** The task this loop tracks, when kind is `task`. */
|
|
5131
|
+
targetRef?: string;
|
|
5132
|
+
/** ISO time the loop was opened; drives the age label. */
|
|
5133
|
+
openedAt?: string;
|
|
5134
|
+
/** The session file that opened it. */
|
|
5135
|
+
sessionFile?: string;
|
|
5136
|
+
}
|
|
5137
|
+
interface OpenLoopsProps {
|
|
5138
|
+
loops: OpenLoop[];
|
|
5139
|
+
/** Reference instant for the age labels, injected so renders are deterministic. */
|
|
5140
|
+
now: number;
|
|
5141
|
+
/** Reference patterns to auto-link in each loop's text. */
|
|
5142
|
+
linkers?: ProseLinker[];
|
|
5143
|
+
/** Heading over the list. Defaults to the loop count. */
|
|
5144
|
+
label?: string;
|
|
5145
|
+
/** Rendered when there are no open loops. */
|
|
5146
|
+
emptyLabel?: string;
|
|
5147
|
+
className?: string;
|
|
5148
|
+
}
|
|
5149
|
+
/**
|
|
5150
|
+
* OpenLoops — the initiative's hanging threads from the session ledger: each
|
|
5151
|
+
* loop's kind, age and auto-linked text. This is the durable "current state"
|
|
5152
|
+
* a session picks up, in place of a hand-maintained handoff document.
|
|
5153
|
+
*
|
|
5154
|
+
* Composes {@link Eyebrow}, {@link Pill}, {@link Divider} and
|
|
5155
|
+
* {@link MarkdownProse}. Used by the initiative reader.
|
|
5156
|
+
*/
|
|
5157
|
+
declare function OpenLoops({ loops, now, linkers, label, emptyLabel, className, }: OpenLoopsProps): react_jsx_runtime.JSX.Element;
|
|
5158
|
+
|
|
5159
|
+
/** The apps that are expected to mount this shell. */
|
|
5160
|
+
type BrandKey = 'voltras' | 'audiobook' | 'active-work' | 'agents' | 'brain';
|
|
5161
|
+
interface BrandPreset {
|
|
5162
|
+
/** The mark glyph, rendered at 14px through the accent token via `currentColor`. */
|
|
5163
|
+
mark: ReactNode;
|
|
5164
|
+
/** Uppercase product wordmark. */
|
|
5165
|
+
wordmark: string;
|
|
5166
|
+
/** Semantic text token that colours the mark. */
|
|
5167
|
+
accentClassName: string;
|
|
5168
|
+
/**
|
|
5169
|
+
* The same accent as a background token, for the nav's active bar. Declared as
|
|
5170
|
+
* a literal alongside its `text-*` twin because Tailwind only emits classes it
|
|
5171
|
+
* can see in the source — a name built at runtime is never generated.
|
|
5172
|
+
*/
|
|
5173
|
+
accentBarClassName: string;
|
|
5174
|
+
/** Default "/ subtitle" for that app's shell. */
|
|
5175
|
+
subtitle: string;
|
|
5176
|
+
}
|
|
5177
|
+
declare const brandPresets: Record<BrandKey, BrandPreset>;
|
|
5178
|
+
/** Every brand key, in the order the stories present them. */
|
|
5179
|
+
declare const brandKeys: BrandKey[];
|
|
5180
|
+
|
|
4193
5181
|
interface BrandLockupProps extends ViewProps {
|
|
4194
|
-
/**
|
|
5182
|
+
/** Which app's identity to render. Defaults to `voltras`. */
|
|
5183
|
+
brand?: BrandKey;
|
|
5184
|
+
/** Replace the preset's mark glyph. */
|
|
5185
|
+
mark?: ReactNode;
|
|
5186
|
+
/** Replace the preset's wordmark. */
|
|
5187
|
+
wordmark?: string;
|
|
5188
|
+
/** Replace the preset's accent — a semantic `text-*` token class for the mark. */
|
|
5189
|
+
accentClassName?: string;
|
|
5190
|
+
/** The "/ subtitle" that follows the wordmark. Defaults to the brand's own. */
|
|
4195
5191
|
subtitle?: string;
|
|
4196
5192
|
/** Show the subtitle. Hidden at tablet width and below (S1-Q4 responsive). */
|
|
4197
5193
|
showSubtitle?: boolean;
|
|
4198
5194
|
className?: string;
|
|
4199
5195
|
}
|
|
4200
5196
|
/**
|
|
4201
|
-
* Product identity lockup for the top bar:
|
|
4202
|
-
*
|
|
5197
|
+
* Product identity lockup for the top bar: mark + wordmark + optional subtitle.
|
|
5198
|
+
* Generic over the app: pick a `brand` preset, or override `mark` / `wordmark` /
|
|
5199
|
+
* `accentClassName` / `subtitle` piecemeal for an app that has no preset yet.
|
|
5200
|
+
* Composes an icon primitive + Typography. S1 · BrandLockup.
|
|
5201
|
+
*/
|
|
5202
|
+
declare function BrandLockup({ brand, mark, wordmark, accentClassName, subtitle, showSubtitle, className, ...props }: BrandLockupProps): react_jsx_runtime.JSX.Element;
|
|
5203
|
+
|
|
5204
|
+
interface TopBarProps {
|
|
5205
|
+
/** Which app identity the default {@link BrandLockup} renders. */
|
|
5206
|
+
brand?: BrandKey;
|
|
5207
|
+
/** Brand subtitle. Defaults to the brand preset's own. */
|
|
5208
|
+
subtitle?: string;
|
|
5209
|
+
/** Force the subtitle on/off; defaults to container-responsive (hidden below ~1024px). */
|
|
5210
|
+
showSubtitle?: boolean;
|
|
5211
|
+
/**
|
|
5212
|
+
* Replace the whole brand region. Wins over `brand` / `subtitle`, and opts out
|
|
5213
|
+
* of the responsive subtitle collapse — the node owns its own behaviour.
|
|
5214
|
+
*/
|
|
5215
|
+
leading?: ReactNode;
|
|
5216
|
+
/**
|
|
5217
|
+
* App chrome for the right cluster, left → right. An array is rendered with the
|
|
5218
|
+
* bar's own vertical dividers between the items, so an app supplies its
|
|
5219
|
+
* controls and the shell keeps the divider rhythm.
|
|
5220
|
+
*/
|
|
5221
|
+
trailing?: ReactNode | ReactNode[];
|
|
5222
|
+
/** The moment to display in the clock (Date/timestamp). Omit for a live ticking clock. */
|
|
5223
|
+
time?: number | Date;
|
|
5224
|
+
/** Force the clock on/off; defaults to container-responsive (hidden below ~720px). */
|
|
5225
|
+
showClock?: boolean;
|
|
5226
|
+
className?: string;
|
|
5227
|
+
}
|
|
5228
|
+
/**
|
|
5229
|
+
* S1 · TopBar — the persistent shell chrome band, generic over the app. Brand
|
|
5230
|
+
* (left) + a `trailing` cluster of app-supplied chrome and the wall clock (clock
|
|
5231
|
+
* edge-pinned so spacing stays stable as the items' text changes). Collapses
|
|
5232
|
+
* subtitle then clock as its container narrows.
|
|
5233
|
+
*
|
|
5234
|
+
* @example
|
|
5235
|
+
* <TopBar brand="brain" trailing={[<IndexStatus />, <SearchScope />]} />
|
|
5236
|
+
*/
|
|
5237
|
+
declare function TopBar({ brand, subtitle, showSubtitle, leading, trailing, time, showClock, className, }: TopBarProps): react_jsx_runtime.JSX.Element;
|
|
5238
|
+
|
|
5239
|
+
interface NavItemProps {
|
|
5240
|
+
/** The nav glyph (an icon from `components/icons`, rendered ~20px via `currentColor`). */
|
|
5241
|
+
icon: ReactNode;
|
|
5242
|
+
/** Short label shown under the glyph (uppercased for display; used as the accessible name). */
|
|
5243
|
+
label: string;
|
|
5244
|
+
/** Active category → left accent bar + accent-colored glyph & label. */
|
|
5245
|
+
active?: boolean;
|
|
5246
|
+
/**
|
|
5247
|
+
* A set is running for this category while it is NOT the active view
|
|
5248
|
+
* (live-elsewhere) → a quiet muted-green label tint. Ignored when `active`.
|
|
5249
|
+
*/
|
|
5250
|
+
live?: boolean;
|
|
5251
|
+
/** Semantic `text-*` token for the active glyph and label. Defaults to the Voltras brand. */
|
|
5252
|
+
accentClassName?: string;
|
|
5253
|
+
/** Semantic `bg-*` token for the active bar. Pair it with `accentClassName`. */
|
|
5254
|
+
accentBarClassName?: string;
|
|
5255
|
+
onPress?: () => void;
|
|
5256
|
+
className?: string;
|
|
5257
|
+
}
|
|
5258
|
+
/**
|
|
5259
|
+
* Shell S2 · NavItem — one category button in the {@link SideNav}: a 20px glyph
|
|
5260
|
+
* over an uppercase micro-label in a 46×46 target. The button spans the full 60px
|
|
5261
|
+
* rail so the active **left accent bar** sits flush to the rail's edge. States:
|
|
5262
|
+
* active = accent bar + the accent token; `live` (while not active) tints only the
|
|
5263
|
+
* label `status-success-dark` (the glyph stays dim); otherwise dim `text-tertiary`.
|
|
5264
|
+
*
|
|
5265
|
+
* The accent follows the mounting app's brand, so a Brain shell reads yellow
|
|
5266
|
+
* throughout rather than showing a Voltras-orange active item under its own lockup.
|
|
5267
|
+
*/
|
|
5268
|
+
declare function NavItem({ icon, label, active, live, accentClassName, accentBarClassName, onPress, className, }: NavItemProps): react_jsx_runtime.JSX.Element;
|
|
5269
|
+
|
|
5270
|
+
interface SideNavItem {
|
|
5271
|
+
/** Stable category key — matches `activeKey` / `liveKey`. */
|
|
5272
|
+
key: string;
|
|
5273
|
+
/** Micro-label shown under the glyph. */
|
|
5274
|
+
label: string;
|
|
5275
|
+
/** The glyph node (rendered ~20px via `currentColor`). */
|
|
5276
|
+
icon: ReactNode;
|
|
5277
|
+
}
|
|
5278
|
+
interface SideNavProps {
|
|
5279
|
+
/** Category items, top → bottom. The app owns its own categories. */
|
|
5280
|
+
items: SideNavItem[];
|
|
5281
|
+
/** Key of the active category. */
|
|
5282
|
+
activeKey: string;
|
|
5283
|
+
/** Called with the tapped item's key. */
|
|
5284
|
+
onNavigate?: (key: string) => void;
|
|
5285
|
+
/**
|
|
5286
|
+
* Key of a category with live activity while it is NOT active (e.g. a set
|
|
5287
|
+
* running off its view) → a quiet green cue on that item's label.
|
|
5288
|
+
*/
|
|
5289
|
+
liveKey?: string | null;
|
|
5290
|
+
/** Semantic `text-*` token for the active item. Defaults to the Voltras brand. */
|
|
5291
|
+
accentClassName?: string;
|
|
5292
|
+
/** Semantic `bg-*` token for the active bar. Pair it with `accentClassName`. */
|
|
5293
|
+
accentBarClassName?: string;
|
|
5294
|
+
className?: string;
|
|
5295
|
+
}
|
|
5296
|
+
/**
|
|
5297
|
+
* Shell S2 · SideNav — the persistent 60px left rail that switches the main
|
|
5298
|
+
* viewport between an app's categories. Presentational: it renders `items` and
|
|
5299
|
+
* reports taps via `onNavigate`; the app owns its categories, routing, and which
|
|
5300
|
+
* key is `live`. Active item shows a left accent bar in the app's brand accent;
|
|
5301
|
+
* `liveKey` (when not the active view) tints that item's label a muted green.
|
|
5302
|
+
* Fixed 60px at every width — labels sit under the glyph, so they never change
|
|
5303
|
+
* the rail width.
|
|
5304
|
+
*/
|
|
5305
|
+
declare function SideNav({ items, activeKey, onNavigate, liveKey, accentClassName, accentBarClassName, className, }: SideNavProps): react_jsx_runtime.JSX.Element;
|
|
5306
|
+
|
|
5307
|
+
interface AppShellProps {
|
|
5308
|
+
/** Which app identity the default {@link TopBar} and nav accent render. */
|
|
5309
|
+
brand?: BrandKey;
|
|
5310
|
+
/** Brand subtitle on the default top bar. */
|
|
5311
|
+
subtitle?: string;
|
|
5312
|
+
/** App chrome for the default top bar's right cluster (divider-separated). */
|
|
5313
|
+
topBarTrailing?: ReactNode | ReactNode[];
|
|
5314
|
+
/** Replace the whole top bar. Wins over `brand` / `subtitle` / `topBarTrailing`. */
|
|
5315
|
+
topBar?: ReactNode;
|
|
5316
|
+
/** Nav categories, top → bottom. */
|
|
5317
|
+
navItems?: SideNavItem[];
|
|
5318
|
+
/** Active nav category key. */
|
|
5319
|
+
activeKey?: string;
|
|
5320
|
+
/** A category with off-view live activity → a quiet cue on that item. */
|
|
5321
|
+
liveKey?: string | null;
|
|
5322
|
+
onNavigate?: (key: string) => void;
|
|
5323
|
+
/** Replace the whole left rail. Wins over `navItems` / `activeKey` / `liveKey`. */
|
|
5324
|
+
nav?: ReactNode;
|
|
5325
|
+
/** Main content region. A placeholder renders when omitted. */
|
|
5326
|
+
children?: ReactNode;
|
|
5327
|
+
className?: string;
|
|
5328
|
+
}
|
|
5329
|
+
/**
|
|
5330
|
+
* `AppShell` — the generic dashboard chrome: a {@link TopBar} band over a
|
|
5331
|
+
* {@link SideNav} rail and a `children` content region. It knows nothing about
|
|
5332
|
+
* any one app: chrome arrives through the `topBarTrailing` slot (or the whole
|
|
5333
|
+
* `topBar` / `nav` slots), and categories through `navItems`. An app builds its
|
|
5334
|
+
* own shell by composing this one — see `shell/workout/WorkoutShell`.
|
|
5335
|
+
*
|
|
5336
|
+
* @example
|
|
5337
|
+
* <AppShell brand="brain" navItems={brainNavItems} activeKey={key} onNavigate={go}>
|
|
5338
|
+
* <BrainPage />
|
|
5339
|
+
* </AppShell>
|
|
4203
5340
|
*/
|
|
4204
|
-
declare function
|
|
5341
|
+
declare function AppShell({ brand, subtitle, topBarTrailing, topBar, navItems, activeKey, liveKey, onNavigate, nav, children, className, }: AppShellProps): react_jsx_runtime.JSX.Element;
|
|
4205
5342
|
|
|
4206
5343
|
type SessionState = 'live' | 'rest' | 'idle';
|
|
4207
5344
|
interface SessionStatePillProps extends ViewProps {
|
|
@@ -4215,6 +5352,8 @@ interface SessionStatePillProps extends ViewProps {
|
|
|
4215
5352
|
* The global session-state readout (dot + label). Shared: the top bar's status
|
|
4216
5353
|
* and the Live-view header both use it (this is the ledger's "StatusPill",
|
|
4217
5354
|
* Family C — built once). S1 · SessionStatePill.
|
|
5355
|
+
*
|
|
5356
|
+
* @deprecated Use `<Pill tone="…" leading="dot">` — removed after AW-127 consumer migration.
|
|
4218
5357
|
*/
|
|
4219
5358
|
declare function SessionStatePill({ state, label, className, ...props }: SessionStatePillProps): react_jsx_runtime.JSX.Element;
|
|
4220
5359
|
|
|
@@ -4272,7 +5411,15 @@ interface DeviceMenuProps {
|
|
|
4272
5411
|
*/
|
|
4273
5412
|
declare function DeviceMenu({ devices, isOpen, onOpenChange, onSelectDevice, className, }: DeviceMenuProps): react_jsx_runtime.JSX.Element;
|
|
4274
5413
|
|
|
4275
|
-
|
|
5414
|
+
/** The four workout-dashboard categories with their locked S2 glyphs (activity · history · layers · figure). */
|
|
5415
|
+
declare const workoutNavItems: SideNavItem[];
|
|
5416
|
+
/**
|
|
5417
|
+
* @deprecated Use `workoutNavItems` — these are the workout app's categories,
|
|
5418
|
+
* not a generic shell default. `SideNav.items` is required now (AW-132).
|
|
5419
|
+
*/
|
|
5420
|
+
declare const defaultNavItems: SideNavItem[];
|
|
5421
|
+
|
|
5422
|
+
interface WorkoutTopBarProps {
|
|
4276
5423
|
/** Global session state → the status pill. */
|
|
4277
5424
|
state: SessionState;
|
|
4278
5425
|
/** Devices for the connection glyph + dropdown. */
|
|
@@ -4281,89 +5428,31 @@ interface TopBarProps {
|
|
|
4281
5428
|
time?: number | Date;
|
|
4282
5429
|
/** Brand subtitle. Default "wall dashboard". */
|
|
4283
5430
|
subtitle?: string;
|
|
4284
|
-
/** Force the subtitle on/off; defaults to container-responsive
|
|
5431
|
+
/** Force the subtitle on/off; defaults to container-responsive. */
|
|
4285
5432
|
showSubtitle?: boolean;
|
|
4286
|
-
/** Force the clock on/off; defaults to container-responsive
|
|
5433
|
+
/** Force the clock on/off; defaults to container-responsive. */
|
|
4287
5434
|
showClock?: boolean;
|
|
4288
5435
|
onSelectDevice?: (device: Device) => void;
|
|
4289
5436
|
className?: string;
|
|
4290
5437
|
}
|
|
4291
5438
|
/**
|
|
4292
|
-
*
|
|
4293
|
-
*
|
|
4294
|
-
*
|
|
4295
|
-
* container narrows.
|
|
5439
|
+
* The workout app's top bar — the generic {@link TopBar} with the workout's own
|
|
5440
|
+
* chrome in its `trailing` slot: session state, then the device menu. The bar
|
|
5441
|
+
* adds its dividers and the clock; this component only supplies the items.
|
|
4296
5442
|
*/
|
|
4297
|
-
declare function
|
|
5443
|
+
declare function WorkoutTopBar({ state, devices, time, subtitle, showSubtitle, showClock, onSelectDevice, className, }: WorkoutTopBarProps): react_jsx_runtime.JSX.Element;
|
|
4298
5444
|
|
|
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
5445
|
/**
|
|
4315
|
-
*
|
|
4316
|
-
*
|
|
4317
|
-
*
|
|
4318
|
-
*
|
|
4319
|
-
*
|
|
5446
|
+
* `WorkoutShell` — the workout wall-dashboard chrome. Composes the generic
|
|
5447
|
+
* {@link AppShell} and fills its top-bar slot with the workout's own
|
|
5448
|
+
* {@link WorkoutTopBar} (session state + device menu) and its nav slot with the
|
|
5449
|
+
* four workout categories. The generic shell knows none of this; this component
|
|
5450
|
+
* is the whole workout-specific surface. Driven entirely by props.
|
|
4320
5451
|
*/
|
|
4321
|
-
|
|
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 {
|
|
5452
|
+
interface WorkoutShellProps {
|
|
4364
5453
|
/** Active nav category key. */
|
|
4365
5454
|
activeKey?: string;
|
|
4366
|
-
/** Nav categories, top → bottom. Defaults to
|
|
5455
|
+
/** Nav categories, top → bottom. Defaults to the four workout categories. */
|
|
4367
5456
|
navItems?: SideNavItem[];
|
|
4368
5457
|
/** A category with off-view live activity → a quiet cue on that item. */
|
|
4369
5458
|
liveKey?: string | null;
|
|
@@ -4379,7 +5468,11 @@ interface DashboardShellProps {
|
|
|
4379
5468
|
children?: ReactNode;
|
|
4380
5469
|
className?: string;
|
|
4381
5470
|
}
|
|
4382
|
-
declare function
|
|
5471
|
+
declare function WorkoutShell({ activeKey, navItems, liveKey, state, devices, subtitle, onNavigate, onSelectDevice, children, className, }: WorkoutShellProps): react_jsx_runtime.JSX.Element;
|
|
5472
|
+
/** @deprecated Renamed to `WorkoutShell` — same props (AW-132). Removed after consumer migration. */
|
|
5473
|
+
declare const DashboardShell: typeof WorkoutShell;
|
|
5474
|
+
/** @deprecated Renamed to `WorkoutShellProps` (AW-132). */
|
|
5475
|
+
type DashboardShellProps = WorkoutShellProps;
|
|
4383
5476
|
|
|
4384
5477
|
/**
|
|
4385
5478
|
* Utility function to merge Tailwind CSS classes with proper conflict resolution.
|
|
@@ -4392,10 +5485,20 @@ declare function DashboardShell({ activeKey, navItems, liveKey, state, devices,
|
|
|
4392
5485
|
declare function cn(...inputs: ClassValue[]): string;
|
|
4393
5486
|
|
|
4394
5487
|
/**
|
|
4395
|
-
*
|
|
5488
|
+
* Compact integer formatting for dense readouts (stat tiles, sparkline
|
|
5489
|
+
* captions) where a full-precision number would blow the column width.
|
|
5490
|
+
*/
|
|
5491
|
+
/** 1234 → "1.2k", 1048576 → "1.0M", 42 → "42". Sign is preserved. */
|
|
5492
|
+
declare function formatCompact(n: number): string;
|
|
5493
|
+
/** Like {@link formatCompact} but always signed: 514689 → "+514.7k", -20 → "-20". */
|
|
5494
|
+
declare function formatSignedCompact(n: number): string;
|
|
5495
|
+
|
|
5496
|
+
/**
|
|
5497
|
+
* Color utility functions for the design system.
|
|
4396
5498
|
*
|
|
4397
|
-
* lighten
|
|
4398
|
-
*
|
|
5499
|
+
* `lighten`/`darken` are re-exported from `theme/color-utils`, which does the
|
|
5500
|
+
* HSV math. They are hover/state adjustments, not a depth ladder — planes come
|
|
5501
|
+
* from the grey ramp.
|
|
4399
5502
|
*/
|
|
4400
5503
|
|
|
4401
5504
|
type StatusType = 'success' | 'error' | 'warning' | 'info';
|
|
@@ -4589,4 +5692,4 @@ interface PrescriptionInput {
|
|
|
4589
5692
|
*/
|
|
4590
5693
|
declare function formatPrescription(p: PrescriptionInput | null | undefined): string | null;
|
|
4591
5694
|
|
|
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 };
|
|
5695
|
+
export { Accordion, AccordionButton, type AccordionButtonProps, AccordionItem, type AccordionItemProps, AccordionPanel, type AccordionPanelProps, type AccordionProps, ActivityIcon, Alert, AlertDescription, type AlertDescriptionProps, type AlertProps, type AlertStatus, AlertTitle, type AlertTitleProps, AlertTriangleIcon, type AlertVariant, AppShell, type AppShellProps, Autocomplete, type AutocompleteOption, type AutocompleteProps, Avatar, AvatarBadge, type AvatarBadgeProps, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarSize, AwardIcon, BAND_GAP, BAND_H, Badge, type BadgeColor, type BadgeProps, type BadgeSize, BadgeText, type BadgeTextProps, type BadgeVariant, BaseBadge, type BaseBadgeProps, type BaseBadgeSize, type BaseBadgeVariant, BluetoothIcon, BotIcon, BrainIcon, type BrandKey, BrandLockup, type BrandLockupProps, type BrandPreset, BreadcrumbItem, type BreadcrumbItemProps, Breadcrumbs, type BreadcrumbsProps, type BriefSection, Button, type ButtonColor, ButtonIcon, type ButtonIconProps, type ButtonProps, type ButtonSize, ButtonSpinner, type ButtonSpinnerProps, ButtonText, type ButtonTextProps, type ButtonVariant, CARD_HEIGHT_SHARE_STACKED, CARD_WIDTH_BASE, CARD_WIDTH_MAX, CARD_WIDTH_XL_RATIO, COMPACT_SEVERITY_BELOW, Caption, type CaptionProps, Card, CardContent, type CardContentProps, CardDescription, type CardDescriptionProps, type CardElevation, CardFooter, type CardFooterProps, CardHeader, type CardHeaderProps, type CardProps, CardSkeleton, type CardSkeletonProps, CardTitle, type CardTitleProps, type CardVariant, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxProps, type CheckboxSize, Chip, type ChipColor, type ChipProps, type ChipSize, type ChipVariant, CircleSlashIcon, CircularProgress, type CircularProgressProps, CircularTimer, type CircularTimerProps, CoChangeChip, type CoChangeChipProps, type CoChangeEdge, Collapse, CollapseButton, type CollapseButtonProps, CollapseContent, type CollapseContentProps, type CollapseProps, type ColumnFitResult, DRIFT_GREY, DashboardShell, type DashboardShellProps, DataRow, type DataRowProps, DateTime, type DateTimeFormat, type DateTimeProps, DeviationBar, type DeviationBarProps, type Device, type DeviceConnState, DeviceIndicator, type DeviceIndicatorProps, DeviceMenu, type DeviceMenuProps, DeviceRow, type DeviceRowProps, type DeviceRowState, type DimensionTone, Divider, type DividerOrientation, type DividerProps, Drawer, DrawerBody, type DrawerBodyProps, DrawerFooter, type DrawerFooterProps, DrawerHeader, type DrawerHeaderProps, type DrawerPlacement, type DrawerProps, type DrawerSize, DualGhostSpark, type DualGhostSparkProps, DumbbellIcon, ElevationLevel, EmptyState, type EmptyStateProps, ExactTime, ExerciseCardHeading, type ExerciseCardHeadingProps, ExerciseHeading, type ExerciseHeadingProps, ExerciseIndicatorKind, Eyebrow, type EyebrowProps, FILE_EVENT_COLOR, FILE_EVENT_COLOR_CATEGORICAL, FILE_EVENT_COLOR_SEMANTIC, FatigueLights, type FatigueLightsProps, FatigueMeter, type FatigueMeterProps, type FatigueVerdict, type FatigueVerdictState, type FieldState, type FieldWrapperProps, type FileActivity, FileActivityDetail, type FileActivityDetailData, type FileActivityDetailProps, FileActivityRow, type FileActivityRowProps, type FileCoChange, type FileEventColors, FileHistoryExplorer, type FileHistoryExplorerProps, type FileHistoryStat, FilePathLabel, type FilePathLabelProps, type FilePathLabelSize, FormActions, type FormActionsProps, type FormErrors, FormField, type FormFieldProps, FormRow, type FormRowProps, FormSection, type FormSectionProps, type FormTouched, type FormValues, GRIND_THRESHOLD, Gauge, type GaugeProps, type GaugeThreshold, GhostBand, type GhostBandProps, GhostBloom, type GhostBloomProps, GhostSpark, type GhostSparkProps, GlowIntensity, HERO_EYEBROW_ALLOWANCE, HStack, Heading, type HeadingProps, HeadphonesIcon, HelpTip, type HelpTipIcon, type HelpTipPlacement, type HelpTipProps, type HelpTipSize, HistoryIcon, INITIATIVE_STATE_META, IconBox, type IconBoxProps, type IconProps, Indicator, type IndicatorColor, type IndicatorProps, type IndicatorPulse, type IndicatorSize, InfoIcon, InitiativeBrief, type InitiativeBriefData, type InitiativeBriefProps, InitiativeCard, type InitiativeCardProps, type InitiativeCardTopTask, InitiativeHeader, type InitiativeHeaderProps, type InitiativeState, Input, InputBar, type InputBarProps, InputGroup, type InputGroupProps, type InputProps, type InputSize, type InputVariant, IntensityBar, type IntensityBarProps, KanbanIcon, Label, type LabelProps, LabelWithHelp, type LabelWithHelpProps, LayersIcon, LiftOptions, Link, type LinkColor, type LinkProps, type LinkUnderline, ListItem, ListItemContent, type ListItemContentProps, ListItemDivider, type ListItemDividerProps, ListItemIcon, type ListItemIconProps, type ListItemProps, ListItemTrailing, type ListItemTrailingProps, type LiveAuraCategory, LiveAuraFrame, type LiveAuraFrameProps, LiveFatigueCard, type LiveFatigueCardProps, type LiveFatigueModel, LiveFatiguePanel, type LiveFatiguePanelProps, type LiveFatiguePanelVelocity, METRIC_FONT, MarkdownProse, type MarkdownProseProps, Menu, MenuDivider, type MenuDividerProps, MenuGroup, type MenuGroupProps, MenuItem, type MenuItemProps, MenuList, type MenuListProps, type MenuProps, MenuTrigger, type MenuTriggerProps, Metric, MetricCell, type MetricCellProps, MetricGroup, type MetricGroupProps, type MetricProps, type MetricTileData, MetricTiles, type MetricTilesProps, type MetricTrend, Modal, ModalBody, type ModalBodyProps, ModalCloseButton, type ModalCloseButtonProps, ModalContent, type ModalContentProps, ModalFooter, type ModalFooterProps, ModalHeader, type ModalHeaderProps, type ModalProps, type ModalSize, ModalTitle, type ModalTitleProps, MuscleGroupChip, type MuscleGroupChipProps, NavItem, type NavItemProps, type OnSurfaceRole, type OpenLoop, type OpenLoopKind, OpenLoops, type OpenLoopsProps, Overline, type OverlineProps, PANEL_BREAKPOINTS, PHASE_AXIS_COLOR, type PRType, PR_REF_PATTERN, type PaceTone, type PanelBodySplit, type PanelLayout, type PanelTier, Paragraph, type ParagraphProps, PasswordInput, type PasswordInputProps, PersonStandingIcon, type PhaseSegment, Pill, type PillColor, type PillProps, type PillSize, type PillTone, type PillVariant, PlaceholderStrip, type PlaceholderStripProps, Popover, PopoverCloseButton, type PopoverCloseButtonProps, PopoverContent, type PopoverContentProps, type PopoverPlacement, type PopoverProps, PopoverTrigger, type PopoverTriggerProps, PortfolioOverview, type PortfolioOverviewProps, type PortfolioOverviewSection, type PortfolioOverviewStat, PrBadge, type PrBadgeProps, PrHistoryModal, type PrHistoryModalProps, type PrRecord, type PrRecordType, type PrescriptionInput, Progress, type ProgressColor, type ProgressProps, type ProgressSize, ProgressSteps, type ProgressStepsProps, type ProgressVariant, type ProseBlock, type ProseBlockType, type ProseLinkTone, type ProseLinker, type Pt, RED_DEEP, RED_LIGHT, RED_MID, Radio, type RadioColor, RadioGroup, type RadioGroupProps, type RadioProps, type RadioSize, ReadinessCheck, type ReadinessCheckProps, type ReadinessFactor, type RepRomPoint, type RepVelocityCurve, type ResolvedSurface, RestTimer, type RestTimerProps, type ResultType, RomProgressionChart, type RomProgressionChartProps, SEVERITY_BAR_COLOR, SEVERITY_META, SEVERITY_ORDER, SEVERITY_RANK, SILVER, STATE_LABEL, type SamplePhase, ScaleIcon, Scatter, type ScatterAxis, type ScatterDatum, type ScatterProps, ScheduleTiles, type ScheduleTilesProps, Section, SectionContent, type SectionContentProps, SectionHeader, type SectionHeaderProps, type SectionProps, SegmentedBar, type SegmentedBarProps, type SegmentedBarSegment, SegmentedProgressBar, type SegmentedProgressBarProps, type SegmentedProgressBarSegment, Select, type SelectOption, type SelectProps, SessionDetail, type SessionDetailProps, SessionHeader, type SessionHeaderPlanEntry, type SessionHeaderProps, type SessionLinkHandlers, SessionList, SessionListItem, type SessionListItemProps, type SessionListProps, SessionRail, type SessionRailExercise, type SessionRailProps, type SessionState, SessionStatePill, type SessionStatePillProps, type SessionSummary, SetRowProps, SetStrip, type SetStripProps, SetStripSet, SetTableHeader, type SetTableHeaderProps, SetsRepsLoad, type SetsRepsLoadProps, type SeverityDisplay, SeverityLabel, type SeverityLabelProps, SideNav, type SideNavItem, type SideNavProps, Sidebar, SidebarContent, type SidebarContentProps, SidebarDivider, type SidebarDividerProps, SidebarFooter, type SidebarFooterProps, SidebarHeader, type SidebarHeaderProps, SidebarItem, type SidebarItemProps, type SidebarProps, SidebarSection, type SidebarSectionProps, Skeleton, type SkeletonAnimation, SkeletonCard, type SkeletonCardProps, SkeletonCircle, type SkeletonCircleProps, SkeletonListItem, type SkeletonListItemProps, type SkeletonProps, SkeletonText, type SkeletonTextProps, type SkeletonVariant, type SortDirection, SparkBars, type SparkBarsProps, Sparkline, type SparklineProps, Spinner, type SpinnerColor, type SpinnerProps, type SpinnerSize, Stack, type StackProps, StarIcon, StatusDot, type StatusDotProps, type StatusDotVariant, StatusPill, type StatusPillProps, type StatusPillStatus, type StatusType, StepContent, type StepContentProps, StepIndicator, type StepIndicatorProps, StepLabel, type StepLabelProps, type StepStatus, Stepper, type StepperOrientation, type StepperProps, Step as StepperStep, type StepProps as StepperStepProps, SupersetWrapper, type SupersetWrapperProps, Surface, SurfaceContext, type SurfaceContextValue, type SurfaceDepthProps, SurfaceLevel, type SurfaceProps, SvgIcon, type SvgIconProps, Switch, type SwitchProps, type SwitchSize, TASK_COLUMN_WIDTHS, TASK_REF_PATTERN, TONE_COLOR, Tab, TabList, type TabListProps, TabPanel, type TabPanelProps, TabPanels, type TabPanelsProps, type TabProps, Table, TableBody, type TableBodyProps, TableCell, type TableCellProps, type TableColumnFit, type TableComparator, type TableDensity, TableHeader, TableHeaderCell, type TableHeaderCellProps, type TableHeaderProps, TablePagination, type TablePaginationProps, type TableProps, TableRow, type TableRowProps, Tabs, type TabsOrientation, type TabsProps, type TabsVariant, type TaskColumnKey, TaskIds, type TaskListItem, TaskRow, type TaskRowProps, type TaskSeverity, TaskTable, type TaskTableProps, TempoDisplay, type TempoDisplayProps, type TempoLivePhase, type TempoLiveReadout, type TempoLiveState, ThemeMode, Tile, type TileProps, type TimerMode, TimerReadout, type TimerReadoutProps, type TimerState, Toast, type ToastConfig, type ToastPosition, type ToastProps, ToastProvider, type ToastProviderProps, type ToastStatus, ToolbarButton, ToolbarButtonGroup, type ToolbarButtonGroupProps, type ToolbarButtonProps, type ToolbarButtonSize, type ToolbarButtonVariant, Tooltip, type TooltipPlacement, type TooltipProps, TopBar, type TopBarProps, Treemap, type TreemapDatum, type TreemapProps, type TreemapScale, TrendingDownIcon, Typography, type TypographyAlign, type TypographyColor, type TypographyProps, type TypographyVariant, type UseColumnFitResult, type UseMeasuredWidthResult, type UseTableOptions, type UseTableReturn, type UseTimerOptions, VStack, VelocityHero, type VelocityHeroProps, type VelocitySample, VerdictHero, type VerdictHeroProps, VoltrasMark, VolumeLandmarkBar, type VolumeLandmarkBarProps, VolumeLandmarks, type VolumeStatus, type VolumeZone, WIKI_LINK_PATTERN, type WarmUpStatus, type WarmUpValidation, WeightBadge, type WeightBadgeProps, type WeightBadgeSize, WorkoutShell, type WorkoutShellProps, WorkoutTopBar, type WorkoutTopBarProps, ZoneTrack, type ZoneTrackBand, type ZoneTrackMarker, type ZoneTrackProps, type ZoneTrackTick, type ZoneTrackZone, alpha, auraForVerdict, brandKeys, brandPresets, cn, composeValidators, createFieldId, defaultNavItems, extractTaskRefs, fitColumns, formatCompact, formatDateTime, formatDuration, formatPrescription, formatSessionDuration, formatSignedCompact, formatSignedPct, formatTaskAge, formatVelocity, getContrastText, getFieldAriaProps, getFieldValidationProps, getLuminance, getResultColor, getStatusColor, ghostLineColor, groupByPeriod, hasMaxLength, hasMinLength, isEmpty, isValidEmail, liveAuraColor, mergePhaseSegments, onSurfaceColors, paceTone, paceToneColor, panelBodySplit, panelLayout, panelTier, parseProseBlocks, prRefLinker, resolveSurfaceDepth, roundRpe, roundTempo, roundWeight, rpeColor, sessionLinkers, sessionPeriod, sessionRowMeta, severityRank, smoothPath, splitBriefSections, splitPath, statusPillColor, stripLeadingHeading, taskRefLinker, useColumnFit, useHoverState, useMeasuredWidth, useOnSurfaceColor, useResolvedSurface, useSurface, useSurfaceMode, useTable, useTimer, useToast, useToolbarButton, validationRules, wikiLinkLinker, workoutNavItems };
|