react-native-terra-ui 0.1.0 → 0.2.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 (304) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/lib/module/components/avatar/Avatar.js +118 -35
  3. package/lib/module/components/avatar/Avatar.js.map +1 -1
  4. package/lib/module/components/avatar/index.js.map +1 -1
  5. package/lib/module/components/box/Box.js +15 -2
  6. package/lib/module/components/box/Box.js.map +1 -1
  7. package/lib/module/components/box/index.js.map +1 -1
  8. package/lib/module/components/box/utils.js +5 -2
  9. package/lib/module/components/box/utils.js.map +1 -1
  10. package/lib/module/components/button/Button.js +7 -14
  11. package/lib/module/components/button/Button.js.map +1 -1
  12. package/lib/module/components/button/index.js.map +1 -1
  13. package/lib/module/components/chip/Chip.js +372 -0
  14. package/lib/module/components/chip/Chip.js.map +1 -0
  15. package/lib/module/components/chip/index.js +4 -0
  16. package/lib/module/components/chip/index.js.map +1 -0
  17. package/lib/module/components/chip/types.js +2 -0
  18. package/lib/module/components/chip/types.js.map +1 -0
  19. package/lib/module/components/chip/utils.js +36 -0
  20. package/lib/module/components/chip/utils.js.map +1 -0
  21. package/lib/module/components/empty-state/EmptyState.js +200 -0
  22. package/lib/module/components/empty-state/EmptyState.js.map +1 -0
  23. package/lib/module/components/empty-state/index.js +4 -0
  24. package/lib/module/components/empty-state/index.js.map +1 -0
  25. package/lib/module/components/empty-state/types.js +2 -0
  26. package/lib/module/components/empty-state/types.js.map +1 -0
  27. package/lib/module/components/header/Header.js.map +1 -1
  28. package/lib/module/components/header/header-buttons.js +31 -36
  29. package/lib/module/components/header/header-buttons.js.map +1 -1
  30. package/lib/module/components/header/index.js +1 -1
  31. package/lib/module/components/header/index.js.map +1 -1
  32. package/lib/module/components/header/parts/HeaderGradientOverlay.js +38 -0
  33. package/lib/module/components/header/parts/HeaderGradientOverlay.js.map +1 -0
  34. package/lib/module/components/header/variants/LargeTitleHeader/index.js +71 -101
  35. package/lib/module/components/header/variants/LargeTitleHeader/index.js.map +1 -1
  36. package/lib/module/components/header/variants/TitleHeader/index.js +34 -65
  37. package/lib/module/components/header/variants/TitleHeader/index.js.map +1 -1
  38. package/lib/module/components/icon/Icon.js +21 -9
  39. package/lib/module/components/icon/Icon.js.map +1 -1
  40. package/lib/module/components/icon/index.js.map +1 -1
  41. package/lib/module/components/image/Image.js +54 -0
  42. package/lib/module/components/image/Image.js.map +1 -0
  43. package/lib/module/components/image/index.js +4 -0
  44. package/lib/module/components/image/index.js.map +1 -0
  45. package/lib/module/components/image/types.js +4 -0
  46. package/lib/module/components/image/types.js.map +1 -0
  47. package/lib/module/components/index.js +4 -0
  48. package/lib/module/components/index.js.map +1 -1
  49. package/lib/module/components/page-indicator/PageIndicator.js.map +1 -1
  50. package/lib/module/components/page-indicator/PageIndicatorRoot.js.map +1 -1
  51. package/lib/module/components/page-indicator/hooks/use-page-indicator-colors.js +1 -1
  52. package/lib/module/components/page-indicator/hooks/use-page-indicator-colors.js.map +1 -1
  53. package/lib/module/components/page-indicator/hooks/use-page-indicator-core.js.map +1 -1
  54. package/lib/module/components/page-indicator/hooks/use-page-indicator-progress.js.map +1 -1
  55. package/lib/module/components/page-indicator/index.js.map +1 -1
  56. package/lib/module/components/page-indicator/variants/DotIndicator/InactiveDot.js.map +1 -1
  57. package/lib/module/components/page-indicator/variants/DotIndicator/LoadingOrbit.js.map +1 -1
  58. package/lib/module/components/page-indicator/variants/DotIndicator/TravelingPill.js.map +1 -1
  59. package/lib/module/components/page-indicator/variants/DotIndicator/index.js.map +1 -1
  60. package/lib/module/components/page-indicator/variants/PillIndicator/PillIndicatorDot.js.map +1 -1
  61. package/lib/module/components/page-indicator/variants/PillIndicator/index.js.map +1 -1
  62. package/lib/module/components/portal/Portal.js +42 -0
  63. package/lib/module/components/portal/Portal.js.map +1 -0
  64. package/lib/module/components/portal/PortalContext.js +1 -16
  65. package/lib/module/components/portal/PortalContext.js.map +1 -1
  66. package/lib/module/components/portal/PortalHost.js +16 -14
  67. package/lib/module/components/portal/PortalHost.js.map +1 -1
  68. package/lib/module/components/portal/PortalProvider.js +51 -19
  69. package/lib/module/components/portal/PortalProvider.js.map +1 -1
  70. package/lib/module/components/portal/index.js +1 -1
  71. package/lib/module/components/portal/index.js.map +1 -1
  72. package/lib/module/components/screen/Screen.js +26 -29
  73. package/lib/module/components/screen/Screen.js.map +1 -1
  74. package/lib/module/components/screen/ScreenContext.js +7 -5
  75. package/lib/module/components/screen/ScreenContext.js.map +1 -1
  76. package/lib/module/components/screen/ScreenFlashList.js +144 -0
  77. package/lib/module/components/screen/ScreenFlashList.js.map +1 -0
  78. package/lib/module/components/screen/ScreenFlatList.js +88 -27
  79. package/lib/module/components/screen/ScreenFlatList.js.map +1 -1
  80. package/lib/module/components/screen/ScreenScrollView.js +101 -34
  81. package/lib/module/components/screen/ScreenScrollView.js.map +1 -1
  82. package/lib/module/components/screen/index.js +1 -0
  83. package/lib/module/components/screen/index.js.map +1 -1
  84. package/lib/module/components/screen/parts/BottomSafeArea.js +62 -0
  85. package/lib/module/components/screen/parts/BottomSafeArea.js.map +1 -0
  86. package/lib/module/components/screen/parts/ScreenPlaceholder.js +50 -0
  87. package/lib/module/components/screen/parts/ScreenPlaceholder.js.map +1 -0
  88. package/lib/module/components/screen/types.js +4 -0
  89. package/lib/module/components/screen/types.js.map +1 -0
  90. package/lib/module/components/screen/utils.js +12 -9
  91. package/lib/module/components/screen/utils.js.map +1 -1
  92. package/lib/module/components/slot/Slot.js.map +1 -1
  93. package/lib/module/components/slot/index.js.map +1 -1
  94. package/lib/module/components/spinner/Spinner.js +1 -1
  95. package/lib/module/components/spinner/Spinner.js.map +1 -1
  96. package/lib/module/components/spinner/index.js.map +1 -1
  97. package/lib/module/components/surface/Surface.js +16 -9
  98. package/lib/module/components/surface/Surface.js.map +1 -1
  99. package/lib/module/components/surface/index.js.map +1 -1
  100. package/lib/module/components/text/Text.js +25 -7
  101. package/lib/module/components/text/Text.js.map +1 -1
  102. package/lib/module/components/text/index.js.map +1 -1
  103. package/lib/module/components/toast/Toast.js +8 -8
  104. package/lib/module/components/toast/Toast.js.map +1 -1
  105. package/lib/module/components/toast/ToastProvider.js.map +1 -1
  106. package/lib/module/components/toast/index.js.map +1 -1
  107. package/lib/module/components/toolbar/Toolbar.js +268 -0
  108. package/lib/module/components/toolbar/Toolbar.js.map +1 -0
  109. package/lib/module/components/toolbar/index.js +4 -0
  110. package/lib/module/components/toolbar/index.js.map +1 -0
  111. package/lib/module/context/ThemeProvider.js +5 -2
  112. package/lib/module/context/ThemeProvider.js.map +1 -1
  113. package/lib/module/context/index.js.map +1 -1
  114. package/lib/module/index.js.map +1 -1
  115. package/lib/module/{components/icon/utils.js → theme/defaults/icons.js} +1 -1
  116. package/lib/module/theme/defaults/icons.js.map +1 -0
  117. package/lib/module/theme/defaults/image.js +30 -0
  118. package/lib/module/theme/defaults/image.js.map +1 -0
  119. package/lib/module/theme/index.js +6 -6
  120. package/lib/module/theme/index.js.map +1 -1
  121. package/lib/module/theme/{configure.js → registry.js} +23 -30
  122. package/lib/module/theme/registry.js.map +1 -0
  123. package/lib/module/theme/runtime.js +1 -1
  124. package/lib/module/theme/runtime.js.map +1 -1
  125. package/lib/module/theme/theme.js +92 -11
  126. package/lib/module/theme/theme.js.map +1 -1
  127. package/lib/module/theme/tokens/dark.js +59 -68
  128. package/lib/module/theme/tokens/dark.js.map +1 -1
  129. package/lib/module/theme/tokens/light.js +49 -67
  130. package/lib/module/theme/tokens/light.js.map +1 -1
  131. package/lib/module/theme/tokens/primitives.js +241 -20
  132. package/lib/module/theme/tokens/primitives.js.map +1 -1
  133. package/lib/module/utils/accent-utils.js +4 -4
  134. package/lib/module/utils/accent-utils.js.map +1 -1
  135. package/lib/typescript/src/components/avatar/Avatar.d.ts.map +1 -1
  136. package/lib/typescript/src/components/avatar/types.d.ts +5 -5
  137. package/lib/typescript/src/components/avatar/types.d.ts.map +1 -1
  138. package/lib/typescript/src/components/box/Box.d.ts.map +1 -1
  139. package/lib/typescript/src/components/box/utils.d.ts +6 -1
  140. package/lib/typescript/src/components/box/utils.d.ts.map +1 -1
  141. package/lib/typescript/src/components/button/Button.d.ts +2 -2
  142. package/lib/typescript/src/components/button/Button.d.ts.map +1 -1
  143. package/lib/typescript/src/components/chip/Chip.d.ts +24 -0
  144. package/lib/typescript/src/components/chip/Chip.d.ts.map +1 -0
  145. package/lib/typescript/src/components/chip/index.d.ts +4 -0
  146. package/lib/typescript/src/components/chip/index.d.ts.map +1 -0
  147. package/lib/typescript/src/components/chip/types.d.ts +8 -0
  148. package/lib/typescript/src/components/chip/types.d.ts.map +1 -0
  149. package/lib/typescript/src/components/chip/utils.d.ts +8 -0
  150. package/lib/typescript/src/components/chip/utils.d.ts.map +1 -0
  151. package/lib/typescript/src/components/empty-state/EmptyState.d.ts +45 -0
  152. package/lib/typescript/src/components/empty-state/EmptyState.d.ts.map +1 -0
  153. package/lib/typescript/src/components/empty-state/index.d.ts +4 -0
  154. package/lib/typescript/src/components/empty-state/index.d.ts.map +1 -0
  155. package/lib/typescript/src/components/empty-state/types.d.ts +6 -0
  156. package/lib/typescript/src/components/empty-state/types.d.ts.map +1 -0
  157. package/lib/typescript/src/components/header/header-buttons.d.ts +27 -0
  158. package/lib/typescript/src/components/header/header-buttons.d.ts.map +1 -1
  159. package/lib/typescript/src/components/header/index.d.ts +1 -1
  160. package/lib/typescript/src/components/header/index.d.ts.map +1 -1
  161. package/lib/typescript/src/components/header/parts/HeaderGradientOverlay.d.ts +7 -0
  162. package/lib/typescript/src/components/header/parts/HeaderGradientOverlay.d.ts.map +1 -0
  163. package/lib/typescript/src/components/header/variants/LargeTitleHeader/index.d.ts +1 -1
  164. package/lib/typescript/src/components/header/variants/LargeTitleHeader/index.d.ts.map +1 -1
  165. package/lib/typescript/src/components/header/variants/TitleHeader/index.d.ts +19 -8
  166. package/lib/typescript/src/components/header/variants/TitleHeader/index.d.ts.map +1 -1
  167. package/lib/typescript/src/components/icon/Icon.d.ts +1 -1
  168. package/lib/typescript/src/components/icon/Icon.d.ts.map +1 -1
  169. package/lib/typescript/src/components/image/Image.d.ts +16 -0
  170. package/lib/typescript/src/components/image/Image.d.ts.map +1 -0
  171. package/lib/typescript/src/components/image/index.d.ts +3 -0
  172. package/lib/typescript/src/components/image/index.d.ts.map +1 -0
  173. package/lib/typescript/src/components/image/types.d.ts +7 -0
  174. package/lib/typescript/src/components/image/types.d.ts.map +1 -0
  175. package/lib/typescript/src/components/index.d.ts +4 -0
  176. package/lib/typescript/src/components/index.d.ts.map +1 -1
  177. package/lib/typescript/src/components/page-indicator/PageIndicator.d.ts +1 -1
  178. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-colors.d.ts +1 -1
  179. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/index.d.ts +1 -1
  180. package/lib/typescript/src/components/page-indicator/variants/PillIndicator/index.d.ts +1 -1
  181. package/lib/typescript/src/components/portal/Portal.d.ts +26 -0
  182. package/lib/typescript/src/components/portal/Portal.d.ts.map +1 -0
  183. package/lib/typescript/src/components/portal/PortalContext.d.ts +11 -14
  184. package/lib/typescript/src/components/portal/PortalContext.d.ts.map +1 -1
  185. package/lib/typescript/src/components/portal/PortalHost.d.ts +9 -4
  186. package/lib/typescript/src/components/portal/PortalHost.d.ts.map +1 -1
  187. package/lib/typescript/src/components/portal/PortalProvider.d.ts +3 -3
  188. package/lib/typescript/src/components/portal/PortalProvider.d.ts.map +1 -1
  189. package/lib/typescript/src/components/portal/index.d.ts +4 -2
  190. package/lib/typescript/src/components/portal/index.d.ts.map +1 -1
  191. package/lib/typescript/src/components/screen/Screen.d.ts +19 -14
  192. package/lib/typescript/src/components/screen/Screen.d.ts.map +1 -1
  193. package/lib/typescript/src/components/screen/ScreenContext.d.ts +12 -9
  194. package/lib/typescript/src/components/screen/ScreenContext.d.ts.map +1 -1
  195. package/lib/typescript/src/components/screen/ScreenFlashList.d.ts +43 -0
  196. package/lib/typescript/src/components/screen/ScreenFlashList.d.ts.map +1 -0
  197. package/lib/typescript/src/components/screen/ScreenFlatList.d.ts +17 -7
  198. package/lib/typescript/src/components/screen/ScreenFlatList.d.ts.map +1 -1
  199. package/lib/typescript/src/components/screen/ScreenScrollView.d.ts +51 -16
  200. package/lib/typescript/src/components/screen/ScreenScrollView.d.ts.map +1 -1
  201. package/lib/typescript/src/components/screen/index.d.ts +3 -0
  202. package/lib/typescript/src/components/screen/index.d.ts.map +1 -1
  203. package/lib/typescript/src/components/screen/parts/BottomSafeArea.d.ts +30 -0
  204. package/lib/typescript/src/components/screen/parts/BottomSafeArea.d.ts.map +1 -0
  205. package/lib/typescript/src/components/screen/parts/ScreenPlaceholder.d.ts +22 -0
  206. package/lib/typescript/src/components/screen/parts/ScreenPlaceholder.d.ts.map +1 -0
  207. package/lib/typescript/src/components/screen/types.d.ts +42 -0
  208. package/lib/typescript/src/components/screen/types.d.ts.map +1 -0
  209. package/lib/typescript/src/components/screen/utils.d.ts +9 -9
  210. package/lib/typescript/src/components/screen/utils.d.ts.map +1 -1
  211. package/lib/typescript/src/components/spinner/Spinner.d.ts +1 -1
  212. package/lib/typescript/src/components/surface/Surface.d.ts +8 -1
  213. package/lib/typescript/src/components/surface/Surface.d.ts.map +1 -1
  214. package/lib/typescript/src/components/text/Text.d.ts +1 -1
  215. package/lib/typescript/src/components/text/Text.d.ts.map +1 -1
  216. package/lib/typescript/src/components/toast/Toast.d.ts +1 -1
  217. package/lib/typescript/src/components/toolbar/Toolbar.d.ts +115 -0
  218. package/lib/typescript/src/components/toolbar/Toolbar.d.ts.map +1 -0
  219. package/lib/typescript/src/components/toolbar/index.d.ts +3 -0
  220. package/lib/typescript/src/components/toolbar/index.d.ts.map +1 -0
  221. package/lib/typescript/src/context/ThemeProvider.d.ts.map +1 -1
  222. package/lib/typescript/src/{components/icon/utils.d.ts → theme/defaults/icons.d.ts} +2 -2
  223. package/lib/typescript/src/theme/defaults/icons.d.ts.map +1 -0
  224. package/lib/typescript/src/theme/defaults/image.d.ts +4 -0
  225. package/lib/typescript/src/theme/defaults/image.d.ts.map +1 -0
  226. package/lib/typescript/src/theme/index.d.ts +7 -7
  227. package/lib/typescript/src/theme/index.d.ts.map +1 -1
  228. package/lib/typescript/src/theme/{configure.d.ts → registry.d.ts} +1 -1
  229. package/lib/typescript/src/theme/registry.d.ts.map +1 -0
  230. package/lib/typescript/src/theme/theme.d.ts +21 -1
  231. package/lib/typescript/src/theme/theme.d.ts.map +1 -1
  232. package/lib/typescript/src/theme/tokens/dark.d.ts +41 -64
  233. package/lib/typescript/src/theme/tokens/dark.d.ts.map +1 -1
  234. package/lib/typescript/src/theme/tokens/light.d.ts +44 -65
  235. package/lib/typescript/src/theme/tokens/light.d.ts.map +1 -1
  236. package/lib/typescript/src/theme/tokens/primitives.d.ts +228 -17
  237. package/lib/typescript/src/theme/tokens/primitives.d.ts.map +1 -1
  238. package/lib/typescript/src/theme/types.d.ts +66 -36
  239. package/lib/typescript/src/theme/types.d.ts.map +1 -1
  240. package/lib/typescript/src/utils/accent-utils.d.ts +1 -1
  241. package/lib/typescript/src/utils/resolve-theme-color.d.ts +1 -1
  242. package/lib/typescript/src/utils/typography.d.ts +1 -1
  243. package/package.json +28 -12
  244. package/skills/terra-ui/SKILL.md +193 -0
  245. package/skills/terra-ui/references/recipes.md +198 -0
  246. package/skills/terra-ui/references/troubleshooting.md +112 -0
  247. package/src/components/avatar/Avatar.tsx +128 -38
  248. package/src/components/avatar/types.ts +5 -5
  249. package/src/components/box/Box.tsx +13 -1
  250. package/src/components/box/utils.ts +10 -0
  251. package/src/components/button/Button.tsx +7 -15
  252. package/src/components/chip/Chip.tsx +444 -0
  253. package/src/components/chip/index.ts +3 -0
  254. package/src/components/chip/types.ts +15 -0
  255. package/src/components/chip/utils.ts +34 -0
  256. package/src/components/empty-state/EmptyState.tsx +209 -0
  257. package/src/components/empty-state/index.ts +3 -0
  258. package/src/components/empty-state/types.ts +5 -0
  259. package/src/components/header/header-buttons.tsx +33 -45
  260. package/src/components/header/index.ts +2 -0
  261. package/src/components/header/parts/HeaderGradientOverlay.tsx +29 -0
  262. package/src/components/header/variants/LargeTitleHeader/index.tsx +68 -102
  263. package/src/components/header/variants/TitleHeader/index.tsx +47 -56
  264. package/src/components/icon/Icon.tsx +20 -15
  265. package/src/components/image/Image.tsx +48 -0
  266. package/src/components/image/index.ts +2 -0
  267. package/src/components/image/types.ts +7 -0
  268. package/src/components/index.ts +4 -0
  269. package/src/components/portal/Portal.tsx +55 -0
  270. package/src/components/portal/PortalContext.tsx +14 -22
  271. package/src/components/portal/PortalHost.tsx +17 -10
  272. package/src/components/portal/PortalProvider.tsx +58 -21
  273. package/src/components/portal/index.ts +4 -2
  274. package/src/components/screen/Screen.tsx +45 -59
  275. package/src/components/screen/ScreenContext.tsx +19 -12
  276. package/src/components/screen/ScreenFlashList.tsx +196 -0
  277. package/src/components/screen/ScreenFlatList.tsx +100 -39
  278. package/src/components/screen/ScreenScrollView.tsx +114 -53
  279. package/src/components/screen/index.ts +3 -0
  280. package/src/components/screen/parts/BottomSafeArea.tsx +60 -0
  281. package/src/components/screen/parts/ScreenPlaceholder.tsx +55 -0
  282. package/src/components/screen/types.ts +43 -0
  283. package/src/components/screen/utils.ts +29 -15
  284. package/src/components/surface/Surface.tsx +17 -20
  285. package/src/components/text/Text.tsx +23 -5
  286. package/src/components/toast/Toast.tsx +8 -8
  287. package/src/components/toolbar/Toolbar.tsx +353 -0
  288. package/src/components/toolbar/index.ts +6 -0
  289. package/src/context/ThemeProvider.tsx +5 -4
  290. package/src/{components/icon/utils.tsx → theme/defaults/icons.tsx} +1 -1
  291. package/src/theme/defaults/image.tsx +34 -0
  292. package/src/theme/index.ts +1 -1
  293. package/src/theme/{configure.ts → registry.ts} +19 -34
  294. package/src/theme/runtime.ts +1 -1
  295. package/src/theme/theme.ts +127 -13
  296. package/src/theme/tokens/dark.ts +60 -69
  297. package/src/theme/tokens/light.ts +50 -68
  298. package/src/theme/tokens/primitives.ts +248 -20
  299. package/src/theme/types.ts +67 -35
  300. package/src/utils/accent-utils.ts +4 -4
  301. package/lib/module/components/icon/utils.js.map +0 -1
  302. package/lib/module/theme/configure.js.map +0 -1
  303. package/lib/typescript/src/components/icon/utils.d.ts.map +0 -1
  304. package/lib/typescript/src/theme/configure.d.ts.map +0 -1
@@ -4,7 +4,9 @@ import { dark } from './tokens/dark';
4
4
  import { light } from './tokens/light';
5
5
  import { primitives } from './tokens/primitives';
6
6
  import type {
7
+ ElevationKey,
7
8
  ElevationScale,
9
+ ElevationStyle,
8
10
  LayoutTokens,
9
11
  OpacityTokens,
10
12
  RadiusKey,
@@ -14,9 +16,27 @@ import type {
14
16
  Typography,
15
17
  } from './types';
16
18
 
19
+ // Matches `{palette.key}/NN` — a palette reference with a trailing NN%
20
+ // opacity suffix (0-100), e.g. `{palette.amber.500}/15`.
21
+ const ALPHA_REF_PATTERN = /^\{([\w.]+)\}\/(\d{1,3})$/;
22
+ // Matches a bare `#rrggbb` hex color (the only shape palette primitives use).
23
+ const HEX6_PATTERN = /^#[0-9a-f]{6}$/i;
24
+
25
+ /**
26
+ * Converts a 0-100 percentage into a two-digit hex alpha byte, e.g. 15 -> '26'.
27
+ */
28
+ function percentToHexAlpha(percent: number): string {
29
+ const byte = Math.round((percent / 100) * 255);
30
+ return byte.toString(16).padStart(2, '0');
31
+ }
32
+
17
33
  /**
18
34
  * Resolves {palette.key} reference notation against a source flat-token map.
19
- * Non-reference values pass through unchanged.
35
+ * Also resolves {palette.key}/NN, which appends an NN% opacity alpha byte to
36
+ * the referenced hex color (the referenced value must be a plain #rrggbb hex
37
+ * - `/NN` is not supported on raw hex/rgba literals). Non-reference values
38
+ * pass through unchanged; a reference that can't be resolved this way is
39
+ * left as-is.
20
40
  */
21
41
  function resolveRefs(
22
42
  flat: Record<string, unknown>,
@@ -24,10 +44,28 @@ function resolveRefs(
24
44
  ): Record<string, unknown> {
25
45
  const out: Record<string, unknown> = {};
26
46
  for (const [k, v] of Object.entries(flat)) {
47
+ if (typeof v !== 'string') {
48
+ out[k] = v;
49
+ continue;
50
+ }
51
+
52
+ const alphaMatch = v.match(ALPHA_REF_PATTERN);
53
+ if (alphaMatch) {
54
+ // Both groups are guaranteed by ALPHA_REF_PATTERN when it matches;
55
+ // `noUncheckedIndexedAccess` just can't see that from a regex literal.
56
+ const refKey = alphaMatch[1] as string;
57
+ const percentStr = alphaMatch[2] as string;
58
+ const base = source[refKey];
59
+ const percent = Number(percentStr);
60
+ out[k] =
61
+ typeof base === 'string' && HEX6_PATTERN.test(base)
62
+ ? `${base}${percentToHexAlpha(percent)}`
63
+ : v;
64
+ continue;
65
+ }
66
+
27
67
  out[k] =
28
- typeof v === 'string' && v.startsWith('{') && v.endsWith('}')
29
- ? (source[v.slice(1, -1)] ?? v)
30
- : v;
68
+ v.startsWith('{') && v.endsWith('}') ? (source[v.slice(1, -1)] ?? v) : v;
31
69
  }
32
70
  return out;
33
71
  }
@@ -61,16 +99,19 @@ function flattenByCategory(
61
99
  * Scheme-agnostic primitives, rebuilt once from the flat token data. Shared by
62
100
  * both default themes (matching the previous behavior where spacing / radius /
63
101
  * typography were singleton constants). `palette` is present at runtime for
64
- * Figma parity but is not part of {@link TerraTheme}. Only the radius BASE is
65
- * authored here (`radius.base`); the full scale is derived via
66
- * {@link buildRadiusScale}.
102
+ * Figma parity but is not part of {@link TerraTheme}. Only the radius BASE and
103
+ * spacing BASE are authored here (`radius.base`, `spacing.base`); the full
104
+ * scales are derived via {@link buildRadiusScale} / {@link buildSpacingScale}.
105
+ * `elevation` excludes `shadowColor`, which is layered on per-scheme from each
106
+ * theme's `color.shadow` token (see {@link withShadowColor}).
67
107
  */
68
108
  const prim = unflatten<{
69
- spacing: Record<SpacingKey, number>;
109
+ spacing: { base: number };
70
110
  radius: { base: number };
71
111
  typography: Typography;
72
112
  opacity: OpacityTokens;
73
113
  layout: LayoutTokens;
114
+ elevation: Record<ElevationKey, Omit<ElevationStyle, 'shadowColor'>>;
74
115
  }>(primitives);
75
116
 
76
117
  /**
@@ -82,6 +123,57 @@ const prim = unflatten<{
82
123
  */
83
124
  export const DEFAULT_RADIUS_BASE = prim.radius.base;
84
125
 
126
+ /**
127
+ * Every {@link SpacingKey} — its own numeric value IS the multiplier applied
128
+ * to the base unit (e.g. `'5'` → `5 × base`), so no separate multiplier table
129
+ * is needed the way {@link RADIUS_MULTIPLIERS} is for radius.
130
+ */
131
+ export const SPACING_KEYS: SpacingKey[] = [
132
+ '0',
133
+ '1',
134
+ '2',
135
+ '3',
136
+ '4',
137
+ '5',
138
+ '6',
139
+ '7',
140
+ '8',
141
+ '9',
142
+ '10',
143
+ '12',
144
+ '14',
145
+ '16',
146
+ '20',
147
+ '24',
148
+ '32',
149
+ ];
150
+
151
+ /**
152
+ * Default spacing base unit (dp) — taken from the `spacing.base` primitive.
153
+ * The rest of the scale is derived from it (each step's value is its key
154
+ * multiplied by this base); override at runtime with
155
+ * `configureTerraUI({ shared: { spacing: { base } } })`, or change the
156
+ * `spacing.base` token.
157
+ */
158
+ export const DEFAULT_SPACING_BASE = prim.spacing.base;
159
+
160
+ /**
161
+ * Builds the full spacing scale from a single base value. Each step's value is
162
+ * its key multiplied by `base` — no outliers needed, since `'0'` naturally
163
+ * resolves to `0` for any base.
164
+ */
165
+ export function buildSpacingScale(
166
+ base: number = DEFAULT_SPACING_BASE
167
+ ): Record<SpacingKey, number> {
168
+ const scale = {} as Record<SpacingKey, number>;
169
+ for (const key of SPACING_KEYS) {
170
+ scale[key] = Number(key) * base;
171
+ }
172
+ return scale;
173
+ }
174
+
175
+ const defaultSpacing = buildSpacingScale();
176
+
85
177
  /**
86
178
  * Per-token multipliers applied to the base radius (DaisyUI-style). `none` (0)
87
179
  * and `full` (9999) are fixed and not scaled.
@@ -120,21 +212,43 @@ const defaultRadius = buildRadiusScale();
120
212
  const lightByCategory = flattenByCategory(resolveRefs(light, primitives));
121
213
  const darkByCategory = flattenByCategory(resolveRefs(dark, primitives));
122
214
 
215
+ /**
216
+ * Fills in each elevation level's `shadowColor` from the theme's `color.shadow`
217
+ * token, rather than authoring it redundantly on every level in `light.ts` /
218
+ * `dark.ts`.
219
+ */
220
+ function withShadowColor(
221
+ elevation: Record<ElevationKey, Omit<ElevationStyle, 'shadowColor'>>,
222
+ shadowColor: string
223
+ ): ElevationScale {
224
+ const out = {} as ElevationScale;
225
+ for (const key of Object.keys(elevation) as ElevationKey[]) {
226
+ out[key] = { ...elevation[key], shadowColor };
227
+ }
228
+ return out;
229
+ }
230
+
123
231
  // color: flat map — accessed as theme.color['action.bg.primary.hover']
124
- // elevation: re-unflattened for structured access theme.elevation.sm.shadowRadius
232
+ // elevation: shared shape from primitives, shadowColor layered on per scheme
125
233
  const lightTokens = {
126
234
  color: lightByCategory.color as unknown as ThemeColor,
127
- elevation: unflatten<ElevationScale>(lightByCategory.elevation ?? {}),
235
+ elevation: withShadowColor(
236
+ prim.elevation,
237
+ (lightByCategory.color as unknown as ThemeColor).shadow
238
+ ),
128
239
  };
129
240
  const darkTokens = {
130
241
  color: darkByCategory.color as unknown as ThemeColor,
131
- elevation: unflatten<ElevationScale>(darkByCategory.elevation ?? {}),
242
+ elevation: withShadowColor(
243
+ prim.elevation,
244
+ (darkByCategory.color as unknown as ThemeColor).shadow
245
+ ),
132
246
  };
133
247
 
134
248
  export const defaultLightTheme: TerraTheme = {
135
249
  color: lightTokens.color,
136
250
  elevation: lightTokens.elevation,
137
- spacing: prim.spacing,
251
+ spacing: defaultSpacing,
138
252
  radius: defaultRadius,
139
253
  typography: prim.typography,
140
254
  opacity: prim.opacity,
@@ -144,7 +258,7 @@ export const defaultLightTheme: TerraTheme = {
144
258
  export const defaultDarkTheme: TerraTheme = {
145
259
  color: darkTokens.color,
146
260
  elevation: darkTokens.elevation,
147
- spacing: prim.spacing,
261
+ spacing: defaultSpacing,
148
262
  radius: defaultRadius,
149
263
  typography: prim.typography,
150
264
  opacity: prim.opacity,
@@ -9,6 +9,9 @@ export const dark = {
9
9
  // ── color: page background ────────────────────────────────────────────────
10
10
  'color.background': '{palette.neutral.950}',
11
11
 
12
+ // ── color: shadow (used as elevation.*.shadowColor) ───────────────────────
13
+ 'color.shadow': '#000000',
14
+
12
15
  // ── color: surfaces (bg implied — no property segment) ──────────────────
13
16
  'color.surface.default': '{palette.neutral.900}',
14
17
  'color.surface.raised': '{palette.neutral.800}',
@@ -19,9 +22,14 @@ export const dark = {
19
22
 
20
23
  // ── color: text / icons (fg implied — no property segment) ──────────────
21
24
  'color.text.default': '{palette.neutral.50}',
22
- 'color.text.muted': '{palette.neutral.400}',
23
- 'color.text.subtle': '{palette.neutral.500}',
24
- 'color.text.disabled': '{palette.neutral.700}',
25
+ // Off-ramp hexes (like light's) rather than neutral.400/500/600: the ramp
26
+ // steps are tuned for dark text on white, and reused as light text they land
27
+ // too dim. Set so `subtle` clears AA 4.5:1 on `surface.raised` — the lightest
28
+ // surface, so the worst case — which keeps the muted/subtle/disabled spacing
29
+ // proportional to light's.
30
+ 'color.text.muted': '#b8b8be',
31
+ 'color.text.subtle': '#8d8d96',
32
+ 'color.text.disabled': '#606069',
25
33
  'color.text.inverse': '{palette.neutral.950}',
26
34
  'color.text.link': '{palette.blue.300}',
27
35
  'color.text.accent': '{palette.emerald.400}',
@@ -42,76 +50,59 @@ export const dark = {
42
50
  'color.action.bg.primary.disabled': '{palette.slate.700}',
43
51
  'color.action.fg.primary': '{palette.slate.950}',
44
52
 
45
- 'color.action.bg.subtle': '{palette.emerald.950}',
46
- 'color.action.bg.subtle.hover': '{palette.emerald.900}',
47
- 'color.action.bg.subtle.active': '{palette.emerald.800}',
48
- 'color.action.bg.subtle.disabled': '{palette.neutral.900}',
49
- 'color.action.fg.subtle': '{palette.emerald.300}',
53
+ 'color.action.bg.primary.subtle': '{palette.emerald.950}',
54
+ 'color.action.bg.primary.subtle.hover': '{palette.emerald.900}',
55
+ 'color.action.bg.primary.subtle.active': '{palette.emerald.800}',
56
+ 'color.action.bg.primary.subtle.disabled': '{palette.neutral.900}',
57
+ 'color.action.fg.primary.subtle': '{palette.emerald.300}',
50
58
 
51
- 'color.action.bg.neutral': 'transparent',
52
- 'color.action.bg.neutral.hover': '{palette.neutral.800}',
53
- 'color.action.bg.neutral.active': '{palette.neutral.700}',
54
- 'color.action.bg.neutral.disabled': 'transparent',
55
- 'color.action.fg.neutral': '{palette.neutral.400}',
59
+ // `secondary`'s resting fill/text — used by Avatar/Chip's `secondary` color
60
+ // and Button/Toast's neutral-emphasis look; sized for real separation
61
+ // against `color.background` (neutral.950).
62
+ 'color.action.bg.secondary': '{palette.neutral.600}',
63
+ 'color.action.fg.secondary': '{palette.neutral.50}',
64
+ // Translucent, like light's — and like the status schemes' `/30` fills above.
65
+ // As opaque neutral.800 this was exactly `surface.raised`, so a soft
66
+ // secondary Chip/Button vanished on a raised card (1.00:1), and its opaque
67
+ // neutral.700 hover was indistinguishable from the resting fill there. An
68
+ // overlay lightens whatever it sits on, so the fill separates on all three
69
+ // surfaces (1.49-1.59:1, matching the success/warning chips).
70
+ 'color.action.bg.secondary.subtle': '{palette.neutral.400}/25',
71
+ 'color.action.bg.secondary.subtle.hover': '{palette.neutral.400}/35',
72
+ 'color.action.bg.secondary.subtle.active': '{palette.neutral.400}/45',
73
+ 'color.action.bg.secondary.subtle.disabled': '{palette.neutral.900}',
74
+ 'color.action.fg.secondary.subtle': '{palette.neutral.200}',
56
75
 
57
76
  // ── color: status (bg + fg + border → property required) ────────────────
58
- 'color.status.bg.success': '{palette.green.500}',
59
- 'color.status.bg.success.subtle': '{palette.green.900}',
60
- 'color.status.border.success': '{palette.green.700}',
61
- 'color.status.border.success.subtle': '{palette.green.800}',
62
- 'color.status.fg.success': '{palette.slate.950}',
63
- 'color.status.fg.success.subtle': '{palette.green.200}',
64
-
65
- 'color.status.bg.warning': '{palette.amber.400}',
66
- 'color.status.bg.warning.subtle': '{palette.amber.900}',
67
- 'color.status.border.warning': '{palette.amber.700}',
68
- 'color.status.border.warning.subtle': '{palette.amber.800}',
69
- 'color.status.fg.warning': '{palette.slate.950}',
70
- 'color.status.fg.warning.subtle': '{palette.amber.200}',
77
+ 'color.status.success': '{palette.green.600}',
78
+ 'color.status.success.bg': '{palette.green.600}',
79
+ 'color.status.success.bg.subtle': '{palette.green.600}/30',
80
+ 'color.status.success.border': '{palette.green.700}',
81
+ 'color.status.success.border.subtle': '{palette.green.800}',
82
+ 'color.status.success.fg': '{palette.white}',
83
+ 'color.status.success.fg.subtle': '{palette.green.200}',
71
84
 
72
- 'color.status.bg.danger': '{palette.red.500}',
73
- 'color.status.bg.danger.subtle': '{palette.red.950}',
74
- 'color.status.border.danger': '{palette.red.800}',
75
- 'color.status.border.danger.subtle': '{palette.red.900}',
76
- 'color.status.fg.danger': '{palette.white}',
77
- 'color.status.fg.danger.subtle': '{palette.red.200}',
85
+ 'color.status.warning': '{palette.yellow.600}',
86
+ 'color.status.warning.bg': '{palette.yellow.600}',
87
+ 'color.status.warning.bg.subtle': '{palette.yellow.600}/30',
88
+ 'color.status.warning.border': '{palette.yellow.700}',
89
+ 'color.status.warning.border.subtle': '{palette.yellow.800}',
90
+ 'color.status.warning.fg': '{palette.white}',
91
+ 'color.status.warning.fg.subtle': '{palette.yellow.200}',
78
92
 
79
- 'color.status.bg.info': '{palette.sky.500}',
80
- 'color.status.bg.info.subtle': '{palette.sky.950}',
81
- 'color.status.border.info': '{palette.sky.800}',
82
- 'color.status.border.info.subtle': '{palette.sky.900}',
83
- 'color.status.fg.info': '{palette.slate.950}',
84
- 'color.status.fg.info.subtle': '{palette.sky.200}',
93
+ 'color.status.danger': '{palette.red.700}',
94
+ 'color.status.danger.bg': '{palette.red.700}',
95
+ 'color.status.danger.bg.subtle': '{palette.red.700}/30',
96
+ 'color.status.danger.border': '{palette.red.800}',
97
+ 'color.status.danger.border.subtle': '{palette.red.900}',
98
+ 'color.status.danger.fg': '{palette.white}',
99
+ 'color.status.danger.fg.subtle': '{palette.red.200}',
85
100
 
86
- // ── elevation: platform-aware shadow + Android elevation ──────────────────
87
- 'elevation.none.shadowColor': '#000000',
88
- 'elevation.none.shadowOpacity': 0,
89
- 'elevation.none.shadowRadius': 0,
90
- 'elevation.none.shadowOffset.width': 0,
91
- 'elevation.none.shadowOffset.height': 0,
92
- 'elevation.none.elevation': 0,
93
- 'elevation.sm.shadowColor': '#000000',
94
- 'elevation.sm.shadowOpacity': 0.3,
95
- 'elevation.sm.shadowRadius': 2,
96
- 'elevation.sm.shadowOffset.width': 0,
97
- 'elevation.sm.shadowOffset.height': 1,
98
- 'elevation.sm.elevation': 1,
99
- 'elevation.md.shadowColor': '#000000',
100
- 'elevation.md.shadowOpacity': 0.4,
101
- 'elevation.md.shadowRadius': 6,
102
- 'elevation.md.shadowOffset.width': 0,
103
- 'elevation.md.shadowOffset.height': 2,
104
- 'elevation.md.elevation': 3,
105
- 'elevation.lg.shadowColor': '#000000',
106
- 'elevation.lg.shadowOpacity': 0.5,
107
- 'elevation.lg.shadowRadius': 12,
108
- 'elevation.lg.shadowOffset.width': 0,
109
- 'elevation.lg.shadowOffset.height': 4,
110
- 'elevation.lg.elevation': 6,
111
- 'elevation.xl.shadowColor': '#000000',
112
- 'elevation.xl.shadowOpacity': 0.6,
113
- 'elevation.xl.shadowRadius': 24,
114
- 'elevation.xl.shadowOffset.width': 0,
115
- 'elevation.xl.shadowOffset.height': 8,
116
- 'elevation.xl.elevation': 12,
101
+ 'color.status.info': '{palette.sky.500}',
102
+ 'color.status.info.bg': '{palette.sky.500}',
103
+ 'color.status.info.bg.subtle': '{palette.sky.950}',
104
+ 'color.status.info.border': '{palette.sky.800}',
105
+ 'color.status.info.border.subtle': '{palette.sky.900}',
106
+ 'color.status.info.fg': '{palette.slate.950}',
107
+ 'color.status.info.fg.subtle': '{palette.sky.200}',
117
108
  };
@@ -6,14 +6,19 @@
6
6
  * - property is required when a context carries multiple attributes (action, status)
7
7
  *
8
8
  * Values use {palette.key} reference notation, resolved against primitives at
9
- * build time via resolveRefs() in theme.ts. Raw hex is used only where no
9
+ * build time via resolveRefs() in theme.ts. {palette.key}/NN resolves the
10
+ * referenced #rrggbb hex with an NN% opacity byte appended (e.g.
11
+ * {palette.amber.500}/15 -> '#fe9a0026'). Raw hex is used only where no
10
12
  * palette step matches exactly.
11
13
  *
12
14
  * GENERATED-STYLE SOURCE: intended to be replaced by the Figma / design-sync export.
13
15
  */
14
16
  export const light = {
15
17
  // ── color: page background ────────────────────────────────────────────────
16
- 'color.background': '#f9f9fb',
18
+ 'color.background': '#fbfbfb',
19
+
20
+ // ── color: shadow (used as elevation.*.shadowColor) ───────────────────────
21
+ 'color.shadow': '#000000',
17
22
 
18
23
  // ── color: surfaces (bg implied — no property segment) ──────────────────
19
24
  'color.surface.default': '{palette.white}',
@@ -48,76 +53,53 @@ export const light = {
48
53
  'color.action.bg.primary.disabled': '{palette.slate.200}',
49
54
  'color.action.fg.primary': '{palette.white}',
50
55
 
51
- 'color.action.bg.subtle': '{palette.emerald.100}',
52
- 'color.action.bg.subtle.hover': '{palette.emerald.200}',
53
- 'color.action.bg.subtle.active': '{palette.emerald.300}',
54
- 'color.action.bg.subtle.disabled': '{palette.slate.100}',
55
- 'color.action.fg.subtle': '{palette.emerald.700}',
56
+ 'color.action.bg.primary.subtle': '{palette.emerald.100}',
57
+ 'color.action.bg.primary.subtle.hover': '{palette.emerald.200}',
58
+ 'color.action.bg.primary.subtle.active': '{palette.emerald.300}',
59
+ 'color.action.bg.primary.subtle.disabled': '{palette.slate.100}',
60
+ 'color.action.fg.primary.subtle': '{palette.emerald.700}',
56
61
 
57
- 'color.action.bg.neutral': 'transparent',
58
- 'color.action.bg.neutral.hover': '{palette.slate.100}',
59
- 'color.action.bg.neutral.active': '{palette.slate.200}',
60
- 'color.action.bg.neutral.disabled': 'transparent',
61
- 'color.action.fg.neutral': '{palette.slate.700}',
62
+ // `secondary`'s resting fill/text — used by Avatar/Chip's `secondary` color
63
+ // and Button/Toast's neutral-emphasis look; sized for real separation
64
+ // against `color.background` (#f9f9fb), not just a tint.
65
+ 'color.action.bg.secondary': '{palette.neutral.200}',
66
+ 'color.action.fg.secondary': '{palette.neutral.900}',
67
+ 'color.action.bg.secondary.subtle': '{palette.neutral.400}/15',
68
+ 'color.action.bg.secondary.subtle.hover': '{palette.neutral.400}/25',
69
+ 'color.action.bg.secondary.subtle.active': '{palette.neutral.400}/35',
70
+ 'color.action.bg.secondary.subtle.disabled': '{palette.slate.100}',
71
+ 'color.action.fg.secondary.subtle': '{palette.neutral.700}',
62
72
 
63
73
  // ── color: status (bg + fg + border → property required) ────────────────
64
- 'color.status.bg.success': '{palette.green.600}',
65
- 'color.status.bg.success.subtle': '{palette.green.100}',
66
- 'color.status.border.success': '{palette.green.300}',
67
- 'color.status.border.success.subtle': '{palette.green.200}',
68
- 'color.status.fg.success': '{palette.white}',
69
- 'color.status.fg.success.subtle': '{palette.green.800}',
70
-
71
- 'color.status.bg.warning': '{palette.amber.500}',
72
- 'color.status.bg.warning.subtle': '{palette.amber.100}',
73
- 'color.status.border.warning': '{palette.amber.300}',
74
- 'color.status.border.warning.subtle': '{palette.amber.200}',
75
- 'color.status.fg.warning': '{palette.slate.950}',
76
- 'color.status.fg.warning.subtle': '{palette.amber.800}',
74
+ 'color.status.success': '{palette.green.600}',
75
+ 'color.status.success.bg': '{palette.green.600}',
76
+ 'color.status.success.bg.subtle': '{palette.green.600}/20',
77
+ 'color.status.success.border': '{palette.green.300}',
78
+ 'color.status.success.border.subtle': '{palette.green.200}',
79
+ 'color.status.success.fg': '{palette.white}',
80
+ 'color.status.success.fg.subtle': '{palette.green.800}',
77
81
 
78
- 'color.status.bg.danger': '{palette.red.600}',
79
- 'color.status.bg.danger.subtle': '{palette.red.100}',
80
- 'color.status.border.danger': '{palette.red.300}',
81
- 'color.status.border.danger.subtle': '{palette.red.200}',
82
- 'color.status.fg.danger': '{palette.white}',
83
- 'color.status.fg.danger.subtle': '{palette.red.800}',
82
+ 'color.status.warning': '{palette.yellow.500}',
83
+ 'color.status.warning.bg': '{palette.yellow.500}',
84
+ 'color.status.warning.bg.subtle': '{palette.yellow.500}/20',
85
+ 'color.status.warning.border': '{palette.yellow.300}',
86
+ 'color.status.warning.border.subtle': '{palette.yellow.200}',
87
+ 'color.status.warning.fg': '{palette.slate.950}',
88
+ 'color.status.warning.fg.subtle': '{palette.yellow.800}',
84
89
 
85
- 'color.status.bg.info': '{palette.sky.600}',
86
- 'color.status.bg.info.subtle': '{palette.sky.100}',
87
- 'color.status.border.info': '{palette.sky.300}',
88
- 'color.status.border.info.subtle': '{palette.sky.200}',
89
- 'color.status.fg.info': '{palette.white}',
90
- 'color.status.fg.info.subtle': '{palette.sky.800}',
90
+ 'color.status.danger': '{palette.red.400}',
91
+ 'color.status.danger.bg': '{palette.red.400}',
92
+ 'color.status.danger.bg.subtle': '{palette.red.500}/20',
93
+ 'color.status.danger.border': '{palette.red.500}',
94
+ 'color.status.danger.border.subtle': '{palette.red.200}',
95
+ 'color.status.danger.fg': '{palette.white}',
96
+ 'color.status.danger.fg.subtle': '{palette.red.800}',
91
97
 
92
- // ── elevation: platform-aware shadow + Android elevation ──────────────────
93
- 'elevation.none.shadowColor': '#000000',
94
- 'elevation.none.shadowOpacity': 0,
95
- 'elevation.none.shadowRadius': 0,
96
- 'elevation.none.shadowOffset.width': 0,
97
- 'elevation.none.shadowOffset.height': 0,
98
- 'elevation.none.elevation': 0,
99
- 'elevation.sm.shadowColor': '#000000',
100
- 'elevation.sm.shadowOpacity': 0.1,
101
- 'elevation.sm.shadowRadius': 3,
102
- 'elevation.sm.shadowOffset.width': 0,
103
- 'elevation.sm.shadowOffset.height': 1,
104
- 'elevation.sm.elevation': 1,
105
- 'elevation.md.shadowColor': '#000000',
106
- 'elevation.md.shadowOpacity': 0.12,
107
- 'elevation.md.shadowRadius': 8,
108
- 'elevation.md.shadowOffset.width': 0,
109
- 'elevation.md.shadowOffset.height': 2,
110
- 'elevation.md.elevation': 3,
111
- 'elevation.lg.shadowColor': '#000000',
112
- 'elevation.lg.shadowOpacity': 0.12,
113
- 'elevation.lg.shadowRadius': 12,
114
- 'elevation.lg.shadowOffset.width': 0,
115
- 'elevation.lg.shadowOffset.height': 4,
116
- 'elevation.lg.elevation': 6,
117
- 'elevation.xl.shadowColor': '#000000',
118
- 'elevation.xl.shadowOpacity': 0.16,
119
- 'elevation.xl.shadowRadius': 24,
120
- 'elevation.xl.shadowOffset.width': 0,
121
- 'elevation.xl.shadowOffset.height': 8,
122
- 'elevation.xl.elevation': 12,
98
+ 'color.status.info': '{palette.sky.600}',
99
+ 'color.status.info.bg': '{palette.sky.600}',
100
+ 'color.status.info.bg.subtle': '{palette.sky.100}',
101
+ 'color.status.info.border': '{palette.sky.300}',
102
+ 'color.status.info.border.subtle': '{palette.sky.200}',
103
+ 'color.status.info.fg': '{palette.white}',
104
+ 'color.status.info.fg.subtle': '{palette.sky.800}',
123
105
  };