@titan-design/react-ui 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/dist/chunk-3VLOBS6O.mjs +846 -0
  2. package/dist/chunk-3VLOBS6O.mjs.map +1 -0
  3. package/dist/{chunk-UXVRPOME.mjs → chunk-5SSKGS6E.mjs} +3 -783
  4. package/dist/chunk-5SSKGS6E.mjs.map +1 -0
  5. package/dist/index.d.mts +1005 -4
  6. package/dist/index.d.ts +1005 -4
  7. package/dist/index.js +6043 -213
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +5901 -177
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/theme/index.d.mts +57 -1
  12. package/dist/theme/index.d.ts +57 -1
  13. package/dist/theme/index.js +63 -0
  14. package/dist/theme/index.js.map +1 -1
  15. package/dist/theme/index.mjs +2 -1
  16. package/dist/theme/tokens-css.d.mts +18 -0
  17. package/dist/theme/tokens-css.d.ts +18 -0
  18. package/dist/theme/tokens-css.js +289 -0
  19. package/dist/theme/tokens-css.js.map +1 -0
  20. package/dist/theme/tokens-css.mjs +24 -0
  21. package/dist/theme/tokens-css.mjs.map +1 -0
  22. package/package.json +16 -5
  23. package/src/components/custom/DateTime/DateTime.stories.tsx +1 -1
  24. package/src/components/custom/Gauge/Gauge.stories.tsx +45 -0
  25. package/src/components/custom/Gauge/Gauge.test.tsx +71 -0
  26. package/src/components/custom/Gauge/Gauge.tsx +167 -0
  27. package/src/components/custom/Gauge/index.ts +2 -0
  28. package/src/components/custom/Scatter/Scatter.stories.tsx +85 -0
  29. package/src/components/custom/Scatter/Scatter.test.tsx +96 -0
  30. package/src/components/custom/Scatter/Scatter.tsx +260 -0
  31. package/src/components/custom/Scatter/index.ts +2 -0
  32. package/src/components/custom/Sidebar/Sidebar.tsx +1 -1
  33. package/src/components/custom/Treemap/Treemap.stories.tsx +60 -0
  34. package/src/components/custom/Treemap/Treemap.test.tsx +67 -0
  35. package/src/components/custom/Treemap/Treemap.tsx +192 -0
  36. package/src/components/custom/Treemap/index.ts +2 -0
  37. package/src/components/custom/Workout/BaseBadge.stories.tsx +75 -0
  38. package/src/components/custom/Workout/BaseBadge.test.tsx +102 -0
  39. package/src/components/custom/Workout/BaseBadge.tsx +113 -0
  40. package/src/components/custom/Workout/BodyMap.stories.tsx +121 -0
  41. package/src/components/custom/Workout/BodyMap.test.tsx +124 -0
  42. package/src/components/custom/Workout/BodyMap.tsx +348 -0
  43. package/src/components/custom/Workout/BodyMapDetailPanel.stories.tsx +171 -0
  44. package/src/components/custom/Workout/BodyMapDetailPanel.test.tsx +225 -0
  45. package/src/components/custom/Workout/BodyMapDetailPanel.tsx +478 -0
  46. package/src/components/custom/Workout/CapacityBandChart.stories.tsx +125 -0
  47. package/src/components/custom/Workout/CapacityBandChart.test.tsx +193 -0
  48. package/src/components/custom/Workout/CapacityBandChart.tsx +493 -0
  49. package/src/components/custom/Workout/DeviationBar.stories.tsx +58 -0
  50. package/src/components/custom/Workout/DeviationBar.test.tsx +86 -0
  51. package/src/components/custom/Workout/DeviationBar.tsx +78 -0
  52. package/src/components/custom/Workout/ExerciseCard.stories.tsx +186 -0
  53. package/src/components/custom/Workout/ExerciseCard.test.tsx +319 -0
  54. package/src/components/custom/Workout/ExerciseCard.tsx +429 -0
  55. package/src/components/custom/Workout/InputBar.stories.tsx +75 -0
  56. package/src/components/custom/Workout/InputBar.test.tsx +116 -0
  57. package/src/components/custom/Workout/InputBar.tsx +163 -0
  58. package/src/components/custom/Workout/IntensityBar.stories.tsx +60 -0
  59. package/src/components/custom/Workout/IntensityBar.test.tsx +113 -0
  60. package/src/components/custom/Workout/IntensityBar.tsx +166 -0
  61. package/src/components/custom/Workout/MesoCard.stories.tsx +152 -0
  62. package/src/components/custom/Workout/MesoCard.test.tsx +170 -0
  63. package/src/components/custom/Workout/MesoCard.tsx +235 -0
  64. package/src/components/custom/Workout/MesoProgressBar.stories.tsx +85 -0
  65. package/src/components/custom/Workout/MesoProgressBar.test.tsx +141 -0
  66. package/src/components/custom/Workout/MesoProgressBar.tsx +161 -0
  67. package/src/components/custom/Workout/MesoStatusCard.stories.tsx +126 -0
  68. package/src/components/custom/Workout/MesoStatusCard.test.tsx +209 -0
  69. package/src/components/custom/Workout/MesoStatusCard.tsx +456 -0
  70. package/src/components/custom/Workout/MuscleGroupChip.stories.tsx +118 -0
  71. package/src/components/custom/Workout/MuscleGroupChip.test.tsx +91 -0
  72. package/src/components/custom/Workout/MuscleGroupChip.tsx +92 -0
  73. package/src/components/custom/Workout/PlaceholderStrip.stories.tsx +94 -0
  74. package/src/components/custom/Workout/PlaceholderStrip.test.tsx +83 -0
  75. package/src/components/custom/Workout/PlaceholderStrip.tsx +91 -0
  76. package/src/components/custom/Workout/PrBadge.stories.tsx +105 -0
  77. package/src/components/custom/Workout/PrBadge.test.tsx +111 -0
  78. package/src/components/custom/Workout/PrBadge.tsx +103 -0
  79. package/src/components/custom/Workout/PrHistoryModal.stories.tsx +116 -0
  80. package/src/components/custom/Workout/PrHistoryModal.test.tsx +161 -0
  81. package/src/components/custom/Workout/PrHistoryModal.tsx +244 -0
  82. package/src/components/custom/Workout/ReadinessCheck.stories.tsx +126 -0
  83. package/src/components/custom/Workout/ReadinessCheck.test.tsx +181 -0
  84. package/src/components/custom/Workout/ReadinessCheck.tsx +266 -0
  85. package/src/components/custom/Workout/RestTimer.tsx +8 -6
  86. package/src/components/custom/Workout/SetRow.stories.tsx +165 -0
  87. package/src/components/custom/Workout/SetRow.test.tsx +222 -0
  88. package/src/components/custom/Workout/SetRow.tsx +253 -0
  89. package/src/components/custom/Workout/Sparkline.stories.tsx +125 -0
  90. package/src/components/custom/Workout/Sparkline.test.tsx +113 -0
  91. package/src/components/custom/Workout/Sparkline.tsx +188 -0
  92. package/src/components/custom/Workout/StatusDot.stories.tsx +150 -0
  93. package/src/components/custom/Workout/StatusDot.test.tsx +165 -0
  94. package/src/components/custom/Workout/StatusDot.tsx +159 -0
  95. package/src/components/custom/Workout/StrengthTrendChart.stories.tsx +130 -0
  96. package/src/components/custom/Workout/StrengthTrendChart.test.tsx +217 -0
  97. package/src/components/custom/Workout/StrengthTrendChart.tsx +628 -0
  98. package/src/components/custom/Workout/SupersetWrapper.tsx +1 -2
  99. package/src/components/custom/Workout/TempoDisplay.stories.tsx +66 -0
  100. package/src/components/custom/Workout/TempoDisplay.test.tsx +90 -0
  101. package/src/components/custom/Workout/TempoDisplay.tsx +207 -0
  102. package/src/components/custom/Workout/VelocityStrip.stories.tsx +125 -0
  103. package/src/components/custom/Workout/VelocityStrip.test.tsx +234 -0
  104. package/src/components/custom/Workout/VelocityStrip.tsx +287 -0
  105. package/src/components/custom/Workout/WeekRow.stories.tsx +121 -0
  106. package/src/components/custom/Workout/WeekRow.test.tsx +117 -0
  107. package/src/components/custom/Workout/WeekRow.tsx +140 -0
  108. package/src/components/custom/Workout/WeightBadge.stories.tsx +87 -0
  109. package/src/components/custom/Workout/WeightBadge.test.tsx +164 -0
  110. package/src/components/custom/Workout/WeightBadge.tsx +113 -0
  111. package/src/components/custom/Workout/WorkoutCard.stories.tsx +135 -0
  112. package/src/components/custom/Workout/WorkoutCard.test.tsx +172 -0
  113. package/src/components/custom/Workout/WorkoutCard.tsx +226 -0
  114. package/src/components/custom/Workout/WorkoutPill.stories.tsx +63 -0
  115. package/src/components/custom/Workout/WorkoutPill.test.tsx +153 -0
  116. package/src/components/custom/Workout/WorkoutPill.tsx +177 -0
  117. package/src/components/custom/Workout/index.ts +113 -0
  118. package/src/components/custom/Workout/muscleTaxonomy.ts +252 -0
  119. package/src/components/custom/index.ts +3 -0
  120. package/src/components/custom/stepper/Stepper.stories.tsx +1 -1
  121. package/src/components/custom/stepper/Stepper.tsx +2 -2
  122. package/src/components/ui/autocomplete/Autocomplete.stories.tsx +1 -1
  123. package/src/components/ui/autocomplete/Autocomplete.tsx +1 -1
  124. package/src/components/ui/card/Card.tsx +1 -1
  125. package/src/components/ui/checkbox/Checkbox.tsx +1 -1
  126. package/src/components/ui/collapse/Collapse.tsx +1 -1
  127. package/src/components/ui/data-row/DataRow.stories.tsx +1 -1
  128. package/src/components/ui/drawer/Drawer.tsx +3 -3
  129. package/src/components/ui/form-field/FormField.tsx +1 -1
  130. package/src/components/ui/help-tip/HelpTip.tsx +1 -1
  131. package/src/components/ui/menu/Menu.tsx +2 -2
  132. package/src/components/ui/pill/Pill.tsx +1 -1
  133. package/src/components/ui/popover/Popover.stories.tsx +2 -2
  134. package/src/components/ui/popover/Popover.tsx +1 -1
  135. package/src/components/ui/radio/Radio.stories.tsx +1 -1
  136. package/src/components/ui/section/Section.stories.tsx +4 -4
  137. package/src/components/ui/select/Select.tsx +1 -1
  138. package/src/components/ui/stack/Stack.stories.tsx +4 -4
  139. package/src/components/ui/tabs/Tabs.tsx +2 -2
  140. package/src/components/ui/toolbar-button/ToolbarButton.stories.tsx +1 -1
  141. package/src/components/ui/toolbar-button/ToolbarButton.tsx +1 -1
  142. package/src/examples/react-hook-form/ControlledFields.tsx +171 -0
  143. package/src/examples/react-hook-form/ReactHookForm.stories.tsx +51 -0
  144. package/src/examples/react-hook-form/ReactHookForm.test.tsx +61 -0
  145. package/src/examples/react-hook-form/RhfContactForm.tsx +99 -0
  146. package/src/stories/PresetShowcase.stories.tsx +15 -15
  147. package/src/theme/index.ts +2 -1
  148. package/src/theme/manifest/css-property-manifest.example.json +79 -0
  149. package/src/theme/manifest/css-property-manifest.schema.json +93 -0
  150. package/src/theme/manifest/css-property-manifest.test.ts +81 -0
  151. package/src/theme/manifest/css-property-manifest.types.ts +49 -0
  152. package/src/theme/manifest/css-property-manifest.validate.ts +84 -0
  153. package/src/theme/manifest/index.ts +11 -0
  154. package/src/theme/tokens-css.test.ts +28 -0
  155. package/src/theme/tokens-css.ts +34 -0
  156. package/src/theme/workout-tokens.ts +61 -0
  157. package/dist/chunk-UXVRPOME.mjs.map +0 -1
package/dist/index.d.mts CHANGED
@@ -1,8 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React from 'react';
2
+ import React, { ReactNode } from 'react';
3
3
  import { ViewProps, PressableProps, View, TextInputProps, TextInput, ImageSourcePropType, ModalProps as ModalProps$1, TextProps } from 'react-native';
4
4
  import { ElevationLevel, GlowIntensity } from './theme/index.mjs';
5
- export { ComponentType, ElevationConfig, ShadowIntensity, ShadowSurface, ThemeConfig, ThemeMode, ThemePreset, ThemePresetColors, ThemePresetFonts, ThemePresetRadii, ThemePresetShadows, applyThemePreset, audiobookPreset, buttonSizes, componentElevationRanges, createFlatShadow, createPressedHoverShadow, createPressedShadow, createRaisedHoverShadow, createRaisedShadow, darkThemeCSSVars, darken, defaultPreset, discreteRainbow, elevationSystem, getBaseSurfaceColor, getDiscreteRainbowColor, getElevationConfig, getElevationShadow, getElevationSurface, getGlowShadow, getHoverColors, getSemanticColors, getThemeCSSVars, getValidatedElevation, gluestackConfig, hexToRgb, hsvToRgb, isDark, lightThemeCSSVars, lighten, neumorphicShadows, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveShadows, primitiveSpacing, primitiveTypography, primitiveZIndex, rgbToHex, rgbToHsv, semanticColorsDark, semanticColorsLight, semanticTypography, shadowColors } from './theme/index.mjs';
5
+ export { ComponentType, CssPropertyEntry, CssPropertyManifest, ElevationConfig, ManifestValidationResult, ShadowIntensity, ShadowSurface, ThemeConfig, ThemeMode, ThemePreset, ThemePresetColors, ThemePresetFonts, ThemePresetRadii, ThemePresetShadows, VariantAxes, VariantOverride, applyThemePreset, audiobookPreset, buttonSizes, componentElevationRanges, createFlatShadow, createPressedHoverShadow, createPressedShadow, createRaisedHoverShadow, createRaisedShadow, darkThemeCSSVars, darken, defaultPreset, discreteRainbow, elevationSystem, getBaseSurfaceColor, getDiscreteRainbowColor, getElevationConfig, getElevationShadow, getElevationSurface, getGlowShadow, getHoverColors, getSemanticColors, getThemeCSSVars, getValidatedElevation, gluestackConfig, hexToRgb, hsvToRgb, isCssPropertyManifest, isDark, lightThemeCSSVars, lighten, neumorphicShadows, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveShadows, primitiveSpacing, primitiveTypography, primitiveZIndex, rgbToHex, rgbToHsv, semanticColorsDark, semanticColorsLight, semanticTypography, shadowColors, validateCssPropertyManifest } from './theme/index.mjs';
6
6
  import { ClassValue } from 'clsx';
7
7
 
8
8
  type AlertStatus = 'success' | 'info' | 'warning' | 'error';
@@ -2497,6 +2497,215 @@ interface MetricGroupProps extends ViewProps {
2497
2497
  }
2498
2498
  declare function MetricGroup({ className, children, ...props }: MetricGroupProps): react_jsx_runtime.JSX.Element;
2499
2499
 
2500
+ type BaseBadgeVariant = 'plain' | 'pr';
2501
+ type BaseBadgeSize = 'sm' | 'md' | 'lg';
2502
+ interface BaseBadgeProps extends ViewProps {
2503
+ /** Visual variant — plain (neutral) or pr (brand-primary-subtle) */
2504
+ variant?: BaseBadgeVariant;
2505
+ /** Size variant */
2506
+ size?: BaseBadgeSize;
2507
+ /** Optional icon rendered left of children; hidden from a11y tree */
2508
+ icon?: ReactNode;
2509
+ onPress?: () => void;
2510
+ className?: string;
2511
+ children?: ReactNode;
2512
+ }
2513
+ declare function BaseBadge({ variant, size, icon, onPress, className, children, ...props }: BaseBadgeProps): react_jsx_runtime.JSX.Element;
2514
+
2515
+ type WeightBadgeSize = BaseBadgeSize;
2516
+ interface WeightBadgeProps extends Omit<BaseBadgeProps, 'variant' | 'icon' | 'children'> {
2517
+ value: number;
2518
+ unit?: 'lbs' | 'kg';
2519
+ /**
2520
+ * When given, this is an N-rep max (e.g. "5RM"). When omitted, it is an
2521
+ * estimated 1RM / e1RM.
2522
+ */
2523
+ reps?: number;
2524
+ /** Percentage delta from previous mesocycle */
2525
+ delta?: number;
2526
+ isPr?: boolean;
2527
+ /** Show the weight icon */
2528
+ showIcon?: boolean;
2529
+ size?: WeightBadgeSize;
2530
+ onPress?: () => void;
2531
+ className?: string;
2532
+ }
2533
+ declare function WeightBadge({ value, unit, reps, delta, isPr, showIcon, size, onPress, className, ...props }: WeightBadgeProps): react_jsx_runtime.JSX.Element;
2534
+
2535
+ type PRType = 'e1rm' | 'weight' | 'reps' | 'volume' | 'velocity';
2536
+ interface PrBadgeProps extends ViewProps {
2537
+ /** PR type determines auto-generated label */
2538
+ type?: PRType;
2539
+ /** Display label (e.g., "PR e1RM", "PR 5RM"). Auto-generated from type if omitted. */
2540
+ label?: string;
2541
+ /** Show only the star icon, no text label */
2542
+ compact?: boolean;
2543
+ /** Trigger pop animation on mount */
2544
+ animate?: boolean;
2545
+ className?: string;
2546
+ }
2547
+ declare function PrBadge({ type, label: labelProp, compact, animate, className, ...props }: PrBadgeProps): react_jsx_runtime.JSX.Element;
2548
+
2549
+ type StatusDotVariant = 'success' | 'warning' | 'error' | 'neutral' | 'on-track' | 'deviation' | 'future';
2550
+ interface StatusDotProps extends ViewProps {
2551
+ variant: StatusDotVariant;
2552
+ icon?: 'check' | 'exclamation' | 'dash';
2553
+ size?: 'sm' | 'md';
2554
+ /** Adds a subtle glow effect in the variant color */
2555
+ glow?: boolean;
2556
+ label?: string;
2557
+ className?: string;
2558
+ }
2559
+ declare function StatusDot({ variant, icon, size, glow, label, className, ...props }: StatusDotProps): react_jsx_runtime.JSX.Element;
2560
+
2561
+ interface PlaceholderStripProps extends ViewProps {
2562
+ width?: number | string;
2563
+ /** Render as single solid strip or segmented mini-strip */
2564
+ mode?: 'single' | 'segmented';
2565
+ /** Number of segments when mode is 'segmented' */
2566
+ segments?: number;
2567
+ className?: string;
2568
+ }
2569
+ declare function PlaceholderStrip({ mode, segments, ...props }: PlaceholderStripProps): react_jsx_runtime.JSX.Element;
2570
+
2571
+ interface TempoDisplayProps extends ViewProps {
2572
+ /** Tempo values: [eccentric, pauseBottom, concentric, pauseTop] in seconds */
2573
+ tempo: [number, number, number, number];
2574
+ size?: 'sm' | 'md';
2575
+ /** Colored phases or mono (all gray) */
2576
+ colored?: boolean;
2577
+ /** Show info tooltip on press */
2578
+ showInfo?: boolean;
2579
+ onPress?: () => void;
2580
+ className?: string;
2581
+ }
2582
+ declare function TempoDisplay({ tempo, size, colored, showInfo, onPress, className, ...props }: TempoDisplayProps): react_jsx_runtime.JSX.Element;
2583
+
2584
+ interface DeviationBarProps extends ViewProps {
2585
+ deviation: number;
2586
+ width?: number;
2587
+ className?: string;
2588
+ }
2589
+ declare function DeviationBar({ deviation, width, className, ...props }: DeviationBarProps): react_jsx_runtime.JSX.Element;
2590
+
2591
+ type IntensityBarOrientation = 'vertical' | 'horizontal';
2592
+ interface IntensityBarProps extends ViewProps {
2593
+ /** Current intensity level 0-1 */
2594
+ level: number;
2595
+ /** MRV/overexertion threshold position 0-1 */
2596
+ threshold?: number;
2597
+ /** Orientation */
2598
+ orientation?: IntensityBarOrientation;
2599
+ /** Height for vertical (default 24px) or width for horizontal */
2600
+ size?: number;
2601
+ /** Width for vertical (default 6px) or height for horizontal */
2602
+ thickness?: number;
2603
+ /** Show threshold label ("MRV") */
2604
+ showThresholdLabel?: boolean;
2605
+ className?: string;
2606
+ }
2607
+ declare function IntensityBar({ level, threshold, orientation, size, thickness, showThresholdLabel, className, ...props }: IntensityBarProps): react_jsx_runtime.JSX.Element;
2608
+
2609
+ /**
2610
+ * Spec statuses: completed | current | upcoming | deload.
2611
+ * `next` and `missed` are additive extras supported by this implementation.
2612
+ */
2613
+ type WorkoutPillStatus = 'completed' | 'current' | 'upcoming' | 'deload' | 'next' | 'missed';
2614
+ interface WorkoutPillProps extends ViewProps {
2615
+ name: string;
2616
+ status: WorkoutPillStatus;
2617
+ /** Force pulsing animation. Defaults to pulsing only on `current` status. */
2618
+ pulse?: boolean;
2619
+ onPress?: () => void;
2620
+ highlighted?: boolean;
2621
+ className?: string;
2622
+ }
2623
+ declare function WorkoutPill({ name, status, pulse, onPress, highlighted, className, ...props }: WorkoutPillProps): react_jsx_runtime.JSX.Element;
2624
+
2625
+ interface VelocityStripProps extends ViewProps {
2626
+ velocities: number[];
2627
+ expanded?: boolean;
2628
+ onToggle?: () => void;
2629
+ onRepPress?: (index: number, velocity: number) => void;
2630
+ variant?: 'full' | 'mini';
2631
+ showInfo?: boolean;
2632
+ className?: string;
2633
+ }
2634
+ declare function getVelocityZoneColor(velocity: number): string;
2635
+ declare function getVelocityZoneName(velocity: number): string;
2636
+ declare function calculateVelocityLoss(velocities: number[]): number;
2637
+ declare function calculateMeanVelocity(velocities: number[]): number;
2638
+ declare function VelocityStrip({ velocities, expanded, onToggle, onRepPress, variant, showInfo, className, ...props }: VelocityStripProps): react_jsx_runtime.JSX.Element;
2639
+
2640
+ type VolumeStatus$1 = 'untrained' | 'behind' | 'ontrack' | 'target' | 'over';
2641
+ interface MuscleGroupChipProps extends ViewProps {
2642
+ name: string;
2643
+ volumeStatus?: VolumeStatus$1;
2644
+ onPress?: () => void;
2645
+ className?: string;
2646
+ }
2647
+ declare function MuscleGroupChip({ name, volumeStatus, onPress, className, ...props }: MuscleGroupChipProps): react_jsx_runtime.JSX.Element;
2648
+
2649
+ interface SparklineProps extends ViewProps {
2650
+ data: number[];
2651
+ width?: number;
2652
+ height?: number;
2653
+ color?: string;
2654
+ showDots?: boolean;
2655
+ referenceLines?: Array<{
2656
+ value: number;
2657
+ color: string;
2658
+ dashed?: boolean;
2659
+ label?: string;
2660
+ }>;
2661
+ highlightLast?: boolean;
2662
+ className?: string;
2663
+ }
2664
+ declare function Sparkline({ data, width, height, color, showDots, referenceLines, highlightLast, className, ...props }: SparklineProps): react_jsx_runtime.JSX.Element;
2665
+
2666
+ type SetRowMode = 'active' | 'completed' | 'history';
2667
+ interface SetRowProps {
2668
+ mode: SetRowMode;
2669
+ setNumber: number;
2670
+ previous?: {
2671
+ reps: number;
2672
+ weight: number;
2673
+ } | null;
2674
+ reps: number | null;
2675
+ weight: number | null;
2676
+ rpe?: number | null;
2677
+ unit: 'lbs' | 'kg';
2678
+ velocities?: number[];
2679
+ velocityExpanded?: boolean;
2680
+ onVelocityToggle?: () => void;
2681
+ setType?: string;
2682
+ prBadges?: Array<{
2683
+ type: PRType;
2684
+ label: string;
2685
+ }>;
2686
+ isNextSet?: boolean;
2687
+ targets?: {
2688
+ reps: number;
2689
+ weight: number;
2690
+ };
2691
+ }
2692
+ declare function SetRow({ mode, setNumber, previous, reps, weight, rpe, unit, velocities, velocityExpanded, onVelocityToggle, setType, prBadges, isNextSet, targets, }: SetRowProps): react_jsx_runtime.JSX.Element;
2693
+
2694
+ interface InputBarProps {
2695
+ exerciseName: string;
2696
+ setNumber: number;
2697
+ totalSets: number | null;
2698
+ reps: string;
2699
+ weight: string;
2700
+ unit: 'lbs' | 'kg';
2701
+ onRepsChange: (value: string) => void;
2702
+ onWeightChange: (value: string) => void;
2703
+ onRecord: () => void;
2704
+ canRecord: boolean;
2705
+ visible: boolean;
2706
+ }
2707
+ declare function InputBar({ exerciseName, setNumber, totalSets, reps, weight, unit, onRepsChange, onWeightChange, onRecord, canRecord, visible, }: InputBarProps): react_jsx_runtime.JSX.Element | null;
2708
+
2500
2709
  interface RestTimerProps {
2501
2710
  totalSeconds: number;
2502
2711
  elapsedMs: number;
@@ -2507,14 +2716,806 @@ interface RestTimerProps {
2507
2716
  }
2508
2717
  declare function RestTimer({ totalSeconds, elapsedMs, onSkip, onAddTime, nextSetInfo, visible, }: RestTimerProps): react_jsx_runtime.JSX.Element | null;
2509
2718
 
2719
+ type ExerciseCardState = 'collapsed' | 'expanded' | 'upcoming';
2720
+ interface ExerciseCardProps {
2721
+ name: string;
2722
+ state: ExerciseCardState;
2723
+ onToggle: () => void;
2724
+ onNavigateDetail?: () => void;
2725
+ summary?: {
2726
+ sets: number;
2727
+ reps: number | string;
2728
+ weight: number;
2729
+ unit: 'lbs' | 'kg';
2730
+ };
2731
+ e1rm?: {
2732
+ value: number;
2733
+ unit: 'lbs' | 'kg';
2734
+ };
2735
+ isPR?: boolean;
2736
+ setVelocities?: number[][];
2737
+ totalPlannedSets?: number;
2738
+ sets?: SetRowProps[];
2739
+ tempo?: [number, number, number, number];
2740
+ prescription?: string;
2741
+ previousBest?: string;
2742
+ supersetPosition?: 'first' | 'last' | 'middle' | null;
2743
+ supersetColor?: string;
2744
+ }
2745
+ declare function ExerciseCard(props: ExerciseCardProps): react_jsx_runtime.JSX.Element;
2746
+
2510
2747
  interface SupersetWrapperProps {
2511
2748
  label?: string;
2512
2749
  color?: string;
2513
2750
  children: React.ReactNode;
2514
- syncExpansion?: boolean;
2515
2751
  }
2516
2752
  declare function SupersetWrapper({ label, color, children, }: SupersetWrapperProps): react_jsx_runtime.JSX.Element;
2517
2753
 
2754
+ type MesoStatus = 'completed' | 'current' | 'upcoming';
2755
+ interface Meso {
2756
+ id: string;
2757
+ name: string;
2758
+ weekCount: number;
2759
+ status: MesoStatus;
2760
+ /**
2761
+ * 1-based week index of progress within a `current` meso.
2762
+ * Drives the solid fill width. Ignored for non-current mesos.
2763
+ */
2764
+ currentWeek?: number;
2765
+ }
2766
+ interface MesoProgressBarProps extends ViewProps {
2767
+ mesos: Meso[];
2768
+ activeMesoId: string | null;
2769
+ onMesoPress: (mesoId: string) => void;
2770
+ className?: string;
2771
+ }
2772
+ /**
2773
+ * Segmented horizontal bar of mesocycles. Each segment is tappable and its
2774
+ * flex width is proportional to the meso's `weekCount`. The active segment is
2775
+ * highlighted with a 2px brand border to stay in sync with MesoCard selection.
2776
+ *
2777
+ * @example
2778
+ * <MesoProgressBar
2779
+ * mesos={[
2780
+ * { id: 'm1', name: 'Accumulation', weekCount: 4, status: 'completed' },
2781
+ * { id: 'm2', name: 'Intensification', weekCount: 3, status: 'current', currentWeek: 2 },
2782
+ * { id: 'm3', name: 'Peak', weekCount: 2, status: 'upcoming' },
2783
+ * ]}
2784
+ * activeMesoId="m2"
2785
+ * onMesoPress={(id) => console.log(id)}
2786
+ * />
2787
+ */
2788
+ declare function MesoProgressBar({ mesos, activeMesoId, onMesoPress, className, ...props }: MesoProgressBarProps): react_jsx_runtime.JSX.Element;
2789
+
2790
+ interface WeekRowWorkout {
2791
+ name: string;
2792
+ status: WorkoutPillStatus;
2793
+ onPress?: () => void;
2794
+ }
2795
+ interface WeekRowProps extends ViewProps {
2796
+ /** Week index within the mesocycle (1-based) */
2797
+ weekNumber: number;
2798
+ /** Total weeks in the mesocycle */
2799
+ totalWeeks: number;
2800
+ /** Workouts scheduled for this week */
2801
+ workouts: WeekRowWorkout[];
2802
+ /** Planned intensity for the week, 0-1 */
2803
+ intensityLevel: number;
2804
+ /** Optional MRV/overexertion threshold, 0-1 */
2805
+ intensityThreshold?: number;
2806
+ /** Highlights this row as the active week */
2807
+ isCurrent?: boolean;
2808
+ /** Renders this row as a deload week (purple tint, deload pills) */
2809
+ isDeload?: boolean;
2810
+ className?: string;
2811
+ }
2812
+ /**
2813
+ * A single week within a mesocycle, showing the week number, its workout pills,
2814
+ * and a right-aligned vertical intensity indicator.
2815
+ *
2816
+ * @example
2817
+ * <WeekRow
2818
+ * weekNumber={1}
2819
+ * totalWeeks={4}
2820
+ * workouts={[
2821
+ * { name: 'Upper', status: 'completed' },
2822
+ * { name: 'Lower', status: 'current' },
2823
+ * ]}
2824
+ * intensityLevel={0.55}
2825
+ * intensityThreshold={0.8}
2826
+ * isCurrent
2827
+ * />
2828
+ */
2829
+ declare function WeekRow({ weekNumber, totalWeeks, workouts, intensityLevel, intensityThreshold, isCurrent, isDeload, className, ...props }: WeekRowProps): react_jsx_runtime.JSX.Element;
2830
+
2831
+ type WorkoutStatus = 'completed' | 'today' | 'upcoming';
2832
+ /** Spec volume-status vocabulary; mapped to MuscleGroupChip's VolumeStatus internally. */
2833
+ type WorkoutMuscleVolumeStatus = 'under' | 'maintenance' | 'productive' | 'over';
2834
+ interface WorkoutMuscleGroup {
2835
+ /** Muscle group identifier (free-form to match plan data). */
2836
+ group: string;
2837
+ /** Display label, may be abbreviated. */
2838
+ label: string;
2839
+ /** Volume status relative to landmarks. */
2840
+ volumeStatus?: WorkoutMuscleVolumeStatus;
2841
+ }
2842
+ interface WorkoutCardProps extends ViewProps {
2843
+ name: string;
2844
+ date: string;
2845
+ /** e.g. "45 min" */
2846
+ duration?: string;
2847
+ status: WorkoutStatus;
2848
+ muscleGroups: WorkoutMuscleGroup[];
2849
+ totalSets: number;
2850
+ /** Total lbs/kg moved across the workout. */
2851
+ totalVolume?: number;
2852
+ unit: 'lbs' | 'kg';
2853
+ exercises?: ExerciseCardProps[];
2854
+ expanded?: boolean;
2855
+ onToggle?: () => void;
2856
+ className?: string;
2857
+ }
2858
+ /**
2859
+ * A workout within a week: name, date, duration, muscle-group pills, and a
2860
+ * stats summary. When expandable it renders contained ExerciseCards on expand.
2861
+ * Status drives a colored left border, today adds a brand tint, and upcoming
2862
+ * is dimmed.
2863
+ *
2864
+ * @example
2865
+ * <WorkoutCard
2866
+ * name="Upper A"
2867
+ * date="Mon, Jun 23"
2868
+ * duration="45 min"
2869
+ * status="today"
2870
+ * muscleGroups={[{ group: 'chest', label: 'Chest', volumeStatus: 'productive' }]}
2871
+ * totalSets={18}
2872
+ * totalVolume={12450}
2873
+ * unit="lbs"
2874
+ * expanded
2875
+ * onToggle={() => {}}
2876
+ * exercises={exercises}
2877
+ * />
2878
+ */
2879
+ declare function WorkoutCard({ name, date, duration, status, muscleGroups, totalSets, totalVolume, unit, exercises, expanded, onToggle, className, ...props }: WorkoutCardProps): react_jsx_runtime.JSX.Element;
2880
+
2881
+ interface MesoVolumeHeatmapEntry {
2882
+ /** Muscle group identifier (free-form to match plan data). */
2883
+ group: string;
2884
+ /** Planned volume intensity for the group, 0-100. */
2885
+ percentage: number;
2886
+ }
2887
+ interface MesoCardProps extends ViewProps {
2888
+ /** Mesocycle name, e.g. "Accumulation". */
2889
+ name: string;
2890
+ /** Training goal, e.g. "Hypertrophy", "Strength", "Peaking". */
2891
+ goal: string;
2892
+ /** Training split, e.g. "Upper/Lower", "Push/Pull/Legs". */
2893
+ split: string;
2894
+ /** Week range label, e.g. "Weeks 1-4". */
2895
+ weekRange: string;
2896
+ /** Current week within the mesocycle (1-based). */
2897
+ currentWeek?: number;
2898
+ /** Total weeks in the mesocycle. */
2899
+ totalWeeks: number;
2900
+ /** Weeks rendered as a WeekRow list when expanded. */
2901
+ weeks: WeekRowProps[];
2902
+ /** Whether the card is expanded to reveal the week list. */
2903
+ expanded?: boolean;
2904
+ /** Toggles expansion; makes the header a button when provided. */
2905
+ onToggle?: () => void;
2906
+ /** Whether this meso is highlighted in the MesoProgressBar. */
2907
+ highlighted?: boolean;
2908
+ /** Volume heatmap data per muscle group for the meso. */
2909
+ volumeHeatmap?: MesoVolumeHeatmapEntry[];
2910
+ className?: string;
2911
+ }
2912
+ /**
2913
+ * A mesocycle card with name, goal, split, week range, an optional volume
2914
+ * heatmap strip, and an expandable WeekRow list. Highlighting animates the
2915
+ * border toward brand-primary with a subtle glow to stay in sync with the
2916
+ * MesoProgressBar.
2917
+ *
2918
+ * @example
2919
+ * <MesoCard
2920
+ * name="Accumulation"
2921
+ * goal="Hypertrophy"
2922
+ * split="Upper/Lower"
2923
+ * weekRange="Weeks 1-4"
2924
+ * currentWeek={2}
2925
+ * totalWeeks={4}
2926
+ * weeks={weeks}
2927
+ * volumeHeatmap={[{ group: 'chest', percentage: 80 }]}
2928
+ * expanded
2929
+ * onToggle={() => {}}
2930
+ * highlighted
2931
+ * />
2932
+ */
2933
+ declare function MesoCard({ name, goal, split, weekRange, currentWeek, totalWeeks, weeks, expanded, onToggle, highlighted, volumeHeatmap, className, ...props }: MesoCardProps): react_jsx_runtime.JSX.Element;
2934
+
2935
+ type PrRecordType = 'e1rm' | 'weight' | 'reps' | 'volume' | 'velocity';
2936
+ interface PrRecord {
2937
+ /** PR category, drives the row label and ordering grouping. */
2938
+ type: PrRecordType;
2939
+ /** Numeric magnitude (paired with `unit`) or a pre-formatted display string. */
2940
+ value: string | number;
2941
+ /** Unit suffix appended to numeric values, e.g. "lbs" or "kg". */
2942
+ unit?: 'lbs' | 'kg';
2943
+ /** Display date for when the record was set, e.g. "Mar 14" or "2 weeks ago". */
2944
+ date: string;
2945
+ /** Marks the record as recently set; adds a subtle amber glow highlight. */
2946
+ isRecent?: boolean;
2947
+ }
2948
+ interface PrHistoryModalProps extends ViewProps {
2949
+ /** Identifier of the exercise whose PR history is shown. */
2950
+ exerciseId: string;
2951
+ /** Human-readable exercise name for the title and a11y label; falls back to `exerciseId`. */
2952
+ exerciseName?: string;
2953
+ /** PR records to display, expected newest-first. */
2954
+ records: PrRecord[];
2955
+ /** Whether the bottom sheet is visible. */
2956
+ isOpen?: boolean;
2957
+ /** Alias for `isOpen` (spec wording: "isOpen/visible"). `isOpen` wins when both are set. */
2958
+ visible?: boolean;
2959
+ /** Invoked when the sheet requests to close (backdrop, close button, or back gesture). */
2960
+ onClose: () => void;
2961
+ }
2962
+ /**
2963
+ * Bottom-sheet modal listing an exercise's personal-record history. Each row
2964
+ * shows the PR type, value, and date; recent records get a subtle amber glow.
2965
+ * Built on the titan `Drawer` primitive (bottom placement) so it inherits
2966
+ * backdrop dismissal, the back gesture, and `role="dialog"` semantics.
2967
+ *
2968
+ * Typically triggered by tapping a `WeightBadge`, but the modal itself is
2969
+ * controlled — the trigger lives in the consumer.
2970
+ *
2971
+ * @example
2972
+ * <PrHistoryModal
2973
+ * exerciseId="bench-press"
2974
+ * exerciseName="Bench Press"
2975
+ * isOpen={open}
2976
+ * onClose={() => setOpen(false)}
2977
+ * records={[
2978
+ * { type: 'e1rm', value: 245, unit: 'lbs', date: 'Mar 14', isRecent: true },
2979
+ * { type: 'reps', value: '8 @ 185 lbs', date: 'Feb 28' },
2980
+ * ]}
2981
+ * />
2982
+ */
2983
+ declare function PrHistoryModal({ exerciseId, exerciseName, records, isOpen, visible, onClose, ...props }: PrHistoryModalProps): react_jsx_runtime.JSX.Element;
2984
+
2985
+ type WarmUpStatus = 'good' | 'moderate' | 'caution';
2986
+ interface ReadinessFactor {
2987
+ /** Stable identifier; also used to pick the emoji set (sleep/soreness/motivation/stress). */
2988
+ id: string;
2989
+ /** Human label, e.g. "Sleep". */
2990
+ label: string;
2991
+ /** Selected level, 1-5. */
2992
+ value: number;
2993
+ /** Called with the new 1-5 level when an emoji is tapped. */
2994
+ onChange: (value: number) => void;
2995
+ }
2996
+ interface WarmUpValidation {
2997
+ /** Percent below the 14-day rolling velocity average. */
2998
+ velocityDeficit: number;
2999
+ /** Short human recommendation, e.g. "Velocity on target — proceed as planned". */
3000
+ recommendation: string;
3001
+ /** Severity of the deficit. */
3002
+ status: WarmUpStatus;
3003
+ }
3004
+ interface ReadinessCheckProps {
3005
+ /** Subjective readiness factors (Sleep, Soreness, Motivation, Stress). */
3006
+ factors: ReadinessFactor[];
3007
+ /** Computed overall readiness score, 0-100. */
3008
+ score: number;
3009
+ /** VBT warm-up validation result, shown once the warm-up set is performed. */
3010
+ warmUpValidation?: WarmUpValidation;
3011
+ /** Whether the VBT warm-up has been performed. */
3012
+ warmUpCompleted: boolean;
3013
+ /** Called when the assessment is confirmed and the workout can begin. */
3014
+ onConfirm: () => void;
3015
+ className?: string;
3016
+ }
3017
+ /**
3018
+ * Pre-workout readiness assessment combining subjective emoji sliders with an
3019
+ * objective VBT warm-up validation and a computed readiness score.
3020
+ *
3021
+ * @example
3022
+ * <ReadinessCheck
3023
+ * factors={[{ id: 'sleep', label: 'Sleep', value: 4, onChange: setSleep }]}
3024
+ * score={78}
3025
+ * warmUpCompleted
3026
+ * warmUpValidation={{ velocityDeficit: 4, recommendation: 'On target', status: 'good' }}
3027
+ * onConfirm={start}
3028
+ * />
3029
+ */
3030
+ declare function ReadinessCheck({ factors, score, warmUpValidation, warmUpCompleted, onConfirm, className, }: ReadinessCheckProps): react_jsx_runtime.JSX.Element;
3031
+
3032
+ type MesoStatusBadgeVariant = 'success' | 'warning' | 'error';
3033
+ interface MesoStatusBadge {
3034
+ /** Short status label, e.g. "On Track". */
3035
+ label: string;
3036
+ /** Color treatment for the badge. */
3037
+ variant: MesoStatusBadgeVariant;
3038
+ }
3039
+ interface MesoStatusMetric {
3040
+ /** Cell label, e.g. "Prescribed". */
3041
+ label: string;
3042
+ /** Cell value, e.g. "3×8 @ RPE 8". */
3043
+ value: string;
3044
+ }
3045
+ interface MesoStatusGauge {
3046
+ /** Gauge label, e.g. "Intensity". */
3047
+ label: string;
3048
+ /** Fill position 0-1; the 14px marker sits at this level. */
3049
+ level: number;
3050
+ /** Optional right-aligned sublabel, e.g. "Prescribed". */
3051
+ sublabel?: string;
3052
+ }
3053
+ interface MesoStatusCoaching {
3054
+ /** Coaching recommendation copy. */
3055
+ text: string;
3056
+ /** Substrings within `text` to render in bold. */
3057
+ highlights?: string[];
3058
+ }
3059
+ interface MesoStatusNextTarget {
3060
+ /** Leading glyph/emoji, e.g. "→" or "🎯". */
3061
+ icon: string;
3062
+ /** Next-session target copy. */
3063
+ text: string;
3064
+ }
3065
+ interface MesoStatusCardProps extends ViewProps {
3066
+ /** Mesocycle name, e.g. "Hypertrophy Block". */
3067
+ mesoName: string;
3068
+ /** Context line, e.g. "Week 6 of 8 · Upper/Lower". */
3069
+ mesoSubtitle: string;
3070
+ /** Status pill in the header. */
3071
+ statusBadge: MesoStatusBadge;
3072
+ /** Prescription-vs-actual metrics rendered as a 2x2 grid. */
3073
+ metrics: MesoStatusMetric[];
3074
+ /** Intensity / volume gauges stacked vertically. */
3075
+ gauges: MesoStatusGauge[];
3076
+ /** Optional coaching recommendation box. */
3077
+ coaching?: MesoStatusCoaching;
3078
+ /** Optional next-session target box. */
3079
+ nextTarget?: MesoStatusNextTarget;
3080
+ className?: string;
3081
+ }
3082
+ /**
3083
+ * Mesocycle context card for a specific exercise: prescription vs actual
3084
+ * metrics, intensity/volume gauges, and coaching guidance. Composes the titan
3085
+ * `Card` plus the Workout `StatusDot`, and renders the §25 gauge (8px track,
3086
+ * 50% center line, 14px marker) inline since that visual differs from the
3087
+ * IntensityBar/DeviationBar primitives.
3088
+ *
3089
+ * @example
3090
+ * <MesoStatusCard
3091
+ * mesoName="Hypertrophy Block"
3092
+ * mesoSubtitle="Week 6 of 8 · Upper/Lower"
3093
+ * statusBadge={{ label: 'On Track', variant: 'success' }}
3094
+ * metrics={[
3095
+ * { label: 'Prescribed', value: '3×8 @ RPE 8' },
3096
+ * { label: 'Actual', value: '3×8 @ 185 lbs' },
3097
+ * ]}
3098
+ * gauges={[{ label: 'Intensity', level: 0.7, sublabel: 'Actual' }]}
3099
+ * coaching={{ text: 'Add load next session.', highlights: ['Add load'] }}
3100
+ * nextTarget={{ icon: '→', text: '190 lbs × 8' }}
3101
+ * />
3102
+ */
3103
+ declare function MesoStatusCard({ mesoName, mesoSubtitle, statusBadge, metrics, gauges, coaching, nextTarget, className, ...props }: MesoStatusCardProps): react_jsx_runtime.JSX.Element;
3104
+
3105
+ interface StrengthTrendDataPoint {
3106
+ /** ISO date string for the session. */
3107
+ date: string;
3108
+ /** Estimated one-rep max in the chart's unit. */
3109
+ e1rm: number;
3110
+ /** Marks a personal-record session (rendered with a star). */
3111
+ isPR?: boolean;
3112
+ /** Optional human label shown in the tooltip instead of the raw date. */
3113
+ sessionLabel?: string;
3114
+ }
3115
+ interface StrengthTrendChartMesoBoundary {
3116
+ /** ISO date where the mesocycle boundary falls. */
3117
+ date: string;
3118
+ /** Short label, e.g. "Hypertrophy". */
3119
+ label: string;
3120
+ }
3121
+ interface StrengthTrendChartProps extends ViewProps {
3122
+ /** Actual e1RM data points, chronological. */
3123
+ data: StrengthTrendDataPoint[];
3124
+ /** Projected/planned e1RM trajectory, drawn as a dashed line. */
3125
+ projection?: StrengthTrendDataPoint[];
3126
+ /** Chart plot width in pixels. */
3127
+ width: number;
3128
+ /** Chart plot height in pixels (120-160 for the compact variant). */
3129
+ height: number;
3130
+ /** Mesocycle boundary markers (vertical guides + labels). */
3131
+ mesoBoundaries?: StrengthTrendChartMesoBoundary[];
3132
+ /** Called when an actual data point is tapped. */
3133
+ onPointPress?: (point: StrengthTrendDataPoint) => void;
3134
+ /** Unit for display and labels. */
3135
+ unit: 'lbs' | 'kg';
3136
+ /** Animate the left-to-right line draw on mount (default true). */
3137
+ animateOnMount?: boolean;
3138
+ className?: string;
3139
+ }
3140
+ /**
3141
+ * Estimated-1RM line chart over time with an optional dashed plan-projection
3142
+ * line and PR star markers. Rendered entirely with absolutely-positioned
3143
+ * Views (no SVG), following the Sparkline approach. Tapping an actual point
3144
+ * opens a tooltip and fires `onPointPress`. A trend pill below the chart
3145
+ * summarizes the percentage change for the current mesocycle.
3146
+ *
3147
+ * @example
3148
+ * <StrengthTrendChart
3149
+ * data={[{ date: '2026-01-01', e1rm: 225 }, { date: '2026-02-01', e1rm: 245, isPR: true }]}
3150
+ * projection={[{ date: '2026-02-01', e1rm: 245 }, { date: '2026-03-01', e1rm: 260 }]}
3151
+ * width={320}
3152
+ * height={150}
3153
+ * unit="lbs"
3154
+ * />
3155
+ */
3156
+ declare function StrengthTrendChart({ data, projection, width, height, mesoBoundaries, onPointPress, unit, animateOnMount, className, ...props }: StrengthTrendChartProps): react_jsx_runtime.JSX.Element;
3157
+
3158
+ type WorkoutDotStatus = 'within' | 'above' | 'below';
3159
+ interface CapacityBandDataPoint {
3160
+ /** ISO-ish date string (e.g. "2026-06-01"). */
3161
+ date: string;
3162
+ /** Lower bound of the capacity band (MEV equivalent). */
3163
+ bandLow: number;
3164
+ /** Upper bound of the capacity band (MRV equivalent). */
3165
+ bandHigh: number;
3166
+ }
3167
+ interface WorkoutDot {
3168
+ date: string;
3169
+ /** Actual session load score. */
3170
+ load: number;
3171
+ /** Position of the session relative to the band. */
3172
+ status: WorkoutDotStatus;
3173
+ }
3174
+ interface CapacityBandProjection {
3175
+ /** Band shape over the next days if training continues (rises). */
3176
+ withTraining: CapacityBandDataPoint[];
3177
+ /** Band shape over the next days if resting (drops). */
3178
+ withRest: CapacityBandDataPoint[];
3179
+ }
3180
+ interface CapacityBandChartProps extends ViewProps {
3181
+ /** Capacity band shape over time. */
3182
+ band: CapacityBandDataPoint[];
3183
+ /** Workout sessions plotted as dots. */
3184
+ workouts: WorkoutDot[];
3185
+ /** Optional forward projection (next few days). */
3186
+ projection?: CapacityBandProjection;
3187
+ /** Chart width in px. */
3188
+ width: number;
3189
+ /** Chart height in px. */
3190
+ height: number;
3191
+ /** Called when a workout dot is tapped. */
3192
+ onWorkoutPress?: (workout: WorkoutDot) => void;
3193
+ className?: string;
3194
+ }
3195
+ /**
3196
+ * Gentler-Streak-inspired fatigue visualization. Renders a shaded capacity
3197
+ * band (between a rolling MEV/MRV estimate), workout sessions as colored dots
3198
+ * positioned by load, and an optional dashed forward projection that diverges
3199
+ * for "keep training" (rises) versus "rest" (drops). View-based, no SVG:
3200
+ * the band fill is a run of vertical columns and the edges/projection are
3201
+ * rotated line Views (same technique as Sparkline).
3202
+ *
3203
+ * @example
3204
+ * <CapacityBandChart
3205
+ * band={band}
3206
+ * workouts={workouts}
3207
+ * projection={{ withTraining, withRest }}
3208
+ * width={320}
3209
+ * height={180}
3210
+ * onWorkoutPress={(w) => openSession(w)}
3211
+ * />
3212
+ */
3213
+ declare function CapacityBandChart({ band, workouts, projection, width, height, onWorkoutPress, className, ...props }: CapacityBandChartProps): react_jsx_runtime.JSX.Element;
3214
+
3215
+ /**
3216
+ * Full muscle group taxonomy for volume tracking and exercise mapping.
3217
+ * 15 groups — the primary unit for volume accounting.
3218
+ */
3219
+ declare enum MuscleGroup {
3220
+ CHEST = "chest",
3221
+ FRONT_DELTS = "front_delts",
3222
+ SIDE_DELTS = "side_delts",
3223
+ TRICEPS = "triceps",
3224
+ LATS = "lats",
3225
+ UPPER_BACK = "upper_back",
3226
+ REAR_DELTS = "rear_delts",
3227
+ BICEPS = "biceps",
3228
+ FOREARMS = "forearms",
3229
+ QUADS = "quads",
3230
+ HAMSTRINGS = "hamstrings",
3231
+ GLUTES = "glutes",
3232
+ CALVES = "calves",
3233
+ ABS = "abs",
3234
+ OBLIQUES = "obliques"
3235
+ }
3236
+ /**
3237
+ * Simplified muscle group view for beginners. Maps to one or more MuscleGroup.
3238
+ */
3239
+ declare enum SimpleMuscleGroup {
3240
+ CHEST = "chest",
3241
+ BACK = "back",
3242
+ SHOULDERS = "shoulders",
3243
+ BICEPS = "biceps",
3244
+ TRICEPS = "triceps",
3245
+ LEGS = "legs",
3246
+ CORE = "core",
3247
+ FOREARMS = "forearms"
3248
+ }
3249
+ /** Mapping from simplified groups to the full taxonomy. */
3250
+ declare const SIMPLE_TO_DETAILED: Record<SimpleMuscleGroup, MuscleGroup[]>;
3251
+ /** Reverse map: detailed MuscleGroup -> its SimpleMuscleGroup. */
3252
+ declare const DETAILED_TO_SIMPLE: Record<MuscleGroup, SimpleMuscleGroup>;
3253
+ /** Movement category for training split organization. */
3254
+ type MovementCategory = 'push' | 'pull' | 'legs' | 'core';
3255
+ declare const MUSCLE_TO_CATEGORY: Record<MuscleGroup, MovementCategory>;
3256
+ /**
3257
+ * react-native-body-highlighter slug(s) per muscle group. Phase 1 uses the
3258
+ * closest available slug; deltoids share one path and lats/upper-back share
3259
+ * `upper-back` (see doc Level 4 "Recommended approach").
3260
+ */
3261
+ declare const MUSCLE_TO_SVG_SLUGS: Record<MuscleGroup, string[]>;
3262
+ /** Human-readable name per muscle group (used in a11y labels). */
3263
+ declare const MUSCLE_DISPLAY_NAMES: Record<MuscleGroup, string>;
3264
+ /** Human-readable name per simple group. */
3265
+ declare const SIMPLE_DISPLAY_NAMES: Record<SimpleMuscleGroup, string>;
3266
+ /** Volume landmarks per muscle group (weekly working sets). */
3267
+ interface VolumeLandmarks {
3268
+ mev: number;
3269
+ mav: number;
3270
+ mrv: number;
3271
+ }
3272
+ declare const DEFAULT_VOLUME_LANDMARKS: Record<MuscleGroup, VolumeLandmarks>;
3273
+ /** Weekly-volume status relative to MEV/MAV/MRV landmarks. */
3274
+ type VolumeStatus = 'under' | 'maintenance' | 'productive' | 'over';
3275
+ /** Readable label per status for a11y descriptions. */
3276
+ declare const VOLUME_STATUS_LABELS: Record<VolumeStatus, string>;
3277
+ /**
3278
+ * Maps a volume status (and intensity, 0-1) to a heatmap fill color. The
3279
+ * `approaching` token is used when a productive muscle nears its MRV.
3280
+ */
3281
+ declare function getHeatmapColor(status: VolumeStatus | null | undefined, intensity?: number): string;
3282
+
3283
+ interface BodyMapData {
3284
+ muscleGroup: MuscleGroup;
3285
+ /** Intensity 0-1 for heatmap color. */
3286
+ intensity: number;
3287
+ /** Volume status for tooltip / heatmap token. */
3288
+ volumeStatus: VolumeStatus;
3289
+ /** Weekly effective sets. */
3290
+ weeklySets: number;
3291
+ }
3292
+ interface BodyMapProps extends ViewProps {
3293
+ /** Muscle group intensity data. */
3294
+ data: BodyMapData[];
3295
+ /** Which view to show. */
3296
+ view: 'front' | 'back';
3297
+ /** Toggle between front/back. */
3298
+ onViewChange?: (view: 'front' | 'back') => void;
3299
+ /** Called when a muscle group is tapped. */
3300
+ onMusclePress?: (muscleGroup: MuscleGroup) => void;
3301
+ /** Currently highlighted muscle (from external selection). */
3302
+ highlightedMuscle?: MuscleGroup | null;
3303
+ /** Show simplified (8 groups) or detailed (15 groups). */
3304
+ mode?: 'simple' | 'detailed';
3305
+ className?: string;
3306
+ }
3307
+ /**
3308
+ * Interactive SVG body map with tappable muscle groups and a volume heatmap.
3309
+ * Renders the front or back view (toggle via onViewChange), colors each muscle
3310
+ * by its weekly-volume status, and exposes an accessible muscle legend wired to
3311
+ * onMusclePress. Phase 1 uses react-native-body-highlighter's combined slugs
3312
+ * (deltoids as one path, lats/upper-back shared); swipe between views and the
3313
+ * delt/lat SVG split are follow-ups.
3314
+ *
3315
+ * @example
3316
+ * <BodyMap
3317
+ * data={[{ muscleGroup: MuscleGroup.CHEST, intensity: 0.7, volumeStatus: 'productive', weeklySets: 12 }]}
3318
+ * view="front"
3319
+ * onViewChange={setView}
3320
+ * onMusclePress={setSelected}
3321
+ * highlightedMuscle={selected}
3322
+ * />
3323
+ */
3324
+ declare function BodyMap({ data, view, onViewChange, onMusclePress, highlightedMuscle, mode, className, ...props }: BodyMapProps): react_jsx_runtime.JSX.Element;
3325
+
3326
+ interface ContributingExercise {
3327
+ /** Exercise name. */
3328
+ name: string;
3329
+ /** Working sets contributed this week. */
3330
+ sets: number;
3331
+ /** Effective-set multiplier toward this muscle (0-1). */
3332
+ contributionWeight: number;
3333
+ }
3334
+ interface UpcomingExercise {
3335
+ /** Exercise name. */
3336
+ name: string;
3337
+ /** Workout the exercise belongs to. */
3338
+ workoutName: string;
3339
+ /** Planned sets. */
3340
+ sets: number;
3341
+ }
3342
+ interface BodyMapDetailPanelProps extends ViewProps {
3343
+ /** Muscle group whose volume detail is shown. */
3344
+ muscleGroup: MuscleGroup;
3345
+ /** Human-readable muscle name for the title and a11y label. */
3346
+ displayName: string;
3347
+ /** Weekly effective sets logged for this muscle. */
3348
+ weeklySets: number;
3349
+ /** Volume landmarks (weekly working sets). */
3350
+ landmarks: VolumeLandmarks;
3351
+ /** Weekly-volume status relative to the landmarks. */
3352
+ volumeStatus: VolumeStatus;
3353
+ /** Last trained label, e.g. "2 days ago". */
3354
+ lastTrained?: string;
3355
+ /** Volume sparkline data (last 4-8 weeks). */
3356
+ weeklyHistory?: number[];
3357
+ /** Exercises contributing to this muscle's volume. */
3358
+ contributingExercises?: ContributingExercise[];
3359
+ /** Upcoming exercises targeting this muscle. */
3360
+ upcomingExercises?: UpcomingExercise[];
3361
+ /** Whether the bottom sheet is visible. */
3362
+ isOpen?: boolean;
3363
+ /** Alias for `isOpen` (spec wording: "isOpen/visible"). `isOpen` wins when both are set. */
3364
+ visible?: boolean;
3365
+ /** Dismiss the panel (backdrop, handle, or close button). */
3366
+ onClose: () => void;
3367
+ /** Navigate to a filtered exercise list. */
3368
+ onViewExercises?: () => void;
3369
+ }
3370
+ /**
3371
+ * Slide-up bottom-sheet panel with detailed weekly-volume info for a tapped
3372
+ * muscle group: a MEV|current|MRV gradient progress bar, the big weekly set
3373
+ * count against MRV, an optional volume sparkline, and the contributing /
3374
+ * upcoming exercise lists. Composes the titan `Badge` and Workout `Sparkline`.
3375
+ *
3376
+ * Controlled via `isOpen` (or the `visible` alias); renders nothing when closed
3377
+ * and animates in on open — sheet translateY 400->0 (400ms ease-out) and a
3378
+ * backdrop fade 0->0.4 (RN Animated, useNativeDriver:false). Backdrop, handle,
3379
+ * and the header close button all call `onClose`.
3380
+ *
3381
+ * @example
3382
+ * <BodyMapDetailPanel
3383
+ * muscleGroup={MuscleGroup.CHEST}
3384
+ * displayName="Chest"
3385
+ * weeklySets={14}
3386
+ * landmarks={{ mev: 8, mav: 14, mrv: 20 }}
3387
+ * volumeStatus="productive"
3388
+ * lastTrained="2 days ago"
3389
+ * weeklyHistory={[8, 10, 12, 14]}
3390
+ * isOpen={open}
3391
+ * onClose={() => setOpen(false)}
3392
+ * />
3393
+ */
3394
+ declare function BodyMapDetailPanel({ muscleGroup, displayName, weeklySets, landmarks, volumeStatus, lastTrained, weeklyHistory, contributingExercises, upcomingExercises, isOpen, visible, onClose, onViewExercises, ...props }: BodyMapDetailPanelProps): react_jsx_runtime.JSX.Element | null;
3395
+
3396
+ interface TreemapDatum {
3397
+ /** Stable identity — returned by onPress and used as the React key. */
3398
+ id: string;
3399
+ /** Area weight (e.g. size, count, severity). Non-positive values are dropped. */
3400
+ value: number;
3401
+ /** Tile fill color. Falls back to a built-in categorical palette by index. */
3402
+ color?: string;
3403
+ /** Optional label rendered inside sufficiently large tiles. */
3404
+ label?: string;
3405
+ }
3406
+ type TreemapScale = 'linear' | 'sqrt' | 'log';
3407
+ interface TreemapProps extends Omit<ViewProps, 'children'> {
3408
+ data: TreemapDatum[];
3409
+ /** Layout box. Required — the treemap fills exactly this area. */
3410
+ width: number;
3411
+ height: number;
3412
+ /**
3413
+ * Area scale. Real-world weights are often heavy-tailed, where one outlier
3414
+ * under a `linear` scale swallows the whole canvas. `sqrt` (default) damps
3415
+ * that while preserving order; `log` compresses hardest.
3416
+ */
3417
+ scale?: TreemapScale;
3418
+ /** Show at most N tiles; the remainder collapse into one "+M more" tile. */
3419
+ maxTiles?: number;
3420
+ /** Fires with a tile's id on press (never for the "+M more" tile). */
3421
+ onPress?: (id: string) => void;
3422
+ /** Draws a highlight border on the matching tile. */
3423
+ selectedId?: string;
3424
+ className?: string;
3425
+ }
3426
+ /**
3427
+ * Squarified treemap. SVG-free (absolutely-positioned tiles) so it renders
3428
+ * identically on web (react-native-web) and native. Layout is computed from
3429
+ * `value`; color and labels are caller-supplied.
3430
+ */
3431
+ declare function Treemap({ data, width, height, scale, maxTiles, onPress, selectedId, className, ...props }: TreemapProps): react_jsx_runtime.JSX.Element;
3432
+
3433
+ interface ScatterDatum {
3434
+ /** Stable identity — returned by onPress and used as the React key. */
3435
+ id: string;
3436
+ /** Horizontal position in data space. */
3437
+ x: number;
3438
+ /** Vertical position in data space. */
3439
+ y: number;
3440
+ /** Bubble radius in px. Falls back to a fixed default when omitted. */
3441
+ r?: number;
3442
+ /** Bubble fill color. Falls back to a built-in categorical palette by index. */
3443
+ color?: string;
3444
+ /** Optional label shown for large or selected points. */
3445
+ label?: string;
3446
+ }
3447
+ interface ScatterAxis {
3448
+ xLabel?: string;
3449
+ yLabel?: string;
3450
+ /** Domain overrides. Any omitted bound is derived from the data. */
3451
+ xMin?: number;
3452
+ xMax?: number;
3453
+ yMin?: number;
3454
+ yMax?: number;
3455
+ }
3456
+ interface ScatterProps extends Omit<ViewProps, 'children'> {
3457
+ data: ScatterDatum[];
3458
+ /** Layout box. Required — the plot fills exactly this area. */
3459
+ width: number;
3460
+ height: number;
3461
+ /** Axis labels and optional domain overrides. */
3462
+ axis?: ScatterAxis;
3463
+ /**
3464
+ * Draw the y = 1 − x "main sequence" reference line (NDepend idiom, where
3465
+ * distance from the diagonal measures the zone of pain / zone of uselessness).
3466
+ */
3467
+ diagonal?: boolean;
3468
+ /** Fires with a point's id on press. */
3469
+ onPress?: (id: string) => void;
3470
+ /** Draws a highlight ring on the matching point. */
3471
+ selectedId?: string;
3472
+ className?: string;
3473
+ }
3474
+ /**
3475
+ * SVG-free scatter / bubble plot (absolutely-positioned Views), matching the
3476
+ * codebase's chart convention so it renders identically on web and native. Used
3477
+ * for "main-sequence" plots (instability × abstractness) via the `diagonal`
3478
+ * reference line, or any two metrics. Positions and bubble sizes are computed
3479
+ * from the data; color and labels are caller-supplied.
3480
+ */
3481
+ declare function Scatter({ data, width, height, axis, diagonal, onPress, selectedId, className, ...props }: ScatterProps): react_jsx_runtime.JSX.Element;
3482
+
3483
+ interface GaugeThreshold {
3484
+ /** Band start, in the gauge's value units. */
3485
+ value: number;
3486
+ /** Color applied to filled segments at or above this band. */
3487
+ color: string;
3488
+ }
3489
+ interface GaugeProps extends Omit<ViewProps, 'children'> {
3490
+ /** Current value. Clamped to [min, max]. */
3491
+ value: number;
3492
+ min?: number;
3493
+ max?: number;
3494
+ /** Diameter in px. */
3495
+ size?: number;
3496
+ /** Caption under the big number. */
3497
+ label?: string;
3498
+ /** Unit suffix beside the big number (e.g. "%"). */
3499
+ unit?: string;
3500
+ /**
3501
+ * Band coloring, ascending by `value`. A filled segment takes the color of
3502
+ * the highest band whose `value` it reaches. Defaults to Titan status tokens
3503
+ * (red < 60, amber < 80, green ≥ 80 on a 0–100 scale).
3504
+ */
3505
+ thresholds?: GaugeThreshold[];
3506
+ /** Single-color override for filled segments (ignores `thresholds`). */
3507
+ color?: string;
3508
+ className?: string;
3509
+ }
3510
+ /**
3511
+ * SVG-free radial gauge (absolutely-positioned segment Views), matching the
3512
+ * codebase's chart convention so it renders identically on web and native. The
3513
+ * 270° arc fills with band colors as the value rises; the center reuses the
3514
+ * Metric visual language (large bold value + unit + caption). Ideal for a 0–100
3515
+ * health / quality score.
3516
+ */
3517
+ declare function Gauge({ value, min, max, size, label, unit, thresholds, color, className, ...props }: GaugeProps): react_jsx_runtime.JSX.Element;
3518
+
2518
3519
  /**
2519
3520
  * Utility function to merge Tailwind CSS classes with proper conflict resolution.
2520
3521
  * Combines clsx for conditional classes with tailwind-merge for deduplication.
@@ -2683,4 +3684,4 @@ type FormErrors<T extends FormValues> = Partial<Record<keyof T, string>>;
2683
3684
  */
2684
3685
  type FormTouched<T extends FormValues> = Partial<Record<keyof T, boolean>>;
2685
3686
 
2686
- export { Accordion, AccordionButton, type AccordionButtonProps, AccordionItem, type AccordionItemProps, AccordionPanel, type AccordionPanelProps, type AccordionProps, Alert, AlertDescription, type AlertDescriptionProps, type AlertProps, type AlertStatus, AlertTitle, type AlertTitleProps, type AlertVariant, Autocomplete, type AutocompleteOption, type AutocompleteProps, Avatar, AvatarBadge, type AvatarBadgeProps, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarSize, Badge, type BadgeColor, type BadgeProps, type BadgeSize, BadgeText, type BadgeTextProps, type BadgeVariant, 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, CircularProgress, type CircularProgressProps, Collapse, CollapseButton, type CollapseButtonProps, CollapseContent, type CollapseContentProps, type CollapseProps, DataRow, type DataRowProps, DateTime, type DateTimeFormat, type DateTimeProps, Divider, type DividerOrientation, type DividerProps, Drawer, DrawerBody, type DrawerBodyProps, DrawerFooter, type DrawerFooterProps, DrawerHeader, type DrawerHeaderProps, type DrawerPlacement, type DrawerProps, type DrawerSize, ElevationLevel, EmptyState, type EmptyStateProps, type FieldState, type FieldWrapperProps, FormActions, type FormActionsProps, type FormErrors, FormField, type FormFieldProps, FormRow, type FormRowProps, FormSection, type FormSectionProps, type FormTouched, type FormValues, GlowIntensity, HStack, Heading, type HeadingProps, HelpTip, type HelpTipIcon, type HelpTipPlacement, type HelpTipProps, type HelpTipSize, IconBox, type IconBoxProps, Indicator, type IndicatorColor, type IndicatorProps, type IndicatorSize, Input, InputGroup, type InputGroupProps, type InputProps, type InputSize, type InputVariant, Label, type LabelProps, LabelWithHelp, type LabelWithHelpProps, Link, type LinkColor, type LinkProps, type LinkUnderline, ListItem, ListItemContent, type ListItemContentProps, ListItemDivider, type ListItemDividerProps, ListItemIcon, type ListItemIconProps, type ListItemProps, ListItemTrailing, type ListItemTrailingProps, Menu, MenuDivider, type MenuDividerProps, MenuGroup, type MenuGroupProps, MenuItem, type MenuItemProps, MenuList, type MenuListProps, type MenuProps, MenuTrigger, type MenuTriggerProps, Metric, MetricGroup, type MetricGroupProps, type MetricProps, 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, Overline, type OverlineProps, Paragraph, type ParagraphProps, PasswordInput, type PasswordInputProps, Pill, type PillColor, type PillProps, type PillSize, type PillVariant, Popover, PopoverCloseButton, type PopoverCloseButtonProps, PopoverContent, type PopoverContentProps, type PopoverPlacement, type PopoverProps, PopoverTrigger, type PopoverTriggerProps, Progress, type ProgressColor, type ProgressProps, type ProgressSize, ProgressSteps, type ProgressStepsProps, type ProgressVariant, Radio, type RadioColor, RadioGroup, type RadioGroupProps, type RadioProps, type RadioSize, RestTimer, type RestTimerProps, type ResultType, Section, SectionContent, type SectionContentProps, SectionHeader, type SectionHeaderProps, type SectionProps, Select, type SelectOption, type SelectProps, 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, Spinner, type SpinnerColor, type SpinnerProps, type SpinnerSize, Stack, type StackProps, 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, type SurfaceProps, Switch, type SwitchProps, type SwitchSize, 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, 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, Typography, type TypographyAlign, type TypographyColor, type TypographyProps, type TypographyVariant, type UseTableOptions, type UseTableReturn, VStack, alpha, cn, composeValidators, createFieldId, formatDateTime, getContrastText, getFieldAriaProps, getFieldValidationProps, getLuminance, getResultColor, getStatusColor, hasMaxLength, hasMinLength, isEmpty, isValidEmail, useTable, useToast, useToolbarButton, validationRules };
3687
+ export { Accordion, AccordionButton, type AccordionButtonProps, AccordionItem, type AccordionItemProps, AccordionPanel, type AccordionPanelProps, type AccordionProps, Alert, AlertDescription, type AlertDescriptionProps, type AlertProps, type AlertStatus, AlertTitle, type AlertTitleProps, type AlertVariant, Autocomplete, type AutocompleteOption, type AutocompleteProps, Avatar, AvatarBadge, type AvatarBadgeProps, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarSize, Badge, type BadgeColor, type BadgeProps, type BadgeSize, BadgeText, type BadgeTextProps, type BadgeVariant, BaseBadge, type BaseBadgeProps, type BaseBadgeSize, type BaseBadgeVariant, BodyMap, type BodyMapData, BodyMapDetailPanel, type BodyMapDetailPanelProps, type BodyMapProps, BreadcrumbItem, type BreadcrumbItemProps, Breadcrumbs, type BreadcrumbsProps, Button, type ButtonColor, ButtonIcon, type ButtonIconProps, type ButtonProps, type ButtonSize, ButtonSpinner, type ButtonSpinnerProps, ButtonText, type ButtonTextProps, type ButtonVariant, CapacityBandChart, type CapacityBandChartProps, type CapacityBandDataPoint, type CapacityBandProjection, 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, CircularProgress, type CircularProgressProps, Collapse, CollapseButton, type CollapseButtonProps, CollapseContent, type CollapseContentProps, type CollapseProps, type ContributingExercise, DEFAULT_VOLUME_LANDMARKS, DETAILED_TO_SIMPLE, DataRow, type DataRowProps, DateTime, type DateTimeFormat, type DateTimeProps, DeviationBar, type DeviationBarProps, Divider, type DividerOrientation, type DividerProps, Drawer, DrawerBody, type DrawerBodyProps, DrawerFooter, type DrawerFooterProps, DrawerHeader, type DrawerHeaderProps, type DrawerPlacement, type DrawerProps, type DrawerSize, ElevationLevel, EmptyState, type EmptyStateProps, ExerciseCard, type ExerciseCardProps, type ExerciseCardState, type FieldState, type FieldWrapperProps, FormActions, type FormActionsProps, type FormErrors, FormField, type FormFieldProps, FormRow, type FormRowProps, FormSection, type FormSectionProps, type FormTouched, type FormValues, Gauge, type GaugeProps, type GaugeThreshold, GlowIntensity, HStack, Heading, type HeadingProps, HelpTip, type HelpTipIcon, type HelpTipPlacement, type HelpTipProps, type HelpTipSize, IconBox, type IconBoxProps, Indicator, type IndicatorColor, type IndicatorProps, type IndicatorSize, Input, InputBar, type InputBarProps, InputGroup, type InputGroupProps, type InputProps, type InputSize, type InputVariant, IntensityBar, type IntensityBarProps, Label, type LabelProps, LabelWithHelp, type LabelWithHelpProps, Link, type LinkColor, type LinkProps, type LinkUnderline, ListItem, ListItemContent, type ListItemContentProps, ListItemDivider, type ListItemDividerProps, ListItemIcon, type ListItemIconProps, type ListItemProps, ListItemTrailing, type ListItemTrailingProps, MUSCLE_DISPLAY_NAMES, MUSCLE_TO_CATEGORY, MUSCLE_TO_SVG_SLUGS, Menu, MenuDivider, type MenuDividerProps, MenuGroup, type MenuGroupProps, MenuItem, type MenuItemProps, MenuList, type MenuListProps, type MenuProps, MenuTrigger, type MenuTriggerProps, type Meso, MesoCard, type MesoCardProps, MesoProgressBar, type MesoProgressBarProps, type MesoStatus, type MesoStatusBadge, type MesoStatusBadgeVariant, MesoStatusCard, type MesoStatusCardProps, type MesoStatusCoaching, type MesoStatusGauge, type MesoStatusMetric, type MesoStatusNextTarget, type MesoVolumeHeatmapEntry, Metric, MetricGroup, type MetricGroupProps, type MetricProps, 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, type MovementCategory, MuscleGroup, MuscleGroupChip, type MuscleGroupChipProps, Overline, type OverlineProps, type PRType, Paragraph, type ParagraphProps, PasswordInput, type PasswordInputProps, 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, Progress, type ProgressColor, type ProgressProps, type ProgressSize, ProgressSteps, type ProgressStepsProps, type ProgressVariant, Radio, type RadioColor, RadioGroup, type RadioGroupProps, type RadioProps, type RadioSize, ReadinessCheck, type ReadinessCheckProps, type ReadinessFactor, RestTimer, type RestTimerProps, type ResultType, SIMPLE_DISPLAY_NAMES, SIMPLE_TO_DETAILED, Scatter, type ScatterAxis, type ScatterDatum, type ScatterProps, Section, SectionContent, type SectionContentProps, SectionHeader, type SectionHeaderProps, type SectionProps, Select, type SelectOption, type SelectProps, SetRow, type SetRowMode, type SetRowProps, Sidebar, SidebarContent, type SidebarContentProps, SidebarDivider, type SidebarDividerProps, SidebarFooter, type SidebarFooterProps, SidebarHeader, type SidebarHeaderProps, SidebarItem, type SidebarItemProps, type SidebarProps, SidebarSection, type SidebarSectionProps, SimpleMuscleGroup, 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, StatusDot, type StatusDotProps, type StatusDotVariant, 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, StrengthTrendChart, type StrengthTrendChartMesoBoundary, type StrengthTrendChartProps, type StrengthTrendDataPoint, SupersetWrapper, type SupersetWrapperProps, Surface, type SurfaceProps, Switch, type SwitchProps, type SwitchSize, 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, 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, Treemap, type TreemapDatum, type TreemapProps, type TreemapScale, Typography, type TypographyAlign, type TypographyColor, type TypographyProps, type TypographyVariant, type UpcomingExercise, type UseTableOptions, type UseTableReturn, VOLUME_STATUS_LABELS, VStack, VelocityStrip, type VelocityStripProps, type VolumeLandmarks, type VolumeStatus$1 as VolumeStatus, type WarmUpStatus, type WarmUpValidation, WeekRow, type WeekRowProps, type WeekRowWorkout, WeightBadge, type WeightBadgeProps, type WeightBadgeSize, WorkoutCard, type WorkoutCardProps, type WorkoutDot, type WorkoutDotStatus, type WorkoutMuscleGroup, type WorkoutMuscleVolumeStatus, WorkoutPill, type WorkoutPillProps, type WorkoutPillStatus, type WorkoutStatus, alpha, calculateMeanVelocity, calculateVelocityLoss, cn, composeValidators, createFieldId, formatDateTime, getContrastText, getFieldAriaProps, getFieldValidationProps, getHeatmapColor, getLuminance, getResultColor, getStatusColor, getVelocityZoneColor, getVelocityZoneName, hasMaxLength, hasMinLength, isEmpty, isValidEmail, useTable, useToast, useToolbarButton, validationRules };