react-native-terra-ui 0.1.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 (379) hide show
  1. package/README.md +70 -0
  2. package/lib/module/components/avatar/Avatar.js +121 -0
  3. package/lib/module/components/avatar/Avatar.js.map +1 -0
  4. package/lib/module/components/avatar/index.js +4 -0
  5. package/lib/module/components/avatar/index.js.map +1 -0
  6. package/lib/module/components/avatar/types.js +4 -0
  7. package/lib/module/components/avatar/types.js.map +1 -0
  8. package/lib/module/components/box/Box.js +49 -0
  9. package/lib/module/components/box/Box.js.map +1 -0
  10. package/lib/module/components/box/index.js +4 -0
  11. package/lib/module/components/box/index.js.map +1 -0
  12. package/lib/module/components/box/utils.js +95 -0
  13. package/lib/module/components/box/utils.js.map +1 -0
  14. package/lib/module/components/button/Button.js +281 -0
  15. package/lib/module/components/button/Button.js.map +1 -0
  16. package/lib/module/components/button/index.js +4 -0
  17. package/lib/module/components/button/index.js.map +1 -0
  18. package/lib/module/components/header/Header.js +25 -0
  19. package/lib/module/components/header/Header.js.map +1 -0
  20. package/lib/module/components/header/header-buttons.js +65 -0
  21. package/lib/module/components/header/header-buttons.js.map +1 -0
  22. package/lib/module/components/header/index.js +7 -0
  23. package/lib/module/components/header/index.js.map +1 -0
  24. package/lib/module/components/header/variants/LargeTitleHeader/index.js +335 -0
  25. package/lib/module/components/header/variants/LargeTitleHeader/index.js.map +1 -0
  26. package/lib/module/components/header/variants/TitleHeader/index.js +184 -0
  27. package/lib/module/components/header/variants/TitleHeader/index.js.map +1 -0
  28. package/lib/module/components/icon/Icon.js +53 -0
  29. package/lib/module/components/icon/Icon.js.map +1 -0
  30. package/lib/module/components/icon/index.js +4 -0
  31. package/lib/module/components/icon/index.js.map +1 -0
  32. package/lib/module/components/icon/utils.js +188 -0
  33. package/lib/module/components/icon/utils.js.map +1 -0
  34. package/lib/module/components/index.js +16 -0
  35. package/lib/module/components/index.js.map +1 -0
  36. package/lib/module/components/page-indicator/PageIndicator.js +49 -0
  37. package/lib/module/components/page-indicator/PageIndicator.js.map +1 -0
  38. package/lib/module/components/page-indicator/PageIndicatorRoot.js +24 -0
  39. package/lib/module/components/page-indicator/PageIndicatorRoot.js.map +1 -0
  40. package/lib/module/components/page-indicator/hooks/use-page-indicator-colors.js +24 -0
  41. package/lib/module/components/page-indicator/hooks/use-page-indicator-colors.js.map +1 -0
  42. package/lib/module/components/page-indicator/hooks/use-page-indicator-core.js +20 -0
  43. package/lib/module/components/page-indicator/hooks/use-page-indicator-core.js.map +1 -0
  44. package/lib/module/components/page-indicator/hooks/use-page-indicator-progress.js +68 -0
  45. package/lib/module/components/page-indicator/hooks/use-page-indicator-progress.js.map +1 -0
  46. package/lib/module/components/page-indicator/index.js +5 -0
  47. package/lib/module/components/page-indicator/index.js.map +1 -0
  48. package/lib/module/components/page-indicator/utils.js +127 -0
  49. package/lib/module/components/page-indicator/utils.js.map +1 -0
  50. package/lib/module/components/page-indicator/variants/DotIndicator/InactiveDot.js +50 -0
  51. package/lib/module/components/page-indicator/variants/DotIndicator/InactiveDot.js.map +1 -0
  52. package/lib/module/components/page-indicator/variants/DotIndicator/LoadingOrbit.js +165 -0
  53. package/lib/module/components/page-indicator/variants/DotIndicator/LoadingOrbit.js.map +1 -0
  54. package/lib/module/components/page-indicator/variants/DotIndicator/TravelingPill.js +60 -0
  55. package/lib/module/components/page-indicator/variants/DotIndicator/TravelingPill.js.map +1 -0
  56. package/lib/module/components/page-indicator/variants/DotIndicator/index.js +87 -0
  57. package/lib/module/components/page-indicator/variants/DotIndicator/index.js.map +1 -0
  58. package/lib/module/components/page-indicator/variants/DotIndicator/utils.js +28 -0
  59. package/lib/module/components/page-indicator/variants/DotIndicator/utils.js.map +1 -0
  60. package/lib/module/components/page-indicator/variants/PillIndicator/PillIndicatorDot.js +53 -0
  61. package/lib/module/components/page-indicator/variants/PillIndicator/PillIndicatorDot.js.map +1 -0
  62. package/lib/module/components/page-indicator/variants/PillIndicator/index.js +76 -0
  63. package/lib/module/components/page-indicator/variants/PillIndicator/index.js.map +1 -0
  64. package/lib/module/components/page-indicator/variants/PillIndicator/utils.js +47 -0
  65. package/lib/module/components/page-indicator/variants/PillIndicator/utils.js.map +1 -0
  66. package/lib/module/components/portal/PortalContext.js +20 -0
  67. package/lib/module/components/portal/PortalContext.js.map +1 -0
  68. package/lib/module/components/portal/PortalHost.js +23 -0
  69. package/lib/module/components/portal/PortalHost.js.map +1 -0
  70. package/lib/module/components/portal/PortalProvider.js +40 -0
  71. package/lib/module/components/portal/PortalProvider.js.map +1 -0
  72. package/lib/module/components/portal/index.js +6 -0
  73. package/lib/module/components/portal/index.js.map +1 -0
  74. package/lib/module/components/screen/Screen.js +100 -0
  75. package/lib/module/components/screen/Screen.js.map +1 -0
  76. package/lib/module/components/screen/ScreenContext.js +66 -0
  77. package/lib/module/components/screen/ScreenContext.js.map +1 -0
  78. package/lib/module/components/screen/ScreenFlatList.js +75 -0
  79. package/lib/module/components/screen/ScreenFlatList.js.map +1 -0
  80. package/lib/module/components/screen/ScreenScrollView.js +82 -0
  81. package/lib/module/components/screen/ScreenScrollView.js.map +1 -0
  82. package/lib/module/components/screen/index.js +7 -0
  83. package/lib/module/components/screen/index.js.map +1 -0
  84. package/lib/module/components/screen/utils.js +13 -0
  85. package/lib/module/components/screen/utils.js.map +1 -0
  86. package/lib/module/components/slot/Slot.js +38 -0
  87. package/lib/module/components/slot/Slot.js.map +1 -0
  88. package/lib/module/components/slot/index.js +10 -0
  89. package/lib/module/components/slot/index.js.map +1 -0
  90. package/lib/module/components/slot/utils.js +55 -0
  91. package/lib/module/components/slot/utils.js.map +1 -0
  92. package/lib/module/components/spinner/Spinner.js +132 -0
  93. package/lib/module/components/spinner/Spinner.js.map +1 -0
  94. package/lib/module/components/spinner/index.js +4 -0
  95. package/lib/module/components/spinner/index.js.map +1 -0
  96. package/lib/module/components/surface/Surface.js +74 -0
  97. package/lib/module/components/surface/Surface.js.map +1 -0
  98. package/lib/module/components/surface/index.js +4 -0
  99. package/lib/module/components/surface/index.js.map +1 -0
  100. package/lib/module/components/text/Text.js +67 -0
  101. package/lib/module/components/text/Text.js.map +1 -0
  102. package/lib/module/components/text/index.js +4 -0
  103. package/lib/module/components/text/index.js.map +1 -0
  104. package/lib/module/components/toast/Toast.js +350 -0
  105. package/lib/module/components/toast/Toast.js.map +1 -0
  106. package/lib/module/components/toast/ToastProvider.js +272 -0
  107. package/lib/module/components/toast/ToastProvider.js.map +1 -0
  108. package/lib/module/components/toast/index.js +5 -0
  109. package/lib/module/components/toast/index.js.map +1 -0
  110. package/lib/module/components/toast/parts/ToastAnimatedItem.js +168 -0
  111. package/lib/module/components/toast/parts/ToastAnimatedItem.js.map +1 -0
  112. package/lib/module/components/toast/types.js +4 -0
  113. package/lib/module/components/toast/types.js.map +1 -0
  114. package/lib/module/components/toast/utils/controller.js +19 -0
  115. package/lib/module/components/toast/utils/controller.js.map +1 -0
  116. package/lib/module/context/ThemeProvider.js +66 -0
  117. package/lib/module/context/ThemeProvider.js.map +1 -0
  118. package/lib/module/context/index.js +4 -0
  119. package/lib/module/context/index.js.map +1 -0
  120. package/lib/module/index.js +8 -0
  121. package/lib/module/index.js.map +1 -0
  122. package/lib/module/package.json +1 -0
  123. package/lib/module/theme/configure.js +152 -0
  124. package/lib/module/theme/configure.js.map +1 -0
  125. package/lib/module/theme/index.js +22 -0
  126. package/lib/module/theme/index.js.map +1 -0
  127. package/lib/module/theme/runtime.js +25 -0
  128. package/lib/module/theme/runtime.js.map +1 -0
  129. package/lib/module/theme/theme.js +121 -0
  130. package/lib/module/theme/theme.js.map +1 -0
  131. package/lib/module/theme/tokens/dark.js +109 -0
  132. package/lib/module/theme/tokens/dark.js.map +1 -0
  133. package/lib/module/theme/tokens/light.js +115 -0
  134. package/lib/module/theme/tokens/light.js.map +1 -0
  135. package/lib/module/theme/tokens/primitives.js +228 -0
  136. package/lib/module/theme/tokens/primitives.js.map +1 -0
  137. package/lib/module/theme/types.js +4 -0
  138. package/lib/module/theme/types.js.map +1 -0
  139. package/lib/module/types.js +2 -0
  140. package/lib/module/types.js.map +1 -0
  141. package/lib/module/utils/accent-utils.js +52 -0
  142. package/lib/module/utils/accent-utils.js.map +1 -0
  143. package/lib/module/utils/color-utils.js +53 -0
  144. package/lib/module/utils/color-utils.js.map +1 -0
  145. package/lib/module/utils/deep-merge.js +28 -0
  146. package/lib/module/utils/deep-merge.js.map +1 -0
  147. package/lib/module/utils/resolve-theme-color.js +20 -0
  148. package/lib/module/utils/resolve-theme-color.js.map +1 -0
  149. package/lib/module/utils/typography.js +13 -0
  150. package/lib/module/utils/typography.js.map +1 -0
  151. package/lib/module/utils/unflatten.js +35 -0
  152. package/lib/module/utils/unflatten.js.map +1 -0
  153. package/lib/typescript/package.json +1 -0
  154. package/lib/typescript/src/components/avatar/Avatar.d.ts +3 -0
  155. package/lib/typescript/src/components/avatar/Avatar.d.ts.map +1 -0
  156. package/lib/typescript/src/components/avatar/index.d.ts +3 -0
  157. package/lib/typescript/src/components/avatar/index.d.ts.map +1 -0
  158. package/lib/typescript/src/components/avatar/types.d.ts +30 -0
  159. package/lib/typescript/src/components/avatar/types.d.ts.map +1 -0
  160. package/lib/typescript/src/components/box/Box.d.ts +12 -0
  161. package/lib/typescript/src/components/box/Box.d.ts.map +1 -0
  162. package/lib/typescript/src/components/box/index.d.ts +4 -0
  163. package/lib/typescript/src/components/box/index.d.ts.map +1 -0
  164. package/lib/typescript/src/components/box/utils.d.ts +39 -0
  165. package/lib/typescript/src/components/box/utils.d.ts.map +1 -0
  166. package/lib/typescript/src/components/button/Button.d.ts +46 -0
  167. package/lib/typescript/src/components/button/Button.d.ts.map +1 -0
  168. package/lib/typescript/src/components/button/index.d.ts +3 -0
  169. package/lib/typescript/src/components/button/index.d.ts.map +1 -0
  170. package/lib/typescript/src/components/header/Header.d.ts +22 -0
  171. package/lib/typescript/src/components/header/Header.d.ts.map +1 -0
  172. package/lib/typescript/src/components/header/header-buttons.d.ts +16 -0
  173. package/lib/typescript/src/components/header/header-buttons.d.ts.map +1 -0
  174. package/lib/typescript/src/components/header/index.d.ts +7 -0
  175. package/lib/typescript/src/components/header/index.d.ts.map +1 -0
  176. package/lib/typescript/src/components/header/variants/LargeTitleHeader/index.d.ts +25 -0
  177. package/lib/typescript/src/components/header/variants/LargeTitleHeader/index.d.ts.map +1 -0
  178. package/lib/typescript/src/components/header/variants/TitleHeader/index.d.ts +28 -0
  179. package/lib/typescript/src/components/header/variants/TitleHeader/index.d.ts.map +1 -0
  180. package/lib/typescript/src/components/icon/Icon.d.ts +22 -0
  181. package/lib/typescript/src/components/icon/Icon.d.ts.map +1 -0
  182. package/lib/typescript/src/components/icon/index.d.ts +3 -0
  183. package/lib/typescript/src/components/icon/index.d.ts.map +1 -0
  184. package/lib/typescript/src/components/icon/utils.d.ts +4 -0
  185. package/lib/typescript/src/components/icon/utils.d.ts.map +1 -0
  186. package/lib/typescript/src/components/index.d.ts +14 -0
  187. package/lib/typescript/src/components/index.d.ts.map +1 -0
  188. package/lib/typescript/src/components/page-indicator/PageIndicator.d.ts +48 -0
  189. package/lib/typescript/src/components/page-indicator/PageIndicator.d.ts.map +1 -0
  190. package/lib/typescript/src/components/page-indicator/PageIndicatorRoot.d.ts +13 -0
  191. package/lib/typescript/src/components/page-indicator/PageIndicatorRoot.d.ts.map +1 -0
  192. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-colors.d.ts +14 -0
  193. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-colors.d.ts.map +1 -0
  194. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-core.d.ts +11 -0
  195. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-core.d.ts.map +1 -0
  196. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-progress.d.ts +19 -0
  197. package/lib/typescript/src/components/page-indicator/hooks/use-page-indicator-progress.d.ts.map +1 -0
  198. package/lib/typescript/src/components/page-indicator/index.d.ts +4 -0
  199. package/lib/typescript/src/components/page-indicator/index.d.ts.map +1 -0
  200. package/lib/typescript/src/components/page-indicator/utils.d.ts +36 -0
  201. package/lib/typescript/src/components/page-indicator/utils.d.ts.map +1 -0
  202. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/InactiveDot.d.ts +14 -0
  203. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/InactiveDot.d.ts.map +1 -0
  204. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/LoadingOrbit.d.ts +11 -0
  205. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/LoadingOrbit.d.ts.map +1 -0
  206. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/TravelingPill.d.ts +15 -0
  207. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/TravelingPill.d.ts.map +1 -0
  208. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/index.d.ts +32 -0
  209. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/index.d.ts.map +1 -0
  210. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/utils.d.ts +14 -0
  211. package/lib/typescript/src/components/page-indicator/variants/DotIndicator/utils.d.ts.map +1 -0
  212. package/lib/typescript/src/components/page-indicator/variants/PillIndicator/PillIndicatorDot.d.ts +16 -0
  213. package/lib/typescript/src/components/page-indicator/variants/PillIndicator/PillIndicatorDot.d.ts.map +1 -0
  214. package/lib/typescript/src/components/page-indicator/variants/PillIndicator/index.d.ts +28 -0
  215. package/lib/typescript/src/components/page-indicator/variants/PillIndicator/index.d.ts.map +1 -0
  216. package/lib/typescript/src/components/page-indicator/variants/PillIndicator/utils.d.ts +21 -0
  217. package/lib/typescript/src/components/page-indicator/variants/PillIndicator/utils.d.ts.map +1 -0
  218. package/lib/typescript/src/components/portal/PortalContext.d.ts +19 -0
  219. package/lib/typescript/src/components/portal/PortalContext.d.ts.map +1 -0
  220. package/lib/typescript/src/components/portal/PortalHost.d.ts +7 -0
  221. package/lib/typescript/src/components/portal/PortalHost.d.ts.map +1 -0
  222. package/lib/typescript/src/components/portal/PortalProvider.d.ts +11 -0
  223. package/lib/typescript/src/components/portal/PortalProvider.d.ts.map +1 -0
  224. package/lib/typescript/src/components/portal/index.d.ts +6 -0
  225. package/lib/typescript/src/components/portal/index.d.ts.map +1 -0
  226. package/lib/typescript/src/components/screen/Screen.d.ts +53 -0
  227. package/lib/typescript/src/components/screen/Screen.d.ts.map +1 -0
  228. package/lib/typescript/src/components/screen/ScreenContext.d.ts +64 -0
  229. package/lib/typescript/src/components/screen/ScreenContext.d.ts.map +1 -0
  230. package/lib/typescript/src/components/screen/ScreenFlatList.d.ts +26 -0
  231. package/lib/typescript/src/components/screen/ScreenFlatList.d.ts.map +1 -0
  232. package/lib/typescript/src/components/screen/ScreenScrollView.d.ts +36 -0
  233. package/lib/typescript/src/components/screen/ScreenScrollView.d.ts.map +1 -0
  234. package/lib/typescript/src/components/screen/index.d.ts +9 -0
  235. package/lib/typescript/src/components/screen/index.d.ts.map +1 -0
  236. package/lib/typescript/src/components/screen/utils.d.ts +10 -0
  237. package/lib/typescript/src/components/screen/utils.d.ts.map +1 -0
  238. package/lib/typescript/src/components/slot/Slot.d.ts +17 -0
  239. package/lib/typescript/src/components/slot/Slot.d.ts.map +1 -0
  240. package/lib/typescript/src/components/slot/index.d.ts +8 -0
  241. package/lib/typescript/src/components/slot/index.d.ts.map +1 -0
  242. package/lib/typescript/src/components/slot/utils.d.ts +17 -0
  243. package/lib/typescript/src/components/slot/utils.d.ts.map +1 -0
  244. package/lib/typescript/src/components/spinner/Spinner.d.ts +18 -0
  245. package/lib/typescript/src/components/spinner/Spinner.d.ts.map +1 -0
  246. package/lib/typescript/src/components/spinner/index.d.ts +3 -0
  247. package/lib/typescript/src/components/spinner/index.d.ts.map +1 -0
  248. package/lib/typescript/src/components/surface/Surface.d.ts +31 -0
  249. package/lib/typescript/src/components/surface/Surface.d.ts.map +1 -0
  250. package/lib/typescript/src/components/surface/index.d.ts +3 -0
  251. package/lib/typescript/src/components/surface/index.d.ts.map +1 -0
  252. package/lib/typescript/src/components/text/Text.d.ts +23 -0
  253. package/lib/typescript/src/components/text/Text.d.ts.map +1 -0
  254. package/lib/typescript/src/components/text/index.d.ts +3 -0
  255. package/lib/typescript/src/components/text/index.d.ts.map +1 -0
  256. package/lib/typescript/src/components/toast/Toast.d.ts +71 -0
  257. package/lib/typescript/src/components/toast/Toast.d.ts.map +1 -0
  258. package/lib/typescript/src/components/toast/ToastProvider.d.ts +4 -0
  259. package/lib/typescript/src/components/toast/ToastProvider.d.ts.map +1 -0
  260. package/lib/typescript/src/components/toast/index.d.ts +5 -0
  261. package/lib/typescript/src/components/toast/index.d.ts.map +1 -0
  262. package/lib/typescript/src/components/toast/parts/ToastAnimatedItem.d.ts +18 -0
  263. package/lib/typescript/src/components/toast/parts/ToastAnimatedItem.d.ts.map +1 -0
  264. package/lib/typescript/src/components/toast/types.d.ts +62 -0
  265. package/lib/typescript/src/components/toast/types.d.ts.map +1 -0
  266. package/lib/typescript/src/components/toast/utils/controller.d.ts +5 -0
  267. package/lib/typescript/src/components/toast/utils/controller.d.ts.map +1 -0
  268. package/lib/typescript/src/context/ThemeProvider.d.ts +29 -0
  269. package/lib/typescript/src/context/ThemeProvider.d.ts.map +1 -0
  270. package/lib/typescript/src/context/index.d.ts +3 -0
  271. package/lib/typescript/src/context/index.d.ts.map +1 -0
  272. package/lib/typescript/src/index.d.ts +4 -0
  273. package/lib/typescript/src/index.d.ts.map +1 -0
  274. package/lib/typescript/src/theme/configure.d.ts +47 -0
  275. package/lib/typescript/src/theme/configure.d.ts.map +1 -0
  276. package/lib/typescript/src/theme/index.d.ts +11 -0
  277. package/lib/typescript/src/theme/index.d.ts.map +1 -0
  278. package/lib/typescript/src/theme/runtime.d.ts +7 -0
  279. package/lib/typescript/src/theme/runtime.d.ts.map +1 -0
  280. package/lib/typescript/src/theme/theme.d.ts +22 -0
  281. package/lib/typescript/src/theme/theme.d.ts.map +1 -0
  282. package/lib/typescript/src/theme/tokens/dark.d.ts +100 -0
  283. package/lib/typescript/src/theme/tokens/dark.d.ts.map +1 -0
  284. package/lib/typescript/src/theme/tokens/light.d.ts +106 -0
  285. package/lib/typescript/src/theme/tokens/light.d.ts.map +1 -0
  286. package/lib/typescript/src/theme/tokens/primitives.d.ts +212 -0
  287. package/lib/typescript/src/theme/tokens/primitives.d.ts.map +1 -0
  288. package/lib/typescript/src/theme/types.d.ts +273 -0
  289. package/lib/typescript/src/theme/types.d.ts.map +1 -0
  290. package/lib/typescript/src/types.d.ts +4 -0
  291. package/lib/typescript/src/types.d.ts.map +1 -0
  292. package/lib/typescript/src/utils/accent-utils.d.ts +4 -0
  293. package/lib/typescript/src/utils/accent-utils.d.ts.map +1 -0
  294. package/lib/typescript/src/utils/color-utils.d.ts +11 -0
  295. package/lib/typescript/src/utils/color-utils.d.ts.map +1 -0
  296. package/lib/typescript/src/utils/deep-merge.d.ts +11 -0
  297. package/lib/typescript/src/utils/deep-merge.d.ts.map +1 -0
  298. package/lib/typescript/src/utils/resolve-theme-color.d.ts +12 -0
  299. package/lib/typescript/src/utils/resolve-theme-color.d.ts.map +1 -0
  300. package/lib/typescript/src/utils/typography.d.ts +6 -0
  301. package/lib/typescript/src/utils/typography.d.ts.map +1 -0
  302. package/lib/typescript/src/utils/unflatten.d.ts +12 -0
  303. package/lib/typescript/src/utils/unflatten.d.ts.map +1 -0
  304. package/package.json +137 -0
  305. package/src/components/avatar/Avatar.tsx +146 -0
  306. package/src/components/avatar/index.ts +8 -0
  307. package/src/components/avatar/types.ts +35 -0
  308. package/src/components/box/Box.tsx +59 -0
  309. package/src/components/box/index.ts +8 -0
  310. package/src/components/box/utils.ts +181 -0
  311. package/src/components/button/Button.tsx +313 -0
  312. package/src/components/button/index.ts +8 -0
  313. package/src/components/header/Header.ts +22 -0
  314. package/src/components/header/header-buttons.tsx +103 -0
  315. package/src/components/header/index.ts +11 -0
  316. package/src/components/header/variants/LargeTitleHeader/index.tsx +390 -0
  317. package/src/components/header/variants/TitleHeader/index.tsx +194 -0
  318. package/src/components/icon/Icon.tsx +74 -0
  319. package/src/components/icon/index.ts +2 -0
  320. package/src/components/icon/utils.tsx +147 -0
  321. package/src/components/index.ts +13 -0
  322. package/src/components/page-indicator/PageIndicator.tsx +100 -0
  323. package/src/components/page-indicator/PageIndicatorRoot.tsx +41 -0
  324. package/src/components/page-indicator/hooks/use-page-indicator-colors.ts +65 -0
  325. package/src/components/page-indicator/hooks/use-page-indicator-core.ts +34 -0
  326. package/src/components/page-indicator/hooks/use-page-indicator-progress.ts +122 -0
  327. package/src/components/page-indicator/index.ts +13 -0
  328. package/src/components/page-indicator/utils.ts +208 -0
  329. package/src/components/page-indicator/variants/DotIndicator/InactiveDot.tsx +70 -0
  330. package/src/components/page-indicator/variants/DotIndicator/LoadingOrbit.tsx +201 -0
  331. package/src/components/page-indicator/variants/DotIndicator/TravelingPill.tsx +80 -0
  332. package/src/components/page-indicator/variants/DotIndicator/index.tsx +145 -0
  333. package/src/components/page-indicator/variants/DotIndicator/utils.ts +28 -0
  334. package/src/components/page-indicator/variants/PillIndicator/PillIndicatorDot.tsx +107 -0
  335. package/src/components/page-indicator/variants/PillIndicator/index.tsx +149 -0
  336. package/src/components/page-indicator/variants/PillIndicator/utils.ts +63 -0
  337. package/src/components/portal/PortalContext.tsx +27 -0
  338. package/src/components/portal/PortalHost.tsx +20 -0
  339. package/src/components/portal/PortalProvider.tsx +44 -0
  340. package/src/components/portal/index.ts +5 -0
  341. package/src/components/screen/Screen.tsx +163 -0
  342. package/src/components/screen/ScreenContext.tsx +144 -0
  343. package/src/components/screen/ScreenFlatList.tsx +121 -0
  344. package/src/components/screen/ScreenScrollView.tsx +130 -0
  345. package/src/components/screen/index.ts +8 -0
  346. package/src/components/screen/utils.ts +17 -0
  347. package/src/components/slot/Slot.tsx +56 -0
  348. package/src/components/slot/index.ts +8 -0
  349. package/src/components/slot/utils.ts +61 -0
  350. package/src/components/spinner/Spinner.tsx +153 -0
  351. package/src/components/spinner/index.ts +2 -0
  352. package/src/components/surface/Surface.tsx +100 -0
  353. package/src/components/surface/index.ts +2 -0
  354. package/src/components/text/Text.tsx +115 -0
  355. package/src/components/text/index.ts +2 -0
  356. package/src/components/toast/Toast.tsx +477 -0
  357. package/src/components/toast/ToastProvider.tsx +403 -0
  358. package/src/components/toast/index.ts +26 -0
  359. package/src/components/toast/parts/ToastAnimatedItem.tsx +184 -0
  360. package/src/components/toast/types.ts +75 -0
  361. package/src/components/toast/utils/controller.ts +23 -0
  362. package/src/context/ThemeProvider.tsx +97 -0
  363. package/src/context/index.ts +2 -0
  364. package/src/index.tsx +6 -0
  365. package/src/theme/configure.ts +215 -0
  366. package/src/theme/index.ts +72 -0
  367. package/src/theme/runtime.ts +27 -0
  368. package/src/theme/theme.ts +152 -0
  369. package/src/theme/tokens/dark.ts +117 -0
  370. package/src/theme/tokens/light.ts +123 -0
  371. package/src/theme/tokens/primitives.ts +232 -0
  372. package/src/theme/types.ts +384 -0
  373. package/src/types.ts +1 -0
  374. package/src/utils/accent-utils.ts +58 -0
  375. package/src/utils/color-utils.ts +51 -0
  376. package/src/utils/deep-merge.ts +36 -0
  377. package/src/utils/resolve-theme-color.ts +27 -0
  378. package/src/utils/typography.ts +15 -0
  379. package/src/utils/unflatten.ts +36 -0
@@ -0,0 +1,313 @@
1
+ import {
2
+ Children,
3
+ type ComponentRef,
4
+ createContext,
5
+ forwardRef,
6
+ type ReactNode,
7
+ useContext,
8
+ } from 'react';
9
+ import type { PressableProps } from 'react-native';
10
+ import { Pressable } from 'react-native';
11
+
12
+ import { StyleSheet, useUnistyles } from 'react-native-unistyles';
13
+
14
+ import { getDefaultRadius } from '#theme/configure';
15
+ import type {
16
+ ColorToken,
17
+ FontWeightToken,
18
+ TerraIconName,
19
+ TerraTheme,
20
+ TextVariant,
21
+ } from '#theme/types';
22
+
23
+ import { Icon } from '../icon';
24
+ import { Spinner } from '../spinner';
25
+ import { Text } from '../text';
26
+
27
+ export type ButtonVariant =
28
+ | 'primary'
29
+ | 'secondary'
30
+ | 'neutral'
31
+ | 'outline'
32
+ | 'ghost'
33
+ | 'danger';
34
+ export type ButtonSize = 'sm' | 'md' | 'lg';
35
+ export type ButtonRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
36
+
37
+ export interface ButtonProps
38
+ extends Omit<PressableProps, 'style' | 'children' | 'disabled'> {
39
+ variant?: ButtonVariant;
40
+ size?: ButtonSize;
41
+ radius?: ButtonRadius;
42
+ isDisabled?: boolean;
43
+ isLoading?: boolean;
44
+ /** Square (1:1) button — pass a single icon as children. */
45
+ isIconOnly?: boolean;
46
+ /**
47
+ * Stretch to the parent width in column layouts. Defaults to `true`.
48
+ * Icon-only buttons always stay square regardless of this prop.
49
+ */
50
+ fullWidth?: boolean;
51
+ /** Remove the button's built-in horizontal padding. */
52
+ compact?: boolean;
53
+ children?: ReactNode;
54
+ }
55
+
56
+ // ─── Context (lets icons/labels read the resolved foreground + size) ───────────
57
+
58
+ interface ButtonContextValue {
59
+ color: string;
60
+ size: ButtonSize;
61
+ }
62
+
63
+ const ButtonContext = createContext<ButtonContextValue>({
64
+ color: '',
65
+ size: 'md',
66
+ });
67
+
68
+ export const useButtonContext = (): ButtonContextValue =>
69
+ useContext(ButtonContext);
70
+
71
+ // ─── Colors per variant ───────────────────────────────────────────────────────
72
+
73
+ interface ButtonColors {
74
+ bg: string;
75
+ border: string;
76
+ borderWidth: number;
77
+ fg: string;
78
+ }
79
+
80
+ function getColors(variant: ButtonVariant, theme: TerraTheme): ButtonColors {
81
+ const c = theme.color as unknown as Record<string, string | undefined>;
82
+ const get = (key: string): string => c[key] ?? '';
83
+ switch (variant) {
84
+ case 'primary':
85
+ return {
86
+ bg: get('action.bg.primary'),
87
+ border: get('action.bg.primary'),
88
+ borderWidth: 0,
89
+ fg: get('action.fg.primary'),
90
+ };
91
+ case 'secondary':
92
+ return {
93
+ bg: get('action.bg.subtle'),
94
+ border: get('action.bg.subtle'),
95
+ borderWidth: 0,
96
+ fg: get('action.fg.subtle'),
97
+ };
98
+ case 'neutral':
99
+ return {
100
+ bg: get('action.bg.neutral.hover'),
101
+ border: get('action.bg.neutral.hover'),
102
+ borderWidth: 0,
103
+ fg: get('action.fg.neutral'),
104
+ };
105
+ case 'outline':
106
+ return {
107
+ bg: 'transparent',
108
+ border: get('border.default'),
109
+ borderWidth: 1,
110
+ fg: get('text.default'),
111
+ };
112
+ case 'ghost':
113
+ return {
114
+ bg: 'transparent',
115
+ border: 'transparent',
116
+ borderWidth: 0,
117
+ fg: get('text.default'),
118
+ };
119
+ case 'danger':
120
+ return {
121
+ bg: get('status.bg.danger'),
122
+ border: get('status.bg.danger'),
123
+ borderWidth: 0,
124
+ fg: get('status.fg.danger'),
125
+ };
126
+ }
127
+ }
128
+
129
+ // ─── Label sub-component ───────────────────────────────────────────────────────
130
+
131
+ const LABEL_TYPOGRAPHY: Record<
132
+ ButtonSize,
133
+ {
134
+ variant: TextVariant;
135
+ weight?: FontWeightToken;
136
+ }
137
+ > = {
138
+ sm: { variant: 'label-md', weight: 'semibold' },
139
+ md: { variant: 'label-lg', weight: 'semibold' },
140
+ lg: { variant: 'label-lg', weight: 'bold' },
141
+ };
142
+
143
+ const ButtonLabel = ({ children }: { children: ReactNode }) => {
144
+ const { color, size } = useButtonContext();
145
+ const typography = LABEL_TYPOGRAPHY[size];
146
+ return (
147
+ <Text
148
+ variant={typography.variant}
149
+ weight={typography.weight}
150
+ style={{ color }}
151
+ >
152
+ {children}
153
+ </Text>
154
+ );
155
+ };
156
+
157
+ // ─── Icon sub-component ────────────────────────────────────────────────────────
158
+
159
+ const ICON_SIZE: Record<ButtonSize, number> = {
160
+ sm: 16,
161
+ md: 18,
162
+ lg: 20,
163
+ };
164
+
165
+ export interface ButtonIconProps {
166
+ name: TerraIconName;
167
+ size?: number;
168
+ color?: ColorToken;
169
+ strokeWidth?: number;
170
+ }
171
+
172
+ const ButtonIcon = ({
173
+ name,
174
+ size: sizeProp,
175
+ color: colorProp,
176
+ strokeWidth,
177
+ }: ButtonIconProps) => {
178
+ const { color, size } = useButtonContext();
179
+
180
+ return (
181
+ <Icon
182
+ color={colorProp ?? color}
183
+ name={name}
184
+ size={sizeProp ?? ICON_SIZE[size]}
185
+ strokeWidth={strokeWidth}
186
+ />
187
+ );
188
+ };
189
+
190
+ function renderChildren(children: ReactNode): ReactNode {
191
+ return Children.map(children, (child) => {
192
+ if (typeof child === 'string') {
193
+ return child.trim().length > 0 ? (
194
+ <ButtonLabel>{child}</ButtonLabel>
195
+ ) : null;
196
+ }
197
+ if (typeof child === 'number') {
198
+ return <ButtonLabel>{child}</ButtonLabel>;
199
+ }
200
+ return child;
201
+ });
202
+ }
203
+
204
+ // ─── Component ────────────────────────────────────────────────────────────────
205
+
206
+ const ButtonRoot = forwardRef<ComponentRef<typeof Pressable>, ButtonProps>(
207
+ function Button(
208
+ {
209
+ variant = 'primary',
210
+ size = 'md',
211
+ radius = getDefaultRadius('button'),
212
+ isDisabled = false,
213
+ isLoading = false,
214
+ isIconOnly = false,
215
+ fullWidth = true,
216
+ compact = false,
217
+ children,
218
+ onPress,
219
+ ...rest
220
+ },
221
+ ref
222
+ ) {
223
+ const { theme } = useUnistyles();
224
+ styles.useVariants({
225
+ size,
226
+ radius,
227
+ fullWidth: fullWidth && !isIconOnly,
228
+ iconOnly: isIconOnly,
229
+ });
230
+
231
+ const { bg, border, borderWidth, fg } = getColors(variant, theme);
232
+ const blocked = isDisabled || isLoading;
233
+ const { style: externalStyle, ...pressableRest } = rest as typeof rest & {
234
+ style?: PressableProps['style'];
235
+ };
236
+
237
+ return (
238
+ <ButtonContext.Provider value={{ color: fg, size }}>
239
+ <Pressable
240
+ ref={ref}
241
+ onPress={blocked ? undefined : onPress}
242
+ disabled={blocked}
243
+ accessibilityRole="button"
244
+ accessibilityState={{ disabled: blocked, busy: isLoading }}
245
+ {...pressableRest}
246
+ style={(state) => [
247
+ styles.base,
248
+ { backgroundColor: bg, borderColor: border, borderWidth },
249
+ compact ? styles.compact : null,
250
+ state.pressed && !blocked
251
+ ? { opacity: theme.opacity.pressed }
252
+ : null,
253
+ isDisabled ? { opacity: theme.opacity.disabled } : null,
254
+ typeof externalStyle === 'function'
255
+ ? externalStyle(state)
256
+ : externalStyle,
257
+ ]}
258
+ >
259
+ {isLoading && <Spinner size="sm" color={fg} />}
260
+ {renderChildren(children)}
261
+ </Pressable>
262
+ </ButtonContext.Provider>
263
+ );
264
+ }
265
+ );
266
+
267
+ type ButtonComponent = typeof ButtonRoot & {
268
+ Icon: typeof ButtonIcon;
269
+ Label: typeof ButtonLabel;
270
+ };
271
+
272
+ export const Button = ButtonRoot as ButtonComponent;
273
+ Button.Icon = ButtonIcon;
274
+ Button.Label = ButtonLabel;
275
+
276
+ // ─── Styles ───────────────────────────────────────────────────────────────────
277
+
278
+ const styles = StyleSheet.create((theme) => ({
279
+ base: {
280
+ flexDirection: 'row',
281
+ alignItems: 'center',
282
+ justifyContent: 'center',
283
+ alignSelf: 'flex-start',
284
+ variants: {
285
+ size: {
286
+ sm: { minHeight: 36, paddingHorizontal: 14, gap: 6 },
287
+ md: { minHeight: 44, paddingHorizontal: 16, gap: 8 },
288
+ lg: { minHeight: 52, paddingHorizontal: 20, gap: 8 },
289
+ },
290
+ radius: {
291
+ none: { borderRadius: theme.radius.none },
292
+ sm: { borderRadius: theme.radius.sm },
293
+ md: { borderRadius: theme.radius.md },
294
+ lg: { borderRadius: theme.radius.lg },
295
+ xl: { borderRadius: theme.radius.xl },
296
+ full: { borderRadius: theme.radius.full },
297
+ },
298
+ fullWidth: {
299
+ true: { alignSelf: 'stretch' },
300
+ false: {},
301
+ },
302
+ iconOnly: {
303
+ true: { paddingHorizontal: 0, aspectRatio: 1 },
304
+ false: {},
305
+ },
306
+ },
307
+ },
308
+ compact: {
309
+ paddingHorizontal: 2,
310
+ paddingVertical: 2,
311
+ minHeight: 0,
312
+ },
313
+ }));
@@ -0,0 +1,8 @@
1
+ export type {
2
+ ButtonIconProps,
3
+ ButtonProps,
4
+ ButtonRadius,
5
+ ButtonSize,
6
+ ButtonVariant,
7
+ } from './Button';
8
+ export { Button, useButtonContext } from './Button';
@@ -0,0 +1,22 @@
1
+ import { LargeTitleHeader } from './variants/LargeTitleHeader';
2
+ import { TitleHeader } from './variants/TitleHeader';
3
+
4
+ /**
5
+ * Composite header namespace.
6
+ *
7
+ * - `Header.Title` — compact title bar ({@link TitleHeader}).
8
+ * - `Header.LargeTitle` — collapsing large-title header ({@link LargeTitleHeader}).
9
+ *
10
+ * Both are also exported standalone (`TitleHeader`, `LargeTitleHeader`).
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <Screen.Header>
15
+ * <Header.LargeTitle title="Meditate" />
16
+ * </Screen.Header>
17
+ * ```
18
+ */
19
+ export const Header = {
20
+ Title: TitleHeader,
21
+ LargeTitle: LargeTitleHeader,
22
+ };
@@ -0,0 +1,103 @@
1
+ import { Pressable } from 'react-native';
2
+
3
+ import { StyleSheet, useUnistyles } from 'react-native-unistyles';
4
+
5
+ import type { TerraSemanticIconName } from '#theme/types';
6
+
7
+ import { Icon } from '../icon';
8
+
9
+ export type HeaderDismissAction = 'back' | 'close' | 'none';
10
+
11
+ export interface HeaderDismissNavigation {
12
+ canGoBack?: () => boolean;
13
+ goBack?: () => void;
14
+ dismiss?: () => void;
15
+ }
16
+
17
+ export interface HeaderDismissProps {
18
+ /** Adds a built-in dismiss button to the leading/trailing header slot. */
19
+ dismissAction?: HeaderDismissAction;
20
+ /** Called before any navigation fallback. */
21
+ onDismiss?: () => void;
22
+ /** Optional navigation object, usually from `useNavigation()`. */
23
+ navigation?: HeaderDismissNavigation;
24
+ }
25
+
26
+ const getDismissAccessibilityLabel = (
27
+ dismissAction: HeaderDismissAction
28
+ ): string => (dismissAction === 'close' ? 'Close' : 'Back');
29
+
30
+ const getDismissIconName = (
31
+ dismissAction: HeaderDismissAction
32
+ ): TerraSemanticIconName =>
33
+ dismissAction === 'close' ? 'navigation.close' : 'navigation.back';
34
+
35
+ const warnUnavailableDismiss = (dismissAction: HeaderDismissAction): void => {
36
+ if (__DEV__) {
37
+ console.warn(
38
+ `[react-native-terra-ui] Header.Title dismissAction="${dismissAction}" was pressed, but no dismiss handler or available navigation action was provided.`
39
+ );
40
+ }
41
+ };
42
+
43
+ export function HeaderDismissButton({
44
+ dismissAction = 'none',
45
+ navigation,
46
+ onDismiss,
47
+ }: HeaderDismissProps) {
48
+ const { theme } = useUnistyles();
49
+
50
+ if (dismissAction === 'none') return null;
51
+
52
+ const handlePress = () => {
53
+ if (onDismiss) {
54
+ onDismiss();
55
+ return;
56
+ }
57
+
58
+ if (dismissAction === 'close' && navigation?.dismiss) {
59
+ navigation.dismiss();
60
+ return;
61
+ }
62
+
63
+ if (navigation?.goBack && navigation.canGoBack?.() !== false) {
64
+ navigation.goBack();
65
+ return;
66
+ }
67
+
68
+ warnUnavailableDismiss(dismissAction);
69
+ };
70
+
71
+ return (
72
+ <Pressable
73
+ accessibilityLabel={getDismissAccessibilityLabel(dismissAction)}
74
+ accessibilityRole="button"
75
+ hitSlop={8}
76
+ onPress={handlePress}
77
+ style={({ pressed }) => [
78
+ styles.button,
79
+ pressed ? { opacity: theme.opacity.pressed } : null,
80
+ ]}
81
+ >
82
+ <Icon
83
+ size={26}
84
+ color="text.default"
85
+ name={getDismissIconName(dismissAction)}
86
+ />
87
+ </Pressable>
88
+ );
89
+ }
90
+
91
+ const styles = StyleSheet.create((theme) => ({
92
+ button: {
93
+ width: 36,
94
+ height: 36,
95
+ borderRadius: theme.radius.full,
96
+ backgroundColor:
97
+ (theme.color as unknown as Record<string, string | undefined>)[
98
+ 'surface.default'
99
+ ] ?? '',
100
+ alignItems: 'center',
101
+ justifyContent: 'center',
102
+ },
103
+ }));
@@ -0,0 +1,11 @@
1
+ export { Header } from './Header';
2
+ export {
3
+ type HeaderDismissAction,
4
+ HeaderDismissButton,
5
+ type HeaderDismissNavigation,
6
+ type HeaderDismissProps,
7
+ } from './header-buttons';
8
+ export type { LargeTitleHeaderProps } from './variants/LargeTitleHeader';
9
+ export { LargeTitleHeader } from './variants/LargeTitleHeader';
10
+ export type { TitleHeaderProps } from './variants/TitleHeader';
11
+ export { TitleHeader } from './variants/TitleHeader';