react-native-terra-ui 0.7.2 → 0.8.1

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 (252) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +1 -1
  3. package/lib/module/components/avatar/Avatar.js +20 -20
  4. package/lib/module/components/avatar/Avatar.js.map +1 -1
  5. package/lib/module/components/button/Button.js +11 -11
  6. package/lib/module/components/button/Button.js.map +1 -1
  7. package/lib/module/components/chip/Chip.js +32 -32
  8. package/lib/module/components/chip/Chip.js.map +1 -1
  9. package/lib/module/components/empty-state/EmptyState.js +3 -3
  10. package/lib/module/components/empty-state/EmptyState.js.map +1 -1
  11. package/lib/module/components/header/variants/LargeTitleHeader/index.js +30 -32
  12. package/lib/module/components/header/variants/LargeTitleHeader/index.js.map +1 -1
  13. package/lib/module/components/header/variants/TitleHeader/index.js +26 -18
  14. package/lib/module/components/header/variants/TitleHeader/index.js.map +1 -1
  15. package/lib/module/components/icon/Icon.js +3 -3
  16. package/lib/module/components/page-indicator/hooks/use-page-indicator-colors.js +2 -2
  17. package/lib/module/components/screen/Screen.js +63 -34
  18. package/lib/module/components/screen/Screen.js.map +1 -1
  19. package/lib/module/components/screen/ScreenContext.js +28 -9
  20. package/lib/module/components/screen/ScreenContext.js.map +1 -1
  21. package/lib/module/components/screen/ScreenFlatList.js +4 -162
  22. package/lib/module/components/screen/ScreenFlatList.js.map +1 -1
  23. package/lib/module/components/screen/ScreenList.js +81 -97
  24. package/lib/module/components/screen/ScreenList.js.map +1 -1
  25. package/lib/module/components/screen/ScreenScrollView.js +64 -115
  26. package/lib/module/components/screen/ScreenScrollView.js.map +1 -1
  27. package/lib/module/components/screen/hooks/use-screen-ref.js +18 -0
  28. package/lib/module/components/screen/hooks/use-screen-ref.js.map +1 -0
  29. package/lib/module/components/screen/hooks/use-screen-scroll-handler.js +19 -0
  30. package/lib/module/components/screen/hooks/use-screen-scroll-handler.js.map +1 -0
  31. package/lib/module/components/screen/index.js.map +1 -1
  32. package/lib/module/components/screen/parts/ScreenFrame.js +47 -0
  33. package/lib/module/components/screen/parts/ScreenFrame.js.map +1 -0
  34. package/lib/module/components/screen/parts/ScreenHeaderAppearance.js +43 -0
  35. package/lib/module/components/screen/parts/ScreenHeaderAppearance.js.map +1 -0
  36. package/lib/module/components/screen/parts/ScreenPlaceholder.js +11 -13
  37. package/lib/module/components/screen/parts/ScreenPlaceholder.js.map +1 -1
  38. package/lib/module/components/screen/parts/ScreenSafeArea.android.js +27 -0
  39. package/lib/module/components/screen/parts/ScreenSafeArea.android.js.map +1 -0
  40. package/lib/module/components/screen/parts/ScreenSafeArea.js +26 -0
  41. package/lib/module/components/screen/parts/ScreenSafeArea.js.map +1 -0
  42. package/lib/module/components/screen/utils.js +18 -9
  43. package/lib/module/components/screen/utils.js.map +1 -1
  44. package/lib/module/components/spinner/Spinner.js +2 -2
  45. package/lib/module/components/text/Text.js +1 -1
  46. package/lib/module/components/toast/Toast.js +13 -13
  47. package/lib/module/components/toast/Toast.js.map +1 -1
  48. package/lib/module/components/toolbar/Toolbar.js +2 -2
  49. package/lib/module/context/ThemeProvider.js +22 -39
  50. package/lib/module/context/ThemeProvider.js.map +1 -1
  51. package/lib/module/context/index.js +1 -1
  52. package/lib/module/context/index.js.map +1 -1
  53. package/lib/module/theme/breakpoints.js +1 -1
  54. package/lib/module/theme/define-config.js +21 -0
  55. package/lib/module/theme/define-config.js.map +1 -0
  56. package/lib/module/theme/diagnostics.js +13 -0
  57. package/lib/module/theme/diagnostics.js.map +1 -0
  58. package/lib/module/theme/errors.js +15 -0
  59. package/lib/module/theme/errors.js.map +1 -0
  60. package/lib/module/theme/index.js +7 -1
  61. package/lib/module/theme/index.js.map +1 -1
  62. package/lib/module/theme/legacy-tokens.js +119 -0
  63. package/lib/module/theme/legacy-tokens.js.map +1 -0
  64. package/lib/module/theme/registry.js +122 -130
  65. package/lib/module/theme/registry.js.map +1 -1
  66. package/lib/module/theme/resolve-config.js +346 -0
  67. package/lib/module/theme/resolve-config.js.map +1 -0
  68. package/lib/module/theme/runtime.js +57 -12
  69. package/lib/module/theme/runtime.js.map +1 -1
  70. package/lib/module/theme/screen-margin.js +6 -14
  71. package/lib/module/theme/screen-margin.js.map +1 -1
  72. package/lib/module/theme/screen-padding.js +17 -0
  73. package/lib/module/theme/screen-padding.js.map +1 -0
  74. package/lib/module/theme/selection-store.js +75 -0
  75. package/lib/module/theme/selection-store.js.map +1 -0
  76. package/lib/module/theme/theme.js +81 -36
  77. package/lib/module/theme/theme.js.map +1 -1
  78. package/lib/module/theme/tokens/canonical-color-keys.js +102 -0
  79. package/lib/module/theme/tokens/canonical-color-keys.js.map +1 -0
  80. package/lib/module/theme/tokens/dark.js +72 -88
  81. package/lib/module/theme/tokens/dark.js.map +1 -1
  82. package/lib/module/theme/tokens/light.js +69 -83
  83. package/lib/module/theme/tokens/light.js.map +1 -1
  84. package/lib/module/theme/tokens/primitives.js +14 -14
  85. package/lib/module/theme/tokens/primitives.js.map +1 -1
  86. package/lib/module/theme/tokens/validate.js +238 -0
  87. package/lib/module/theme/tokens/validate.js.map +1 -0
  88. package/lib/module/theme/unistyles-adapter.js +77 -0
  89. package/lib/module/theme/unistyles-adapter.js.map +1 -0
  90. package/lib/module/utils/accent-generator.js +476 -0
  91. package/lib/module/utils/accent-generator.js.map +1 -0
  92. package/lib/module/utils/accent-utils.js +52 -35
  93. package/lib/module/utils/accent-utils.js.map +1 -1
  94. package/lib/module/utils/color-utils.js +224 -7
  95. package/lib/module/utils/color-utils.js.map +1 -1
  96. package/lib/module/utils/deep-merge.js +1 -1
  97. package/lib/module/utils/deep-merge.js.map +1 -1
  98. package/lib/module/utils/resolve-theme-color.js +2 -2
  99. package/lib/typescript/src/components/chip/types.d.ts +1 -1
  100. package/lib/typescript/src/components/empty-state/EmptyState.d.ts +1 -1
  101. package/lib/typescript/src/components/empty-state/EmptyState.d.ts.map +1 -1
  102. package/lib/typescript/src/components/header/variants/LargeTitleHeader/index.d.ts +6 -5
  103. package/lib/typescript/src/components/header/variants/LargeTitleHeader/index.d.ts.map +1 -1
  104. package/lib/typescript/src/components/header/variants/TitleHeader/index.d.ts +11 -5
  105. package/lib/typescript/src/components/header/variants/TitleHeader/index.d.ts.map +1 -1
  106. package/lib/typescript/src/components/icon/Icon.d.ts +2 -2
  107. package/lib/typescript/src/components/screen/Screen.d.ts +45 -16
  108. package/lib/typescript/src/components/screen/Screen.d.ts.map +1 -1
  109. package/lib/typescript/src/components/screen/ScreenContext.d.ts +42 -26
  110. package/lib/typescript/src/components/screen/ScreenContext.d.ts.map +1 -1
  111. package/lib/typescript/src/components/screen/ScreenFlatList.d.ts +5 -46
  112. package/lib/typescript/src/components/screen/ScreenFlatList.d.ts.map +1 -1
  113. package/lib/typescript/src/components/screen/ScreenList.d.ts +62 -50
  114. package/lib/typescript/src/components/screen/ScreenList.d.ts.map +1 -1
  115. package/lib/typescript/src/components/screen/ScreenScrollView.d.ts +18 -58
  116. package/lib/typescript/src/components/screen/ScreenScrollView.d.ts.map +1 -1
  117. package/lib/typescript/src/components/screen/hooks/use-screen-ref.d.ts +5 -0
  118. package/lib/typescript/src/components/screen/hooks/use-screen-ref.d.ts.map +1 -0
  119. package/lib/typescript/src/components/screen/hooks/use-screen-scroll-handler.d.ts +53 -0
  120. package/lib/typescript/src/components/screen/hooks/use-screen-scroll-handler.d.ts.map +1 -0
  121. package/lib/typescript/src/components/screen/index.d.ts +2 -2
  122. package/lib/typescript/src/components/screen/index.d.ts.map +1 -1
  123. package/lib/typescript/src/components/screen/parts/ScreenFrame.d.ts +6 -0
  124. package/lib/typescript/src/components/screen/parts/ScreenFrame.d.ts.map +1 -0
  125. package/lib/typescript/src/components/screen/parts/ScreenHeaderAppearance.d.ts +21 -0
  126. package/lib/typescript/src/components/screen/parts/ScreenHeaderAppearance.d.ts.map +1 -0
  127. package/lib/typescript/src/components/screen/parts/ScreenPlaceholder.d.ts +6 -8
  128. package/lib/typescript/src/components/screen/parts/ScreenPlaceholder.d.ts.map +1 -1
  129. package/lib/typescript/src/components/screen/parts/ScreenSafeArea.android.d.ts +7 -0
  130. package/lib/typescript/src/components/screen/parts/ScreenSafeArea.android.d.ts.map +1 -0
  131. package/lib/typescript/src/components/screen/parts/ScreenSafeArea.d.ts +6 -0
  132. package/lib/typescript/src/components/screen/parts/ScreenSafeArea.d.ts.map +1 -0
  133. package/lib/typescript/src/components/screen/types.d.ts +27 -32
  134. package/lib/typescript/src/components/screen/types.d.ts.map +1 -1
  135. package/lib/typescript/src/components/screen/utils.d.ts +9 -8
  136. package/lib/typescript/src/components/screen/utils.d.ts.map +1 -1
  137. package/lib/typescript/src/components/text/Text.d.ts +1 -1
  138. package/lib/typescript/src/components/text/Text.d.ts.map +1 -1
  139. package/lib/typescript/src/components/toolbar/Toolbar.d.ts +2 -2
  140. package/lib/typescript/src/context/ThemeProvider.d.ts +29 -12
  141. package/lib/typescript/src/context/ThemeProvider.d.ts.map +1 -1
  142. package/lib/typescript/src/context/index.d.ts +1 -1
  143. package/lib/typescript/src/context/index.d.ts.map +1 -1
  144. package/lib/typescript/src/theme/breakpoints.d.ts +1 -1
  145. package/lib/typescript/src/theme/define-config.d.ts +23 -0
  146. package/lib/typescript/src/theme/define-config.d.ts.map +1 -0
  147. package/lib/typescript/src/theme/diagnostics.d.ts +4 -0
  148. package/lib/typescript/src/theme/diagnostics.d.ts.map +1 -0
  149. package/lib/typescript/src/theme/errors.d.ts +10 -0
  150. package/lib/typescript/src/theme/errors.d.ts.map +1 -0
  151. package/lib/typescript/src/theme/index.d.ts +10 -2
  152. package/lib/typescript/src/theme/index.d.ts.map +1 -1
  153. package/lib/typescript/src/theme/legacy-tokens.d.ts +187 -0
  154. package/lib/typescript/src/theme/legacy-tokens.d.ts.map +1 -0
  155. package/lib/typescript/src/theme/registry.d.ts +12 -17
  156. package/lib/typescript/src/theme/registry.d.ts.map +1 -1
  157. package/lib/typescript/src/theme/resolve-config.d.ts +99 -0
  158. package/lib/typescript/src/theme/resolve-config.d.ts.map +1 -0
  159. package/lib/typescript/src/theme/runtime.d.ts +25 -4
  160. package/lib/typescript/src/theme/runtime.d.ts.map +1 -1
  161. package/lib/typescript/src/theme/screen-margin.d.ts +6 -14
  162. package/lib/typescript/src/theme/screen-margin.d.ts.map +1 -1
  163. package/lib/typescript/src/theme/screen-padding.d.ts +15 -0
  164. package/lib/typescript/src/theme/screen-padding.d.ts.map +1 -0
  165. package/lib/typescript/src/theme/selection-store.d.ts +41 -0
  166. package/lib/typescript/src/theme/selection-store.d.ts.map +1 -0
  167. package/lib/typescript/src/theme/theme.d.ts +54 -1
  168. package/lib/typescript/src/theme/theme.d.ts.map +1 -1
  169. package/lib/typescript/src/theme/tokens/canonical-color-keys.d.ts +95 -0
  170. package/lib/typescript/src/theme/tokens/canonical-color-keys.d.ts.map +1 -0
  171. package/lib/typescript/src/theme/tokens/dark.d.ts +56 -63
  172. package/lib/typescript/src/theme/tokens/dark.d.ts.map +1 -1
  173. package/lib/typescript/src/theme/tokens/light.d.ts +56 -71
  174. package/lib/typescript/src/theme/tokens/light.d.ts.map +1 -1
  175. package/lib/typescript/src/theme/tokens/primitives.d.ts +11 -10
  176. package/lib/typescript/src/theme/tokens/primitives.d.ts.map +1 -1
  177. package/lib/typescript/src/theme/tokens/validate.d.ts +34 -0
  178. package/lib/typescript/src/theme/tokens/validate.d.ts.map +1 -0
  179. package/lib/typescript/src/theme/types.d.ts +166 -86
  180. package/lib/typescript/src/theme/types.d.ts.map +1 -1
  181. package/lib/typescript/src/theme/unistyles-adapter.d.ts +33 -0
  182. package/lib/typescript/src/theme/unistyles-adapter.d.ts.map +1 -0
  183. package/lib/typescript/src/utils/accent-generator.d.ts +103 -0
  184. package/lib/typescript/src/utils/accent-generator.d.ts.map +1 -0
  185. package/lib/typescript/src/utils/accent-utils.d.ts +15 -2
  186. package/lib/typescript/src/utils/accent-utils.d.ts.map +1 -1
  187. package/lib/typescript/src/utils/color-utils.d.ts +59 -2
  188. package/lib/typescript/src/utils/color-utils.d.ts.map +1 -1
  189. package/lib/typescript/src/utils/deep-merge.d.ts +1 -0
  190. package/lib/typescript/src/utils/deep-merge.d.ts.map +1 -1
  191. package/lib/typescript/src/utils/resolve-theme-color.d.ts +2 -2
  192. package/package.json +1 -1
  193. package/src/components/avatar/Avatar.tsx +20 -20
  194. package/src/components/button/Button.tsx +11 -11
  195. package/src/components/chip/Chip.tsx +32 -32
  196. package/src/components/chip/types.ts +1 -1
  197. package/src/components/empty-state/EmptyState.tsx +4 -4
  198. package/src/components/header/variants/LargeTitleHeader/index.tsx +31 -30
  199. package/src/components/header/variants/TitleHeader/index.tsx +33 -22
  200. package/src/components/icon/Icon.tsx +4 -4
  201. package/src/components/page-indicator/hooks/use-page-indicator-colors.ts +2 -2
  202. package/src/components/screen/Screen.tsx +89 -43
  203. package/src/components/screen/ScreenContext.tsx +48 -28
  204. package/src/components/screen/ScreenFlatList.tsx +5 -191
  205. package/src/components/screen/ScreenList.tsx +197 -175
  206. package/src/components/screen/ScreenScrollView.tsx +92 -167
  207. package/src/components/screen/hooks/use-screen-ref.ts +24 -0
  208. package/src/components/screen/hooks/use-screen-scroll-handler.ts +31 -0
  209. package/src/components/screen/index.ts +8 -2
  210. package/src/components/screen/parts/ScreenFrame.tsx +49 -0
  211. package/src/components/screen/parts/ScreenHeaderAppearance.tsx +52 -0
  212. package/src/components/screen/parts/ScreenPlaceholder.tsx +16 -16
  213. package/src/components/screen/parts/ScreenSafeArea.android.tsx +22 -0
  214. package/src/components/screen/parts/ScreenSafeArea.tsx +20 -0
  215. package/src/components/screen/types.ts +29 -32
  216. package/src/components/screen/utils.ts +24 -11
  217. package/src/components/spinner/Spinner.tsx +2 -2
  218. package/src/components/text/Text.tsx +2 -2
  219. package/src/components/toast/Toast.tsx +13 -13
  220. package/src/components/toolbar/Toolbar.tsx +4 -4
  221. package/src/context/ThemeProvider.tsx +47 -51
  222. package/src/context/index.ts +1 -1
  223. package/src/theme/breakpoints.ts +1 -1
  224. package/src/theme/define-config.ts +27 -0
  225. package/src/theme/diagnostics.ts +11 -0
  226. package/src/theme/errors.ts +14 -0
  227. package/src/theme/index.ts +40 -1
  228. package/src/theme/legacy-tokens.ts +227 -0
  229. package/src/theme/registry.ts +119 -137
  230. package/src/theme/resolve-config.ts +406 -0
  231. package/src/theme/runtime.ts +52 -14
  232. package/src/theme/screen-margin.ts +6 -25
  233. package/src/theme/screen-padding.ts +26 -0
  234. package/src/theme/selection-store.ts +76 -0
  235. package/src/theme/theme.ts +104 -39
  236. package/src/theme/tokens/canonical-color-keys.ts +107 -0
  237. package/src/theme/tokens/dark.ts +91 -98
  238. package/src/theme/tokens/light.ts +88 -93
  239. package/src/theme/tokens/primitives.ts +14 -14
  240. package/src/theme/tokens/validate.ts +271 -0
  241. package/src/theme/types.ts +184 -95
  242. package/src/theme/unistyles-adapter.ts +75 -0
  243. package/src/utils/accent-generator.ts +530 -0
  244. package/src/utils/accent-utils.ts +66 -39
  245. package/src/utils/color-utils.ts +225 -8
  246. package/src/utils/deep-merge.ts +1 -1
  247. package/src/utils/resolve-theme-color.ts +2 -2
  248. package/lib/module/components/screen/parts/BottomSafeArea.js +0 -62
  249. package/lib/module/components/screen/parts/BottomSafeArea.js.map +0 -1
  250. package/lib/typescript/src/components/screen/parts/BottomSafeArea.d.ts +0 -30
  251. package/lib/typescript/src/components/screen/parts/BottomSafeArea.d.ts.map +0 -1
  252. package/src/components/screen/parts/BottomSafeArea.tsx +0 -59
@@ -1,8 +1,22 @@
1
1
  "use strict";
2
2
 
3
- /** Small color helpers for deriving accent shades from a single hue. */
3
+ /**
4
+ * Colour helpers shared by the accent generator, the contrast diagnostics and
5
+ * the public `shade` / `withAlpha` / `readableOn` utilities.
6
+ *
7
+ * Everything here is pure sRGB maths with no runtime dependency:
8
+ * - parsing of `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`, `rgb()` and `rgba()`,
9
+ * - WCAG 2.x relative luminance / contrast with sRGB alpha compositing,
10
+ * - OKLab / OKLCH conversions (Björn Ottosson's published matrices) with
11
+ * sRGB gamut mapping by chroma reduction at constant lightness and hue.
12
+ */
13
+
14
+ /** A parsed sRGB colour with 0-255 channels and a 0-1 alpha. */
4
15
 
5
- const clamp = n => Math.max(0, Math.min(255, Math.round(n)));
16
+ /** OKLCH coordinates: L in [0, 1], C ≥ 0, h in degrees [0, 360). */
17
+
18
+ const clamp255 = n => Math.max(0, Math.min(255, Math.round(n)));
19
+ const clamp01 = n => Math.max(0, Math.min(1, n));
6
20
  function parseHex(hex) {
7
21
  const hex6 = /^#?([0-9a-f]{6})$/i.exec(hex.trim())?.[1];
8
22
  if (!hex6) return null;
@@ -17,7 +31,209 @@ const toHex = ({
17
31
  r,
18
32
  g,
19
33
  b
20
- }) => `#${[r, g, b].map(v => clamp(v).toString(16).padStart(2, "0")).join("")}`;
34
+ }) => `#${[r, g, b].map(v => clamp255(v).toString(16).padStart(2, "0")).join("")}`;
35
+
36
+ /** Formats 0-255 channels as a lowercase `#rrggbb` string (channels are rounded and clamped). */
37
+ export function rgbToHex(rgb) {
38
+ return toHex(rgb);
39
+ }
40
+
41
+ /**
42
+ * Parses an sRGB colour string. Accepts `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`
43
+ * (case-insensitive) and `rgb(r, g, b)` / `rgba(r, g, b, a)` with integer or
44
+ * percentage channels. Returns `null` for anything else (named colours,
45
+ * `transparent`, hsl(), gradients, platform dynamic colours, ...).
46
+ */
47
+ export function parseColor(value) {
48
+ if (typeof value !== "string") return null;
49
+ const input = value.trim();
50
+ const hex = /^#([0-9a-f]{3,8})$/i.exec(input)?.[1];
51
+ if (hex !== undefined) {
52
+ if (hex.length === 3 || hex.length === 4) {
53
+ const [r, g, b, a] = [...hex].map(ch => Number.parseInt(ch + ch, 16));
54
+ return {
55
+ r: r ?? 0,
56
+ g: g ?? 0,
57
+ b: b ?? 0,
58
+ a: hex.length === 4 ? (a ?? 255) / 255 : 1
59
+ };
60
+ }
61
+ if (hex.length === 6 || hex.length === 8) {
62
+ const channels = [0, 2, 4, 6].filter(start => start < hex.length).map(start => Number.parseInt(hex.slice(start, start + 2), 16));
63
+ const [r, g, b, a] = channels;
64
+ return {
65
+ r: r ?? 0,
66
+ g: g ?? 0,
67
+ b: b ?? 0,
68
+ a: hex.length === 8 ? (a ?? 255) / 255 : 1
69
+ };
70
+ }
71
+ return null;
72
+ }
73
+ const fn = /^rgba?\(\s*([^)]*)\)$/i.exec(input)?.[1];
74
+ if (fn !== undefined) {
75
+ const parts = fn.split(/\s*[,/]\s*|\s+/).filter(part => part.length > 0);
76
+ if (parts.length !== 3 && parts.length !== 4) return null;
77
+ const channel = part => {
78
+ const percent = part.endsWith("%");
79
+ const n = Number(percent ? part.slice(0, -1) : part);
80
+ if (!Number.isFinite(n)) return null;
81
+ return clamp255(percent ? n / 100 * 255 : n);
82
+ };
83
+ const alpha = part => {
84
+ if (part === undefined) return 1;
85
+ const percent = part.endsWith("%");
86
+ const n = Number(percent ? part.slice(0, -1) : part);
87
+ if (!Number.isFinite(n)) return null;
88
+ return clamp01(percent ? n / 100 : n);
89
+ };
90
+ const r = channel(parts[0]);
91
+ const g = channel(parts[1]);
92
+ const b = channel(parts[2]);
93
+ const a = alpha(parts[3]);
94
+ if (r === null || g === null || b === null || a === null) return null;
95
+ return {
96
+ r,
97
+ g,
98
+ b,
99
+ a
100
+ };
101
+ }
102
+ return null;
103
+ }
104
+
105
+ /** Source-over compositing of `front` at `alpha` onto an opaque `back`, in gamma-encoded sRGB. */
106
+ export function compositeOver(front, back, alpha) {
107
+ const a = clamp01(alpha);
108
+ return {
109
+ r: front.r * a + back.r * (1 - a),
110
+ g: front.g * a + back.g * (1 - a),
111
+ b: front.b * a + back.b * (1 - a)
112
+ };
113
+ }
114
+ const linearizeChannel = channel => {
115
+ const srgb = channel / 255;
116
+ return srgb <= 0.04045 ? srgb / 12.92 : ((srgb + 0.055) / 1.055) ** 2.4;
117
+ };
118
+ const delinearizeChannel = linear => {
119
+ const v = Math.max(0, Math.min(1, linear));
120
+ return (v <= 0.0031308 ? v * 12.92 : 1.055 * v ** (1 / 2.4) - 0.055) * 255;
121
+ };
122
+
123
+ /** WCAG 2.x relative luminance of an opaque sRGB colour (0-255 channels). */
124
+ export function relativeLuminance(rgb) {
125
+ return 0.2126 * linearizeChannel(rgb.r) + 0.7152 * linearizeChannel(rgb.g) + 0.0722 * linearizeChannel(rgb.b);
126
+ }
127
+
128
+ /** WCAG 2.x contrast ratio between two opaque sRGB colours (≥ 1). */
129
+ export function contrastRatio(a, b) {
130
+ const la = relativeLuminance(a);
131
+ const lb = relativeLuminance(b);
132
+ return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);
133
+ }
134
+
135
+ /**
136
+ * Contrast of a foreground on a background, both composited over an opaque
137
+ * `surface`, with `opacity` applied to the whole control afterwards (the way a
138
+ * pressed Button or Toast action fades as one unit). Matches the reference
139
+ * calculation in `theme/__tests__/color-contrast.test.ts`.
140
+ */
141
+ export function compositedContrast(fg, bg, surface, opacity = 1) {
142
+ const background = compositeOver(bg, surface, bg.a);
143
+ const foreground = compositeOver(fg, background, fg.a);
144
+ return contrastRatio(compositeOver(foreground, surface, opacity), compositeOver(background, surface, opacity));
145
+ }
146
+
147
+ // ─── OKLab / OKLCH ────────────────────────────────────────────────────────────
148
+ // Matrices from https://bottosson.github.io/posts/oklab/ (sRGB D65).
149
+
150
+ const cbrt = x => x < 0 ? -((-x) ** (1 / 3)) : x ** (1 / 3);
151
+ function linearSrgbToOklab(r, g, b) {
152
+ const l = cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);
153
+ const m = cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);
154
+ const s = cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);
155
+ return [0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s, 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s, 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s];
156
+ }
157
+ function oklabToLinearSrgb(L, a, b) {
158
+ const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3;
159
+ const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3;
160
+ const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3;
161
+ return [4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s];
162
+ }
163
+
164
+ /** Converts 0-255 sRGB channels to OKLCH. Achromatic input yields `c ≈ 0` and `h = 0`. */
165
+ export function rgbToOklch(rgb) {
166
+ const [L, a, b] = linearSrgbToOklab(linearizeChannel(rgb.r), linearizeChannel(rgb.g), linearizeChannel(rgb.b));
167
+ const c = Math.hypot(a, b);
168
+ if (c < 1e-4) return {
169
+ l: clamp01(L),
170
+ c: 0,
171
+ h: 0
172
+ };
173
+ const h = Math.atan2(b, a) * 180 / Math.PI;
174
+ return {
175
+ l: clamp01(L),
176
+ c,
177
+ h: h < 0 ? h + 360 : h
178
+ };
179
+ }
180
+ function oklchToLinear({
181
+ l,
182
+ c,
183
+ h
184
+ }) {
185
+ const rad = h * Math.PI / 180;
186
+ return oklabToLinearSrgb(l, c * Math.cos(rad), c * Math.sin(rad));
187
+ }
188
+ const GAMUT_EPSILON = 1e-4;
189
+ const inGamut = linear => linear.every(v => v >= -GAMUT_EPSILON && v <= 1 + GAMUT_EPSILON);
190
+
191
+ /**
192
+ * Converts OKLCH to 0-255 sRGB channels. Colours outside the sRGB gamut are
193
+ * mapped by reducing chroma at constant lightness and hue (binary search)
194
+ * until they fit, so the requested lightness — what the contrast targets
195
+ * depend on — is preserved as closely as the gamut allows.
196
+ */
197
+ export function oklchToRgb(color) {
198
+ const l = clamp01(color.l);
199
+ const h = (color.h % 360 + 360) % 360;
200
+ let c = Math.max(0, color.c);
201
+ let linear = oklchToLinear({
202
+ l,
203
+ c,
204
+ h
205
+ });
206
+ if (!inGamut(linear)) {
207
+ let lo = 0;
208
+ let hi = c;
209
+ for (let i = 0; i < 24; i += 1) {
210
+ const mid = (lo + hi) / 2;
211
+ if (inGamut(oklchToLinear({
212
+ l,
213
+ c: mid,
214
+ h
215
+ }))) lo = mid;else hi = mid;
216
+ }
217
+ c = lo;
218
+ linear = oklchToLinear({
219
+ l,
220
+ c,
221
+ h
222
+ });
223
+ }
224
+ return {
225
+ r: delinearizeChannel(linear[0]),
226
+ g: delinearizeChannel(linear[1]),
227
+ b: delinearizeChannel(linear[2])
228
+ };
229
+ }
230
+
231
+ /** `oklchToRgb` followed by `rgbToHex`. */
232
+ export function oklchToHex(color) {
233
+ return toHex(oklchToRgb(color));
234
+ }
235
+
236
+ // ─── Public shade / alpha / readable helpers (unchanged behaviour) ────────────
21
237
 
22
238
  /**
23
239
  * Shifts a hex color toward black (negative `amount`) or white (positive),
@@ -42,12 +258,13 @@ export function withAlpha(hex, alpha) {
42
258
  return `rgba(${c.r}, ${c.g}, ${c.b}, ${alpha})`;
43
259
  }
44
260
 
45
- /** Picks black or white for legible text/icons on top of `hex`. */
261
+ /** Picks the higher-contrast black/white foreground for an opaque 6-digit hex. */
46
262
  export function readableOn(hex) {
47
263
  const c = parseHex(hex);
48
264
  if (!c) return "#ffffff";
49
- // Perceived luminance (0–1).
50
- const luminance = (0.299 * c.r + 0.587 * c.g + 0.114 * c.b) / 255;
51
- return luminance > 0.6 ? "#000000" : "#ffffff";
265
+ const luminance = relativeLuminance(c);
266
+ const blackContrast = (luminance + 0.05) / 0.05;
267
+ const whiteContrast = 1.05 / (luminance + 0.05);
268
+ return blackContrast >= whiteContrast ? "#000000" : "#ffffff";
52
269
  }
53
270
  //# sourceMappingURL=color-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["clamp","n","Math","max","min","round","parseHex","hex","hex6","exec","trim","int","Number","parseInt","r","g","b","toHex","map","v","toString","padStart","join","shade","amount","c","target","t","abs","withAlpha","alpha","readableOn","luminance"],"sourceRoot":"../../../src","sources":["utils/color-utils.ts"],"mappings":";;AAAA;;AAQA,MAAMA,KAAK,GAAIC,CAAS,IAAaC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAAC,GAAG,EAAEF,IAAI,CAACG,KAAK,CAACJ,CAAC,CAAC,CAAC,CAAC;AAE9E,SAASK,QAAQA,CAACC,GAAW,EAAc;EACzC,MAAMC,IAAI,GAAG,oBAAoB,CAACC,IAAI,CAACF,GAAG,CAACG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACvD,IAAI,CAACF,IAAI,EAAE,OAAO,IAAI;EACtB,MAAMG,GAAG,GAAGC,MAAM,CAACC,QAAQ,CAACL,IAAI,EAAE,EAAE,CAAC;EACrC,OAAO;IAAEM,CAAC,EAAGH,GAAG,IAAI,EAAE,GAAI,GAAG;IAAEI,CAAC,EAAGJ,GAAG,IAAI,CAAC,GAAI,GAAG;IAAEK,CAAC,EAAEL,GAAG,GAAG;EAAI,CAAC;AACpE;AAEA,MAAMM,KAAK,GAAGA,CAAC;EAAEH,CAAC;EAAEC,CAAC;EAAEC;AAAO,CAAC,KAC7B,IAAI,CAACF,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC,CAACE,GAAG,CAAEC,CAAC,IAAKnB,KAAK,CAACmB,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC,EAAE;;AAE7E;AACA;AACA;AACA;AACA,OAAO,SAASC,KAAKA,CAAChB,GAAW,EAAEiB,MAAc,EAAU;EACzD,MAAMC,CAAC,GAAGnB,QAAQ,CAACC,GAAG,CAAC;EACvB,IAAI,CAACkB,CAAC,EAAE,OAAOlB,GAAG;EAClB,MAAMmB,MAAM,GAAGF,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;EACnC,MAAMG,CAAC,GAAGzB,IAAI,CAAC0B,GAAG,CAACJ,MAAM,CAAC;EAC1B,OAAOP,KAAK,CAAC;IACXH,CAAC,EAAEW,CAAC,CAACX,CAAC,GAAG,CAACY,MAAM,GAAGD,CAAC,CAACX,CAAC,IAAIa,CAAC;IAC3BZ,CAAC,EAAEU,CAAC,CAACV,CAAC,GAAG,CAACW,MAAM,GAAGD,CAAC,CAACV,CAAC,IAAIY,CAAC;IAC3BX,CAAC,EAAES,CAAC,CAACT,CAAC,GAAG,CAACU,MAAM,GAAGD,CAAC,CAACT,CAAC,IAAIW;EAC5B,CAAC,CAAC;AACJ;;AAEA;AACA,OAAO,SAASE,SAASA,CAACtB,GAAW,EAAEuB,KAAa,EAAU;EAC5D,MAAML,CAAC,GAAGnB,QAAQ,CAACC,GAAG,CAAC;EACvB,IAAI,CAACkB,CAAC,EAAE,OAAOlB,GAAG;EAClB,OAAO,QAAQkB,CAAC,CAACX,CAAC,KAAKW,CAAC,CAACV,CAAC,KAAKU,CAAC,CAACT,CAAC,KAAKc,KAAK,GAAG;AACjD;;AAEA;AACA,OAAO,SAASC,UAAUA,CAACxB,GAAW,EAAU;EAC9C,MAAMkB,CAAC,GAAGnB,QAAQ,CAACC,GAAG,CAAC;EACvB,IAAI,CAACkB,CAAC,EAAE,OAAO,SAAS;EACxB;EACA,MAAMO,SAAS,GAAG,CAAC,KAAK,GAAGP,CAAC,CAACX,CAAC,GAAG,KAAK,GAAGW,CAAC,CAACV,CAAC,GAAG,KAAK,GAAGU,CAAC,CAACT,CAAC,IAAI,GAAG;EACjE,OAAOgB,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,SAAS;AAChD","ignoreList":[]}
1
+ {"version":3,"names":["clamp255","n","Math","max","min","round","clamp01","parseHex","hex","hex6","exec","trim","int","Number","parseInt","r","g","b","toHex","map","v","toString","padStart","join","rgbToHex","rgb","parseColor","value","input","undefined","length","a","ch","channels","filter","start","slice","fn","parts","split","part","channel","percent","endsWith","isFinite","alpha","compositeOver","front","back","linearizeChannel","srgb","delinearizeChannel","linear","relativeLuminance","contrastRatio","la","lb","compositedContrast","fg","bg","surface","opacity","background","foreground","cbrt","x","linearSrgbToOklab","l","m","s","oklabToLinearSrgb","L","rgbToOklch","c","hypot","h","atan2","PI","oklchToLinear","rad","cos","sin","GAMUT_EPSILON","inGamut","every","oklchToRgb","color","lo","hi","i","mid","oklchToHex","shade","amount","target","t","abs","withAlpha","readableOn","luminance","blackContrast","whiteContrast"],"sourceRoot":"../../../src","sources":["utils/color-utils.ts"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  /** Recursively makes every property (and nested property) optional. */
4
4
 
5
- const isPlainObject = value => typeof value === "object" && value !== null && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype;
5
+ export const isPlainObject = value => typeof value === "object" && value !== null && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype;
6
6
 
7
7
  /**
8
8
  * Deep-merges `override` onto `base`, returning a new object.
@@ -1 +1 @@
1
- {"version":3,"names":["isPlainObject","value","Array","isArray","Object","getPrototypeOf","prototype","deepMerge","base","override","undefined","result","key","keys","overrideValue","baseValue"],"sourceRoot":"../../../src","sources":["utils/deep-merge.ts"],"mappings":";;AAAA;;AAOA,MAAMA,aAAa,GAAIC,KAAc,IACnC,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,KAAK,IAAI,IACd,CAACC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,IACrBG,MAAM,CAACC,cAAc,CAACJ,KAAK,CAAC,KAAKG,MAAM,CAACE,SAAS;;AAEnD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAAIC,IAAO,EAAEC,QAAyB,EAAK;EAClE,IAAIA,QAAQ,KAAKC,SAAS,EAAE,OAAOF,IAAI;EACvC,IAAI,CAACR,aAAa,CAACQ,IAAI,CAAC,IAAI,CAACR,aAAa,CAACS,QAAQ,CAAC,EAAE;IACpD,OAAQA,QAAQ,IAAqBD,IAAI;EAC3C;EAEA,MAAMG,MAA+B,GAAG;IAAE,GAAGH;EAAK,CAAC;EACnD,KAAK,MAAMI,GAAG,IAAIR,MAAM,CAACS,IAAI,CAACJ,QAAQ,CAAC,EAAE;IACvC,MAAMK,aAAa,GAAIL,QAAQ,CAA6BG,GAAG,CAAC;IAChE,IAAIE,aAAa,KAAKJ,SAAS,EAAE;IACjC,MAAMK,SAAS,GAAIP,IAAI,CAA6BI,GAAG,CAAC;IACxDD,MAAM,CAACC,GAAG,CAAC,GACTZ,aAAa,CAACe,SAAS,CAAC,IAAIf,aAAa,CAACc,aAAa,CAAC,GACpDP,SAAS,CAACQ,SAAS,EAAED,aAA8C,CAAC,GACpEA,aAAa;EACrB;EACA,OAAOH,MAAM;AACf","ignoreList":[]}
1
+ {"version":3,"names":["isPlainObject","value","Array","isArray","Object","getPrototypeOf","prototype","deepMerge","base","override","undefined","result","key","keys","overrideValue","baseValue"],"sourceRoot":"../../../src","sources":["utils/deep-merge.ts"],"mappings":";;AAAA;;AAOA,OAAO,MAAMA,aAAa,GAAIC,KAAc,IAC1C,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,KAAK,IAAI,IACd,CAACC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,IACrBG,MAAM,CAACC,cAAc,CAACJ,KAAK,CAAC,KAAKG,MAAM,CAACE,SAAS;;AAEnD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAAIC,IAAO,EAAEC,QAAyB,EAAK;EAClE,IAAIA,QAAQ,KAAKC,SAAS,EAAE,OAAOF,IAAI;EACvC,IAAI,CAACR,aAAa,CAACQ,IAAI,CAAC,IAAI,CAACR,aAAa,CAACS,QAAQ,CAAC,EAAE;IACpD,OAAQA,QAAQ,IAAqBD,IAAI;EAC3C;EAEA,MAAMG,MAA+B,GAAG;IAAE,GAAGH;EAAK,CAAC;EACnD,KAAK,MAAMI,GAAG,IAAIR,MAAM,CAACS,IAAI,CAACJ,QAAQ,CAAC,EAAE;IACvC,MAAMK,aAAa,GAAIL,QAAQ,CAA6BG,GAAG,CAAC;IAChE,IAAIE,aAAa,KAAKJ,SAAS,EAAE;IACjC,MAAMK,SAAS,GAAIP,IAAI,CAA6BI,GAAG,CAAC;IACxDD,MAAM,CAACC,GAAG,CAAC,GACTZ,aAAa,CAACe,SAAS,CAAC,IAAIf,aAAa,CAACc,aAAa,CAAC,GACpDP,SAAS,CAACQ,SAAS,EAAED,aAA8C,CAAC,GACpEA,aAAa;EACrB;EACA,OAAOH,MAAM;AACf","ignoreList":[]}
@@ -7,8 +7,8 @@ const isColorLiteral = value => value.startsWith("#") || value.startsWith("rgb")
7
7
  * Raw literals pass through unchanged.
8
8
  *
9
9
  * @example
10
- * resolveThemeColor('text.default', theme) // → '#020618'
11
- * resolveThemeColor('action.bg.primary', theme) // → '#009966'
10
+ * resolveThemeColor('text.primary', theme) // → '#020618'
11
+ * resolveThemeColor('accent.solid.bg', theme) // → '#009966'
12
12
  * resolveThemeColor('#ff0000', theme) // → '#ff0000'
13
13
  */
14
14
  export function resolveThemeColor(token, theme) {
@@ -2,7 +2,7 @@ export type ChipSize = "sm" | "md" | "lg";
2
2
  export type ChipVariant = "solid" | "soft" | "outline" | "ghost";
3
3
  /**
4
4
  * Semantic color scheme, or a raw CSS color literal (`#fff`, `rgb(...)`, `hsl(...)`).
5
- * Has no effect when `variant="ghost"` — ghost always renders `text.default`.
5
+ * Has no effect when `variant="ghost"` — ghost always renders `text.primary`.
6
6
  */
7
7
  export type ChipColor = "primary" | "secondary" | "success" | "warning" | "danger" | (string & {});
8
8
  //# sourceMappingURL=types.d.ts.map
@@ -5,7 +5,7 @@ import type { EmptyStateSize } from "./types.js";
5
5
  export interface EmptyStateProps extends Omit<ViewProps, "children"> {
6
6
  /** Icon rendered in the circular badge above the title. */
7
7
  icon?: TerraIconName;
8
- /** Icon tint. Defaults to `text.subtle`. */
8
+ /** Icon tint. Defaults to `text.tertiary`. */
9
9
  iconColor?: ColorToken;
10
10
  /**
11
11
  * Replaces the icon badge entirely — an illustration, `Image`, or any custom
@@ -1 +1 @@
1
- {"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../../../src/components/empty-state/EmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAe,MAAM,cAAc,CAAC;AAG3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAS,CAAC;AAE9C,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IAClE,2DAA2D;IAC3D,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,qEAAqE;IACrE,KAAK,EAAE,SAAS,CAAC;IACjB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA0BD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,6LA4CrB,CAAC"}
1
+ {"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../../../src/components/empty-state/EmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAe,MAAM,cAAc,CAAC;AAG3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAS,CAAC;AAE9C,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IAClE,2DAA2D;IAC3D,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,qEAAqE;IACrE,KAAK,EAAE,SAAS,CAAC;IACjB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA0BD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,6LA4CrB,CAAC"}
@@ -10,11 +10,12 @@ export interface LargeTitleHeaderProps extends TitleHeaderProps {
10
10
  /**
11
11
  * iOS-style collapsing large-title header. The large title is injected (via the
12
12
  * `Screen`'s portal) into the top of the scroll content, so it scrolls away
13
- * naturally; the compact bar title cross-fades and slides in over the measured
14
- * portal height. Native scroll snap (`snapToOffsets`) settles between expanded
15
- * and collapsed when released mid-collapse.
13
+ * naturally; the compact title cross-fades over the theme header height.
14
+ * The top safe area and bar overlay fade from transparent when expanded to
15
+ * the header background when collapsed. The large-title content stays transparent.
16
+ * Snapping is opt-in through the scroll container's snapToOffsets.
16
17
  *
17
- * Must be used inside a `Screen` with a `Screen.ScrollView` / `Screen.FlatList`.
18
+ * Must be used inside a `Screen` with a `Screen.ScrollView` or `Screen.List`.
18
19
  *
19
20
  * @example
20
21
  * ```tsx
@@ -27,5 +28,5 @@ export interface LargeTitleHeaderProps extends TitleHeaderProps {
27
28
  * </Screen.Header>
28
29
  * ```
29
30
  */
30
- export declare function LargeTitleHeader({ title, overline, subtitle, LeftToolbar, RightToolbar, dismissAction, navigation, onDismiss, titleAlignment, isLargeTitleHidden, bg, }: LargeTitleHeaderProps): import("react").JSX.Element;
31
+ export declare function LargeTitleHeader({ title, overline, subtitle, leadingActions, trailingActions, LeftToolbar, RightToolbar, dismissAction, navigation, onDismiss, titleAlignment, isLargeTitleHidden, background, bg, }: LargeTitleHeaderProps): import("react").JSX.Element;
31
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/header/variants/LargeTitleHeader/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAgB,CAAC;AASvD,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AA0DD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,aAAsB,EACtB,UAAU,EACV,SAAS,EACT,cAAyB,EACzB,kBAA0B,EAC1B,EAAiB,GAClB,EAAE,qBAAqB,+BAuGvB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/header/variants/LargeTitleHeader/index.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAgB,CAAC;AASvD,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AA0DD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,aAAsB,EACtB,UAAU,EACV,SAAS,EACT,cAAyB,EACzB,kBAA0B,EAC1B,UAAU,EACV,EAAE,GACH,EAAE,qBAAqB,+BA2GvB"}
@@ -1,4 +1,4 @@
1
- import type { ReactNode } from "react";
1
+ import { type ReactNode } from "react";
2
2
  import type { ColorToken } from "../../../../theme/types";
3
3
  import { type HeaderDismissProps } from "../../header-buttons.js";
4
4
  export interface TitleHeaderProps extends HeaderDismissProps {
@@ -7,20 +7,26 @@ export interface TitleHeaderProps extends HeaderDismissProps {
7
7
  * Leading-side actions, wrapped in a `Toolbar` row. Pass `Toolbar.Group` /
8
8
  * `Toolbar.Button` children directly — no `Toolbar` of your own.
9
9
  */
10
+ leadingActions?: ReactNode;
11
+ /** @deprecated Use leadingActions. */
10
12
  LeftToolbar?: ReactNode;
11
13
  /**
12
14
  * Trailing-side actions, wrapped in a `Toolbar` row. Pass `Toolbar.Group` /
13
15
  * `Toolbar.Button` children directly — no `Toolbar` of your own.
14
16
  */
17
+ trailingActions?: ReactNode;
18
+ /** @deprecated Use trailingActions. */
15
19
  RightToolbar?: ReactNode;
16
20
  /** Title placement within the bar. Defaults to `'center'`. */
17
21
  titleAlignment?: "center" | "left";
18
- /** Background color token. Defaults to `surface.default`. */
22
+ /** Color token for the top safe area and fading bar overlay. Defaults to the Screen background. */
23
+ background?: ColorToken;
24
+ /** @deprecated Use background. */
19
25
  bg?: ColorToken;
20
26
  }
21
27
  /**
22
28
  * Compact title bar (leading slot · title · trailing slot) with a top safe-area
23
- * inset. The inline counterpart to `Header.LargeTitle`; use it for screens that
29
+ * inset outside Screen. Within Screen, the root owns safe-area clearance. The inline counterpart to `Header.LargeTitle`; use it for screens that
24
30
  * don't need a collapsing large title.
25
31
  *
26
32
  * @example
@@ -28,12 +34,12 @@ export interface TitleHeaderProps extends HeaderDismissProps {
28
34
  * <Screen.Header>
29
35
  * <Header.Title
30
36
  * title="Stats"
31
- * RightToolbar={
37
+ * trailingActions={
32
38
  * <Toolbar.Button icon="add" accessibilityLabel="Add" onPress={add} />
33
39
  * }
34
40
  * />
35
41
  * </Screen.Header>
36
42
  * ```
37
43
  */
38
- export declare function TitleHeader({ title, LeftToolbar, RightToolbar, dismissAction, navigation, onDismiss, titleAlignment, bg, }: TitleHeaderProps): import("react").JSX.Element;
44
+ export declare function TitleHeader({ title, leadingActions, trailingActions, LeftToolbar, RightToolbar, dismissAction, navigation, onDismiss, titleAlignment, background, bg, }: TitleHeaderProps): import("react").JSX.Element;
39
45
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/header/variants/TitleHeader/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,yBAAsB,CAAC;AAGpF,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACnC,6DAA6D;IAC7D,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,YAAY,EACZ,aAAsB,EACtB,UAAU,EACV,SAAS,EACT,cAAyB,EACzB,EAAiB,GAClB,EAAE,gBAAgB,+BA6ClB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/header/variants/TitleHeader/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAKnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM/C,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,yBAAsB,CAAC;AAGpF,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,sCAAsC;IACtC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,uCAAuC;IACvC,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACnC,mGAAmG;IACnG,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kCAAkC;IAClC,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,aAAsB,EACtB,UAAU,EACV,SAAS,EACT,cAAyB,EACzB,UAAU,EACV,EAAE,GACH,EAAE,gBAAgB,+BAgDlB"}
@@ -5,7 +5,7 @@ export interface IconProps extends Omit<ViewProps, "children"> {
5
5
  name: TerraIconName;
6
6
  /** Icon size in density-independent pixels. Defaults to `20`. */
7
7
  size?: number;
8
- /** Theme color token or raw CSS color. Defaults to `text.default`. */
8
+ /** Theme color token or raw CSS color. Defaults to `text.primary`. */
9
9
  color?: ColorToken;
10
10
  strokeWidth?: number;
11
11
  }
@@ -15,7 +15,7 @@ export interface IconProps extends Omit<ViewProps, "children"> {
15
15
  *
16
16
  * @example
17
17
  * ```tsx
18
- * <Icon name="navigation.close" size={24} color="text.default" />
18
+ * <Icon name="navigation.close" size={24} color="text.primary" />
19
19
  * ```
20
20
  */
21
21
  export declare const Icon: import("react").ForwardRefExoticComponent<IconProps & import("react").RefAttributes<import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default>>;
@@ -1,25 +1,25 @@
1
1
  import { type ComponentPropsWithoutRef, type ComponentRef, type ElementType, Fragment, forwardRef, type PropsWithChildren, type ReactNode } from "react";
2
- import { View } from "react-native";
3
- import type { ViewProps } from "react-native-svg/lib/typescript/fabric/utils";
2
+ import { View, type ViewProps } from "react-native";
4
3
  import type { ColorToken } from "../../theme/types";
5
4
  import { ScreenFlatList } from "./ScreenFlatList.js";
6
5
  import { ScreenList } from "./ScreenList.js";
7
6
  import { ScreenScrollView } from "./ScreenScrollView.js";
8
- import type { ScreenMargins } from "./types.js";
7
+ import type { ScreenContentPadding, ScreenMargins, ScreenSafeArea as ScreenSafeAreaPolicy } from "./types.js";
8
+ /** Props for `Screen.Header`, including the props accepted by its `as` component. */
9
9
  export type ScreenHeaderProps<T extends ElementType = typeof Fragment> = PropsWithChildren<{
10
10
  /**
11
- * Component to render the header as. Defaults to `Fragment` (no
12
- * wrapper). Use this to cast the header to a different container,
13
- * e.g. `as={View}` — any extra props are forwarded to it.
11
+ * Header component or container.
12
+ * Additional props are forwarded to this component.
13
+ * @defaultValue Fragment
14
14
  */
15
15
  as?: T;
16
16
  } & Omit<ComponentPropsWithoutRef<T>, "children">>;
17
17
  /**
18
- * Marker slot identifying the screen's header its purpose is to let
19
- * `Screen` detect a header synchronously and drop the `top` safe-area edge
20
- * (the header manages its own top inset).
18
+ * Marks a child as the screen header so scroll containers reserve the header bar height.
21
19
  *
22
- * Place a `Header.Title` / `Header.LargeTitle` (or any custom header) inside it.
20
+ * Place this slot under `Screen`, optionally inside fragments. Custom wrapper
21
+ * components are not inspected. Use `as` to render a reusable custom header. Reserved
22
+ * space uses the theme's header height, not the custom header's measured height.
23
23
  *
24
24
  * @example
25
25
  * ```tsx
@@ -30,30 +30,59 @@ declare function ScreenHeader<T extends ElementType = typeof Fragment>({ childre
30
30
  declare namespace ScreenHeader {
31
31
  var displayName: string;
32
32
  }
33
+ /** Props for the screen root. Additional View props are forwarded to the root View. */
33
34
  export interface ScreenProps extends ViewProps {
35
+ /** Header, content, and overlays within the screen's scroll and portal providers. */
34
36
  children: ReactNode;
35
- /** Background color token. Defaults to the `background` token. */
37
+ /**
38
+ * Background color token shared by the root and scroll containers.
39
+ * A root `style.backgroundColor` override does not update the shared color.
40
+ * @defaultValue "surface.canvas"
41
+ */
36
42
  background?: ColorToken;
37
- /** Hosted inside a tab navigator? Exposed via `useScreen()`. Default false. */
43
+ /** @deprecated Has no effect. Bottom safe-area clearance is detected automatically. */
38
44
  inTabView?: boolean;
39
45
  /**
40
- * Which axes of `layout.screen.margin` the scroll containers pad their
41
- * content with. Default `'all'`. Overridable per scroll container.
46
+ * Axes that receive `layout.screen.padding` content padding in scroll containers.
47
+ * Does not pad the root View. Each scroll container can override this value.
48
+ * @defaultValue "all"
42
49
  */
50
+ contentPadding?: ScreenContentPadding;
51
+ /** Native safe-area edges applied once to the root. @defaultValue "auto" */
52
+ safeArea?: ScreenSafeAreaPolicy;
53
+ /** @deprecated Use contentPadding. */
43
54
  margins?: ScreenMargins;
44
55
  /**
45
- * @deprecated Use `margins` `false` maps to `margins="none"`. Ignored when
46
- * `margins` is set.
56
+ * @deprecated Use `contentPadding`. False maps to "none".
47
57
  */
48
58
  hasMargins?: boolean;
49
59
  }
50
60
  type ScreenComponent = ReturnType<typeof forwardRef<ComponentRef<typeof View>, ScreenProps>> & {
61
+ /** Header slot; supports direct children and fragments. */
51
62
  Header: typeof ScreenHeader;
63
+ /** Scrollable content with themed padding and loading/empty placeholders. */
52
64
  ScrollView: typeof ScreenScrollView;
53
65
  /** @deprecated Use {@link ScreenList} (`Screen.List`) instead. */
54
66
  FlatList: typeof ScreenFlatList;
67
+ /** Virtualized content using FlatList or a compatible custom list. */
55
68
  List: typeof ScreenList;
56
69
  };
70
+ /**
71
+ * Themed screen root with shared scroll state and a local header portal.
72
+ *
73
+ * Pair a `Screen.Header` child with one primary `Screen.ScrollView`
74
+ * or `Screen.List`. The root applies safe-area clearance to all children;
75
+ * scroll containers add themed content padding and header clearance. The ref targets
76
+ * the root View, not the scroll container.
77
+ *
78
+ * @example
79
+ * ```tsx
80
+ * <Screen contentPadding="x" safeArea="auto">
81
+ * <Screen.Header as={Header.LargeTitle} title="Meditate" />
82
+ * <Screen.ScrollView>{content}</Screen.ScrollView>
83
+ * </Screen>
84
+ * ```
85
+ */
57
86
  export declare const Screen: ScreenComponent;
58
87
  export {};
59
88
  //# sourceMappingURL=Screen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Screen.d.ts","sourceRoot":"","sources":["../../../../../src/components/screen/Screen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,QAAQ,EACR,UAAU,EAEV,KAAK,iBAAiB,EACtB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAG9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAS,CAAC;AAE7C,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,OAAO,QAAQ,IAAI,iBAAiB,CACxF;IACE;;;;OAIG;IACH,EAAE,CAAC,EAAE,CAAC,CAAC;CACR,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAClD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,iBAAS,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,OAAO,QAAQ,EAAE,EAC7D,QAAQ,EACR,EAAE,EACF,GAAG,IAAI,EACR,EAAE,iBAAiB,CAAC,CAAC,CAAC,+BAGtB;kBAPQ,YAAY;;;AAyBrB,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,QAAQ,EAAE,SAAS,CAAC;IACpB,kEAAkE;IAClE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG;IAC7F,MAAM,EAAE,OAAO,YAAY,CAAC;IAC5B,UAAU,EAAE,OAAO,gBAAgB,CAAC;IACpC,kEAAkE;IAClE,QAAQ,EAAE,OAAO,cAAc,CAAC;IAChC,IAAI,EAAE,OAAO,UAAU,CAAC;CACzB,CAAC;AAsCF,eAAO,MAAM,MAAM,iBAAa,CAAC"}
1
+ {"version":3,"file":"Screen.d.ts","sourceRoot":"","sources":["../../../../../src/components/screen/Screen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,QAAQ,EACR,UAAU,EAEV,KAAK,iBAAiB,EACtB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,IAAI,oBAAoB,EAAE,MAAM,YAAS,CAAC;AAG3G,qFAAqF;AACrF,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,OAAO,QAAQ,IAAI,iBAAiB,CACxF;IACE;;;;OAIG;IACH,EAAE,CAAC,EAAE,CAAC,CAAC;CACR,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAClD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,iBAAS,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,OAAO,QAAQ,EAAE,EAC7D,QAAQ,EACR,EAAE,EACF,GAAG,IAAI,EACR,EAAE,iBAAiB,CAAC,CAAC,CAAC,+BAOtB;kBAXQ,YAAY;;;AA+BrB,uFAAuF;AACvF,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,qFAAqF;IACrF,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,uFAAuF;IACvF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,sCAAsC;IACtC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG;IAC7F,2DAA2D;IAC3D,MAAM,EAAE,OAAO,YAAY,CAAC;IAC5B,6EAA6E;IAC7E,UAAU,EAAE,OAAO,gBAAgB,CAAC;IACpC,kEAAkE;IAClE,QAAQ,EAAE,OAAO,cAAc,CAAC;IAChC,sEAAsE;IACtE,IAAI,EAAE,OAAO,UAAU,CAAC;CACzB,CAAC;AA6CF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,MAAM,iBAAa,CAAC"}