@rnative/ui 0.0.0-stage → 1.0.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 (422) hide show
  1. package/README.md +1 -3
  2. package/dist/components/accordion/Accordion.d.ts +31 -0
  3. package/dist/components/accordion/Accordion.d.ts.map +1 -0
  4. package/dist/components/accordion/Accordion.js +121 -0
  5. package/dist/components/accordion/Accordion.js.map +1 -0
  6. package/dist/components/accordion/Accordion.styles.d.ts +8 -0
  7. package/dist/components/accordion/Accordion.styles.d.ts.map +1 -0
  8. package/dist/components/accordion/Accordion.styles.js +48 -0
  9. package/dist/components/accordion/Accordion.styles.js.map +1 -0
  10. package/dist/components/accordion/Accordion.types.d.ts +45 -0
  11. package/dist/components/accordion/Accordion.types.d.ts.map +1 -0
  12. package/dist/components/accordion/Accordion.types.js +9 -0
  13. package/dist/components/accordion/Accordion.types.js.map +1 -0
  14. package/dist/components/accordion/index.d.ts +6 -0
  15. package/dist/components/accordion/index.d.ts.map +1 -0
  16. package/dist/components/accordion/index.js +12 -0
  17. package/dist/components/accordion/index.js.map +1 -0
  18. package/dist/components/alert/Alert.d.ts +16 -0
  19. package/dist/components/alert/Alert.d.ts.map +1 -0
  20. package/dist/components/alert/Alert.js +28 -0
  21. package/dist/components/alert/Alert.js.map +1 -0
  22. package/dist/components/alert/Alert.styles.d.ts +8 -0
  23. package/dist/components/alert/Alert.styles.d.ts.map +1 -0
  24. package/dist/components/alert/Alert.styles.js +36 -0
  25. package/dist/components/alert/Alert.styles.js.map +1 -0
  26. package/dist/components/alert/Alert.types.d.ts +22 -0
  27. package/dist/components/alert/Alert.types.d.ts.map +1 -0
  28. package/dist/components/alert/Alert.types.js +9 -0
  29. package/dist/components/alert/Alert.types.js.map +1 -0
  30. package/dist/components/alert/Alert.variants.d.ts +19 -0
  31. package/dist/components/alert/Alert.variants.d.ts.map +1 -0
  32. package/dist/components/alert/Alert.variants.js +51 -0
  33. package/dist/components/alert/Alert.variants.js.map +1 -0
  34. package/dist/components/alert/index.d.ts +6 -0
  35. package/dist/components/alert/index.d.ts.map +1 -0
  36. package/dist/components/alert/index.js +9 -0
  37. package/dist/components/alert/index.js.map +1 -0
  38. package/dist/components/avatar/Avatar.d.ts +13 -0
  39. package/dist/components/avatar/Avatar.d.ts.map +1 -0
  40. package/dist/components/avatar/Avatar.js +31 -0
  41. package/dist/components/avatar/Avatar.js.map +1 -0
  42. package/dist/components/avatar/Avatar.styles.d.ts +8 -0
  43. package/dist/components/avatar/Avatar.styles.d.ts.map +1 -0
  44. package/dist/components/avatar/Avatar.styles.js +22 -0
  45. package/dist/components/avatar/Avatar.styles.js.map +1 -0
  46. package/dist/components/avatar/Avatar.types.d.ts +21 -0
  47. package/dist/components/avatar/Avatar.types.d.ts.map +1 -0
  48. package/dist/components/avatar/Avatar.types.js +9 -0
  49. package/dist/components/avatar/Avatar.types.js.map +1 -0
  50. package/dist/components/avatar/Avatar.variants.d.ts +23 -0
  51. package/dist/components/avatar/Avatar.variants.d.ts.map +1 -0
  52. package/dist/components/avatar/Avatar.variants.js +48 -0
  53. package/dist/components/avatar/Avatar.variants.js.map +1 -0
  54. package/dist/components/avatar/index.d.ts +6 -0
  55. package/dist/components/avatar/index.d.ts.map +1 -0
  56. package/dist/components/avatar/index.js +9 -0
  57. package/dist/components/avatar/index.js.map +1 -0
  58. package/dist/components/badge/Badge.d.ts +12 -0
  59. package/dist/components/badge/Badge.d.ts.map +1 -0
  60. package/dist/components/badge/Badge.js +25 -0
  61. package/dist/components/badge/Badge.js.map +1 -0
  62. package/dist/components/badge/Badge.styles.d.ts +8 -0
  63. package/dist/components/badge/Badge.styles.d.ts.map +1 -0
  64. package/dist/components/badge/Badge.styles.js +32 -0
  65. package/dist/components/badge/Badge.styles.js.map +1 -0
  66. package/dist/components/badge/Badge.types.d.ts +16 -0
  67. package/dist/components/badge/Badge.types.d.ts.map +1 -0
  68. package/dist/components/badge/Badge.types.js +8 -0
  69. package/dist/components/badge/Badge.types.js.map +1 -0
  70. package/dist/components/badge/Badge.variants.d.ts +23 -0
  71. package/dist/components/badge/Badge.variants.d.ts.map +1 -0
  72. package/dist/components/badge/Badge.variants.js +48 -0
  73. package/dist/components/badge/Badge.variants.js.map +1 -0
  74. package/dist/components/badge/index.d.ts +6 -0
  75. package/dist/components/badge/index.d.ts.map +1 -0
  76. package/dist/components/badge/index.js +9 -0
  77. package/dist/components/badge/index.js.map +1 -0
  78. package/dist/components/button/Button.d.ts +16 -0
  79. package/dist/components/button/Button.d.ts.map +1 -0
  80. package/dist/components/button/Button.js +61 -0
  81. package/dist/components/button/Button.js.map +1 -0
  82. package/dist/components/button/Button.styles.d.ts +8 -0
  83. package/dist/components/button/Button.styles.d.ts.map +1 -0
  84. package/dist/components/button/Button.styles.js +18 -0
  85. package/dist/components/button/Button.styles.js.map +1 -0
  86. package/dist/components/button/Button.types.d.ts +23 -0
  87. package/dist/components/button/Button.types.d.ts.map +1 -0
  88. package/dist/components/button/Button.types.js +6 -0
  89. package/dist/components/button/Button.types.js.map +1 -0
  90. package/dist/components/button/Button.variants.d.ts +11 -0
  91. package/dist/components/button/Button.variants.d.ts.map +1 -0
  92. package/dist/components/button/Button.variants.js +65 -0
  93. package/dist/components/button/Button.variants.js.map +1 -0
  94. package/dist/components/button/index.d.ts +6 -0
  95. package/dist/components/button/index.d.ts.map +1 -0
  96. package/dist/components/button/index.js +9 -0
  97. package/dist/components/button/index.js.map +1 -0
  98. package/dist/components/card/Card.d.ts +36 -0
  99. package/dist/components/card/Card.d.ts.map +1 -0
  100. package/dist/components/card/Card.js +53 -0
  101. package/dist/components/card/Card.js.map +1 -0
  102. package/dist/components/card/Card.styles.d.ts +8 -0
  103. package/dist/components/card/Card.styles.d.ts.map +1 -0
  104. package/dist/components/card/Card.styles.js +30 -0
  105. package/dist/components/card/Card.styles.js.map +1 -0
  106. package/dist/components/card/Card.types.d.ts +22 -0
  107. package/dist/components/card/Card.types.d.ts.map +1 -0
  108. package/dist/components/card/Card.types.js +9 -0
  109. package/dist/components/card/Card.types.js.map +1 -0
  110. package/dist/components/card/Card.variants.d.ts +14 -0
  111. package/dist/components/card/Card.variants.d.ts.map +1 -0
  112. package/dist/components/card/Card.variants.js +32 -0
  113. package/dist/components/card/Card.variants.js.map +1 -0
  114. package/dist/components/card/index.d.ts +6 -0
  115. package/dist/components/card/index.d.ts.map +1 -0
  116. package/dist/components/card/index.js +14 -0
  117. package/dist/components/card/index.js.map +1 -0
  118. package/dist/components/checkbox/CheckBox.d.ts +14 -0
  119. package/dist/components/checkbox/CheckBox.d.ts.map +1 -0
  120. package/dist/components/checkbox/CheckBox.js +40 -0
  121. package/dist/components/checkbox/CheckBox.js.map +1 -0
  122. package/dist/components/checkbox/CheckBox.styles.d.ts +8 -0
  123. package/dist/components/checkbox/CheckBox.styles.d.ts.map +1 -0
  124. package/dist/components/checkbox/CheckBox.styles.js +32 -0
  125. package/dist/components/checkbox/CheckBox.styles.js.map +1 -0
  126. package/dist/components/checkbox/CheckBox.types.d.ts +24 -0
  127. package/dist/components/checkbox/CheckBox.types.d.ts.map +1 -0
  128. package/dist/components/checkbox/CheckBox.types.js +9 -0
  129. package/dist/components/checkbox/CheckBox.types.js.map +1 -0
  130. package/dist/components/checkbox/CheckBox.variants.d.ts +14 -0
  131. package/dist/components/checkbox/CheckBox.variants.d.ts.map +1 -0
  132. package/dist/components/checkbox/CheckBox.variants.js +19 -0
  133. package/dist/components/checkbox/CheckBox.variants.js.map +1 -0
  134. package/dist/components/checkbox/index.d.ts +6 -0
  135. package/dist/components/checkbox/index.d.ts.map +1 -0
  136. package/dist/components/checkbox/index.js +9 -0
  137. package/dist/components/checkbox/index.js.map +1 -0
  138. package/dist/components/combobox/ComboBox.d.ts +16 -0
  139. package/dist/components/combobox/ComboBox.d.ts.map +1 -0
  140. package/dist/components/combobox/ComboBox.js +79 -0
  141. package/dist/components/combobox/ComboBox.js.map +1 -0
  142. package/dist/components/combobox/ComboBox.styles.d.ts +8 -0
  143. package/dist/components/combobox/ComboBox.styles.d.ts.map +1 -0
  144. package/dist/components/combobox/ComboBox.styles.js +57 -0
  145. package/dist/components/combobox/ComboBox.styles.js.map +1 -0
  146. package/dist/components/combobox/ComboBox.types.d.ts +46 -0
  147. package/dist/components/combobox/ComboBox.types.d.ts.map +1 -0
  148. package/dist/components/combobox/ComboBox.types.js +9 -0
  149. package/dist/components/combobox/ComboBox.types.js.map +1 -0
  150. package/dist/components/combobox/ComboBox.variants.d.ts +22 -0
  151. package/dist/components/combobox/ComboBox.variants.d.ts.map +1 -0
  152. package/dist/components/combobox/ComboBox.variants.js +68 -0
  153. package/dist/components/combobox/ComboBox.variants.js.map +1 -0
  154. package/dist/components/combobox/index.d.ts +6 -0
  155. package/dist/components/combobox/index.d.ts.map +1 -0
  156. package/dist/components/combobox/index.js +9 -0
  157. package/dist/components/combobox/index.js.map +1 -0
  158. package/dist/components/dialog/Dialog.d.ts +36 -0
  159. package/dist/components/dialog/Dialog.d.ts.map +1 -0
  160. package/dist/components/dialog/Dialog.js +84 -0
  161. package/dist/components/dialog/Dialog.js.map +1 -0
  162. package/dist/components/dialog/Dialog.styles.d.ts +8 -0
  163. package/dist/components/dialog/Dialog.styles.d.ts.map +1 -0
  164. package/dist/components/dialog/Dialog.styles.js +52 -0
  165. package/dist/components/dialog/Dialog.styles.js.map +1 -0
  166. package/dist/components/dialog/Dialog.types.d.ts +48 -0
  167. package/dist/components/dialog/Dialog.types.d.ts.map +1 -0
  168. package/dist/components/dialog/Dialog.types.js +10 -0
  169. package/dist/components/dialog/Dialog.types.js.map +1 -0
  170. package/dist/components/dialog/Dialog.variants.d.ts +13 -0
  171. package/dist/components/dialog/Dialog.variants.d.ts.map +1 -0
  172. package/dist/components/dialog/Dialog.variants.js +19 -0
  173. package/dist/components/dialog/Dialog.variants.js.map +1 -0
  174. package/dist/components/dialog/index.d.ts +6 -0
  175. package/dist/components/dialog/index.d.ts.map +1 -0
  176. package/dist/components/dialog/index.js +14 -0
  177. package/dist/components/dialog/index.js.map +1 -0
  178. package/dist/components/fab/FAB.d.ts +14 -0
  179. package/dist/components/fab/FAB.d.ts.map +1 -0
  180. package/dist/components/fab/FAB.js +46 -0
  181. package/dist/components/fab/FAB.js.map +1 -0
  182. package/dist/components/fab/FAB.styles.d.ts +8 -0
  183. package/dist/components/fab/FAB.styles.d.ts.map +1 -0
  184. package/dist/components/fab/FAB.styles.js +51 -0
  185. package/dist/components/fab/FAB.styles.js.map +1 -0
  186. package/dist/components/fab/FAB.types.d.ts +23 -0
  187. package/dist/components/fab/FAB.types.d.ts.map +1 -0
  188. package/dist/components/fab/FAB.types.js +8 -0
  189. package/dist/components/fab/FAB.types.js.map +1 -0
  190. package/dist/components/fab/FAB.variants.d.ts +48 -0
  191. package/dist/components/fab/FAB.variants.d.ts.map +1 -0
  192. package/dist/components/fab/FAB.variants.js +43 -0
  193. package/dist/components/fab/FAB.variants.js.map +1 -0
  194. package/dist/components/fab/index.d.ts +6 -0
  195. package/dist/components/fab/index.d.ts.map +1 -0
  196. package/dist/components/fab/index.js +9 -0
  197. package/dist/components/fab/index.js.map +1 -0
  198. package/dist/components/index.d.ts +30 -0
  199. package/dist/components/index.d.ts.map +1 -0
  200. package/dist/components/index.js +46 -0
  201. package/dist/components/index.js.map +1 -0
  202. package/dist/components/input/Input.d.ts +17 -0
  203. package/dist/components/input/Input.d.ts.map +1 -0
  204. package/dist/components/input/Input.js +59 -0
  205. package/dist/components/input/Input.js.map +1 -0
  206. package/dist/components/input/Input.styles.d.ts +8 -0
  207. package/dist/components/input/Input.styles.d.ts.map +1 -0
  208. package/dist/components/input/Input.styles.js +25 -0
  209. package/dist/components/input/Input.styles.js.map +1 -0
  210. package/dist/components/input/Input.types.d.ts +25 -0
  211. package/dist/components/input/Input.types.d.ts.map +1 -0
  212. package/dist/components/input/Input.types.js +9 -0
  213. package/dist/components/input/Input.types.js.map +1 -0
  214. package/dist/components/input/Input.variants.d.ts +23 -0
  215. package/dist/components/input/Input.variants.d.ts.map +1 -0
  216. package/dist/components/input/Input.variants.js +61 -0
  217. package/dist/components/input/Input.variants.js.map +1 -0
  218. package/dist/components/input/index.d.ts +6 -0
  219. package/dist/components/input/index.d.ts.map +1 -0
  220. package/dist/components/input/index.js +9 -0
  221. package/dist/components/input/index.js.map +1 -0
  222. package/dist/components/separator/Separator.d.ts +17 -0
  223. package/dist/components/separator/Separator.d.ts.map +1 -0
  224. package/dist/components/separator/Separator.js +46 -0
  225. package/dist/components/separator/Separator.js.map +1 -0
  226. package/dist/components/separator/Separator.styles.d.ts +8 -0
  227. package/dist/components/separator/Separator.styles.d.ts.map +1 -0
  228. package/dist/components/separator/Separator.styles.js +25 -0
  229. package/dist/components/separator/Separator.styles.js.map +1 -0
  230. package/dist/components/separator/Separator.types.d.ts +25 -0
  231. package/dist/components/separator/Separator.types.d.ts.map +1 -0
  232. package/dist/components/separator/Separator.types.js +8 -0
  233. package/dist/components/separator/Separator.types.js.map +1 -0
  234. package/dist/components/separator/index.d.ts +6 -0
  235. package/dist/components/separator/index.d.ts.map +1 -0
  236. package/dist/components/separator/index.js +9 -0
  237. package/dist/components/separator/index.js.map +1 -0
  238. package/dist/components/text/Text.d.ts +18 -0
  239. package/dist/components/text/Text.d.ts.map +1 -0
  240. package/dist/components/text/Text.js +45 -0
  241. package/dist/components/text/Text.js.map +1 -0
  242. package/dist/components/text/Text.types.d.ts +14 -0
  243. package/dist/components/text/Text.types.d.ts.map +1 -0
  244. package/dist/components/text/Text.types.js +10 -0
  245. package/dist/components/text/Text.types.js.map +1 -0
  246. package/dist/components/text/Text.variants.d.ts +23 -0
  247. package/dist/components/text/Text.variants.d.ts.map +1 -0
  248. package/dist/components/text/Text.variants.js +32 -0
  249. package/dist/components/text/Text.variants.js.map +1 -0
  250. package/dist/components/text/index.d.ts +6 -0
  251. package/dist/components/text/index.d.ts.map +1 -0
  252. package/dist/components/text/index.js +9 -0
  253. package/dist/components/text/index.js.map +1 -0
  254. package/dist/design-tokens/animation.d.ts +22 -0
  255. package/dist/design-tokens/animation.d.ts.map +1 -0
  256. package/dist/design-tokens/animation.js +23 -0
  257. package/dist/design-tokens/animation.js.map +1 -0
  258. package/dist/design-tokens/border-radius.d.ts +15 -0
  259. package/dist/design-tokens/border-radius.d.ts.map +1 -0
  260. package/dist/design-tokens/border-radius.js +17 -0
  261. package/dist/design-tokens/border-radius.js.map +1 -0
  262. package/dist/design-tokens/colors.d.ts +179 -0
  263. package/dist/design-tokens/colors.d.ts.map +1 -0
  264. package/dist/design-tokens/colors.js +109 -0
  265. package/dist/design-tokens/colors.js.map +1 -0
  266. package/dist/design-tokens/index.d.ts +16 -0
  267. package/dist/design-tokens/index.d.ts.map +1 -0
  268. package/dist/design-tokens/index.js +32 -0
  269. package/dist/design-tokens/index.js.map +1 -0
  270. package/dist/design-tokens/shadows.d.ts +103 -0
  271. package/dist/design-tokens/shadows.d.ts.map +1 -0
  272. package/dist/design-tokens/shadows.js +75 -0
  273. package/dist/design-tokens/shadows.js.map +1 -0
  274. package/dist/design-tokens/spacing.d.ts +30 -0
  275. package/dist/design-tokens/spacing.d.ts.map +1 -0
  276. package/dist/design-tokens/spacing.js +32 -0
  277. package/dist/design-tokens/spacing.js.map +1 -0
  278. package/dist/design-tokens/typography.d.ts +40 -0
  279. package/dist/design-tokens/typography.d.ts.map +1 -0
  280. package/dist/design-tokens/typography.js +40 -0
  281. package/dist/design-tokens/typography.js.map +1 -0
  282. package/dist/primitives/Box.d.ts +38 -0
  283. package/dist/primitives/Box.d.ts.map +1 -0
  284. package/dist/primitives/Box.js +70 -0
  285. package/dist/primitives/Box.js.map +1 -0
  286. package/dist/primitives/Pressable.d.ts +30 -0
  287. package/dist/primitives/Pressable.d.ts.map +1 -0
  288. package/dist/primitives/Pressable.js +48 -0
  289. package/dist/primitives/Pressable.js.map +1 -0
  290. package/dist/primitives/Text.d.ts +23 -0
  291. package/dist/primitives/Text.d.ts.map +1 -0
  292. package/dist/primitives/Text.js +42 -0
  293. package/dist/primitives/Text.js.map +1 -0
  294. package/dist/primitives/index.d.ts +14 -0
  295. package/dist/primitives/index.d.ts.map +1 -0
  296. package/dist/primitives/index.js +16 -0
  297. package/dist/primitives/index.js.map +1 -0
  298. package/dist/theme/ThemeContext.d.ts +10 -0
  299. package/dist/theme/ThemeContext.d.ts.map +1 -0
  300. package/dist/theme/ThemeContext.js +19 -0
  301. package/dist/theme/ThemeContext.js.map +1 -0
  302. package/dist/theme/ThemeProvider.d.ts +23 -0
  303. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  304. package/dist/theme/ThemeProvider.js +87 -0
  305. package/dist/theme/ThemeProvider.js.map +1 -0
  306. package/dist/theme/index.d.ts +9 -0
  307. package/dist/theme/index.d.ts.map +1 -0
  308. package/dist/theme/index.js +14 -0
  309. package/dist/theme/index.js.map +1 -0
  310. package/dist/theme/themes.d.ts +20 -0
  311. package/dist/theme/themes.d.ts.map +1 -0
  312. package/dist/theme/themes.js +65 -0
  313. package/dist/theme/themes.js.map +1 -0
  314. package/dist/theme/types.d.ts +92 -0
  315. package/dist/theme/types.d.ts.map +1 -0
  316. package/dist/theme/types.js +9 -0
  317. package/dist/theme/types.js.map +1 -0
  318. package/dist/theme/useTheme.d.ts +7 -0
  319. package/dist/theme/useTheme.d.ts.map +1 -0
  320. package/dist/theme/useTheme.js +9 -0
  321. package/dist/theme/useTheme.js.map +1 -0
  322. package/dist/utils/cn.d.ts +16 -0
  323. package/dist/utils/cn.d.ts.map +1 -0
  324. package/dist/utils/cn.js +33 -0
  325. package/dist/utils/cn.js.map +1 -0
  326. package/dist/utils/createVariants.d.ts +32 -0
  327. package/dist/utils/createVariants.d.ts.map +1 -0
  328. package/dist/utils/createVariants.js +26 -0
  329. package/dist/utils/createVariants.js.map +1 -0
  330. package/dist/utils/index.d.ts +7 -0
  331. package/dist/utils/index.d.ts.map +1 -0
  332. package/dist/utils/index.js +13 -0
  333. package/dist/utils/index.js.map +1 -0
  334. package/dist/utils/mergeProps.d.ts +10 -0
  335. package/dist/utils/mergeProps.d.ts.map +1 -0
  336. package/dist/utils/mergeProps.js +31 -0
  337. package/dist/utils/mergeProps.js.map +1 -0
  338. package/package.json +46 -3
  339. package/src/components/accordion/Accordion.styles.ts +46 -0
  340. package/src/components/accordion/Accordion.tsx +247 -0
  341. package/src/components/accordion/Accordion.types.ts +52 -0
  342. package/src/components/accordion/index.ts +17 -0
  343. package/src/components/alert/Alert.styles.ts +34 -0
  344. package/src/components/alert/Alert.tsx +87 -0
  345. package/src/components/alert/Alert.types.ts +24 -0
  346. package/src/components/alert/Alert.variants.ts +57 -0
  347. package/src/components/alert/index.ts +6 -0
  348. package/src/components/avatar/Avatar.styles.ts +20 -0
  349. package/src/components/avatar/Avatar.tsx +74 -0
  350. package/src/components/avatar/Avatar.types.ts +24 -0
  351. package/src/components/avatar/Avatar.variants.ts +55 -0
  352. package/src/components/avatar/index.ts +6 -0
  353. package/src/components/badge/Badge.styles.ts +30 -0
  354. package/src/components/badge/Badge.tsx +47 -0
  355. package/src/components/badge/Badge.types.ts +24 -0
  356. package/src/components/badge/Badge.variants.ts +62 -0
  357. package/src/components/badge/index.ts +6 -0
  358. package/src/components/button/Button.styles.ts +16 -0
  359. package/src/components/button/Button.tsx +108 -0
  360. package/src/components/button/Button.types.ts +30 -0
  361. package/src/components/button/Button.variants.ts +68 -0
  362. package/src/components/button/index.ts +6 -0
  363. package/src/components/card/Card.styles.ts +28 -0
  364. package/src/components/card/Card.tsx +112 -0
  365. package/src/components/card/Card.types.ts +26 -0
  366. package/src/components/card/Card.variants.ts +38 -0
  367. package/src/components/card/index.ts +18 -0
  368. package/src/components/checkbox/CheckBox.styles.ts +30 -0
  369. package/src/components/checkbox/CheckBox.tsx +98 -0
  370. package/src/components/checkbox/CheckBox.types.ts +26 -0
  371. package/src/components/checkbox/CheckBox.variants.ts +25 -0
  372. package/src/components/checkbox/index.ts +6 -0
  373. package/src/components/combobox/ComboBox.styles.ts +55 -0
  374. package/src/components/combobox/ComboBox.tsx +224 -0
  375. package/src/components/combobox/ComboBox.types.ts +51 -0
  376. package/src/components/combobox/ComboBox.variants.ts +82 -0
  377. package/src/components/combobox/index.ts +6 -0
  378. package/src/components/dialog/Dialog.styles.ts +50 -0
  379. package/src/components/dialog/Dialog.tsx +221 -0
  380. package/src/components/dialog/Dialog.types.ts +55 -0
  381. package/src/components/dialog/Dialog.variants.ts +24 -0
  382. package/src/components/dialog/index.ts +20 -0
  383. package/src/components/fab/FAB.styles.ts +49 -0
  384. package/src/components/fab/FAB.tsx +84 -0
  385. package/src/components/fab/FAB.types.ts +31 -0
  386. package/src/components/fab/FAB.variants.ts +55 -0
  387. package/src/components/fab/index.ts +6 -0
  388. package/src/components/index.ts +88 -0
  389. package/src/components/input/Input.styles.ts +23 -0
  390. package/src/components/input/Input.tsx +139 -0
  391. package/src/components/input/Input.types.ts +28 -0
  392. package/src/components/input/Input.variants.ts +71 -0
  393. package/src/components/input/index.ts +6 -0
  394. package/src/components/separator/Separator.styles.ts +23 -0
  395. package/src/components/separator/Separator.tsx +70 -0
  396. package/src/components/separator/Separator.types.ts +28 -0
  397. package/src/components/separator/index.ts +10 -0
  398. package/src/components/text/Text.tsx +75 -0
  399. package/src/components/text/Text.types.ts +27 -0
  400. package/src/components/text/Text.variants.ts +44 -0
  401. package/src/components/text/index.ts +6 -0
  402. package/src/design-tokens/animation.ts +23 -0
  403. package/src/design-tokens/border-radius.ts +16 -0
  404. package/src/design-tokens/colors.ts +120 -0
  405. package/src/design-tokens/index.ts +21 -0
  406. package/src/design-tokens/shadows.ts +78 -0
  407. package/src/design-tokens/spacing.ts +31 -0
  408. package/src/design-tokens/typography.ts +45 -0
  409. package/src/primitives/Box.tsx +121 -0
  410. package/src/primitives/Pressable.tsx +106 -0
  411. package/src/primitives/Text.tsx +84 -0
  412. package/src/primitives/index.ts +15 -0
  413. package/src/theme/ThemeContext.ts +20 -0
  414. package/src/theme/ThemeProvider.tsx +152 -0
  415. package/src/theme/index.ts +9 -0
  416. package/src/theme/themes.ts +71 -0
  417. package/src/theme/types.ts +89 -0
  418. package/src/theme/useTheme.ts +7 -0
  419. package/src/utils/cn.ts +37 -0
  420. package/src/utils/createVariants.ts +47 -0
  421. package/src/utils/index.ts +7 -0
  422. package/src/utils/mergeProps.ts +35 -0
@@ -0,0 +1,247 @@
1
+ /**
2
+ * ANAN-UI — Component: Accordion
3
+ *
4
+ * A compound disclosure component: Accordion → AccordionItem →
5
+ * AccordionTrigger / AccordionContent. Expansion state is managed through an
6
+ * internal context, supporting single/multiple expansion with controlled and
7
+ * uncontrolled usage.
8
+ *
9
+ * Collapsed content is unmounted (React Native has no built-in height
10
+ * animation). The trigger exposes `accessibilityRole="button"` and
11
+ * `accessibilityState={{ expanded, disabled }}` so screen readers announce
12
+ * the disclosure state.
13
+ */
14
+
15
+ import { createContext, useContext, useCallback, useMemo, useState } from 'react';
16
+ import { View } from 'react-native';
17
+ import { useTheme } from '../../theme';
18
+ import { cn } from '../../utils/cn';
19
+ import { PressablePrimitive } from '../../primitives/Pressable';
20
+ import { TextPrimitive } from '../../primitives/Text';
21
+ import { accordionStyles } from './Accordion.styles';
22
+ import type {
23
+ AccordionProps,
24
+ AccordionType,
25
+ AccordionItemProps,
26
+ AccordionTriggerProps,
27
+ AccordionContentProps,
28
+ } from './Accordion.types';
29
+
30
+ interface AccordionContextValue {
31
+ type: AccordionType;
32
+ collapsible: boolean;
33
+ expandedValues: string[];
34
+ toggle: (value: string) => void;
35
+ }
36
+
37
+ const AccordionContext = createContext<AccordionContextValue | null>(null);
38
+
39
+ function useAccordionContext(component: string): AccordionContextValue {
40
+ const ctx = useContext(AccordionContext);
41
+ if (ctx === null) {
42
+ throw new Error(`${component} must be used within an <Accordion>`);
43
+ }
44
+ return ctx;
45
+ }
46
+
47
+ interface ItemContextValue {
48
+ value: string;
49
+ expanded: boolean;
50
+ disabled: boolean;
51
+ }
52
+
53
+ const ItemContext = createContext<ItemContextValue | null>(null);
54
+
55
+ function useItemContext(component: string): ItemContextValue {
56
+ const ctx = useContext(ItemContext);
57
+ if (ctx === null) {
58
+ throw new Error(`${component} must be used within an <AccordionItem>`);
59
+ }
60
+ return ctx;
61
+ }
62
+
63
+ function normalizeSingle(value: string | undefined): string[] {
64
+ if (value === undefined) return [];
65
+ return [value];
66
+ }
67
+
68
+ function normalizeMultiple(value: string[] | undefined): string[] {
69
+ if (value === undefined) return [];
70
+ return value;
71
+ }
72
+
73
+ export function Accordion({
74
+ type = 'single',
75
+ collapsible = false,
76
+ value: valueProp,
77
+ defaultValue,
78
+ onValueChange,
79
+ style,
80
+ children,
81
+ ...rest
82
+ }: AccordionProps) {
83
+ const isControlled = valueProp !== undefined;
84
+ const [internal, setInternal] = useState<string[]>(() => {
85
+ if (type === 'single') return normalizeSingle(defaultValue as string | undefined);
86
+ return normalizeMultiple(defaultValue as string[] | undefined);
87
+ });
88
+
89
+ const expandedValues = isControlled
90
+ ? type === 'single'
91
+ ? normalizeSingle(valueProp as string | undefined)
92
+ : normalizeMultiple(valueProp as string[] | undefined)
93
+ : internal;
94
+
95
+ const notifyChange = useCallback(
96
+ (next: string[]) => {
97
+ if (onValueChange === undefined) return;
98
+ if (type === 'single') {
99
+ (onValueChange as (value: string | undefined) => void)(next[0]);
100
+ } else {
101
+ (onValueChange as (value: string[]) => void)(next);
102
+ }
103
+ },
104
+ [onValueChange, type],
105
+ );
106
+
107
+ const toggle = useCallback(
108
+ (itemValue: string) => {
109
+ const isOpen = expandedValues.includes(itemValue);
110
+ let next: string[];
111
+
112
+ if (isOpen) {
113
+ // In single mode an item can only collapse if `collapsible` allows it.
114
+ if (type === 'single' && !collapsible) return;
115
+ next = expandedValues.filter((v) => v !== itemValue);
116
+ } else {
117
+ next = type === 'single' ? [itemValue] : [...expandedValues, itemValue];
118
+ }
119
+
120
+ if (!isControlled) setInternal(next);
121
+ notifyChange(next);
122
+ },
123
+ [collapsible, expandedValues, isControlled, notifyChange, type],
124
+ );
125
+
126
+ const context = useMemo<AccordionContextValue>(
127
+ () => ({ type, collapsible, expandedValues, toggle }),
128
+ [collapsible, expandedValues, toggle, type],
129
+ );
130
+
131
+ return (
132
+ <AccordionContext.Provider value={context}>
133
+ <View {...rest} style={cn(accordionStyles.root, style)}>
134
+ {children}
135
+ </View>
136
+ </AccordionContext.Provider>
137
+ );
138
+ }
139
+
140
+ Accordion.displayName = 'Accordion';
141
+
142
+ export function AccordionItem({
143
+ value,
144
+ disabled = false,
145
+ style,
146
+ children,
147
+ ...rest
148
+ }: AccordionItemProps) {
149
+ const { theme } = useTheme();
150
+ const { expandedValues } = useAccordionContext('AccordionItem');
151
+
152
+ const expanded = expandedValues.includes(value);
153
+
154
+ const itemContext = useMemo<ItemContextValue>(
155
+ () => ({ value, expanded, disabled }),
156
+ [disabled, expanded, value],
157
+ );
158
+
159
+ return (
160
+ <ItemContext.Provider value={itemContext}>
161
+ <View
162
+ {...rest}
163
+ style={cn(
164
+ accordionStyles.item,
165
+ { borderBottomColor: theme.colors.border },
166
+ style,
167
+ )}
168
+ >
169
+ {children}
170
+ </View>
171
+ </ItemContext.Provider>
172
+ );
173
+ }
174
+
175
+ AccordionItem.displayName = 'AccordionItem';
176
+
177
+ export function AccordionTrigger({
178
+ style,
179
+ children,
180
+ ...rest
181
+ }: AccordionTriggerProps) {
182
+ const { theme } = useTheme();
183
+ const { toggle } = useAccordionContext('AccordionTrigger');
184
+ const { value, expanded, disabled } = useItemContext('AccordionTrigger');
185
+
186
+ return (
187
+ <PressablePrimitive
188
+ {...rest}
189
+ disabled={disabled}
190
+ onPress={() => toggle(value)}
191
+ accessibilityRole="button"
192
+ accessibilityState={{ expanded, disabled }}
193
+ style={cn(
194
+ accordionStyles.trigger,
195
+ { opacity: disabled ? 0.5 : 1 },
196
+ style,
197
+ )}
198
+ >
199
+ <TextPrimitive
200
+ color="foreground"
201
+ fontSize="base"
202
+ fontWeight="medium"
203
+ style={accordionStyles.triggerLabel}
204
+ >
205
+ {children}
206
+ </TextPrimitive>
207
+ <View
208
+ accessibilityElementsHidden
209
+ importantForAccessibility="no-hide-descendants"
210
+ style={cn(
211
+ accordionStyles.chevron,
212
+ expanded
213
+ ? accordionStyles.chevronExpanded
214
+ : accordionStyles.chevronCollapsed,
215
+ { borderColor: theme.colors.mutedForeground },
216
+ )}
217
+ />
218
+ </PressablePrimitive>
219
+ );
220
+ }
221
+
222
+ AccordionTrigger.displayName = 'AccordionTrigger';
223
+
224
+ export function AccordionContent({
225
+ style,
226
+ children,
227
+ ...rest
228
+ }: AccordionContentProps) {
229
+ const { expanded } = useItemContext('AccordionContent');
230
+
231
+ // Collapse unmounts the content (no built-in height animation in RN).
232
+ if (!expanded) return null;
233
+
234
+ return (
235
+ <View {...rest} style={cn(accordionStyles.content, style)}>
236
+ {typeof children === 'string' ? (
237
+ <TextPrimitive color="mutedForeground" fontSize="sm">
238
+ {children}
239
+ </TextPrimitive>
240
+ ) : (
241
+ children
242
+ )}
243
+ </View>
244
+ );
245
+ }
246
+
247
+ AccordionContent.displayName = 'AccordionContent';
@@ -0,0 +1,52 @@
1
+ /**
2
+ * ANAN-UI — Component: Accordion Types
3
+ *
4
+ * Compound accordion: Accordion → AccordionItem → AccordionTrigger / Content.
5
+ * Supports single/multiple expansion with controlled and uncontrolled state.
6
+ */
7
+
8
+ import type { ViewProps, StyleProp, ViewStyle } from 'react-native';
9
+ import type { ReactNode } from 'react';
10
+
11
+ export type AccordionType = 'single' | 'multiple';
12
+
13
+ interface AccordionBaseProps extends Omit<ViewProps, 'style'> {
14
+ /** Allow collapsing the open item in `single` mode. Defaults to `false`. */
15
+ collapsible?: boolean;
16
+ style?: StyleProp<ViewStyle>;
17
+ children?: ReactNode;
18
+ }
19
+
20
+ export type AccordionProps =
21
+ | (AccordionBaseProps & {
22
+ type?: 'single';
23
+ /** Controlled open value (undefined = closed). */
24
+ value?: string;
25
+ defaultValue?: string;
26
+ onValueChange?: (value: string | undefined) => void;
27
+ })
28
+ | (AccordionBaseProps & {
29
+ type: 'multiple';
30
+ /** Controlled open values. */
31
+ value?: string[];
32
+ defaultValue?: string[];
33
+ onValueChange?: (value: string[]) => void;
34
+ });
35
+
36
+ export interface AccordionItemProps extends Omit<ViewProps, 'style'> {
37
+ /** Unique identifier for this item. */
38
+ value: string;
39
+ disabled?: boolean;
40
+ style?: StyleProp<ViewStyle>;
41
+ children?: ReactNode;
42
+ }
43
+
44
+ export interface AccordionTriggerProps extends Omit<ViewProps, 'style'> {
45
+ style?: StyleProp<ViewStyle>;
46
+ children?: ReactNode;
47
+ }
48
+
49
+ export interface AccordionContentProps extends Omit<ViewProps, 'style'> {
50
+ style?: StyleProp<ViewStyle>;
51
+ children?: ReactNode;
52
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * ANAN-UI — Component: Accordion Barrel Export
3
+ */
4
+
5
+ export {
6
+ Accordion,
7
+ AccordionItem,
8
+ AccordionTrigger,
9
+ AccordionContent,
10
+ } from './Accordion';
11
+ export type {
12
+ AccordionProps,
13
+ AccordionType,
14
+ AccordionItemProps,
15
+ AccordionTriggerProps,
16
+ AccordionContentProps,
17
+ } from './Accordion.types';
@@ -0,0 +1,34 @@
1
+ /**
2
+ * ANAN-UI — Component: Alert Styles
3
+ *
4
+ * Static styles created with StyleSheet.create. The surface and title colors
5
+ * are resolved from the theme at render time via Alert.variants.
6
+ */
7
+
8
+ import { StyleSheet } from 'react-native';
9
+ import { spacing, borderRadius } from '../../design-tokens';
10
+
11
+ export const alertStyles = StyleSheet.create({
12
+ root: {
13
+ flexDirection: 'row',
14
+ gap: spacing[3],
15
+ padding: spacing[4],
16
+ borderRadius: borderRadius.lg,
17
+ borderWidth: 1,
18
+ },
19
+ body: {
20
+ flex: 1,
21
+ gap: spacing[1],
22
+ },
23
+ dismiss: {
24
+ width: 24,
25
+ height: 24,
26
+ alignItems: 'center',
27
+ justifyContent: 'center',
28
+ borderRadius: borderRadius.full,
29
+ },
30
+ dismissGlyph: {
31
+ fontSize: 16,
32
+ lineHeight: 18,
33
+ },
34
+ });
@@ -0,0 +1,87 @@
1
+ /**
2
+ * ANAN-UI — Component: Alert
3
+ *
4
+ * A themed banner conveying important information. Supports an optional title,
5
+ * description content, a dismiss button, and semantic variants
6
+ * (default / destructive / success / info).
7
+ *
8
+ * Exposes `accessibilityRole="alert"` with a polite live region so screen
9
+ * readers announce the content when it appears.
10
+ */
11
+
12
+ import { View, Pressable } from 'react-native';
13
+ import { useTheme } from '../../theme';
14
+ import { cn } from '../../utils/cn';
15
+ import { TextPrimitive } from '../../primitives/Text';
16
+ import { getAlertVariants, getAlertDescriptionColor } from './Alert.variants';
17
+ import { alertStyles } from './Alert.styles';
18
+ import type { AlertProps, AlertVariant } from './Alert.types';
19
+
20
+ export function Alert({
21
+ title,
22
+ variant: variantProp,
23
+ onDismiss,
24
+ dismissLabel = 'Dismiss',
25
+ style,
26
+ children,
27
+ ...rest
28
+ }: AlertProps) {
29
+ const { theme } = useTheme();
30
+ const { container, title: titleColors, defaultVariant } = getAlertVariants(theme);
31
+ const variant: AlertVariant = variantProp ?? defaultVariant;
32
+
33
+ return (
34
+ <View
35
+ {...rest}
36
+ style={cn(alertStyles.root, container[variant], style)}
37
+ >
38
+ <View
39
+ accessible
40
+ accessibilityRole="alert"
41
+ accessibilityLiveRegion="polite"
42
+ style={alertStyles.body}
43
+ >
44
+ {title !== undefined && (
45
+ <TextPrimitive
46
+ fontSize="base"
47
+ fontWeight="semibold"
48
+ style={titleColors[variant]}
49
+ >
50
+ {title}
51
+ </TextPrimitive>
52
+ )}
53
+
54
+ {typeof children === 'string' ? (
55
+ <TextPrimitive
56
+ fontSize="sm"
57
+ style={{ color: theme.colors[getAlertDescriptionColor(variant)] }}
58
+ >
59
+ {children}
60
+ </TextPrimitive>
61
+ ) : (
62
+ children
63
+ )}
64
+ </View>
65
+
66
+ {onDismiss !== undefined && (
67
+ <Pressable
68
+ onPress={onDismiss}
69
+ accessibilityRole="button"
70
+ accessibilityLabel={dismissLabel}
71
+ hitSlop={8}
72
+ style={cn(alertStyles.dismiss, { opacity: 0.8 })}
73
+ >
74
+ <TextPrimitive
75
+ fontSize="sm"
76
+ fontWeight="bold"
77
+ style={{ color: theme.colors[getAlertDescriptionColor(variant)] }}
78
+ >
79
+ {'\u00D7'}
80
+ </TextPrimitive>
81
+ </Pressable>
82
+ )}
83
+ </View>
84
+ );
85
+ }
86
+
87
+ Alert.displayName = 'Alert';
@@ -0,0 +1,24 @@
1
+ /**
2
+ * ANAN-UI — Component: Alert Types
3
+ *
4
+ * A themed banner conveying important information, with optional title,
5
+ * dismiss button, and semantic variants.
6
+ */
7
+
8
+ import type { ViewProps, StyleProp, ViewStyle } from 'react-native';
9
+ import type { ReactNode } from 'react';
10
+
11
+ export type AlertVariant = 'default' | 'destructive' | 'success' | 'info';
12
+
13
+ export interface AlertProps extends Omit<ViewProps, 'style'> {
14
+ /** Optional heading rendered above the description. */
15
+ title?: string;
16
+ /** Semantic variant; drives the surface and title color. */
17
+ variant?: AlertVariant;
18
+ /** Renders a close button and is called when it is pressed. */
19
+ onDismiss?: () => void;
20
+ /** Accessible label for the close button. Defaults to "Dismiss". */
21
+ dismissLabel?: string;
22
+ style?: StyleProp<ViewStyle>;
23
+ children?: ReactNode;
24
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * ANAN-UI — Component: Alert Variants
3
+ *
4
+ * Variant surface styles resolved against the active theme at render time.
5
+ * Existing semantic roles are reused: `accent` (green) for success and
6
+ * `primary` for info — no hardcoded colors.
7
+ */
8
+
9
+ import type { TextStyle, ViewStyle } from 'react-native';
10
+ import type { Theme, ThemeColors } from '../../theme/types';
11
+ import type { AlertVariant } from './Alert.types';
12
+
13
+ export interface AlertVariantConfig {
14
+ container: Record<AlertVariant, ViewStyle>;
15
+ title: Record<AlertVariant, TextStyle>;
16
+ defaultVariant: AlertVariant;
17
+ }
18
+
19
+ export function getAlertVariants(theme: Theme): AlertVariantConfig {
20
+ return {
21
+ container: {
22
+ default: {
23
+ backgroundColor: theme.colors.card,
24
+ borderColor: theme.colors.border,
25
+ },
26
+ destructive: {
27
+ backgroundColor: theme.colors.destructive,
28
+ borderColor: 'transparent',
29
+ },
30
+ success: {
31
+ backgroundColor: theme.colors.accent,
32
+ borderColor: 'transparent',
33
+ },
34
+ info: {
35
+ backgroundColor: theme.colors.primary,
36
+ borderColor: 'transparent',
37
+ },
38
+ },
39
+ title: {
40
+ default: { color: theme.colors.foreground },
41
+ destructive: { color: theme.colors.destructiveForeground },
42
+ success: { color: theme.colors.accentForeground },
43
+ info: { color: theme.colors.primaryForeground },
44
+ },
45
+ defaultVariant: 'default',
46
+ };
47
+ }
48
+
49
+ /** Foreground color role for the description text of each variant. */
50
+ export function getAlertDescriptionColor(
51
+ variant: AlertVariant,
52
+ ): keyof ThemeColors {
53
+ if (variant === 'destructive') return 'destructiveForeground';
54
+ if (variant === 'success') return 'accentForeground';
55
+ if (variant === 'info') return 'primaryForeground';
56
+ return 'mutedForeground';
57
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * ANAN-UI — Component: Alert Barrel Export
3
+ */
4
+
5
+ export { Alert } from './Alert';
6
+ export type { AlertProps, AlertVariant } from './Alert.types';
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ANAN-UI — Component: Avatar Styles
3
+ *
4
+ * Static styles created with StyleSheet.create. Sizes, radii, and colors are
5
+ * resolved from the theme/tokens at render time via Avatar.variants.
6
+ */
7
+
8
+ import { StyleSheet } from 'react-native';
9
+
10
+ export const avatarStyles = StyleSheet.create({
11
+ root: {
12
+ overflow: 'hidden',
13
+ alignItems: 'center',
14
+ justifyContent: 'center',
15
+ },
16
+ image: {
17
+ width: '100%',
18
+ height: '100%',
19
+ },
20
+ });
@@ -0,0 +1,74 @@
1
+ /**
2
+ * ANAN-UI — Component: Avatar
3
+ *
4
+ * Displays an image with an initials fallback. The fallback is used when no
5
+ * `src` is provided or when the image fails to load. Exposes
6
+ * `accessibilityRole="image"` with a label from `alt` (falling back to `name`).
7
+ */
8
+
9
+ import { useState, useCallback } from 'react';
10
+ import { View, Image } from 'react-native';
11
+ import { useTheme } from '../../theme';
12
+ import { cn } from '../../utils/cn';
13
+ import { TextPrimitive } from '../../primitives/Text';
14
+ import { getAvatarVariants, getInitials } from './Avatar.variants';
15
+ import { avatarStyles } from './Avatar.styles';
16
+ import type { AvatarProps, AvatarSize, AvatarVariant } from './Avatar.types';
17
+
18
+ export function Avatar({
19
+ src,
20
+ alt,
21
+ name,
22
+ size: sizeProp,
23
+ variant: variantProp,
24
+ style,
25
+ ...rest
26
+ }: AvatarProps) {
27
+ const { theme } = useTheme();
28
+ const [failed, setFailed] = useState(false);
29
+
30
+ const { size, textSize, variant, defaultSize, defaultVariant } =
31
+ getAvatarVariants(theme);
32
+ const sizeKey: AvatarSize = sizeProp ?? defaultSize;
33
+ const variantKey: AvatarVariant = variantProp ?? defaultVariant;
34
+
35
+ const handleError = useCallback(() => setFailed(true), []);
36
+
37
+ const label = alt ?? name;
38
+ const showImage = src !== undefined && !failed;
39
+
40
+ return (
41
+ <View
42
+ accessible
43
+ accessibilityRole="image"
44
+ accessibilityLabel={label}
45
+ {...rest}
46
+ style={cn(
47
+ avatarStyles.root,
48
+ size[sizeKey],
49
+ variant[variantKey],
50
+ { backgroundColor: theme.colors.muted },
51
+ style,
52
+ )}
53
+ >
54
+ {showImage ? (
55
+ <Image
56
+ source={{ uri: src }}
57
+ accessibilityIgnoresInvertColors
58
+ onError={handleError}
59
+ style={avatarStyles.image}
60
+ />
61
+ ) : (
62
+ <TextPrimitive
63
+ color="mutedForeground"
64
+ fontWeight="semibold"
65
+ style={textSize[sizeKey]}
66
+ >
67
+ {name !== undefined ? getInitials(name) : ''}
68
+ </TextPrimitive>
69
+ )}
70
+ </View>
71
+ );
72
+ }
73
+
74
+ Avatar.displayName = 'Avatar';
@@ -0,0 +1,24 @@
1
+ /**
2
+ * ANAN-UI — Component: Avatar Types
3
+ *
4
+ * Displays an image with an initials fallback derived from `name`, or the
5
+ * initials background when no image is given.
6
+ */
7
+
8
+ import type { ViewProps, StyleProp, ViewStyle } from 'react-native';
9
+
10
+ export type AvatarSize = 'sm' | 'default' | 'lg' | 'xl';
11
+
12
+ export type AvatarVariant = 'circle' | 'rounded';
13
+
14
+ export interface AvatarProps extends Omit<ViewProps, 'style'> {
15
+ /** Image URI. Falls back to initials on load error or when omitted. */
16
+ src?: string;
17
+ /** Accessible description of the image. Falls back to `name`. */
18
+ alt?: string;
19
+ /** Full name used to derive the initials fallback (up to 2 letters). */
20
+ name?: string;
21
+ size?: AvatarSize;
22
+ variant?: AvatarVariant;
23
+ style?: StyleProp<ViewStyle>;
24
+ }