@titan-design/react-ui 0.9.3 → 0.11.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 +78 -24
- package/dist/bodymap.js.map +1 -1
- package/dist/bodymap.mjs +78 -24
- package/dist/bodymap.mjs.map +1 -1
- package/dist/index.d.mts +429 -11
- package/dist/index.d.ts +429 -11
- package/dist/index.js +2386 -885
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2306 -836
- package/dist/index.mjs.map +1 -1
- package/dist/{pages-DyEx-lBf.d.ts → pages-B1hqnGIC.d.ts} +149 -15
- package/dist/{pages-D7hOD4Vj.d.mts → pages-CvsFqNtx.d.mts} +149 -15
- package/dist/pages.d.mts +1 -1
- package/dist/pages.d.ts +1 -1
- package/dist/pages.js +1900 -1609
- package/dist/pages.js.map +1 -1
- package/dist/pages.mjs +1901 -1610
- package/dist/pages.mjs.map +1 -1
- package/dist/theme/index.d.mts +129 -34
- package/dist/theme/index.d.ts +129 -34
- package/dist/theme/index.js +95 -19
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/index.mjs +92 -20
- package/dist/theme/index.mjs.map +1 -1
- package/dist/theme/tokens-css.js +88 -24
- package/dist/theme/tokens-css.js.map +1 -1
- package/dist/theme/tokens-css.mjs +88 -24
- package/dist/theme/tokens-css.mjs.map +1 -1
- package/package.json +8 -3
- package/src/components/custom/Fatigue/DualGhostSpark.stories.tsx +258 -0
- package/src/components/custom/Fatigue/DualGhostSpark.test.tsx +138 -0
- package/src/components/custom/Fatigue/DualGhostSpark.tsx +208 -0
- package/src/components/custom/Fatigue/FatigueLights.stories.tsx +74 -0
- package/src/components/custom/Fatigue/FatigueLights.test.tsx +33 -0
- package/src/components/custom/Fatigue/FatigueLights.tsx +83 -0
- package/src/components/custom/Fatigue/GhostBand.test.tsx +235 -0
- package/src/components/custom/Fatigue/GhostBand.tsx +246 -0
- package/src/components/custom/Fatigue/GhostBloom.tsx +132 -0
- package/src/components/custom/Fatigue/GhostSpark.stories.tsx +175 -0
- package/src/components/custom/Fatigue/GhostSpark.test.tsx +45 -0
- package/src/components/custom/Fatigue/GhostSpark.tsx +126 -0
- package/src/components/custom/Fatigue/LiveFatigueCard.stories.tsx +126 -0
- package/src/components/custom/Fatigue/LiveFatigueCard.test.tsx +28 -0
- package/src/components/custom/Fatigue/LiveFatigueCard.tsx +86 -0
- package/src/components/custom/Fatigue/LiveFatiguePanel.stories.tsx +95 -0
- package/src/components/custom/Fatigue/LiveFatiguePanel.tsx +151 -0
- package/src/components/custom/Fatigue/README.md +93 -0
- package/src/components/custom/Fatigue/RomProgressionChart.stories.tsx +94 -0
- package/src/components/custom/Fatigue/RomProgressionChart.test.tsx +31 -0
- package/src/components/custom/Fatigue/RomProgressionChart.tsx +132 -0
- package/src/components/custom/Fatigue/SilverRedPalette.stories.tsx +226 -0
- package/src/components/custom/Fatigue/VelocityHero.stories.tsx +70 -0
- package/src/components/custom/Fatigue/VelocityHero.test.tsx +26 -0
- package/src/components/custom/Fatigue/VelocityHero.tsx +46 -0
- package/src/components/custom/Fatigue/VerdictHero.stories.tsx +59 -0
- package/src/components/custom/Fatigue/VerdictHero.test.tsx +49 -0
- package/src/components/custom/Fatigue/VerdictHero.tsx +79 -0
- package/src/components/custom/Fatigue/fatigue-mock.test.ts +59 -0
- package/src/components/custom/Fatigue/fatigue-mock.ts +268 -0
- package/src/components/custom/Fatigue/fatigue-model.ts +129 -0
- package/src/components/custom/Fatigue/fatigue-tokens.test.ts +70 -0
- package/src/components/custom/Fatigue/fatigue-tokens.ts +180 -0
- package/src/components/custom/Fatigue/index.ts +41 -0
- package/src/components/custom/Fatigue/tempo-pacing.test.ts +176 -0
- package/src/components/custom/Fatigue/tempo-pacing.ts +112 -0
- package/src/components/custom/Workout/BaseBadge.tsx +5 -5
- package/src/components/custom/Workout/DualVelocityStrip.test.tsx +685 -0
- package/src/components/custom/Workout/ExerciseCard.test.tsx +4 -4
- package/src/components/custom/Workout/ExerciseCard.tsx +3 -1
- package/src/components/custom/Workout/ExerciseDetailPage.tsx +7 -1
- package/src/components/custom/Workout/README.md +62 -16
- package/src/components/custom/Workout/RowInventory.stories.tsx +5 -2
- package/src/components/custom/Workout/S3FullRail.stories.tsx +13 -1
- package/src/components/custom/Workout/SegmentedBar.stories.tsx +3 -3
- package/src/components/custom/Workout/SessionHeader.tsx +2 -2
- package/src/components/custom/Workout/SessionRail.stories.tsx +4 -1
- package/src/components/custom/Workout/SessionRail.test.tsx +43 -0
- package/src/components/custom/Workout/SessionRail.tsx +55 -18
- package/src/components/custom/Workout/SetRow.test.tsx +6 -6
- package/src/components/custom/Workout/SetRow.tsx +9 -2
- package/src/components/custom/Workout/SupersetWrapper.stories.tsx +16 -25
- package/src/components/custom/Workout/SupersetWrapper.tsx +1 -1
- package/src/components/custom/Workout/TempoDisplay.tsx +3 -7
- package/src/components/custom/Workout/VelocityStrip.compact.stories.tsx +191 -0
- package/src/components/custom/Workout/VelocityStrip.dual.stories.tsx +186 -0
- package/src/components/custom/Workout/VelocityStrip.expanded.stories.tsx +296 -0
- package/src/components/custom/Workout/VelocityStrip.hero.stories.tsx +259 -0
- package/src/components/custom/Workout/VelocityStrip.stories.tsx +217 -250
- package/src/components/custom/Workout/VelocityStrip.test.tsx +196 -79
- package/src/components/custom/Workout/VelocityStrip.tsx +953 -609
- package/src/components/custom/Workout/VolumeLandmarkBar.stories.tsx +4 -1
- package/src/components/custom/Workout/WorkoutPill.tsx +2 -2
- package/src/components/custom/Workout/index.ts +3 -0
- package/src/components/custom/Workout/velocity-story-kit.tsx +438 -0
- package/src/components/custom/charts/SetBarChart.test.tsx +275 -0
- package/src/components/custom/charts/SetBarChart.tsx +651 -0
- package/src/components/custom/charts/live-rep-growth.ts +91 -0
- package/src/components/custom/index.ts +1 -0
- package/src/components/ui/surface/Surface.stories.tsx +195 -1
- package/src/components/ui/surface/Surface.test.tsx +148 -9
- package/src/components/ui/surface/Surface.tsx +37 -9
- package/src/components/ui/surface/SurfaceContext.ts +48 -8
- package/src/components/ui/surface/index.ts +1 -0
- package/src/components/ui/surface/surface.contract.test.ts +283 -0
- package/src/test/raw-color-patterns.test.ts +71 -0
- package/src/theme/ColorPalettes.stories.tsx +871 -0
- package/src/theme/ColorPrimitives.stories.tsx +300 -0
- package/src/theme/bar-paper.ts +59 -0
- package/src/theme/color-stories.coverage.test.ts +130 -0
- package/src/theme/color-story-kit.tsx +170 -0
- package/src/theme/config.ts +12 -0
- package/src/theme/elevation.ts +90 -67
- package/src/theme/global.css +35 -9
- package/src/theme/tokens/primitives.ts +40 -0
- package/src/theme/tokens/semantic.ts +63 -14
- package/tailwind.config.js +8 -0
- package/src/components/custom/Workout/VelocityStrip.modalities.stories.tsx +0 -254
- package/src/components/custom/Workout/VelocityStrip.responsive.stories.tsx +0 -145
- package/src/theme/ColorSystem.stories.tsx +0 -323
- package/src/theme/Colors.stories.tsx +0 -323
|
@@ -18,6 +18,22 @@ interface WorkoutPillProps extends ViewProps {
|
|
|
18
18
|
}
|
|
19
19
|
declare function WorkoutPill({ name, status, pulse, onPress, highlighted, className, ...props }: WorkoutPillProps): react_jsx_runtime.JSX.Element;
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* One drawn cell of the chart. `rep` carries a `value` and draws a value-height bar;
|
|
23
|
+
* `todo` / `variable` / `continue` are the set-type window stubs (planned remainder, the
|
|
24
|
+
* range floor..max window, the AMRAP/myo open tail); `empty` is a rep COLUMN a side didn't
|
|
25
|
+
* log — a faint constant-contrast placeholder that keeps the two diverging wings index-locked
|
|
26
|
+
* (a lagging side's missing rep sits at the SAME column index as the other side's rep).
|
|
27
|
+
* `leadingGap` adds spacing BEFORE the cell beyond the uniform inter-bar gap — the WIDE
|
|
28
|
+
* chunk-notch that splits drop sub-loads / myo clusters / cluster intra-rests. Absent
|
|
29
|
+
* `leadingGap` = the ordinary rep gap.
|
|
30
|
+
*/
|
|
31
|
+
interface SetSlot {
|
|
32
|
+
kind: 'rep' | 'todo' | 'variable' | 'continue' | 'empty';
|
|
33
|
+
value?: number;
|
|
34
|
+
leadingGap?: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
21
37
|
/**
|
|
22
38
|
* Structural velocity-zone band accepted from an upstream analytics source
|
|
23
39
|
* (e.g. workout-analytics' `VelocityZones.bands`).
|
|
@@ -68,10 +84,63 @@ interface VelocityStripProps extends ViewProps {
|
|
|
68
84
|
*/
|
|
69
85
|
zones?: readonly VelocityZoneBandProp[];
|
|
70
86
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
87
|
+
* Bar-fill coloring mode. `loss` (DEFAULT) — color each performed bar by its
|
|
88
|
+
* velocity LOSS from the set's OWN best (see {@link getVelocityLossColor}), so a
|
|
89
|
+
* fatiguing set reads green→red by loss regardless of its absolute speed; ignores
|
|
90
|
+
* {@link zones} (it is a wholly separate scale). `zone` — color from the absolute
|
|
91
|
+
* velocity-zone scale ({@link zones} when provided, else the built-in
|
|
92
|
+
* ≥1.0/≥0.75/≥0.5 default). `todo`/`variable`/`continue` slots are unaffected either way.
|
|
93
|
+
*/
|
|
94
|
+
barColor?: 'zone' | 'loss';
|
|
95
|
+
/**
|
|
96
|
+
* `hero` only: draw the VL20 / VL30 velocity-loss decision bands behind the bars
|
|
97
|
+
* (see {@link VelocityLossBands}). Defaults to on when {@link barColor} is `loss`
|
|
98
|
+
* (the default), off for `zone` — the bands and the loss bar-fill are the two
|
|
99
|
+
* halves of the same loss-relative language.
|
|
100
|
+
*/
|
|
101
|
+
showLossBands?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* `hero` only: `up` (default) grows bars UP from a bottom baseline; `down` mirrors
|
|
104
|
+
* the whole plot (bars grow DOWN from a top baseline, text upright). The diverging
|
|
105
|
+
* dual is just an `up` hero over a `down` hero sharing one axis — so any hero
|
|
106
|
+
* improvement reaches the dual for free.
|
|
107
|
+
*/
|
|
108
|
+
orientation?: 'up' | 'down';
|
|
109
|
+
/**
|
|
110
|
+
* `hero` only: OVERRIDE the height-scaling denominator with `scaleMax * headroom` instead of
|
|
111
|
+
* this strip's own `peak`/`fixed` scale. Affects BAR HEIGHT ONLY — velocity-LOSS coloring and
|
|
112
|
+
* the running-best reference line still measure off THIS strip's own velocities. The diverging
|
|
113
|
+
* dual passes the pair's shared max here so a stronger arm's bars read TALLER against one common
|
|
114
|
+
* scale while each arm still colors by its own loss.
|
|
115
|
+
*/
|
|
116
|
+
scaleMax?: number;
|
|
117
|
+
/**
|
|
118
|
+
* `hero` only (internal): suppress this strip's own 2px baseline border. The diverging dual sets
|
|
119
|
+
* it on BOTH composed wings and draws ONE shared centre axis where they meet, so the axis is a
|
|
120
|
+
* single crisp line rather than two abutting baselines reading as a double-thick rule.
|
|
121
|
+
*/
|
|
122
|
+
hideBaseline?: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* `hero` only (internal): the EXACT rendered column structure, overriding this strip's own
|
|
125
|
+
* slot-building. The diverging dual builds ONE index-locked structure shared by both wings (same
|
|
126
|
+
* rep indices, same WIDE-gap positions, same column count; a column a side didn't log renders
|
|
127
|
+
* `empty`) and passes it here so bars line up column-for-column across the centre axis. Bar
|
|
128
|
+
* height / color / the running-best reference still read this strip's own `velocities`.
|
|
129
|
+
*/
|
|
130
|
+
columnSlots?: SetSlot[];
|
|
131
|
+
/**
|
|
132
|
+
* `hero` only: an optional stream / slot NAME (e.g. "Left Arm"), rendered as a rotated vertical
|
|
133
|
+
* edge label down the chart's left gutter — the same treatment the diverging dual gives each wing,
|
|
134
|
+
* so a single hero and a dual read consistently. Omitted → no gutter.
|
|
135
|
+
*/
|
|
136
|
+
label?: string;
|
|
137
|
+
/**
|
|
138
|
+
* Live mode: index of the most-recently-completed rep. That bar GROWS UP FROM
|
|
139
|
+
* THE BASELINE to its full height as it enters, tracking the rep as it lands;
|
|
140
|
+
* if it is also the current set peak (a new best) the growth slightly
|
|
141
|
+
* overshoots then settles, reading as a small bounce. Only the latest bar
|
|
142
|
+
* animates. Honors `prefers-reduced-motion`. Framed `expanded` chart and
|
|
143
|
+
* `hero` only (interactive tap-to-expand use).
|
|
75
144
|
*/
|
|
76
145
|
liveRepIndex?: number;
|
|
77
146
|
/**
|
|
@@ -83,16 +152,17 @@ interface VelocityStripProps extends ViewProps {
|
|
|
83
152
|
onToggle?: () => void;
|
|
84
153
|
onRepPress?: (index: number, velocity: number) => void;
|
|
85
154
|
/**
|
|
86
|
-
* `
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* off it's a bare strip — the
|
|
91
|
-
* — the across-the-room, single-set wall
|
|
92
|
-
* label, a dashed running-best reference line, and dashed
|
|
93
|
-
* still to come (see {@link targetReps}).
|
|
155
|
+
* `compact` — the flat resting strip: {@link SetBarChart} in FLAT mode (uniform short bars, no
|
|
156
|
+
* value labels), sharing hero's exact geometry (colors, paper, spacing, chunk-notch, slots, gutter).
|
|
157
|
+
* `expanded` — the velocity-HEIGHT bar chart (rounded tops), whose chrome is prop-driven: with
|
|
158
|
+
* {@link showNumbers} or {@link showInfo} on it's the framed chart (raised surface, padding, per-bar
|
|
159
|
+
* m/s labels, mean/loss info row, interactive collapse); with both off it's a bare strip — the
|
|
160
|
+
* active-set "spotlight" of {@link ExerciseCard}. `hero` — the across-the-room, single-set wall
|
|
161
|
+
* treatment: tall bars, a per-bar m/s value label, a dashed running-best reference line, and dashed
|
|
162
|
+
* placeholders for the reps still to come (see {@link targetReps}). All three share SetBarChart, so
|
|
163
|
+
* bars align across compact / expanded / hero.
|
|
94
164
|
*/
|
|
95
|
-
variant?: '
|
|
165
|
+
variant?: 'compact' | 'expanded' | 'hero';
|
|
96
166
|
/** `expanded` / `hero` plot height in px (bars scale to this). Default 60 (`expanded`) / 220 (`hero`). */
|
|
97
167
|
height?: number;
|
|
98
168
|
/**
|
|
@@ -167,7 +237,71 @@ type VelocitySet =
|
|
|
167
237
|
groupSize: number;
|
|
168
238
|
planned?: number;
|
|
169
239
|
};
|
|
170
|
-
|
|
240
|
+
/** One voltra's velocity stream — the SAME shape VelocityStrip accepts (one of these). */
|
|
241
|
+
interface DualVelocityStream {
|
|
242
|
+
/** Per-rep MEAN concentric velocity (m/s) for this side. */
|
|
243
|
+
velocities?: number[];
|
|
244
|
+
/** A structured set descriptor for this side (drives the typed slot vocabulary). */
|
|
245
|
+
set?: VelocitySet;
|
|
246
|
+
/**
|
|
247
|
+
* The side's SLOT NAME (e.g. "Left Arm"), rendered as the vertical edge label. This is
|
|
248
|
+
* the slot's identity supplied by data — there is no hardcoded LEFT/RIGHT fallback. When
|
|
249
|
+
* absent or empty, that side renders no label.
|
|
250
|
+
*/
|
|
251
|
+
label?: string;
|
|
252
|
+
}
|
|
253
|
+
interface DualVelocityStripProps extends ViewProps {
|
|
254
|
+
/** The up-wing stream — drawn growing UP from the centre axis; its edge name comes from `left.label`. */
|
|
255
|
+
left: DualVelocityStream;
|
|
256
|
+
/** The down-wing stream — drawn growing DOWN from the centre axis; its edge name comes from `right.label`. */
|
|
257
|
+
right: DualVelocityStream;
|
|
258
|
+
/**
|
|
259
|
+
* Optional velocity-zone bands (shape-compatible with WA's `VelocityZones.bands`),
|
|
260
|
+
* shared with {@link VelocityStrip}. Colors the reps by zone on BOTH sides; side is
|
|
261
|
+
* never encoded by hue. When omitted the built-in default scale is used.
|
|
262
|
+
*/
|
|
263
|
+
zones?: readonly VelocityZoneBandProp[];
|
|
264
|
+
/**
|
|
265
|
+
* Bar-fill coloring mode, matching {@link VelocityStrip}. `loss` (DEFAULT) — each
|
|
266
|
+
* wing colors by its velocity LOSS from THAT arm's own best (per-wing, since arms
|
|
267
|
+
* fatigue independently). `zone` — the shared absolute zone scale. Side is never
|
|
268
|
+
* encoded by hue either way.
|
|
269
|
+
*/
|
|
270
|
+
barColor?: 'zone' | 'loss';
|
|
271
|
+
/**
|
|
272
|
+
* Planned rep count. Reps beyond a side's performed count draw as mirrored dashed
|
|
273
|
+
* todo stubs (same "3 of 8 done" read as the single hero), on both wings.
|
|
274
|
+
*/
|
|
275
|
+
targetReps?: number;
|
|
276
|
+
/** Index of the most-recently-completed rep; that mirrored pair animates in (hero only). */
|
|
277
|
+
liveRepIndex?: number;
|
|
278
|
+
/**
|
|
279
|
+
* `hero` — the across-the-room wall scale: tall wings, per-rep m/s value labels, and a dashed
|
|
280
|
+
* running-best reference line per side. `compact` — the flat resting form: dual-hero but flat +
|
|
281
|
+
* no labels (both wings are the `compact` VelocityStrip variant), same aligned structure + shared
|
|
282
|
+
* gutter + axis. `rail` — the compact rail-expanded lean renderer, no labels / reference lines.
|
|
283
|
+
*/
|
|
284
|
+
variant?: 'hero' | 'compact' | 'rail';
|
|
285
|
+
/**
|
|
286
|
+
* Bar-height scaling, shared across BOTH wings so the L/R asymmetry reads as bar
|
|
287
|
+
* length against one scale. `peak` (default) = the pair's max +headroom; `fixed` =
|
|
288
|
+
* a fixed velocity ceiling.
|
|
289
|
+
*/
|
|
290
|
+
scale?: 'peak' | 'fixed';
|
|
291
|
+
/** Total plot height (px), split evenly into the up (L) and down (R) wings. */
|
|
292
|
+
height?: number;
|
|
293
|
+
className?: string;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* The dual-voltra (bilateral) DIVERGING per-rep velocity chart. The up-wing stream grows UP, the
|
|
297
|
+
* down-wing stream grows DOWN from one shared centre axis. The `hero` variant COMPOSES two single
|
|
298
|
+
* {@link VelocityStrip} heroes (see {@link DualVelocityHero}) so any hero improvement reaches the
|
|
299
|
+
* dual for free; `rail` uses a lean value-height renderer ({@link DualVelocityRail}); `compact` folds
|
|
300
|
+
* the pair into one 8px strip ({@link DualVelocityCompactStrip}). Single-voltra sets keep using
|
|
301
|
+
* {@link VelocityStrip} (`variant="hero"`) — unchanged.
|
|
302
|
+
*/
|
|
303
|
+
declare function DualVelocityStrip({ left, right, zones, barColor, targetReps, liveRepIndex, variant, scale, height, className, ...props }: DualVelocityStripProps): react_jsx_runtime.JSX.Element;
|
|
304
|
+
declare function VelocityStrip({ velocities, set, zones, barColor, showLossBands, orientation, scaleMax, hideBaseline, columnSlots, label, liveRepIndex, expanded, onToggle, onRepPress, variant, height, targetReps, scale, showNumbers, showInfo, className, ...props }: VelocityStripProps): react_jsx_runtime.JSX.Element | null;
|
|
171
305
|
|
|
172
306
|
type SetRowUnit = 'lbs' | 'kg';
|
|
173
307
|
/** A set's lifecycle: logged (`done`), being performed now (`live`), or planned (`todo`). */
|
|
@@ -1020,4 +1154,4 @@ declare function groupExercises(exercises: ActiveWorkoutExercise[], supersets: A
|
|
|
1020
1154
|
*/
|
|
1021
1155
|
declare function ActiveWorkoutPage({ title, subtitle, exercises, supersets, input, rest, initialResting, className, ...props }: ActiveWorkoutPageProps): react_jsx_runtime.JSX.Element;
|
|
1022
1156
|
|
|
1023
|
-
export {
|
|
1157
|
+
export { type StrengthTrendDataPoint as $, type ActiveExerciseStatus as A, type MesoProgressBarProps as B, CapacityBandChart as C, type DualVelocityStream as D, type ExerciseIndicatorKind as E, type MesoStatus as F, type MesoVolumeHeatmapEntry as G, type PlanWeek as H, INDICATOR_PRECEDENCE as I, type PlanWorkout as J, type ProgramBreadcrumb as K, type ProgramNavLevel as L, type Meso as M, type ProgramPlanningPageProps as N, type ProgramSelection as O, type PlanMeso as P, SET_STRIP_VARIABLE_COLOR as Q, SET_STRIP_ZONES as R, type SetStripSet as S, SetBar as T, type SetBarProps as U, SetRow as V, type SetRowState as W, type SetRowUnit as X, StrengthTrendChart as Y, type StrengthTrendChartMesoBoundary as Z, type StrengthTrendChartProps as _, type SetRowProps as a, type VbtSummary as a0, type VelocitySet as a1, VelocityStrip as a2, type VelocityStripProps as a3, type VelocityZoneBandProp as a4, WeekRow as a5, type WeekRowProps as a6, type WeekRowWorkout as a7, WorkoutCard as a8, type WorkoutCardProps as a9, findMeso as aA, findWeek as aB, findWorkout as aC, groupExercises as aD, isUpcomingExercise as aE, summarizeVbt as aF, toActiveCardProps as aG, toExerciseCardProps as aH, toProgressBarMesos as aI, type WorkoutDot as aa, type WorkoutDotStatus as ab, type WorkoutGroup as ac, type WorkoutMuscleGroup as ad, type WorkoutMuscleVolumeStatus as ae, WorkoutPill as af, type WorkoutPillProps as ag, type WorkoutPillStatus as ah, type WorkoutProgress as ai, type WorkoutStatus as aj, calculateMeanVelocity as ak, calculateVelocityLoss as al, getVelocityZoneColor as am, getVelocityZoneName as an, resolveIndicator as ao, velocityZoneColor as ap, ActiveWorkoutPage as aq, EXERCISE_DETAIL_TABS as ar, ExerciseDetailPage as as, ProgramPlanningPage as at, buildBreadcrumbs as au, countCompletedSets as av, deriveExerciseStats as aw, deriveNavLevel as ax, deriveWorkoutProgress as ay, findActiveExercise as az, type ActiveWorkoutExercise as b, type ActiveWorkoutInput as c, type ActiveWorkoutPageProps as d, type ActiveWorkoutRest as e, type ActiveWorkoutSuperset as f, type CapacityBandChartProps as g, type CapacityBandDataPoint as h, type CapacityBandProjection as i, DualVelocityStrip as j, type DualVelocityStripProps as k, ExerciseCard as l, type ExerciseCardProps as m, type ExerciseDetailEntry as n, type ExerciseDetailHeader as o, type ExerciseDetailPageProps as p, type ExerciseDetailStats as q, type ExerciseDetailTab as r, ExerciseIndicator as s, type ExerciseIndicatorProps as t, type ExerciseTrend as u, type ExerciseVbt as v, type ExerciseVbtSet as w, MesoCard as x, type MesoCardProps as y, MesoProgressBar as z };
|
|
@@ -18,6 +18,22 @@ interface WorkoutPillProps extends ViewProps {
|
|
|
18
18
|
}
|
|
19
19
|
declare function WorkoutPill({ name, status, pulse, onPress, highlighted, className, ...props }: WorkoutPillProps): react_jsx_runtime.JSX.Element;
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* One drawn cell of the chart. `rep` carries a `value` and draws a value-height bar;
|
|
23
|
+
* `todo` / `variable` / `continue` are the set-type window stubs (planned remainder, the
|
|
24
|
+
* range floor..max window, the AMRAP/myo open tail); `empty` is a rep COLUMN a side didn't
|
|
25
|
+
* log — a faint constant-contrast placeholder that keeps the two diverging wings index-locked
|
|
26
|
+
* (a lagging side's missing rep sits at the SAME column index as the other side's rep).
|
|
27
|
+
* `leadingGap` adds spacing BEFORE the cell beyond the uniform inter-bar gap — the WIDE
|
|
28
|
+
* chunk-notch that splits drop sub-loads / myo clusters / cluster intra-rests. Absent
|
|
29
|
+
* `leadingGap` = the ordinary rep gap.
|
|
30
|
+
*/
|
|
31
|
+
interface SetSlot {
|
|
32
|
+
kind: 'rep' | 'todo' | 'variable' | 'continue' | 'empty';
|
|
33
|
+
value?: number;
|
|
34
|
+
leadingGap?: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
21
37
|
/**
|
|
22
38
|
* Structural velocity-zone band accepted from an upstream analytics source
|
|
23
39
|
* (e.g. workout-analytics' `VelocityZones.bands`).
|
|
@@ -68,10 +84,63 @@ interface VelocityStripProps extends ViewProps {
|
|
|
68
84
|
*/
|
|
69
85
|
zones?: readonly VelocityZoneBandProp[];
|
|
70
86
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
87
|
+
* Bar-fill coloring mode. `loss` (DEFAULT) — color each performed bar by its
|
|
88
|
+
* velocity LOSS from the set's OWN best (see {@link getVelocityLossColor}), so a
|
|
89
|
+
* fatiguing set reads green→red by loss regardless of its absolute speed; ignores
|
|
90
|
+
* {@link zones} (it is a wholly separate scale). `zone` — color from the absolute
|
|
91
|
+
* velocity-zone scale ({@link zones} when provided, else the built-in
|
|
92
|
+
* ≥1.0/≥0.75/≥0.5 default). `todo`/`variable`/`continue` slots are unaffected either way.
|
|
93
|
+
*/
|
|
94
|
+
barColor?: 'zone' | 'loss';
|
|
95
|
+
/**
|
|
96
|
+
* `hero` only: draw the VL20 / VL30 velocity-loss decision bands behind the bars
|
|
97
|
+
* (see {@link VelocityLossBands}). Defaults to on when {@link barColor} is `loss`
|
|
98
|
+
* (the default), off for `zone` — the bands and the loss bar-fill are the two
|
|
99
|
+
* halves of the same loss-relative language.
|
|
100
|
+
*/
|
|
101
|
+
showLossBands?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* `hero` only: `up` (default) grows bars UP from a bottom baseline; `down` mirrors
|
|
104
|
+
* the whole plot (bars grow DOWN from a top baseline, text upright). The diverging
|
|
105
|
+
* dual is just an `up` hero over a `down` hero sharing one axis — so any hero
|
|
106
|
+
* improvement reaches the dual for free.
|
|
107
|
+
*/
|
|
108
|
+
orientation?: 'up' | 'down';
|
|
109
|
+
/**
|
|
110
|
+
* `hero` only: OVERRIDE the height-scaling denominator with `scaleMax * headroom` instead of
|
|
111
|
+
* this strip's own `peak`/`fixed` scale. Affects BAR HEIGHT ONLY — velocity-LOSS coloring and
|
|
112
|
+
* the running-best reference line still measure off THIS strip's own velocities. The diverging
|
|
113
|
+
* dual passes the pair's shared max here so a stronger arm's bars read TALLER against one common
|
|
114
|
+
* scale while each arm still colors by its own loss.
|
|
115
|
+
*/
|
|
116
|
+
scaleMax?: number;
|
|
117
|
+
/**
|
|
118
|
+
* `hero` only (internal): suppress this strip's own 2px baseline border. The diverging dual sets
|
|
119
|
+
* it on BOTH composed wings and draws ONE shared centre axis where they meet, so the axis is a
|
|
120
|
+
* single crisp line rather than two abutting baselines reading as a double-thick rule.
|
|
121
|
+
*/
|
|
122
|
+
hideBaseline?: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* `hero` only (internal): the EXACT rendered column structure, overriding this strip's own
|
|
125
|
+
* slot-building. The diverging dual builds ONE index-locked structure shared by both wings (same
|
|
126
|
+
* rep indices, same WIDE-gap positions, same column count; a column a side didn't log renders
|
|
127
|
+
* `empty`) and passes it here so bars line up column-for-column across the centre axis. Bar
|
|
128
|
+
* height / color / the running-best reference still read this strip's own `velocities`.
|
|
129
|
+
*/
|
|
130
|
+
columnSlots?: SetSlot[];
|
|
131
|
+
/**
|
|
132
|
+
* `hero` only: an optional stream / slot NAME (e.g. "Left Arm"), rendered as a rotated vertical
|
|
133
|
+
* edge label down the chart's left gutter — the same treatment the diverging dual gives each wing,
|
|
134
|
+
* so a single hero and a dual read consistently. Omitted → no gutter.
|
|
135
|
+
*/
|
|
136
|
+
label?: string;
|
|
137
|
+
/**
|
|
138
|
+
* Live mode: index of the most-recently-completed rep. That bar GROWS UP FROM
|
|
139
|
+
* THE BASELINE to its full height as it enters, tracking the rep as it lands;
|
|
140
|
+
* if it is also the current set peak (a new best) the growth slightly
|
|
141
|
+
* overshoots then settles, reading as a small bounce. Only the latest bar
|
|
142
|
+
* animates. Honors `prefers-reduced-motion`. Framed `expanded` chart and
|
|
143
|
+
* `hero` only (interactive tap-to-expand use).
|
|
75
144
|
*/
|
|
76
145
|
liveRepIndex?: number;
|
|
77
146
|
/**
|
|
@@ -83,16 +152,17 @@ interface VelocityStripProps extends ViewProps {
|
|
|
83
152
|
onToggle?: () => void;
|
|
84
153
|
onRepPress?: (index: number, velocity: number) => void;
|
|
85
154
|
/**
|
|
86
|
-
* `
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* off it's a bare strip — the
|
|
91
|
-
* — the across-the-room, single-set wall
|
|
92
|
-
* label, a dashed running-best reference line, and dashed
|
|
93
|
-
* still to come (see {@link targetReps}).
|
|
155
|
+
* `compact` — the flat resting strip: {@link SetBarChart} in FLAT mode (uniform short bars, no
|
|
156
|
+
* value labels), sharing hero's exact geometry (colors, paper, spacing, chunk-notch, slots, gutter).
|
|
157
|
+
* `expanded` — the velocity-HEIGHT bar chart (rounded tops), whose chrome is prop-driven: with
|
|
158
|
+
* {@link showNumbers} or {@link showInfo} on it's the framed chart (raised surface, padding, per-bar
|
|
159
|
+
* m/s labels, mean/loss info row, interactive collapse); with both off it's a bare strip — the
|
|
160
|
+
* active-set "spotlight" of {@link ExerciseCard}. `hero` — the across-the-room, single-set wall
|
|
161
|
+
* treatment: tall bars, a per-bar m/s value label, a dashed running-best reference line, and dashed
|
|
162
|
+
* placeholders for the reps still to come (see {@link targetReps}). All three share SetBarChart, so
|
|
163
|
+
* bars align across compact / expanded / hero.
|
|
94
164
|
*/
|
|
95
|
-
variant?: '
|
|
165
|
+
variant?: 'compact' | 'expanded' | 'hero';
|
|
96
166
|
/** `expanded` / `hero` plot height in px (bars scale to this). Default 60 (`expanded`) / 220 (`hero`). */
|
|
97
167
|
height?: number;
|
|
98
168
|
/**
|
|
@@ -167,7 +237,71 @@ type VelocitySet =
|
|
|
167
237
|
groupSize: number;
|
|
168
238
|
planned?: number;
|
|
169
239
|
};
|
|
170
|
-
|
|
240
|
+
/** One voltra's velocity stream — the SAME shape VelocityStrip accepts (one of these). */
|
|
241
|
+
interface DualVelocityStream {
|
|
242
|
+
/** Per-rep MEAN concentric velocity (m/s) for this side. */
|
|
243
|
+
velocities?: number[];
|
|
244
|
+
/** A structured set descriptor for this side (drives the typed slot vocabulary). */
|
|
245
|
+
set?: VelocitySet;
|
|
246
|
+
/**
|
|
247
|
+
* The side's SLOT NAME (e.g. "Left Arm"), rendered as the vertical edge label. This is
|
|
248
|
+
* the slot's identity supplied by data — there is no hardcoded LEFT/RIGHT fallback. When
|
|
249
|
+
* absent or empty, that side renders no label.
|
|
250
|
+
*/
|
|
251
|
+
label?: string;
|
|
252
|
+
}
|
|
253
|
+
interface DualVelocityStripProps extends ViewProps {
|
|
254
|
+
/** The up-wing stream — drawn growing UP from the centre axis; its edge name comes from `left.label`. */
|
|
255
|
+
left: DualVelocityStream;
|
|
256
|
+
/** The down-wing stream — drawn growing DOWN from the centre axis; its edge name comes from `right.label`. */
|
|
257
|
+
right: DualVelocityStream;
|
|
258
|
+
/**
|
|
259
|
+
* Optional velocity-zone bands (shape-compatible with WA's `VelocityZones.bands`),
|
|
260
|
+
* shared with {@link VelocityStrip}. Colors the reps by zone on BOTH sides; side is
|
|
261
|
+
* never encoded by hue. When omitted the built-in default scale is used.
|
|
262
|
+
*/
|
|
263
|
+
zones?: readonly VelocityZoneBandProp[];
|
|
264
|
+
/**
|
|
265
|
+
* Bar-fill coloring mode, matching {@link VelocityStrip}. `loss` (DEFAULT) — each
|
|
266
|
+
* wing colors by its velocity LOSS from THAT arm's own best (per-wing, since arms
|
|
267
|
+
* fatigue independently). `zone` — the shared absolute zone scale. Side is never
|
|
268
|
+
* encoded by hue either way.
|
|
269
|
+
*/
|
|
270
|
+
barColor?: 'zone' | 'loss';
|
|
271
|
+
/**
|
|
272
|
+
* Planned rep count. Reps beyond a side's performed count draw as mirrored dashed
|
|
273
|
+
* todo stubs (same "3 of 8 done" read as the single hero), on both wings.
|
|
274
|
+
*/
|
|
275
|
+
targetReps?: number;
|
|
276
|
+
/** Index of the most-recently-completed rep; that mirrored pair animates in (hero only). */
|
|
277
|
+
liveRepIndex?: number;
|
|
278
|
+
/**
|
|
279
|
+
* `hero` — the across-the-room wall scale: tall wings, per-rep m/s value labels, and a dashed
|
|
280
|
+
* running-best reference line per side. `compact` — the flat resting form: dual-hero but flat +
|
|
281
|
+
* no labels (both wings are the `compact` VelocityStrip variant), same aligned structure + shared
|
|
282
|
+
* gutter + axis. `rail` — the compact rail-expanded lean renderer, no labels / reference lines.
|
|
283
|
+
*/
|
|
284
|
+
variant?: 'hero' | 'compact' | 'rail';
|
|
285
|
+
/**
|
|
286
|
+
* Bar-height scaling, shared across BOTH wings so the L/R asymmetry reads as bar
|
|
287
|
+
* length against one scale. `peak` (default) = the pair's max +headroom; `fixed` =
|
|
288
|
+
* a fixed velocity ceiling.
|
|
289
|
+
*/
|
|
290
|
+
scale?: 'peak' | 'fixed';
|
|
291
|
+
/** Total plot height (px), split evenly into the up (L) and down (R) wings. */
|
|
292
|
+
height?: number;
|
|
293
|
+
className?: string;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* The dual-voltra (bilateral) DIVERGING per-rep velocity chart. The up-wing stream grows UP, the
|
|
297
|
+
* down-wing stream grows DOWN from one shared centre axis. The `hero` variant COMPOSES two single
|
|
298
|
+
* {@link VelocityStrip} heroes (see {@link DualVelocityHero}) so any hero improvement reaches the
|
|
299
|
+
* dual for free; `rail` uses a lean value-height renderer ({@link DualVelocityRail}); `compact` folds
|
|
300
|
+
* the pair into one 8px strip ({@link DualVelocityCompactStrip}). Single-voltra sets keep using
|
|
301
|
+
* {@link VelocityStrip} (`variant="hero"`) — unchanged.
|
|
302
|
+
*/
|
|
303
|
+
declare function DualVelocityStrip({ left, right, zones, barColor, targetReps, liveRepIndex, variant, scale, height, className, ...props }: DualVelocityStripProps): react_jsx_runtime.JSX.Element;
|
|
304
|
+
declare function VelocityStrip({ velocities, set, zones, barColor, showLossBands, orientation, scaleMax, hideBaseline, columnSlots, label, liveRepIndex, expanded, onToggle, onRepPress, variant, height, targetReps, scale, showNumbers, showInfo, className, ...props }: VelocityStripProps): react_jsx_runtime.JSX.Element | null;
|
|
171
305
|
|
|
172
306
|
type SetRowUnit = 'lbs' | 'kg';
|
|
173
307
|
/** A set's lifecycle: logged (`done`), being performed now (`live`), or planned (`todo`). */
|
|
@@ -1020,4 +1154,4 @@ declare function groupExercises(exercises: ActiveWorkoutExercise[], supersets: A
|
|
|
1020
1154
|
*/
|
|
1021
1155
|
declare function ActiveWorkoutPage({ title, subtitle, exercises, supersets, input, rest, initialResting, className, ...props }: ActiveWorkoutPageProps): react_jsx_runtime.JSX.Element;
|
|
1022
1156
|
|
|
1023
|
-
export {
|
|
1157
|
+
export { type StrengthTrendDataPoint as $, type ActiveExerciseStatus as A, type MesoProgressBarProps as B, CapacityBandChart as C, type DualVelocityStream as D, type ExerciseIndicatorKind as E, type MesoStatus as F, type MesoVolumeHeatmapEntry as G, type PlanWeek as H, INDICATOR_PRECEDENCE as I, type PlanWorkout as J, type ProgramBreadcrumb as K, type ProgramNavLevel as L, type Meso as M, type ProgramPlanningPageProps as N, type ProgramSelection as O, type PlanMeso as P, SET_STRIP_VARIABLE_COLOR as Q, SET_STRIP_ZONES as R, type SetStripSet as S, SetBar as T, type SetBarProps as U, SetRow as V, type SetRowState as W, type SetRowUnit as X, StrengthTrendChart as Y, type StrengthTrendChartMesoBoundary as Z, type StrengthTrendChartProps as _, type SetRowProps as a, type VbtSummary as a0, type VelocitySet as a1, VelocityStrip as a2, type VelocityStripProps as a3, type VelocityZoneBandProp as a4, WeekRow as a5, type WeekRowProps as a6, type WeekRowWorkout as a7, WorkoutCard as a8, type WorkoutCardProps as a9, findMeso as aA, findWeek as aB, findWorkout as aC, groupExercises as aD, isUpcomingExercise as aE, summarizeVbt as aF, toActiveCardProps as aG, toExerciseCardProps as aH, toProgressBarMesos as aI, type WorkoutDot as aa, type WorkoutDotStatus as ab, type WorkoutGroup as ac, type WorkoutMuscleGroup as ad, type WorkoutMuscleVolumeStatus as ae, WorkoutPill as af, type WorkoutPillProps as ag, type WorkoutPillStatus as ah, type WorkoutProgress as ai, type WorkoutStatus as aj, calculateMeanVelocity as ak, calculateVelocityLoss as al, getVelocityZoneColor as am, getVelocityZoneName as an, resolveIndicator as ao, velocityZoneColor as ap, ActiveWorkoutPage as aq, EXERCISE_DETAIL_TABS as ar, ExerciseDetailPage as as, ProgramPlanningPage as at, buildBreadcrumbs as au, countCompletedSets as av, deriveExerciseStats as aw, deriveNavLevel as ax, deriveWorkoutProgress as ay, findActiveExercise as az, type ActiveWorkoutExercise as b, type ActiveWorkoutInput as c, type ActiveWorkoutPageProps as d, type ActiveWorkoutRest as e, type ActiveWorkoutSuperset as f, type CapacityBandChartProps as g, type CapacityBandDataPoint as h, type CapacityBandProjection as i, DualVelocityStrip as j, type DualVelocityStripProps as k, ExerciseCard as l, type ExerciseCardProps as m, type ExerciseDetailEntry as n, type ExerciseDetailHeader as o, type ExerciseDetailPageProps as p, type ExerciseDetailStats as q, type ExerciseDetailTab as r, ExerciseIndicator as s, type ExerciseIndicatorProps as t, type ExerciseTrend as u, type ExerciseVbt as v, type ExerciseVbtSet as w, MesoCard as x, type MesoCardProps as y, MesoProgressBar as z };
|
package/dist/pages.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as ActiveExerciseStatus,
|
|
1
|
+
export { A as ActiveExerciseStatus, b as ActiveWorkoutExercise, c as ActiveWorkoutInput, aq as ActiveWorkoutPage, d as ActiveWorkoutPageProps, e as ActiveWorkoutRest, f as ActiveWorkoutSuperset, ar as EXERCISE_DETAIL_TABS, n as ExerciseDetailEntry, o as ExerciseDetailHeader, as as ExerciseDetailPage, p as ExerciseDetailPageProps, q as ExerciseDetailStats, r as ExerciseDetailTab, u as ExerciseTrend, v as ExerciseVbt, w as ExerciseVbtSet, P as PlanMeso, H as PlanWeek, J as PlanWorkout, K as ProgramBreadcrumb, L as ProgramNavLevel, at as ProgramPlanningPage, N as ProgramPlanningPageProps, O as ProgramSelection, a0 as VbtSummary, ac as WorkoutGroup, ai as WorkoutProgress, au as buildBreadcrumbs, av as countCompletedSets, aw as deriveExerciseStats, ax as deriveNavLevel, ay as deriveWorkoutProgress, az as findActiveExercise, aA as findMeso, aB as findWeek, aC as findWorkout, aD as groupExercises, aE as isUpcomingExercise, aF as summarizeVbt, aG as toActiveCardProps, aH as toExerciseCardProps, aI as toProgressBarMesos } from './pages-CvsFqNtx.mjs';
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import 'react-native';
|
|
4
4
|
import './MesoStatusCard-CQk71hSi.mjs';
|
package/dist/pages.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as ActiveExerciseStatus,
|
|
1
|
+
export { A as ActiveExerciseStatus, b as ActiveWorkoutExercise, c as ActiveWorkoutInput, aq as ActiveWorkoutPage, d as ActiveWorkoutPageProps, e as ActiveWorkoutRest, f as ActiveWorkoutSuperset, ar as EXERCISE_DETAIL_TABS, n as ExerciseDetailEntry, o as ExerciseDetailHeader, as as ExerciseDetailPage, p as ExerciseDetailPageProps, q as ExerciseDetailStats, r as ExerciseDetailTab, u as ExerciseTrend, v as ExerciseVbt, w as ExerciseVbtSet, P as PlanMeso, H as PlanWeek, J as PlanWorkout, K as ProgramBreadcrumb, L as ProgramNavLevel, at as ProgramPlanningPage, N as ProgramPlanningPageProps, O as ProgramSelection, a0 as VbtSummary, ac as WorkoutGroup, ai as WorkoutProgress, au as buildBreadcrumbs, av as countCompletedSets, aw as deriveExerciseStats, ax as deriveNavLevel, ay as deriveWorkoutProgress, az as findActiveExercise, aA as findMeso, aB as findWeek, aC as findWorkout, aD as groupExercises, aE as isUpcomingExercise, aF as summarizeVbt, aG as toActiveCardProps, aH as toExerciseCardProps, aI as toProgressBarMesos } from './pages-B1hqnGIC.js';
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import 'react-native';
|
|
4
4
|
import './MesoStatusCard-CQk71hSi.js';
|