@titan-design/react-ui 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/bodymap.js +173 -343
  2. package/dist/bodymap.js.map +1 -1
  3. package/dist/bodymap.mjs +173 -343
  4. package/dist/bodymap.mjs.map +1 -1
  5. package/dist/index.d.mts +24 -21
  6. package/dist/index.d.ts +24 -21
  7. package/dist/index.js +366 -561
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +360 -553
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/pages.js +242 -407
  12. package/dist/pages.js.map +1 -1
  13. package/dist/pages.mjs +242 -407
  14. package/dist/pages.mjs.map +1 -1
  15. package/dist/theme/index.d.mts +409 -415
  16. package/dist/theme/index.d.ts +409 -415
  17. package/dist/theme/index.js +234 -408
  18. package/dist/theme/index.js.map +1 -1
  19. package/dist/theme/index.mjs +227 -399
  20. package/dist/theme/index.mjs.map +1 -1
  21. package/dist/theme/tokens-css.js +141 -140
  22. package/dist/theme/tokens-css.js.map +1 -1
  23. package/dist/theme/tokens-css.mjs +141 -140
  24. package/dist/theme/tokens-css.mjs.map +1 -1
  25. package/package.json +1 -1
  26. package/src/arch/Architecture.stories.tsx +9 -9
  27. package/src/components/custom/DateTime/DateTime.stories.tsx +1 -1
  28. package/src/components/custom/Fatigue/DualGhostSpark.stories.tsx +3 -3
  29. package/src/components/custom/Fatigue/FatigueLights.stories.tsx +2 -2
  30. package/src/components/custom/Fatigue/GhostSpark.stories.tsx +3 -3
  31. package/src/components/custom/Fatigue/LiveFatigueCard.tsx +1 -1
  32. package/src/components/custom/Fatigue/LiveFatiguePanel.stories.tsx +2 -2
  33. package/src/components/custom/Fatigue/RomProgressionChart.stories.tsx +2 -2
  34. package/src/components/custom/Fatigue/SilverRedPalette.stories.tsx +4 -4
  35. package/src/components/custom/Fatigue/VelocityHero.stories.tsx +3 -3
  36. package/src/components/custom/Fatigue/VerdictHero.stories.tsx +2 -2
  37. package/src/components/custom/Fatigue/fatigue-tokens.ts +12 -12
  38. package/src/components/custom/Sidebar/Sidebar.tsx +4 -4
  39. package/src/components/custom/Table/Table.tsx +2 -2
  40. package/src/components/custom/Workout/ActiveWorkoutPage.tsx +3 -3
  41. package/src/components/custom/Workout/BaseBadge.test.tsx +6 -1
  42. package/src/components/custom/Workout/BaseBadge.tsx +1 -1
  43. package/src/components/custom/Workout/BodyMap.tsx +2 -2
  44. package/src/components/custom/Workout/BodyMapDetailPanel.tsx +2 -2
  45. package/src/components/custom/Workout/DeviationBar.test.tsx +2 -1
  46. package/src/components/custom/Workout/DeviationBar.tsx +3 -2
  47. package/src/components/custom/Workout/ExerciseCard.test.tsx +3 -3
  48. package/src/components/custom/Workout/ExerciseCard.tsx +2 -2
  49. package/src/components/custom/Workout/ExerciseDetailPage.tsx +4 -4
  50. package/src/components/custom/Workout/InputBar.tsx +2 -2
  51. package/src/components/custom/Workout/LiveAuraFrame.stories.tsx +1 -1
  52. package/src/components/custom/Workout/LiveAuraFrame.test.tsx +1 -1
  53. package/src/components/custom/Workout/LiveAuraFrame.tsx +3 -3
  54. package/src/components/custom/Workout/MesoCard.tsx +3 -1
  55. package/src/components/custom/Workout/MuscleGroupChip.tsx +4 -3
  56. package/src/components/custom/Workout/PrHistoryModal.tsx +2 -2
  57. package/src/components/custom/Workout/ProgramPlanningPage.tsx +1 -1
  58. package/src/components/custom/Workout/ReadinessCheck.tsx +2 -2
  59. package/src/components/custom/Workout/RestTimer.tsx +2 -2
  60. package/src/components/custom/Workout/S3SetTypes.stories.tsx +3 -3
  61. package/src/components/custom/Workout/SessionHeader.stories.tsx +2 -2
  62. package/src/components/custom/Workout/SessionHeader.tsx +1 -1
  63. package/src/components/custom/Workout/SessionRail.stories.tsx +2 -2
  64. package/src/components/custom/Workout/SessionRail.tsx +13 -5
  65. package/src/components/custom/Workout/SetBar.tsx +3 -3
  66. package/src/components/custom/Workout/SetRow.test.tsx +6 -3
  67. package/src/components/custom/Workout/StatusDot.tsx +5 -4
  68. package/src/components/custom/Workout/StrengthTrendChart.tsx +1 -1
  69. package/src/components/custom/Workout/TrainingStatusPage.tsx +2 -2
  70. package/src/components/custom/Workout/VelocityStrip.test.tsx +5 -2
  71. package/src/components/custom/Workout/VelocityStrip.tsx +4 -4
  72. package/src/components/custom/Workout/VolumeLandmarkBar.tsx +3 -3
  73. package/src/components/custom/Workout/WeightBadge.test.tsx +6 -1
  74. package/src/components/custom/Workout/WeightBadge.tsx +2 -1
  75. package/src/components/custom/Workout/WorkoutCard.tsx +3 -1
  76. package/src/components/custom/Workout/WorkoutPill.tsx +5 -2
  77. package/src/components/custom/Workout/ZoneTrack.tsx +4 -4
  78. package/src/components/custom/Workout/setHeadingKit.tsx +14 -8
  79. package/src/components/custom/Workout/velocity-story-kit.tsx +2 -2
  80. package/src/components/custom/charts/SetBarChart.tsx +3 -3
  81. package/src/components/custom/stepper/Stepper.stories.tsx +1 -1
  82. package/src/components/custom/stepper/Stepper.tsx +3 -3
  83. package/src/components/shell/DeviceMenu.tsx +2 -2
  84. package/src/components/shell/SideNav.tsx +1 -1
  85. package/src/components/shell/TopBar.tsx +1 -1
  86. package/src/components/ui/autocomplete/Autocomplete.stories.tsx +1 -1
  87. package/src/components/ui/autocomplete/Autocomplete.tsx +1 -1
  88. package/src/components/ui/avatar/Avatar.tsx +2 -2
  89. package/src/components/ui/badge/Badge.tsx +2 -2
  90. package/src/components/ui/card/Card.tsx +3 -3
  91. package/src/components/ui/checkbox/Checkbox.tsx +1 -1
  92. package/src/components/ui/collapse/Collapse.tsx +1 -1
  93. package/src/components/ui/data-row/DataRow.stories.tsx +1 -1
  94. package/src/components/ui/drawer/Drawer.tsx +3 -3
  95. package/src/components/ui/form-field/FormField.tsx +1 -1
  96. package/src/components/ui/help-tip/HelpTip.tsx +1 -1
  97. package/src/components/ui/menu/Menu.tsx +2 -2
  98. package/src/components/ui/pill/Pill.tsx +2 -2
  99. package/src/components/ui/popover/Popover.stories.tsx +2 -2
  100. package/src/components/ui/popover/Popover.tsx +1 -1
  101. package/src/components/ui/progress/Progress.tsx +3 -3
  102. package/src/components/ui/radio/Radio.stories.tsx +1 -1
  103. package/src/components/ui/radio/Radio.tsx +4 -4
  104. package/src/components/ui/select/Select.tsx +3 -3
  105. package/src/components/ui/surface/Surface.stories.tsx +3 -3
  106. package/src/components/ui/surface/Surface.test.tsx +32 -19
  107. package/src/components/ui/surface/Surface.tsx +3 -3
  108. package/src/components/ui/surface/SurfaceContext.ts +19 -29
  109. package/src/components/ui/surface/surface.contract.test.ts +57 -44
  110. package/src/components/ui/switch/Switch.tsx +1 -1
  111. package/src/components/ui/tabs/Tabs.tsx +2 -2
  112. package/src/components/ui/toolbar-button/ToolbarButton.stories.tsx +5 -5
  113. package/src/components/ui/toolbar-button/ToolbarButton.test.tsx +1 -1
  114. package/src/components/ui/toolbar-button/ToolbarButton.tsx +36 -22
  115. package/src/stories/PresetShowcase.stories.tsx +21 -21
  116. package/src/theme/ColorPalettes.stories.tsx +41 -38
  117. package/src/theme/ColorPrimitives.stories.tsx +89 -41
  118. package/src/theme/Depth.stories.tsx +312 -0
  119. package/src/theme/DepthCalibration.stories.tsx +655 -0
  120. package/src/theme/ThemeProvider.tsx +1 -1
  121. package/src/theme/barrel.ts +7 -14
  122. package/src/theme/color-stories.coverage.test.ts +15 -20
  123. package/src/theme/color-story-kit.tsx +1 -1
  124. package/src/theme/color-utils.ts +197 -0
  125. package/src/theme/config.ts +0 -8
  126. package/src/theme/depth-calibration.test.tsx +97 -0
  127. package/src/theme/elevation.test.ts +62 -1
  128. package/src/theme/elevation.ts +34 -8
  129. package/src/theme/global.css +47 -53
  130. package/src/theme/grey-ramp.test.ts +166 -0
  131. package/src/theme/materials.test.ts +106 -0
  132. package/src/theme/materials.ts +211 -0
  133. package/src/theme/presets/audiobook.ts +4 -4
  134. package/src/theme/presets/types.ts +3 -3
  135. package/src/theme/semantic-contrast.test.ts +83 -0
  136. package/src/theme/tokens/primitives.ts +62 -115
  137. package/src/theme/tokens/semantic.ts +130 -82
  138. package/src/utils/colors.ts +1 -1
  139. package/tailwind.config.js +2 -5
  140. package/src/theme/bar-paper.ts +0 -59
  141. package/src/theme/shadows.stories.tsx +0 -523
  142. package/src/theme/shadows.ts +0 -439
package/dist/index.d.mts CHANGED
@@ -3,7 +3,7 @@ import * as React$1 from 'react';
3
3
  import React__default, { ReactNode } from 'react';
4
4
  import { ViewProps, PressableProps, View, TextInputProps, TextInput, ImageSourcePropType, ModalProps as ModalProps$1, TextProps } from 'react-native';
5
5
  import { ThemeMode, ElevationLevel, GlowIntensity } from './theme/index.mjs';
6
- export { CATEGORICAL_CVD_SAFE_MAX, CategoricalVariant, ComponentType, CssPropertyEntry, CssPropertyManifest, ElevationConfig, GradientStyle, ManifestValidationResult, PRESSED_ELEVATION_LEVEL, ShadowIntensity, ShadowSurface, ThemeConfig, ThemePreset, ThemePresetColors, ThemePresetFonts, ThemePresetRadii, ThemePresetShadows, ThemeProviderMode, ThemeProviderProps, VariantAxes, VariantOverride, applyThemePreset, audiobookPreset, backgroundFrameDark, bestTextColor, buttonSizes, categoricalPalette, componentElevationRanges, createFlatShadow, createPressedHoverShadow, createPressedShadow, createRaisedHoverShadow, createRaisedShadow, darkThemeCSSVars, darken, defaultPreset, discreteRainbow, divergingScale, elevationSystem, getBaseSurfaceColor, getCategoricalColor, getDiscreteRainbowColor, getElevationConfig, getElevationShadow, getElevationSurface, getGlowShadow, getHoverColors, getPressedRecessShadow, getSemanticColors, getThemeCSSVars, getValidatedElevation, gluestackConfig, hexToRgb, hsvToRgb, isCssPropertyManifest, isDark, lightThemeCSSVars, lighten, linearGradient, neumorphicShadows, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveShadows, primitiveSpacing, primitiveTypography, primitiveZIndex, resolveColor, rgbToHex, rgbToHsv, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort, shadowColors, surfaceGradient, surfaceRampDark, validateCssPropertyManifest } from './theme/index.mjs';
6
+ export { CATEGORICAL_CVD_SAFE_MAX, CategoricalVariant, ComponentType, CssPropertyEntry, CssPropertyManifest, ElevationConfig, FLOATING_ELEVATION_MIN, GradientStyle, ManifestValidationResult, PRESSED_ELEVATION_LEVEL, SURFACE_PLANE_STEPS, ShadowIntensity, ThemeConfig, ThemePreset, ThemePresetColors, ThemePresetFonts, ThemePresetRadii, ThemePresetShadows, ThemeProviderMode, ThemeProviderProps, VariantAxes, VariantOverride, applyThemePreset, audiobookPreset, barPaper, bestTextColor, buttonSizes, categoricalPalette, componentElevationRanges, darkThemeCSSVars, darken, defaultPreset, discreteRainbow, divergingScale, elevationSystem, getBaseSurfaceColor, getCategoricalColor, getDiscreteRainbowColor, getElevationConfig, getElevationShadow, getElevationSurface, getGlowShadow, getHoverColors, getPressedRecessShadow, getSemanticColors, getThemeCSSVars, getValidatedElevation, gluestackConfig, grainForTone, grainOpacityForTone, greyRamp, hexToRgb, hsvToRgb, insetWell, isCssPropertyManifest, isDark, lightThemeCSSVars, lighten, linearGradient, paperSheet, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveSpacing, primitiveTypography, primitiveZIndex, resolveColor, rgbToHex, rgbToHsv, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort, surfaceGradient, validateCssPropertyManifest } from './theme/index.mjs';
7
7
  import { S as SetStripSet, E as ExerciseIndicatorKind, a as SetRowProps } from './pages-CvsFqNtx.mjs';
8
8
  export { A as ActiveExerciseStatus, b as ActiveWorkoutExercise, c as ActiveWorkoutInput, d as ActiveWorkoutPageProps, e as ActiveWorkoutRest, f as ActiveWorkoutSuperset, C as CapacityBandChart, g as CapacityBandChartProps, h as CapacityBandDataPoint, i as CapacityBandProjection, D as DualVelocityStream, j as DualVelocityStrip, k as DualVelocityStripProps, l as ExerciseCard, m as ExerciseCardProps, n as ExerciseDetailEntry, o as ExerciseDetailHeader, p as ExerciseDetailPageProps, q as ExerciseDetailStats, r as ExerciseDetailTab, s as ExerciseIndicator, t as ExerciseIndicatorProps, u as ExerciseTrend, v as ExerciseVbt, w as ExerciseVbtSet, I as INDICATOR_PRECEDENCE, M as Meso, x as MesoCard, y as MesoCardProps, z as MesoProgressBar, B as MesoProgressBarProps, F as MesoStatus, G as MesoVolumeHeatmapEntry, P as PlanMeso, H as PlanWeek, J as PlanWorkout, K as ProgramBreadcrumb, L as ProgramNavLevel, N as ProgramPlanningPageProps, O as ProgramSelection, Q as SET_STRIP_VARIABLE_COLOR, R as SET_STRIP_ZONES, T as SetBar, U as SetBarProps, V as SetRow, W as SetRowState, X as SetRowUnit, Y as StrengthTrendChart, Z as StrengthTrendChartMesoBoundary, _ as StrengthTrendChartProps, $ as StrengthTrendDataPoint, a0 as VbtSummary, a1 as VelocitySet, a2 as VelocityStrip, a3 as VelocityStripProps, a4 as VelocityZoneBandProp, a5 as WeekRow, a6 as WeekRowProps, a7 as WeekRowWorkout, a8 as WorkoutCard, a9 as WorkoutCardProps, aa as WorkoutDot, ab as WorkoutDotStatus, ac as WorkoutGroup, ad as WorkoutMuscleGroup, ae as WorkoutMuscleVolumeStatus, af as WorkoutPill, ag as WorkoutPillProps, ah as WorkoutPillStatus, ai as WorkoutProgress, aj as WorkoutStatus, ak as calculateMeanVelocity, al as calculateVelocityLoss, am as getVelocityZoneColor, an as getVelocityZoneName, ao as resolveIndicator, ap as velocityZoneColor } from './pages-CvsFqNtx.mjs';
9
9
  export { M as MesoStatusBadge, a as MesoStatusBadgeVariant, b as MesoStatusCard, c as MesoStatusCardProps, d as MesoStatusCoaching, e as MesoStatusGauge, f as MesoStatusMetric, g as MesoStatusNextTarget } from './MesoStatusCard-CQk71hSi.mjs';
@@ -1295,7 +1295,7 @@ interface SelectProps<T = string> extends ViewProps {
1295
1295
  */
1296
1296
  declare function Select<T extends string = string>({ value, values, onChange, onChangeMulti, isMulti, placeholder, isDisabled, isInvalid, options, variant, className, ...props }: SelectProps<T>): react_jsx_runtime.JSX.Element;
1297
1297
 
1298
- type ToolbarButtonVariant = 'default' | 'neumorphic';
1298
+ type ToolbarButtonVariant = 'default' | 'raised';
1299
1299
  type ToolbarButtonSize = 'sm' | 'md' | 'lg';
1300
1300
  interface ToolbarButtonContextType {
1301
1301
  isOpen: boolean;
@@ -2023,15 +2023,18 @@ declare function IconBox({ icon: Icon, color, size, className, ...props }: IconB
2023
2023
  * no new hexes. Darkest → lightest:
2024
2024
  * inset (#13100D) < background (#1C1916) < base (#252321) < elevated (#2A2827) < raised (#2D2C2B) < overlay (#302F2E)
2025
2025
  *
2026
- * `inset` is the ramp's deepest pit — the sub-shell well. It's the floor a
2027
- * `<Surface pressed>` clamps at (see {@link pressedLevel}); it has no shipped
2028
- * semantic token yet, so {@link surfaceBackground} resolves it from the
2029
- * `surface-inset` token when present, else the `surfaceRampDark.inset` primitive.
2026
+ * `frame` is the bezel the ramp sits inside — the top bar / side nav chrome —
2027
+ * and the floor a `<Surface pressed>` clamps at (see {@link pressedLevel}).
2028
+ *
2029
+ * It replaced a separate `inset` level in TD-07.14. That level was RETIRED, not
2030
+ * renamed: at ΔE 1.10 from the frame it was an imperceptible duplicate, which is
2031
+ * exactly why pressed (surface − 1) kept collapsing into it.
2030
2032
  */
2031
- type SurfaceLevel = 'inset' | 'background' | 'base' | 'elevated' | 'raised' | 'overlay';
2033
+ type SurfaceLevel = 'frame' | 'background' | 'base' | 'elevated' | 'raised' | 'overlay';
2032
2034
  /** On-surface neutral text roles, resolved for the current surface + theme. */
2033
2035
  type OnSurfaceRole = 'primary' | 'secondary' | 'tertiary';
2034
2036
  declare const SURFACE_LEVEL_TOKEN: {
2037
+ readonly frame: "background-frame";
2035
2038
  readonly background: "background-base";
2036
2039
  readonly base: "surface-base";
2037
2040
  readonly elevated: "surface-elevated";
@@ -2063,9 +2066,9 @@ declare function surfaceBackground(level: SurfaceLevel, mode: ThemeMode): string
2063
2066
  /**
2064
2067
  * The level a `<Surface pressed>` resolves to: its parent's level stepped one
2065
2068
  * index DOWN the ramp — the symmetric twin of a raised surface stepping up —
2066
- * clamped at the `inset` floor so a pressed surface never underflows the pit.
2069
+ * clamped at the `frame` floor so a pressed surface never underflows the bezel.
2067
2070
  * overlay→raised, raised→elevated, elevated→base, base→background,
2068
- * background→inset, insetinset (clamped).
2071
+ * background→frame, frameframe (clamped).
2069
2072
  * Pressed exposes ONE level of depth only (no pressed-2).
2070
2073
  */
2071
2074
  declare function pressedLevel(parent: SurfaceLevel): SurfaceLevel;
@@ -2078,7 +2081,7 @@ interface SurfaceProps extends ViewProps {
2078
2081
  */
2079
2082
  elevation?: ElevationLevel;
2080
2083
  /**
2081
- * Named charcoal plane (shell / rail / stage). Sets the background directly
2084
+ * Named grey plane (shell / rail / stage). Sets the background directly
2082
2085
  * from a semantic surface token — reaching the darker nav/page planes the
2083
2086
  * lighten model can't — and drops the default rounding + auto shadow so the
2084
2087
  * plane reads full-bleed. Composable with `elevation`'s glow.
@@ -2110,7 +2113,7 @@ interface SurfaceProps extends ViewProps {
2110
2113
  * A container that OWNS its background and establishes an on-surface colour
2111
2114
  * context. Two grounded ways to pick the background:
2112
2115
  * - `elevation` (numeric): the raised-card model — lighten-from-base + shadow.
2113
- * - `level` (named): a flat charcoal plane straight from a semantic token,
2116
+ * - `level` (named): a flat grey plane straight from a semantic token,
2114
2117
  * for the shell / rail / stage backgrounds.
2115
2118
  * Either way, descendants read the surface via {@link useOnSurfaceColor} /
2116
2119
  * {@link useSurfaceMode} rather than hard-coding `getSemanticColors('dark')`.
@@ -3295,7 +3298,7 @@ interface SessionHeaderProps extends ViewProps {
3295
3298
  * done, coloured green/amber against the elapsed-vs-budget pace, with a live marker),
3296
3299
  * a mono `n/total sets` label and a ⏱ elapsed readout. Upcoming (`next` set), the tiles
3297
3300
  * become Date/Time/Until, the bar is the empty plan shape, and the readout shows the
3298
- * planned duration. Rendered on the raised charcoal plane; presentational. Composes
3301
+ * planned duration. Rendered on the raised grey plane; presentational. Composes
3299
3302
  * {@link MetricTiles} / {@link ScheduleTiles} + {@link SegmentedProgressBar} +
3300
3303
  * {@link TimerReadout}.
3301
3304
  */
@@ -3548,7 +3551,7 @@ interface ZoneTrackProps extends ViewProps {
3548
3551
  trackHeight?: number;
3549
3552
  /** How far a needle marker overhangs the track top + bottom, in px. Overrides the `size` default (6 default / 9 wall). */
3550
3553
  needleOverhang?: number;
3551
- /** Muted colour of the track behind / beyond the fill. Default a charcoal step. */
3554
+ /** Muted colour of the track behind / beyond the fill. Default a grey step. */
3552
3555
  trackColor?: string;
3553
3556
  className?: string;
3554
3557
  }
@@ -3676,7 +3679,7 @@ interface LiveAuraFrameProps extends ViewProps {
3676
3679
  declare function liveAuraColor(category: LiveAuraCategory): string | null;
3677
3680
  /**
3678
3681
  * Full-surface color-flood frame tied to a coaching category. Wraps `children`
3679
- * on a charcoal base and layers a radial wash (amber at threshold, red at stop)
3682
+ * on a grey base and layers a radial wash (amber at threshold, red at stop)
3680
3683
  * as a decorative, pointer-transparent overlay. The wash uses a solid
3681
3684
  * `backgroundColor` fallback (native) plus a web-only `backgroundImage` radial
3682
3685
  * gradient; both derive from the same semantic token via `alpha()`.
@@ -4018,9 +4021,9 @@ declare const STATE_LABEL: Record<FatigueVerdictState, string>;
4018
4021
  * language: eccentric magenta, concentric cyan, hold and idle in the grey family.
4019
4022
  *
4020
4023
  * The idle grey has to read as BAND MATERIAL (a pause the lifter held), not as a
4021
- * hole in the strip: at charcoal[300] it sat inside the surface-ramp's own value
4024
+ * hole in the strip: at grey[300] it sat inside the surface-ramp's own value
4022
4025
  * range (`surface-raised` #31302F) so a short pause between ECC and CON read as a
4023
- * gap. charcoal[200] clears every content plane while staying quieter than the two
4026
+ * gap. grey[200] clears every content plane while staying quieter than the two
4024
4027
  * saturated phase tones, so the band reads contiguous and the phases still lead.
4025
4028
  *
4026
4029
  * `hold` stays GREY rather than taking a hue of its own. It was briefly amber, which
@@ -4032,15 +4035,15 @@ declare const STATE_LABEL: Record<FatigueVerdictState, string>;
4032
4035
  *
4033
4036
  * Hold and idle are separated by VALUE rather than hue, plus the `HOLD` label and the
4034
4037
  * fact that a hold PACES (it has a prescribed duration) while idle never fills:
4035
- * unfilled hold charcoal[300] — darker than idle
4036
- * idle charcoal[200]
4037
- * filled hold charcoal[100] — brighter than idle
4038
+ * unfilled hold grey[300] — darker than idle
4039
+ * idle grey[200]
4040
+ * filled hold grey[100] — brighter than idle
4038
4041
  * so a hold reads apart from dead time at any fill level, including the narrow runs
4039
4042
  * where the label drops out.
4040
4043
  */
4041
4044
  declare const PHASE_AXIS_COLOR: Record<SamplePhase, string>;
4042
4045
  /** On-track / at-or-above-working. */
4043
- declare const SILVER: "#D1D5DB";
4046
+ declare const SILVER: "#D4D1CE";
4044
4047
  declare const RED_LIGHT: "#F77175";
4045
4048
  declare const RED_MID: "#D14343";
4046
4049
  declare const RED_DEEP: "#7E1002";
@@ -4049,7 +4052,7 @@ declare const GRIND_THRESHOLD = 0.35;
4049
4052
  /** A quiet grey the controlled line dims toward as it drifts (never a colour): a dimmed
4050
4053
  * cool grey in the SAME neutral family as SILVER, so a fully-drifted line reads dim-silver
4051
4054
  * rather than sinking toward black. Shared with the ROM chart. */
4052
- declare const DRIFT_GREY: "#4B5563";
4055
+ declare const DRIFT_GREY: "#5A5958";
4053
4056
  /**
4054
4057
  * The ghost-spark current-line tint from the two control-aware signals — silver/red.
4055
4058
  *
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import * as React$1 from 'react';
3
3
  import React__default, { ReactNode } from 'react';
4
4
  import { ViewProps, PressableProps, View, TextInputProps, TextInput, ImageSourcePropType, ModalProps as ModalProps$1, TextProps } from 'react-native';
5
5
  import { ThemeMode, ElevationLevel, GlowIntensity } from './theme/index.js';
6
- export { CATEGORICAL_CVD_SAFE_MAX, CategoricalVariant, ComponentType, CssPropertyEntry, CssPropertyManifest, ElevationConfig, GradientStyle, ManifestValidationResult, PRESSED_ELEVATION_LEVEL, ShadowIntensity, ShadowSurface, ThemeConfig, ThemePreset, ThemePresetColors, ThemePresetFonts, ThemePresetRadii, ThemePresetShadows, ThemeProviderMode, ThemeProviderProps, VariantAxes, VariantOverride, applyThemePreset, audiobookPreset, backgroundFrameDark, bestTextColor, buttonSizes, categoricalPalette, componentElevationRanges, createFlatShadow, createPressedHoverShadow, createPressedShadow, createRaisedHoverShadow, createRaisedShadow, darkThemeCSSVars, darken, defaultPreset, discreteRainbow, divergingScale, elevationSystem, getBaseSurfaceColor, getCategoricalColor, getDiscreteRainbowColor, getElevationConfig, getElevationShadow, getElevationSurface, getGlowShadow, getHoverColors, getPressedRecessShadow, getSemanticColors, getThemeCSSVars, getValidatedElevation, gluestackConfig, hexToRgb, hsvToRgb, isCssPropertyManifest, isDark, lightThemeCSSVars, lighten, linearGradient, neumorphicShadows, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveShadows, primitiveSpacing, primitiveTypography, primitiveZIndex, resolveColor, rgbToHex, rgbToHsv, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort, shadowColors, surfaceGradient, surfaceRampDark, validateCssPropertyManifest } from './theme/index.js';
6
+ export { CATEGORICAL_CVD_SAFE_MAX, CategoricalVariant, ComponentType, CssPropertyEntry, CssPropertyManifest, ElevationConfig, FLOATING_ELEVATION_MIN, GradientStyle, ManifestValidationResult, PRESSED_ELEVATION_LEVEL, SURFACE_PLANE_STEPS, ShadowIntensity, ThemeConfig, ThemePreset, ThemePresetColors, ThemePresetFonts, ThemePresetRadii, ThemePresetShadows, ThemeProviderMode, ThemeProviderProps, VariantAxes, VariantOverride, applyThemePreset, audiobookPreset, barPaper, bestTextColor, buttonSizes, categoricalPalette, componentElevationRanges, darkThemeCSSVars, darken, defaultPreset, discreteRainbow, divergingScale, elevationSystem, getBaseSurfaceColor, getCategoricalColor, getDiscreteRainbowColor, getElevationConfig, getElevationShadow, getElevationSurface, getGlowShadow, getHoverColors, getPressedRecessShadow, getSemanticColors, getThemeCSSVars, getValidatedElevation, gluestackConfig, grainForTone, grainOpacityForTone, greyRamp, hexToRgb, hsvToRgb, insetWell, isCssPropertyManifest, isDark, lightThemeCSSVars, lighten, linearGradient, paperSheet, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveSpacing, primitiveTypography, primitiveZIndex, resolveColor, rgbToHex, rgbToHsv, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort, surfaceGradient, validateCssPropertyManifest } from './theme/index.js';
7
7
  import { S as SetStripSet, E as ExerciseIndicatorKind, a as SetRowProps } from './pages-B1hqnGIC.js';
8
8
  export { A as ActiveExerciseStatus, b as ActiveWorkoutExercise, c as ActiveWorkoutInput, d as ActiveWorkoutPageProps, e as ActiveWorkoutRest, f as ActiveWorkoutSuperset, C as CapacityBandChart, g as CapacityBandChartProps, h as CapacityBandDataPoint, i as CapacityBandProjection, D as DualVelocityStream, j as DualVelocityStrip, k as DualVelocityStripProps, l as ExerciseCard, m as ExerciseCardProps, n as ExerciseDetailEntry, o as ExerciseDetailHeader, p as ExerciseDetailPageProps, q as ExerciseDetailStats, r as ExerciseDetailTab, s as ExerciseIndicator, t as ExerciseIndicatorProps, u as ExerciseTrend, v as ExerciseVbt, w as ExerciseVbtSet, I as INDICATOR_PRECEDENCE, M as Meso, x as MesoCard, y as MesoCardProps, z as MesoProgressBar, B as MesoProgressBarProps, F as MesoStatus, G as MesoVolumeHeatmapEntry, P as PlanMeso, H as PlanWeek, J as PlanWorkout, K as ProgramBreadcrumb, L as ProgramNavLevel, N as ProgramPlanningPageProps, O as ProgramSelection, Q as SET_STRIP_VARIABLE_COLOR, R as SET_STRIP_ZONES, T as SetBar, U as SetBarProps, V as SetRow, W as SetRowState, X as SetRowUnit, Y as StrengthTrendChart, Z as StrengthTrendChartMesoBoundary, _ as StrengthTrendChartProps, $ as StrengthTrendDataPoint, a0 as VbtSummary, a1 as VelocitySet, a2 as VelocityStrip, a3 as VelocityStripProps, a4 as VelocityZoneBandProp, a5 as WeekRow, a6 as WeekRowProps, a7 as WeekRowWorkout, a8 as WorkoutCard, a9 as WorkoutCardProps, aa as WorkoutDot, ab as WorkoutDotStatus, ac as WorkoutGroup, ad as WorkoutMuscleGroup, ae as WorkoutMuscleVolumeStatus, af as WorkoutPill, ag as WorkoutPillProps, ah as WorkoutPillStatus, ai as WorkoutProgress, aj as WorkoutStatus, ak as calculateMeanVelocity, al as calculateVelocityLoss, am as getVelocityZoneColor, an as getVelocityZoneName, ao as resolveIndicator, ap as velocityZoneColor } from './pages-B1hqnGIC.js';
9
9
  export { M as MesoStatusBadge, a as MesoStatusBadgeVariant, b as MesoStatusCard, c as MesoStatusCardProps, d as MesoStatusCoaching, e as MesoStatusGauge, f as MesoStatusMetric, g as MesoStatusNextTarget } from './MesoStatusCard-CQk71hSi.js';
@@ -1295,7 +1295,7 @@ interface SelectProps<T = string> extends ViewProps {
1295
1295
  */
1296
1296
  declare function Select<T extends string = string>({ value, values, onChange, onChangeMulti, isMulti, placeholder, isDisabled, isInvalid, options, variant, className, ...props }: SelectProps<T>): react_jsx_runtime.JSX.Element;
1297
1297
 
1298
- type ToolbarButtonVariant = 'default' | 'neumorphic';
1298
+ type ToolbarButtonVariant = 'default' | 'raised';
1299
1299
  type ToolbarButtonSize = 'sm' | 'md' | 'lg';
1300
1300
  interface ToolbarButtonContextType {
1301
1301
  isOpen: boolean;
@@ -2023,15 +2023,18 @@ declare function IconBox({ icon: Icon, color, size, className, ...props }: IconB
2023
2023
  * no new hexes. Darkest → lightest:
2024
2024
  * inset (#13100D) < background (#1C1916) < base (#252321) < elevated (#2A2827) < raised (#2D2C2B) < overlay (#302F2E)
2025
2025
  *
2026
- * `inset` is the ramp's deepest pit — the sub-shell well. It's the floor a
2027
- * `<Surface pressed>` clamps at (see {@link pressedLevel}); it has no shipped
2028
- * semantic token yet, so {@link surfaceBackground} resolves it from the
2029
- * `surface-inset` token when present, else the `surfaceRampDark.inset` primitive.
2026
+ * `frame` is the bezel the ramp sits inside — the top bar / side nav chrome —
2027
+ * and the floor a `<Surface pressed>` clamps at (see {@link pressedLevel}).
2028
+ *
2029
+ * It replaced a separate `inset` level in TD-07.14. That level was RETIRED, not
2030
+ * renamed: at ΔE 1.10 from the frame it was an imperceptible duplicate, which is
2031
+ * exactly why pressed (surface − 1) kept collapsing into it.
2030
2032
  */
2031
- type SurfaceLevel = 'inset' | 'background' | 'base' | 'elevated' | 'raised' | 'overlay';
2033
+ type SurfaceLevel = 'frame' | 'background' | 'base' | 'elevated' | 'raised' | 'overlay';
2032
2034
  /** On-surface neutral text roles, resolved for the current surface + theme. */
2033
2035
  type OnSurfaceRole = 'primary' | 'secondary' | 'tertiary';
2034
2036
  declare const SURFACE_LEVEL_TOKEN: {
2037
+ readonly frame: "background-frame";
2035
2038
  readonly background: "background-base";
2036
2039
  readonly base: "surface-base";
2037
2040
  readonly elevated: "surface-elevated";
@@ -2063,9 +2066,9 @@ declare function surfaceBackground(level: SurfaceLevel, mode: ThemeMode): string
2063
2066
  /**
2064
2067
  * The level a `<Surface pressed>` resolves to: its parent's level stepped one
2065
2068
  * index DOWN the ramp — the symmetric twin of a raised surface stepping up —
2066
- * clamped at the `inset` floor so a pressed surface never underflows the pit.
2069
+ * clamped at the `frame` floor so a pressed surface never underflows the bezel.
2067
2070
  * overlay→raised, raised→elevated, elevated→base, base→background,
2068
- * background→inset, insetinset (clamped).
2071
+ * background→frame, frameframe (clamped).
2069
2072
  * Pressed exposes ONE level of depth only (no pressed-2).
2070
2073
  */
2071
2074
  declare function pressedLevel(parent: SurfaceLevel): SurfaceLevel;
@@ -2078,7 +2081,7 @@ interface SurfaceProps extends ViewProps {
2078
2081
  */
2079
2082
  elevation?: ElevationLevel;
2080
2083
  /**
2081
- * Named charcoal plane (shell / rail / stage). Sets the background directly
2084
+ * Named grey plane (shell / rail / stage). Sets the background directly
2082
2085
  * from a semantic surface token — reaching the darker nav/page planes the
2083
2086
  * lighten model can't — and drops the default rounding + auto shadow so the
2084
2087
  * plane reads full-bleed. Composable with `elevation`'s glow.
@@ -2110,7 +2113,7 @@ interface SurfaceProps extends ViewProps {
2110
2113
  * A container that OWNS its background and establishes an on-surface colour
2111
2114
  * context. Two grounded ways to pick the background:
2112
2115
  * - `elevation` (numeric): the raised-card model — lighten-from-base + shadow.
2113
- * - `level` (named): a flat charcoal plane straight from a semantic token,
2116
+ * - `level` (named): a flat grey plane straight from a semantic token,
2114
2117
  * for the shell / rail / stage backgrounds.
2115
2118
  * Either way, descendants read the surface via {@link useOnSurfaceColor} /
2116
2119
  * {@link useSurfaceMode} rather than hard-coding `getSemanticColors('dark')`.
@@ -3295,7 +3298,7 @@ interface SessionHeaderProps extends ViewProps {
3295
3298
  * done, coloured green/amber against the elapsed-vs-budget pace, with a live marker),
3296
3299
  * a mono `n/total sets` label and a ⏱ elapsed readout. Upcoming (`next` set), the tiles
3297
3300
  * become Date/Time/Until, the bar is the empty plan shape, and the readout shows the
3298
- * planned duration. Rendered on the raised charcoal plane; presentational. Composes
3301
+ * planned duration. Rendered on the raised grey plane; presentational. Composes
3299
3302
  * {@link MetricTiles} / {@link ScheduleTiles} + {@link SegmentedProgressBar} +
3300
3303
  * {@link TimerReadout}.
3301
3304
  */
@@ -3548,7 +3551,7 @@ interface ZoneTrackProps extends ViewProps {
3548
3551
  trackHeight?: number;
3549
3552
  /** How far a needle marker overhangs the track top + bottom, in px. Overrides the `size` default (6 default / 9 wall). */
3550
3553
  needleOverhang?: number;
3551
- /** Muted colour of the track behind / beyond the fill. Default a charcoal step. */
3554
+ /** Muted colour of the track behind / beyond the fill. Default a grey step. */
3552
3555
  trackColor?: string;
3553
3556
  className?: string;
3554
3557
  }
@@ -3676,7 +3679,7 @@ interface LiveAuraFrameProps extends ViewProps {
3676
3679
  declare function liveAuraColor(category: LiveAuraCategory): string | null;
3677
3680
  /**
3678
3681
  * Full-surface color-flood frame tied to a coaching category. Wraps `children`
3679
- * on a charcoal base and layers a radial wash (amber at threshold, red at stop)
3682
+ * on a grey base and layers a radial wash (amber at threshold, red at stop)
3680
3683
  * as a decorative, pointer-transparent overlay. The wash uses a solid
3681
3684
  * `backgroundColor` fallback (native) plus a web-only `backgroundImage` radial
3682
3685
  * gradient; both derive from the same semantic token via `alpha()`.
@@ -4018,9 +4021,9 @@ declare const STATE_LABEL: Record<FatigueVerdictState, string>;
4018
4021
  * language: eccentric magenta, concentric cyan, hold and idle in the grey family.
4019
4022
  *
4020
4023
  * The idle grey has to read as BAND MATERIAL (a pause the lifter held), not as a
4021
- * hole in the strip: at charcoal[300] it sat inside the surface-ramp's own value
4024
+ * hole in the strip: at grey[300] it sat inside the surface-ramp's own value
4022
4025
  * range (`surface-raised` #31302F) so a short pause between ECC and CON read as a
4023
- * gap. charcoal[200] clears every content plane while staying quieter than the two
4026
+ * gap. grey[200] clears every content plane while staying quieter than the two
4024
4027
  * saturated phase tones, so the band reads contiguous and the phases still lead.
4025
4028
  *
4026
4029
  * `hold` stays GREY rather than taking a hue of its own. It was briefly amber, which
@@ -4032,15 +4035,15 @@ declare const STATE_LABEL: Record<FatigueVerdictState, string>;
4032
4035
  *
4033
4036
  * Hold and idle are separated by VALUE rather than hue, plus the `HOLD` label and the
4034
4037
  * fact that a hold PACES (it has a prescribed duration) while idle never fills:
4035
- * unfilled hold charcoal[300] — darker than idle
4036
- * idle charcoal[200]
4037
- * filled hold charcoal[100] — brighter than idle
4038
+ * unfilled hold grey[300] — darker than idle
4039
+ * idle grey[200]
4040
+ * filled hold grey[100] — brighter than idle
4038
4041
  * so a hold reads apart from dead time at any fill level, including the narrow runs
4039
4042
  * where the label drops out.
4040
4043
  */
4041
4044
  declare const PHASE_AXIS_COLOR: Record<SamplePhase, string>;
4042
4045
  /** On-track / at-or-above-working. */
4043
- declare const SILVER: "#D1D5DB";
4046
+ declare const SILVER: "#D4D1CE";
4044
4047
  declare const RED_LIGHT: "#F77175";
4045
4048
  declare const RED_MID: "#D14343";
4046
4049
  declare const RED_DEEP: "#7E1002";
@@ -4049,7 +4052,7 @@ declare const GRIND_THRESHOLD = 0.35;
4049
4052
  /** A quiet grey the controlled line dims toward as it drifts (never a colour): a dimmed
4050
4053
  * cool grey in the SAME neutral family as SILVER, so a fully-drifted line reads dim-silver
4051
4054
  * rather than sinking toward black. Shared with the ROM chart. */
4052
- declare const DRIFT_GREY: "#4B5563";
4055
+ declare const DRIFT_GREY: "#5A5958";
4053
4056
  /**
4054
4057
  * The ghost-spark current-line tint from the two control-aware signals — silver/red.
4055
4058
  *