@titan-design/react-ui 0.2.6 → 0.3.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 (191) hide show
  1. package/dist/bodymap-BhG55xHM.d.mts +318 -0
  2. package/dist/bodymap-BhG55xHM.d.ts +318 -0
  3. package/dist/bodymap.d.mts +3 -0
  4. package/dist/bodymap.d.ts +3 -0
  5. package/dist/bodymap.js +2670 -0
  6. package/dist/bodymap.js.map +1 -0
  7. package/dist/bodymap.mjs +1101 -0
  8. package/dist/bodymap.mjs.map +1 -0
  9. package/dist/{chunk-UXVRPOME.mjs → chunk-7XPB4NAO.mjs} +125 -785
  10. package/dist/chunk-7XPB4NAO.mjs.map +1 -0
  11. package/dist/chunk-P7TSQUN6.mjs +846 -0
  12. package/dist/chunk-P7TSQUN6.mjs.map +1 -0
  13. package/dist/chunk-TOD2WQBG.mjs +1048 -0
  14. package/dist/chunk-TOD2WQBG.mjs.map +1 -0
  15. package/dist/index.d.mts +1131 -4
  16. package/dist/index.d.ts +1131 -4
  17. package/dist/index.js +6396 -225
  18. package/dist/index.js.map +1 -1
  19. package/dist/index.mjs +5572 -641
  20. package/dist/index.mjs.map +1 -1
  21. package/dist/theme/index.d.mts +317 -1
  22. package/dist/theme/index.d.ts +317 -1
  23. package/dist/theme/index.js +185 -2
  24. package/dist/theme/index.js.map +1 -1
  25. package/dist/theme/index.mjs +2 -1
  26. package/dist/theme/tokens-css.d.mts +20 -0
  27. package/dist/theme/tokens-css.d.ts +20 -0
  28. package/dist/theme/tokens-css.js +598 -0
  29. package/dist/theme/tokens-css.js.map +1 -0
  30. package/dist/theme/tokens-css.mjs +24 -0
  31. package/dist/theme/tokens-css.mjs.map +1 -0
  32. package/package.json +25 -5
  33. package/src/bodymap.ts +37 -0
  34. package/src/components/custom/DateTime/DateTime.stories.tsx +1 -1
  35. package/src/components/custom/Gauge/Gauge.stories.tsx +45 -0
  36. package/src/components/custom/Gauge/Gauge.test.tsx +71 -0
  37. package/src/components/custom/Gauge/Gauge.tsx +167 -0
  38. package/src/components/custom/Gauge/index.ts +2 -0
  39. package/src/components/custom/Scatter/Scatter.stories.tsx +85 -0
  40. package/src/components/custom/Scatter/Scatter.test.tsx +96 -0
  41. package/src/components/custom/Scatter/Scatter.tsx +260 -0
  42. package/src/components/custom/Scatter/index.ts +2 -0
  43. package/src/components/custom/Sidebar/Sidebar.tsx +1 -1
  44. package/src/components/custom/Table/Table.test.tsx +27 -0
  45. package/src/components/custom/Table/Table.tsx +33 -17
  46. package/src/components/custom/Treemap/Treemap.stories.tsx +60 -0
  47. package/src/components/custom/Treemap/Treemap.test.tsx +67 -0
  48. package/src/components/custom/Treemap/Treemap.tsx +192 -0
  49. package/src/components/custom/Treemap/index.ts +2 -0
  50. package/src/components/custom/Workout/ActiveWorkoutPage.stories.tsx +118 -0
  51. package/src/components/custom/Workout/ActiveWorkoutPage.test.tsx +171 -0
  52. package/src/components/custom/Workout/ActiveWorkoutPage.tsx +447 -0
  53. package/src/components/custom/Workout/BaseBadge.stories.tsx +75 -0
  54. package/src/components/custom/Workout/BaseBadge.test.tsx +102 -0
  55. package/src/components/custom/Workout/BaseBadge.tsx +113 -0
  56. package/src/components/custom/Workout/BodyMap.stories.tsx +121 -0
  57. package/src/components/custom/Workout/BodyMap.test.tsx +124 -0
  58. package/src/components/custom/Workout/BodyMap.tsx +347 -0
  59. package/src/components/custom/Workout/BodyMapDetailPanel.stories.tsx +171 -0
  60. package/src/components/custom/Workout/BodyMapDetailPanel.test.tsx +225 -0
  61. package/src/components/custom/Workout/BodyMapDetailPanel.tsx +477 -0
  62. package/src/components/custom/Workout/CapacityBandChart.stories.tsx +125 -0
  63. package/src/components/custom/Workout/CapacityBandChart.test.tsx +193 -0
  64. package/src/components/custom/Workout/CapacityBandChart.tsx +493 -0
  65. package/src/components/custom/Workout/DeviationBar.stories.tsx +58 -0
  66. package/src/components/custom/Workout/DeviationBar.test.tsx +86 -0
  67. package/src/components/custom/Workout/DeviationBar.tsx +78 -0
  68. package/src/components/custom/Workout/ExerciseCard.stories.tsx +186 -0
  69. package/src/components/custom/Workout/ExerciseCard.test.tsx +343 -0
  70. package/src/components/custom/Workout/ExerciseCard.tsx +442 -0
  71. package/src/components/custom/Workout/ExerciseDetailPage.stories.tsx +225 -0
  72. package/src/components/custom/Workout/ExerciseDetailPage.test.tsx +128 -0
  73. package/src/components/custom/Workout/ExerciseDetailPage.tsx +630 -0
  74. package/src/components/custom/Workout/InputBar.stories.tsx +75 -0
  75. package/src/components/custom/Workout/InputBar.test.tsx +116 -0
  76. package/src/components/custom/Workout/InputBar.tsx +162 -0
  77. package/src/components/custom/Workout/IntensityBar.stories.tsx +60 -0
  78. package/src/components/custom/Workout/IntensityBar.test.tsx +113 -0
  79. package/src/components/custom/Workout/IntensityBar.tsx +166 -0
  80. package/src/components/custom/Workout/MesoCard.stories.tsx +152 -0
  81. package/src/components/custom/Workout/MesoCard.test.tsx +170 -0
  82. package/src/components/custom/Workout/MesoCard.tsx +237 -0
  83. package/src/components/custom/Workout/MesoProgressBar.stories.tsx +85 -0
  84. package/src/components/custom/Workout/MesoProgressBar.test.tsx +153 -0
  85. package/src/components/custom/Workout/MesoProgressBar.tsx +165 -0
  86. package/src/components/custom/Workout/MesoStatusCard.stories.tsx +126 -0
  87. package/src/components/custom/Workout/MesoStatusCard.test.tsx +209 -0
  88. package/src/components/custom/Workout/MesoStatusCard.tsx +456 -0
  89. package/src/components/custom/Workout/MuscleGroupChip.stories.tsx +118 -0
  90. package/src/components/custom/Workout/MuscleGroupChip.test.tsx +91 -0
  91. package/src/components/custom/Workout/MuscleGroupChip.tsx +92 -0
  92. package/src/components/custom/Workout/PlaceholderStrip.stories.tsx +94 -0
  93. package/src/components/custom/Workout/PlaceholderStrip.test.tsx +83 -0
  94. package/src/components/custom/Workout/PlaceholderStrip.tsx +90 -0
  95. package/src/components/custom/Workout/PrBadge.stories.tsx +105 -0
  96. package/src/components/custom/Workout/PrBadge.test.tsx +111 -0
  97. package/src/components/custom/Workout/PrBadge.tsx +103 -0
  98. package/src/components/custom/Workout/PrHistoryModal.stories.tsx +116 -0
  99. package/src/components/custom/Workout/PrHistoryModal.test.tsx +161 -0
  100. package/src/components/custom/Workout/PrHistoryModal.tsx +244 -0
  101. package/src/components/custom/Workout/ProgramPlanningPage.stories.tsx +257 -0
  102. package/src/components/custom/Workout/ProgramPlanningPage.test.tsx +142 -0
  103. package/src/components/custom/Workout/ProgramPlanningPage.tsx +422 -0
  104. package/src/components/custom/Workout/ReadinessCheck.stories.tsx +126 -0
  105. package/src/components/custom/Workout/ReadinessCheck.test.tsx +181 -0
  106. package/src/components/custom/Workout/ReadinessCheck.tsx +265 -0
  107. package/src/components/custom/Workout/RestTimer.test.tsx +10 -0
  108. package/src/components/custom/Workout/RestTimer.tsx +15 -11
  109. package/src/components/custom/Workout/SetRow.stories.tsx +165 -0
  110. package/src/components/custom/Workout/SetRow.test.tsx +222 -0
  111. package/src/components/custom/Workout/SetRow.tsx +247 -0
  112. package/src/components/custom/Workout/Sparkline.stories.tsx +125 -0
  113. package/src/components/custom/Workout/Sparkline.test.tsx +113 -0
  114. package/src/components/custom/Workout/Sparkline.tsx +188 -0
  115. package/src/components/custom/Workout/StatusDot.stories.tsx +150 -0
  116. package/src/components/custom/Workout/StatusDot.test.tsx +165 -0
  117. package/src/components/custom/Workout/StatusDot.tsx +160 -0
  118. package/src/components/custom/Workout/StrengthTrendChart.stories.tsx +130 -0
  119. package/src/components/custom/Workout/StrengthTrendChart.test.tsx +217 -0
  120. package/src/components/custom/Workout/StrengthTrendChart.tsx +628 -0
  121. package/src/components/custom/Workout/SupersetWrapper.tsx +1 -2
  122. package/src/components/custom/Workout/TempoDisplay.stories.tsx +66 -0
  123. package/src/components/custom/Workout/TempoDisplay.test.tsx +90 -0
  124. package/src/components/custom/Workout/TempoDisplay.tsx +209 -0
  125. package/src/components/custom/Workout/TrainingStatusPage.stories.tsx +212 -0
  126. package/src/components/custom/Workout/TrainingStatusPage.test.tsx +131 -0
  127. package/src/components/custom/Workout/TrainingStatusPage.tsx +321 -0
  128. package/src/components/custom/Workout/VelocityStrip.stories.tsx +125 -0
  129. package/src/components/custom/Workout/VelocityStrip.test.tsx +244 -0
  130. package/src/components/custom/Workout/VelocityStrip.tsx +288 -0
  131. package/src/components/custom/Workout/WeekRow.stories.tsx +121 -0
  132. package/src/components/custom/Workout/WeekRow.test.tsx +117 -0
  133. package/src/components/custom/Workout/WeekRow.tsx +140 -0
  134. package/src/components/custom/Workout/WeightBadge.stories.tsx +87 -0
  135. package/src/components/custom/Workout/WeightBadge.test.tsx +164 -0
  136. package/src/components/custom/Workout/WeightBadge.tsx +113 -0
  137. package/src/components/custom/Workout/WorkoutCard.stories.tsx +135 -0
  138. package/src/components/custom/Workout/WorkoutCard.test.tsx +172 -0
  139. package/src/components/custom/Workout/WorkoutCard.tsx +228 -0
  140. package/src/components/custom/Workout/WorkoutPill.stories.tsx +63 -0
  141. package/src/components/custom/Workout/WorkoutPill.test.tsx +153 -0
  142. package/src/components/custom/Workout/WorkoutPill.tsx +177 -0
  143. package/src/components/custom/Workout/index.ts +152 -0
  144. package/src/components/custom/Workout/muscleTaxonomy.ts +252 -0
  145. package/src/components/custom/index.ts +3 -0
  146. package/src/components/custom/stepper/Stepper.stories.tsx +1 -1
  147. package/src/components/custom/stepper/Stepper.tsx +2 -2
  148. package/src/components/ui/autocomplete/Autocomplete.stories.tsx +1 -1
  149. package/src/components/ui/autocomplete/Autocomplete.tsx +1 -1
  150. package/src/components/ui/card/Card.tsx +1 -1
  151. package/src/components/ui/checkbox/Checkbox.tsx +1 -1
  152. package/src/components/ui/collapse/Collapse.tsx +1 -1
  153. package/src/components/ui/data-row/DataRow.stories.tsx +1 -1
  154. package/src/components/ui/drawer/Drawer.tsx +3 -3
  155. package/src/components/ui/form-field/FormField.tsx +1 -1
  156. package/src/components/ui/help-tip/HelpTip.tsx +1 -1
  157. package/src/components/ui/menu/Menu.tsx +2 -2
  158. package/src/components/ui/pill/Pill.tsx +1 -1
  159. package/src/components/ui/popover/Popover.stories.tsx +2 -2
  160. package/src/components/ui/popover/Popover.tsx +1 -1
  161. package/src/components/ui/radio/Radio.stories.tsx +1 -1
  162. package/src/components/ui/section/Section.stories.tsx +4 -4
  163. package/src/components/ui/select/Select.tsx +1 -1
  164. package/src/components/ui/stack/Stack.stories.tsx +4 -4
  165. package/src/components/ui/tabs/Tabs.tsx +2 -2
  166. package/src/components/ui/toolbar-button/ToolbarButton.stories.tsx +1 -1
  167. package/src/components/ui/toolbar-button/ToolbarButton.tsx +1 -1
  168. package/src/examples/react-hook-form/ControlledFields.tsx +171 -0
  169. package/src/examples/react-hook-form/ReactHookForm.stories.tsx +51 -0
  170. package/src/examples/react-hook-form/ReactHookForm.test.tsx +61 -0
  171. package/src/examples/react-hook-form/RhfContactForm.tsx +99 -0
  172. package/src/stories/PresetShowcase.stories.tsx +15 -15
  173. package/src/theme/config.completeness.test.ts +77 -0
  174. package/src/theme/config.ts +151 -0
  175. package/src/theme/index.ts +2 -1
  176. package/src/theme/manifest/css-property-manifest.example.json +79 -0
  177. package/src/theme/manifest/css-property-manifest.schema.json +93 -0
  178. package/src/theme/manifest/css-property-manifest.test.ts +81 -0
  179. package/src/theme/manifest/css-property-manifest.types.ts +49 -0
  180. package/src/theme/manifest/css-property-manifest.validate.ts +84 -0
  181. package/src/theme/manifest/design-freeze.test.ts +155 -0
  182. package/src/theme/manifest/extract-css-properties.fixture.html +29 -0
  183. package/src/theme/manifest/extract-css-properties.test.ts +112 -0
  184. package/src/theme/manifest/index.ts +11 -0
  185. package/src/theme/tokens-css.test.ts +28 -0
  186. package/src/theme/tokens-css.ts +36 -0
  187. package/src/theme/workout-tokens.ts +59 -0
  188. package/src/utils/index.ts +10 -0
  189. package/src/utils/workout-format.test.ts +81 -0
  190. package/src/utils/workout-format.ts +83 -0
  191. package/dist/chunk-UXVRPOME.mjs.map +0 -1
@@ -866,6 +866,23 @@ declare function getSemanticColors(mode: ThemeMode): {
866
866
  */
867
867
 
868
868
  declare const lightThemeCSSVars: {
869
+ readonly '--color-brand-primary-rgb': "255, 121, 0";
870
+ readonly '--color-brand-secondary-rgb': "64, 109, 135";
871
+ readonly '--color-status-success-rgb': "20, 184, 166";
872
+ readonly '--color-status-error-rgb': "209, 67, 67";
873
+ readonly '--color-status-warning-rgb': "255, 176, 32";
874
+ readonly '--color-status-info-rgb': "33, 150, 243";
875
+ readonly '--color-background-base-rgb': "16, 16, 16";
876
+ readonly '--font-family-sans': "'Inter'";
877
+ readonly '--font-family-body': "'Nunito Sans'";
878
+ readonly '--font-family-heading': "'Space Grotesk'";
879
+ readonly '--font-family-mono': "'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace";
880
+ readonly '--ease-out': "cubic-bezier(0.22, 1, 0.36, 1)";
881
+ readonly '--ease-in-out': "cubic-bezier(0.65, 0, 0.35, 1)";
882
+ readonly '--ease-spring': "cubic-bezier(0.34, 1.56, 0.64, 1)";
883
+ readonly '--duration-fast': "150ms";
884
+ readonly '--duration-normal': "250ms";
885
+ readonly '--duration-slow': "400ms";
869
886
  readonly '--color-brand-primary': "#FF7900";
870
887
  readonly '--color-brand-primary-light': "#FF9630";
871
888
  readonly '--color-brand-primary-dark': "#D0620C";
@@ -906,8 +923,73 @@ declare const lightThemeCSSVars: {
906
923
  readonly '--color-interactive-selected': "rgba(55, 65, 81, 0.08)";
907
924
  readonly '--color-interactive-disabled': "rgba(55, 65, 81, 0.12)";
908
925
  readonly '--color-divider': "#E8E9EB";
926
+ readonly '--color-brand-primary-hover': "#F56C00";
927
+ readonly '--color-brand-primary-active': "#E06D10";
928
+ readonly '--color-brand-secondary-hover': "#39617A";
929
+ readonly '--color-brand-secondary-active': "#32556D";
930
+ readonly '--color-status-success-light': "#43C6B7";
931
+ readonly '--color-status-success-dark': "#0E8074";
932
+ readonly '--color-status-error-light': "#DA6868";
933
+ readonly '--color-status-error-dark': "#922E2E";
934
+ readonly '--color-status-warning-light': "#FFBF4C";
935
+ readonly '--color-status-warning-dark': "#B27B16";
936
+ readonly '--color-status-info-light': "#64B6F7";
937
+ readonly '--color-status-info-dark': "#0B79D0";
938
+ readonly '--color-on-status-success': "#FFFFFF";
939
+ readonly '--color-on-status-error': "#FFFFFF";
940
+ readonly '--color-on-status-warning': "#FFFFFF";
941
+ readonly '--color-on-status-info': "#FFFFFF";
942
+ readonly '--color-result-improve': "#4caf50";
943
+ readonly '--color-result-improve-light': "rgba(76, 175, 80, 0.12)";
944
+ readonly '--color-result-improve-dark': "#248a24";
945
+ readonly '--color-result-degrade': "#ef5350";
946
+ readonly '--color-result-degrade-light': "rgba(239, 83, 80, 0.12)";
947
+ readonly '--color-result-degrade-dark': "#b30000";
948
+ readonly '--color-result-inconclusive': "#9E9A97";
949
+ readonly '--color-result-inconclusive-light': "rgba(158, 154, 151, 0.12)";
950
+ readonly '--color-result-neutral': "#6B7280";
951
+ readonly '--color-on-result-improve': "#FFFFFF";
952
+ readonly '--color-on-result-degrade': "#FFFFFF";
953
+ readonly '--color-on-result-inconclusive': "#FFFFFF";
954
+ readonly '--color-data-1': "#1965B0";
955
+ readonly '--color-data-2': "#4EB265";
956
+ readonly '--color-data-3': "#F7F056";
957
+ readonly '--color-data-4': "#DC050C";
958
+ readonly '--color-data-5': "#882E72";
959
+ readonly '--color-data-6': "#F4A736";
960
+ readonly '--color-data-7': "#7BAFDE";
961
+ readonly '--color-data-8': "#90C987";
962
+ readonly '--color-data-9': "#CAACCB";
963
+ readonly '--color-data-10': "#EE8026";
964
+ readonly '--color-text-link-hover': "#3832A0";
965
+ readonly '--color-surface-overlay': "#FFFFFF";
966
+ readonly '--color-surface-input': "#FAFAFA";
967
+ readonly '--color-border-input': "#D1D5DB";
968
+ readonly '--color-border-input-hover': "#9CA3AF";
969
+ readonly '--color-border-input-focus': "#5048E5";
970
+ readonly '--color-border-input-error': "#D14343";
971
+ readonly '--color-interactive-disabled-text': "rgba(55, 65, 81, 0.26)";
972
+ readonly '--color-avatar-background': "#6B7280";
973
+ readonly '--color-avatar-text': "#FFFFFF";
909
974
  };
910
975
  declare const darkThemeCSSVars: {
976
+ readonly '--color-brand-primary-rgb': "255, 121, 0";
977
+ readonly '--color-brand-secondary-rgb': "64, 109, 135";
978
+ readonly '--color-status-success-rgb': "20, 184, 166";
979
+ readonly '--color-status-error-rgb': "209, 67, 67";
980
+ readonly '--color-status-warning-rgb': "255, 176, 32";
981
+ readonly '--color-status-info-rgb': "33, 150, 243";
982
+ readonly '--color-background-base-rgb': "16, 16, 16";
983
+ readonly '--font-family-sans': "'Inter'";
984
+ readonly '--font-family-body': "'Nunito Sans'";
985
+ readonly '--font-family-heading': "'Space Grotesk'";
986
+ readonly '--font-family-mono': "'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace";
987
+ readonly '--ease-out': "cubic-bezier(0.22, 1, 0.36, 1)";
988
+ readonly '--ease-in-out': "cubic-bezier(0.65, 0, 0.35, 1)";
989
+ readonly '--ease-spring': "cubic-bezier(0.34, 1.56, 0.64, 1)";
990
+ readonly '--duration-fast': "150ms";
991
+ readonly '--duration-normal': "250ms";
992
+ readonly '--duration-slow': "400ms";
911
993
  readonly '--color-brand-primary': "#FF7900";
912
994
  readonly '--color-brand-primary-light': "#FF9630";
913
995
  readonly '--color-brand-primary-dark': "#D0620C";
@@ -948,8 +1030,73 @@ declare const darkThemeCSSVars: {
948
1030
  readonly '--color-interactive-selected': "rgba(255, 255, 255, 0.08)";
949
1031
  readonly '--color-interactive-disabled': "rgba(255, 255, 255, 0.12)";
950
1032
  readonly '--color-divider': "#1F1F1F";
1033
+ readonly '--color-brand-primary-hover': "#FF8500";
1034
+ readonly '--color-brand-primary-active': "#FF9630";
1035
+ readonly '--color-brand-secondary-hover': "#557488";
1036
+ readonly '--color-brand-secondary-active': "#678498";
1037
+ readonly '--color-status-success-light': "#43C6B7";
1038
+ readonly '--color-status-success-dark': "#0E8074";
1039
+ readonly '--color-status-error-light': "#DA6868";
1040
+ readonly '--color-status-error-dark': "#922E2E";
1041
+ readonly '--color-status-warning-light': "#FFBF4C";
1042
+ readonly '--color-status-warning-dark': "#B27B16";
1043
+ readonly '--color-status-info-light': "#64B6F7";
1044
+ readonly '--color-status-info-dark': "#0B79D0";
1045
+ readonly '--color-on-status-success': "#FFFFFF";
1046
+ readonly '--color-on-status-error': "#FFFFFF";
1047
+ readonly '--color-on-status-warning': "#FFFFFF";
1048
+ readonly '--color-on-status-info': "#FFFFFF";
1049
+ readonly '--color-result-improve': "#4caf50";
1050
+ readonly '--color-result-improve-light': "rgba(76, 175, 80, 0.16)";
1051
+ readonly '--color-result-improve-dark': "#248a24";
1052
+ readonly '--color-result-degrade': "#ef5350";
1053
+ readonly '--color-result-degrade-light': "rgba(239, 83, 80, 0.16)";
1054
+ readonly '--color-result-degrade-dark': "#b30000";
1055
+ readonly '--color-result-inconclusive': "#9E9A97";
1056
+ readonly '--color-result-inconclusive-light': "rgba(158, 154, 151, 0.16)";
1057
+ readonly '--color-result-neutral': "#9CA3AF";
1058
+ readonly '--color-on-result-improve': "#FFFFFF";
1059
+ readonly '--color-on-result-degrade': "#FFFFFF";
1060
+ readonly '--color-on-result-inconclusive': "#FFFFFF";
1061
+ readonly '--color-data-1': "#1965B0";
1062
+ readonly '--color-data-2': "#4EB265";
1063
+ readonly '--color-data-3': "#F7F056";
1064
+ readonly '--color-data-4': "#DC050C";
1065
+ readonly '--color-data-5': "#882E72";
1066
+ readonly '--color-data-6': "#F4A736";
1067
+ readonly '--color-data-7': "#7BAFDE";
1068
+ readonly '--color-data-8': "#90C987";
1069
+ readonly '--color-data-9': "#CAACCB";
1070
+ readonly '--color-data-10': "#EE8026";
1071
+ readonly '--color-text-link-hover': "#60A5FA";
1072
+ readonly '--color-surface-overlay': "#191919";
1073
+ readonly '--color-surface-input': "#191919";
1074
+ readonly '--color-border-input': "#4B5563";
1075
+ readonly '--color-border-input-hover': "#6B7280";
1076
+ readonly '--color-border-input-focus': "#828DF8";
1077
+ readonly '--color-border-input-error': "#EF4444";
1078
+ readonly '--color-interactive-disabled-text': "rgba(255, 255, 255, 0.26)";
1079
+ readonly '--color-avatar-background': "#4B5563";
1080
+ readonly '--color-avatar-text': "#FFFFFF";
951
1081
  };
952
1082
  declare function getThemeCSSVars(mode: ThemeMode): {
1083
+ readonly '--color-brand-primary-rgb': "255, 121, 0";
1084
+ readonly '--color-brand-secondary-rgb': "64, 109, 135";
1085
+ readonly '--color-status-success-rgb': "20, 184, 166";
1086
+ readonly '--color-status-error-rgb': "209, 67, 67";
1087
+ readonly '--color-status-warning-rgb': "255, 176, 32";
1088
+ readonly '--color-status-info-rgb': "33, 150, 243";
1089
+ readonly '--color-background-base-rgb': "16, 16, 16";
1090
+ readonly '--font-family-sans': "'Inter'";
1091
+ readonly '--font-family-body': "'Nunito Sans'";
1092
+ readonly '--font-family-heading': "'Space Grotesk'";
1093
+ readonly '--font-family-mono': "'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace";
1094
+ readonly '--ease-out': "cubic-bezier(0.22, 1, 0.36, 1)";
1095
+ readonly '--ease-in-out': "cubic-bezier(0.65, 0, 0.35, 1)";
1096
+ readonly '--ease-spring': "cubic-bezier(0.34, 1.56, 0.64, 1)";
1097
+ readonly '--duration-fast': "150ms";
1098
+ readonly '--duration-normal': "250ms";
1099
+ readonly '--duration-slow': "400ms";
953
1100
  readonly '--color-brand-primary': "#FF7900";
954
1101
  readonly '--color-brand-primary-light': "#FF9630";
955
1102
  readonly '--color-brand-primary-dark': "#D0620C";
@@ -990,7 +1137,72 @@ declare function getThemeCSSVars(mode: ThemeMode): {
990
1137
  readonly '--color-interactive-selected': "rgba(55, 65, 81, 0.08)";
991
1138
  readonly '--color-interactive-disabled': "rgba(55, 65, 81, 0.12)";
992
1139
  readonly '--color-divider': "#E8E9EB";
1140
+ readonly '--color-brand-primary-hover': "#F56C00";
1141
+ readonly '--color-brand-primary-active': "#E06D10";
1142
+ readonly '--color-brand-secondary-hover': "#39617A";
1143
+ readonly '--color-brand-secondary-active': "#32556D";
1144
+ readonly '--color-status-success-light': "#43C6B7";
1145
+ readonly '--color-status-success-dark': "#0E8074";
1146
+ readonly '--color-status-error-light': "#DA6868";
1147
+ readonly '--color-status-error-dark': "#922E2E";
1148
+ readonly '--color-status-warning-light': "#FFBF4C";
1149
+ readonly '--color-status-warning-dark': "#B27B16";
1150
+ readonly '--color-status-info-light': "#64B6F7";
1151
+ readonly '--color-status-info-dark': "#0B79D0";
1152
+ readonly '--color-on-status-success': "#FFFFFF";
1153
+ readonly '--color-on-status-error': "#FFFFFF";
1154
+ readonly '--color-on-status-warning': "#FFFFFF";
1155
+ readonly '--color-on-status-info': "#FFFFFF";
1156
+ readonly '--color-result-improve': "#4caf50";
1157
+ readonly '--color-result-improve-light': "rgba(76, 175, 80, 0.12)";
1158
+ readonly '--color-result-improve-dark': "#248a24";
1159
+ readonly '--color-result-degrade': "#ef5350";
1160
+ readonly '--color-result-degrade-light': "rgba(239, 83, 80, 0.12)";
1161
+ readonly '--color-result-degrade-dark': "#b30000";
1162
+ readonly '--color-result-inconclusive': "#9E9A97";
1163
+ readonly '--color-result-inconclusive-light': "rgba(158, 154, 151, 0.12)";
1164
+ readonly '--color-result-neutral': "#6B7280";
1165
+ readonly '--color-on-result-improve': "#FFFFFF";
1166
+ readonly '--color-on-result-degrade': "#FFFFFF";
1167
+ readonly '--color-on-result-inconclusive': "#FFFFFF";
1168
+ readonly '--color-data-1': "#1965B0";
1169
+ readonly '--color-data-2': "#4EB265";
1170
+ readonly '--color-data-3': "#F7F056";
1171
+ readonly '--color-data-4': "#DC050C";
1172
+ readonly '--color-data-5': "#882E72";
1173
+ readonly '--color-data-6': "#F4A736";
1174
+ readonly '--color-data-7': "#7BAFDE";
1175
+ readonly '--color-data-8': "#90C987";
1176
+ readonly '--color-data-9': "#CAACCB";
1177
+ readonly '--color-data-10': "#EE8026";
1178
+ readonly '--color-text-link-hover': "#3832A0";
1179
+ readonly '--color-surface-overlay': "#FFFFFF";
1180
+ readonly '--color-surface-input': "#FAFAFA";
1181
+ readonly '--color-border-input': "#D1D5DB";
1182
+ readonly '--color-border-input-hover': "#9CA3AF";
1183
+ readonly '--color-border-input-focus': "#5048E5";
1184
+ readonly '--color-border-input-error': "#D14343";
1185
+ readonly '--color-interactive-disabled-text': "rgba(55, 65, 81, 0.26)";
1186
+ readonly '--color-avatar-background': "#6B7280";
1187
+ readonly '--color-avatar-text': "#FFFFFF";
993
1188
  } | {
1189
+ readonly '--color-brand-primary-rgb': "255, 121, 0";
1190
+ readonly '--color-brand-secondary-rgb': "64, 109, 135";
1191
+ readonly '--color-status-success-rgb': "20, 184, 166";
1192
+ readonly '--color-status-error-rgb': "209, 67, 67";
1193
+ readonly '--color-status-warning-rgb': "255, 176, 32";
1194
+ readonly '--color-status-info-rgb': "33, 150, 243";
1195
+ readonly '--color-background-base-rgb': "16, 16, 16";
1196
+ readonly '--font-family-sans': "'Inter'";
1197
+ readonly '--font-family-body': "'Nunito Sans'";
1198
+ readonly '--font-family-heading': "'Space Grotesk'";
1199
+ readonly '--font-family-mono': "'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace";
1200
+ readonly '--ease-out': "cubic-bezier(0.22, 1, 0.36, 1)";
1201
+ readonly '--ease-in-out': "cubic-bezier(0.65, 0, 0.35, 1)";
1202
+ readonly '--ease-spring': "cubic-bezier(0.34, 1.56, 0.64, 1)";
1203
+ readonly '--duration-fast': "150ms";
1204
+ readonly '--duration-normal': "250ms";
1205
+ readonly '--duration-slow': "400ms";
994
1206
  readonly '--color-brand-primary': "#FF7900";
995
1207
  readonly '--color-brand-primary-light': "#FF9630";
996
1208
  readonly '--color-brand-primary-dark': "#D0620C";
@@ -1031,6 +1243,54 @@ declare function getThemeCSSVars(mode: ThemeMode): {
1031
1243
  readonly '--color-interactive-selected': "rgba(255, 255, 255, 0.08)";
1032
1244
  readonly '--color-interactive-disabled': "rgba(255, 255, 255, 0.12)";
1033
1245
  readonly '--color-divider': "#1F1F1F";
1246
+ readonly '--color-brand-primary-hover': "#FF8500";
1247
+ readonly '--color-brand-primary-active': "#FF9630";
1248
+ readonly '--color-brand-secondary-hover': "#557488";
1249
+ readonly '--color-brand-secondary-active': "#678498";
1250
+ readonly '--color-status-success-light': "#43C6B7";
1251
+ readonly '--color-status-success-dark': "#0E8074";
1252
+ readonly '--color-status-error-light': "#DA6868";
1253
+ readonly '--color-status-error-dark': "#922E2E";
1254
+ readonly '--color-status-warning-light': "#FFBF4C";
1255
+ readonly '--color-status-warning-dark': "#B27B16";
1256
+ readonly '--color-status-info-light': "#64B6F7";
1257
+ readonly '--color-status-info-dark': "#0B79D0";
1258
+ readonly '--color-on-status-success': "#FFFFFF";
1259
+ readonly '--color-on-status-error': "#FFFFFF";
1260
+ readonly '--color-on-status-warning': "#FFFFFF";
1261
+ readonly '--color-on-status-info': "#FFFFFF";
1262
+ readonly '--color-result-improve': "#4caf50";
1263
+ readonly '--color-result-improve-light': "rgba(76, 175, 80, 0.16)";
1264
+ readonly '--color-result-improve-dark': "#248a24";
1265
+ readonly '--color-result-degrade': "#ef5350";
1266
+ readonly '--color-result-degrade-light': "rgba(239, 83, 80, 0.16)";
1267
+ readonly '--color-result-degrade-dark': "#b30000";
1268
+ readonly '--color-result-inconclusive': "#9E9A97";
1269
+ readonly '--color-result-inconclusive-light': "rgba(158, 154, 151, 0.16)";
1270
+ readonly '--color-result-neutral': "#9CA3AF";
1271
+ readonly '--color-on-result-improve': "#FFFFFF";
1272
+ readonly '--color-on-result-degrade': "#FFFFFF";
1273
+ readonly '--color-on-result-inconclusive': "#FFFFFF";
1274
+ readonly '--color-data-1': "#1965B0";
1275
+ readonly '--color-data-2': "#4EB265";
1276
+ readonly '--color-data-3': "#F7F056";
1277
+ readonly '--color-data-4': "#DC050C";
1278
+ readonly '--color-data-5': "#882E72";
1279
+ readonly '--color-data-6': "#F4A736";
1280
+ readonly '--color-data-7': "#7BAFDE";
1281
+ readonly '--color-data-8': "#90C987";
1282
+ readonly '--color-data-9': "#CAACCB";
1283
+ readonly '--color-data-10': "#EE8026";
1284
+ readonly '--color-text-link-hover': "#60A5FA";
1285
+ readonly '--color-surface-overlay': "#191919";
1286
+ readonly '--color-surface-input': "#191919";
1287
+ readonly '--color-border-input': "#4B5563";
1288
+ readonly '--color-border-input-hover': "#6B7280";
1289
+ readonly '--color-border-input-focus': "#828DF8";
1290
+ readonly '--color-border-input-error': "#EF4444";
1291
+ readonly '--color-interactive-disabled-text': "rgba(255, 255, 255, 0.26)";
1292
+ readonly '--color-avatar-background': "#4B5563";
1293
+ readonly '--color-avatar-text': "#FFFFFF";
1034
1294
  };
1035
1295
  declare const gluestackConfig: {
1036
1296
  readonly tokens: {
@@ -1299,6 +1559,62 @@ declare const neumorphicShadows: {
1299
1559
  };
1300
1560
  };
1301
1561
 
1562
+ /**
1563
+ * TypeScript mirror of css-property-manifest.schema.json.
1564
+ *
1565
+ * A manifest records, per component, which visual CSS properties are tracked,
1566
+ * which design token each one resolves from, the expected computed style
1567
+ * value, and any per-variant overrides. Manifests are the fixtures consumed
1568
+ * by Playwright computed-style assertions (see packages/ui/tests/visual).
1569
+ */
1570
+ /** Variant axis name/value pairs, e.g. { variant: 'solid', color: 'primary', size: 'md' }. */
1571
+ type VariantAxes = Record<string, string>;
1572
+ /** A resolvedValue/token override that applies when the given variant axes match. */
1573
+ interface VariantOverride {
1574
+ /** Partial variant axis values that trigger this override, merged onto baseVariant. */
1575
+ variant: VariantAxes;
1576
+ /** Semantic token key for this override, or null for a literal (non-tokenized) value. */
1577
+ token?: string | null;
1578
+ /** CSS custom property backing the token for this override, if any. */
1579
+ cssVariable?: string | null;
1580
+ /** Expected getComputedStyle value when the variant axes match. */
1581
+ resolvedValue: string;
1582
+ }
1583
+ /** A single tracked CSS property for a component. */
1584
+ interface CssPropertyEntry {
1585
+ /** CSS property name in camelCase, as returned by window.getComputedStyle (e.g. "backgroundColor"). */
1586
+ property: string;
1587
+ /** Semantic token key this property is sourced from, or null if not backed by a token. */
1588
+ token: string | null;
1589
+ /** CSS custom property backing the token (e.g. "--color-brand-primary"), if any. */
1590
+ cssVariable?: string | null;
1591
+ /** Expected computed style value for baseVariant. */
1592
+ resolvedValue: string;
1593
+ /** Overrides of token/resolvedValue for specific variant axis combinations. */
1594
+ variantOverrides?: VariantOverride[];
1595
+ }
1596
+ /** The full per-component CSS property manifest. */
1597
+ interface CssPropertyManifest {
1598
+ /** Component identifier matching its src/components/ui/{component} directory and Storybook id. */
1599
+ component: string;
1600
+ /** Optional human-readable note about what this manifest covers. */
1601
+ description?: string;
1602
+ /** Variant axis values each property's top-level resolvedValue was captured against. */
1603
+ baseVariant?: VariantAxes;
1604
+ /** Tracked CSS properties for this component. */
1605
+ properties: CssPropertyEntry[];
1606
+ }
1607
+
1608
+ /** Result of validating a candidate manifest: valid iff errors is empty. */
1609
+ interface ManifestValidationResult {
1610
+ valid: boolean;
1611
+ errors: string[];
1612
+ }
1613
+ /** Structurally validates a candidate value against the CssPropertyManifest shape. */
1614
+ declare function validateCssPropertyManifest(candidate: unknown): ManifestValidationResult;
1615
+ /** Type guard variant of validateCssPropertyManifest for use in narrowing contexts. */
1616
+ declare function isCssPropertyManifest(candidate: unknown): candidate is CssPropertyManifest;
1617
+
1302
1618
  interface ThemePresetColors {
1303
1619
  'brand-primary'?: string;
1304
1620
  'brand-primary-light'?: string;
@@ -1384,4 +1700,4 @@ declare const defaultPreset: ThemePreset;
1384
1700
  */
1385
1701
  declare const audiobookPreset: ThemePreset;
1386
1702
 
1387
- export { type ComponentType, type ElevationConfig, type ElevationLevel, type GlowIntensity, type ShadowIntensity, type ShadowSurface, type ThemeConfig, type ThemeMode, type ThemePreset, type ThemePresetColors, type ThemePresetFonts, type ThemePresetRadii, type 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 };
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 };
@@ -729,6 +729,28 @@ function getSemanticColors(mode) {
729
729
  }
730
730
 
731
731
  // src/theme/config.ts
732
+ var themeIndependentCSSVars = {
733
+ // RGB decomposed values for glow shadows
734
+ "--color-brand-primary-rgb": "255, 121, 0",
735
+ "--color-brand-secondary-rgb": "64, 109, 135",
736
+ "--color-status-success-rgb": "20, 184, 166",
737
+ "--color-status-error-rgb": "209, 67, 67",
738
+ "--color-status-warning-rgb": "255, 176, 32",
739
+ "--color-status-info-rgb": "33, 150, 243",
740
+ "--color-background-base-rgb": "16, 16, 16",
741
+ // Font families
742
+ "--font-family-sans": "'Inter'",
743
+ "--font-family-body": "'Nunito Sans'",
744
+ "--font-family-heading": "'Space Grotesk'",
745
+ "--font-family-mono": "'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace",
746
+ // Animation tokens
747
+ "--ease-out": "cubic-bezier(0.22, 1, 0.36, 1)",
748
+ "--ease-in-out": "cubic-bezier(0.65, 0, 0.35, 1)",
749
+ "--ease-spring": "cubic-bezier(0.34, 1.56, 0.64, 1)",
750
+ "--duration-fast": "150ms",
751
+ "--duration-normal": "250ms",
752
+ "--duration-slow": "400ms"
753
+ };
732
754
  var lightThemeCSSVars = {
733
755
  "--color-brand-primary": semanticColorsLight["brand-primary"],
734
756
  "--color-brand-primary-light": semanticColorsLight["brand-primary-light"],
@@ -769,7 +791,56 @@ var lightThemeCSSVars = {
769
791
  "--color-interactive-active": semanticColorsLight["interactive-active"],
770
792
  "--color-interactive-selected": semanticColorsLight["interactive-selected"],
771
793
  "--color-interactive-disabled": semanticColorsLight["interactive-disabled"],
772
- "--color-divider": semanticColorsLight["divider"]
794
+ "--color-divider": semanticColorsLight["divider"],
795
+ "--color-brand-primary-hover": semanticColorsLight["brand-primary-hover"],
796
+ "--color-brand-primary-active": semanticColorsLight["brand-primary-active"],
797
+ "--color-brand-secondary-hover": semanticColorsLight["brand-secondary-hover"],
798
+ "--color-brand-secondary-active": semanticColorsLight["brand-secondary-active"],
799
+ "--color-status-success-light": semanticColorsLight["status-success-light"],
800
+ "--color-status-success-dark": semanticColorsLight["status-success-dark"],
801
+ "--color-status-error-light": semanticColorsLight["status-error-light"],
802
+ "--color-status-error-dark": semanticColorsLight["status-error-dark"],
803
+ "--color-status-warning-light": semanticColorsLight["status-warning-light"],
804
+ "--color-status-warning-dark": semanticColorsLight["status-warning-dark"],
805
+ "--color-status-info-light": semanticColorsLight["status-info-light"],
806
+ "--color-status-info-dark": semanticColorsLight["status-info-dark"],
807
+ "--color-on-status-success": semanticColorsLight["on-status-success"],
808
+ "--color-on-status-error": semanticColorsLight["on-status-error"],
809
+ "--color-on-status-warning": semanticColorsLight["on-status-warning"],
810
+ "--color-on-status-info": semanticColorsLight["on-status-info"],
811
+ "--color-result-improve": semanticColorsLight["result-improve"],
812
+ "--color-result-improve-light": semanticColorsLight["result-improve-light"],
813
+ "--color-result-improve-dark": semanticColorsLight["result-improve-dark"],
814
+ "--color-result-degrade": semanticColorsLight["result-degrade"],
815
+ "--color-result-degrade-light": semanticColorsLight["result-degrade-light"],
816
+ "--color-result-degrade-dark": semanticColorsLight["result-degrade-dark"],
817
+ "--color-result-inconclusive": semanticColorsLight["result-inconclusive"],
818
+ "--color-result-inconclusive-light": semanticColorsLight["result-inconclusive-light"],
819
+ "--color-result-neutral": semanticColorsLight["result-neutral"],
820
+ "--color-on-result-improve": semanticColorsLight["on-result-improve"],
821
+ "--color-on-result-degrade": semanticColorsLight["on-result-degrade"],
822
+ "--color-on-result-inconclusive": semanticColorsLight["on-result-inconclusive"],
823
+ "--color-data-1": semanticColorsLight["data-1"],
824
+ "--color-data-2": semanticColorsLight["data-2"],
825
+ "--color-data-3": semanticColorsLight["data-3"],
826
+ "--color-data-4": semanticColorsLight["data-4"],
827
+ "--color-data-5": semanticColorsLight["data-5"],
828
+ "--color-data-6": semanticColorsLight["data-6"],
829
+ "--color-data-7": semanticColorsLight["data-7"],
830
+ "--color-data-8": semanticColorsLight["data-8"],
831
+ "--color-data-9": semanticColorsLight["data-9"],
832
+ "--color-data-10": semanticColorsLight["data-10"],
833
+ "--color-text-link-hover": semanticColorsLight["text-link-hover"],
834
+ "--color-surface-overlay": semanticColorsLight["surface-overlay"],
835
+ "--color-surface-input": semanticColorsLight["surface-input"],
836
+ "--color-border-input": semanticColorsLight["border-input"],
837
+ "--color-border-input-hover": semanticColorsLight["border-input-hover"],
838
+ "--color-border-input-focus": semanticColorsLight["border-input-focus"],
839
+ "--color-border-input-error": semanticColorsLight["border-input-error"],
840
+ "--color-interactive-disabled-text": semanticColorsLight["interactive-disabled-text"],
841
+ "--color-avatar-background": semanticColorsLight["avatar-background"],
842
+ "--color-avatar-text": semanticColorsLight["avatar-text"],
843
+ ...themeIndependentCSSVars
773
844
  };
774
845
  var darkThemeCSSVars = {
775
846
  "--color-brand-primary": semanticColorsDark["brand-primary"],
@@ -811,7 +882,56 @@ var darkThemeCSSVars = {
811
882
  "--color-interactive-active": semanticColorsDark["interactive-active"],
812
883
  "--color-interactive-selected": semanticColorsDark["interactive-selected"],
813
884
  "--color-interactive-disabled": semanticColorsDark["interactive-disabled"],
814
- "--color-divider": semanticColorsDark["divider"]
885
+ "--color-divider": semanticColorsDark["divider"],
886
+ "--color-brand-primary-hover": semanticColorsDark["brand-primary-hover"],
887
+ "--color-brand-primary-active": semanticColorsDark["brand-primary-active"],
888
+ "--color-brand-secondary-hover": semanticColorsDark["brand-secondary-hover"],
889
+ "--color-brand-secondary-active": semanticColorsDark["brand-secondary-active"],
890
+ "--color-status-success-light": semanticColorsDark["status-success-light"],
891
+ "--color-status-success-dark": semanticColorsDark["status-success-dark"],
892
+ "--color-status-error-light": semanticColorsDark["status-error-light"],
893
+ "--color-status-error-dark": semanticColorsDark["status-error-dark"],
894
+ "--color-status-warning-light": semanticColorsDark["status-warning-light"],
895
+ "--color-status-warning-dark": semanticColorsDark["status-warning-dark"],
896
+ "--color-status-info-light": semanticColorsDark["status-info-light"],
897
+ "--color-status-info-dark": semanticColorsDark["status-info-dark"],
898
+ "--color-on-status-success": semanticColorsDark["on-status-success"],
899
+ "--color-on-status-error": semanticColorsDark["on-status-error"],
900
+ "--color-on-status-warning": semanticColorsDark["on-status-warning"],
901
+ "--color-on-status-info": semanticColorsDark["on-status-info"],
902
+ "--color-result-improve": semanticColorsDark["result-improve"],
903
+ "--color-result-improve-light": semanticColorsDark["result-improve-light"],
904
+ "--color-result-improve-dark": semanticColorsDark["result-improve-dark"],
905
+ "--color-result-degrade": semanticColorsDark["result-degrade"],
906
+ "--color-result-degrade-light": semanticColorsDark["result-degrade-light"],
907
+ "--color-result-degrade-dark": semanticColorsDark["result-degrade-dark"],
908
+ "--color-result-inconclusive": semanticColorsDark["result-inconclusive"],
909
+ "--color-result-inconclusive-light": semanticColorsDark["result-inconclusive-light"],
910
+ "--color-result-neutral": semanticColorsDark["result-neutral"],
911
+ "--color-on-result-improve": semanticColorsDark["on-result-improve"],
912
+ "--color-on-result-degrade": semanticColorsDark["on-result-degrade"],
913
+ "--color-on-result-inconclusive": semanticColorsDark["on-result-inconclusive"],
914
+ "--color-data-1": semanticColorsDark["data-1"],
915
+ "--color-data-2": semanticColorsDark["data-2"],
916
+ "--color-data-3": semanticColorsDark["data-3"],
917
+ "--color-data-4": semanticColorsDark["data-4"],
918
+ "--color-data-5": semanticColorsDark["data-5"],
919
+ "--color-data-6": semanticColorsDark["data-6"],
920
+ "--color-data-7": semanticColorsDark["data-7"],
921
+ "--color-data-8": semanticColorsDark["data-8"],
922
+ "--color-data-9": semanticColorsDark["data-9"],
923
+ "--color-data-10": semanticColorsDark["data-10"],
924
+ "--color-text-link-hover": semanticColorsDark["text-link-hover"],
925
+ "--color-surface-overlay": semanticColorsDark["surface-overlay"],
926
+ "--color-surface-input": semanticColorsDark["surface-input"],
927
+ "--color-border-input": semanticColorsDark["border-input"],
928
+ "--color-border-input-hover": semanticColorsDark["border-input-hover"],
929
+ "--color-border-input-focus": semanticColorsDark["border-input-focus"],
930
+ "--color-border-input-error": semanticColorsDark["border-input-error"],
931
+ "--color-interactive-disabled-text": semanticColorsDark["interactive-disabled-text"],
932
+ "--color-avatar-background": semanticColorsDark["avatar-background"],
933
+ "--color-avatar-text": semanticColorsDark["avatar-text"],
934
+ ...themeIndependentCSSVars
815
935
  };
816
936
  function getThemeCSSVars(mode) {
817
937
  return mode === "dark" ? darkThemeCSSVars : lightThemeCSSVars;
@@ -1500,6 +1620,67 @@ function getGlowShadow(color, intensity = "medium") {
1500
1620
  });
1501
1621
  }
1502
1622
 
1623
+ // src/theme/manifest/css-property-manifest.validate.ts
1624
+ var isPlainObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1625
+ var isVariantAxes = (value) => isPlainObject(value) && Object.keys(value).length > 0 && Object.values(value).every((axisValue) => typeof axisValue === "string");
1626
+ function collectVariantOverrideErrors(override, path) {
1627
+ if (!isPlainObject(override)) return [`${path} must be an object`];
1628
+ const errors = [];
1629
+ if (!isVariantAxes(override.variant))
1630
+ errors.push(`${path}.variant must be a non-empty string-keyed object`);
1631
+ if (override.token !== void 0 && override.token !== null && typeof override.token !== "string") {
1632
+ errors.push(`${path}.token must be a string or null`);
1633
+ }
1634
+ if (typeof override.resolvedValue !== "string" || override.resolvedValue.length === 0) {
1635
+ errors.push(`${path}.resolvedValue must be a non-empty string`);
1636
+ }
1637
+ return errors;
1638
+ }
1639
+ function collectPropertyErrors(entry, path) {
1640
+ if (!isPlainObject(entry)) return [`${path} must be an object`];
1641
+ const errors = [];
1642
+ if (typeof entry.property !== "string" || entry.property.length === 0) {
1643
+ errors.push(`${path}.property must be a non-empty string`);
1644
+ }
1645
+ if (entry.token !== null && typeof entry.token !== "string") {
1646
+ errors.push(`${path}.token must be a string or null`);
1647
+ }
1648
+ if (typeof entry.resolvedValue !== "string" || entry.resolvedValue.length === 0) {
1649
+ errors.push(`${path}.resolvedValue must be a non-empty string`);
1650
+ }
1651
+ if (entry.variantOverrides !== void 0) {
1652
+ if (!Array.isArray(entry.variantOverrides)) {
1653
+ errors.push(`${path}.variantOverrides must be an array`);
1654
+ } else {
1655
+ entry.variantOverrides.forEach(
1656
+ (override, i) => errors.push(...collectVariantOverrideErrors(override, `${path}.variantOverrides[${i}]`))
1657
+ );
1658
+ }
1659
+ }
1660
+ return errors;
1661
+ }
1662
+ function validateCssPropertyManifest(candidate) {
1663
+ if (!isPlainObject(candidate)) return { valid: false, errors: ["manifest must be an object"] };
1664
+ const errors = [];
1665
+ if (typeof candidate.component !== "string" || candidate.component.length === 0) {
1666
+ errors.push("component must be a non-empty string");
1667
+ }
1668
+ if (candidate.baseVariant !== void 0 && !isVariantAxes(candidate.baseVariant)) {
1669
+ errors.push("baseVariant must be a non-empty string-keyed object");
1670
+ }
1671
+ if (!Array.isArray(candidate.properties) || candidate.properties.length === 0) {
1672
+ errors.push("properties must be a non-empty array");
1673
+ } else {
1674
+ candidate.properties.forEach(
1675
+ (entry, i) => errors.push(...collectPropertyErrors(entry, `properties[${i}]`))
1676
+ );
1677
+ }
1678
+ return { valid: errors.length === 0, errors };
1679
+ }
1680
+ function isCssPropertyManifest(candidate) {
1681
+ return validateCssPropertyManifest(candidate).valid;
1682
+ }
1683
+
1503
1684
  // src/theme/presets/apply.ts
1504
1685
  function colorKeyToVar(key) {
1505
1686
  return `--color-${key}`;
@@ -1690,6 +1871,7 @@ exports.getValidatedElevation = getValidatedElevation;
1690
1871
  exports.gluestackConfig = gluestackConfig;
1691
1872
  exports.hexToRgb = hexToRgb;
1692
1873
  exports.hsvToRgb = hsvToRgb;
1874
+ exports.isCssPropertyManifest = isCssPropertyManifest;
1693
1875
  exports.isDark = isDark;
1694
1876
  exports.lightThemeCSSVars = lightThemeCSSVars;
1695
1877
  exports.lighten = lighten;
@@ -1707,5 +1889,6 @@ exports.semanticColorsDark = semanticColorsDark;
1707
1889
  exports.semanticColorsLight = semanticColorsLight;
1708
1890
  exports.semanticTypography = semanticTypography;
1709
1891
  exports.shadowColors = shadowColors;
1892
+ exports.validateCssPropertyManifest = validateCssPropertyManifest;
1710
1893
  //# sourceMappingURL=index.js.map
1711
1894
  //# sourceMappingURL=index.js.map