@titan-design/react-ui 0.6.0 → 0.8.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/dist/bodymap.js +12 -7
- package/dist/bodymap.js.map +1 -1
- package/dist/bodymap.mjs +12 -7
- package/dist/bodymap.mjs.map +1 -1
- package/dist/index.d.mts +956 -128
- package/dist/index.d.ts +956 -128
- package/dist/index.js +2873 -981
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2826 -982
- package/dist/index.mjs.map +1 -1
- package/dist/{pages-MO0JCySL.d.mts → pages-DCFBqp79.d.mts} +289 -57
- package/dist/{pages-D7Jlssvp.d.ts → pages-_fI3-x7Z.d.ts} +289 -57
- package/dist/pages.d.mts +1 -1
- package/dist/pages.d.ts +1 -1
- package/dist/pages.js +1659 -799
- package/dist/pages.js.map +1 -1
- package/dist/pages.mjs +1660 -800
- package/dist/pages.mjs.map +1 -1
- package/dist/theme/index.d.mts +16 -82
- package/dist/theme/index.d.ts +16 -82
- package/dist/theme/index.js +13 -115
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/index.mjs +13 -115
- package/dist/theme/index.mjs.map +1 -1
- package/dist/theme/tokens-css.js +14 -6
- package/dist/theme/tokens-css.js.map +1 -1
- package/dist/theme/tokens-css.mjs +14 -6
- package/dist/theme/tokens-css.mjs.map +1 -1
- package/package.json +1 -1
- package/src/arch/Architecture.stories.tsx +870 -0
- package/src/arch/annotations.json +48 -0
- package/src/arch/arch-graph.json +4301 -0
- package/src/components/custom/CircularTimer/CircularTimer.stories.tsx +90 -0
- package/src/components/custom/CircularTimer/CircularTimer.test.tsx +62 -0
- package/src/components/custom/CircularTimer/CircularTimer.tsx +112 -0
- package/src/components/custom/CircularTimer/index.ts +1 -0
- package/src/components/custom/DateTime/DateTime.stories.tsx +1 -1
- package/src/components/custom/EmptyState/EmptyState.stories.tsx +1 -1
- package/src/components/custom/Gauge/Gauge.stories.tsx +1 -1
- package/src/components/custom/Metric/Metric.stories.tsx +1 -1
- package/src/components/custom/Scatter/Scatter.stories.tsx +1 -1
- package/src/components/custom/Sidebar/Sidebar.stories.tsx +1 -1
- package/src/components/custom/Table/Table.stories.tsx +1 -1
- package/src/components/custom/TimerReadout/TimerReadout.stories.tsx +62 -0
- package/src/components/custom/TimerReadout/TimerReadout.test.tsx +72 -0
- package/src/components/custom/TimerReadout/TimerReadout.tsx +75 -0
- package/src/components/custom/TimerReadout/index.ts +1 -0
- package/src/components/custom/Treemap/Treemap.stories.tsx +1 -1
- package/src/components/custom/Typography/Typography.stories.tsx +1 -1
- package/src/components/custom/Workout/ActiveWorkoutPage.stories.tsx +21 -13
- package/src/components/custom/Workout/ActiveWorkoutPage.test.tsx +16 -13
- package/src/components/custom/Workout/ActiveWorkoutPage.tsx +9 -15
- package/src/components/custom/Workout/BaseBadge.stories.tsx +1 -1
- package/src/components/custom/Workout/BodyMap.stories.tsx +1 -1
- package/src/components/custom/Workout/BodyMapDetailPanel.stories.tsx +1 -1
- package/src/components/custom/Workout/CapacityBandChart.stories.tsx +1 -1
- package/src/components/custom/Workout/DeviationBar.stories.tsx +1 -1
- package/src/components/custom/Workout/ExerciseCard.stories.tsx +51 -66
- package/src/components/custom/Workout/ExerciseCard.test.tsx +146 -143
- package/src/components/custom/Workout/ExerciseCard.tsx +176 -198
- package/src/components/custom/Workout/ExerciseCardHeading.stories.tsx +99 -0
- package/src/components/custom/Workout/ExerciseCardHeading.test.tsx +72 -0
- package/src/components/custom/Workout/ExerciseCardHeading.tsx +43 -0
- package/src/components/custom/Workout/ExerciseCardUnified.stories.tsx +151 -0
- package/src/components/custom/Workout/ExerciseDetailPage.stories.tsx +5 -3
- package/src/components/custom/Workout/ExerciseDetailPage.test.tsx +4 -4
- package/src/components/custom/Workout/ExerciseDetailPage.tsx +4 -5
- package/src/components/custom/Workout/ExerciseHeading.stories.tsx +81 -0
- package/src/components/custom/Workout/ExerciseHeading.test.tsx +77 -0
- package/src/components/custom/Workout/ExerciseHeading.tsx +85 -0
- package/src/components/custom/Workout/ExerciseIndicator.stories.tsx +110 -0
- package/src/components/custom/Workout/ExerciseIndicator.test.tsx +93 -0
- package/src/components/custom/Workout/ExerciseIndicator.tsx +120 -0
- package/src/components/custom/Workout/FatigueMeter.stories.tsx +51 -0
- package/src/components/custom/Workout/FatigueMeter.test.tsx +85 -0
- package/src/components/custom/Workout/FatigueMeter.tsx +86 -0
- package/src/components/custom/Workout/InputBar.stories.tsx +1 -1
- package/src/components/custom/Workout/IntensityBar.stories.tsx +1 -1
- package/src/components/custom/Workout/LiveAuraFrame.stories.tsx +153 -0
- package/src/components/custom/Workout/LiveAuraFrame.test.tsx +74 -0
- package/src/components/custom/Workout/LiveAuraFrame.tsx +105 -0
- package/src/components/custom/Workout/MesoCard.stories.tsx +1 -1
- package/src/components/custom/Workout/MesoProgressBar.stories.tsx +1 -1
- package/src/components/custom/Workout/MesoStatusCard.stories.tsx +1 -1
- package/src/components/custom/Workout/MetricTiles.stories.tsx +60 -0
- package/src/components/custom/Workout/MetricTiles.test.tsx +58 -0
- package/src/components/custom/Workout/MetricTiles.tsx +48 -0
- package/src/components/custom/Workout/MuscleGroupChip.stories.tsx +1 -1
- package/src/components/custom/Workout/PlaceholderStrip.stories.tsx +1 -1
- package/src/components/custom/Workout/PrBadge.stories.tsx +1 -1
- package/src/components/custom/Workout/PrHistoryModal.stories.tsx +1 -1
- package/src/components/custom/Workout/ProgramPlanningPage.stories.tsx +4 -16
- package/src/components/custom/Workout/ProgramPlanningPage.tsx +8 -6
- package/src/components/custom/Workout/README.md +193 -4
- package/src/components/custom/Workout/ReadinessCheck.stories.tsx +1 -1
- package/src/components/custom/Workout/RestTimer.stories.tsx +133 -3
- package/src/components/custom/Workout/RestTimer.test.tsx +73 -0
- package/src/components/custom/Workout/RestTimer.tsx +155 -59
- package/src/components/custom/Workout/RowInventory.stories.tsx +405 -0
- package/src/components/custom/Workout/S3FullRail.stories.tsx +34 -0
- package/src/components/custom/Workout/S3SessionPace.stories.tsx +95 -0
- package/src/components/custom/Workout/S3SessionRailHeading.stories.tsx +61 -0
- package/src/components/custom/Workout/S3SetTypes.stories.tsx +176 -0
- package/src/components/custom/Workout/S3WorkoutExpansion.stories.tsx +240 -0
- package/src/components/custom/Workout/ScheduleTiles.stories.tsx +40 -0
- package/src/components/custom/Workout/ScheduleTiles.test.tsx +34 -0
- package/src/components/custom/Workout/ScheduleTiles.tsx +70 -0
- package/src/components/custom/Workout/SegmentedBar.stories.tsx +99 -0
- package/src/components/custom/Workout/SegmentedBar.test.tsx +77 -0
- package/src/components/custom/Workout/SegmentedBar.tsx +172 -0
- package/src/components/custom/Workout/SegmentedProgressBar.stories.tsx +50 -0
- package/src/components/custom/Workout/SegmentedProgressBar.test.tsx +80 -0
- package/src/components/custom/Workout/SegmentedProgressBar.tsx +67 -0
- package/src/components/custom/Workout/SessionHeader.stories.tsx +121 -0
- package/src/components/custom/Workout/SessionHeader.test.tsx +122 -0
- package/src/components/custom/Workout/SessionHeader.tsx +152 -0
- package/src/components/custom/Workout/SessionRail.stories.tsx +153 -0
- package/src/components/custom/Workout/SessionRail.test.tsx +86 -0
- package/src/components/custom/Workout/SessionRail.tsx +126 -0
- package/src/components/custom/Workout/SetBar.stories.tsx +124 -0
- package/src/components/custom/Workout/SetBar.test.tsx +123 -0
- package/src/components/custom/Workout/SetBar.tsx +171 -0
- package/src/components/custom/Workout/SetRow.stories.tsx +50 -100
- package/src/components/custom/Workout/SetRow.test.tsx +94 -166
- package/src/components/custom/Workout/SetRow.tsx +169 -232
- package/src/components/custom/Workout/SetStrip.stories.tsx +154 -0
- package/src/components/custom/Workout/SetStrip.test.tsx +109 -0
- package/src/components/custom/Workout/SetStrip.tsx +71 -0
- package/src/components/custom/Workout/SetTableHeader.stories.tsx +66 -0
- package/src/components/custom/Workout/SetTableHeader.test.tsx +47 -0
- package/src/components/custom/Workout/SetTableHeader.tsx +88 -0
- package/src/components/custom/Workout/SetsRepsLoad.stories.tsx +47 -0
- package/src/components/custom/Workout/SetsRepsLoad.test.tsx +44 -0
- package/src/components/custom/Workout/SetsRepsLoad.tsx +52 -0
- package/src/components/custom/Workout/Sparkline.stories.tsx +1 -1
- package/src/components/custom/Workout/StatusDot.stories.tsx +1 -1
- package/src/components/custom/Workout/StatusPill.stories.tsx +59 -0
- package/src/components/custom/Workout/StatusPill.test.tsx +63 -0
- package/src/components/custom/Workout/StatusPill.tsx +88 -0
- package/src/components/custom/Workout/StrengthTrendChart.stories.tsx +1 -1
- package/src/components/custom/Workout/SupersetWrapper.stories.tsx +1 -1
- package/src/components/custom/Workout/TempoBar.stories.tsx +70 -1
- package/src/components/custom/Workout/TempoBar.test.tsx +119 -4
- package/src/components/custom/Workout/TempoBar.tsx +107 -22
- package/src/components/custom/Workout/TempoDisplay.stories.tsx +12 -1
- package/src/components/custom/Workout/TempoDisplay.tsx +23 -33
- package/src/components/custom/Workout/TrainingStatusPage.stories.tsx +1 -1
- package/src/components/custom/Workout/VelocityStrip.modalities.stories.tsx +254 -0
- package/src/components/custom/Workout/VelocityStrip.responsive.stories.tsx +145 -0
- package/src/components/custom/Workout/VelocityStrip.stories.tsx +262 -56
- package/src/components/custom/Workout/VelocityStrip.test.tsx +440 -141
- package/src/components/custom/Workout/VelocityStrip.tsx +776 -141
- package/src/components/custom/Workout/VolumeLandmarkBar.stories.tsx +73 -0
- package/src/components/custom/Workout/VolumeLandmarkBar.test.tsx +119 -0
- package/src/components/custom/Workout/VolumeLandmarkBar.tsx +154 -0
- package/src/components/custom/Workout/WeekRow.stories.tsx +1 -1
- package/src/components/custom/Workout/WeightBadge.stories.tsx +1 -1
- package/src/components/custom/Workout/WorkoutCard.stories.tsx +2 -6
- package/src/components/custom/Workout/WorkoutCard.test.tsx +13 -46
- package/src/components/custom/Workout/WorkoutPill.stories.tsx +1 -1
- package/src/components/custom/Workout/ZoneTrack.stories.tsx +139 -0
- package/src/components/custom/Workout/ZoneTrack.test.tsx +234 -0
- package/src/components/custom/Workout/ZoneTrack.tsx +373 -0
- package/src/components/custom/Workout/index.ts +55 -2
- package/src/components/custom/Workout/metricText.stories.tsx +69 -0
- package/src/components/custom/Workout/metricText.tsx +34 -0
- package/src/components/custom/Workout/paceTone.test.ts +29 -0
- package/src/components/custom/Workout/paceTone.ts +27 -0
- package/src/components/custom/Workout/setHeadingKit.tsx +177 -0
- package/src/components/custom/index.ts +2 -0
- package/src/components/custom/stepper/Stepper.stories.tsx +1 -1
- package/src/components/icons/icons.stories.tsx +67 -2
- package/src/components/icons/icons.test.tsx +32 -2
- package/src/components/icons/icons.tsx +108 -0
- package/src/components/shell/BrandLockup.stories.tsx +3 -3
- package/src/components/shell/DashboardShell.stories.tsx +65 -0
- package/src/components/shell/DashboardShell.test.tsx +42 -0
- package/src/components/shell/DashboardShell.tsx +74 -0
- package/src/components/shell/DeviceIndicator.stories.tsx +2 -2
- package/src/components/shell/DeviceMenu.stories.tsx +5 -5
- package/src/components/shell/DeviceRow.stories.tsx +3 -3
- package/src/components/shell/NavItem.stories.tsx +52 -0
- package/src/components/shell/NavItem.test.tsx +35 -0
- package/src/components/shell/NavItem.tsx +75 -0
- package/src/components/shell/README.md +30 -0
- package/src/components/shell/SessionRailSpecimen.stories.tsx +753 -0
- package/src/components/shell/SessionStatePill.stories.tsx +3 -3
- package/src/components/shell/SessionStatePill.tsx +1 -1
- package/src/components/shell/SideNav.stories.tsx +81 -0
- package/src/components/shell/SideNav.test.tsx +51 -0
- package/src/components/shell/SideNav.tsx +74 -0
- package/src/components/shell/TopBar.stories.tsx +5 -5
- package/src/components/shell/index.ts +5 -0
- package/src/components/ui/alert/Alert.stories.tsx +86 -3
- package/src/components/ui/alert/Alert.test.tsx +52 -0
- package/src/components/ui/alert/Alert.tsx +54 -20
- package/src/components/ui/autocomplete/Autocomplete.stories.tsx +1 -1
- package/src/components/ui/avatar/Avatar.stories.tsx +1 -1
- package/src/components/ui/badge/Badge.stories.tsx +1 -1
- package/src/components/ui/breadcrumbs/Breadcrumbs.stories.tsx +1 -1
- package/src/components/ui/button/Button.stories.tsx +1 -1
- package/src/components/ui/card/Card.stories.tsx +1 -1
- package/src/components/ui/checkbox/Checkbox.stories.tsx +1 -1
- package/src/components/ui/chip/Chip.stories.tsx +1 -1
- package/src/components/ui/collapse/Collapse.stories.tsx +1 -1
- package/src/components/ui/data-row/DataRow.stories.tsx +1 -1
- package/src/components/ui/divider/Divider.stories.tsx +1 -1
- package/src/components/ui/drawer/Drawer.stories.tsx +1 -1
- package/src/components/ui/form-field/FormField.stories.tsx +1 -1
- package/src/components/ui/help-tip/HelpTip.stories.tsx +1 -1
- package/src/components/ui/icon-box/IconBox.stories.tsx +1 -1
- package/src/components/ui/index.ts +1 -0
- package/src/components/ui/indicator/Indicator.stories.tsx +2 -2
- package/src/components/ui/indicator/Indicator.test.tsx +1 -0
- package/src/components/ui/indicator/Indicator.tsx +6 -1
- package/src/components/ui/input/Input.stories.tsx +1 -1
- package/src/components/ui/link/Link.stories.tsx +1 -1
- package/src/components/ui/list-item/ListItem.stories.tsx +1 -1
- package/src/components/ui/menu/Menu.stories.tsx +1 -1
- package/src/components/ui/modal/Modal.stories.tsx +1 -1
- package/src/components/ui/pill/Pill.stories.tsx +1 -1
- package/src/components/ui/popover/Popover.stories.tsx +1 -1
- package/src/components/ui/progress/Progress.stories.tsx +1 -1
- package/src/components/ui/progress/Progress.tsx +47 -22
- package/src/components/ui/radio/Radio.stories.tsx +1 -1
- package/src/components/ui/section/Section.stories.tsx +1 -1
- package/src/components/ui/select/Select.stories.tsx +1 -1
- package/src/components/ui/skeleton/Skeleton.stories.tsx +1 -1
- package/src/components/ui/spinner/Spinner.stories.tsx +1 -1
- package/src/components/ui/stack/Stack.stories.tsx +1 -1
- package/src/components/ui/surface/Surface.stories.tsx +1 -1
- package/src/components/ui/switch/Switch.stories.tsx +1 -1
- package/src/components/ui/tabs/Tabs.stories.tsx +1 -1
- package/src/components/ui/tile/Tile.stories.tsx +79 -0
- package/src/components/ui/tile/Tile.test.tsx +48 -0
- package/src/components/ui/tile/Tile.tsx +64 -0
- package/src/components/ui/tile/index.ts +2 -0
- package/src/components/ui/toast/Toast.stories.tsx +1 -1
- package/src/components/ui/toolbar-button/ToolbarButton.stories.tsx +1 -1
- package/src/components/ui/tooltip/Tooltip.stories.tsx +1 -1
- package/src/examples/react-hook-form/ReactHookForm.stories.tsx +1 -1
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useTimer.test.ts +150 -0
- package/src/hooks/useTimer.ts +77 -0
- package/src/index.ts +3 -0
- package/src/pages.ts +1 -1
- package/src/stories/PresetShowcase.stories.tsx +1 -1
- package/src/stories/ThemePresets.stories.tsx +1 -1
- package/src/theme/ColorSystem.stories.tsx +1 -1
- package/src/theme/Colors.stories.tsx +5 -8
- package/src/theme/config.ts +4 -0
- package/src/theme/elevation.stories.tsx +1 -1
- package/src/theme/global.css +5 -1
- package/src/theme/shadows.stories.tsx +1 -1
- package/src/theme/tokens/primitives.ts +11 -107
- package/src/theme/tokens/semantic.ts +8 -0
- package/src/theme/workout-tokens.ts +11 -7
- package/tailwind.config.js +5 -0
|
@@ -2,20 +2,6 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import { ViewProps } from 'react-native';
|
|
3
3
|
import { c as MesoStatusCardProps } from './MesoStatusCard-CQk71hSi.mjs';
|
|
4
4
|
|
|
5
|
-
type PRType = 'e1rm' | 'weight' | 'reps' | 'volume' | 'velocity';
|
|
6
|
-
interface PrBadgeProps extends ViewProps {
|
|
7
|
-
/** PR type determines auto-generated label */
|
|
8
|
-
type?: PRType;
|
|
9
|
-
/** Display label (e.g., "PR e1RM", "PR 5RM"). Auto-generated from type if omitted. */
|
|
10
|
-
label?: string;
|
|
11
|
-
/** Show only the star icon, no text label */
|
|
12
|
-
compact?: boolean;
|
|
13
|
-
/** Trigger pop animation on mount */
|
|
14
|
-
animate?: boolean;
|
|
15
|
-
className?: string;
|
|
16
|
-
}
|
|
17
|
-
declare function PrBadge({ type, label: labelProp, compact, animate, className, ...props }: PrBadgeProps): react_jsx_runtime.JSX.Element;
|
|
18
|
-
|
|
19
5
|
/**
|
|
20
6
|
* Spec statuses: completed | current | upcoming | deload.
|
|
21
7
|
* `next` and `missed` are additive extras supported by this implementation.
|
|
@@ -59,8 +45,20 @@ interface VelocityStripProps extends ViewProps {
|
|
|
59
45
|
* Drives both bar height and — in the default path — zone color. Callers must
|
|
60
46
|
* feed mean (not peak) concentric velocity so bar color, height, and the
|
|
61
47
|
* summary label all describe one metric.
|
|
48
|
+
*
|
|
49
|
+
* Optional: provide exactly one of `velocities` or {@link VelocityStripProps.set}.
|
|
50
|
+
* When neither is given the strip renders nothing.
|
|
62
51
|
*/
|
|
63
|
-
velocities
|
|
52
|
+
velocities?: number[];
|
|
53
|
+
/**
|
|
54
|
+
* Optional structured strength-training set descriptor (see {@link VelocitySet}).
|
|
55
|
+
* When present it supersedes `velocities`: the done-velocity array is derived
|
|
56
|
+
* from the set (so mean / loss / zone summaries still work) and the strip is
|
|
57
|
+
* drawn as a typed slot list — grey todo, cyan variable / continue windows and
|
|
58
|
+
* the wide-gap chunking that distinguishes drop / myo / cluster sets. Provide
|
|
59
|
+
* exactly one of `velocities` or `set`.
|
|
60
|
+
*/
|
|
61
|
+
set?: VelocitySet;
|
|
64
62
|
/**
|
|
65
63
|
* Optional velocity-zone bands (shape-compatible with WA's
|
|
66
64
|
* `VelocityZones.bands`). When provided, bar color and the summary zone label
|
|
@@ -73,13 +71,45 @@ interface VelocityStripProps extends ViewProps {
|
|
|
73
71
|
* Live mode: index of the most-recently-completed rep. That bar animates in
|
|
74
72
|
* with a "pop"; if it is also the current set peak (a new best), it "bounces"
|
|
75
73
|
* instead. Only the latest bar animates. Honors `prefers-reduced-motion`.
|
|
76
|
-
*
|
|
74
|
+
* Framed `expanded` chart only (interactive tap-to-expand use).
|
|
77
75
|
*/
|
|
78
76
|
liveRepIndex?: number;
|
|
77
|
+
/**
|
|
78
|
+
* `expanded` variant: whether the chart is OPEN. Default true (the variant shows
|
|
79
|
+
* its chart). Toggle it (with {@link onToggle}) for the interactive tap-to-expand
|
|
80
|
+
* collapse↔chart animation; a static open chart (no `onToggle`) does not animate.
|
|
81
|
+
*/
|
|
79
82
|
expanded?: boolean;
|
|
80
83
|
onToggle?: () => void;
|
|
81
84
|
onRepPress?: (index: number, velocity: number) => void;
|
|
82
|
-
|
|
85
|
+
/**
|
|
86
|
+
* `mini` — a flat 3px static strip (set-type aware). `expanded` — the velocity-
|
|
87
|
+
* HEIGHT bar chart (rounded tops), whose chrome is prop-driven: with
|
|
88
|
+
* {@link showNumbers} or {@link showInfo} on it's the framed chart (raised surface,
|
|
89
|
+
* padding, per-bar m/s labels, mean/loss info row, interactive collapse); with both
|
|
90
|
+
* off it's a bare strip — the active-set "spotlight" of {@link ExerciseCard}. `hero`
|
|
91
|
+
* — the across-the-room, single-set wall treatment: tall bars, a per-bar m/s value
|
|
92
|
+
* label, a dashed running-best reference line, and dashed placeholders for the reps
|
|
93
|
+
* still to come (see {@link targetReps}). Reuses the zone scale and the live-rep pop.
|
|
94
|
+
*/
|
|
95
|
+
variant?: 'mini' | 'expanded' | 'hero';
|
|
96
|
+
/** `expanded` / `hero` plot height in px (bars scale to this). Default 60 (`expanded`) / 220 (`hero`). */
|
|
97
|
+
height?: number;
|
|
98
|
+
/**
|
|
99
|
+
* `hero` only: the set's planned rep count. Reps beyond {@link velocities} draw as
|
|
100
|
+
* dashed placeholder stubs so the wall reads "3 of 8 done" at a glance. Ignored
|
|
101
|
+
* (and no placeholders drawn) when absent or ≤ the performed-rep count.
|
|
102
|
+
*/
|
|
103
|
+
targetReps?: number;
|
|
104
|
+
/**
|
|
105
|
+
* `expanded` / `hero` bar scaling. `peak` (default) scales to the set's own max
|
|
106
|
+
* (+15% headroom). `fixed` scales to a fixed velocity ceiling so bar heights read
|
|
107
|
+
* the same absolute velocity across sets (the spotlight).
|
|
108
|
+
*/
|
|
109
|
+
scale?: 'peak' | 'fixed';
|
|
110
|
+
/** `expanded` framed chart: per-bar m/s labels. Default true. */
|
|
111
|
+
showNumbers?: boolean;
|
|
112
|
+
/** `expanded` framed chart: the mean/loss info row. Default true. */
|
|
83
113
|
showInfo?: boolean;
|
|
84
114
|
className?: string;
|
|
85
115
|
}
|
|
@@ -93,46 +123,232 @@ declare function getVelocityZoneName(velocity: number): string;
|
|
|
93
123
|
declare function calculateVelocityLoss(velocities: number[]): number;
|
|
94
124
|
/** Arithmetic mean of the per-rep mean-concentric velocities. */
|
|
95
125
|
declare function calculateMeanVelocity(velocities: number[]): number;
|
|
96
|
-
|
|
126
|
+
/**
|
|
127
|
+
* A structured strength-training set. Supply as {@link VelocityStripProps.set} to
|
|
128
|
+
* render its set-type encoding; the done-velocity array (used for the mean / loss
|
|
129
|
+
* / zone summary) is derived from the type's velocity fields.
|
|
130
|
+
*/
|
|
131
|
+
type VelocitySet =
|
|
132
|
+
/** Fixed reps at a fixed load: done reps colored + a grey todo remainder to `planned`. */
|
|
133
|
+
{
|
|
134
|
+
type: 'straight';
|
|
135
|
+
velocities: number[];
|
|
136
|
+
planned?: number;
|
|
137
|
+
}
|
|
138
|
+
/** Bounded reps: committed slots `0..floor`, then a cyan variable window `floor..max`. */
|
|
139
|
+
| {
|
|
140
|
+
type: 'range';
|
|
141
|
+
velocities: number[];
|
|
142
|
+
floor: number;
|
|
143
|
+
max: number;
|
|
144
|
+
}
|
|
145
|
+
/** As-many-reps-as-possible: done reps + a trailing cyan "continue" slot that never closes. */
|
|
146
|
+
| {
|
|
147
|
+
type: 'amrap';
|
|
148
|
+
velocities: number[];
|
|
149
|
+
target?: number;
|
|
150
|
+
}
|
|
151
|
+
/** Load drops with no rest: each sub-load's reps, split by a WIDE notch gap. */
|
|
152
|
+
| {
|
|
153
|
+
type: 'drop';
|
|
154
|
+
subloads: number[][];
|
|
155
|
+
}
|
|
156
|
+
/** Rest-pause: an activation chunk + mini-clusters split by WIDE gaps; `open` adds a cyan continue. */
|
|
157
|
+
| {
|
|
158
|
+
type: 'myo';
|
|
159
|
+
activation: number[];
|
|
160
|
+
clusters: number[][];
|
|
161
|
+
open?: boolean;
|
|
162
|
+
}
|
|
163
|
+
/** Fixed count broken by intra-set rests: reps grouped by `groupSize` with WIDE intra-rest gaps. */
|
|
164
|
+
| {
|
|
165
|
+
type: 'cluster';
|
|
166
|
+
velocities: number[];
|
|
167
|
+
groupSize: number;
|
|
168
|
+
planned?: number;
|
|
169
|
+
};
|
|
170
|
+
declare function VelocityStrip({ velocities, set, zones, liveRepIndex, expanded, onToggle, onRepPress, variant, height, targetReps, scale, showNumbers, showInfo, className, ...props }: VelocityStripProps): react_jsx_runtime.JSX.Element | null;
|
|
97
171
|
|
|
98
|
-
type
|
|
99
|
-
|
|
100
|
-
|
|
172
|
+
type SetRowUnit = 'lbs' | 'kg';
|
|
173
|
+
/** A set's lifecycle: logged (`done`), being performed now (`live`), or planned (`todo`). */
|
|
174
|
+
type SetRowState = 'done' | 'live' | 'todo';
|
|
175
|
+
interface SetRowBase {
|
|
101
176
|
setNumber: number;
|
|
102
|
-
|
|
177
|
+
unit: SetRowUnit;
|
|
178
|
+
/** Optional set-type marker (e.g. "DROP", "AMRAP") shown in the SET cell. */
|
|
179
|
+
setType?: string;
|
|
180
|
+
/** Optional velocity-zone bands (WA `VelocityZones.bands`); default scale when absent. */
|
|
181
|
+
velocityZones?: readonly VelocityZoneBandProp[];
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* One row of the unified expanded exercise table (SET · REPS · LBS · RPE + a
|
|
185
|
+
* per-row velocity strip), as a lifecycle discriminated union:
|
|
186
|
+
* - `done` — a logged set: recorded reps / weight / rpe, a flat `mini` strip.
|
|
187
|
+
* - `live` — performed right now: shows its TARGET (never "reps-done/target"),
|
|
188
|
+
* stands out by brightness, and a compact velocity-HEIGHT spotlight strip.
|
|
189
|
+
* - `todo` — planned: shows its target, muted, a flat grey `mini` stub strip.
|
|
190
|
+
*
|
|
191
|
+
* `done` + `todo` share ONE muted treatment; only `live` is brightened. There is
|
|
192
|
+
* no PREV column (dropped in the unified design).
|
|
193
|
+
*/
|
|
194
|
+
type SetRowProps = (SetRowBase & {
|
|
195
|
+
state: 'done';
|
|
196
|
+
reps: number;
|
|
197
|
+
weight: number;
|
|
198
|
+
rpe?: number | null;
|
|
199
|
+
/** Per-rep MEAN concentric velocities (m/s). */
|
|
200
|
+
velocities: number[];
|
|
201
|
+
}) | (SetRowBase & {
|
|
202
|
+
state: 'live';
|
|
203
|
+
/** The prescribed target shown in the REPS / LBS cells (no live "5/10"). */
|
|
204
|
+
target: {
|
|
103
205
|
reps: number;
|
|
104
206
|
weight: number;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
207
|
+
};
|
|
208
|
+
/** Reps / weight committed so far (available to hosts; the display shows `target`). */
|
|
209
|
+
reps: number;
|
|
210
|
+
weight: number;
|
|
108
211
|
rpe?: number | null;
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
onVelocityToggle?: () => void;
|
|
118
|
-
setType?: string;
|
|
119
|
-
prBadges?: Array<{
|
|
120
|
-
type: PRType;
|
|
121
|
-
label: string;
|
|
122
|
-
}>;
|
|
123
|
-
isNextSet?: boolean;
|
|
124
|
-
targets?: {
|
|
212
|
+
/** Per-rep MEAN concentric velocities logged so far this set. */
|
|
213
|
+
velocities: number[];
|
|
214
|
+
/** Newest rep index — reserved; the compact spotlight strip is static. */
|
|
215
|
+
liveRepIndex?: number;
|
|
216
|
+
}) | (SetRowBase & {
|
|
217
|
+
state: 'todo';
|
|
218
|
+
/** The prescribed target shown in the REPS / LBS cells. */
|
|
219
|
+
target: {
|
|
125
220
|
reps: number;
|
|
126
221
|
weight: number;
|
|
127
222
|
};
|
|
223
|
+
/** Planned rep count backing the grey stub strip. Default `target.reps`. */
|
|
224
|
+
planned?: number;
|
|
225
|
+
});
|
|
226
|
+
/**
|
|
227
|
+
* ONE set row of the unified expanded exercise table. SET · REPS · LBS · RPE over
|
|
228
|
+
* a per-row {@link VelocityStrip}; `live` stands out by brightness with a compact
|
|
229
|
+
* velocity-height spotlight, `done`/`todo` are muted with a flat mini strip. Its
|
|
230
|
+
* column widths mirror {@link SetTableHeader}(`showPrevious={false}`).
|
|
231
|
+
*/
|
|
232
|
+
declare function SetRow(set: SetRowProps): react_jsx_runtime.JSX.Element;
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* The four canonical rep-intensity zone pins (real titan ramp pins). A rep's mean
|
|
236
|
+
* velocity ratio maps to one of these; butted together they form a set's bar.
|
|
237
|
+
*/
|
|
238
|
+
declare const SET_STRIP_ZONES: {
|
|
239
|
+
readonly slow: "#D14343";
|
|
240
|
+
readonly moderate: "#FF7900";
|
|
241
|
+
readonly fast: "#F9B415";
|
|
242
|
+
readonly fastest: "#2ED573";
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* The learned "variable / unknown / opportunity" semantic (cyan-900, a real ramp
|
|
246
|
+
* pin): an unperformed rep in a range's variable zone, and the fading trail of a
|
|
247
|
+
* myo set whose cluster count isn't yet known.
|
|
248
|
+
*/
|
|
249
|
+
declare const SET_STRIP_VARIABLE_COLOR: "#0B3149";
|
|
250
|
+
/** Map a per-rep mean-velocity ratio to its zone pin (fastest = green, slowest = red). */
|
|
251
|
+
declare function velocityZoneColor(v: number): string;
|
|
252
|
+
/**
|
|
253
|
+
* One set's data. Flat variants: `done` = every rep performed; `active` = reps-so-far
|
|
254
|
+
* performed against a planned count (remainder greyed, performed reps pulse); `todo` =
|
|
255
|
+
* a planned but unstarted set (solid grey bar). Set-type variants:
|
|
256
|
+
* - `range` — variable rep-range (e.g. 15–20): `max` segments; committed zone
|
|
257
|
+
* `0..floor` (done = velocity, todo = grey), variable zone `floor..max` (done =
|
|
258
|
+
* velocity, todo = the variable/opportunity cyan). `doneVels` may run past `floor`.
|
|
259
|
+
* - `drop` — one set, no rest: `subloads` butted internally, split by 2px notches.
|
|
260
|
+
* - `myo` — done rest-pause: `activation` chunk + `clusters`, split by 3px cluster gaps.
|
|
261
|
+
* - `myo-upcoming` — planned myo, length unknown: grey activation (`activationLen`) +
|
|
262
|
+
* a fading cyan "clusters-to-failure" trail with the right edge left open.
|
|
263
|
+
*/
|
|
264
|
+
type SetStripSet = {
|
|
265
|
+
status: 'done';
|
|
266
|
+
velocities: number[];
|
|
267
|
+
} | {
|
|
268
|
+
status: 'active';
|
|
269
|
+
velocities: number[];
|
|
270
|
+
planned: number;
|
|
271
|
+
} | {
|
|
272
|
+
status: 'todo';
|
|
273
|
+
planned: number;
|
|
274
|
+
} | {
|
|
275
|
+
status: 'range';
|
|
276
|
+
floor: number;
|
|
277
|
+
max: number;
|
|
278
|
+
doneVels: number[];
|
|
279
|
+
} | {
|
|
280
|
+
status: 'drop';
|
|
281
|
+
subloads: number[][];
|
|
282
|
+
} | {
|
|
283
|
+
status: 'myo';
|
|
284
|
+
activation: number[];
|
|
285
|
+
clusters: number[][];
|
|
286
|
+
} | {
|
|
287
|
+
status: 'myo-upcoming';
|
|
288
|
+
activationLen: number;
|
|
289
|
+
clusterCount?: number;
|
|
290
|
+
};
|
|
291
|
+
interface SetBarProps {
|
|
292
|
+
/** One set's performance state (done / active / todo). */
|
|
293
|
+
set: SetStripSet;
|
|
294
|
+
/** Bar height in px. Default 8. */
|
|
295
|
+
height?: number;
|
|
128
296
|
}
|
|
129
|
-
|
|
297
|
+
/**
|
|
298
|
+
* ONE set's multi-coloured bar: the butted per-rep colour segments for a single
|
|
299
|
+
* set (`done` = velocity-coloured reps · `active` = performed reps pulsing + grey
|
|
300
|
+
* remainder · `todo` = a solid grey bar), composed over {@link SegmentedBar}.
|
|
301
|
+
* Fills its flex slot; {@link SetStrip} lays several side by side. Colours are the
|
|
302
|
+
* real titan ramp pins.
|
|
303
|
+
*/
|
|
304
|
+
declare function SetBar({ set, height }: SetBarProps): react_jsx_runtime.JSX.Element;
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* The LOCKED 6-kind indicator taxonomy (TD-03.51). One precedence-ranked slot is
|
|
308
|
+
* ever shown per exercise, resolved by {@link resolveIndicator}. Glyph = the
|
|
309
|
+
* specific signal; color = the severity tier (danger/warning/success/info, bound
|
|
310
|
+
* to titan status tokens). Outlined (border + glyph, no fill) so a chip never
|
|
311
|
+
* collides with the filled velocity strip beside it.
|
|
312
|
+
*/
|
|
313
|
+
type ExerciseIndicatorKind = 'imbalance' | 'overshoot' | 'velocity-loss' | 'missed-reps' | 'pr' | 'info';
|
|
314
|
+
/**
|
|
315
|
+
* Precedence order (1=highest → last=lowest). A single chip is shown, so when
|
|
316
|
+
* several signals are true the highest-ranked wins. Alerts outrank `pr`; `info`
|
|
317
|
+
* is the floor. This ordering is LOCKED — do not reshuffle.
|
|
318
|
+
*/
|
|
319
|
+
declare const INDICATOR_PRECEDENCE: readonly ExerciseIndicatorKind[];
|
|
320
|
+
/**
|
|
321
|
+
* Given the signals currently true for an exercise, pick the single
|
|
322
|
+
* highest-precedence kind to surface (or `undefined` when none apply). Order and
|
|
323
|
+
* duplicates in `candidates` don't matter — {@link INDICATOR_PRECEDENCE} decides.
|
|
324
|
+
*/
|
|
325
|
+
declare function resolveIndicator(candidates: ExerciseIndicatorKind[]): ExerciseIndicatorKind | undefined;
|
|
326
|
+
interface ExerciseIndicatorProps extends Omit<ViewProps, 'children'> {
|
|
327
|
+
kind: ExerciseIndicatorKind;
|
|
328
|
+
/** Optional tap handler (surfaces detail — PR history / alert / info). */
|
|
329
|
+
onPress?: () => void;
|
|
330
|
+
className?: string;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* A small circular outlined chip for an exercise heading. Presentational and
|
|
334
|
+
* static (chips are chrome — no pulse); the tap detail (tooltip/sheet) is wired
|
|
335
|
+
* by the consumer.
|
|
336
|
+
*/
|
|
337
|
+
declare function ExerciseIndicator({ kind, onPress, className, ...props }: ExerciseIndicatorProps): react_jsx_runtime.JSX.Element;
|
|
130
338
|
|
|
131
|
-
type ExerciseCardState = 'collapsed' | 'expanded' | 'upcoming';
|
|
132
339
|
interface ExerciseCardProps {
|
|
133
340
|
name: string;
|
|
134
|
-
|
|
135
|
-
|
|
341
|
+
/**
|
|
342
|
+
* The dimmed, not-yet-reached representation (prescription + previous-best line).
|
|
343
|
+
* Overrides the expand state — an upcoming card never expands.
|
|
344
|
+
*/
|
|
345
|
+
upcoming?: boolean;
|
|
346
|
+
/** Controlled expand state. Omit to run uncontrolled (see {@link defaultExpanded}). */
|
|
347
|
+
expanded?: boolean;
|
|
348
|
+
/** Uncontrolled initial expand state. Default false. Ignored when `expanded` is set. */
|
|
349
|
+
defaultExpanded?: boolean;
|
|
350
|
+
/** Notified when the user toggles the card between collapsed and expanded. */
|
|
351
|
+
onExpandedChange?: (expanded: boolean) => void;
|
|
136
352
|
onNavigateDetail?: () => void;
|
|
137
353
|
summary?: {
|
|
138
354
|
sets: number;
|
|
@@ -140,23 +356,38 @@ interface ExerciseCardProps {
|
|
|
140
356
|
weight: number;
|
|
141
357
|
unit: 'lbs' | 'kg';
|
|
142
358
|
};
|
|
143
|
-
e1rm?: {
|
|
144
|
-
value: number;
|
|
145
|
-
unit: 'lbs' | 'kg';
|
|
146
|
-
};
|
|
147
359
|
isPR?: boolean;
|
|
360
|
+
/** Collapsed glance: per-set logged velocities (drives the mini strips). */
|
|
148
361
|
setVelocities?: number[][];
|
|
149
362
|
/** Optional velocity-zone bands shared across this exercise's sets (WA bands). */
|
|
150
363
|
velocityZones?: readonly VelocityZoneBandProp[];
|
|
364
|
+
/** Collapsed glance: total planned sets (placeholder strips fill the remainder). */
|
|
151
365
|
totalPlannedSets?: number;
|
|
366
|
+
/** Expanded body: the per-set rows (done / live / todo). */
|
|
152
367
|
sets?: SetRowProps[];
|
|
153
368
|
tempo?: [number, number, number, number];
|
|
154
369
|
prescription?: string;
|
|
155
370
|
previousBest?: string;
|
|
156
371
|
supersetPosition?: 'first' | 'last' | 'middle' | null;
|
|
157
372
|
supersetColor?: string;
|
|
373
|
+
/** Expanded header per-set strip override; derived from `sets` when omitted. */
|
|
374
|
+
setStates?: SetStripSet[];
|
|
375
|
+
/** A small PR / issue / info chip in the title line (expanded header). */
|
|
376
|
+
indicator?: ExerciseIndicatorKind;
|
|
377
|
+
/** Expanded header strip height in px. Default 8. */
|
|
378
|
+
stripHeight?: number;
|
|
158
379
|
}
|
|
159
|
-
|
|
380
|
+
/**
|
|
381
|
+
* The data-contract exercise card, in three representations:
|
|
382
|
+
* - `upcoming` — a dimmed, not-yet-reached row (prescription + previous best).
|
|
383
|
+
* - collapsed — a glance: name + summary + per-set velocity strips.
|
|
384
|
+
* - expanded — the unified card: the real {@link ExerciseCardHeading} header over
|
|
385
|
+
* the SET · REPS · LBS · RPE body (one {@link SetRow} per set).
|
|
386
|
+
*
|
|
387
|
+
* Expand is controlled (`expanded` + `onExpandedChange`) or uncontrolled
|
|
388
|
+
* (`defaultExpanded`, internal state). `upcoming` overrides expand.
|
|
389
|
+
*/
|
|
390
|
+
declare function ExerciseCard({ upcoming, expanded, defaultExpanded, onExpandedChange, ...rest }: ExerciseCardProps): react_jsx_runtime.JSX.Element;
|
|
160
391
|
|
|
161
392
|
type MesoStatus = 'completed' | 'current' | 'upcoming';
|
|
162
393
|
interface Meso {
|
|
@@ -564,8 +795,11 @@ interface ExerciseDetailEntry {
|
|
|
564
795
|
title: string;
|
|
565
796
|
/** Collapsed summary (sets × reps @ weight). */
|
|
566
797
|
summary?: ExerciseCardProps['summary'];
|
|
567
|
-
/** Estimated one-rep max
|
|
568
|
-
e1rm?:
|
|
798
|
+
/** Estimated one-rep max, feeding the page's best-e1RM stat. */
|
|
799
|
+
e1rm?: {
|
|
800
|
+
value: number;
|
|
801
|
+
unit: 'lbs' | 'kg';
|
|
802
|
+
};
|
|
569
803
|
/** Flags a personal-record entry. */
|
|
570
804
|
isPR?: boolean;
|
|
571
805
|
/** Prescribed tempo, revealed when expanded. */
|
|
@@ -681,8 +915,6 @@ interface ActiveWorkoutExercise {
|
|
|
681
915
|
totalPlannedSets: number;
|
|
682
916
|
/** Collapsed summary (sets × reps @ weight) for a completed exercise. */
|
|
683
917
|
summary?: ExerciseCardProps['summary'];
|
|
684
|
-
/** Estimated one-rep max badge. */
|
|
685
|
-
e1rm?: ExerciseCardProps['e1rm'];
|
|
686
918
|
/** Flags a personal-record exercise. */
|
|
687
919
|
isPR?: boolean;
|
|
688
920
|
/** Prescribed tempo, revealed when expanded. */
|
|
@@ -768,8 +1000,8 @@ declare function countCompletedSets(exercise: ActiveWorkoutExercise): number;
|
|
|
768
1000
|
declare function deriveWorkoutProgress(exercises: ActiveWorkoutExercise[]): WorkoutProgress;
|
|
769
1001
|
/** The active exercise anchors the bottom bar; find it, or null (pure). */
|
|
770
1002
|
declare function findActiveExercise(exercises: ActiveWorkoutExercise[]): ActiveWorkoutExercise | null;
|
|
771
|
-
/**
|
|
772
|
-
declare function
|
|
1003
|
+
/** Whether an exercise renders as the dimmed, not-yet-reached representation (pure). */
|
|
1004
|
+
declare function isUpcomingExercise(status: ActiveExerciseStatus): boolean;
|
|
773
1005
|
/** Project an exercise onto ExerciseCard props, wiring zoom focus (pure). */
|
|
774
1006
|
declare function toActiveCardProps(exercise: ActiveWorkoutExercise, focused: boolean, onToggle: () => void, supersetPosition?: ExerciseCardProps['supersetPosition'], supersetColor?: string): ExerciseCardProps;
|
|
775
1007
|
/** Fold consecutive same-superset exercises into render groups (pure). */
|
|
@@ -788,4 +1020,4 @@ declare function groupExercises(exercises: ActiveWorkoutExercise[], supersets: A
|
|
|
788
1020
|
*/
|
|
789
1021
|
declare function ActiveWorkoutPage({ title, subtitle, exercises, supersets, input, rest, initialResting, className, ...props }: ActiveWorkoutPageProps): react_jsx_runtime.JSX.Element;
|
|
790
1022
|
|
|
791
|
-
export {
|
|
1023
|
+
export { VelocityStrip as $, type ActiveExerciseStatus as A, type PlanWeek as B, CapacityBandChart as C, type PlanWorkout as D, type ExerciseIndicatorKind as E, type ProgramBreadcrumb as F, type ProgramNavLevel as G, type ProgramPlanningPageProps as H, INDICATOR_PRECEDENCE as I, type ProgramSelection as J, SET_STRIP_VARIABLE_COLOR as K, SET_STRIP_ZONES as L, type Meso as M, SetBar as N, type SetBarProps as O, type PlanMeso as P, SetRow as Q, type SetRowProps as R, type SetStripSet as S, type SetRowState as T, type SetRowUnit as U, StrengthTrendChart as V, type StrengthTrendChartMesoBoundary as W, type StrengthTrendChartProps as X, type StrengthTrendDataPoint as Y, type VbtSummary as Z, type VelocitySet as _, type ActiveWorkoutExercise as a, type VelocityStripProps as a0, type VelocityZoneBandProp as a1, WeekRow as a2, type WeekRowProps as a3, type WeekRowWorkout as a4, WorkoutCard as a5, type WorkoutCardProps as a6, type WorkoutDot as a7, type WorkoutDotStatus as a8, type WorkoutGroup as a9, groupExercises as aA, isUpcomingExercise as aB, summarizeVbt as aC, toActiveCardProps as aD, toExerciseCardProps as aE, toProgressBarMesos as aF, type WorkoutMuscleGroup as aa, type WorkoutMuscleVolumeStatus as ab, WorkoutPill as ac, type WorkoutPillProps as ad, type WorkoutPillStatus as ae, type WorkoutProgress as af, type WorkoutStatus as ag, calculateMeanVelocity as ah, calculateVelocityLoss as ai, getVelocityZoneColor as aj, getVelocityZoneName as ak, resolveIndicator as al, velocityZoneColor as am, ActiveWorkoutPage as an, EXERCISE_DETAIL_TABS as ao, ExerciseDetailPage as ap, ProgramPlanningPage as aq, buildBreadcrumbs as ar, countCompletedSets as as, deriveExerciseStats as at, deriveNavLevel as au, deriveWorkoutProgress as av, findActiveExercise as aw, findMeso as ax, findWeek as ay, findWorkout as az, type ActiveWorkoutInput as b, type ActiveWorkoutPageProps as c, type ActiveWorkoutRest as d, type ActiveWorkoutSuperset as e, type CapacityBandChartProps as f, type CapacityBandDataPoint as g, type CapacityBandProjection as h, ExerciseCard as i, type ExerciseCardProps as j, type ExerciseDetailEntry as k, type ExerciseDetailHeader as l, type ExerciseDetailPageProps as m, type ExerciseDetailStats as n, type ExerciseDetailTab as o, ExerciseIndicator as p, type ExerciseIndicatorProps as q, type ExerciseTrend as r, type ExerciseVbt as s, type ExerciseVbtSet as t, MesoCard as u, type MesoCardProps as v, MesoProgressBar as w, type MesoProgressBarProps as x, type MesoStatus as y, type MesoVolumeHeatmapEntry as z };
|