react-native-terra-ui 0.5.1 → 0.7.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 (359) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/lib/module/components/avatar/Avatar.js +60 -60
  3. package/lib/module/components/avatar/Avatar.js.map +1 -1
  4. package/lib/module/components/box/Box.js +2 -2
  5. package/lib/module/components/box/Box.js.map +1 -1
  6. package/lib/module/components/box/utils.js +19 -19
  7. package/lib/module/components/box/utils.js.map +1 -1
  8. package/lib/module/components/button/Button.js +54 -48
  9. package/lib/module/components/button/Button.js.map +1 -1
  10. package/lib/module/components/chip/Chip.js +94 -94
  11. package/lib/module/components/chip/Chip.js.map +1 -1
  12. package/lib/module/components/chip/utils.js +3 -3
  13. package/lib/module/components/empty-state/EmptyState.js +40 -40
  14. package/lib/module/components/empty-state/EmptyState.js.map +1 -1
  15. package/lib/module/components/header/header-buttons.js +5 -5
  16. package/lib/module/components/header/header-buttons.js.map +1 -1
  17. package/lib/module/components/header/parts/HeaderGradientOverlay.js +82 -12
  18. package/lib/module/components/header/parts/HeaderGradientOverlay.js.map +1 -1
  19. package/lib/module/components/header/variants/LargeTitleHeader/index.js +64 -60
  20. package/lib/module/components/header/variants/LargeTitleHeader/index.js.map +1 -1
  21. package/lib/module/components/header/variants/TitleHeader/index.js +33 -29
  22. package/lib/module/components/header/variants/TitleHeader/index.js.map +1 -1
  23. package/lib/module/components/icon/Icon.js +6 -6
  24. package/lib/module/components/icon/Icon.js.map +1 -1
  25. package/lib/module/components/image/Image.js +6 -6
  26. package/lib/module/components/image/Image.js.map +1 -1
  27. package/lib/module/components/page-indicator/PageIndicator.js +1 -1
  28. package/lib/module/components/page-indicator/PageIndicatorRoot.js.map +1 -1
  29. package/lib/module/components/page-indicator/hooks/use-page-indicator-colors.js +8 -8
  30. package/lib/module/components/page-indicator/hooks/use-page-indicator-colors.js.map +1 -1
  31. package/lib/module/components/page-indicator/hooks/use-page-indicator-core.js.map +1 -1
  32. package/lib/module/components/page-indicator/hooks/use-page-indicator-progress.js +6 -6
  33. package/lib/module/components/page-indicator/hooks/use-page-indicator-progress.js.map +1 -1
  34. package/lib/module/components/page-indicator/utils.js +8 -8
  35. package/lib/module/components/page-indicator/utils.js.map +1 -1
  36. package/lib/module/components/page-indicator/variants/DotIndicator/InactiveDot.js +2 -2
  37. package/lib/module/components/page-indicator/variants/DotIndicator/InactiveDot.js.map +1 -1
  38. package/lib/module/components/page-indicator/variants/DotIndicator/LoadingOrbit.js +9 -9
  39. package/lib/module/components/page-indicator/variants/DotIndicator/LoadingOrbit.js.map +1 -1
  40. package/lib/module/components/page-indicator/variants/DotIndicator/TravelingPill.js +2 -2
  41. package/lib/module/components/page-indicator/variants/DotIndicator/TravelingPill.js.map +1 -1
  42. package/lib/module/components/page-indicator/variants/DotIndicator/index.js +3 -3
  43. package/lib/module/components/page-indicator/variants/DotIndicator/index.js.map +1 -1
  44. package/lib/module/components/page-indicator/variants/DotIndicator/utils.js +1 -1
  45. package/lib/module/components/page-indicator/variants/DotIndicator/utils.js.map +1 -1
  46. package/lib/module/components/page-indicator/variants/PillIndicator/PillIndicatorDot.js +1 -1
  47. package/lib/module/components/page-indicator/variants/PillIndicator/PillIndicatorDot.js.map +1 -1
  48. package/lib/module/components/page-indicator/variants/PillIndicator/index.js +5 -5
  49. package/lib/module/components/page-indicator/variants/PillIndicator/index.js.map +1 -1
  50. package/lib/module/components/page-indicator/variants/PillIndicator/utils.js +3 -3
  51. package/lib/module/components/portal/Portal.js +1 -1
  52. package/lib/module/components/portal/PortalContext.js +1 -1
  53. package/lib/module/components/portal/PortalHost.js +1 -1
  54. package/lib/module/components/portal/PortalProvider.js +1 -1
  55. package/lib/module/components/portal/PortalProvider.js.map +1 -1
  56. package/lib/module/components/screen/Screen.js +8 -8
  57. package/lib/module/components/screen/Screen.js.map +1 -1
  58. package/lib/module/components/screen/ScreenContext.js +6 -6
  59. package/lib/module/components/screen/ScreenContext.js.map +1 -1
  60. package/lib/module/components/screen/ScreenFlatList.js +3 -3
  61. package/lib/module/components/screen/ScreenFlatList.js.map +1 -1
  62. package/lib/module/components/screen/ScreenList.js +5 -5
  63. package/lib/module/components/screen/ScreenList.js.map +1 -1
  64. package/lib/module/components/screen/ScreenScrollView.js +6 -6
  65. package/lib/module/components/screen/ScreenScrollView.js.map +1 -1
  66. package/lib/module/components/screen/parts/BottomSafeArea.js +1 -1
  67. package/lib/module/components/screen/parts/BottomSafeArea.js.map +1 -1
  68. package/lib/module/components/screen/parts/ScreenPlaceholder.js +3 -3
  69. package/lib/module/components/screen/parts/ScreenPlaceholder.js.map +1 -1
  70. package/lib/module/components/screen/utils.js +3 -3
  71. package/lib/module/components/screen/utils.js.map +1 -1
  72. package/lib/module/components/slot/Slot.js +2 -2
  73. package/lib/module/components/slot/Slot.js.map +1 -1
  74. package/lib/module/components/slot/utils.js +3 -3
  75. package/lib/module/components/slot/utils.js.map +1 -1
  76. package/lib/module/components/spinner/Spinner.js +10 -10
  77. package/lib/module/components/spinner/Spinner.js.map +1 -1
  78. package/lib/module/components/surface/Surface.js +14 -14
  79. package/lib/module/components/surface/Surface.js.map +1 -1
  80. package/lib/module/components/text/Text.js +13 -13
  81. package/lib/module/components/text/Text.js.map +1 -1
  82. package/lib/module/components/toast/Toast.js +46 -46
  83. package/lib/module/components/toast/Toast.js.map +1 -1
  84. package/lib/module/components/toast/ToastProvider.js +32 -32
  85. package/lib/module/components/toast/ToastProvider.js.map +1 -1
  86. package/lib/module/components/toast/parts/ToastAnimatedItem.js +10 -10
  87. package/lib/module/components/toast/parts/ToastAnimatedItem.js.map +1 -1
  88. package/lib/module/components/toast/utils/controller.js +2 -2
  89. package/lib/module/components/toast/utils/controller.js.map +1 -1
  90. package/lib/module/components/toolbar/Toolbar.js +103 -33
  91. package/lib/module/components/toolbar/Toolbar.js.map +1 -1
  92. package/lib/module/context/ThemeProvider.js +5 -5
  93. package/lib/module/context/ThemeProvider.js.map +1 -1
  94. package/lib/module/theme/breakpoints.js.map +1 -1
  95. package/lib/module/theme/defaults/icons.js +11 -11
  96. package/lib/module/theme/defaults/icons.js.map +1 -1
  97. package/lib/module/theme/defaults/image.js +7 -7
  98. package/lib/module/theme/defaults/image.js.map +1 -1
  99. package/lib/module/theme/registry.js +11 -11
  100. package/lib/module/theme/registry.js.map +1 -1
  101. package/lib/module/theme/runtime.js +3 -3
  102. package/lib/module/theme/runtime.js.map +1 -1
  103. package/lib/module/theme/theme.js +9 -9
  104. package/lib/module/theme/theme.js.map +1 -1
  105. package/lib/module/theme/tokens/dark.js +67 -67
  106. package/lib/module/theme/tokens/dark.js.map +1 -1
  107. package/lib/module/theme/tokens/light.js +67 -67
  108. package/lib/module/theme/tokens/primitives.js +417 -417
  109. package/lib/module/utils/accent-utils.js +16 -16
  110. package/lib/module/utils/accent-utils.js.map +1 -1
  111. package/lib/module/utils/color-utils.js +3 -3
  112. package/lib/module/utils/deep-merge.js +1 -1
  113. package/lib/module/utils/resolve-theme-color.js +2 -2
  114. package/lib/module/utils/resolve-theme-color.js.map +1 -1
  115. package/lib/module/utils/typography.js +5 -5
  116. package/lib/module/utils/typography.js.map +1 -1
  117. package/lib/module/utils/unflatten.js +2 -2
  118. package/lib/typescript/src/components/avatar/Avatar.d.ts +1 -1
  119. package/lib/typescript/src/components/avatar/Avatar.d.ts.map +1 -1
  120. package/lib/typescript/src/components/avatar/index.d.ts +2 -2
  121. package/lib/typescript/src/components/avatar/types.d.ts +7 -7
  122. package/lib/typescript/src/components/avatar/types.d.ts.map +1 -1
  123. package/lib/typescript/src/components/box/Box.d.ts +2 -2
  124. package/lib/typescript/src/components/box/Box.d.ts.map +1 -1
  125. package/lib/typescript/src/components/box/index.d.ts +3 -3
  126. package/lib/typescript/src/components/box/utils.d.ts +7 -7
  127. package/lib/typescript/src/components/box/utils.d.ts.map +1 -1
  128. package/lib/typescript/src/components/button/Button.d.ts +15 -8
  129. package/lib/typescript/src/components/button/Button.d.ts.map +1 -1
  130. package/lib/typescript/src/components/button/index.d.ts +2 -2
  131. package/lib/typescript/src/components/chip/Chip.d.ts +5 -5
  132. package/lib/typescript/src/components/chip/Chip.d.ts.map +1 -1
  133. package/lib/typescript/src/components/chip/index.d.ts +3 -3
  134. package/lib/typescript/src/components/chip/types.d.ts +3 -3
  135. package/lib/typescript/src/components/chip/utils.d.ts +1 -1
  136. package/lib/typescript/src/components/empty-state/EmptyState.d.ts +5 -5
  137. package/lib/typescript/src/components/empty-state/EmptyState.d.ts.map +1 -1
  138. package/lib/typescript/src/components/empty-state/index.d.ts +3 -3
  139. package/lib/typescript/src/components/empty-state/types.d.ts +1 -1
  140. package/lib/typescript/src/components/header/Header.d.ts +2 -2
  141. package/lib/typescript/src/components/header/header-buttons.d.ts +3 -3
  142. package/lib/typescript/src/components/header/header-buttons.d.ts.map +1 -1
  143. package/lib/typescript/src/components/header/index.d.ts +6 -6
  144. package/lib/typescript/src/components/header/parts/HeaderGradientOverlay.d.ts +19 -2
  145. package/lib/typescript/src/components/header/parts/HeaderGradientOverlay.d.ts.map +1 -1
  146. package/lib/typescript/src/components/header/variants/LargeTitleHeader/index.d.ts +1 -1
  147. package/lib/typescript/src/components/header/variants/LargeTitleHeader/index.d.ts.map +1 -1
  148. package/lib/typescript/src/components/header/variants/TitleHeader/index.d.ts +4 -4
  149. package/lib/typescript/src/components/header/variants/TitleHeader/index.d.ts.map +1 -1
  150. package/lib/typescript/src/components/icon/Icon.d.ts +3 -3
  151. package/lib/typescript/src/components/icon/Icon.d.ts.map +1 -1
  152. package/lib/typescript/src/components/icon/index.d.ts +2 -2
  153. package/lib/typescript/src/components/image/Image.d.ts +1 -1
  154. package/lib/typescript/src/components/image/Image.d.ts.map +1 -1
  155. package/lib/typescript/src/components/image/index.d.ts +2 -2
  156. package/lib/typescript/src/components/image/types.d.ts +1 -1
  157. package/lib/typescript/src/components/index.d.ts +17 -17
  158. package/lib/typescript/src/components/page-indicator/PageIndicator.d.ts +10 -10
  159. package/lib/typescript/src/components/page-indicator/PageIndicatorRoot.d.ts +2 -2
  160. package/lib/typescript/src/components/page-indicator/PageIndicatorRoot.d.ts.map +1 -1
  161. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-colors.d.ts +1 -1
  162. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-colors.d.ts.map +1 -1
  163. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-core.d.ts +3 -3
  164. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-core.d.ts.map +1 -1
  165. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-progress.d.ts +2 -2
  166. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-progress.d.ts.map +1 -1
  167. package/lib/typescript/src/components/page-indicator/index.d.ts +3 -3
  168. package/lib/typescript/src/components/page-indicator/utils.d.ts +2 -2
  169. package/lib/typescript/src/components/page-indicator/utils.d.ts.map +1 -1
  170. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/InactiveDot.d.ts +1 -1
  171. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/InactiveDot.d.ts.map +1 -1
  172. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/LoadingOrbit.d.ts +2 -2
  173. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/LoadingOrbit.d.ts.map +1 -1
  174. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/TravelingPill.d.ts +2 -2
  175. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/TravelingPill.d.ts.map +1 -1
  176. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/index.d.ts +3 -3
  177. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/index.d.ts.map +1 -1
  178. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/utils.d.ts.map +1 -1
  179. package/lib/typescript/src/components/page-indicator/variants/PillIndicator/PillIndicatorDot.d.ts +2 -2
  180. package/lib/typescript/src/components/page-indicator/variants/PillIndicator/PillIndicatorDot.d.ts.map +1 -1
  181. package/lib/typescript/src/components/page-indicator/variants/PillIndicator/index.d.ts +3 -3
  182. package/lib/typescript/src/components/page-indicator/variants/PillIndicator/index.d.ts.map +1 -1
  183. package/lib/typescript/src/components/page-indicator/variants/PillIndicator/utils.d.ts +1 -1
  184. package/lib/typescript/src/components/portal/Portal.d.ts +3 -3
  185. package/lib/typescript/src/components/portal/PortalContext.d.ts +1 -1
  186. package/lib/typescript/src/components/portal/PortalHost.d.ts +2 -2
  187. package/lib/typescript/src/components/portal/PortalProvider.d.ts +1 -1
  188. package/lib/typescript/src/components/portal/PortalProvider.d.ts.map +1 -1
  189. package/lib/typescript/src/components/portal/index.d.ts +7 -7
  190. package/lib/typescript/src/components/screen/Screen.d.ts +10 -10
  191. package/lib/typescript/src/components/screen/Screen.d.ts.map +1 -1
  192. package/lib/typescript/src/components/screen/ScreenContext.d.ts +3 -3
  193. package/lib/typescript/src/components/screen/ScreenContext.d.ts.map +1 -1
  194. package/lib/typescript/src/components/screen/ScreenFlatList.d.ts +3 -3
  195. package/lib/typescript/src/components/screen/ScreenFlatList.d.ts.map +1 -1
  196. package/lib/typescript/src/components/screen/ScreenList.d.ts +5 -5
  197. package/lib/typescript/src/components/screen/ScreenList.d.ts.map +1 -1
  198. package/lib/typescript/src/components/screen/ScreenScrollView.d.ts +5 -5
  199. package/lib/typescript/src/components/screen/ScreenScrollView.d.ts.map +1 -1
  200. package/lib/typescript/src/components/screen/index.d.ts +11 -11
  201. package/lib/typescript/src/components/screen/parts/BottomSafeArea.d.ts.map +1 -1
  202. package/lib/typescript/src/components/screen/parts/ScreenPlaceholder.d.ts +3 -3
  203. package/lib/typescript/src/components/screen/parts/ScreenPlaceholder.d.ts.map +1 -1
  204. package/lib/typescript/src/components/screen/types.d.ts +2 -2
  205. package/lib/typescript/src/components/screen/utils.d.ts +2 -2
  206. package/lib/typescript/src/components/screen/utils.d.ts.map +1 -1
  207. package/lib/typescript/src/components/slot/Slot.d.ts +2 -2
  208. package/lib/typescript/src/components/slot/Slot.d.ts.map +1 -1
  209. package/lib/typescript/src/components/slot/index.d.ts +3 -3
  210. package/lib/typescript/src/components/slot/utils.d.ts +1 -1
  211. package/lib/typescript/src/components/slot/utils.d.ts.map +1 -1
  212. package/lib/typescript/src/components/spinner/Spinner.d.ts +2 -2
  213. package/lib/typescript/src/components/spinner/Spinner.d.ts.map +1 -1
  214. package/lib/typescript/src/components/spinner/index.d.ts +2 -2
  215. package/lib/typescript/src/components/surface/Surface.d.ts +4 -4
  216. package/lib/typescript/src/components/surface/Surface.d.ts.map +1 -1
  217. package/lib/typescript/src/components/surface/index.d.ts +2 -2
  218. package/lib/typescript/src/components/text/Text.d.ts +4 -4
  219. package/lib/typescript/src/components/text/Text.d.ts.map +1 -1
  220. package/lib/typescript/src/components/text/index.d.ts +2 -2
  221. package/lib/typescript/src/components/toast/Toast.d.ts +18 -18
  222. package/lib/typescript/src/components/toast/Toast.d.ts.map +1 -1
  223. package/lib/typescript/src/components/toast/ToastProvider.d.ts +1 -1
  224. package/lib/typescript/src/components/toast/ToastProvider.d.ts.map +1 -1
  225. package/lib/typescript/src/components/toast/index.d.ts +4 -4
  226. package/lib/typescript/src/components/toast/parts/ToastAnimatedItem.d.ts +3 -3
  227. package/lib/typescript/src/components/toast/parts/ToastAnimatedItem.d.ts.map +1 -1
  228. package/lib/typescript/src/components/toast/types.d.ts +10 -10
  229. package/lib/typescript/src/components/toast/types.d.ts.map +1 -1
  230. package/lib/typescript/src/components/toast/utils/controller.d.ts +2 -2
  231. package/lib/typescript/src/components/toast/utils/controller.d.ts.map +1 -1
  232. package/lib/typescript/src/components/toolbar/Toolbar.d.ts +5 -5
  233. package/lib/typescript/src/components/toolbar/Toolbar.d.ts.map +1 -1
  234. package/lib/typescript/src/components/toolbar/index.d.ts +2 -2
  235. package/lib/typescript/src/context/ThemeProvider.d.ts +3 -3
  236. package/lib/typescript/src/context/ThemeProvider.d.ts.map +1 -1
  237. package/lib/typescript/src/context/index.d.ts +2 -2
  238. package/lib/typescript/src/index.d.ts +3 -3
  239. package/lib/typescript/src/theme/breakpoints.d.ts +2 -2
  240. package/lib/typescript/src/theme/breakpoints.d.ts.map +1 -1
  241. package/lib/typescript/src/theme/defaults/icons.d.ts +1 -1
  242. package/lib/typescript/src/theme/defaults/icons.d.ts.map +1 -1
  243. package/lib/typescript/src/theme/defaults/image.d.ts +1 -1
  244. package/lib/typescript/src/theme/defaults/image.d.ts.map +1 -1
  245. package/lib/typescript/src/theme/index.d.ts +14 -14
  246. package/lib/typescript/src/theme/registry.d.ts +2 -2
  247. package/lib/typescript/src/theme/registry.d.ts.map +1 -1
  248. package/lib/typescript/src/theme/runtime.d.ts +1 -1
  249. package/lib/typescript/src/theme/runtime.d.ts.map +1 -1
  250. package/lib/typescript/src/theme/screen-margin.d.ts +2 -2
  251. package/lib/typescript/src/theme/theme.d.ts +2 -2
  252. package/lib/typescript/src/theme/theme.d.ts.map +1 -1
  253. package/lib/typescript/src/theme/tokens/dark.d.ts +67 -67
  254. package/lib/typescript/src/theme/tokens/light.d.ts +67 -67
  255. package/lib/typescript/src/theme/tokens/primitives.d.ts +417 -417
  256. package/lib/typescript/src/theme/types.d.ts +84 -84
  257. package/lib/typescript/src/theme/types.d.ts.map +1 -1
  258. package/lib/typescript/src/utils/accent-utils.d.ts +1 -1
  259. package/lib/typescript/src/utils/accent-utils.d.ts.map +1 -1
  260. package/lib/typescript/src/utils/resolve-theme-color.d.ts +1 -1
  261. package/lib/typescript/src/utils/resolve-theme-color.d.ts.map +1 -1
  262. package/lib/typescript/src/utils/typography.d.ts +2 -2
  263. package/lib/typescript/src/utils/typography.d.ts.map +1 -1
  264. package/package.json +1 -1
  265. package/src/components/avatar/Avatar.tsx +66 -71
  266. package/src/components/avatar/index.ts +2 -2
  267. package/src/components/avatar/types.ts +7 -12
  268. package/src/components/box/Box.tsx +7 -18
  269. package/src/components/box/index.ts +3 -3
  270. package/src/components/box/utils.ts +59 -81
  271. package/src/components/button/Button.tsx +119 -144
  272. package/src/components/button/index.ts +2 -2
  273. package/src/components/chip/Chip.tsx +107 -143
  274. package/src/components/chip/index.ts +3 -3
  275. package/src/components/chip/types.ts +7 -7
  276. package/src/components/chip/utils.ts +5 -5
  277. package/src/components/empty-state/EmptyState.tsx +44 -60
  278. package/src/components/empty-state/index.ts +3 -3
  279. package/src/components/empty-state/types.ts +1 -1
  280. package/src/components/header/Header.ts +2 -2
  281. package/src/components/header/header-buttons.tsx +10 -18
  282. package/src/components/header/index.ts +6 -6
  283. package/src/components/header/parts/HeaderGradientOverlay.tsx +77 -11
  284. package/src/components/header/variants/LargeTitleHeader/index.tsx +79 -142
  285. package/src/components/header/variants/TitleHeader/index.tsx +45 -63
  286. package/src/components/icon/Icon.tsx +31 -39
  287. package/src/components/icon/index.ts +2 -2
  288. package/src/components/image/Image.tsx +12 -10
  289. package/src/components/image/index.ts +2 -2
  290. package/src/components/image/types.ts +1 -1
  291. package/src/components/index.ts +17 -17
  292. package/src/components/page-indicator/PageIndicator.tsx +14 -14
  293. package/src/components/page-indicator/PageIndicatorRoot.tsx +4 -12
  294. package/src/components/page-indicator/hooks/use-page-indicator-colors.ts +17 -35
  295. package/src/components/page-indicator/hooks/use-page-indicator-core.ts +6 -8
  296. package/src/components/page-indicator/hooks/use-page-indicator-progress.ts +10 -30
  297. package/src/components/page-indicator/index.ts +3 -3
  298. package/src/components/page-indicator/utils.ts +20 -48
  299. package/src/components/page-indicator/variants/DotIndicator/InactiveDot.tsx +5 -16
  300. package/src/components/page-indicator/variants/DotIndicator/LoadingOrbit.tsx +21 -63
  301. package/src/components/page-indicator/variants/DotIndicator/TravelingPill.tsx +6 -16
  302. package/src/components/page-indicator/variants/DotIndicator/index.tsx +20 -38
  303. package/src/components/page-indicator/variants/DotIndicator/utils.ts +2 -6
  304. package/src/components/page-indicator/variants/PillIndicator/PillIndicatorDot.tsx +12 -50
  305. package/src/components/page-indicator/variants/PillIndicator/index.tsx +19 -41
  306. package/src/components/page-indicator/variants/PillIndicator/utils.ts +4 -4
  307. package/src/components/portal/Portal.tsx +4 -4
  308. package/src/components/portal/PortalContext.tsx +1 -1
  309. package/src/components/portal/PortalHost.tsx +4 -4
  310. package/src/components/portal/PortalProvider.tsx +24 -35
  311. package/src/components/portal/index.ts +7 -7
  312. package/src/components/screen/Screen.tsx +45 -52
  313. package/src/components/screen/ScreenContext.tsx +8 -17
  314. package/src/components/screen/ScreenFlatList.tsx +17 -36
  315. package/src/components/screen/ScreenList.tsx +31 -63
  316. package/src/components/screen/ScreenScrollView.tsx +17 -30
  317. package/src/components/screen/index.ts +11 -11
  318. package/src/components/screen/parts/BottomSafeArea.tsx +5 -6
  319. package/src/components/screen/parts/ScreenPlaceholder.tsx +9 -14
  320. package/src/components/screen/types.ts +2 -2
  321. package/src/components/screen/utils.ts +6 -19
  322. package/src/components/slot/Slot.tsx +5 -20
  323. package/src/components/slot/index.ts +3 -3
  324. package/src/components/slot/utils.ts +5 -8
  325. package/src/components/spinner/Spinner.tsx +19 -52
  326. package/src/components/spinner/index.ts +2 -2
  327. package/src/components/surface/Surface.tsx +34 -43
  328. package/src/components/surface/index.ts +2 -2
  329. package/src/components/text/Text.tsx +75 -85
  330. package/src/components/text/index.ts +2 -2
  331. package/src/components/toast/Toast.tsx +195 -251
  332. package/src/components/toast/ToastProvider.tsx +61 -136
  333. package/src/components/toast/index.ts +4 -4
  334. package/src/components/toast/parts/ToastAnimatedItem.tsx +14 -22
  335. package/src/components/toast/types.ts +11 -14
  336. package/src/components/toast/utils/controller.ts +4 -6
  337. package/src/components/toolbar/Toolbar.tsx +117 -72
  338. package/src/components/toolbar/index.ts +2 -2
  339. package/src/context/ThemeProvider.tsx +13 -28
  340. package/src/context/index.ts +2 -2
  341. package/src/index.tsx +3 -3
  342. package/src/theme/breakpoints.ts +3 -5
  343. package/src/theme/defaults/icons.tsx +15 -30
  344. package/src/theme/defaults/image.tsx +9 -14
  345. package/src/theme/index.ts +14 -14
  346. package/src/theme/registry.ts +30 -49
  347. package/src/theme/runtime.ts +6 -7
  348. package/src/theme/screen-margin.ts +3 -3
  349. package/src/theme/theme.ts +39 -60
  350. package/src/theme/tokens/dark.ts +67 -67
  351. package/src/theme/tokens/light.ts +67 -67
  352. package/src/theme/tokens/primitives.ts +417 -417
  353. package/src/theme/types.ts +123 -135
  354. package/src/utils/accent-utils.ts +21 -30
  355. package/src/utils/color-utils.ts +3 -3
  356. package/src/utils/deep-merge.ts +1 -1
  357. package/src/utils/resolve-theme-color.ts +8 -11
  358. package/src/utils/typography.ts +7 -10
  359. package/src/utils/unflatten.ts +2 -2
@@ -1,25 +1,17 @@
1
- import { useEffect } from 'react';
2
- import { Text, View } from 'react-native';
1
+ import { useEffect } from "react";
2
+ import { Text, View } from "react-native";
3
3
 
4
- import Animated, {
5
- interpolate,
6
- useAnimatedStyle,
7
- useSharedValue,
8
- } from 'react-native-reanimated';
9
- import { StyleSheet, useUnistyles } from 'react-native-unistyles';
4
+ import Animated, { interpolate, useAnimatedStyle, useSharedValue } from "react-native-reanimated";
5
+ import { StyleSheet, useUnistyles } from "react-native-unistyles";
10
6
 
11
- import { resolveThemeColor } from '#utils/resolve-theme-color';
12
- import { FONT_WEIGHT_VALUE } from '#utils/typography';
13
-
14
- import { Portal } from '../../../portal';
15
- import {
16
- SCREEN_HEADER_PORTAL_HOST,
17
- useScreen,
18
- } from '../../../screen/ScreenContext';
19
- import { Toolbar } from '../../../toolbar';
20
- import { HeaderDismissButton } from '../../header-buttons';
21
- import { HeaderGradientOverlay } from '../../parts/HeaderGradientOverlay';
22
- import type { TitleHeaderProps } from '../TitleHeader';
7
+ import { resolveThemeColor } from "#utils/resolve-theme-color";
8
+ import { FONT_WEIGHT_VALUE } from "#utils/typography";
9
+ import { Portal } from "../../../portal";
10
+ import { SCREEN_HEADER_PORTAL_HOST, useScreen } from "../../../screen/ScreenContext";
11
+ import { Toolbar } from "../../../toolbar";
12
+ import { HeaderDismissButton } from "../../header-buttons";
13
+ import { HEADER_FADE_EXTENT, HeaderGradientOverlay } from "../../parts/HeaderGradientOverlay";
14
+ import type { TitleHeaderProps } from "../TitleHeader";
23
15
 
24
16
  const AnimatedText = Animated.createAnimatedComponent(Text);
25
17
 
@@ -41,11 +33,8 @@ function LargeTitlePortalContent({
41
33
  title,
42
34
  overline,
43
35
  subtitle,
44
- titleAlignment = 'center',
45
- }: Pick<
46
- LargeTitleHeaderProps,
47
- 'title' | 'overline' | 'subtitle' | 'titleAlignment'
48
- >) {
36
+ titleAlignment = "center",
37
+ }: Pick<LargeTitleHeaderProps, "title" | "overline" | "subtitle" | "titleAlignment">) {
49
38
  const { theme } = useUnistyles();
50
39
  const { scrollY } = useScreen();
51
40
  styles.useVariants({ titleAlignment });
@@ -59,15 +48,10 @@ function LargeTitlePortalContent({
59
48
  }
60
49
 
61
50
  return {
62
- opacity: interpolate(scrollY.value, [0, height], [1, 0], 'clamp'),
51
+ opacity: interpolate(scrollY.value, [0, height], [1, 0], "clamp"),
63
52
  transform: [
64
53
  {
65
- translateY: interpolate(
66
- scrollY.value,
67
- [0, height],
68
- [0, -LARGE_TITLE_SLIDE_OFFSET],
69
- 'clamp'
70
- ),
54
+ translateY: interpolate(scrollY.value, [0, height], [0, -LARGE_TITLE_SLIDE_OFFSET], "clamp"),
71
55
  },
72
56
  ],
73
57
  };
@@ -78,27 +62,21 @@ function LargeTitlePortalContent({
78
62
  {!!overline && (
79
63
  <Text
80
64
  style={styles.overline}
81
- maxFontSizeMultiplier={
82
- theme.typography.variants['label-sm'].maxFontSizeMultiplier
83
- }
65
+ maxFontSizeMultiplier={theme.typography.variants["label-sm"].maxFontSizeMultiplier}
84
66
  >
85
67
  {overline}
86
68
  </Text>
87
69
  )}
88
70
  <Text
89
71
  style={styles.largeTitle}
90
- maxFontSizeMultiplier={
91
- theme.typography.variants['headline-lg'].maxFontSizeMultiplier
92
- }
72
+ maxFontSizeMultiplier={theme.typography.variants["headline-lg"].maxFontSizeMultiplier}
93
73
  >
94
74
  {title}
95
75
  </Text>
96
76
  {!!subtitle && (
97
77
  <Text
98
78
  style={styles.subtitle}
99
- maxFontSizeMultiplier={
100
- theme.typography.variants['body-lg'].maxFontSizeMultiplier
101
- }
79
+ maxFontSizeMultiplier={theme.typography.variants["body-lg"].maxFontSizeMultiplier}
102
80
  >
103
81
  {subtitle}
104
82
  </Text>
@@ -133,23 +111,18 @@ export function LargeTitleHeader({
133
111
  subtitle,
134
112
  LeftToolbar,
135
113
  RightToolbar,
136
- dismissAction = 'none',
114
+ dismissAction = "none",
137
115
  navigation,
138
116
  onDismiss,
139
- titleAlignment = 'center',
117
+ titleAlignment = "center",
140
118
  isLargeTitleHidden = false,
141
- bg = 'surface.default',
119
+ bg = "background",
142
120
  }: LargeTitleHeaderProps) {
143
121
  const { theme } = useUnistyles();
144
122
 
145
- const bgColor =
146
- resolveThemeColor(bg, theme) ??
147
- (theme.color as unknown as Record<string, string | undefined>)[
148
- 'surface.default'
149
- ] ??
150
- '';
123
+ const bgColor = resolveThemeColor(bg, theme) ?? "";
151
124
 
152
- const isTransparent = bgColor === 'transparent';
125
+ const isTransparent = bgColor === "transparent";
153
126
  const gradientColor = isTransparent ? theme.color.background : bgColor;
154
127
  const { scrollY } = useScreen();
155
128
  const isLargeTitleHiddenValue = useSharedValue(isLargeTitleHidden);
@@ -166,7 +139,7 @@ export function LargeTitleHeader({
166
139
  return { opacity: 0 };
167
140
  }
168
141
  return {
169
- opacity: interpolate(scrollY.value, [0, height], [0, 1], 'clamp'),
142
+ opacity: interpolate(scrollY.value, [0, height], [0, 1], "clamp"),
170
143
  };
171
144
  });
172
145
 
@@ -184,15 +157,10 @@ export function LargeTitleHeader({
184
157
  }
185
158
 
186
159
  return {
187
- opacity: interpolate(scrollY.value, [0, height], [0, 1], 'clamp'),
160
+ opacity: interpolate(scrollY.value, [0, height], [0, 1], "clamp"),
188
161
  transform: [
189
162
  {
190
- translateY: interpolate(
191
- scrollY.value,
192
- [0, height],
193
- [COMPACT_TITLE_SLIDE_OFFSET, 0],
194
- 'clamp'
195
- ),
163
+ translateY: interpolate(scrollY.value, [0, height], [COMPACT_TITLE_SLIDE_OFFSET, 0], "clamp"),
196
164
  },
197
165
  ],
198
166
  };
@@ -203,13 +171,9 @@ export function LargeTitleHeader({
203
171
  }, [isLargeTitleHidden, isLargeTitleHiddenValue]);
204
172
 
205
173
  const leading =
206
- dismissAction === 'back' ? (
174
+ dismissAction === "back" ? (
207
175
  <>
208
- <HeaderDismissButton
209
- dismissAction={dismissAction}
210
- navigation={navigation}
211
- onDismiss={onDismiss}
212
- />
176
+ <HeaderDismissButton dismissAction={dismissAction} navigation={navigation} onDismiss={onDismiss} />
213
177
  {LeftToolbar}
214
178
  </>
215
179
  ) : (
@@ -217,14 +181,10 @@ export function LargeTitleHeader({
217
181
  );
218
182
 
219
183
  const trailing =
220
- dismissAction === 'close' ? (
184
+ dismissAction === "close" ? (
221
185
  <>
222
186
  {RightToolbar}
223
- <HeaderDismissButton
224
- dismissAction={dismissAction}
225
- navigation={navigation}
226
- onDismiss={onDismiss}
227
- />
187
+ <HeaderDismissButton dismissAction={dismissAction} navigation={navigation} onDismiss={onDismiss} />
228
188
  </>
229
189
  ) : (
230
190
  RightToolbar
@@ -242,33 +202,21 @@ export function LargeTitleHeader({
242
202
  />
243
203
  </Portal>
244
204
  )}
245
- <Animated.View
246
- style={[styles.safeArea(gradientColor), gradientOpacityStyle]}
247
- />
205
+ <Animated.View style={[styles.safeArea(gradientColor), gradientOpacityStyle]} />
248
206
  <View style={styles.bar}>
249
- <Animated.View
250
- style={[styles.gradient, gradientOpacityStyle]}
251
- pointerEvents="none"
252
- >
207
+ <Animated.View style={[styles.gradient, gradientOpacityStyle]} pointerEvents="none">
253
208
  <HeaderGradientOverlay color={gradientColor} />
254
209
  </Animated.View>
255
210
  {leading != null && <Toolbar>{leading}</Toolbar>}
256
- <Animated.View
257
- style={[styles.titleContainer, compactTitleAnimatedStyle]}
258
- pointerEvents="none"
259
- >
211
+ <Animated.View style={[styles.titleContainer, compactTitleAnimatedStyle]} pointerEvents="none">
260
212
  <AnimatedText
261
213
  style={styles.compactTitle}
262
- maxFontSizeMultiplier={
263
- theme.typography.variants['title-md'].maxFontSizeMultiplier
264
- }
214
+ maxFontSizeMultiplier={theme.typography.variants["title-md"].maxFontSizeMultiplier}
265
215
  >
266
216
  {title}
267
217
  </AnimatedText>
268
218
  </Animated.View>
269
- {trailing != null && (
270
- <Toolbar style={styles.trailing}>{trailing}</Toolbar>
271
- )}
219
+ {trailing != null && <Toolbar style={styles.trailing}>{trailing}</Toolbar>}
272
220
  </View>
273
221
  </View>
274
222
  );
@@ -276,7 +224,7 @@ export function LargeTitleHeader({
276
224
 
277
225
  const styles = StyleSheet.create((theme, runtime) => ({
278
226
  container: {
279
- position: 'absolute',
227
+ position: "absolute",
280
228
  top: 0,
281
229
  left: 0,
282
230
  right: 0,
@@ -286,94 +234,83 @@ const styles = StyleSheet.create((theme, runtime) => ({
286
234
  height: runtime.insets.top,
287
235
  backgroundColor: bgColor,
288
236
  }),
237
+ // Overhangs the bar by `HEADER_FADE_EXTENT` so the fade has room to finish
238
+ // below it — confined to the bar, the curve would be steep enough to read as a
239
+ // band. Nothing on the path clips and the overlay is `pointerEvents="none"`,
240
+ // so the spill costs neither layout nor touches.
289
241
  gradient: {
290
- position: 'absolute',
242
+ position: "absolute",
291
243
  top: 0,
292
244
  left: 0,
293
245
  right: 0,
294
- bottom: 0,
246
+ bottom: -HEADER_FADE_EXTENT,
295
247
  },
296
248
  bar: {
297
249
  height: theme.layout.header.height,
298
- flexDirection: 'row',
299
- alignItems: 'center',
250
+ flexDirection: "row",
251
+ alignItems: "center",
300
252
  paddingHorizontal: theme.layout.screen.margin.x,
301
- gap: theme.spacing['3'],
302
- justifyContent: 'space-between',
253
+ gap: theme.spacing["3"],
254
+ justifyContent: "space-between",
303
255
  },
304
256
  trailing: {
305
- justifyContent: 'flex-end',
257
+ justifyContent: "flex-end",
306
258
  },
307
259
  portalContent: {
308
260
  gap: 2,
309
261
  minHeight: theme.layout.header.height,
310
262
  // paddingTop: theme.spacing['1'],
311
- paddingBottom: theme.spacing['3'],
263
+ paddingBottom: theme.spacing["3"],
312
264
  paddingHorizontal: theme.layout.screen.margin.x,
313
265
  },
314
266
  overline: {
315
- fontSize: theme.typography.variants['label-sm'].fontSize,
316
- lineHeight: theme.typography.variants['label-sm'].lineHeight,
317
- letterSpacing: theme.typography.variants['label-sm'].letterSpacing,
318
- fontWeight:
319
- FONT_WEIGHT_VALUE[theme.typography.variants['label-sm'].fontWeight],
320
- color:
321
- (theme.color as unknown as Record<string, string | undefined>)[
322
- 'text.subtle'
323
- ] ?? '',
267
+ fontSize: theme.typography.variants["label-sm"].fontSize,
268
+ lineHeight: theme.typography.variants["label-sm"].lineHeight,
269
+ letterSpacing: theme.typography.variants["label-sm"].letterSpacing,
270
+ fontWeight: FONT_WEIGHT_VALUE[theme.typography.variants["label-sm"].fontWeight],
271
+ color: (theme.color as unknown as Record<string, string | undefined>)["text.subtle"] ?? "",
324
272
  variants: {
325
273
  titleAlignment: {
326
- center: { textAlign: 'center' },
327
- left: { textAlign: 'left' },
274
+ center: { textAlign: "center" },
275
+ left: { textAlign: "left" },
328
276
  },
329
277
  },
330
278
  },
331
279
  largeTitle: {
332
- fontSize: theme.typography.variants['headline-lg'].fontSize,
333
- lineHeight: theme.typography.variants['headline-lg'].lineHeight,
334
- letterSpacing: theme.typography.variants['headline-lg'].letterSpacing,
335
- fontWeight:
336
- FONT_WEIGHT_VALUE[theme.typography.variants['headline-lg'].fontWeight],
337
- color:
338
- (theme.color as unknown as Record<string, string | undefined>)[
339
- 'text.default'
340
- ] ?? '',
280
+ fontSize: theme.typography.variants["headline-lg"].fontSize,
281
+ lineHeight: theme.typography.variants["headline-lg"].lineHeight,
282
+ letterSpacing: theme.typography.variants["headline-lg"].letterSpacing,
283
+ fontWeight: FONT_WEIGHT_VALUE[theme.typography.variants["headline-lg"].fontWeight],
284
+ color: (theme.color as unknown as Record<string, string | undefined>)["text.default"] ?? "",
341
285
  variants: {
342
286
  titleAlignment: {
343
- center: { textAlign: 'center' },
344
- left: { textAlign: 'left' },
287
+ center: { textAlign: "center" },
288
+ left: { textAlign: "left" },
345
289
  },
346
290
  },
347
291
  },
348
292
  subtitle: {
349
- fontSize: theme.typography.variants['body-lg'].fontSize,
350
- lineHeight: theme.typography.variants['body-lg'].lineHeight,
351
- letterSpacing: theme.typography.variants['body-lg'].letterSpacing,
352
- color:
353
- (theme.color as unknown as Record<string, string | undefined>)[
354
- 'text.subtle'
355
- ] ?? '',
293
+ fontSize: theme.typography.variants["body-lg"].fontSize,
294
+ lineHeight: theme.typography.variants["body-lg"].lineHeight,
295
+ letterSpacing: theme.typography.variants["body-lg"].letterSpacing,
296
+ color: (theme.color as unknown as Record<string, string | undefined>)["text.subtle"] ?? "",
356
297
  variants: {
357
298
  titleAlignment: {
358
- center: { textAlign: 'center' },
359
- left: { textAlign: 'left' },
299
+ center: { textAlign: "center" },
300
+ left: { textAlign: "left" },
360
301
  },
361
302
  },
362
303
  },
363
304
  compactTitle: {
364
- fontSize: theme.typography.variants['title-md'].fontSize,
365
- lineHeight: theme.typography.variants['title-md'].lineHeight,
366
- letterSpacing: theme.typography.variants['title-md'].letterSpacing,
367
- fontWeight:
368
- FONT_WEIGHT_VALUE[theme.typography.variants['title-md'].fontWeight],
369
- color:
370
- (theme.color as unknown as Record<string, string | undefined>)[
371
- 'text.default'
372
- ] ?? '',
305
+ fontSize: theme.typography.variants["title-md"].fontSize,
306
+ lineHeight: theme.typography.variants["title-md"].lineHeight,
307
+ letterSpacing: theme.typography.variants["title-md"].letterSpacing,
308
+ fontWeight: FONT_WEIGHT_VALUE[theme.typography.variants["title-md"].fontWeight],
309
+ color: (theme.color as unknown as Record<string, string | undefined>)["text.default"] ?? "",
373
310
  variants: {
374
311
  titleAlignment: {
375
- center: { textAlign: 'center' },
376
- left: { textAlign: 'left' },
312
+ center: { textAlign: "center" },
313
+ left: { textAlign: "left" },
377
314
  },
378
315
  },
379
316
  },
@@ -382,14 +319,14 @@ const styles = StyleSheet.create((theme, runtime) => ({
382
319
  variants: {
383
320
  titleAlignment: {
384
321
  center: {
385
- position: 'absolute',
322
+ position: "absolute",
386
323
  left: 0,
387
324
  right: 0,
388
- alignItems: 'center',
325
+ alignItems: "center",
389
326
  },
390
327
  left: {
391
328
  flex: 1,
392
- alignItems: 'flex-start',
329
+ alignItems: "flex-start",
393
330
  },
394
331
  },
395
332
  },
@@ -1,18 +1,14 @@
1
- import type { ReactNode } from 'react';
2
- import { Text, View } from 'react-native';
1
+ import type { ReactNode } from "react";
2
+ import { Text, View } from "react-native";
3
3
 
4
- import { StyleSheet, useUnistyles } from 'react-native-unistyles';
4
+ import { StyleSheet, useUnistyles } from "react-native-unistyles";
5
5
 
6
- import type { ColorToken } from '#theme/types';
7
- import { resolveThemeColor } from '#utils/resolve-theme-color';
8
- import { FONT_WEIGHT_VALUE } from '#utils/typography';
9
-
10
- import { Toolbar } from '../../../toolbar';
11
- import {
12
- HeaderDismissButton,
13
- type HeaderDismissProps,
14
- } from '../../header-buttons';
15
- import { HeaderGradientOverlay } from '../../parts/HeaderGradientOverlay';
6
+ import type { ColorToken } from "#theme/types";
7
+ import { resolveThemeColor } from "#utils/resolve-theme-color";
8
+ import { FONT_WEIGHT_VALUE } from "#utils/typography";
9
+ import { Toolbar } from "../../../toolbar";
10
+ import { HeaderDismissButton, type HeaderDismissProps } from "../../header-buttons";
11
+ import { HEADER_FADE_EXTENT, HeaderGradientOverlay } from "../../parts/HeaderGradientOverlay";
16
12
 
17
13
  export interface TitleHeaderProps extends HeaderDismissProps {
18
14
  title?: string;
@@ -27,7 +23,7 @@ export interface TitleHeaderProps extends HeaderDismissProps {
27
23
  */
28
24
  RightToolbar?: ReactNode;
29
25
  /** Title placement within the bar. Defaults to `'center'`. */
30
- titleAlignment?: 'center' | 'left';
26
+ titleAlignment?: "center" | "left";
31
27
  /** Background color token. Defaults to `surface.default`. */
32
28
  bg?: ColorToken;
33
29
  }
@@ -53,34 +49,26 @@ export function TitleHeader({
53
49
  title,
54
50
  LeftToolbar,
55
51
  RightToolbar,
56
- dismissAction = 'none',
52
+ dismissAction = "none",
57
53
  navigation,
58
54
  onDismiss,
59
- titleAlignment = 'center',
60
- bg = 'surface.default',
55
+ titleAlignment = "center",
56
+ bg = "background",
61
57
  }: TitleHeaderProps) {
62
58
  const { theme } = useUnistyles();
63
59
 
64
60
  const bgColor =
65
61
  resolveThemeColor(bg, theme) ??
66
- (theme.color as unknown as Record<string, string | undefined>)[
67
- 'surface.default'
68
- ] ??
69
- '';
70
- const isTransparent = bgColor === 'transparent';
71
- const gradientColor = isTransparent
72
- ? theme.color['surface.default']
73
- : bgColor;
62
+ (theme.color as unknown as Record<string, string | undefined>)["surface.default"] ??
63
+ "";
64
+ const isTransparent = bgColor === "transparent";
65
+ const gradientColor = isTransparent ? theme.color["surface.default"] : bgColor;
74
66
  styles.useVariants({ titleAlignment });
75
67
 
76
68
  const leading =
77
- dismissAction === 'back' ? (
69
+ dismissAction === "back" ? (
78
70
  <>
79
- <HeaderDismissButton
80
- dismissAction={dismissAction}
81
- navigation={navigation}
82
- onDismiss={onDismiss}
83
- />
71
+ <HeaderDismissButton dismissAction={dismissAction} navigation={navigation} onDismiss={onDismiss} />
84
72
  {LeftToolbar}
85
73
  </>
86
74
  ) : (
@@ -88,14 +76,10 @@ export function TitleHeader({
88
76
  );
89
77
 
90
78
  const trailing =
91
- dismissAction === 'close' ? (
79
+ dismissAction === "close" ? (
92
80
  <>
93
81
  {RightToolbar}
94
- <HeaderDismissButton
95
- dismissAction={dismissAction}
96
- navigation={navigation}
97
- onDismiss={onDismiss}
98
- />
82
+ <HeaderDismissButton dismissAction={dismissAction} navigation={navigation} onDismiss={onDismiss} />
99
83
  </>
100
84
  ) : (
101
85
  RightToolbar
@@ -111,9 +95,7 @@ export function TitleHeader({
111
95
  <View style={styles.titleContainer} pointerEvents="none">
112
96
  {!!title && <Text style={styles.title}>{title}</Text>}
113
97
  </View>
114
- {trailing != null && (
115
- <Toolbar style={styles.trailing}>{trailing}</Toolbar>
116
- )}
98
+ {trailing != null && <Toolbar style={styles.trailing}>{trailing}</Toolbar>}
117
99
  </View>
118
100
  </View>
119
101
  );
@@ -121,7 +103,7 @@ export function TitleHeader({
121
103
 
122
104
  const styles = StyleSheet.create((theme, runtime) => ({
123
105
  container: {
124
- position: 'absolute',
106
+ position: "absolute",
125
107
  top: 0,
126
108
  left: 0,
127
109
  right: 0,
@@ -129,56 +111,56 @@ const styles = StyleSheet.create((theme, runtime) => ({
129
111
  },
130
112
  safeArea: (isTransparent, bgColor) => ({
131
113
  height: runtime.insets.top,
132
- backgroundColor: isTransparent ? 'transparent' : bgColor,
114
+ backgroundColor: isTransparent ? "transparent" : bgColor,
133
115
  }),
116
+ // Overhangs the bar by `HEADER_FADE_EXTENT` so the fade has room to finish
117
+ // below it — confined to the bar, the curve would be steep enough to read as a
118
+ // band. Nothing on the path clips and the overlay is `pointerEvents="none"`,
119
+ // so the spill costs neither layout nor touches.
134
120
  gradient: {
135
- position: 'absolute',
121
+ position: "absolute",
136
122
  top: 0,
137
123
  left: 0,
138
124
  right: 0,
139
- bottom: 0,
125
+ bottom: -HEADER_FADE_EXTENT,
140
126
  },
141
127
  bar: {
142
128
  height: theme.layout.header.height,
143
- flexDirection: 'row',
144
- alignItems: 'center',
129
+ flexDirection: "row",
130
+ alignItems: "center",
145
131
  paddingHorizontal: theme.layout.screen.margin.x,
146
- gap: theme.spacing['3'],
147
- justifyContent: 'space-between',
132
+ gap: theme.spacing["3"],
133
+ justifyContent: "space-between",
148
134
  },
149
135
  trailing: {
150
- justifyContent: 'flex-end',
136
+ justifyContent: "flex-end",
151
137
  },
152
138
  titleContainer: {
153
139
  variants: {
154
140
  titleAlignment: {
155
141
  center: {
156
- position: 'absolute',
142
+ position: "absolute",
157
143
  left: 0,
158
144
  right: 0,
159
- alignItems: 'center',
145
+ alignItems: "center",
160
146
  },
161
147
  left: {
162
148
  flex: 1,
163
- alignItems: 'flex-start',
149
+ alignItems: "flex-start",
164
150
  },
165
151
  },
166
152
  },
167
153
  },
168
154
  title: {
169
- fontSize: theme.typography.variants['title-md'].fontSize,
170
- lineHeight: theme.typography.variants['title-md'].lineHeight,
171
- letterSpacing: theme.typography.variants['title-md'].letterSpacing,
172
- fontWeight:
173
- FONT_WEIGHT_VALUE[theme.typography.variants['title-md'].fontWeight],
174
- color:
175
- (theme.color as unknown as Record<string, string | undefined>)[
176
- 'text.default'
177
- ] ?? '',
155
+ fontSize: theme.typography.variants["title-md"].fontSize,
156
+ lineHeight: theme.typography.variants["title-md"].lineHeight,
157
+ letterSpacing: theme.typography.variants["title-md"].letterSpacing,
158
+ fontWeight: FONT_WEIGHT_VALUE[theme.typography.variants["title-md"].fontWeight],
159
+ color: (theme.color as unknown as Record<string, string | undefined>)["text.default"] ?? "",
178
160
  variants: {
179
161
  titleAlignment: {
180
- center: { textAlign: 'center' },
181
- left: { textAlign: 'left' },
162
+ center: { textAlign: "center" },
163
+ left: { textAlign: "left" },
182
164
  },
183
165
  },
184
166
  },