@titan-design/react-ui 0.9.3 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/bodymap.js +78 -24
  2. package/dist/bodymap.js.map +1 -1
  3. package/dist/bodymap.mjs +78 -24
  4. package/dist/bodymap.mjs.map +1 -1
  5. package/dist/index.d.mts +429 -11
  6. package/dist/index.d.ts +429 -11
  7. package/dist/index.js +2386 -885
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +2306 -836
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/{pages-DyEx-lBf.d.ts → pages-B1hqnGIC.d.ts} +149 -15
  12. package/dist/{pages-D7hOD4Vj.d.mts → pages-CvsFqNtx.d.mts} +149 -15
  13. package/dist/pages.d.mts +1 -1
  14. package/dist/pages.d.ts +1 -1
  15. package/dist/pages.js +1900 -1609
  16. package/dist/pages.js.map +1 -1
  17. package/dist/pages.mjs +1901 -1610
  18. package/dist/pages.mjs.map +1 -1
  19. package/dist/theme/index.d.mts +129 -34
  20. package/dist/theme/index.d.ts +129 -34
  21. package/dist/theme/index.js +95 -19
  22. package/dist/theme/index.js.map +1 -1
  23. package/dist/theme/index.mjs +92 -20
  24. package/dist/theme/index.mjs.map +1 -1
  25. package/dist/theme/tokens-css.js +88 -24
  26. package/dist/theme/tokens-css.js.map +1 -1
  27. package/dist/theme/tokens-css.mjs +88 -24
  28. package/dist/theme/tokens-css.mjs.map +1 -1
  29. package/package.json +8 -3
  30. package/src/components/custom/Fatigue/DualGhostSpark.stories.tsx +258 -0
  31. package/src/components/custom/Fatigue/DualGhostSpark.test.tsx +138 -0
  32. package/src/components/custom/Fatigue/DualGhostSpark.tsx +208 -0
  33. package/src/components/custom/Fatigue/FatigueLights.stories.tsx +74 -0
  34. package/src/components/custom/Fatigue/FatigueLights.test.tsx +33 -0
  35. package/src/components/custom/Fatigue/FatigueLights.tsx +83 -0
  36. package/src/components/custom/Fatigue/GhostBand.test.tsx +235 -0
  37. package/src/components/custom/Fatigue/GhostBand.tsx +246 -0
  38. package/src/components/custom/Fatigue/GhostBloom.tsx +132 -0
  39. package/src/components/custom/Fatigue/GhostSpark.stories.tsx +175 -0
  40. package/src/components/custom/Fatigue/GhostSpark.test.tsx +45 -0
  41. package/src/components/custom/Fatigue/GhostSpark.tsx +126 -0
  42. package/src/components/custom/Fatigue/LiveFatigueCard.stories.tsx +126 -0
  43. package/src/components/custom/Fatigue/LiveFatigueCard.test.tsx +28 -0
  44. package/src/components/custom/Fatigue/LiveFatigueCard.tsx +86 -0
  45. package/src/components/custom/Fatigue/LiveFatiguePanel.stories.tsx +95 -0
  46. package/src/components/custom/Fatigue/LiveFatiguePanel.tsx +151 -0
  47. package/src/components/custom/Fatigue/README.md +93 -0
  48. package/src/components/custom/Fatigue/RomProgressionChart.stories.tsx +94 -0
  49. package/src/components/custom/Fatigue/RomProgressionChart.test.tsx +31 -0
  50. package/src/components/custom/Fatigue/RomProgressionChart.tsx +132 -0
  51. package/src/components/custom/Fatigue/SilverRedPalette.stories.tsx +226 -0
  52. package/src/components/custom/Fatigue/VelocityHero.stories.tsx +70 -0
  53. package/src/components/custom/Fatigue/VelocityHero.test.tsx +26 -0
  54. package/src/components/custom/Fatigue/VelocityHero.tsx +46 -0
  55. package/src/components/custom/Fatigue/VerdictHero.stories.tsx +59 -0
  56. package/src/components/custom/Fatigue/VerdictHero.test.tsx +49 -0
  57. package/src/components/custom/Fatigue/VerdictHero.tsx +79 -0
  58. package/src/components/custom/Fatigue/fatigue-mock.test.ts +59 -0
  59. package/src/components/custom/Fatigue/fatigue-mock.ts +268 -0
  60. package/src/components/custom/Fatigue/fatigue-model.ts +129 -0
  61. package/src/components/custom/Fatigue/fatigue-tokens.test.ts +70 -0
  62. package/src/components/custom/Fatigue/fatigue-tokens.ts +180 -0
  63. package/src/components/custom/Fatigue/index.ts +41 -0
  64. package/src/components/custom/Fatigue/tempo-pacing.test.ts +176 -0
  65. package/src/components/custom/Fatigue/tempo-pacing.ts +112 -0
  66. package/src/components/custom/Workout/BaseBadge.tsx +5 -5
  67. package/src/components/custom/Workout/DualVelocityStrip.test.tsx +685 -0
  68. package/src/components/custom/Workout/ExerciseCard.test.tsx +4 -4
  69. package/src/components/custom/Workout/ExerciseCard.tsx +3 -1
  70. package/src/components/custom/Workout/ExerciseDetailPage.tsx +7 -1
  71. package/src/components/custom/Workout/README.md +62 -16
  72. package/src/components/custom/Workout/RowInventory.stories.tsx +5 -2
  73. package/src/components/custom/Workout/S3FullRail.stories.tsx +13 -1
  74. package/src/components/custom/Workout/SegmentedBar.stories.tsx +3 -3
  75. package/src/components/custom/Workout/SessionHeader.tsx +2 -2
  76. package/src/components/custom/Workout/SessionRail.stories.tsx +4 -1
  77. package/src/components/custom/Workout/SessionRail.test.tsx +43 -0
  78. package/src/components/custom/Workout/SessionRail.tsx +55 -18
  79. package/src/components/custom/Workout/SetRow.test.tsx +6 -6
  80. package/src/components/custom/Workout/SetRow.tsx +9 -2
  81. package/src/components/custom/Workout/SupersetWrapper.stories.tsx +16 -25
  82. package/src/components/custom/Workout/SupersetWrapper.tsx +1 -1
  83. package/src/components/custom/Workout/TempoDisplay.tsx +3 -7
  84. package/src/components/custom/Workout/VelocityStrip.compact.stories.tsx +191 -0
  85. package/src/components/custom/Workout/VelocityStrip.dual.stories.tsx +186 -0
  86. package/src/components/custom/Workout/VelocityStrip.expanded.stories.tsx +296 -0
  87. package/src/components/custom/Workout/VelocityStrip.hero.stories.tsx +259 -0
  88. package/src/components/custom/Workout/VelocityStrip.stories.tsx +217 -250
  89. package/src/components/custom/Workout/VelocityStrip.test.tsx +196 -79
  90. package/src/components/custom/Workout/VelocityStrip.tsx +953 -609
  91. package/src/components/custom/Workout/VolumeLandmarkBar.stories.tsx +4 -1
  92. package/src/components/custom/Workout/WorkoutPill.tsx +2 -2
  93. package/src/components/custom/Workout/index.ts +3 -0
  94. package/src/components/custom/Workout/velocity-story-kit.tsx +438 -0
  95. package/src/components/custom/charts/SetBarChart.test.tsx +275 -0
  96. package/src/components/custom/charts/SetBarChart.tsx +651 -0
  97. package/src/components/custom/charts/live-rep-growth.ts +91 -0
  98. package/src/components/custom/index.ts +1 -0
  99. package/src/components/ui/surface/Surface.stories.tsx +195 -1
  100. package/src/components/ui/surface/Surface.test.tsx +148 -9
  101. package/src/components/ui/surface/Surface.tsx +37 -9
  102. package/src/components/ui/surface/SurfaceContext.ts +48 -8
  103. package/src/components/ui/surface/index.ts +1 -0
  104. package/src/components/ui/surface/surface.contract.test.ts +283 -0
  105. package/src/test/raw-color-patterns.test.ts +71 -0
  106. package/src/theme/ColorPalettes.stories.tsx +871 -0
  107. package/src/theme/ColorPrimitives.stories.tsx +300 -0
  108. package/src/theme/bar-paper.ts +59 -0
  109. package/src/theme/color-stories.coverage.test.ts +130 -0
  110. package/src/theme/color-story-kit.tsx +170 -0
  111. package/src/theme/config.ts +12 -0
  112. package/src/theme/elevation.ts +90 -67
  113. package/src/theme/global.css +35 -9
  114. package/src/theme/tokens/primitives.ts +40 -0
  115. package/src/theme/tokens/semantic.ts +63 -14
  116. package/tailwind.config.js +8 -0
  117. package/src/components/custom/Workout/VelocityStrip.modalities.stories.tsx +0 -254
  118. package/src/components/custom/Workout/VelocityStrip.responsive.stories.tsx +0 -145
  119. package/src/theme/ColorSystem.stories.tsx +0 -323
  120. package/src/theme/Colors.stories.tsx +0 -323
package/dist/bodymap.mjs CHANGED
@@ -40,13 +40,24 @@ var primitiveColors = {
40
40
  200: "#3C3C3C",
41
41
  300: "#2C2C2C",
42
42
  400: "#1F1F1F",
43
- 500: "#1C1C1C",
44
- 600: "#191919",
45
- 700: "#161616",
46
- 900: "#101010"
47
- },
43
+ 500: "#1C1C1C"},
48
44
  // Pure colors
49
45
  white: "#FFFFFF"};
46
+ var surfaceRampDark = {
47
+ inset: "#13100D",
48
+ // L*4.5 — sub-shell well / pressed
49
+ background: "#1C1916",
50
+ // L*9 — shell / frame
51
+ base: "#252321",
52
+ // L*13.5 — main content plane
53
+ elevated: "#2C2A28",
54
+ // L*17 — nav / rail
55
+ raised: "#31302F",
56
+ // L*20 — cards
57
+ overlay: "#373635"
58
+ // L*22.5 — hero / popover
59
+ };
60
+ var backgroundFrameDark = "#100D0A";
50
61
  var primitiveRamps = {
51
62
  red: {
52
63
  50: "#FFF4F4",
@@ -235,10 +246,19 @@ var semanticColorsLight = {
235
246
  "surface-overlay": primitiveColors.white,
236
247
  "surface-input": primitiveColors.neutral[50],
237
248
  // Input field background (filled variant)
249
+ // Deepest pressed pit (TD-surface-tokens, S-3) — light-mode counterpart of
250
+ // the dark ramp's `inset` plane; a placeholder pairing, not part of the
251
+ // dark-ramp investigation (surface.contract.test.ts is dark-mode only).
252
+ "surface-inset": primitiveColors.neutral[300],
238
253
  // Background colors (background-*)
239
254
  "background-base": "#EBEBEB",
240
255
  "background-default": primitiveColors.white,
241
256
  "background-subtle": primitiveColors.neutral[50],
257
+ // Frame/bezel chrome (TD-surface-tokens, S-3) — top bar + side nav shell,
258
+ // one step below `background-base` (darker still than `surface-inset`
259
+ // above, mirroring the dark-mode ordering). Placeholder pairing for light
260
+ // mode (see dark-mode note on `surface-inset` above).
261
+ "background-frame": primitiveColors.neutral[400],
242
262
  // Border colors (border-*)
243
263
  "border-default": "#E8E9EB",
244
264
  "border-subtle": primitiveColors.neutral[100],
@@ -254,6 +274,11 @@ var semanticColorsLight = {
254
274
  // Input field border on focus
255
275
  "border-input-error": primitiveColors.red[600],
256
276
  // Input field border on error
277
+ // Alpha hairline separators (surface-independent — composite toward black on
278
+ // light surfaces, mirroring the dark-mode white-alpha family). See §4/S-2.
279
+ "hairline-subtle": "rgba(0, 0, 0, 0.06)",
280
+ "hairline-default": "rgba(0, 0, 0, 0.09)",
281
+ "hairline-strong": "rgba(0, 0, 0, 0.14)",
257
282
  // Interactive states (interactive-*)
258
283
  "interactive-hover": "rgba(55, 65, 81, 0.04)",
259
284
  "interactive-focus": "rgba(55, 65, 81, 0.12)",
@@ -346,25 +371,46 @@ var semanticColorsDark = {
346
371
  "text-inverse": primitiveColors.neutral[900],
347
372
  "text-link": "#828DF8",
348
373
  "text-link-hover": primitiveColors.blue[400],
349
- // Surface colors - dark backgrounds
350
- "surface-base": primitiveColors.charcoal[700],
351
- // main surface
352
- "surface-elevated": primitiveColors.charcoal[600],
353
- // elevated surface
354
- "surface-raised": primitiveColors.charcoal[500],
355
- // raised surface
356
- "surface-overlay": primitiveColors.charcoal[600],
357
- // overlay surface
358
- "surface-input": primitiveColors.charcoal[600],
359
- // input surface
360
- // Background colors
361
- "background-base": primitiveColors.charcoal[900],
362
- // darkest charcoal
363
- "background-default": primitiveColors.charcoal[700],
364
- // main background
365
- "background-subtle": primitiveColors.charcoal[500],
366
- // subtle background
367
- // Border colors
374
+ // Surface colors - dark backgrounds — warm-tapered DERIVED ramp (TD-surface-tokens,
375
+ // S-1, re-spaced S-3). Shipped verbatim from `deriveSurfaceRamp()` — see
376
+ // `surfaceRampDark` in primitives.ts for the full derivation note. `surface-overlay`
377
+ // and `surface-elevated` are distinct (were both #191919 pre-S-1); `surface-input`
378
+ // tracks one plane above `surface-base`, same relative position as before the remap.
379
+ // `background-base` backs `Surface level="background"` (SurfaceContext.SURFACE_LEVEL_TOKEN),
380
+ // so it takes the ramp's `background` (shell/frame) role, NOT `inset`. The ramp's
381
+ // deepest `inset` plane is now promoted to `surface-inset` below (S-3) — still no
382
+ // `SurfaceLevel` member for it (follow-up, alongside the elevation.ts -1/-2 pressed
383
+ // levels — parallel workstream, not this branch).
384
+ "surface-base": surfaceRampDark.base,
385
+ // main surface (#252321, L*13.5)
386
+ "surface-elevated": surfaceRampDark.elevated,
387
+ // elevated surface (#2C2A28, L*17 — nav/rail)
388
+ "surface-raised": surfaceRampDark.raised,
389
+ // raised surface (#31302F, L*20 — cards)
390
+ "surface-overlay": surfaceRampDark.overlay,
391
+ // overlay surface (#373635, L*22.5 — hero/popover)
392
+ "surface-input": surfaceRampDark.elevated,
393
+ // input surface (#2C2A28 — one plane above base)
394
+ "surface-inset": surfaceRampDark.inset,
395
+ // deepest pressed pit (#13100D, L*4.5 — sub-shell well)
396
+ // Background colors — same ramp, the frame/shell end of it.
397
+ "background-base": surfaceRampDark.background,
398
+ // shell / frame (#1C1916, L*9 — Surface level="background")
399
+ "background-default": surfaceRampDark.base,
400
+ // main background (#252321, L*13.5 — matches surface-base)
401
+ "background-subtle": surfaceRampDark.elevated,
402
+ // subtle background (#2C2A28, L*17 — matches surface-elevated)
403
+ // Frame/bezel chrome (S-3) — the top bar + side nav shell; one step BELOW
404
+ // `background-base`, darker even than `surface-inset` — it exits the content
405
+ // ramp entirely rather than sitting in it. See `backgroundFrameDark` in
406
+ // primitives.ts.
407
+ "background-frame": backgroundFrameDark,
408
+ // frame / bezel (#100D0A, L*3.79)
409
+ // Border colors — `border-subtle` (#1C1C1C) previously collided with
410
+ // `surface-raised` (also #1C1C1C, an invisible border on raised cards). The
411
+ // re-spaced ramp above moved `surface-raised` to #2D2C2B, so this value is now
412
+ // distinct from every surface hex without needing to change it — see
413
+ // `surface.contract.test.ts` R2/R4.
368
414
  "border-default": primitiveColors.charcoal[400],
369
415
  // default border
370
416
  "border-subtle": primitiveColors.charcoal[500],
@@ -378,6 +424,14 @@ var semanticColorsDark = {
378
424
  "border-input-hover": primitiveColors.neutral[500],
379
425
  "border-input-focus": "#828DF8",
380
426
  "border-input-error": primitiveColors.red[500],
427
+ // Alpha hairline separators — the primary separation cue (§4/S-2). Self-
428
+ // normalizing: composites toward white by ~the same amount on ANY plane, so
429
+ // one family works at every elevation instead of per-surface border tokens.
430
+ // Shadows are demoted to floating-overlay use only (not shipped as a fill
431
+ // separator here — see elevation.ts, follow-up S-4).
432
+ "hairline-subtle": "rgba(255, 255, 255, 0.06)",
433
+ "hairline-default": "rgba(255, 255, 255, 0.09)",
434
+ "hairline-strong": "rgba(255, 255, 255, 0.14)",
381
435
  // Interactive states
382
436
  "interactive-hover": "rgba(255, 255, 255, 0.04)",
383
437
  "interactive-focus": "rgba(255, 255, 255, 0.12)",