@titan-design/react-ui 0.3.0 → 0.5.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 (90) hide show
  1. package/dist/MesoStatusCard-CQk71hSi.d.mts +77 -0
  2. package/dist/MesoStatusCard-CQk71hSi.d.ts +77 -0
  3. package/dist/bodymap.d.mts +246 -3
  4. package/dist/bodymap.d.ts +246 -3
  5. package/dist/bodymap.js +441 -97
  6. package/dist/bodymap.js.map +1 -1
  7. package/dist/bodymap.mjs +1958 -66
  8. package/dist/bodymap.mjs.map +1 -1
  9. package/dist/index.d.mts +71 -738
  10. package/dist/index.d.ts +71 -738
  11. package/dist/index.js +888 -1583
  12. package/dist/index.js.map +1 -1
  13. package/dist/index.mjs +4515 -2348
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/pages-D7Jlssvp.d.ts +791 -0
  16. package/dist/pages-MO0JCySL.d.mts +791 -0
  17. package/dist/pages.d.mts +4 -0
  18. package/dist/pages.d.ts +4 -0
  19. package/dist/pages.js +6646 -0
  20. package/dist/pages.js.map +1 -0
  21. package/dist/pages.mjs +6626 -0
  22. package/dist/pages.mjs.map +1 -0
  23. package/dist/theme/index.d.mts +28 -2
  24. package/dist/theme/index.d.ts +28 -2
  25. package/dist/theme/index.js +37 -0
  26. package/dist/theme/index.js.map +1 -1
  27. package/dist/theme/index.mjs +1880 -2
  28. package/dist/theme/index.mjs.map +1 -1
  29. package/dist/theme/tokens-css.mjs +573 -1
  30. package/dist/theme/tokens-css.mjs.map +1 -1
  31. package/package.json +9 -7
  32. package/src/components/custom/Workout/ActiveWorkoutPage.tsx +10 -15
  33. package/src/components/custom/Workout/BaseBadge.stories.tsx +3 -3
  34. package/src/components/custom/Workout/BaseBadge.test.tsx +1 -1
  35. package/src/components/custom/Workout/BaseBadge.tsx +1 -1
  36. package/src/components/custom/Workout/BodyMap.tsx +7 -8
  37. package/src/components/custom/Workout/BodyMapDetailPanel.tsx +25 -28
  38. package/src/components/custom/Workout/CapacityBandChart.tsx +2 -3
  39. package/src/components/custom/Workout/ExerciseCard.tsx +17 -28
  40. package/src/components/custom/Workout/ExerciseDetailPage.tsx +38 -31
  41. package/src/components/custom/Workout/InputBar.tsx +10 -11
  42. package/src/components/custom/Workout/IntensityBar.test.tsx +112 -60
  43. package/src/components/custom/Workout/IntensityBar.tsx +109 -58
  44. package/src/components/custom/Workout/MesoCard.tsx +2 -6
  45. package/src/components/custom/Workout/MesoStatusCard.tsx +17 -15
  46. package/src/components/custom/Workout/MuscleGroupChip.tsx +2 -4
  47. package/src/components/custom/Workout/PlaceholderStrip.tsx +5 -10
  48. package/src/components/custom/Workout/PrBadge.tsx +3 -3
  49. package/src/components/custom/Workout/PrHistoryModal.tsx +14 -16
  50. package/src/components/custom/Workout/ProgramPlanningPage.tsx +8 -12
  51. package/src/components/custom/Workout/README.md +50 -0
  52. package/src/components/custom/Workout/ReadinessCheck.tsx +13 -11
  53. package/src/components/custom/Workout/RestTimer.test.tsx +41 -10
  54. package/src/components/custom/Workout/RestTimer.tsx +55 -49
  55. package/src/components/custom/Workout/SetRow.tsx +20 -8
  56. package/src/components/custom/Workout/StrengthTrendChart.tsx +15 -17
  57. package/src/components/custom/Workout/TempoBar.stories.tsx +95 -0
  58. package/src/components/custom/Workout/TempoBar.test.tsx +103 -0
  59. package/src/components/custom/Workout/TempoBar.tsx +215 -0
  60. package/src/components/custom/Workout/TempoDisplay.stories.tsx +69 -2
  61. package/src/components/custom/Workout/TempoDisplay.test.tsx +35 -0
  62. package/src/components/custom/Workout/TempoDisplay.tsx +104 -1
  63. package/src/components/custom/Workout/TrainingStatusPage.tsx +8 -17
  64. package/src/components/custom/Workout/VelocityStrip.test.tsx +89 -2
  65. package/src/components/custom/Workout/VelocityStrip.tsx +210 -43
  66. package/src/components/custom/Workout/WeekRow.test.tsx +2 -2
  67. package/src/components/custom/Workout/WeekRow.tsx +2 -1
  68. package/src/components/custom/Workout/WeightBadge.test.tsx +2 -2
  69. package/src/components/custom/Workout/WeightBadge.tsx +2 -2
  70. package/src/components/custom/Workout/WorkoutCard.tsx +3 -8
  71. package/src/components/custom/Workout/icons.tsx +68 -0
  72. package/src/components/custom/Workout/index.ts +47 -47
  73. package/src/index.ts +3 -2
  74. package/src/pages.ts +61 -0
  75. package/src/test/nativewind-stub.ts +13 -0
  76. package/src/test/stories-smoke.test.tsx +50 -0
  77. package/src/theme/ThemeProvider.test.tsx +24 -0
  78. package/src/theme/ThemeProvider.tsx +50 -0
  79. package/src/theme/barrel.ts +53 -0
  80. package/src/theme/index.ts +8 -41
  81. package/src/theme/native-theming-guard.test.ts +117 -0
  82. package/src/theme/resolve-color.ts +19 -0
  83. package/dist/bodymap-BhG55xHM.d.mts +0 -318
  84. package/dist/bodymap-BhG55xHM.d.ts +0 -318
  85. package/dist/chunk-7XPB4NAO.mjs +0 -1013
  86. package/dist/chunk-7XPB4NAO.mjs.map +0 -1
  87. package/dist/chunk-P7TSQUN6.mjs +0 -846
  88. package/dist/chunk-P7TSQUN6.mjs.map +0 -1
  89. package/dist/chunk-TOD2WQBG.mjs +0 -1048
  90. package/dist/chunk-TOD2WQBG.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { ViewStyle } from 'react-native';
1
+ import { ViewStyle, ViewProps } from 'react-native';
2
2
 
3
3
  /**
4
4
  * Elevation System
@@ -1615,6 +1615,32 @@ declare function validateCssPropertyManifest(candidate: unknown): ManifestValida
1615
1615
  /** Type guard variant of validateCssPropertyManifest for use in narrowing contexts. */
1616
1616
  declare function isCssPropertyManifest(candidate: unknown): candidate is CssPropertyManifest;
1617
1617
 
1618
+ type ColorToken = keyof ReturnType<typeof getSemanticColors>;
1619
+ /**
1620
+ * Resolve a semantic color token for an inline style where a nativewind
1621
+ * className can't apply — gradients (`backgroundImage`), per-edge borders
1622
+ * (`borderTopColor`, …), SVG attributes, and conditional hex/token mixes.
1623
+ *
1624
+ * The companion to className color tokens: on **web** it returns the CSS
1625
+ * variable (`var(--color-…)`), so the dashboard's light/dark switching keeps
1626
+ * working exactly as `global.css` intends; on **native** it returns the
1627
+ * resolved hex from `getSemanticColors` (mobile is dark-only). This is why
1628
+ * these spots stay theme-correct on web while also rendering on-device.
1629
+ */
1630
+ declare function resolveColor(token: ColorToken, mode?: ThemeMode): string;
1631
+
1632
+ type ThemeProviderMode = 'dark' | 'light';
1633
+ interface ThemeProviderProps extends ViewProps {
1634
+ /** Theme mode to register. Mobile is dark-only today; defaults to `dark`. */
1635
+ mode?: ThemeProviderMode;
1636
+ }
1637
+ /**
1638
+ * Wrap the app root so descendant titan components' `--color-*` className tokens
1639
+ * resolve on native. Fills its parent (`flex: 1`) by default; pass `style` to
1640
+ * override. On web it is harmless (the dashboard already loads `global.css`).
1641
+ */
1642
+ declare function ThemeProvider({ mode, style, children, ...props }: ThemeProviderProps): React.JSX.Element;
1643
+
1618
1644
  interface ThemePresetColors {
1619
1645
  'brand-primary'?: string;
1620
1646
  'brand-primary-light'?: string;
@@ -1700,4 +1726,4 @@ declare const defaultPreset: ThemePreset;
1700
1726
  */
1701
1727
  declare const audiobookPreset: ThemePreset;
1702
1728
 
1703
- export { type ComponentType, type CssPropertyEntry, type CssPropertyManifest, type ElevationConfig, type ElevationLevel, type GlowIntensity, type ManifestValidationResult, type ShadowIntensity, type ShadowSurface, type ThemeConfig, type ThemeMode, type ThemePreset, type ThemePresetColors, type ThemePresetFonts, type ThemePresetRadii, type ThemePresetShadows, type VariantAxes, type 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 };
1729
+ export { type ComponentType, type CssPropertyEntry, type CssPropertyManifest, type ElevationConfig, type ElevationLevel, type GlowIntensity, type ManifestValidationResult, type ShadowIntensity, type ShadowSurface, type ThemeConfig, type ThemeMode, type ThemePreset, type ThemePresetColors, type ThemePresetFonts, type ThemePresetRadii, type ThemePresetShadows, ThemeProvider, type ThemeProviderMode, type ThemeProviderProps, type VariantAxes, type 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, resolveColor, rgbToHex, rgbToHsv, semanticColorsDark, semanticColorsLight, semanticTypography, shadowColors, validateCssPropertyManifest };
@@ -1,4 +1,4 @@
1
- import { ViewStyle } from 'react-native';
1
+ import { ViewStyle, ViewProps } from 'react-native';
2
2
 
3
3
  /**
4
4
  * Elevation System
@@ -1615,6 +1615,32 @@ declare function validateCssPropertyManifest(candidate: unknown): ManifestValida
1615
1615
  /** Type guard variant of validateCssPropertyManifest for use in narrowing contexts. */
1616
1616
  declare function isCssPropertyManifest(candidate: unknown): candidate is CssPropertyManifest;
1617
1617
 
1618
+ type ColorToken = keyof ReturnType<typeof getSemanticColors>;
1619
+ /**
1620
+ * Resolve a semantic color token for an inline style where a nativewind
1621
+ * className can't apply — gradients (`backgroundImage`), per-edge borders
1622
+ * (`borderTopColor`, …), SVG attributes, and conditional hex/token mixes.
1623
+ *
1624
+ * The companion to className color tokens: on **web** it returns the CSS
1625
+ * variable (`var(--color-…)`), so the dashboard's light/dark switching keeps
1626
+ * working exactly as `global.css` intends; on **native** it returns the
1627
+ * resolved hex from `getSemanticColors` (mobile is dark-only). This is why
1628
+ * these spots stay theme-correct on web while also rendering on-device.
1629
+ */
1630
+ declare function resolveColor(token: ColorToken, mode?: ThemeMode): string;
1631
+
1632
+ type ThemeProviderMode = 'dark' | 'light';
1633
+ interface ThemeProviderProps extends ViewProps {
1634
+ /** Theme mode to register. Mobile is dark-only today; defaults to `dark`. */
1635
+ mode?: ThemeProviderMode;
1636
+ }
1637
+ /**
1638
+ * Wrap the app root so descendant titan components' `--color-*` className tokens
1639
+ * resolve on native. Fills its parent (`flex: 1`) by default; pass `style` to
1640
+ * override. On web it is harmless (the dashboard already loads `global.css`).
1641
+ */
1642
+ declare function ThemeProvider({ mode, style, children, ...props }: ThemeProviderProps): React.JSX.Element;
1643
+
1618
1644
  interface ThemePresetColors {
1619
1645
  'brand-primary'?: string;
1620
1646
  'brand-primary-light'?: string;
@@ -1700,4 +1726,4 @@ declare const defaultPreset: ThemePreset;
1700
1726
  */
1701
1727
  declare const audiobookPreset: ThemePreset;
1702
1728
 
1703
- export { type ComponentType, type CssPropertyEntry, type CssPropertyManifest, type ElevationConfig, type ElevationLevel, type GlowIntensity, type ManifestValidationResult, type ShadowIntensity, type ShadowSurface, type ThemeConfig, type ThemeMode, type ThemePreset, type ThemePresetColors, type ThemePresetFonts, type ThemePresetRadii, type ThemePresetShadows, type VariantAxes, type 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 };
1729
+ export { type ComponentType, type CssPropertyEntry, type CssPropertyManifest, type ElevationConfig, type ElevationLevel, type GlowIntensity, type ManifestValidationResult, type ShadowIntensity, type ShadowSurface, type ThemeConfig, type ThemeMode, type ThemePreset, type ThemePresetColors, type ThemePresetFonts, type ThemePresetRadii, type ThemePresetShadows, ThemeProvider, type ThemeProviderMode, type ThemeProviderProps, type VariantAxes, type 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, resolveColor, rgbToHex, rgbToHsv, semanticColorsDark, semanticColorsLight, semanticTypography, shadowColors, validateCssPropertyManifest };
@@ -1,6 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var reactNative = require('react-native');
4
+ var nativewind = require('nativewind');
5
+ var jsxRuntime = require('react/jsx-runtime');
4
6
 
5
7
  // src/theme/tokens/primitives.ts
6
8
  var primitiveColors = {
@@ -1680,6 +1682,9 @@ function validateCssPropertyManifest(candidate) {
1680
1682
  function isCssPropertyManifest(candidate) {
1681
1683
  return validateCssPropertyManifest(candidate).valid;
1682
1684
  }
1685
+ function resolveColor(token, mode = "dark") {
1686
+ return reactNative.Platform.OS === "web" ? `var(--color-${token})` : getSemanticColors(mode)[token];
1687
+ }
1683
1688
 
1684
1689
  // src/theme/presets/apply.ts
1685
1690
  function colorKeyToVar(key) {
@@ -1843,7 +1848,38 @@ var audiobookPreset = {
1843
1848
  },
1844
1849
  rootClasses: ["atmosphere-warm", "grain"]
1845
1850
  };
1851
+ function wrapJsx(fn) {
1852
+ return function(type, props, ...rest) {
1853
+ if (props && typeof props.className === "string" && props.className) {
1854
+ const cn = props.className;
1855
+ const cssStyle = { $$css: true, [cn]: cn };
1856
+ const existing = props.style;
1857
+ props = {
1858
+ ...props,
1859
+ style: existing ? [cssStyle, existing] : cssStyle
1860
+ };
1861
+ delete props.className;
1862
+ }
1863
+ return fn(type, props, ...rest);
1864
+ };
1865
+ }
1866
+ var jsx = wrapJsx(jsxRuntime.jsx);
1867
+
1868
+ // src/theme/ThemeProvider.tsx
1869
+ var MODE_VARS = {
1870
+ dark: nativewind.vars(darkThemeCSSVars),
1871
+ light: nativewind.vars(lightThemeCSSVars)
1872
+ };
1873
+ function ThemeProvider({
1874
+ mode = "dark",
1875
+ style,
1876
+ children,
1877
+ ...props
1878
+ }) {
1879
+ return /* @__PURE__ */ jsx(reactNative.View, { style: [MODE_VARS[mode], { flex: 1 }, style], ...props, children });
1880
+ }
1846
1881
 
1882
+ exports.ThemeProvider = ThemeProvider;
1847
1883
  exports.applyThemePreset = applyThemePreset;
1848
1884
  exports.audiobookPreset = audiobookPreset;
1849
1885
  exports.buttonSizes = buttonSizes;
@@ -1883,6 +1919,7 @@ exports.primitiveShadows = primitiveShadows;
1883
1919
  exports.primitiveSpacing = primitiveSpacing;
1884
1920
  exports.primitiveTypography = primitiveTypography;
1885
1921
  exports.primitiveZIndex = primitiveZIndex;
1922
+ exports.resolveColor = resolveColor;
1886
1923
  exports.rgbToHex = rgbToHex;
1887
1924
  exports.rgbToHsv = rgbToHsv;
1888
1925
  exports.semanticColorsDark = semanticColorsDark;