@sudobility/components-rn 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/README.md +252 -0
  2. package/dist/index.cjs.js +10311 -0
  3. package/dist/index.cjs.js.map +1 -0
  4. package/dist/index.d.ts +116 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.esm.js +10284 -0
  7. package/dist/index.esm.js.map +1 -0
  8. package/dist/lib/utils.d.ts +8 -0
  9. package/dist/lib/utils.d.ts.map +1 -0
  10. package/dist/ui/ActionButton/ActionButton.d.ts +33 -0
  11. package/dist/ui/ActionButton/ActionButton.d.ts.map +1 -0
  12. package/dist/ui/ActionButton/index.d.ts +3 -0
  13. package/dist/ui/ActionButton/index.d.ts.map +1 -0
  14. package/dist/ui/AddressLink/AddressLink.d.ts +39 -0
  15. package/dist/ui/AddressLink/AddressLink.d.ts.map +1 -0
  16. package/dist/ui/AddressLink/index.d.ts +3 -0
  17. package/dist/ui/AddressLink/index.d.ts.map +1 -0
  18. package/dist/ui/Alert/Alert.d.ts +27 -0
  19. package/dist/ui/Alert/Alert.d.ts.map +1 -0
  20. package/dist/ui/Alert/index.d.ts +2 -0
  21. package/dist/ui/Alert/index.d.ts.map +1 -0
  22. package/dist/ui/AnimatedCounter/AnimatedCounter.d.ts +46 -0
  23. package/dist/ui/AnimatedCounter/AnimatedCounter.d.ts.map +1 -0
  24. package/dist/ui/AnimatedCounter/index.d.ts +3 -0
  25. package/dist/ui/AnimatedCounter/index.d.ts.map +1 -0
  26. package/dist/ui/AnimatedSection/AnimatedSection.d.ts +47 -0
  27. package/dist/ui/AnimatedSection/AnimatedSection.d.ts.map +1 -0
  28. package/dist/ui/AnimatedSection/index.d.ts +3 -0
  29. package/dist/ui/AnimatedSection/index.d.ts.map +1 -0
  30. package/dist/ui/AspectRatio/AspectRatio.d.ts +33 -0
  31. package/dist/ui/AspectRatio/AspectRatio.d.ts.map +1 -0
  32. package/dist/ui/AspectRatio/index.d.ts +3 -0
  33. package/dist/ui/AspectRatio/index.d.ts.map +1 -0
  34. package/dist/ui/Avatar/Avatar.d.ts +52 -0
  35. package/dist/ui/Avatar/Avatar.d.ts.map +1 -0
  36. package/dist/ui/Avatar/index.d.ts +3 -0
  37. package/dist/ui/Avatar/index.d.ts.map +1 -0
  38. package/dist/ui/Backdrop/Backdrop.d.ts +41 -0
  39. package/dist/ui/Backdrop/Backdrop.d.ts.map +1 -0
  40. package/dist/ui/Backdrop/index.d.ts +3 -0
  41. package/dist/ui/Backdrop/index.d.ts.map +1 -0
  42. package/dist/ui/Badge/Badge.d.ts +44 -0
  43. package/dist/ui/Badge/Badge.d.ts.map +1 -0
  44. package/dist/ui/Badge/index.d.ts +3 -0
  45. package/dist/ui/Badge/index.d.ts.map +1 -0
  46. package/dist/ui/Box/Box.d.ts +47 -0
  47. package/dist/ui/Box/Box.d.ts.map +1 -0
  48. package/dist/ui/Box/index.d.ts +3 -0
  49. package/dist/ui/Box/index.d.ts.map +1 -0
  50. package/dist/ui/Breadcrumb/Breadcrumb.d.ts +51 -0
  51. package/dist/ui/Breadcrumb/Breadcrumb.d.ts.map +1 -0
  52. package/dist/ui/Breadcrumb/index.d.ts +3 -0
  53. package/dist/ui/Breadcrumb/index.d.ts.map +1 -0
  54. package/dist/ui/BreadcrumbNav/BreadcrumbNav.d.ts +34 -0
  55. package/dist/ui/BreadcrumbNav/BreadcrumbNav.d.ts.map +1 -0
  56. package/dist/ui/BreadcrumbNav/index.d.ts +2 -0
  57. package/dist/ui/BreadcrumbNav/index.d.ts.map +1 -0
  58. package/dist/ui/Button/Button.d.ts +29 -0
  59. package/dist/ui/Button/Button.d.ts.map +1 -0
  60. package/dist/ui/Button/Button.shared.d.ts +28 -0
  61. package/dist/ui/Button/Button.shared.d.ts.map +1 -0
  62. package/dist/ui/Button/index.d.ts +3 -0
  63. package/dist/ui/Button/index.d.ts.map +1 -0
  64. package/dist/ui/CTASection/CTASection.d.ts +44 -0
  65. package/dist/ui/CTASection/CTASection.d.ts.map +1 -0
  66. package/dist/ui/CTASection/index.d.ts +2 -0
  67. package/dist/ui/CTASection/index.d.ts.map +1 -0
  68. package/dist/ui/Calendar/Calendar.d.ts +34 -0
  69. package/dist/ui/Calendar/Calendar.d.ts.map +1 -0
  70. package/dist/ui/Calendar/index.d.ts +3 -0
  71. package/dist/ui/Calendar/index.d.ts.map +1 -0
  72. package/dist/ui/Card/Card.d.ts +22 -0
  73. package/dist/ui/Card/Card.d.ts.map +1 -0
  74. package/dist/ui/Card/index.d.ts +2 -0
  75. package/dist/ui/Card/index.d.ts.map +1 -0
  76. package/dist/ui/Center/Center.d.ts +31 -0
  77. package/dist/ui/Center/Center.d.ts.map +1 -0
  78. package/dist/ui/Center/index.d.ts +3 -0
  79. package/dist/ui/Center/index.d.ts.map +1 -0
  80. package/dist/ui/ChainBadge.d.ts +10 -0
  81. package/dist/ui/ChainBadge.d.ts.map +1 -0
  82. package/dist/ui/Checkbox/Checkbox.d.ts +54 -0
  83. package/dist/ui/Checkbox/Checkbox.d.ts.map +1 -0
  84. package/dist/ui/Checkbox/index.d.ts +3 -0
  85. package/dist/ui/Checkbox/index.d.ts.map +1 -0
  86. package/dist/ui/Code/Code.d.ts +30 -0
  87. package/dist/ui/Code/Code.d.ts.map +1 -0
  88. package/dist/ui/Code/index.d.ts +3 -0
  89. package/dist/ui/Code/index.d.ts.map +1 -0
  90. package/dist/ui/CodeDisplay/CodeDisplay.d.ts +40 -0
  91. package/dist/ui/CodeDisplay/CodeDisplay.d.ts.map +1 -0
  92. package/dist/ui/CodeDisplay/index.d.ts +3 -0
  93. package/dist/ui/CodeDisplay/index.d.ts.map +1 -0
  94. package/dist/ui/CollapsibleSection/CollapsibleSection.d.ts +52 -0
  95. package/dist/ui/CollapsibleSection/CollapsibleSection.d.ts.map +1 -0
  96. package/dist/ui/CollapsibleSection/index.d.ts +2 -0
  97. package/dist/ui/CollapsibleSection/index.d.ts.map +1 -0
  98. package/dist/ui/Combobox/Combobox.d.ts +49 -0
  99. package/dist/ui/Combobox/Combobox.d.ts.map +1 -0
  100. package/dist/ui/Combobox/index.d.ts +3 -0
  101. package/dist/ui/Combobox/index.d.ts.map +1 -0
  102. package/dist/ui/Command/Command.d.ts +52 -0
  103. package/dist/ui/Command/Command.d.ts.map +1 -0
  104. package/dist/ui/Command/index.d.ts +2 -0
  105. package/dist/ui/Command/index.d.ts.map +1 -0
  106. package/dist/ui/Container/Container.d.ts +35 -0
  107. package/dist/ui/Container/Container.d.ts.map +1 -0
  108. package/dist/ui/Container/index.d.ts +3 -0
  109. package/dist/ui/Container/index.d.ts.map +1 -0
  110. package/dist/ui/DashboardStatCard/DashboardStatCard.d.ts +36 -0
  111. package/dist/ui/DashboardStatCard/DashboardStatCard.d.ts.map +1 -0
  112. package/dist/ui/DashboardStatCard/index.d.ts +2 -0
  113. package/dist/ui/DashboardStatCard/index.d.ts.map +1 -0
  114. package/dist/ui/DataList/DataList.d.ts +53 -0
  115. package/dist/ui/DataList/DataList.d.ts.map +1 -0
  116. package/dist/ui/DataList/index.d.ts +3 -0
  117. package/dist/ui/DataList/index.d.ts.map +1 -0
  118. package/dist/ui/DateInput/DateInput.d.ts +45 -0
  119. package/dist/ui/DateInput/DateInput.d.ts.map +1 -0
  120. package/dist/ui/DateInput/index.d.ts +3 -0
  121. package/dist/ui/DateInput/index.d.ts.map +1 -0
  122. package/dist/ui/DateTimePicker/DateTimePicker.d.ts +39 -0
  123. package/dist/ui/DateTimePicker/DateTimePicker.d.ts.map +1 -0
  124. package/dist/ui/DateTimePicker/index.d.ts +3 -0
  125. package/dist/ui/DateTimePicker/index.d.ts.map +1 -0
  126. package/dist/ui/Dialog/Dialog.d.ts +35 -0
  127. package/dist/ui/Dialog/Dialog.d.ts.map +1 -0
  128. package/dist/ui/Dialog/index.d.ts +3 -0
  129. package/dist/ui/Dialog/index.d.ts.map +1 -0
  130. package/dist/ui/Divider/Divider.d.ts +45 -0
  131. package/dist/ui/Divider/Divider.d.ts.map +1 -0
  132. package/dist/ui/Divider/index.d.ts +3 -0
  133. package/dist/ui/Divider/index.d.ts.map +1 -0
  134. package/dist/ui/Dropdown/Dropdown.d.ts +46 -0
  135. package/dist/ui/Dropdown/Dropdown.d.ts.map +1 -0
  136. package/dist/ui/Dropdown/index.d.ts +3 -0
  137. package/dist/ui/Dropdown/index.d.ts.map +1 -0
  138. package/dist/ui/EmptyState/EmptyState.d.ts +43 -0
  139. package/dist/ui/EmptyState/EmptyState.d.ts.map +1 -0
  140. package/dist/ui/EmptyState/index.d.ts +3 -0
  141. package/dist/ui/EmptyState/index.d.ts.map +1 -0
  142. package/dist/ui/ExternalLink/ExternalLink.d.ts +45 -0
  143. package/dist/ui/ExternalLink/ExternalLink.d.ts.map +1 -0
  144. package/dist/ui/ExternalLink/index.d.ts +3 -0
  145. package/dist/ui/ExternalLink/index.d.ts.map +1 -0
  146. package/dist/ui/FeatureCard/FeatureCard.d.ts +47 -0
  147. package/dist/ui/FeatureCard/FeatureCard.d.ts.map +1 -0
  148. package/dist/ui/FeatureCard/index.d.ts +2 -0
  149. package/dist/ui/FeatureCard/index.d.ts.map +1 -0
  150. package/dist/ui/FeatureGrid/FeatureGrid.d.ts +51 -0
  151. package/dist/ui/FeatureGrid/FeatureGrid.d.ts.map +1 -0
  152. package/dist/ui/FeatureGrid/index.d.ts +2 -0
  153. package/dist/ui/FeatureGrid/index.d.ts.map +1 -0
  154. package/dist/ui/FileInput/FileInput.d.ts +54 -0
  155. package/dist/ui/FileInput/FileInput.d.ts.map +1 -0
  156. package/dist/ui/FileInput/index.d.ts +3 -0
  157. package/dist/ui/FileInput/index.d.ts.map +1 -0
  158. package/dist/ui/Flex/Flex.d.ts +40 -0
  159. package/dist/ui/Flex/Flex.d.ts.map +1 -0
  160. package/dist/ui/Flex/index.d.ts +3 -0
  161. package/dist/ui/Flex/index.d.ts.map +1 -0
  162. package/dist/ui/FloatingPanel/FloatingPanel.d.ts +38 -0
  163. package/dist/ui/FloatingPanel/FloatingPanel.d.ts.map +1 -0
  164. package/dist/ui/FloatingPanel/index.d.ts +3 -0
  165. package/dist/ui/FloatingPanel/index.d.ts.map +1 -0
  166. package/dist/ui/FormAlerts/FormAlerts.d.ts +38 -0
  167. package/dist/ui/FormAlerts/FormAlerts.d.ts.map +1 -0
  168. package/dist/ui/FormAlerts/index.d.ts +3 -0
  169. package/dist/ui/FormAlerts/index.d.ts.map +1 -0
  170. package/dist/ui/FormattedNumber/FormattedNumber.d.ts +47 -0
  171. package/dist/ui/FormattedNumber/FormattedNumber.d.ts.map +1 -0
  172. package/dist/ui/FormattedNumber/index.d.ts +3 -0
  173. package/dist/ui/FormattedNumber/index.d.ts.map +1 -0
  174. package/dist/ui/GradientIconContainer/GradientIconContainer.d.ts +28 -0
  175. package/dist/ui/GradientIconContainer/GradientIconContainer.d.ts.map +1 -0
  176. package/dist/ui/GradientIconContainer/index.d.ts +3 -0
  177. package/dist/ui/GradientIconContainer/index.d.ts.map +1 -0
  178. package/dist/ui/Grid/Grid.d.ts +55 -0
  179. package/dist/ui/Grid/Grid.d.ts.map +1 -0
  180. package/dist/ui/Grid/index.d.ts +3 -0
  181. package/dist/ui/Grid/index.d.ts.map +1 -0
  182. package/dist/ui/Heading/Heading.d.ts +39 -0
  183. package/dist/ui/Heading/Heading.d.ts.map +1 -0
  184. package/dist/ui/Heading/index.d.ts +3 -0
  185. package/dist/ui/Heading/index.d.ts.map +1 -0
  186. package/dist/ui/HelperText/HelperText.d.ts +36 -0
  187. package/dist/ui/HelperText/HelperText.d.ts.map +1 -0
  188. package/dist/ui/HelperText/index.d.ts +3 -0
  189. package/dist/ui/HelperText/index.d.ts.map +1 -0
  190. package/dist/ui/IconContainer/IconContainer.d.ts +28 -0
  191. package/dist/ui/IconContainer/IconContainer.d.ts.map +1 -0
  192. package/dist/ui/IconContainer/index.d.ts +3 -0
  193. package/dist/ui/IconContainer/index.d.ts.map +1 -0
  194. package/dist/ui/IconText/IconText.d.ts +46 -0
  195. package/dist/ui/IconText/IconText.d.ts.map +1 -0
  196. package/dist/ui/IconText/index.d.ts +3 -0
  197. package/dist/ui/IconText/index.d.ts.map +1 -0
  198. package/dist/ui/InfiniteScroll/InfiniteScroll.d.ts +55 -0
  199. package/dist/ui/InfiniteScroll/InfiniteScroll.d.ts.map +1 -0
  200. package/dist/ui/InfiniteScroll/index.d.ts +3 -0
  201. package/dist/ui/InfiniteScroll/index.d.ts.map +1 -0
  202. package/dist/ui/InfoBox/InfoBox.d.ts +40 -0
  203. package/dist/ui/InfoBox/InfoBox.d.ts.map +1 -0
  204. package/dist/ui/InfoBox/index.d.ts +3 -0
  205. package/dist/ui/InfoBox/index.d.ts.map +1 -0
  206. package/dist/ui/Input/Input.d.ts +25 -0
  207. package/dist/ui/Input/Input.d.ts.map +1 -0
  208. package/dist/ui/Input/index.d.ts +2 -0
  209. package/dist/ui/Input/index.d.ts.map +1 -0
  210. package/dist/ui/Kbd/Kbd.d.ts +31 -0
  211. package/dist/ui/Kbd/Kbd.d.ts.map +1 -0
  212. package/dist/ui/Kbd/index.d.ts +2 -0
  213. package/dist/ui/Kbd/index.d.ts.map +1 -0
  214. package/dist/ui/KeyValuePair/KeyValuePair.d.ts +42 -0
  215. package/dist/ui/KeyValuePair/KeyValuePair.d.ts.map +1 -0
  216. package/dist/ui/KeyValuePair/index.d.ts +2 -0
  217. package/dist/ui/KeyValuePair/index.d.ts.map +1 -0
  218. package/dist/ui/Label/Label.d.ts +31 -0
  219. package/dist/ui/Label/Label.d.ts.map +1 -0
  220. package/dist/ui/Label/index.d.ts +3 -0
  221. package/dist/ui/Label/index.d.ts.map +1 -0
  222. package/dist/ui/Link/Link.d.ts +41 -0
  223. package/dist/ui/Link/Link.d.ts.map +1 -0
  224. package/dist/ui/Link/index.d.ts +3 -0
  225. package/dist/ui/Link/index.d.ts.map +1 -0
  226. package/dist/ui/List/List.d.ts +60 -0
  227. package/dist/ui/List/List.d.ts.map +1 -0
  228. package/dist/ui/List/index.d.ts +3 -0
  229. package/dist/ui/List/index.d.ts.map +1 -0
  230. package/dist/ui/ListItemWithAction/ListItemWithAction.d.ts +39 -0
  231. package/dist/ui/ListItemWithAction/ListItemWithAction.d.ts.map +1 -0
  232. package/dist/ui/ListItemWithAction/index.d.ts +3 -0
  233. package/dist/ui/ListItemWithAction/index.d.ts.map +1 -0
  234. package/dist/ui/LoadingDots/LoadingDots.d.ts +22 -0
  235. package/dist/ui/LoadingDots/LoadingDots.d.ts.map +1 -0
  236. package/dist/ui/LoadingDots/index.d.ts +3 -0
  237. package/dist/ui/LoadingDots/index.d.ts.map +1 -0
  238. package/dist/ui/LoadingOverlay/LoadingOverlay.d.ts +40 -0
  239. package/dist/ui/LoadingOverlay/LoadingOverlay.d.ts.map +1 -0
  240. package/dist/ui/LoadingOverlay/index.d.ts +3 -0
  241. package/dist/ui/LoadingOverlay/index.d.ts.map +1 -0
  242. package/dist/ui/Logo/Logo.d.ts +36 -0
  243. package/dist/ui/Logo/Logo.d.ts.map +1 -0
  244. package/dist/ui/Logo/index.d.ts +3 -0
  245. package/dist/ui/Logo/index.d.ts.map +1 -0
  246. package/dist/ui/Masonry/Masonry.d.ts +26 -0
  247. package/dist/ui/Masonry/Masonry.d.ts.map +1 -0
  248. package/dist/ui/Masonry/index.d.ts +3 -0
  249. package/dist/ui/Masonry/index.d.ts.map +1 -0
  250. package/dist/ui/MasterDetailLayout/MasterDetailLayout.d.ts +65 -0
  251. package/dist/ui/MasterDetailLayout/MasterDetailLayout.d.ts.map +1 -0
  252. package/dist/ui/MasterDetailLayout/index.d.ts +2 -0
  253. package/dist/ui/MasterDetailLayout/index.d.ts.map +1 -0
  254. package/dist/ui/Modal/Modal.d.ts +67 -0
  255. package/dist/ui/Modal/Modal.d.ts.map +1 -0
  256. package/dist/ui/Modal/index.d.ts +3 -0
  257. package/dist/ui/Modal/index.d.ts.map +1 -0
  258. package/dist/ui/MultiSelect/MultiSelect.d.ts +48 -0
  259. package/dist/ui/MultiSelect/MultiSelect.d.ts.map +1 -0
  260. package/dist/ui/MultiSelect/index.d.ts +3 -0
  261. package/dist/ui/MultiSelect/index.d.ts.map +1 -0
  262. package/dist/ui/NavigationList/NavigationList.d.ts +57 -0
  263. package/dist/ui/NavigationList/NavigationList.d.ts.map +1 -0
  264. package/dist/ui/NavigationList/index.d.ts +3 -0
  265. package/dist/ui/NavigationList/index.d.ts.map +1 -0
  266. package/dist/ui/NumberInput/NumberInput.d.ts +56 -0
  267. package/dist/ui/NumberInput/NumberInput.d.ts.map +1 -0
  268. package/dist/ui/NumberInput/index.d.ts +3 -0
  269. package/dist/ui/NumberInput/index.d.ts.map +1 -0
  270. package/dist/ui/Overlay/Overlay.d.ts +33 -0
  271. package/dist/ui/Overlay/Overlay.d.ts.map +1 -0
  272. package/dist/ui/Overlay/index.d.ts +3 -0
  273. package/dist/ui/Overlay/index.d.ts.map +1 -0
  274. package/dist/ui/PageContainer/PageContainer.d.ts +43 -0
  275. package/dist/ui/PageContainer/PageContainer.d.ts.map +1 -0
  276. package/dist/ui/PageContainer/index.d.ts +3 -0
  277. package/dist/ui/PageContainer/index.d.ts.map +1 -0
  278. package/dist/ui/PageHeader/PageHeader.d.ts +24 -0
  279. package/dist/ui/PageHeader/PageHeader.d.ts.map +1 -0
  280. package/dist/ui/PageHeader/index.d.ts +2 -0
  281. package/dist/ui/PageHeader/index.d.ts.map +1 -0
  282. package/dist/ui/PageSectionHeader/PageSectionHeader.d.ts +49 -0
  283. package/dist/ui/PageSectionHeader/PageSectionHeader.d.ts.map +1 -0
  284. package/dist/ui/PageSectionHeader/index.d.ts +3 -0
  285. package/dist/ui/PageSectionHeader/index.d.ts.map +1 -0
  286. package/dist/ui/Pagination/Pagination.d.ts +50 -0
  287. package/dist/ui/Pagination/Pagination.d.ts.map +1 -0
  288. package/dist/ui/Pagination/index.d.ts +3 -0
  289. package/dist/ui/Pagination/index.d.ts.map +1 -0
  290. package/dist/ui/PhoneInput/PhoneInput.d.ts +47 -0
  291. package/dist/ui/PhoneInput/PhoneInput.d.ts.map +1 -0
  292. package/dist/ui/PhoneInput/index.d.ts +3 -0
  293. package/dist/ui/PhoneInput/index.d.ts.map +1 -0
  294. package/dist/ui/Popover/Popover.d.ts +32 -0
  295. package/dist/ui/Popover/Popover.d.ts.map +1 -0
  296. package/dist/ui/Popover/index.d.ts +3 -0
  297. package/dist/ui/Popover/index.d.ts.map +1 -0
  298. package/dist/ui/Progress/Progress.d.ts +67 -0
  299. package/dist/ui/Progress/Progress.d.ts.map +1 -0
  300. package/dist/ui/Progress/index.d.ts +3 -0
  301. package/dist/ui/Progress/index.d.ts.map +1 -0
  302. package/dist/ui/ProgressCircle/ProgressCircle.d.ts +40 -0
  303. package/dist/ui/ProgressCircle/ProgressCircle.d.ts.map +1 -0
  304. package/dist/ui/ProgressCircle/index.d.ts +3 -0
  305. package/dist/ui/ProgressCircle/index.d.ts.map +1 -0
  306. package/dist/ui/PromotionalBanner/PromotionalBanner.d.ts +37 -0
  307. package/dist/ui/PromotionalBanner/PromotionalBanner.d.ts.map +1 -0
  308. package/dist/ui/PromotionalBanner/index.d.ts +2 -0
  309. package/dist/ui/PromotionalBanner/index.d.ts.map +1 -0
  310. package/dist/ui/QuickActions/QuickActions.d.ts +46 -0
  311. package/dist/ui/QuickActions/QuickActions.d.ts.map +1 -0
  312. package/dist/ui/QuickActions/index.d.ts +3 -0
  313. package/dist/ui/QuickActions/index.d.ts.map +1 -0
  314. package/dist/ui/ScrollArea/ScrollArea.d.ts +39 -0
  315. package/dist/ui/ScrollArea/ScrollArea.d.ts.map +1 -0
  316. package/dist/ui/ScrollArea/index.d.ts +3 -0
  317. package/dist/ui/ScrollArea/index.d.ts.map +1 -0
  318. package/dist/ui/ScrollSpy/ScrollSpy.d.ts +111 -0
  319. package/dist/ui/ScrollSpy/ScrollSpy.d.ts.map +1 -0
  320. package/dist/ui/ScrollSpy/index.d.ts +2 -0
  321. package/dist/ui/ScrollSpy/index.d.ts.map +1 -0
  322. package/dist/ui/SearchInput/SearchInput.d.ts +39 -0
  323. package/dist/ui/SearchInput/SearchInput.d.ts.map +1 -0
  324. package/dist/ui/SearchInput/index.d.ts +3 -0
  325. package/dist/ui/SearchInput/index.d.ts.map +1 -0
  326. package/dist/ui/SectionBadge/SectionBadge.d.ts +30 -0
  327. package/dist/ui/SectionBadge/SectionBadge.d.ts.map +1 -0
  328. package/dist/ui/SectionBadge/index.d.ts +3 -0
  329. package/dist/ui/SectionBadge/index.d.ts.map +1 -0
  330. package/dist/ui/SectionHeader/SectionHeader.d.ts +33 -0
  331. package/dist/ui/SectionHeader/SectionHeader.d.ts.map +1 -0
  332. package/dist/ui/SectionHeader/index.d.ts +3 -0
  333. package/dist/ui/SectionHeader/index.d.ts.map +1 -0
  334. package/dist/ui/Select/Select.d.ts +54 -0
  335. package/dist/ui/Select/Select.d.ts.map +1 -0
  336. package/dist/ui/Select/index.d.ts +3 -0
  337. package/dist/ui/Select/index.d.ts.map +1 -0
  338. package/dist/ui/Separator/Separator.d.ts +37 -0
  339. package/dist/ui/Separator/Separator.d.ts.map +1 -0
  340. package/dist/ui/Separator/index.d.ts +3 -0
  341. package/dist/ui/Separator/index.d.ts.map +1 -0
  342. package/dist/ui/SettingsList/SettingsList.d.ts +51 -0
  343. package/dist/ui/SettingsList/SettingsList.d.ts.map +1 -0
  344. package/dist/ui/SettingsList/index.d.ts +3 -0
  345. package/dist/ui/SettingsList/index.d.ts.map +1 -0
  346. package/dist/ui/Sheet/Sheet.d.ts +46 -0
  347. package/dist/ui/Sheet/Sheet.d.ts.map +1 -0
  348. package/dist/ui/Sheet/index.d.ts +3 -0
  349. package/dist/ui/Sheet/index.d.ts.map +1 -0
  350. package/dist/ui/SideNav/SideNav.d.ts +39 -0
  351. package/dist/ui/SideNav/SideNav.d.ts.map +1 -0
  352. package/dist/ui/SideNav/index.d.ts +3 -0
  353. package/dist/ui/SideNav/index.d.ts.map +1 -0
  354. package/dist/ui/Skeleton/Skeleton.d.ts +54 -0
  355. package/dist/ui/Skeleton/Skeleton.d.ts.map +1 -0
  356. package/dist/ui/Skeleton/index.d.ts +3 -0
  357. package/dist/ui/Skeleton/index.d.ts.map +1 -0
  358. package/dist/ui/SmartLink/SmartLink.d.ts +67 -0
  359. package/dist/ui/SmartLink/SmartLink.d.ts.map +1 -0
  360. package/dist/ui/SmartLink/index.d.ts +2 -0
  361. package/dist/ui/SmartLink/index.d.ts.map +1 -0
  362. package/dist/ui/Spacer/Spacer.d.ts +37 -0
  363. package/dist/ui/Spacer/Spacer.d.ts.map +1 -0
  364. package/dist/ui/Spacer/index.d.ts +3 -0
  365. package/dist/ui/Spacer/index.d.ts.map +1 -0
  366. package/dist/ui/Spinner/Spinner.d.ts +19 -0
  367. package/dist/ui/Spinner/Spinner.d.ts.map +1 -0
  368. package/dist/ui/Spinner/index.d.ts +2 -0
  369. package/dist/ui/Spinner/index.d.ts.map +1 -0
  370. package/dist/ui/SplitPane/SplitPane.d.ts +45 -0
  371. package/dist/ui/SplitPane/SplitPane.d.ts.map +1 -0
  372. package/dist/ui/SplitPane/index.d.ts +2 -0
  373. package/dist/ui/SplitPane/index.d.ts.map +1 -0
  374. package/dist/ui/Stack/Stack.d.ts +60 -0
  375. package/dist/ui/Stack/Stack.d.ts.map +1 -0
  376. package/dist/ui/Stack/index.d.ts +3 -0
  377. package/dist/ui/Stack/index.d.ts.map +1 -0
  378. package/dist/ui/StandardPageLayout/StandardPageLayout.d.ts +27 -0
  379. package/dist/ui/StandardPageLayout/StandardPageLayout.d.ts.map +1 -0
  380. package/dist/ui/StandardPageLayout/index.d.ts +2 -0
  381. package/dist/ui/StandardPageLayout/index.d.ts.map +1 -0
  382. package/dist/ui/StatDisplay/StatDisplay.d.ts +33 -0
  383. package/dist/ui/StatDisplay/StatDisplay.d.ts.map +1 -0
  384. package/dist/ui/StatDisplay/index.d.ts +2 -0
  385. package/dist/ui/StatDisplay/index.d.ts.map +1 -0
  386. package/dist/ui/StepList/StepList.d.ts +40 -0
  387. package/dist/ui/StepList/StepList.d.ts.map +1 -0
  388. package/dist/ui/StepList/index.d.ts +2 -0
  389. package/dist/ui/StepList/index.d.ts.map +1 -0
  390. package/dist/ui/Switch/Switch.d.ts +36 -0
  391. package/dist/ui/Switch/Switch.d.ts.map +1 -0
  392. package/dist/ui/Switch/index.d.ts +3 -0
  393. package/dist/ui/Switch/index.d.ts.map +1 -0
  394. package/dist/ui/Table/Table.d.ts +66 -0
  395. package/dist/ui/Table/Table.d.ts.map +1 -0
  396. package/dist/ui/Table/index.d.ts +2 -0
  397. package/dist/ui/Table/index.d.ts.map +1 -0
  398. package/dist/ui/Tabs/Tabs.d.ts +73 -0
  399. package/dist/ui/Tabs/Tabs.d.ts.map +1 -0
  400. package/dist/ui/Tabs/index.d.ts +3 -0
  401. package/dist/ui/Tabs/index.d.ts.map +1 -0
  402. package/dist/ui/Text/Text.d.ts +41 -0
  403. package/dist/ui/Text/Text.d.ts.map +1 -0
  404. package/dist/ui/Text/index.d.ts +3 -0
  405. package/dist/ui/Text/index.d.ts.map +1 -0
  406. package/dist/ui/TextArea/TextArea.d.ts +54 -0
  407. package/dist/ui/TextArea/TextArea.d.ts.map +1 -0
  408. package/dist/ui/TextArea/index.d.ts +3 -0
  409. package/dist/ui/TextArea/index.d.ts.map +1 -0
  410. package/dist/ui/TextInputModal/TextInputModal.d.ts +52 -0
  411. package/dist/ui/TextInputModal/TextInputModal.d.ts.map +1 -0
  412. package/dist/ui/TextInputModal/index.d.ts +3 -0
  413. package/dist/ui/TextInputModal/index.d.ts.map +1 -0
  414. package/dist/ui/TimePicker/TimePicker.d.ts +33 -0
  415. package/dist/ui/TimePicker/TimePicker.d.ts.map +1 -0
  416. package/dist/ui/TimePicker/index.d.ts +3 -0
  417. package/dist/ui/TimePicker/index.d.ts.map +1 -0
  418. package/dist/ui/Toast/Toast.d.ts +61 -0
  419. package/dist/ui/Toast/Toast.d.ts.map +1 -0
  420. package/dist/ui/Toast/index.d.ts +3 -0
  421. package/dist/ui/Toast/index.d.ts.map +1 -0
  422. package/dist/ui/Tooltip/Tooltip.d.ts +39 -0
  423. package/dist/ui/Tooltip/Tooltip.d.ts.map +1 -0
  424. package/dist/ui/Tooltip/index.d.ts +3 -0
  425. package/dist/ui/Tooltip/index.d.ts.map +1 -0
  426. package/dist/ui/TransferList/TransferList.d.ts +58 -0
  427. package/dist/ui/TransferList/TransferList.d.ts.map +1 -0
  428. package/dist/ui/TransferList/index.d.ts +3 -0
  429. package/dist/ui/TransferList/index.d.ts.map +1 -0
  430. package/dist/ui/TreeView/TreeView.d.ts +49 -0
  431. package/dist/ui/TreeView/TreeView.d.ts.map +1 -0
  432. package/dist/ui/TreeView/index.d.ts +3 -0
  433. package/dist/ui/TreeView/index.d.ts.map +1 -0
  434. package/dist/ui/TruncatedText/TruncatedText.d.ts +38 -0
  435. package/dist/ui/TruncatedText/TruncatedText.d.ts.map +1 -0
  436. package/dist/ui/TruncatedText/index.d.ts +3 -0
  437. package/dist/ui/TruncatedText/index.d.ts.map +1 -0
  438. package/dist/ui/VirtualList/VirtualList.d.ts +115 -0
  439. package/dist/ui/VirtualList/VirtualList.d.ts.map +1 -0
  440. package/dist/ui/VirtualList/index.d.ts +2 -0
  441. package/dist/ui/VirtualList/index.d.ts.map +1 -0
  442. package/dist/ui/VisuallyHidden/VisuallyHidden.d.ts +21 -0
  443. package/dist/ui/VisuallyHidden/VisuallyHidden.d.ts.map +1 -0
  444. package/dist/ui/VisuallyHidden/index.d.ts +3 -0
  445. package/dist/ui/VisuallyHidden/index.d.ts.map +1 -0
  446. package/package.json +104 -0
  447. package/src/index.ts +194 -0
  448. package/src/lib/utils.ts +10 -0
  449. package/src/nativewind-env.d.ts +57 -0
  450. package/src/ui/ActionButton/ActionButton.tsx +56 -0
  451. package/src/ui/ActionButton/index.ts +2 -0
  452. package/src/ui/AddressLink/AddressLink.tsx +189 -0
  453. package/src/ui/AddressLink/index.ts +2 -0
  454. package/src/ui/Alert/Alert.tsx +75 -0
  455. package/src/ui/Alert/index.ts +1 -0
  456. package/src/ui/AnimatedCounter/AnimatedCounter.tsx +110 -0
  457. package/src/ui/AnimatedCounter/index.ts +2 -0
  458. package/src/ui/AnimatedSection/AnimatedSection.tsx +176 -0
  459. package/src/ui/AnimatedSection/index.ts +7 -0
  460. package/src/ui/AspectRatio/AspectRatio.tsx +69 -0
  461. package/src/ui/AspectRatio/index.ts +2 -0
  462. package/src/ui/Avatar/Avatar.tsx +243 -0
  463. package/src/ui/Avatar/index.ts +2 -0
  464. package/src/ui/Backdrop/Backdrop.tsx +85 -0
  465. package/src/ui/Backdrop/index.ts +2 -0
  466. package/src/ui/Badge/Badge.tsx +198 -0
  467. package/src/ui/Badge/index.ts +2 -0
  468. package/src/ui/Box/Box.tsx +167 -0
  469. package/src/ui/Box/index.ts +2 -0
  470. package/src/ui/Breadcrumb/Breadcrumb.tsx +199 -0
  471. package/src/ui/Breadcrumb/index.ts +2 -0
  472. package/src/ui/BreadcrumbNav/BreadcrumbNav.tsx +75 -0
  473. package/src/ui/BreadcrumbNav/index.ts +1 -0
  474. package/src/ui/Button/Button.shared.ts +83 -0
  475. package/src/ui/Button/Button.tsx +139 -0
  476. package/src/ui/Button/index.ts +2 -0
  477. package/src/ui/CTASection/CTASection.tsx +146 -0
  478. package/src/ui/CTASection/index.ts +1 -0
  479. package/src/ui/Calendar/Calendar.tsx +242 -0
  480. package/src/ui/Calendar/index.ts +2 -0
  481. package/src/ui/Card/Card.tsx +133 -0
  482. package/src/ui/Card/index.ts +7 -0
  483. package/src/ui/Center/Center.tsx +54 -0
  484. package/src/ui/Center/index.ts +2 -0
  485. package/src/ui/ChainBadge.tsx +85 -0
  486. package/src/ui/Checkbox/Checkbox.tsx +200 -0
  487. package/src/ui/Checkbox/index.ts +2 -0
  488. package/src/ui/Code/Code.tsx +81 -0
  489. package/src/ui/Code/index.ts +2 -0
  490. package/src/ui/CodeDisplay/CodeDisplay.tsx +148 -0
  491. package/src/ui/CodeDisplay/index.ts +2 -0
  492. package/src/ui/CollapsibleSection/CollapsibleSection.tsx +190 -0
  493. package/src/ui/CollapsibleSection/index.ts +1 -0
  494. package/src/ui/Combobox/Combobox.tsx +216 -0
  495. package/src/ui/Combobox/index.ts +2 -0
  496. package/src/ui/Command/Command.tsx +252 -0
  497. package/src/ui/Command/index.ts +1 -0
  498. package/src/ui/Container/Container.tsx +82 -0
  499. package/src/ui/Container/index.ts +2 -0
  500. package/src/ui/DashboardStatCard/DashboardStatCard.tsx +101 -0
  501. package/src/ui/DashboardStatCard/index.ts +1 -0
  502. package/src/ui/DataList/DataList.tsx +156 -0
  503. package/src/ui/DataList/index.ts +2 -0
  504. package/src/ui/DateInput/DateInput.tsx +174 -0
  505. package/src/ui/DateInput/index.ts +2 -0
  506. package/src/ui/DateTimePicker/DateTimePicker.tsx +231 -0
  507. package/src/ui/DateTimePicker/index.ts +2 -0
  508. package/src/ui/Dialog/Dialog.tsx +145 -0
  509. package/src/ui/Dialog/index.ts +2 -0
  510. package/src/ui/Divider/Divider.tsx +166 -0
  511. package/src/ui/Divider/index.ts +2 -0
  512. package/src/ui/Dropdown/Dropdown.tsx +176 -0
  513. package/src/ui/Dropdown/index.ts +2 -0
  514. package/src/ui/EmptyState/EmptyState.tsx +118 -0
  515. package/src/ui/EmptyState/index.ts +2 -0
  516. package/src/ui/ExternalLink/ExternalLink.tsx +112 -0
  517. package/src/ui/ExternalLink/index.ts +2 -0
  518. package/src/ui/FeatureCard/FeatureCard.tsx +221 -0
  519. package/src/ui/FeatureCard/index.ts +1 -0
  520. package/src/ui/FeatureGrid/FeatureGrid.tsx +181 -0
  521. package/src/ui/FeatureGrid/index.ts +1 -0
  522. package/src/ui/FileInput/FileInput.tsx +216 -0
  523. package/src/ui/FileInput/index.ts +2 -0
  524. package/src/ui/Flex/Flex.tsx +116 -0
  525. package/src/ui/Flex/index.ts +2 -0
  526. package/src/ui/FloatingPanel/FloatingPanel.tsx +122 -0
  527. package/src/ui/FloatingPanel/index.ts +2 -0
  528. package/src/ui/FormAlerts/FormAlerts.tsx +81 -0
  529. package/src/ui/FormAlerts/index.ts +2 -0
  530. package/src/ui/FormattedNumber/FormattedNumber.tsx +82 -0
  531. package/src/ui/FormattedNumber/index.ts +2 -0
  532. package/src/ui/GradientIconContainer/GradientIconContainer.tsx +84 -0
  533. package/src/ui/GradientIconContainer/index.ts +2 -0
  534. package/src/ui/Grid/Grid.tsx +144 -0
  535. package/src/ui/Grid/index.ts +2 -0
  536. package/src/ui/Heading/Heading.tsx +112 -0
  537. package/src/ui/Heading/index.ts +2 -0
  538. package/src/ui/HelperText/HelperText.tsx +91 -0
  539. package/src/ui/HelperText/index.ts +2 -0
  540. package/src/ui/IconContainer/IconContainer.tsx +82 -0
  541. package/src/ui/IconContainer/index.ts +2 -0
  542. package/src/ui/IconText/IconText.tsx +120 -0
  543. package/src/ui/IconText/index.ts +2 -0
  544. package/src/ui/InfiniteScroll/InfiniteScroll.tsx +192 -0
  545. package/src/ui/InfiniteScroll/index.ts +2 -0
  546. package/src/ui/InfoBox/InfoBox.tsx +120 -0
  547. package/src/ui/InfoBox/index.ts +2 -0
  548. package/src/ui/Input/Input.tsx +74 -0
  549. package/src/ui/Input/index.ts +1 -0
  550. package/src/ui/Kbd/Kbd.tsx +71 -0
  551. package/src/ui/Kbd/index.ts +1 -0
  552. package/src/ui/KeyValuePair/KeyValuePair.tsx +128 -0
  553. package/src/ui/KeyValuePair/index.ts +1 -0
  554. package/src/ui/Label/Label.tsx +54 -0
  555. package/src/ui/Label/index.ts +2 -0
  556. package/src/ui/Link/Link.tsx +104 -0
  557. package/src/ui/Link/index.ts +2 -0
  558. package/src/ui/List/List.tsx +182 -0
  559. package/src/ui/List/index.ts +2 -0
  560. package/src/ui/ListItemWithAction/ListItemWithAction.tsx +114 -0
  561. package/src/ui/ListItemWithAction/index.ts +2 -0
  562. package/src/ui/LoadingDots/LoadingDots.tsx +118 -0
  563. package/src/ui/LoadingDots/index.ts +2 -0
  564. package/src/ui/LoadingOverlay/LoadingOverlay.tsx +89 -0
  565. package/src/ui/LoadingOverlay/index.ts +2 -0
  566. package/src/ui/Logo/Logo.tsx +129 -0
  567. package/src/ui/Logo/index.ts +2 -0
  568. package/src/ui/Masonry/Masonry.tsx +57 -0
  569. package/src/ui/Masonry/index.ts +2 -0
  570. package/src/ui/MasterDetailLayout/MasterDetailLayout.tsx +272 -0
  571. package/src/ui/MasterDetailLayout/index.ts +1 -0
  572. package/src/ui/Modal/Modal.tsx +189 -0
  573. package/src/ui/Modal/index.ts +7 -0
  574. package/src/ui/MultiSelect/MultiSelect.tsx +283 -0
  575. package/src/ui/MultiSelect/index.ts +2 -0
  576. package/src/ui/NavigationList/NavigationList.tsx +138 -0
  577. package/src/ui/NavigationList/index.ts +2 -0
  578. package/src/ui/NumberInput/NumberInput.tsx +267 -0
  579. package/src/ui/NumberInput/index.ts +2 -0
  580. package/src/ui/Overlay/Overlay.tsx +86 -0
  581. package/src/ui/Overlay/index.ts +2 -0
  582. package/src/ui/PageContainer/PageContainer.tsx +95 -0
  583. package/src/ui/PageContainer/index.ts +2 -0
  584. package/src/ui/PageHeader/PageHeader.tsx +46 -0
  585. package/src/ui/PageHeader/index.ts +1 -0
  586. package/src/ui/PageSectionHeader/PageSectionHeader.tsx +138 -0
  587. package/src/ui/PageSectionHeader/index.ts +2 -0
  588. package/src/ui/Pagination/Pagination.tsx +271 -0
  589. package/src/ui/Pagination/index.ts +2 -0
  590. package/src/ui/PhoneInput/PhoneInput.tsx +267 -0
  591. package/src/ui/PhoneInput/index.ts +2 -0
  592. package/src/ui/Popover/Popover.tsx +155 -0
  593. package/src/ui/Popover/index.ts +2 -0
  594. package/src/ui/Progress/Progress.tsx +221 -0
  595. package/src/ui/Progress/index.ts +2 -0
  596. package/src/ui/ProgressCircle/ProgressCircle.tsx +136 -0
  597. package/src/ui/ProgressCircle/index.ts +2 -0
  598. package/src/ui/PromotionalBanner/PromotionalBanner.tsx +113 -0
  599. package/src/ui/PromotionalBanner/index.ts +1 -0
  600. package/src/ui/QuickActions/QuickActions.tsx +132 -0
  601. package/src/ui/QuickActions/index.ts +2 -0
  602. package/src/ui/ScrollArea/ScrollArea.tsx +77 -0
  603. package/src/ui/ScrollArea/index.ts +2 -0
  604. package/src/ui/ScrollSpy/ScrollSpy.tsx +313 -0
  605. package/src/ui/ScrollSpy/index.ts +1 -0
  606. package/src/ui/SearchInput/SearchInput.tsx +167 -0
  607. package/src/ui/SearchInput/index.ts +2 -0
  608. package/src/ui/SectionBadge/SectionBadge.tsx +105 -0
  609. package/src/ui/SectionBadge/index.ts +2 -0
  610. package/src/ui/SectionHeader/SectionHeader.tsx +74 -0
  611. package/src/ui/SectionHeader/index.ts +2 -0
  612. package/src/ui/Select/Select.tsx +186 -0
  613. package/src/ui/Select/index.ts +2 -0
  614. package/src/ui/Separator/Separator.tsx +90 -0
  615. package/src/ui/Separator/index.ts +2 -0
  616. package/src/ui/SettingsList/SettingsList.tsx +106 -0
  617. package/src/ui/SettingsList/index.ts +2 -0
  618. package/src/ui/Sheet/Sheet.tsx +309 -0
  619. package/src/ui/Sheet/index.ts +2 -0
  620. package/src/ui/SideNav/SideNav.tsx +82 -0
  621. package/src/ui/SideNav/index.ts +2 -0
  622. package/src/ui/Skeleton/Skeleton.tsx +153 -0
  623. package/src/ui/Skeleton/index.ts +7 -0
  624. package/src/ui/SmartLink/SmartLink.tsx +248 -0
  625. package/src/ui/SmartLink/index.ts +1 -0
  626. package/src/ui/Spacer/Spacer.tsx +83 -0
  627. package/src/ui/Spacer/index.ts +2 -0
  628. package/src/ui/Spinner/Spinner.tsx +63 -0
  629. package/src/ui/Spinner/index.ts +1 -0
  630. package/src/ui/SplitPane/SplitPane.tsx +204 -0
  631. package/src/ui/SplitPane/index.ts +1 -0
  632. package/src/ui/Stack/Stack.tsx +154 -0
  633. package/src/ui/Stack/index.ts +2 -0
  634. package/src/ui/StandardPageLayout/StandardPageLayout.tsx +40 -0
  635. package/src/ui/StandardPageLayout/index.ts +1 -0
  636. package/src/ui/StatDisplay/StatDisplay.tsx +124 -0
  637. package/src/ui/StatDisplay/index.ts +1 -0
  638. package/src/ui/StepList/StepList.tsx +151 -0
  639. package/src/ui/StepList/index.ts +1 -0
  640. package/src/ui/Switch/Switch.tsx +139 -0
  641. package/src/ui/Switch/index.ts +2 -0
  642. package/src/ui/Table/Table.tsx +192 -0
  643. package/src/ui/Table/index.ts +1 -0
  644. package/src/ui/Tabs/Tabs.tsx +196 -0
  645. package/src/ui/Tabs/index.ts +7 -0
  646. package/src/ui/Text/Text.tsx +117 -0
  647. package/src/ui/Text/index.ts +2 -0
  648. package/src/ui/TextArea/TextArea.tsx +138 -0
  649. package/src/ui/TextArea/index.ts +2 -0
  650. package/src/ui/TextInputModal/TextInputModal.tsx +225 -0
  651. package/src/ui/TextInputModal/index.ts +2 -0
  652. package/src/ui/TimePicker/TimePicker.tsx +325 -0
  653. package/src/ui/TimePicker/index.ts +2 -0
  654. package/src/ui/Toast/Toast.tsx +218 -0
  655. package/src/ui/Toast/index.ts +2 -0
  656. package/src/ui/Tooltip/Tooltip.tsx +183 -0
  657. package/src/ui/Tooltip/index.ts +2 -0
  658. package/src/ui/TransferList/TransferList.tsx +339 -0
  659. package/src/ui/TransferList/index.ts +2 -0
  660. package/src/ui/TreeView/TreeView.tsx +182 -0
  661. package/src/ui/TreeView/index.ts +2 -0
  662. package/src/ui/TruncatedText/TruncatedText.tsx +80 -0
  663. package/src/ui/TruncatedText/index.ts +2 -0
  664. package/src/ui/VirtualList/VirtualList.tsx +285 -0
  665. package/src/ui/VirtualList/index.ts +1 -0
  666. package/src/ui/VisuallyHidden/VisuallyHidden.tsx +50 -0
  667. package/src/ui/VisuallyHidden/index.ts +2 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/lib/utils.ts","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/ui/Button/Button.shared.ts","../src/ui/Button/Button.tsx","../src/ui/Card/Card.tsx","../src/ui/Input/Input.tsx","../src/ui/Spinner/Spinner.tsx","../src/ui/Alert/Alert.tsx","../src/ui/ActionButton/ActionButton.tsx","../src/ui/Box/Box.tsx","../src/ui/Flex/Flex.tsx","../src/ui/Stack/Stack.tsx","../src/ui/Divider/Divider.tsx","../src/ui/Separator/Separator.tsx","../src/ui/Container/Container.tsx","../src/ui/Center/Center.tsx","../src/ui/Spacer/Spacer.tsx","../src/ui/Grid/Grid.tsx","../src/ui/Label/Label.tsx","../src/ui/TextArea/TextArea.tsx","../src/ui/Checkbox/Checkbox.tsx","../src/ui/Switch/Switch.tsx","../src/ui/HelperText/HelperText.tsx","../src/ui/Select/Select.tsx","../src/ui/SearchInput/SearchInput.tsx","../src/ui/NumberInput/NumberInput.tsx","../src/ui/Text/Text.tsx","../src/ui/Heading/Heading.tsx","../src/ui/Code/Code.tsx","../src/ui/TruncatedText/TruncatedText.tsx","../src/ui/Badge/Badge.tsx","../src/ui/Avatar/Avatar.tsx","../src/ui/Skeleton/Skeleton.tsx","../src/ui/List/List.tsx","../src/ui/IconText/IconText.tsx","../src/ui/FormattedNumber/FormattedNumber.tsx","../src/ui/InfoBox/InfoBox.tsx","../src/ui/Progress/Progress.tsx","../src/ui/Modal/Modal.tsx","../src/ui/Toast/Toast.tsx","../src/ui/LoadingOverlay/LoadingOverlay.tsx","../src/ui/LoadingDots/LoadingDots.tsx","../src/ui/Backdrop/Backdrop.tsx","../src/ui/Sheet/Sheet.tsx","../src/ui/Tooltip/Tooltip.tsx","../src/ui/Dialog/Dialog.tsx","../src/ui/Popover/Popover.tsx","../src/ui/Tabs/Tabs.tsx","../src/ui/Link/Link.tsx","../src/ui/Breadcrumb/Breadcrumb.tsx","../src/ui/Pagination/Pagination.tsx","../src/ui/SettingsList/SettingsList.tsx","../src/ui/NavigationList/NavigationList.tsx","../src/ui/Dropdown/Dropdown.tsx","../src/ui/AspectRatio/AspectRatio.tsx","../src/ui/QuickActions/QuickActions.tsx","../src/ui/EmptyState/EmptyState.tsx","../src/ui/Calendar/Calendar.tsx","../src/ui/DataList/DataList.tsx","../src/ui/MultiSelect/MultiSelect.tsx","../src/ui/ProgressCircle/ProgressCircle.tsx","../src/ui/SideNav/SideNav.tsx","../src/ui/SectionHeader/SectionHeader.tsx","../src/ui/PageContainer/PageContainer.tsx","../src/ui/FloatingPanel/FloatingPanel.tsx","../src/ui/PhoneInput/PhoneInput.tsx","../src/ui/TimePicker/TimePicker.tsx","../src/ui/Combobox/Combobox.tsx","../src/ui/TreeView/TreeView.tsx","../src/ui/AddressLink/AddressLink.tsx","../src/ui/CodeDisplay/CodeDisplay.tsx","../src/ui/DateInput/DateInput.tsx","../src/ui/DateTimePicker/DateTimePicker.tsx","../src/ui/InfiniteScroll/InfiniteScroll.tsx","../src/ui/ExternalLink/ExternalLink.tsx","../src/ui/TextInputModal/TextInputModal.tsx","../src/ui/FormAlerts/FormAlerts.tsx","../src/ui/ScrollArea/ScrollArea.tsx","../src/ui/SectionBadge/SectionBadge.tsx","../src/ui/ChainBadge.tsx","../src/ui/ListItemWithAction/ListItemWithAction.tsx","../src/ui/Overlay/Overlay.tsx","../src/ui/TransferList/TransferList.tsx","../src/ui/FileInput/FileInput.tsx","../src/ui/Logo/Logo.tsx","../src/ui/AnimatedCounter/AnimatedCounter.tsx","../src/ui/AnimatedSection/AnimatedSection.tsx","../src/ui/Masonry/Masonry.tsx","../src/ui/IconContainer/IconContainer.tsx","../src/ui/GradientIconContainer/GradientIconContainer.tsx","../src/ui/PageSectionHeader/PageSectionHeader.tsx","../src/ui/VisuallyHidden/VisuallyHidden.tsx","../src/ui/BreadcrumbNav/BreadcrumbNav.tsx","../src/ui/Kbd/Kbd.tsx","../src/ui/Table/Table.tsx","../src/ui/Command/Command.tsx","../src/ui/MasterDetailLayout/MasterDetailLayout.tsx","../src/ui/PageHeader/PageHeader.tsx","../src/ui/StandardPageLayout/StandardPageLayout.tsx","../src/ui/StepList/StepList.tsx","../src/ui/FeatureCard/FeatureCard.tsx","../src/ui/FeatureGrid/FeatureGrid.tsx","../src/ui/CTASection/CTASection.tsx","../src/ui/PromotionalBanner/PromotionalBanner.tsx","../src/ui/CollapsibleSection/CollapsibleSection.tsx","../src/ui/DashboardStatCard/DashboardStatCard.tsx","../src/ui/StatDisplay/StatDisplay.tsx","../src/ui/KeyValuePair/KeyValuePair.tsx","../src/ui/SmartLink/SmartLink.tsx","../src/ui/ScrollSpy/ScrollSpy.tsx","../src/ui/SplitPane/SplitPane.tsx","../src/ui/VirtualList/VirtualList.tsx"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\n\n/**\n * Merges class names for React Native with NativeWind.\n * Unlike web version, we don't need tailwind-merge since NativeWind\n * processes Tailwind classes at build time.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return clsx(inputs);\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n {\n if (hasOwnProperty.call(props, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { type ReactNode } from 'react';\n\n/**\n * Base button props shared between web and React Native\n */\nexport interface ButtonBaseProps {\n variant?:\n | 'default'\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'destructive'\n | 'destructive-outline'\n | 'success'\n | 'link'\n | 'gradient'\n | 'gradient-secondary'\n | 'gradient-success'\n | 'wallet'\n | 'connect'\n | 'disconnect';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n animation?:\n | 'none'\n | 'hover'\n | 'lift'\n | 'scale'\n | 'glow'\n | 'shimmer'\n | 'tap'\n | 'connect'\n | 'transaction'\n | 'disconnect';\n disabled?: boolean;\n loading?: boolean;\n children: ReactNode;\n}\n\n/**\n * Map size abbreviations to design system variant keys\n */\nexport const mapSizeToVariantKey = (size: string | undefined): string => {\n if (!size) return 'default';\n const sizeMap: Record<string, string> = {\n sm: 'small',\n lg: 'large',\n default: 'default',\n };\n return sizeMap[size] || size;\n};\n\n/**\n * Get button variant class from design system\n */\nexport const getButtonVariantClass = (\n variantName: string,\n sizeName: string | undefined,\n v: any\n): string => {\n if (variantName.startsWith('gradient')) {\n const gradientType = variantName\n .replace('gradient-', '')\n .replace('gradient', 'primary');\n return v.button.gradient[gradientType]?.() || v.button.primary.default();\n } else if (['wallet', 'connect', 'disconnect'].includes(variantName)) {\n return v.button.web3[variantName]?.() || v.button.primary.default();\n } else {\n const sizeType = mapSizeToVariantKey(sizeName);\n return v.button[variantName]?.[sizeType]?.() || v.button.primary.default();\n }\n};\n\n/**\n * Shared button state logic\n */\nexport const useButtonState = (\n loading: boolean | undefined,\n disabled: boolean | undefined\n) => ({\n isDisabled: loading || disabled || false,\n showSpinner: loading || false,\n});\n","import * as React from 'react';\nimport {\n Pressable,\n Text,\n ActivityIndicator,\n type PressableProps,\n type GestureResponderEvent,\n} from 'react-native';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\nimport { variants as v } from '@sudobility/design';\nimport {\n ButtonBaseProps,\n getButtonVariantClass,\n useButtonState,\n} from './Button.shared';\n\nconst buttonVariants = cva(\n 'min-h-[44px] items-center justify-center flex-row',\n {\n variants: {\n variant: {\n default: '',\n primary: '',\n secondary: '',\n outline: '',\n ghost: '',\n destructive: '',\n 'destructive-outline': '',\n success: '',\n link: '',\n gradient: '',\n 'gradient-secondary': '',\n 'gradient-success': '',\n wallet: '',\n connect: '',\n disconnect: '',\n },\n size: {\n default: '',\n sm: 'h-8 px-3',\n lg: 'h-12 px-6',\n icon: 'h-10 w-10 p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends ButtonBaseProps,\n Omit<PressableProps, 'children' | 'disabled'>,\n Omit<VariantProps<typeof buttonVariants>, 'variant' | 'size'> {\n /** Callback when button is pressed */\n onPress?: (event: GestureResponderEvent) => void;\n /** Accessibility label for screen readers */\n accessibilityLabel?: string;\n /** Additional text styles for the button text */\n textClassName?: string;\n}\n\n/**\n * Button component for React Native\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" onPress={() => console.log('pressed')}>\n * Press me\n * </Button>\n * ```\n */\nexport const Button = React.forwardRef<\n React.ElementRef<typeof Pressable>,\n ButtonProps\n>(\n (\n {\n className,\n textClassName,\n variant = 'default',\n size = 'default',\n disabled,\n loading,\n onPress,\n accessibilityLabel,\n children,\n ...props\n },\n ref\n ) => {\n const { isDisabled, showSpinner } = useButtonState(loading, disabled);\n\n const variantName = variant || 'default';\n const sizeName =\n size && size !== 'default' && size !== 'icon' ? size : undefined;\n\n const designSystemClass = getButtonVariantClass(variantName, sizeName, v);\n\n return (\n <Pressable\n ref={ref}\n className={cn(\n buttonVariants({ variant, size }),\n designSystemClass,\n isDisabled && 'opacity-50',\n className\n )}\n disabled={isDisabled}\n onPress={onPress}\n accessibilityRole='button'\n accessibilityLabel={accessibilityLabel}\n accessibilityState={{ disabled: isDisabled }}\n {...props}\n >\n {showSpinner && (\n <ActivityIndicator\n size='small'\n color='currentColor'\n className='mr-2'\n />\n )}\n {typeof children === 'string' ? (\n <Text className={cn('text-center font-medium', textClassName)}>\n {children}\n </Text>\n ) : (\n children\n )}\n </Pressable>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nexport { buttonVariants };\n","import React from 'react';\nimport { View, Text, Pressable, type ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { textVariants, getCardVariantColors } from '@sudobility/design';\n\nexport interface CardProps extends ViewProps {\n variant?:\n | 'default'\n | 'bordered'\n | 'elevated'\n | 'info'\n | 'success'\n | 'warning'\n | 'error'\n | 'callout';\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /** For callout variant: apply gradient background */\n gradient?: boolean;\n /** For info/callout variants: show icon */\n icon?: React.ReactNode;\n /** For info variants: show close button */\n onClose?: () => void;\n}\n\nconst calloutStyle =\n 'bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800';\n\nconst paddingStyles = {\n none: '',\n sm: 'p-3',\n md: 'p-6',\n lg: 'p-8',\n};\n\nexport const Card: React.FC<CardProps> = ({\n variant = 'elevated',\n padding = 'md',\n icon,\n onClose,\n className,\n children,\n ...props\n}) => {\n const isInfoVariant = ['info', 'success', 'warning', 'error'].includes(\n variant\n );\n const showIconOrClose = isInfoVariant && (icon || onClose);\n\n const variantClasses =\n variant === 'callout'\n ? calloutStyle\n : getCardVariantColors(\n variant as Parameters<typeof getCardVariantColors>[0]\n );\n\n return (\n <View\n className={cn(\n 'rounded-lg',\n variantClasses,\n paddingStyles[padding],\n className\n )}\n {...props}\n >\n {showIconOrClose ? (\n <View className='flex-row items-start gap-3'>\n {icon && <View className='flex-shrink-0'>{icon}</View>}\n <View className='flex-1'>{children}</View>\n {onClose && (\n <Pressable\n onPress={onClose}\n className='flex-shrink-0 opacity-70'\n accessibilityLabel='Close'\n accessibilityRole='button'\n >\n <Text className='text-lg'>×</Text>\n </Pressable>\n )}\n </View>\n ) : (\n children\n )}\n </View>\n );\n};\n\ninterface CardHeaderProps extends ViewProps {\n title?: string;\n description?: string;\n}\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({\n title,\n description,\n className,\n children,\n ...props\n}) => {\n return (\n <View className={cn('gap-1.5', className)} {...props}>\n {title && <Text className={textVariants.heading.h4()}>{title}</Text>}\n {description && (\n <Text className={textVariants.body.sm()}>{description}</Text>\n )}\n {children}\n </View>\n );\n};\n\nexport const CardContent: React.FC<ViewProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <View className={cn('', className)} {...props}>\n {children}\n </View>\n );\n};\n\nexport const CardFooter: React.FC<ViewProps> = ({\n className,\n children,\n ...props\n}) => {\n return (\n <View className={cn('flex-row items-center pt-4', className)} {...props}>\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport {\n TextInput,\n type TextInputProps,\n type NativeSyntheticEvent,\n type TextInputFocusEventData,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { variants as v } from '@sudobility/design';\n\nexport interface InputProps extends Omit<TextInputProps, 'style'> {\n /** Additional class names for styling */\n className?: string;\n /** Error state */\n error?: boolean;\n /** Disabled state */\n disabled?: boolean;\n}\n\n/**\n * Input component for React Native\n *\n * @example\n * ```tsx\n * <Input\n * placeholder=\"Enter your email\"\n * value={email}\n * onChangeText={setEmail}\n * keyboardType=\"email-address\"\n * />\n * ```\n */\nexport const Input = React.forwardRef<TextInput, InputProps>(\n (\n { className, error, disabled, editable, onFocus, onBlur, ...props },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n\n const handleFocus = (e: NativeSyntheticEvent<TextInputFocusEventData>) => {\n setIsFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: NativeSyntheticEvent<TextInputFocusEventData>) => {\n setIsFocused(false);\n onBlur?.(e);\n };\n\n const isEditable = editable !== false && !disabled;\n\n return (\n <TextInput\n ref={ref}\n className={cn(\n v.input.default(),\n isFocused && 'border-blue-500 dark:border-blue-400',\n error && 'border-red-500 dark:border-red-400',\n disabled && 'opacity-50 bg-gray-100 dark:bg-gray-800',\n className\n )}\n editable={isEditable}\n onFocus={handleFocus}\n onBlur={handleBlur}\n accessibilityState={{\n disabled: !isEditable,\n }}\n {...props}\n />\n );\n }\n);\n\nInput.displayName = 'Input';\n","import React from 'react';\nimport { View, ActivityIndicator, Text, type ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SpinnerProps extends ViewProps {\n size?: 'small' | 'default' | 'large' | 'extraLarge';\n variant?: 'default' | 'white' | 'success' | 'warning' | 'error';\n accessibilityLabel?: string;\n loadingText?: string;\n showText?: boolean;\n}\n\nconst sizeMap = {\n small: 'small' as const,\n default: 'small' as const,\n large: 'large' as const,\n extraLarge: 'large' as const,\n};\n\nconst colorMap = {\n default: '#2563eb', // blue-600\n white: '#ffffff',\n success: '#16a34a', // green-600\n warning: '#ea580c', // orange-600\n error: '#dc2626', // red-600\n};\n\n/**\n * Spinner component for React Native\n *\n * @example\n * ```tsx\n * <Spinner size=\"large\" variant=\"default\" />\n * ```\n */\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = 'default',\n variant = 'default',\n className,\n accessibilityLabel = 'Loading',\n loadingText = 'Loading...',\n showText = false,\n ...props\n}) => {\n const activitySize = sizeMap[size];\n const color = colorMap[variant];\n\n return (\n <View\n className={cn('items-center justify-center', className)}\n accessibilityRole='progressbar'\n accessibilityLabel={accessibilityLabel}\n {...props}\n >\n <ActivityIndicator size={activitySize} color={color} />\n {showText && (\n <Text className='mt-2 text-gray-600 dark:text-gray-400 text-sm'>\n {loadingText}\n </Text>\n )}\n </View>\n );\n};\n","import React from 'react';\nimport { View, Text, type ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { variants as v } from '@sudobility/design';\n\nexport interface AlertProps extends ViewProps {\n variant?: 'info' | 'success' | 'warning' | 'attention' | 'error';\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n}\n\n// Default icons as simple text - can be replaced with react-native-heroicons\nconst defaultIcons: Record<string, string> = {\n info: 'ℹ️',\n success: '✓',\n warning: '⚠️',\n attention: '🔔',\n error: '✕',\n};\n\nexport const AlertTitle: React.FC<{\n children: React.ReactNode;\n className?: string;\n}> = ({ children, className }) => (\n <Text className={cn('font-medium mb-1', className)}>{children}</Text>\n);\n\nexport const AlertDescription: React.FC<{\n children: React.ReactNode;\n className?: string;\n}> = ({ children, className }) => (\n <Text className={cn('text-sm', className)}>{children}</Text>\n);\n\n/**\n * Alert component for React Native\n *\n * @example\n * ```tsx\n * <Alert variant=\"success\" title=\"Success!\" description=\"Your changes have been saved.\" />\n * ```\n */\nexport const Alert: React.FC<AlertProps> = ({\n variant = 'info',\n title,\n description,\n icon,\n children,\n className,\n ...props\n}) => {\n const IconComponent = icon || (\n <Text className='text-lg'>{defaultIcons[variant]}</Text>\n );\n\n const alertClass =\n typeof v.alert[variant] === 'function' ? v.alert[variant]() : '';\n\n return (\n <View\n className={cn(alertClass, 'flex-row items-start gap-3', className)}\n accessibilityRole='alert'\n {...props}\n >\n {IconComponent && <View className='flex-shrink-0'>{IconComponent}</View>}\n <View className='flex-1'>\n {title && <Text className='font-medium mb-1'>{title}</Text>}\n {description && <Text className='text-sm'>{description}</Text>}\n {children}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { Button, type ButtonProps } from '../Button';\nimport { Spinner } from '../Spinner';\n\nexport interface ActionButtonProps extends Omit<ButtonProps, 'children'> {\n /** Button text */\n children: React.ReactNode;\n /** Loading state */\n isLoading?: boolean;\n /** Text to show when loading (defaults to \"Loading...\") */\n loadingText?: string;\n /** Whether to show spinner icon when loading */\n showSpinner?: boolean;\n}\n\n/**\n * ActionButton Component\n *\n * Enhanced Button component with built-in loading state management.\n * Automatically shows loading text/spinner and disables interaction when loading.\n * Commonly used for form submissions, save actions, and async operations.\n *\n * @example\n * ```tsx\n * <ActionButton\n * onPress={handleSave}\n * isLoading={isSaving}\n * loadingText=\"Saving...\"\n * variant=\"default\"\n * >\n * Save Changes\n * </ActionButton>\n * ```\n */\nexport const ActionButton: React.FC<ActionButtonProps> = ({\n children,\n isLoading = false,\n loadingText = 'Loading...',\n showSpinner = true,\n disabled,\n ...buttonProps\n}) => {\n return (\n <Button {...buttonProps} disabled={disabled || isLoading}>\n {isLoading ? (\n <View className='flex flex-row items-center gap-2'>\n {showSpinner && <Spinner size='small' />}\n <Text className='text-inherit'>{loadingText}</Text>\n </View>\n ) : (\n children\n )}\n </Button>\n );\n};\n","import * as React from 'react';\nimport { View, ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BoxProps extends ViewProps {\n /** Box content */\n children?: React.ReactNode;\n /** Padding */\n p?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Padding X-axis */\n px?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Padding Y-axis */\n py?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Margin */\n m?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';\n /** Margin X-axis */\n mx?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';\n /** Margin Y-axis */\n my?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';\n /** Background color */\n bg?:\n | 'transparent'\n | 'white'\n | 'gray'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger';\n /** Border */\n border?: boolean;\n /** Border radius */\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\n /** Shadow */\n shadow?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n /** Width */\n w?: 'auto' | 'full';\n /** Height */\n h?: 'auto' | 'full';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Box Component\n *\n * Fundamental layout primitive with spacing, sizing, and styling props.\n * Acts as a building block for creating layouts and containers.\n *\n * @example\n * ```tsx\n * <Box p=\"md\" bg=\"white\" rounded=\"lg\" shadow=\"md\">\n * <Text>Card Content</Text>\n * </Box>\n * ```\n */\nexport const Box: React.FC<BoxProps> = ({\n children,\n p,\n px,\n py,\n m,\n mx,\n my,\n bg,\n border = false,\n rounded,\n shadow,\n w,\n h,\n className,\n ...viewProps\n}) => {\n // Spacing configurations\n const spacingClasses: Record<string, string> = {\n none: '0',\n xs: '1',\n sm: '2',\n md: '4',\n lg: '6',\n xl: '8',\n '2xl': '12',\n auto: 'auto',\n };\n\n // Background configurations\n const bgClasses = bg\n ? {\n transparent: 'bg-transparent',\n white: 'bg-white dark:bg-gray-900',\n gray: 'bg-gray-100 dark:bg-gray-800',\n primary: 'bg-blue-50 dark:bg-blue-900/20',\n success: 'bg-green-50 dark:bg-green-900/20',\n warning: 'bg-yellow-50 dark:bg-yellow-900/20',\n danger: 'bg-red-50 dark:bg-red-900/20',\n }[bg]\n : '';\n\n // Border radius configurations\n const roundedClasses = rounded\n ? {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n full: 'rounded-full',\n }[rounded]\n : '';\n\n // Shadow configurations\n const shadowClasses = shadow\n ? {\n none: 'shadow-none',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n }[shadow]\n : '';\n\n // Width configurations\n const wClasses = w\n ? {\n auto: '',\n full: 'w-full',\n }[w]\n : '';\n\n // Height configurations\n const hClasses = h\n ? {\n auto: '',\n full: 'h-full',\n }[h]\n : '';\n\n // Build padding classes\n const paddingClasses: string[] = [];\n if (p) paddingClasses.push('p-' + spacingClasses[p]);\n if (px) paddingClasses.push('px-' + spacingClasses[px]);\n if (py) paddingClasses.push('py-' + spacingClasses[py]);\n\n // Build margin classes\n const marginClasses: string[] = [];\n if (m) marginClasses.push('m-' + spacingClasses[m]);\n if (mx) marginClasses.push('mx-' + spacingClasses[mx]);\n if (my) marginClasses.push('my-' + spacingClasses[my]);\n\n return (\n <View\n className={cn(\n ...paddingClasses,\n ...marginClasses,\n bgClasses,\n border && 'border border-gray-200 dark:border-gray-700',\n roundedClasses,\n shadowClasses,\n wClasses,\n hClasses,\n className\n )}\n {...viewProps}\n >\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Box, BoxProps } from '../Box';\n\nexport interface FlexProps extends Omit<BoxProps, 'className'> {\n /** Flex direction */\n direction?: 'row' | 'row-reverse' | 'col' | 'col-reverse';\n /** Align items */\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';\n /** Justify content */\n justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n /** Wrap items */\n wrap?: 'nowrap' | 'wrap' | 'wrap-reverse';\n /** Gap between items */\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Flex Component\n *\n * Flexbox layout component extending Box with flex-specific properties.\n * Provides convenient props for common flexbox patterns.\n *\n * @example\n * ```tsx\n * <Flex justify=\"between\" align=\"center\" p=\"md\">\n * <Text>Left</Text>\n * <Button>Right</Button>\n * </Flex>\n * ```\n *\n * @example\n * ```tsx\n * <Flex direction=\"col\" gap=\"md\" p=\"lg\">\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * </Flex>\n * ```\n */\nexport const Flex: React.FC<FlexProps> = ({\n direction = 'row',\n align,\n justify,\n wrap = 'nowrap',\n gap,\n className,\n ...boxProps\n}) => {\n // Direction configurations\n const directionClasses: Record<string, string> = {\n row: 'flex-row',\n 'row-reverse': 'flex-row-reverse',\n col: 'flex-col',\n 'col-reverse': 'flex-col-reverse',\n };\n\n // Align items configurations\n const alignClasses = align\n ? {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n }[align]\n : '';\n\n // Justify content configurations\n const justifyClasses = justify\n ? {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n }[justify]\n : '';\n\n // Wrap configurations\n const wrapClasses: Record<string, string> = {\n nowrap: 'flex-nowrap',\n wrap: 'flex-wrap',\n 'wrap-reverse': 'flex-wrap-reverse',\n };\n\n // Gap configurations\n const gapClasses = gap\n ? {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n }[gap]\n : '';\n\n return (\n <Box\n {...boxProps}\n className={cn(\n 'flex',\n directionClasses[direction],\n alignClasses,\n justifyClasses,\n wrapClasses[wrap],\n gapClasses,\n className\n )}\n />\n );\n};\n","import * as React from 'react';\nimport { View, ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface StackProps extends ViewProps {\n /** Stack content */\n children: React.ReactNode;\n /** Stack direction */\n direction?: 'vertical' | 'horizontal';\n /** Spacing between items */\n spacing?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Align items */\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';\n /** Justify content */\n justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n /** Wrap items */\n wrap?: boolean;\n /** Full width/height */\n full?: boolean;\n /** Divider between items */\n divider?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Stack Component\n *\n * Flexbox-based layout component for arranging children vertically or horizontally\n * with consistent spacing. Supports alignment, wrapping, and dividers.\n *\n * @example\n * ```tsx\n * <Stack spacing=\"md\">\n * <View><Text>Item 1</Text></View>\n * <View><Text>Item 2</Text></View>\n * <View><Text>Item 3</Text></View>\n * </Stack>\n * ```\n *\n * @example\n * ```tsx\n * <Stack\n * direction=\"horizontal\"\n * spacing=\"lg\"\n * align=\"center\"\n * justify=\"between\"\n * >\n * <Button>Cancel</Button>\n * <Button>Save</Button>\n * </Stack>\n * ```\n */\nexport const Stack: React.FC<StackProps> = ({\n children,\n direction = 'vertical',\n spacing = 'md',\n align = 'stretch',\n justify = 'start',\n wrap = false,\n full = false,\n divider = false,\n className,\n ...viewProps\n}) => {\n const isVertical = direction === 'vertical';\n\n // Gap classes (NativeWind supports gap)\n const gapClasses: Record<string, Record<string, string>> = {\n vertical: {\n none: '',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n },\n horizontal: {\n none: '',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n },\n };\n\n // Align items configurations\n const alignClasses: Record<string, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n };\n\n // Justify content configurations\n const justifyClasses: Record<string, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n };\n\n return (\n <View\n className={cn(\n 'flex',\n isVertical ? 'flex-col' : 'flex-row',\n gapClasses[direction][spacing],\n alignClasses[align],\n justifyClasses[justify],\n wrap && 'flex-wrap',\n full && (isVertical ? 'h-full' : 'w-full'),\n className\n )}\n {...viewProps}\n >\n {divider\n ? React.Children.map(children, (child, index) => (\n <React.Fragment key={index}>\n {child}\n {index < React.Children.count(children) - 1 && (\n <View\n className={cn(\n 'bg-gray-200 dark:bg-gray-700',\n isVertical ? 'h-px w-full' : 'w-px h-full'\n )}\n />\n )}\n </React.Fragment>\n ))\n : children}\n </View>\n );\n};\n\n/**\n * VStack - Vertical Stack (alias for Stack with direction=\"vertical\")\n */\nexport const VStack: React.FC<Omit<StackProps, 'direction'>> = props => (\n <Stack direction='vertical' {...props} />\n);\n\n/**\n * HStack - Horizontal Stack (alias for Stack with direction=\"horizontal\")\n */\nexport const HStack: React.FC<Omit<StackProps, 'direction'>> = props => (\n <Stack direction='horizontal' {...props} />\n);\n","import * as React from 'react';\nimport { View, Text, ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { textVariants } from '@sudobility/design';\n\nexport interface DividerProps extends ViewProps {\n /** Optional text label */\n label?: string;\n /** Label position */\n labelPosition?: 'left' | 'center' | 'right';\n /** Orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Spacing around the divider */\n spacing?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n /** Line thickness */\n thickness?: 'thin' | 'medium' | 'thick';\n /** Color variant */\n variant?: 'light' | 'medium' | 'dark';\n /** Additional className for the container */\n className?: string;\n /** Additional className for the line */\n lineClassName?: string;\n}\n\n/**\n * Divider Component\n *\n * A visual separator for content sections with optional label support.\n * Can be used horizontally or vertically to divide content areas.\n *\n * @example\n * ```tsx\n * <Divider />\n * <Divider label=\"OR\" labelPosition=\"center\" />\n * <Divider spacing=\"lg\" variant=\"medium\" />\n * ```\n *\n * @example\n * ```tsx\n * // Vertical divider\n * <View className=\"flex flex-row gap-4\">\n * <View><Text>Content 1</Text></View>\n * <Divider orientation=\"vertical\" />\n * <View><Text>Content 2</Text></View>\n * </View>\n * ```\n */\nexport const Divider: React.FC<DividerProps> = ({\n label,\n labelPosition = 'center',\n orientation = 'horizontal',\n spacing = 'md',\n thickness = 'thin',\n variant = 'light',\n className,\n lineClassName,\n ...viewProps\n}) => {\n // Spacing configurations\n const spacingClasses = {\n horizontal: {\n none: 'my-0',\n sm: 'my-2',\n md: 'my-4',\n lg: 'my-6',\n xl: 'my-8',\n },\n vertical: {\n none: 'mx-0',\n sm: 'mx-2',\n md: 'mx-4',\n lg: 'mx-6',\n xl: 'mx-8',\n },\n };\n\n // Thickness configurations (using border for horizontal, width for vertical)\n const thicknessValues = {\n thin: 1,\n medium: 2,\n thick: 4,\n };\n\n // Color variant configurations\n const variantClasses = {\n light: 'bg-gray-200 dark:bg-gray-700',\n medium: 'bg-gray-300 dark:bg-gray-600',\n dark: 'bg-gray-400 dark:bg-gray-500',\n };\n\n // Vertical divider\n if (orientation === 'vertical') {\n return (\n <View\n className={cn(\n 'self-stretch',\n variantClasses[variant],\n spacingClasses.vertical[spacing],\n className\n )}\n style={{ width: thicknessValues[thickness] }}\n accessibilityRole='none'\n {...viewProps}\n />\n );\n }\n\n // Horizontal divider without label\n if (!label) {\n return (\n <View\n className={cn(\n 'w-full',\n variantClasses[variant],\n spacingClasses.horizontal[spacing],\n lineClassName,\n className\n )}\n style={{ height: thicknessValues[thickness] }}\n accessibilityRole='none'\n {...viewProps}\n />\n );\n }\n\n // Horizontal divider with label\n const labelPositionClasses = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n };\n\n return (\n <View\n className={cn(\n 'flex flex-row items-center',\n spacingClasses.horizontal[spacing],\n labelPositionClasses[labelPosition],\n className\n )}\n accessibilityRole='none'\n {...viewProps}\n >\n {labelPosition !== 'left' && (\n <View\n className={cn('flex-1', variantClasses[variant], lineClassName)}\n style={{ height: thicknessValues[thickness] }}\n />\n )}\n <Text\n className={cn(\n textVariants.body.sm(),\n 'px-3 text-gray-500 dark:text-gray-400'\n )}\n >\n {label}\n </Text>\n {labelPosition !== 'right' && (\n <View\n className={cn('flex-1', variantClasses[variant], lineClassName)}\n style={{ height: thicknessValues[thickness] }}\n />\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SeparatorProps {\n /** Separator orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Spacing around separator */\n spacing?: 'none' | 'sm' | 'md' | 'lg';\n /** Line thickness */\n thickness?: 'thin' | 'medium' | 'thick';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Separator Component\n *\n * Simple horizontal or vertical line separator.\n * Use for visual separation in menus, lists, and layouts.\n *\n * @example\n * ```tsx\n * <View>\n * <MenuItem>Option 1</MenuItem>\n * <Separator />\n * <MenuItem>Option 2</MenuItem>\n * </View>\n * ```\n *\n * @example\n * ```tsx\n * <View className=\"flex flex-row items-center gap-4\">\n * <Button>Action 1</Button>\n * <Separator orientation=\"vertical\" spacing=\"md\" />\n * <Button>Action 2</Button>\n * </View>\n * ```\n */\nexport const Separator: React.FC<SeparatorProps> = ({\n orientation = 'horizontal',\n spacing = 'md',\n thickness = 'thin',\n className,\n}) => {\n // Spacing configurations\n const spacingClasses = {\n horizontal: {\n none: '',\n sm: 'my-1',\n md: 'my-2',\n lg: 'my-4',\n },\n vertical: {\n none: '',\n sm: 'mx-1',\n md: 'mx-2',\n lg: 'mx-4',\n },\n };\n\n // Thickness configurations\n const thicknessClasses = {\n horizontal: {\n thin: 'h-px',\n medium: 'h-0.5',\n thick: 'h-1',\n },\n vertical: {\n thin: 'w-px',\n medium: 'w-0.5',\n thick: 'w-1',\n },\n };\n\n const isHorizontal = orientation === 'horizontal';\n\n return (\n <View\n accessibilityRole='none'\n className={cn(\n 'bg-gray-200 dark:bg-gray-700',\n isHorizontal ? 'w-full' : 'h-full',\n thicknessClasses[orientation][thickness],\n spacingClasses[orientation][spacing],\n className\n )}\n />\n );\n};\n","import * as React from 'react';\nimport { View, Dimensions } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface ContainerProps {\n /** Container content */\n children: React.ReactNode;\n /** Max width variant */\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n /** Center container horizontally */\n center?: boolean;\n /** Padding */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Container Component\n *\n * Responsive container with max-width constraints and horizontal centering.\n * Useful for creating consistent page layouts and content areas.\n *\n * @example\n * ```tsx\n * <Container>\n * <Text>Page Content</Text>\n * </Container>\n * ```\n *\n * @example\n * ```tsx\n * <Container size=\"lg\" padding=\"lg\">\n * <Text>Centered content with large max-width</Text>\n * </Container>\n * ```\n */\nexport const Container: React.FC<ContainerProps> = ({\n children,\n size = 'xl',\n center = true,\n padding = 'md',\n className,\n}) => {\n // Max-width configurations (for larger screens/tablets)\n const maxWidths = {\n sm: 384, // 24rem\n md: 448, // 28rem\n lg: 512, // 32rem\n xl: 576, // 36rem\n '2xl': 672, // 42rem\n full: SCREEN_WIDTH,\n };\n\n // Padding configurations\n const paddingClasses = {\n none: '',\n sm: 'px-4 py-2',\n md: 'px-4 py-4',\n lg: 'px-6 py-6',\n };\n\n const maxWidth = maxWidths[size];\n\n return (\n <View\n className={cn(\n 'w-full',\n center && 'self-center',\n paddingClasses[padding],\n className\n )}\n style={{\n maxWidth: maxWidth < SCREEN_WIDTH ? maxWidth : undefined,\n }}\n >\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CenterProps {\n /** Content to center */\n children: React.ReactNode;\n /** Axis to center on */\n axis?: 'horizontal' | 'vertical' | 'both';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Center Component\n *\n * Centers content horizontally, vertically, or both using flexbox.\n * Useful for centering loading states, empty states, and modal content.\n *\n * @example\n * ```tsx\n * <Center>\n * <Spinner />\n * </Center>\n * ```\n *\n * @example\n * ```tsx\n * <Center axis=\"horizontal\">\n * <Button>Centered Button</Button>\n * </Center>\n * ```\n */\nexport const Center: React.FC<CenterProps> = ({\n children,\n axis = 'both',\n className,\n}) => {\n const getFlexClasses = () => {\n switch (axis) {\n case 'horizontal':\n return 'justify-center';\n case 'vertical':\n return 'items-center';\n case 'both':\n default:\n return 'justify-center items-center';\n }\n };\n\n return (\n <View className={cn('flex', getFlexClasses(), className)}>{children}</View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SpacerProps {\n /** Size of the spacer */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | number;\n /** Direction of spacing */\n axis?: 'horizontal' | 'vertical';\n /** Flex grow to fill available space */\n flex?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Spacer Component\n *\n * Creates empty space between elements. Can be a fixed size or flexible.\n * Useful for creating consistent spacing in layouts.\n *\n * @example\n * ```tsx\n * <HStack>\n * <Button>Cancel</Button>\n * <Spacer flex />\n * <Button>Save</Button>\n * </HStack>\n * ```\n *\n * @example\n * ```tsx\n * <VStack>\n * <Text>Title</Text>\n * <Spacer size=\"lg\" />\n * <Text>Content</Text>\n * </VStack>\n * ```\n */\nexport const Spacer: React.FC<SpacerProps> = ({\n size = 'md',\n axis = 'vertical',\n flex = false,\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n vertical: {\n xs: 'h-1',\n sm: 'h-2',\n md: 'h-4',\n lg: 'h-6',\n xl: 'h-8',\n '2xl': 'h-12',\n },\n horizontal: {\n xs: 'w-1',\n sm: 'w-2',\n md: 'w-4',\n lg: 'w-6',\n xl: 'w-8',\n '2xl': 'w-12',\n },\n };\n\n // Custom size (number)\n const customSizeStyle =\n typeof size === 'number'\n ? axis === 'vertical'\n ? { height: size }\n : { width: size }\n : undefined;\n\n const sizeClass = typeof size === 'string' ? sizeClasses[axis][size] : '';\n\n return (\n <View\n className={cn(flex && 'flex-1', !flex && sizeClass, className)}\n style={customSizeStyle}\n accessibilityElementsHidden\n />\n );\n};\n","import * as React from 'react';\nimport { View, Dimensions } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface GridProps {\n /** Grid content */\n children: React.ReactNode;\n /** Number of columns */\n cols?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Gap between items */\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Align items */\n alignItems?: 'start' | 'center' | 'end' | 'stretch';\n /** Additional className */\n className?: string;\n}\n\nexport interface GridItemProps {\n /** Grid item content */\n children: React.ReactNode;\n /** Column span */\n colSpan?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Grid Component\n *\n * Flexbox-based grid layout component for React Native.\n * Uses flex-wrap to simulate CSS Grid behavior.\n *\n * @example\n * ```tsx\n * <Grid cols={3} gap=\"md\">\n * <GridItem><Card>Item 1</Card></GridItem>\n * <GridItem><Card>Item 2</Card></GridItem>\n * <GridItem><Card>Item 3</Card></GridItem>\n * </Grid>\n * ```\n *\n * @example\n * ```tsx\n * <Grid cols={2} gap=\"lg\">\n * <GridItem colSpan={2}><Card>Full width</Card></GridItem>\n * <GridItem><Card>Half</Card></GridItem>\n * <GridItem><Card>Half</Card></GridItem>\n * </Grid>\n * ```\n */\nexport const Grid: React.FC<GridProps> = ({\n children,\n cols = 1,\n gap = 'md',\n alignItems = 'stretch',\n className,\n}) => {\n // Gap configurations (in pixels for calculation)\n const gapValues = {\n none: 0,\n xs: 4,\n sm: 8,\n md: 16,\n lg: 24,\n xl: 32,\n '2xl': 48,\n };\n\n // Gap class mapping\n const gapClasses = {\n none: '',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n };\n\n // Align items configurations\n const alignItemsClasses = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n };\n\n const gapValue = gapValues[gap];\n\n // Calculate item width based on columns and gap\n // Note: In RN, we need to calculate this manually\n const getItemWidth = (span: number = 1) => {\n const totalGap = gapValue * (cols - 1);\n const availableWidth = SCREEN_WIDTH - 32; // Account for container padding\n const columnWidth = (availableWidth - totalGap) / cols;\n return columnWidth * span + gapValue * (span - 1);\n };\n\n // Clone children with calculated width\n const childrenWithWidth = React.Children.map(children, child => {\n if (React.isValidElement(child)) {\n const colSpan = (child.props as GridItemProps).colSpan || 1;\n return React.cloneElement(child as React.ReactElement, {\n style: {\n width: getItemWidth(colSpan),\n ...(child.props as { style?: object }).style,\n },\n });\n }\n return child;\n });\n\n return (\n <View\n className={cn(\n 'flex flex-row flex-wrap',\n gapClasses[gap],\n alignItemsClasses[alignItems],\n className\n )}\n >\n {childrenWithWidth}\n </View>\n );\n};\n\n/**\n * GridItem Component\n *\n * Individual grid item that can span multiple columns.\n */\nexport const GridItem: React.FC<GridItemProps & { style?: object }> = ({\n children,\n className,\n style,\n}) => {\n return (\n <View className={cn(className)} style={style}>\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text, TextProps } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { textVariants } from '@sudobility/design';\n\nexport interface LabelProps extends TextProps {\n /** Label content */\n children: React.ReactNode;\n /** Whether the associated input is required */\n required?: boolean;\n /** Whether the label is disabled */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Label Component\n *\n * Text label for form inputs with proper styling.\n *\n * @example\n * ```tsx\n * <Label>Email Address</Label>\n * <Input placeholder=\"Enter your email\" />\n * ```\n *\n * @example\n * ```tsx\n * <Label required>Password</Label>\n * <Input secureTextEntry />\n * ```\n */\nexport const Label = React.forwardRef<Text, LabelProps>(\n ({ children, required, disabled, className, ...props }, ref) => {\n return (\n <Text\n ref={ref}\n className={cn(\n textVariants.label.default(),\n disabled && 'opacity-70',\n className\n )}\n accessibilityRole='text'\n {...props}\n >\n {children}\n {required && <Text className='text-red-500 ml-1'>*</Text>}\n </Text>\n );\n }\n);\n\nLabel.displayName = 'Label';\n","import * as React from 'react';\nimport { View, TextInput, Text, TextInputProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TextAreaProps extends Omit<TextInputProps, 'onChange'> {\n /** Current value */\n value: string;\n /** Callback when value changes */\n onChangeText: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Number of visible lines (used to calculate height) */\n numberOfLines?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Read-only state */\n readOnly?: boolean;\n /** Show character count */\n showCount?: boolean;\n /** Maximum character count */\n maxLength?: number;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className for container */\n className?: string;\n /** Additional className for the input */\n inputClassName?: string;\n}\n\n/**\n * TextArea Component\n *\n * Multi-line text input with character counting and consistent styling.\n *\n * @example\n * ```tsx\n * <TextArea\n * value={message}\n * onChangeText={setMessage}\n * placeholder=\"Write your message...\"\n * numberOfLines={5}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <TextArea\n * value={bio}\n * onChangeText={setBio}\n * showCount\n * maxLength={500}\n * placeholder=\"Tell us about yourself...\"\n * />\n * ```\n */\nexport const TextArea: React.FC<TextAreaProps> = ({\n value,\n onChangeText,\n placeholder,\n numberOfLines = 4,\n disabled = false,\n readOnly = false,\n showCount = false,\n maxLength,\n size = 'md',\n className,\n inputClassName,\n ...textInputProps\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'p-2 text-sm',\n md: 'p-3 text-base',\n lg: 'p-4 text-lg',\n };\n\n const handleChangeText = (newValue: string) => {\n // Enforce maxLength if provided\n if (maxLength && newValue.length > maxLength) {\n return;\n }\n\n onChangeText(newValue);\n };\n\n const characterCount = value.length;\n const showCountInfo = showCount || maxLength !== undefined;\n\n return (\n <View className={cn('w-full', className)}>\n <TextInput\n value={value}\n onChangeText={handleChangeText}\n placeholder={placeholder}\n numberOfLines={numberOfLines}\n editable={!disabled && !readOnly}\n maxLength={maxLength}\n multiline\n textAlignVertical='top'\n className={cn(\n 'w-full rounded-lg border',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n 'placeholder:text-gray-400 dark:placeholder:text-gray-500',\n 'border-gray-300 dark:border-gray-600',\n sizeClasses[size],\n disabled && 'opacity-50',\n readOnly && 'bg-gray-50 dark:bg-gray-900',\n inputClassName\n )}\n placeholderTextColor='#9CA3AF'\n accessibilityRole='text'\n accessibilityState={{ disabled }}\n {...textInputProps}\n />\n\n {/* Character count */}\n {showCountInfo && (\n <View className='flex flex-row justify-end mt-1'>\n <Text\n className={cn(\n 'text-xs',\n maxLength && characterCount > maxLength * 0.9\n ? 'text-yellow-600 dark:text-yellow-400'\n : 'text-gray-500 dark:text-gray-400',\n maxLength &&\n characterCount >= maxLength &&\n 'text-red-600 dark:text-red-400'\n )}\n >\n {characterCount}\n {maxLength && ` / ${maxLength}`}\n </Text>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Pressable, PressableProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CheckboxProps extends Omit<PressableProps, 'onPress'> {\n /** Whether the checkbox is checked (controlled mode) */\n checked?: boolean;\n /** Default checked state (uncontrolled mode) */\n defaultChecked?: boolean;\n /** Change handler */\n onChange?: (checked: boolean) => void;\n /** Label text */\n label?: string;\n /** Description text below label */\n description?: string;\n /** Whether the checkbox is disabled */\n disabled?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'error';\n /** Additional className for the container */\n className?: string;\n /** Whether the checkbox is required */\n required?: boolean;\n /** Indeterminate state */\n indeterminate?: boolean;\n /** Error state */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n}\n\n/**\n * Checkbox Component\n *\n * Custom styled checkbox with proper accessibility and visual feedback.\n * Supports both controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * // Controlled\n * <Checkbox\n * checked={isEnabled}\n * onChange={setIsEnabled}\n * label=\"Enable notifications\"\n * />\n *\n * // Uncontrolled\n * <Checkbox\n * defaultChecked={true}\n * label=\"Remember me\"\n * />\n * ```\n */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked: controlledChecked,\n defaultChecked = false,\n onChange,\n label,\n description,\n disabled = false,\n size = 'md',\n variant = 'primary',\n className,\n required = false,\n indeterminate = false,\n error = false,\n errorMessage,\n ...pressableProps\n}) => {\n // Support both controlled and uncontrolled modes\n const [uncontrolledChecked, setUncontrolledChecked] =\n useState(defaultChecked);\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : uncontrolledChecked;\n\n const sizeClasses = {\n sm: {\n box: 'w-4 h-4',\n check: 'w-2 h-2',\n text: 'text-sm',\n desc: 'text-xs',\n },\n md: {\n box: 'w-5 h-5',\n check: 'w-3 h-3',\n text: 'text-base',\n desc: 'text-sm',\n },\n lg: {\n box: 'w-6 h-6',\n check: 'w-4 h-4',\n text: 'text-lg',\n desc: 'text-base',\n },\n };\n\n const getVariantClasses = () => {\n if (error) {\n return checked\n ? 'bg-red-600 border-red-600'\n : 'border-red-600 dark:border-red-500';\n }\n\n const variantClasses = {\n primary: checked\n ? 'bg-blue-600 border-blue-600'\n : 'border-gray-300 dark:border-gray-600',\n success: checked\n ? 'bg-green-600 border-green-600'\n : 'border-gray-300 dark:border-gray-600',\n warning: checked\n ? 'bg-yellow-600 border-yellow-600'\n : 'border-gray-300 dark:border-gray-600',\n error: checked\n ? 'bg-red-600 border-red-600'\n : 'border-gray-300 dark:border-gray-600',\n };\n\n return variantClasses[variant];\n };\n\n const handlePress = () => {\n if (disabled) return;\n\n const newChecked = !checked;\n\n if (!isControlled) {\n setUncontrolledChecked(newChecked);\n }\n\n onChange?.(newChecked);\n };\n\n const config = sizeClasses[size];\n\n return (\n <View className={cn('flex flex-col', className)}>\n <Pressable\n onPress={handlePress}\n disabled={disabled}\n className={cn(\n 'flex flex-row items-start gap-2',\n disabled && 'opacity-50'\n )}\n accessibilityRole='checkbox'\n accessibilityState={{\n checked: indeterminate ? 'mixed' : checked,\n disabled,\n }}\n accessibilityLabel={label}\n {...pressableProps}\n >\n <View className='relative flex items-center justify-center'>\n <View\n className={cn(\n 'rounded border-2 flex items-center justify-center bg-white dark:bg-gray-900',\n config.box,\n getVariantClasses()\n )}\n >\n {indeterminate ? (\n <View\n className={cn('bg-white rounded-sm', config.check, 'h-0.5')}\n />\n ) : checked ? (\n <View className={cn('bg-white rounded-sm', config.check)} />\n ) : null}\n </View>\n </View>\n {(label || description) && (\n <View className='flex flex-col flex-1'>\n {label && (\n <Text\n className={cn('text-gray-900 dark:text-white', config.text)}\n >\n {label}\n {required && <Text className='text-red-500 ml-1'>*</Text>}\n </Text>\n )}\n {description && (\n <Text\n className={cn('text-gray-600 dark:text-gray-400', config.desc)}\n >\n {description}\n </Text>\n )}\n </View>\n )}\n </Pressable>\n {errorMessage && (\n <Text className='mt-1 text-sm text-red-600 dark:text-red-400'>\n {errorMessage}\n </Text>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Pressable, Animated, PressableProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SwitchProps extends Omit<PressableProps, 'onPress'> {\n /** Whether the switch is on (controlled mode) */\n checked?: boolean;\n /** Default checked state (uncontrolled mode) */\n defaultChecked?: boolean;\n /** Change handler */\n onCheckedChange?: (checked: boolean) => void;\n /** Whether the switch is disabled */\n disabled?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Switch Component\n *\n * Toggle switch for binary on/off states with smooth animation.\n * Supports both controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * // Controlled\n * <Switch\n * checked={isEnabled}\n * onCheckedChange={setIsEnabled}\n * />\n *\n * // Uncontrolled\n * <Switch defaultChecked={true} />\n * ```\n */\nexport const Switch = React.forwardRef<View, SwitchProps>(\n (\n {\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n size = 'md',\n className,\n ...pressableProps\n },\n ref\n ) => {\n // Support both controlled and uncontrolled modes\n const [uncontrolledChecked, setUncontrolledChecked] =\n useState(defaultChecked);\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : uncontrolledChecked;\n\n // Animation value for thumb position\n const animatedValue = React.useRef(\n new Animated.Value(checked ? 1 : 0)\n ).current;\n\n React.useEffect(() => {\n Animated.timing(animatedValue, {\n toValue: checked ? 1 : 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }, [checked, animatedValue]);\n\n // Size configurations\n const sizeConfig = {\n sm: {\n track: 'w-8 h-4',\n thumb: 'w-3 h-3',\n translateX: 16,\n },\n md: {\n track: 'w-11 h-6',\n thumb: 'w-5 h-5',\n translateX: 20,\n },\n lg: {\n track: 'w-14 h-8',\n thumb: 'w-7 h-7',\n translateX: 24,\n },\n };\n\n const config = sizeConfig[size];\n\n const handlePress = () => {\n if (disabled) return;\n\n const newChecked = !checked;\n\n if (!isControlled) {\n setUncontrolledChecked(newChecked);\n }\n\n onCheckedChange?.(newChecked);\n };\n\n const thumbTranslateX = animatedValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0, config.translateX],\n });\n\n return (\n <Pressable\n ref={ref}\n onPress={handlePress}\n disabled={disabled}\n className={cn(\n 'rounded-full items-center justify-start flex-row',\n config.track,\n checked\n ? 'bg-blue-600 dark:bg-blue-500'\n : 'bg-gray-200 dark:bg-gray-700',\n disabled && 'opacity-50',\n className\n )}\n accessibilityRole='switch'\n accessibilityState={{ checked, disabled }}\n {...pressableProps}\n >\n <Animated.View\n className={cn('rounded-full bg-white shadow-lg', config.thumb)}\n style={{\n transform: [{ translateX: thumbTranslateX }],\n marginLeft: 2,\n }}\n />\n </Pressable>\n );\n }\n);\n\nSwitch.displayName = 'Switch';\n","import * as React from 'react';\nimport { View, Text, TextProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface HelperTextProps extends TextProps {\n /** Helper text content */\n children: React.ReactNode;\n /** Variant (affects color and icon) */\n variant?: 'default' | 'error' | 'success' | 'warning';\n /** Show icon indicator */\n showIcon?: boolean;\n /** Size */\n size?: 'sm' | 'base';\n /** Additional className */\n className?: string;\n}\n\n/**\n * HelperText Component\n *\n * Text component for form field descriptions, error messages, and hints.\n * Supports different variants with optional icon indicators.\n *\n * @example\n * ```tsx\n * <HelperText>\n * Enter your email address\n * </HelperText>\n * ```\n *\n * @example\n * ```tsx\n * <HelperText variant=\"error\" showIcon>\n * This field is required\n * </HelperText>\n * ```\n */\nexport const HelperText: React.FC<HelperTextProps> = ({\n children,\n variant = 'default',\n showIcon = false,\n size = 'sm',\n className,\n ...textProps\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'text-sm',\n base: 'text-base',\n };\n\n const iconSize = {\n sm: 'w-4 h-4',\n base: 'w-5 h-5',\n };\n\n // Variant configurations\n const variantConfig = {\n default: {\n text: 'text-gray-600 dark:text-gray-400',\n icon: 'ℹ',\n },\n error: {\n text: 'text-red-600 dark:text-red-400',\n icon: '⚠',\n },\n success: {\n text: 'text-green-600 dark:text-green-400',\n icon: '✓',\n },\n warning: {\n text: 'text-yellow-600 dark:text-yellow-400',\n icon: '⚠',\n },\n };\n\n const config = variantConfig[variant];\n\n return (\n <View className={cn('flex flex-row items-start gap-1.5', className)}>\n {showIcon && (\n <Text className={cn(iconSize[size], config.text, 'mt-0.5')}>\n {config.icon}\n </Text>\n )}\n <Text className={cn(sizeClasses[size], config.text)} {...textProps}>\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n FlatList,\n SafeAreaView,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SelectOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n /** Currently selected value */\n value?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n /** Options to display */\n options: SelectOption[];\n /** Placeholder text when no value selected */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Additional className for the trigger */\n className?: string;\n /** Title for the modal */\n title?: string;\n}\n\n/**\n * Select Component\n *\n * Dropdown select component using a modal picker for React Native.\n * Provides a native-feeling selection experience.\n *\n * @example\n * ```tsx\n * <Select\n * value={selectedValue}\n * onValueChange={setSelectedValue}\n * options={[\n * { label: 'Option 1', value: '1' },\n * { label: 'Option 2', value: '2' },\n * { label: 'Option 3', value: '3' },\n * ]}\n * placeholder=\"Select an option...\"\n * />\n * ```\n */\nexport const Select: React.FC<SelectProps> = ({\n value,\n onValueChange,\n options,\n placeholder = 'Select...',\n disabled = false,\n className,\n title = 'Select Option',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const selectedOption = options.find(opt => opt.value === value);\n\n const handleSelect = useCallback(\n (optionValue: string) => {\n onValueChange?.(optionValue);\n setIsOpen(false);\n },\n [onValueChange]\n );\n\n const renderOption = ({ item }: { item: SelectOption; index: number }) => (\n <Pressable\n onPress={() => !item.disabled && handleSelect(item.value)}\n disabled={item.disabled}\n className={cn(\n 'px-4 py-3 border-b border-gray-200 dark:border-gray-700',\n item.value === value && 'bg-blue-50 dark:bg-blue-900/30',\n item.disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityState={{\n selected: item.value === value,\n disabled: item.disabled,\n }}\n >\n <View className='flex flex-row items-center justify-between'>\n <Text\n className={cn(\n 'text-base',\n item.value === value\n ? 'text-blue-600 dark:text-blue-400 font-medium'\n : 'text-gray-900 dark:text-gray-100'\n )}\n >\n {item.label}\n </Text>\n {item.value === value && (\n <Text className='text-blue-600 dark:text-blue-400'>✓</Text>\n )}\n </View>\n </Pressable>\n );\n\n return (\n <>\n {/* Trigger */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex flex-row items-center justify-between h-11 px-3 py-2 rounded-md border',\n 'border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n disabled && 'opacity-50',\n className\n )}\n accessibilityRole='combobox'\n accessibilityState={{ disabled, expanded: isOpen }}\n >\n <Text\n className={cn(\n 'text-base flex-1',\n selectedOption\n ? 'text-gray-900 dark:text-gray-100'\n : 'text-gray-400 dark:text-gray-500'\n )}\n numberOfLines={1}\n >\n {selectedOption?.label || placeholder}\n </Text>\n <Text className='text-gray-400 dark:text-gray-500 ml-2'>▼</Text>\n </Pressable>\n\n {/* Modal Picker */}\n <Modal\n visible={isOpen}\n animationType='slide'\n transparent\n onRequestClose={() => setIsOpen(false)}\n >\n <View className='flex-1 justify-end bg-black/50'>\n <SafeAreaView className='bg-white dark:bg-gray-800 rounded-t-xl'>\n {/* Header */}\n <View className='flex flex-row items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700'>\n <Pressable onPress={() => setIsOpen(false)}>\n <Text className='text-blue-600 dark:text-blue-400 text-base'>\n Cancel\n </Text>\n </Pressable>\n <Text className='text-base font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n <View style={{ width: 60 }} />\n </View>\n\n {/* Options */}\n <FlatList\n data={options}\n renderItem={renderOption}\n keyExtractor={(item: SelectOption) => item.value}\n style={{ maxHeight: 300 }}\n />\n </SafeAreaView>\n </View>\n </Modal>\n </>\n );\n};\n\n/**\n * SelectTrigger - For compound component pattern\n */\nexport const SelectTrigger = Select;\n\n/**\n * SelectValue - Display component for the selected value\n */\nexport const SelectValue: React.FC<{ placeholder?: string }> = ({\n placeholder = 'Select...',\n}) => <Text className='text-gray-400 dark:text-gray-500'>{placeholder}</Text>;\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n TextInput,\n Pressable,\n Text,\n ActivityIndicator,\n TextInputProps,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SearchInputProps extends Omit<TextInputProps, 'onChange'> {\n /** Current search query */\n value?: string;\n /** Callback when query changes */\n onChangeText?: (query: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Auto-focus on mount */\n autoFocus?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Show search icon */\n showIcon?: boolean;\n /** Show clear button when has value */\n showClear?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SearchInput Component\n *\n * Search input field with icon, clear button, and loading state.\n *\n * @example\n * ```tsx\n * <SearchInput\n * placeholder=\"Search emails...\"\n * onChangeText={query => setSearchQuery(query)}\n * />\n * ```\n */\nexport const SearchInput: React.FC<SearchInputProps> = ({\n value: controlledValue,\n onChangeText,\n placeholder = 'Search...',\n autoFocus = false,\n disabled = false,\n size = 'md',\n showIcon = true,\n showClear = true,\n loading = false,\n className,\n ...textInputProps\n}) => {\n const [internalValue, setInternalValue] = useState('');\n\n // Use controlled value if provided, otherwise use internal state\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n const isControlled = controlledValue !== undefined;\n\n // Size configurations\n const sizeClasses = {\n sm: {\n input: 'py-1.5 text-sm',\n icon: 'text-base',\n paddingLeft: showIcon ? 'pl-8' : 'pl-3',\n paddingRight: 'pr-8',\n },\n md: {\n input: 'py-2 text-base',\n icon: 'text-lg',\n paddingLeft: showIcon ? 'pl-10' : 'pl-3',\n paddingRight: 'pr-10',\n },\n lg: {\n input: 'py-3 text-lg',\n icon: 'text-xl',\n paddingLeft: showIcon ? 'pl-12' : 'pl-4',\n paddingRight: 'pr-12',\n },\n };\n\n const sizeConfig = sizeClasses[size];\n\n const handleChange = useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChangeText?.(newValue);\n },\n [onChangeText, isControlled]\n );\n\n const handleClear = useCallback(() => {\n if (!isControlled) {\n setInternalValue('');\n }\n onChangeText?.('');\n }, [onChangeText, isControlled]);\n\n return (\n <View className={cn('relative w-full', className)}>\n {/* Search Icon */}\n {showIcon && (\n <View className='absolute inset-y-0 left-0 flex items-center justify-center pl-3 z-10'>\n <Text\n className={cn(sizeConfig.icon, 'text-gray-400 dark:text-gray-500')}\n >\n 🔍\n </Text>\n </View>\n )}\n\n {/* Input */}\n <TextInput\n value={value}\n onChangeText={handleChange}\n placeholder={placeholder}\n autoFocus={autoFocus}\n editable={!disabled && !loading}\n className={cn(\n 'w-full rounded-lg border',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n 'border-gray-300 dark:border-gray-600',\n sizeConfig.input,\n sizeConfig.paddingLeft,\n sizeConfig.paddingRight,\n disabled && 'opacity-50',\n loading && 'opacity-60'\n )}\n placeholderTextColor='#9CA3AF'\n accessibilityRole='search'\n accessibilityState={{ disabled }}\n {...textInputProps}\n />\n\n {/* Clear Button or Loading Spinner */}\n {showClear && value && !loading && (\n <Pressable\n onPress={handleClear}\n disabled={disabled}\n className='absolute inset-y-0 right-0 flex items-center justify-center pr-3'\n accessibilityRole='button'\n accessibilityLabel='Clear search'\n >\n <Text className={cn(sizeConfig.icon, 'text-gray-400')}>✕</Text>\n </Pressable>\n )}\n\n {/* Loading Spinner */}\n {loading && (\n <View className='absolute inset-y-0 right-0 flex items-center justify-center pr-3'>\n <ActivityIndicator size='small' color='#9CA3AF' />\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, TextInput, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface NumberInputProps {\n /** Current value */\n value: number;\n /** Callback when value changes */\n onChange: (value: number) => void;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Step increment */\n step?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Show stepper buttons */\n showSteppers?: boolean;\n /** Stepper button position */\n stepperPosition?: 'right' | 'sides';\n /** Placeholder text */\n placeholder?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * NumberInput Component\n *\n * Number input field with optional stepper buttons for increment/decrement.\n * Supports min/max bounds, step values, and different layouts.\n *\n * @example\n * ```tsx\n * <NumberInput\n * value={quantity}\n * onChange={setQuantity}\n * min={1}\n * max={100}\n * showSteppers\n * />\n * ```\n *\n * @example\n * ```tsx\n * <NumberInput\n * value={price}\n * onChange={setPrice}\n * step={0.01}\n * min={0}\n * showSteppers\n * stepperPosition=\"sides\"\n * />\n * ```\n */\nexport const NumberInput: React.FC<NumberInputProps> = ({\n value,\n onChange,\n min,\n max,\n step = 1,\n disabled = false,\n showSteppers = false,\n stepperPosition = 'right',\n placeholder,\n size = 'md',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: {\n input: 'py-1.5 px-3 text-sm',\n button: 'w-8 h-8',\n icon: 'text-sm',\n },\n md: {\n input: 'py-2 px-3 text-base',\n button: 'w-10 h-10',\n icon: 'text-base',\n },\n lg: {\n input: 'py-3 px-4 text-lg',\n button: 'w-12 h-12',\n icon: 'text-lg',\n },\n };\n\n const sizeConfig = sizeClasses[size];\n\n const clampValue = (val: number): number => {\n let clamped = val;\n if (min !== undefined && clamped < min) clamped = min;\n if (max !== undefined && clamped > max) clamped = max;\n return clamped;\n };\n\n const handleTextChange = (text: string) => {\n const newValue = parseFloat(text);\n if (!isNaN(newValue)) {\n const clampedValue = clampValue(newValue);\n onChange(clampedValue);\n } else if (text === '') {\n onChange(min ?? 0);\n }\n };\n\n const increment = () => {\n if (disabled) return;\n const newValue = clampValue(value + step);\n onChange(newValue);\n };\n\n const decrement = () => {\n if (disabled) return;\n const newValue = clampValue(value - step);\n onChange(newValue);\n };\n\n const canIncrement = max === undefined || value < max;\n const canDecrement = min === undefined || value > min;\n\n const StepperButton = ({\n onPress,\n icon,\n buttonDisabled,\n ariaLabel,\n }: {\n onPress: () => void;\n icon: string;\n buttonDisabled: boolean;\n ariaLabel: string;\n }) => (\n <Pressable\n onPress={onPress}\n disabled={disabled || buttonDisabled}\n accessibilityRole='button'\n accessibilityLabel={ariaLabel}\n className={cn(\n 'items-center justify-center',\n 'border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n sizeConfig.button,\n (disabled || buttonDisabled) && 'opacity-50'\n )}\n >\n <Text className={cn('text-gray-700 dark:text-gray-300', sizeConfig.icon)}>\n {icon}\n </Text>\n </Pressable>\n );\n\n // Sides layout: - [input] +\n if (showSteppers && stepperPosition === 'sides') {\n return (\n <View className={cn('flex flex-row items-stretch', className)}>\n <StepperButton\n onPress={decrement}\n buttonDisabled={!canDecrement}\n icon='−'\n ariaLabel='Decrement'\n />\n <TextInput\n value={String(value)}\n onChangeText={handleTextChange}\n keyboardType='numeric'\n editable={!disabled}\n placeholder={placeholder}\n className={cn(\n 'border-x-0 text-center flex-1',\n 'border-y border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n sizeConfig.input,\n disabled && 'opacity-50'\n )}\n accessibilityLabel='Number input'\n />\n <StepperButton\n onPress={increment}\n buttonDisabled={!canIncrement}\n icon='+'\n ariaLabel='Increment'\n />\n </View>\n );\n }\n\n // Right layout: [input] [+/-]\n if (showSteppers && stepperPosition === 'right') {\n return (\n <View className={cn('flex flex-row items-stretch gap-2', className)}>\n <TextInput\n value={String(value)}\n onChangeText={handleTextChange}\n keyboardType='numeric'\n editable={!disabled}\n placeholder={placeholder}\n className={cn(\n 'flex-1 rounded-lg border',\n 'border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n sizeConfig.input,\n disabled && 'opacity-50'\n )}\n accessibilityLabel='Number input'\n />\n <View className='flex flex-col gap-0.5'>\n <Pressable\n onPress={increment}\n disabled={disabled || !canIncrement}\n accessibilityRole='button'\n accessibilityLabel='Increment'\n className={cn(\n 'flex-1 items-center justify-center',\n 'rounded border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'px-2',\n (disabled || !canIncrement) && 'opacity-50'\n )}\n >\n <Text className='text-gray-700 dark:text-gray-300 text-xs'>+</Text>\n </Pressable>\n <Pressable\n onPress={decrement}\n disabled={disabled || !canDecrement}\n accessibilityRole='button'\n accessibilityLabel='Decrement'\n className={cn(\n 'flex-1 items-center justify-center',\n 'rounded border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'px-2',\n (disabled || !canDecrement) && 'opacity-50'\n )}\n >\n <Text className='text-gray-700 dark:text-gray-300 text-xs'>−</Text>\n </Pressable>\n </View>\n </View>\n );\n }\n\n // No steppers: just the input\n return (\n <TextInput\n value={String(value)}\n onChangeText={handleTextChange}\n keyboardType='numeric'\n editable={!disabled}\n placeholder={placeholder}\n className={cn(\n 'rounded-lg border',\n 'border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-900 dark:text-gray-100',\n sizeConfig.input,\n disabled && 'opacity-50',\n className\n )}\n accessibilityLabel='Number input'\n />\n );\n};\n","import * as React from 'react';\nimport { Text as RNText } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TextProps {\n /** Text content */\n children: React.ReactNode;\n /** Size variant */\n size?: 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n /** Weight variant */\n weight?: 'light' | 'normal' | 'medium' | 'semibold' | 'bold';\n /** Color variant */\n color?: 'default' | 'muted' | 'primary' | 'success' | 'warning' | 'danger';\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n /** Text transform */\n transform?: 'none' | 'uppercase' | 'lowercase' | 'capitalize';\n /** Number of lines (for truncation) */\n numberOfLines?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Text Component\n *\n * Versatile text component with consistent styling.\n * Supports various sizes, weights, colors, and formatting options.\n *\n * @example\n * ```tsx\n * <Text size=\"lg\" weight=\"semibold\">\n * Large semibold text\n * </Text>\n * ```\n *\n * @example\n * ```tsx\n * <Text color=\"muted\" size=\"sm\">\n * Muted small text\n * </Text>\n * ```\n */\nexport const Text: React.FC<TextProps> = ({\n children,\n size = 'base',\n weight = 'normal',\n color = 'default',\n align,\n transform = 'none',\n numberOfLines,\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n xs: 'text-xs',\n sm: 'text-sm',\n base: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n '3xl': 'text-3xl',\n '4xl': 'text-4xl',\n };\n\n // Weight configurations\n const weightClasses = {\n light: 'font-light',\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n };\n\n // Color configurations\n const colorClasses = {\n default: 'text-gray-900 dark:text-gray-100',\n muted: 'text-gray-600 dark:text-gray-400',\n primary: 'text-blue-600 dark:text-blue-400',\n success: 'text-green-600 dark:text-green-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n danger: 'text-red-600 dark:text-red-400',\n };\n\n // Alignment configurations\n const alignClasses = align\n ? {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n }[align]\n : '';\n\n // Transform configurations\n const transformClasses = {\n none: '',\n uppercase: 'uppercase',\n lowercase: 'lowercase',\n capitalize: 'capitalize',\n };\n\n return (\n <RNText\n className={cn(\n sizeClasses[size],\n weightClasses[weight],\n colorClasses[color],\n alignClasses,\n transformClasses[transform],\n className\n )}\n numberOfLines={numberOfLines}\n >\n {children}\n </RNText>\n );\n};\n","import * as React from 'react';\nimport { Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface HeadingProps {\n /** Heading content */\n children: React.ReactNode;\n /** Heading level (for semantic/accessibility purposes) */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Size (independent of level for visual flexibility) */\n size?: '4xl' | '3xl' | '2xl' | 'xl' | 'lg' | 'base';\n /** Weight variant */\n weight?: 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold';\n /** Color variant */\n color?: 'default' | 'muted' | 'primary';\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Heading Component\n *\n * Semantic heading component with flexible sizing and styling.\n * Level is used for accessibility, size controls visual appearance.\n *\n * @example\n * ```tsx\n * <Heading level={1} size=\"4xl\">\n * Page Title\n * </Heading>\n * ```\n *\n * @example\n * ```tsx\n * <Heading level={2} size=\"xl\" color=\"primary\">\n * Section Title\n * </Heading>\n * ```\n */\nexport const Heading: React.FC<HeadingProps> = ({\n children,\n level = 2,\n size,\n weight = 'bold',\n color = 'default',\n align,\n className,\n}) => {\n // Default sizes based on level if not explicitly provided\n const defaultSizes = {\n 1: '4xl',\n 2: '3xl',\n 3: '2xl',\n 4: 'xl',\n 5: 'lg',\n 6: 'base',\n } as const;\n\n const actualSize = size || defaultSizes[level];\n\n // Size configurations\n const sizeClasses = {\n '4xl': 'text-4xl',\n '3xl': 'text-3xl',\n '2xl': 'text-2xl',\n xl: 'text-xl',\n lg: 'text-lg',\n base: 'text-base',\n };\n\n // Weight configurations\n const weightClasses = {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n extrabold: 'font-extrabold',\n };\n\n // Color configurations\n const colorClasses = {\n default: 'text-gray-900 dark:text-gray-100',\n muted: 'text-gray-700 dark:text-gray-300',\n primary: 'text-blue-600 dark:text-blue-400',\n };\n\n // Alignment configurations\n const alignClasses = align\n ? {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n }[align]\n : '';\n\n return (\n <Text\n className={cn(\n sizeClasses[actualSize],\n weightClasses[weight],\n colorClasses[color],\n alignClasses,\n className\n )}\n accessibilityRole='header'\n >\n {children}\n </Text>\n );\n};\n","import * as React from 'react';\nimport { Text, View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CodeProps {\n /** Code content */\n children: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Code Component\n *\n * Displays inline code snippets with monospace font and consistent styling.\n *\n * @example\n * ```tsx\n * <Text>Use the <Code>useState</Code> hook</Text>\n * ```\n *\n * @example\n * ```tsx\n * <Code variant=\"primary\" size=\"lg\">\n * npm install\n * </Code>\n * ```\n */\nexport const Code: React.FC<CodeProps> = ({\n children,\n size = 'md',\n variant = 'default',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'text-xs px-1 py-0.5',\n md: 'text-sm px-1.5 py-0.5',\n lg: 'text-base px-2 py-1',\n };\n\n // Variant configurations - background\n const variantBgClasses = {\n default: 'bg-gray-100 dark:bg-gray-800',\n primary: 'bg-blue-50 dark:bg-blue-900/30',\n success: 'bg-green-50 dark:bg-green-900/30',\n warning: 'bg-yellow-50 dark:bg-yellow-900/30',\n danger: 'bg-red-50 dark:bg-red-900/30',\n };\n\n // Variant configurations - text\n const variantTextClasses = {\n default: 'text-gray-900 dark:text-gray-100',\n primary: 'text-blue-700 dark:text-blue-300',\n success: 'text-green-700 dark:text-green-300',\n warning: 'text-yellow-700 dark:text-yellow-300',\n danger: 'text-red-700 dark:text-red-300',\n };\n\n return (\n <View\n className={cn(\n 'rounded',\n variantBgClasses[variant],\n sizeClasses[size],\n className\n )}\n >\n <Text\n className={cn('font-mono font-medium', variantTextClasses[variant])}\n style={{ fontFamily: 'monospace' }}\n >\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TruncatedTextProps {\n /** Text content to truncate */\n children: string;\n /** Maximum length before truncation */\n maxLength?: number;\n /** Position of truncation */\n position?: 'end' | 'middle' | 'start';\n /** Custom ellipsis character */\n ellipsis?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TruncatedText Component\n *\n * Intelligently truncates text with ellipsis at various positions.\n * Useful for displaying long text like addresses, IDs, or descriptions.\n *\n * @example\n * ```tsx\n * <TruncatedText maxLength={50}>\n * This is a very long text that will be truncated...\n * </TruncatedText>\n * ```\n *\n * @example\n * ```tsx\n * <TruncatedText\n * maxLength={20}\n * position=\"middle\"\n * >\n * 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb\n * </TruncatedText>\n * ```\n */\nexport const TruncatedText: React.FC<TruncatedTextProps> = ({\n children,\n maxLength = 50,\n position = 'end',\n ellipsis = '...',\n className,\n}) => {\n const text = children || '';\n\n // No truncation needed\n if (text.length <= maxLength) {\n return <Text className={className}>{text}</Text>;\n }\n\n // Calculate truncated text based on position\n const getTruncatedText = (): string => {\n const ellipsisLength = ellipsis.length;\n const availableLength = maxLength - ellipsisLength;\n\n switch (position) {\n case 'start':\n return ellipsis + text.slice(text.length - availableLength);\n\n case 'middle': {\n const halfLength = Math.floor(availableLength / 2);\n const start = text.slice(0, halfLength);\n const end = text.slice(text.length - (availableLength - halfLength));\n return start + ellipsis + end;\n }\n\n case 'end':\n default:\n return text.slice(0, availableLength) + ellipsis;\n }\n };\n\n const truncatedText = getTruncatedText();\n\n return <Text className={cn(className)}>{truncatedText}</Text>;\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BadgeProps {\n /** Badge content */\n children?: React.ReactNode;\n /** Color variant */\n variant?:\n | 'default'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'purple';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Icon to display */\n icon?: React.ReactNode;\n /** Show dot indicator */\n dot?: boolean;\n /** Render as pill (rounded-full) */\n pill?: boolean;\n /** Render as outline style */\n outline?: boolean;\n /** Press handler */\n onPress?: () => void;\n /** Dismissible badge with close button */\n dismissible?: boolean;\n /** Dismiss handler */\n onDismiss?: () => void;\n /** Count to display */\n count?: number;\n /** Max count before showing \"+\" */\n maxCount?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Badge Component\n *\n * Small status or label component for displaying metadata, status, or categories.\n * Commonly used for tags, statuses, counts, and labels.\n *\n * @example\n * ```tsx\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"primary\" size=\"sm\">New</Badge>\n * <Badge variant=\"warning\" dot>Pending</Badge>\n * ```\n */\nexport const Badge: React.FC<BadgeProps> = ({\n children,\n variant = 'default',\n size = 'sm',\n icon,\n dot = false,\n pill = false,\n outline = false,\n onPress,\n dismissible = false,\n onDismiss,\n count,\n maxCount,\n className,\n}) => {\n // Color variant configurations for filled style\n const variantClasses = {\n default: 'bg-gray-100 dark:bg-gray-700',\n primary: 'bg-blue-100 dark:bg-blue-900/30',\n success: 'bg-green-100 dark:bg-green-900/30',\n warning: 'bg-yellow-100 dark:bg-yellow-900/30',\n danger: 'bg-red-100 dark:bg-red-900/30',\n info: 'bg-blue-100 dark:bg-blue-900/30',\n purple: 'bg-purple-100 dark:bg-purple-900/30',\n };\n\n const variantTextClasses = {\n default: 'text-gray-800 dark:text-gray-300',\n primary: 'text-blue-800 dark:text-blue-400',\n success: 'text-green-800 dark:text-green-400',\n warning: 'text-yellow-800 dark:text-yellow-400',\n danger: 'text-red-800 dark:text-red-400',\n info: 'text-blue-800 dark:text-blue-400',\n purple: 'text-purple-800 dark:text-purple-400',\n };\n\n // Color variant configurations for outline style\n const outlineClasses = {\n default: 'border border-gray-300 dark:border-gray-600',\n primary: 'border border-blue-600 dark:border-blue-400',\n success: 'border border-green-600 dark:border-green-400',\n warning: 'border border-yellow-600 dark:border-yellow-400',\n danger: 'border border-red-600 dark:border-red-400',\n info: 'border border-blue-600 dark:border-blue-400',\n purple: 'border border-purple-600 dark:border-purple-400',\n };\n\n const outlineTextClasses = {\n default: 'text-gray-700 dark:text-gray-300',\n primary: 'text-blue-600 dark:text-blue-400',\n success: 'text-green-600 dark:text-green-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n danger: 'text-red-600 dark:text-red-400',\n info: 'text-blue-600 dark:text-blue-400',\n purple: 'text-purple-600 dark:text-purple-400',\n };\n\n // Size configurations\n const sizeClasses = {\n sm: 'px-2 py-0.5',\n md: 'px-2.5 py-1',\n lg: 'px-3 py-1.5',\n };\n\n const textSizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n // Dot color configurations\n const dotColorClasses = {\n default: 'bg-gray-600 dark:bg-gray-400',\n primary: 'bg-blue-600 dark:bg-blue-400',\n success: 'bg-green-600 dark:bg-green-400',\n warning: 'bg-yellow-600 dark:bg-yellow-400',\n danger: 'bg-red-600 dark:bg-red-400',\n info: 'bg-blue-600 dark:bg-blue-400',\n purple: 'bg-purple-600 dark:bg-purple-400',\n };\n\n // Format count display\n const displayCount =\n count !== undefined\n ? maxCount !== undefined && count > maxCount\n ? `${maxCount}+`\n : count.toString()\n : null;\n\n const containerClasses = cn(\n 'flex flex-row items-center',\n outline ? outlineClasses[variant] : variantClasses[variant],\n sizeClasses[size],\n pill ? 'rounded-full' : 'rounded',\n className\n );\n\n const textClasses = cn(\n textSizeClasses[size],\n 'font-medium',\n outline ? outlineTextClasses[variant] : variantTextClasses[variant]\n );\n\n const content = (\n <>\n {dot && (\n <View\n className={cn(\n 'w-2 h-2 rounded-full mr-1.5',\n dotColorClasses[variant]\n )}\n />\n )}\n {icon && <View className='mr-1'>{icon}</View>}\n {children && <Text className={textClasses}>{children}</Text>}\n {displayCount && (\n <Text className={cn(textClasses, 'ml-1')}>{displayCount}</Text>\n )}\n {dismissible && onDismiss && (\n <Pressable\n onPress={onDismiss}\n className='ml-1 p-0.5'\n accessibilityRole='button'\n accessibilityLabel='Dismiss'\n >\n <Text className={textClasses}>×</Text>\n </Pressable>\n )}\n </>\n );\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n className={containerClasses}\n accessibilityRole='button'\n >\n {content}\n </Pressable>\n );\n }\n\n return <View className={containerClasses}>{content}</View>;\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Image, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AvatarProps {\n /** Image source URL */\n src?: string;\n /** Alt text for image */\n alt?: string;\n /** Fallback text (initials) to display when no image */\n fallback?: string;\n /** Name to generate initials from */\n name?: string;\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Show status indicator */\n status?: 'online' | 'offline' | 'away' | 'busy';\n /** Additional className */\n className?: string;\n /** Click handler */\n onPress?: () => void;\n}\n\n/**\n * Avatar Component\n *\n * Avatar component for displaying user images or initials.\n *\n * @example\n * ```tsx\n * // User image\n * <Avatar src=\"https://example.com/avatar.jpg\" alt=\"John Doe\" fallback=\"JD\" />\n *\n * // Generate initials from name\n * <Avatar name=\"John Doe\" />\n *\n * // With status indicator\n * <Avatar src=\"/avatar.jpg\" status=\"online\" />\n * ```\n */\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt = 'Avatar',\n fallback,\n name,\n size = 'md',\n status,\n className,\n onPress,\n}) => {\n const [imageError, setImageError] = useState(false);\n\n // Size configurations\n const sizeClasses = {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-16 h-16',\n };\n\n const textSizeClasses = {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg',\n };\n\n const statusSizeClasses = {\n xs: 'w-1.5 h-1.5',\n sm: 'w-2 h-2',\n md: 'w-2.5 h-2.5',\n lg: 'w-3 h-3',\n xl: 'w-4 h-4',\n };\n\n // Status indicator configurations\n const statusClasses = {\n online: 'bg-green-500',\n offline: 'bg-gray-400',\n away: 'bg-yellow-500',\n busy: 'bg-red-500',\n };\n\n // Generate initials from name\n const generateInitials = (name: string): string => {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) {\n return parts[0].charAt(0).toUpperCase();\n }\n return (\n parts[0].charAt(0).toUpperCase() +\n parts[parts.length - 1].charAt(0).toUpperCase()\n );\n };\n\n // Determine what to display\n const displayFallback = fallback || (name ? generateInitials(name) : '');\n const showImage = src && !imageError;\n\n const handleImageError = () => {\n setImageError(true);\n };\n\n const content = (\n <View className='relative'>\n <View\n className={cn(\n 'flex items-center justify-center overflow-hidden rounded-full',\n sizeClasses[size],\n !showImage && 'bg-gray-300 dark:bg-gray-600',\n className\n )}\n >\n {showImage ? (\n <Image\n source={{ uri: src }}\n className='w-full h-full'\n accessibilityLabel={alt}\n onError={handleImageError}\n />\n ) : (\n <Text\n className={cn(\n 'font-semibold text-gray-700 dark:text-gray-200',\n textSizeClasses[size]\n )}\n >\n {displayFallback}\n </Text>\n )}\n </View>\n {status && (\n <View\n className={cn(\n 'absolute bottom-0 right-0 rounded-full border-2 border-white dark:border-gray-800',\n statusClasses[status],\n statusSizeClasses[size]\n )}\n accessibilityLabel={status}\n />\n )}\n </View>\n );\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n accessibilityRole='button'\n accessibilityLabel={alt}\n >\n {content}\n </Pressable>\n );\n }\n\n return content;\n};\n\nexport interface AvatarGroupProps {\n /** Avatar components */\n children: React.ReactNode;\n /** Maximum number of avatars to show */\n max?: number;\n /** Size for all avatars */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Additional className */\n className?: string;\n}\n\n/**\n * AvatarGroup - Display multiple avatars in a stack\n */\nexport const AvatarGroup: React.FC<AvatarGroupProps> = ({\n children,\n max = 5,\n size = 'md',\n className,\n}) => {\n const childArray = React.Children.toArray(children);\n const excess = childArray.length - max;\n const visibleChildren = childArray.slice(0, max);\n\n // Overlap amounts based on size\n const overlapClasses = {\n xs: '-ml-2',\n sm: '-ml-2',\n md: '-ml-3',\n lg: '-ml-4',\n xl: '-ml-5',\n };\n\n return (\n <View className={cn('flex flex-row items-center', className)}>\n {visibleChildren.map((child, index) => (\n <View\n key={index}\n className={cn(index > 0 && overlapClasses[size])}\n style={{ zIndex: visibleChildren.length - index }}\n >\n {React.isValidElement(child)\n ? React.cloneElement(child as React.ReactElement<AvatarProps>, {\n size,\n })\n : child}\n </View>\n ))}\n {excess > 0 && (\n <View\n className={cn(\n overlapClasses[size],\n 'flex items-center justify-center rounded-full bg-gray-200 dark:bg-gray-600',\n {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-16 h-16',\n }[size]\n )}\n >\n <Text\n className={cn(\n 'font-medium text-gray-700 dark:text-gray-200',\n {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg',\n }[size]\n )}\n >\n +{excess}\n </Text>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { View, Animated, ViewProps, DimensionValue } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SkeletonProps extends ViewProps {\n /** Shape/type of skeleton */\n variant?: 'text' | 'circle' | 'rectangle' | 'avatar' | 'button';\n /** Width of the skeleton */\n width?: DimensionValue;\n /** Height of the skeleton */\n height?: DimensionValue;\n /** Number of skeleton elements to render */\n count?: number;\n /** Number of lines (for text variant) */\n lines?: number;\n /** Enable/disable animation */\n animate?: boolean;\n /** Gap between lines */\n gap?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Skeleton Component\n *\n * A loading placeholder component that displays a pulsing skeleton.\n *\n * @example\n * ```tsx\n * // Loading text\n * <Skeleton variant=\"text\" width={200} />\n * <Skeleton variant=\"text\" count={3} />\n *\n * // Loading avatar\n * <Skeleton variant=\"circle\" width={40} height={40} />\n *\n * // Loading button\n * <Skeleton variant=\"button\" width={120} />\n * ```\n */\nexport const Skeleton: React.FC<SkeletonProps> = ({\n variant = 'text',\n width,\n height,\n count,\n lines = 1,\n animate = true,\n gap = 'md',\n className,\n ...viewProps\n}) => {\n const animatedValue = useRef(new Animated.Value(0.3)).current;\n\n useEffect(() => {\n if (animate) {\n Animated.loop(\n Animated.sequence([\n Animated.timing(animatedValue, {\n toValue: 1,\n duration: 750,\n useNativeDriver: true,\n }),\n Animated.timing(animatedValue, {\n toValue: 0.3,\n duration: 750,\n useNativeDriver: true,\n }),\n ])\n ).start();\n }\n }, [animate, animatedValue]);\n\n // Variant-specific styles\n const variantClasses = {\n text: 'h-4 rounded',\n circle: 'rounded-full',\n rectangle: 'rounded-lg',\n avatar: 'w-10 h-10 rounded-full',\n button: 'h-10 rounded-lg',\n };\n\n // Gap between lines\n const gapClasses = {\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-3',\n };\n\n // Determine number of elements to render\n const elementCount = count ?? lines;\n\n // Single skeleton element\n const renderSkeleton = (key?: number) => {\n const style: Record<string, DimensionValue | undefined> = {};\n\n if (width !== undefined) {\n style.width = width;\n }\n\n if (height !== undefined) {\n style.height = height;\n }\n\n return (\n <Animated.View\n key={key}\n className={cn(\n 'bg-gray-200 dark:bg-gray-700',\n variantClasses[variant],\n className\n )}\n style={[style, animate ? { opacity: animatedValue } : undefined]}\n {...viewProps}\n />\n );\n };\n\n // Multiple skeletons\n if (elementCount > 1) {\n return (\n <View className={cn('flex flex-col', gapClasses[gap])}>\n {Array.from({ length: elementCount }).map((_, i) => renderSkeleton(i))}\n </View>\n );\n }\n\n return renderSkeleton();\n};\n\n/**\n * SkeletonText - Pre-configured text skeleton\n */\nexport const SkeletonText: React.FC<\n Omit<SkeletonProps, 'variant'> & { lines?: number }\n> = ({ lines = 3, ...props }) => (\n <Skeleton variant='text' lines={lines} {...props} />\n);\n\n/**\n * SkeletonAvatar - Pre-configured avatar skeleton\n */\nexport const SkeletonAvatar: React.FC<\n Omit<SkeletonProps, 'variant'>\n> = props => <Skeleton variant='avatar' {...props} />;\n\n/**\n * SkeletonButton - Pre-configured button skeleton\n */\nexport const SkeletonButton: React.FC<\n Omit<SkeletonProps, 'variant'>\n> = props => <Skeleton variant='button' width={100} {...props} />;\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ListProps {\n /** List items */\n children: React.ReactNode;\n /** List type */\n type?: 'unordered' | 'ordered';\n /** Spacing between items */\n spacing?: 'none' | 'sm' | 'md' | 'lg';\n /** Marker/bullet style */\n marker?: 'disc' | 'circle' | 'square' | 'decimal' | 'alpha' | 'none';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\nexport interface ListItemProps {\n /** List item content */\n children: React.ReactNode;\n /** Item index (for ordered lists) */\n index?: number;\n /** Marker type (inherited from List) */\n marker?: 'disc' | 'circle' | 'square' | 'decimal' | 'alpha' | 'none';\n /** List type (inherited from List) */\n listType?: 'unordered' | 'ordered';\n /** Size (inherited from List) */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n// Context for passing list props to items\nconst ListContext = React.createContext<{\n type: 'unordered' | 'ordered';\n marker: 'disc' | 'circle' | 'square' | 'decimal' | 'alpha' | 'none';\n size: 'sm' | 'md' | 'lg';\n}>({\n type: 'unordered',\n marker: 'disc',\n size: 'md',\n});\n\n/**\n * List Component\n *\n * List component with consistent styling and spacing options.\n * Supports both ordered and unordered lists with various marker styles.\n *\n * @example\n * ```tsx\n * <List>\n * <ListItem>First item</ListItem>\n * <ListItem>Second item</ListItem>\n * <ListItem>Third item</ListItem>\n * </List>\n * ```\n *\n * @example\n * ```tsx\n * <List type=\"ordered\" marker=\"decimal\" spacing=\"md\">\n * <ListItem>Step one</ListItem>\n * <ListItem>Step two</ListItem>\n * </List>\n * ```\n */\nexport const List: React.FC<ListProps> = ({\n children,\n type = 'unordered',\n spacing = 'sm',\n marker,\n size = 'md',\n className,\n}) => {\n // Default marker based on type\n const defaultMarker = type === 'ordered' ? 'decimal' : 'disc';\n const actualMarker = marker || defaultMarker;\n\n // Spacing configurations\n const spacingClasses = {\n none: 'gap-0',\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-4',\n };\n\n // Clone children with index for ordered lists\n const childrenWithIndex = React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child as React.ReactElement<ListItemProps>, {\n index: index + 1,\n });\n }\n return child;\n });\n\n return (\n <ListContext.Provider value={{ type, marker: actualMarker, size }}>\n <View\n className={cn('ml-4', spacingClasses[spacing], className)}\n accessibilityRole='list'\n >\n {childrenWithIndex}\n </View>\n </ListContext.Provider>\n );\n};\n\n/**\n * ListItem Component\n *\n * Individual list item to be used within List component.\n */\nexport const ListItem: React.FC<ListItemProps> = ({\n children,\n index = 1,\n className,\n}) => {\n const { type, marker, size } = React.useContext(ListContext);\n\n // Size configurations\n const sizeClasses = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n };\n\n // Get marker symbol\n const getMarker = (): string => {\n if (marker === 'none') return '';\n\n if (type === 'ordered') {\n switch (marker) {\n case 'decimal':\n return `${index}.`;\n case 'alpha':\n return `${String.fromCharCode(96 + index)}.`;\n default:\n return `${index}.`;\n }\n } else {\n switch (marker) {\n case 'disc':\n return '•';\n case 'circle':\n return '○';\n case 'square':\n return '▪';\n default:\n return '•';\n }\n }\n };\n\n const markerSymbol = getMarker();\n\n return (\n <View className={cn('flex flex-row', className)}>\n {markerSymbol !== '' && (\n <Text\n className={cn(\n 'mr-2 text-gray-600 dark:text-gray-400',\n sizeClasses[size],\n type === 'ordered' ? 'w-6' : 'w-3'\n )}\n >\n {markerSymbol}\n </Text>\n )}\n <Text\n className={cn(\n 'flex-1 text-gray-900 dark:text-gray-100 leading-relaxed',\n sizeClasses[size]\n )}\n >\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface IconTextProps {\n /** Icon element to display */\n icon: React.ReactNode;\n /** Text content */\n children: React.ReactNode;\n /** Icon position */\n iconPosition?: 'left' | 'right' | 'top';\n /** Gap between icon and text */\n gap?: 'xs' | 'sm' | 'md' | 'lg';\n /** Text alignment (for top icon position) */\n align?: 'left' | 'center' | 'right';\n /** Color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'muted';\n /** Additional className for the container */\n className?: string;\n /** Additional className for the text */\n textClassName?: string;\n}\n\n/**\n * IconText Component\n *\n * Displays an icon alongside text content with flexible positioning and styling.\n * Commonly used for buttons, labels, list items, and feature highlights.\n *\n * @example\n * ```tsx\n * <IconText icon={<CheckIcon />}>\n * Feature enabled\n * </IconText>\n * ```\n *\n * @example\n * ```tsx\n * <IconText\n * icon={<StarIcon />}\n * iconPosition=\"top\"\n * align=\"center\"\n * variant=\"primary\"\n * >\n * Premium Feature\n * </IconText>\n * ```\n */\nexport const IconText: React.FC<IconTextProps> = ({\n icon,\n children,\n iconPosition = 'left',\n gap = 'md',\n align = 'left',\n variant = 'default',\n className,\n textClassName,\n}) => {\n // Gap configurations\n const gapClasses = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n };\n\n // Alignment classes (for top icon position)\n const alignClasses = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n };\n\n // Text alignment classes\n const textAlignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n\n // Color variant configurations\n const variantClasses = {\n default: 'text-gray-700 dark:text-gray-300',\n primary: 'text-blue-600 dark:text-blue-400',\n success: 'text-green-600 dark:text-green-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n danger: 'text-red-600 dark:text-red-400',\n muted: 'text-gray-500 dark:text-gray-400',\n };\n\n // Layout based on icon position\n const layoutClasses = {\n left: 'flex-row items-center',\n right: 'flex-row-reverse items-center',\n top: 'flex-col',\n };\n\n return (\n <View\n className={cn(\n 'flex',\n layoutClasses[iconPosition],\n gapClasses[gap],\n iconPosition === 'top' && alignClasses[align],\n className\n )}\n >\n {icon}\n <Text\n className={cn(\n variantClasses[variant],\n iconPosition === 'top' && textAlignClasses[align],\n textClassName\n )}\n >\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface FormattedNumberProps {\n /** Number value to format */\n value: number;\n /** Number style */\n style?: 'decimal' | 'currency' | 'percent';\n /** Currency code (for currency style) */\n currency?: string;\n /** Minimum fraction digits */\n minimumFractionDigits?: number;\n /** Maximum fraction digits */\n maximumFractionDigits?: number;\n /** Locale */\n locale?: string;\n /** Notation (compact for abbreviations like 1.2K) */\n notation?: 'standard' | 'compact';\n /** Additional className */\n className?: string;\n}\n\n/**\n * FormattedNumber Component\n *\n * Formats numbers using Intl.NumberFormat with various styles and locales.\n * Supports currencies, percentages, and compact notation.\n *\n * @example\n * ```tsx\n * <FormattedNumber value={1234.56} />\n * <FormattedNumber value={1234.56} notation=\"compact\" />\n * <FormattedNumber\n * value={1234.56}\n * style=\"currency\"\n * currency=\"USD\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * <FormattedNumber\n * value={0.1234}\n * style=\"percent\"\n * minimumFractionDigits={2}\n * />\n * ```\n */\nexport const FormattedNumber: React.FC<FormattedNumberProps> = ({\n value,\n style = 'decimal',\n currency = 'USD',\n minimumFractionDigits,\n maximumFractionDigits,\n locale = 'en-US',\n notation = 'standard',\n className,\n}) => {\n const formatNumber = (): string => {\n try {\n const options: Intl.NumberFormatOptions = {\n style,\n notation,\n minimumFractionDigits,\n maximumFractionDigits,\n };\n\n if (style === 'currency') {\n options.currency = currency;\n }\n\n return new Intl.NumberFormat(locale, options).format(value);\n } catch (error) {\n // Fallback to basic formatting if Intl fails\n console.error('Number formatting error:', error);\n return value.toLocaleString(locale);\n }\n };\n\n return <Text className={cn(className)}>{formatNumber()}</Text>;\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface InfoBoxProps {\n /** Content to display in the info box */\n children: React.ReactNode;\n /** Title/heading for the info box */\n title?: string;\n /** Color variant */\n variant?: 'info' | 'success' | 'warning' | 'danger' | 'neutral';\n /** Size/padding variant */\n size?: 'sm' | 'md' | 'lg';\n /** Icon element to display */\n icon?: React.ReactNode;\n /** Show border */\n bordered?: boolean;\n /** Additional className for the container */\n className?: string;\n}\n\n/**\n * InfoBox Component\n *\n * A versatile callout/info box component for highlighting important information,\n * tips, warnings, or notes. Commonly used in documentation, settings pages,\n * and forms.\n *\n * @example\n * ```tsx\n * <InfoBox variant=\"info\" title=\"Quick Start\">\n * <Text>Connect your wallet to get started</Text>\n * </InfoBox>\n * ```\n *\n * @example\n * ```tsx\n * <InfoBox variant=\"warning\" icon={<WarningIcon />}>\n * <Text>Each wallet creates a unique email address.</Text>\n * </InfoBox>\n * ```\n */\nexport const InfoBox: React.FC<InfoBoxProps> = ({\n children,\n title,\n variant = 'info',\n size = 'md',\n icon,\n bordered = true,\n className,\n}) => {\n // Color variant configurations\n const variantClasses = {\n info: {\n bg: 'bg-blue-50 dark:bg-blue-900/20',\n border: 'border-blue-200 dark:border-blue-800',\n title: 'text-blue-900 dark:text-blue-300',\n text: 'text-blue-800 dark:text-blue-400',\n },\n success: {\n bg: 'bg-green-50 dark:bg-green-900/20',\n border: 'border-green-200 dark:border-green-800',\n title: 'text-green-900 dark:text-green-300',\n text: 'text-green-800 dark:text-green-400',\n },\n warning: {\n bg: 'bg-yellow-50 dark:bg-yellow-900/20',\n border: 'border-yellow-200 dark:border-yellow-800',\n title: 'text-yellow-900 dark:text-yellow-300',\n text: 'text-yellow-800 dark:text-yellow-400',\n },\n danger: {\n bg: 'bg-red-50 dark:bg-red-900/20',\n border: 'border-red-200 dark:border-red-800',\n title: 'text-red-900 dark:text-red-300',\n text: 'text-red-800 dark:text-red-400',\n },\n neutral: {\n bg: 'bg-gray-50 dark:bg-gray-800',\n border: 'border-gray-200 dark:border-gray-700',\n title: 'text-gray-900 dark:text-gray-100',\n text: 'text-gray-700 dark:text-gray-300',\n },\n };\n\n // Size/padding configurations\n const sizeClasses = {\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n };\n\n const variantConfig = variantClasses[variant];\n\n return (\n <View\n className={cn(\n 'rounded-lg',\n variantConfig.bg,\n bordered && `border ${variantConfig.border}`,\n sizeClasses[size],\n className\n )}\n >\n {(title || icon) && (\n <View className='flex flex-row items-start gap-3 mb-2'>\n {icon}\n {title && (\n <Text className={cn('font-semibold', variantConfig.title)}>\n {title}\n </Text>\n )}\n </View>\n )}\n <View className={cn(!title && !icon && variantConfig.text)}>\n {children}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ProgressProps {\n /** Progress value (0-100) */\n value?: number;\n /** Maximum value */\n max?: number;\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Show label */\n showLabel?: boolean;\n /** Custom label */\n label?: string;\n /** Indeterminate state (loading) */\n indeterminate?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Progress Component\n *\n * Linear progress indicator with support for determinate and indeterminate states.\n *\n * @example\n * ```tsx\n * <Progress value={75} showLabel />\n * ```\n *\n * @example\n * ```tsx\n * <Progress indeterminate />\n * ```\n */\nexport const Progress: React.FC<ProgressProps> = ({\n value = 0,\n max = 100,\n variant = 'default',\n size = 'md',\n showLabel = false,\n label,\n indeterminate = false,\n className,\n}) => {\n // Animation for indeterminate state\n const animatedValue = React.useRef(new Animated.Value(0)).current;\n\n React.useEffect(() => {\n if (indeterminate) {\n Animated.loop(\n Animated.sequence([\n Animated.timing(animatedValue, {\n toValue: 1,\n duration: 1000,\n useNativeDriver: false,\n }),\n Animated.timing(animatedValue, {\n toValue: 0,\n duration: 1000,\n useNativeDriver: false,\n }),\n ])\n ).start();\n }\n }, [indeterminate, animatedValue]);\n\n // Clamp value between 0 and 100\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n // Color configurations\n const colorClasses = {\n default: 'bg-blue-600 dark:bg-blue-500',\n success: 'bg-green-600 dark:bg-green-500',\n warning: 'bg-yellow-600 dark:bg-yellow-500',\n danger: 'bg-red-600 dark:bg-red-500',\n };\n\n // Size configurations\n const sizeClasses = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-4',\n };\n\n const interpolatedWidth = animatedValue.interpolate({\n inputRange: [0, 1],\n outputRange: ['0%', '100%'],\n });\n\n return (\n <View className={cn('w-full', className)}>\n <View\n className={cn(\n 'w-full bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden',\n sizeClasses[size]\n )}\n accessibilityRole='progressbar'\n accessibilityValue={{\n now: indeterminate ? undefined : percentage,\n min: 0,\n max: 100,\n }}\n >\n {indeterminate ? (\n <Animated.View\n className={cn('h-full rounded-full', colorClasses[variant])}\n style={{ width: interpolatedWidth, opacity: 0.7 }}\n />\n ) : (\n <View\n className={cn('h-full rounded-full', colorClasses[variant])}\n style={{ width: `${percentage}%` }}\n />\n )}\n </View>\n {(showLabel || label) && (\n <View className='mt-1'>\n <Text className='text-xs text-gray-600 dark:text-gray-400 text-right'>\n {label || `${Math.round(percentage)}%`}\n </Text>\n </View>\n )}\n </View>\n );\n};\n\nexport interface ProgressBarProps {\n /** Progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'danger' | 'purple' | 'gray';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Show percentage label */\n showLabel?: boolean;\n /** Label position */\n labelPosition?: 'inside' | 'outside' | 'none';\n /** Custom label text */\n label?: string;\n /** Additional className */\n className?: string;\n /** Animated transition */\n animated?: boolean;\n}\n\n/**\n * ProgressBar Component\n *\n * A visual progress indicator showing completion percentage.\n *\n * @example\n * ```tsx\n * <ProgressBar value={65} variant=\"primary\" showLabel />\n * ```\n */\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n value,\n max = 100,\n variant = 'primary',\n size = 'md',\n showLabel = false,\n labelPosition = 'outside',\n label,\n className,\n animated: _animated = true,\n}) => {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n const displayLabel = label || `${Math.round(percentage)}%`;\n\n // Color variant configurations\n const variantClasses = {\n primary: 'bg-blue-600 dark:bg-blue-500',\n success: 'bg-green-600 dark:bg-green-500',\n warning: 'bg-yellow-600 dark:bg-yellow-500',\n danger: 'bg-red-600 dark:bg-red-500',\n purple: 'bg-purple-600 dark:bg-purple-500',\n gray: 'bg-gray-600 dark:bg-gray-500',\n };\n\n // Size configurations\n const sizeClasses = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n };\n\n return (\n <View className={cn('w-full', className)}>\n <View className='flex flex-row items-center gap-3'>\n <View\n className={cn(\n 'flex-1 bg-gray-200 dark:bg-gray-600 rounded-full overflow-hidden',\n sizeClasses[size]\n )}\n >\n <View\n className={cn(\n 'rounded-full',\n sizeClasses[size],\n variantClasses[variant]\n )}\n style={{ width: `${percentage}%` }}\n accessibilityRole='progressbar'\n accessibilityValue={{ now: value, min: 0, max }}\n />\n </View>\n {showLabel && labelPosition === 'outside' && (\n <Text className='text-sm font-medium text-gray-600 dark:text-gray-400'>\n {displayLabel}\n </Text>\n )}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n Text,\n Modal as RNModal,\n Pressable,\n ScrollView,\n KeyboardAvoidingView,\n Platform,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ModalProps {\n /** Whether the modal is visible */\n isOpen: boolean;\n /** Callback when modal should close */\n onClose: () => void;\n /** Modal title */\n title?: string;\n /** Size variant */\n size?: 'small' | 'medium' | 'large' | 'fullWidth';\n /** Show close button */\n showCloseButton?: boolean;\n /** Close when pressing backdrop */\n closeOnOverlayClick?: boolean;\n /** Modal content */\n children: React.ReactNode;\n /** Additional className for the content */\n className?: string;\n}\n\n/**\n * Modal Component\n *\n * Modal dialog for displaying content in an overlay.\n *\n * @example\n * ```tsx\n * <Modal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Confirm Action\"\n * >\n * <ModalContent>\n * <Text>Are you sure you want to proceed?</Text>\n * </ModalContent>\n * <ModalFooter>\n * <Button onPress={() => setIsOpen(false)}>Cancel</Button>\n * <Button variant=\"primary\" onPress={handleConfirm}>Confirm</Button>\n * </ModalFooter>\n * </Modal>\n * ```\n */\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n size = 'medium',\n showCloseButton = true,\n closeOnOverlayClick = true,\n children,\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n small: 'w-72',\n medium: 'w-80',\n large: 'w-96',\n fullWidth: 'w-full mx-4',\n };\n\n const handleOverlayPress = () => {\n if (closeOnOverlayClick) {\n onClose();\n }\n };\n\n return (\n <RNModal\n visible={isOpen}\n animationType='fade'\n transparent\n onRequestClose={onClose}\n statusBarTranslucent\n >\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n className='flex-1'\n >\n <Pressable\n onPress={handleOverlayPress}\n className='flex-1 justify-center items-center bg-black/50'\n >\n <Pressable\n onPress={e => e.stopPropagation()}\n className={cn(\n 'bg-white dark:bg-gray-800 rounded-xl shadow-xl max-h-[80%]',\n sizeClasses[size],\n className\n )}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <View className='flex flex-row items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700'>\n {title && (\n <Text className='text-lg font-semibold text-gray-900 dark:text-white flex-1'>\n {title}\n </Text>\n )}\n {showCloseButton && (\n <Pressable\n onPress={onClose}\n className='p-1 -mr-1 rounded-full'\n accessibilityRole='button'\n accessibilityLabel='Close modal'\n >\n <Text className='text-xl text-gray-500 dark:text-gray-400'>\n ✕\n </Text>\n </Pressable>\n )}\n </View>\n )}\n\n {/* Content */}\n <ScrollView bounces={false}>{children}</ScrollView>\n </Pressable>\n </Pressable>\n </KeyboardAvoidingView>\n </RNModal>\n );\n};\n\nexport interface ModalHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * ModalHeader - Header section of the modal\n */\nexport const ModalHeader: React.FC<ModalHeaderProps> = ({\n children,\n className,\n}) => (\n <View\n className={cn(\n 'px-4 py-3 border-b border-gray-200 dark:border-gray-700',\n className\n )}\n >\n {children}\n </View>\n);\n\nexport interface ModalContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * ModalContent - Body section of the modal\n */\nexport const ModalContent: React.FC<ModalContentProps> = ({\n children,\n className,\n}) => <View className={cn('px-4 py-4', className)}>{children}</View>;\n\nexport interface ModalFooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * ModalFooter - Footer section of the modal\n */\nexport const ModalFooter: React.FC<ModalFooterProps> = ({\n children,\n className,\n}) => (\n <View\n className={cn(\n 'flex flex-row items-center justify-end gap-2 px-4 py-3 border-t border-gray-200 dark:border-gray-700',\n className\n )}\n >\n {children}\n </View>\n);\n","import React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport { View, Text, Pressable, Animated, SafeAreaView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ToastMessage {\n id: string;\n title?: string;\n description?: string;\n variant?: 'default' | 'success' | 'error' | 'warning' | 'info';\n duration?: number;\n action?: {\n label: string;\n onPress: () => void;\n };\n}\n\nexport interface ToastProps {\n /** Toast message */\n toast: ToastMessage;\n /** Remove toast handler */\n onRemove: (id: string) => void;\n}\n\nexport interface ToastContextValue {\n toasts: ToastMessage[];\n addToast: (toast: Omit<ToastMessage, 'id'>) => void;\n removeToast: (id: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | undefined>(undefined);\n\nexport const useToast = () => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within ToastProvider');\n }\n return context;\n};\n\n/**\n * Toast Component\n *\n * Individual toast notification with variants and actions.\n */\nexport const Toast: React.FC<ToastProps> = ({ toast, onRemove }) => {\n const { id, title, description, variant = 'default', action } = toast;\n const slideAnim = useRef(new Animated.Value(-100)).current;\n\n useEffect(() => {\n Animated.spring(slideAnim, {\n toValue: 0,\n useNativeDriver: true,\n friction: 8,\n }).start();\n }, [slideAnim]);\n\n // Variant styles - background\n const variantBgClasses = {\n default: 'bg-white dark:bg-gray-800 border-gray-200 dark:border-gray-700',\n success:\n 'bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800',\n error: 'bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800',\n warning:\n 'bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800',\n info: 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800',\n };\n\n // Variant styles - icon color\n const iconColorClasses = {\n default: 'text-gray-600 dark:text-gray-400',\n success: 'text-green-600 dark:text-green-400',\n error: 'text-red-600 dark:text-red-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n info: 'text-blue-600 dark:text-blue-400',\n };\n\n // Icon symbols\n const icons = {\n default: 'ℹ',\n success: '✓',\n error: '✕',\n warning: '⚠',\n info: 'ℹ',\n };\n\n return (\n <Animated.View\n style={{ transform: [{ translateY: slideAnim }] }}\n className={cn(\n 'flex flex-row items-start gap-3 p-4 rounded-lg border shadow-lg',\n 'w-full max-w-md',\n variantBgClasses[variant]\n )}\n >\n <View className={cn('flex-shrink-0', iconColorClasses[variant])}>\n <Text className='text-lg'>{icons[variant]}</Text>\n </View>\n\n <View className='flex-1 min-w-0'>\n {title && (\n <Text className='font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n )}\n {description && (\n <Text className='text-sm text-gray-600 dark:text-gray-300 mt-1'>\n {description}\n </Text>\n )}\n {action && (\n <Pressable onPress={action.onPress} className='mt-2'>\n <Text className='text-sm font-medium text-blue-600 dark:text-blue-400'>\n {action.label}\n </Text>\n </Pressable>\n )}\n </View>\n\n <Pressable\n onPress={() => onRemove(id)}\n className='flex-shrink-0 p-1'\n accessibilityRole='button'\n accessibilityLabel='Close notification'\n >\n <Text className='text-gray-400 text-lg'>✕</Text>\n </Pressable>\n </Animated.View>\n );\n};\n\n/**\n * Individual toast wrapper with auto-remove timer\n */\nconst ToastItem: React.FC<{\n toast: ToastMessage;\n onRemove: (id: string) => void;\n}> = ({ toast, onRemove }) => {\n useEffect(() => {\n const duration = toast.duration ?? 5000;\n\n if (duration > 0) {\n const timer = setTimeout(() => {\n onRemove(toast.id);\n }, duration);\n\n return () => clearTimeout(timer);\n }\n }, [toast.id, toast.duration, onRemove]);\n\n return <Toast toast={toast} onRemove={onRemove} />;\n};\n\n/**\n * ToastProvider Component\n *\n * Provider for toast notifications system.\n * Wrap your app with this provider to enable toasts.\n *\n * @example\n * ```tsx\n * <ToastProvider>\n * <App />\n * </ToastProvider>\n * ```\n *\n * @example\n * ```tsx\n * // Using the toast hook\n * const { addToast } = useToast();\n *\n * const showSuccess = () => {\n * addToast({\n * title: 'Success!',\n * description: 'Your action was completed.',\n * variant: 'success',\n * });\n * };\n * ```\n */\nexport const ToastProvider: React.FC<{ children: React.ReactNode }> = ({\n children,\n}) => {\n const [toasts, setToasts] = useState<ToastMessage[]>([]);\n\n const removeToast = useCallback((id: string) => {\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n const addToast = useCallback((toast: Omit<ToastMessage, 'id'>) => {\n const id = Math.random().toString(36).substr(2, 9);\n setToasts(prev => [...prev, { ...toast, id }]);\n }, []);\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast }}>\n {children}\n {toasts.length > 0 && (\n <SafeAreaView\n className='absolute top-0 left-0 right-0 z-50 px-4 pt-4'\n pointerEvents='box-none'\n >\n <View className='items-center gap-2'>\n {toasts.map(toast => (\n <ToastItem key={toast.id} toast={toast} onRemove={removeToast} />\n ))}\n </View>\n </SafeAreaView>\n )}\n </ToastContext.Provider>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Modal } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { Spinner } from '../Spinner';\n\nexport interface LoadingOverlayProps {\n /** Whether the overlay is visible */\n isLoading: boolean;\n /** Loading message */\n message?: string;\n /** Overlay mode */\n mode?: 'fullscreen' | 'container';\n /** Spinner size */\n spinnerSize?: 'small' | 'default' | 'large' | 'extraLarge';\n /** Additional className */\n className?: string;\n}\n\n/**\n * LoadingOverlay Component\n *\n * Full-screen or container loading overlay with spinner and optional message.\n * Useful for async operations, page loads, and data fetching.\n *\n * @example\n * ```tsx\n * <LoadingOverlay\n * isLoading={isSubmitting}\n * message=\"Saving changes...\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * <View className=\"relative flex-1\">\n * <LoadingOverlay\n * isLoading={isLoading}\n * mode=\"container\"\n * />\n * <YourContent />\n * </View>\n * ```\n */\nexport const LoadingOverlay: React.FC<LoadingOverlayProps> = ({\n isLoading,\n message,\n mode = 'fullscreen',\n spinnerSize = 'large',\n className,\n}) => {\n if (!isLoading) return null;\n\n const content = (\n <View\n className={cn(\n mode === 'fullscreen' ? 'flex-1' : 'absolute inset-0',\n 'items-center justify-center',\n 'bg-white/80 dark:bg-gray-900/80',\n className\n )}\n accessibilityRole='alert'\n accessibilityLabel={message || 'Loading'}\n >\n <Spinner size={spinnerSize} />\n {message && (\n <Text className='text-base text-gray-700 dark:text-gray-300 mt-4'>\n {message}\n </Text>\n )}\n </View>\n );\n\n // Fullscreen mode uses Modal\n if (mode === 'fullscreen') {\n return (\n <Modal\n visible={isLoading}\n transparent\n animationType='fade'\n statusBarTranslucent\n >\n {content}\n </Modal>\n );\n }\n\n // Container mode renders inline\n return content;\n};\n","import * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport { View, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface LoadingDotsProps {\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'primary' | 'secondary' | 'white';\n /** Additional className */\n className?: string;\n}\n\n/**\n * LoadingDots Component\n *\n * Animated loading indicator with bouncing dots.\n * Simple and lightweight alternative to spinners.\n *\n * @example\n * ```tsx\n * <LoadingDots size=\"md\" variant=\"primary\" />\n * ```\n */\nexport const LoadingDots: React.FC<LoadingDotsProps> = ({\n size = 'md',\n variant = 'primary',\n className,\n}) => {\n const dot1Anim = useRef(new Animated.Value(0)).current;\n const dot2Anim = useRef(new Animated.Value(0)).current;\n const dot3Anim = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n const createAnimation = (animValue: Animated.Value, delay: number) => {\n return Animated.loop(\n Animated.sequence([\n Animated.delay(delay),\n Animated.timing(animValue, {\n toValue: 1,\n duration: 300,\n useNativeDriver: true,\n }),\n Animated.timing(animValue, {\n toValue: 0,\n duration: 300,\n useNativeDriver: true,\n }),\n Animated.delay(600 - delay),\n ])\n );\n };\n\n const anim1 = createAnimation(dot1Anim, 0);\n const anim2 = createAnimation(dot2Anim, 150);\n const anim3 = createAnimation(dot3Anim, 300);\n\n anim1.start();\n anim2.start();\n anim3.start();\n\n return () => {\n anim1.stop();\n anim2.stop();\n anim3.stop();\n };\n }, [dot1Anim, dot2Anim, dot3Anim]);\n\n const sizeClasses = {\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-3 h-3',\n };\n\n const variantClasses = {\n primary: 'bg-blue-600 dark:bg-blue-500',\n secondary: 'bg-gray-600 dark:bg-gray-400',\n white: 'bg-white',\n };\n\n const gapClasses = {\n sm: 'gap-1',\n md: 'gap-1.5',\n lg: 'gap-2',\n };\n\n const dotClass = cn(\n 'rounded-full',\n sizeClasses[size],\n variantClasses[variant]\n );\n\n const getAnimatedStyle = (animValue: Animated.Value) => ({\n opacity: animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0.3, 1],\n }),\n transform: [\n {\n scale: animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0.8, 1.2],\n }),\n },\n ],\n });\n\n return (\n <View\n className={cn('flex flex-row items-center', gapClasses[size], className)}\n >\n <Animated.View className={dotClass} style={getAnimatedStyle(dot1Anim)} />\n <Animated.View className={dotClass} style={getAnimatedStyle(dot2Anim)} />\n <Animated.View className={dotClass} style={getAnimatedStyle(dot3Anim)} />\n </View>\n );\n};\n","import * as React from 'react';\nimport { Pressable, View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BackdropProps {\n /** Whether the backdrop is visible */\n isOpen: boolean;\n /** Press handler for backdrop */\n onPress?: () => void;\n /** Backdrop opacity variant */\n opacity?: 'light' | 'medium' | 'dark';\n /** Children to render on top of backdrop */\n children?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Backdrop Component\n *\n * Reusable backdrop/overlay for modals, drawers, and dialogs.\n * Provides consistent darkening effect.\n *\n * @example\n * ```tsx\n * <Backdrop isOpen={isModalOpen} onPress={closeModal}>\n * <View onStartShouldSetResponder={() => true}>\n * <ModalContent />\n * </View>\n * </Backdrop>\n * ```\n *\n * @example\n * ```tsx\n * <Backdrop\n * isOpen={isDrawerOpen}\n * onPress={closeDrawer}\n * opacity=\"medium\"\n * >\n * <Drawer />\n * </Backdrop>\n * ```\n */\nexport const Backdrop: React.FC<BackdropProps> = ({\n isOpen,\n onPress,\n opacity = 'medium',\n children,\n className,\n}) => {\n if (!isOpen) return null;\n\n // Opacity configurations\n const opacityClasses = {\n light: 'bg-black/20',\n medium: 'bg-black/50',\n dark: 'bg-black/75',\n };\n\n if (children) {\n return (\n <Pressable\n onPress={onPress}\n className={cn('absolute inset-0', opacityClasses[opacity], className)}\n accessibilityRole='none'\n >\n <View\n className='flex-1'\n onStartShouldSetResponder={() => true}\n onResponderRelease={e => e.stopPropagation()}\n >\n {children}\n </View>\n </Pressable>\n );\n }\n\n return (\n <Pressable\n onPress={onPress}\n className={cn('absolute inset-0', opacityClasses[opacity], className)}\n accessibilityRole='none'\n />\n );\n};\n","import * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport {\n View,\n Text,\n Modal,\n Pressable,\n ScrollView,\n Animated,\n Dimensions,\n PanResponder,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nconst { height: SCREEN_HEIGHT, width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface SheetProps {\n /** Whether sheet is open */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Sheet content */\n children: React.ReactNode;\n /** Sheet title */\n title?: string;\n /** Sheet description */\n description?: string;\n /** Sheet footer */\n footer?: React.ReactNode;\n /** Sheet side */\n side?: 'bottom' | 'top' | 'left' | 'right';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'full';\n /** Show drag handle */\n showHandle?: boolean;\n /** Show close button */\n showCloseButton?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Sheet Component\n *\n * Mobile-first bottom sheet that slides up from screen edge.\n * Also supports top, left, and right positions.\n * Includes gesture support for drag to dismiss (bottom sheets).\n *\n * @example\n * ```tsx\n * <Sheet\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Filter Options\"\n * showHandle\n * >\n * <View>Filter content...</View>\n * </Sheet>\n * ```\n */\nexport const Sheet: React.FC<SheetProps> = ({\n isOpen,\n onClose,\n children,\n title,\n description,\n footer,\n side = 'bottom',\n size = 'md',\n showHandle = true,\n showCloseButton = true,\n className,\n}) => {\n const slideAnim = useRef(new Animated.Value(0)).current;\n const panY = useRef(new Animated.Value(0)).current;\n\n // Size configurations (percentage of screen)\n const sizeValues = {\n bottom: {\n sm: SCREEN_HEIGHT * 0.33,\n md: SCREEN_HEIGHT * 0.5,\n lg: SCREEN_HEIGHT * 0.66,\n full: SCREEN_HEIGHT,\n },\n top: {\n sm: SCREEN_HEIGHT * 0.33,\n md: SCREEN_HEIGHT * 0.5,\n lg: SCREEN_HEIGHT * 0.66,\n full: SCREEN_HEIGHT,\n },\n left: {\n sm: SCREEN_WIDTH * 0.6,\n md: SCREEN_WIDTH * 0.75,\n lg: SCREEN_WIDTH * 0.9,\n full: SCREEN_WIDTH,\n },\n right: {\n sm: SCREEN_WIDTH * 0.6,\n md: SCREEN_WIDTH * 0.75,\n lg: SCREEN_WIDTH * 0.9,\n full: SCREEN_WIDTH,\n },\n };\n\n const sheetSize = sizeValues[side][size];\n const isVertical = side === 'bottom' || side === 'top';\n\n useEffect(() => {\n if (isOpen) {\n panY.setValue(0);\n Animated.spring(slideAnim, {\n toValue: 1,\n useNativeDriver: true,\n friction: 8,\n }).start();\n } else {\n Animated.timing(slideAnim, {\n toValue: 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }\n }, [isOpen, slideAnim, panY]);\n\n // Pan responder for drag-to-dismiss (bottom sheets)\n const panResponder = useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => side === 'bottom',\n onMoveShouldSetPanResponder: (_, gestureState) =>\n side === 'bottom' && gestureState.dy > 10,\n onPanResponderMove: (_, gestureState) => {\n if (gestureState.dy > 0) {\n panY.setValue(gestureState.dy);\n }\n },\n onPanResponderRelease: (_, gestureState) => {\n if (gestureState.dy > 100 || gestureState.vy > 0.5) {\n onClose();\n } else {\n Animated.spring(panY, {\n toValue: 0,\n useNativeDriver: true,\n }).start();\n }\n },\n })\n ).current;\n\n // Calculate transform based on side\n const getTransform = () => {\n const baseTransform = slideAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [sheetSize, 0],\n });\n\n switch (side) {\n case 'bottom':\n return {\n transform: [\n {\n translateY: Animated.add(\n slideAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [sheetSize, 0],\n }),\n panY\n ),\n },\n ],\n };\n case 'top':\n return {\n transform: [\n {\n translateY: slideAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [-sheetSize, 0],\n }),\n },\n ],\n };\n case 'left':\n return {\n transform: [\n {\n translateX: slideAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [-sheetSize, 0],\n }),\n },\n ],\n };\n case 'right':\n return {\n transform: [\n {\n translateX: baseTransform,\n },\n ],\n };\n default:\n return {};\n }\n };\n\n // Position styles\n const positionStyles = {\n bottom: { bottom: 0, left: 0, right: 0 },\n top: { top: 0, left: 0, right: 0 },\n left: { left: 0, top: 0, bottom: 0 },\n right: { right: 0, top: 0, bottom: 0 },\n };\n\n // Border radius styles\n const radiusClasses = {\n bottom: 'rounded-t-2xl',\n top: 'rounded-b-2xl',\n left: 'rounded-r-2xl',\n right: 'rounded-l-2xl',\n };\n\n return (\n <Modal\n visible={isOpen}\n animationType='none'\n transparent\n onRequestClose={onClose}\n statusBarTranslucent\n >\n {/* Backdrop */}\n <Pressable onPress={onClose} className='absolute inset-0 bg-black/50' />\n\n {/* Sheet */}\n <Animated.View\n style={[\n {\n position: 'absolute',\n ...positionStyles[side],\n ...(isVertical ? { height: sheetSize } : { width: sheetSize }),\n },\n getTransform(),\n ]}\n {...(side === 'bottom' ? panResponder.panHandlers : {})}\n >\n <View\n className={cn(\n 'flex-1 bg-white dark:bg-gray-900 shadow-xl',\n radiusClasses[side],\n className\n )}\n >\n {/* Drag Handle */}\n {showHandle && (side === 'bottom' || side === 'top') && (\n <View\n className={cn(\n 'items-center justify-center',\n side === 'bottom' ? 'pt-3 pb-2' : 'pb-3 pt-2'\n )}\n >\n <View className='w-12 h-1.5 bg-gray-300 dark:bg-gray-700 rounded-full' />\n </View>\n )}\n\n {/* Header */}\n {(title || description || showCloseButton) && (\n <View className='px-4 py-4 border-b border-gray-200 dark:border-gray-700'>\n <View className='flex flex-row items-start justify-between'>\n <View className='flex-1'>\n {title && (\n <Text className='text-lg font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n )}\n {description && (\n <Text className='mt-1 text-sm text-gray-600 dark:text-gray-400'>\n {description}\n </Text>\n )}\n </View>\n {showCloseButton && (\n <Pressable\n onPress={onClose}\n className='ml-4 p-1'\n accessibilityRole='button'\n accessibilityLabel='Close sheet'\n >\n <Text className='text-xl text-gray-400'>✕</Text>\n </Pressable>\n )}\n </View>\n </View>\n )}\n\n {/* Content */}\n <ScrollView className='flex-1 px-4 py-4' bounces={false}>\n {children}\n </ScrollView>\n\n {/* Footer */}\n {footer && (\n <View className='px-4 py-4 border-t border-gray-200 dark:border-gray-700'>\n {footer}\n </View>\n )}\n </View>\n </Animated.View>\n </Modal>\n );\n};\n","import * as React from 'react';\nimport { useState, useRef, useEffect } from 'react';\nimport { View, Text, Pressable, Modal, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TooltipProps {\n /** Content to display in the tooltip */\n content: string;\n /** Children that trigger the tooltip */\n children: React.ReactNode;\n /** Tooltip placement */\n placement?: 'top' | 'bottom' | 'left' | 'right';\n /** Delay before showing tooltip (ms) */\n delayShow?: number;\n /** Additional className for tooltip */\n className?: string;\n /** Disable the tooltip */\n disabled?: boolean;\n /** Variant style */\n variant?: 'default' | 'info' | 'success' | 'warning' | 'error';\n}\n\n/**\n * Tooltip Component\n *\n * Simple tooltip that appears on long press in React Native.\n * Shows informational content in a floating view.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"Click to copy\">\n * <Button>Copy</Button>\n * </Tooltip>\n * ```\n *\n * @example\n * ```tsx\n * <Tooltip content=\"User profile\" placement=\"bottom\" variant=\"info\">\n * <Avatar />\n * </Tooltip>\n * ```\n */\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n children,\n placement = 'top',\n delayShow = 0,\n className,\n disabled = false,\n variant = 'default',\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const triggerRef = useRef<View>(null);\n const fadeAnim = useRef(new Animated.Value(0)).current;\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n if (isVisible) {\n Animated.timing(fadeAnim, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }).start();\n } else {\n fadeAnim.setValue(0);\n }\n }, [isVisible, fadeAnim]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n const showTooltip = () => {\n if (disabled) return;\n\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setPosition({ x, y, width, height });\n\n if (delayShow > 0) {\n timeoutRef.current = setTimeout(() => {\n setIsVisible(true);\n }, delayShow);\n } else {\n setIsVisible(true);\n }\n });\n };\n\n const hideTooltip = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsVisible(false);\n };\n\n // Variant styles\n const variantClasses = {\n default: 'bg-gray-900 dark:bg-gray-700',\n info: 'bg-blue-600 dark:bg-blue-500',\n success: 'bg-green-600 dark:bg-green-500',\n warning: 'bg-yellow-600 dark:bg-yellow-500',\n error: 'bg-red-600 dark:bg-red-500',\n };\n\n // Calculate tooltip position\n const getTooltipPosition = () => {\n const TOOLTIP_OFFSET = 8;\n const TOOLTIP_HEIGHT = 32; // Approximate\n const TOOLTIP_WIDTH = content.length * 8; // Rough estimate\n\n switch (placement) {\n case 'top':\n return {\n top: position.y - TOOLTIP_HEIGHT - TOOLTIP_OFFSET,\n left: position.x + position.width / 2 - TOOLTIP_WIDTH / 2,\n };\n case 'bottom':\n return {\n top: position.y + position.height + TOOLTIP_OFFSET,\n left: position.x + position.width / 2 - TOOLTIP_WIDTH / 2,\n };\n case 'left':\n return {\n top: position.y + position.height / 2 - TOOLTIP_HEIGHT / 2,\n left: position.x - TOOLTIP_WIDTH - TOOLTIP_OFFSET,\n };\n case 'right':\n return {\n top: position.y + position.height / 2 - TOOLTIP_HEIGHT / 2,\n left: position.x + position.width + TOOLTIP_OFFSET,\n };\n default:\n return { top: 0, left: 0 };\n }\n };\n\n return (\n <>\n <Pressable\n ref={triggerRef}\n onLongPress={showTooltip}\n onPressOut={hideTooltip}\n delayLongPress={300}\n >\n {children}\n </Pressable>\n\n <Modal\n visible={isVisible}\n transparent\n animationType='none'\n onRequestClose={hideTooltip}\n >\n <Pressable className='flex-1' onPress={hideTooltip}>\n <Animated.View\n style={[\n {\n position: 'absolute',\n ...getTooltipPosition(),\n opacity: fadeAnim,\n },\n ]}\n >\n <View\n className={cn(\n 'px-3 py-2 rounded-lg shadow-lg',\n variantClasses[variant],\n className\n )}\n >\n <Text className='text-xs font-medium text-white'>{content}</Text>\n </View>\n </Animated.View>\n </Pressable>\n </Modal>\n </>\n );\n};\n","import * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport {\n View,\n Text,\n Modal,\n Pressable,\n ScrollView,\n Animated,\n Dimensions,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface DialogProps {\n /** Whether dialog is open */\n isOpen: boolean;\n /** Close handler */\n onClose?: () => void;\n /** Dialog content */\n children: React.ReactNode;\n /** Dialog size */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n /** Show close button */\n showCloseButton?: boolean;\n /** Close on outside click */\n closeOnOutsideClick?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Dialog Component\n *\n * Simple, flexible dialog/modal container for React Native.\n * More flexible than AlertDialog, suitable for any content.\n *\n * @example\n * ```tsx\n * <Dialog isOpen={isOpen} onClose={() => setIsOpen(false)}>\n * <View className=\"p-6\">\n * <Text>Dialog Title</Text>\n * <Text>Dialog content...</Text>\n * </View>\n * </Dialog>\n * ```\n */\nexport const Dialog: React.FC<DialogProps> = ({\n isOpen,\n onClose,\n children,\n size = 'md',\n showCloseButton = true,\n closeOnOutsideClick = true,\n className,\n}) => {\n const scaleAnim = useRef(new Animated.Value(0.9)).current;\n const opacityAnim = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n if (isOpen) {\n Animated.parallel([\n Animated.spring(scaleAnim, {\n toValue: 1,\n useNativeDriver: true,\n friction: 8,\n }),\n Animated.timing(opacityAnim, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }),\n ]).start();\n } else {\n scaleAnim.setValue(0.9);\n opacityAnim.setValue(0);\n }\n }, [isOpen, scaleAnim, opacityAnim]);\n\n // Size configurations (percentage of screen width)\n const sizeWidths = {\n sm: SCREEN_WIDTH * 0.7,\n md: SCREEN_WIDTH * 0.8,\n lg: SCREEN_WIDTH * 0.9,\n xl: SCREEN_WIDTH * 0.95,\n full: SCREEN_WIDTH - 32,\n };\n\n const handleOverlayPress = () => {\n if (closeOnOutsideClick && onClose) {\n onClose();\n }\n };\n\n return (\n <Modal\n visible={isOpen}\n animationType='none'\n transparent\n onRequestClose={onClose}\n statusBarTranslucent\n >\n {/* Backdrop */}\n <Pressable\n onPress={handleOverlayPress}\n className='flex-1 justify-center items-center bg-black/60'\n >\n {/* Dialog Container */}\n <Animated.View\n style={{\n opacity: opacityAnim,\n transform: [{ scale: scaleAnim }],\n width: sizeWidths[size],\n maxHeight: '80%',\n }}\n >\n <Pressable onPress={e => e.stopPropagation()}>\n <View\n className={cn(\n 'bg-white dark:bg-gray-900 rounded-xl shadow-xl overflow-hidden',\n className\n )}\n >\n {/* Close button */}\n {showCloseButton && onClose && (\n <Pressable\n onPress={onClose}\n className='absolute top-4 right-4 z-10 p-1'\n accessibilityRole='button'\n accessibilityLabel='Close dialog'\n >\n <Text className='text-xl text-gray-400'>✕</Text>\n </Pressable>\n )}\n\n {/* Content */}\n <ScrollView bounces={false}>{children}</ScrollView>\n </View>\n </Pressable>\n </Animated.View>\n </Pressable>\n </Modal>\n );\n};\n","import * as React from 'react';\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport { View, Modal, Pressable, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PopoverProps {\n /** Trigger element */\n trigger: React.ReactNode;\n /** Popover content */\n children: React.ReactNode;\n /** Placement relative to trigger */\n placement?: 'top' | 'bottom' | 'left' | 'right';\n /** Open state (controlled) */\n isOpen?: boolean;\n /** Open state change handler (controlled) */\n onOpenChange?: (open: boolean) => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Popover Component\n *\n * Floating content container anchored to a trigger element.\n * Useful for contextual information, menus, and form helpers.\n *\n * @example\n * ```tsx\n * <Popover trigger={<Button>Open</Button>}>\n * <View className=\"p-4\">\n * <Text>Popover content</Text>\n * </View>\n * </Popover>\n * ```\n */\nexport const Popover: React.FC<PopoverProps> = ({\n trigger,\n children,\n placement = 'bottom',\n isOpen: controlledIsOpen,\n onOpenChange,\n className,\n}) => {\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const triggerRef = useRef<View>(null);\n const fadeAnim = useRef(new Animated.Value(0)).current;\n\n const isOpen =\n controlledIsOpen !== undefined ? controlledIsOpen : internalIsOpen;\n\n const setIsOpen = useCallback(\n (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open);\n }\n onOpenChange?.(open);\n },\n [controlledIsOpen, onOpenChange]\n );\n\n useEffect(() => {\n if (isOpen) {\n Animated.timing(fadeAnim, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }).start();\n } else {\n fadeAnim.setValue(0);\n }\n }, [isOpen, fadeAnim]);\n\n const handleTriggerPress = () => {\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setPosition({ x, y, width, height });\n setIsOpen(!isOpen);\n });\n };\n\n // Calculate popover position\n const getPopoverPosition = () => {\n const OFFSET = 8;\n\n switch (placement) {\n case 'top':\n return {\n bottom: position.y > 0 ? undefined : 0,\n top: position.y - OFFSET,\n left: position.x,\n width: position.width,\n transform: [{ translateY: -100 }] as const,\n };\n case 'bottom':\n return {\n top: position.y + position.height + OFFSET,\n left: position.x,\n width: position.width,\n };\n case 'left':\n return {\n top: position.y,\n right: position.x > 0 ? undefined : 0,\n transform: [{ translateX: -8 }] as const,\n };\n case 'right':\n return {\n top: position.y,\n left: position.x + position.width + OFFSET,\n };\n default:\n return {};\n }\n };\n\n return (\n <>\n <Pressable ref={triggerRef} onPress={handleTriggerPress}>\n {trigger}\n </Pressable>\n\n <Modal\n visible={isOpen}\n transparent\n animationType='none'\n onRequestClose={() => setIsOpen(false)}\n >\n <Pressable className='flex-1' onPress={() => setIsOpen(false)}>\n <Animated.View\n style={[\n {\n position: 'absolute',\n ...getPopoverPosition(),\n opacity: fadeAnim,\n },\n ]}\n >\n <Pressable onPress={e => e.stopPropagation()}>\n <View\n className={cn(\n 'bg-white dark:bg-gray-800',\n 'border border-gray-200 dark:border-gray-700',\n 'rounded-lg shadow-lg',\n className\n )}\n >\n {children}\n </View>\n </Pressable>\n </Animated.View>\n </Pressable>\n </Modal>\n </>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback, createContext, useContext } from 'react';\nimport { View, Text, Pressable, ScrollView, ViewProps } from 'react-native';\nimport { cn } from '../../lib/utils';\n\n// Context for tabs state\ninterface TabsContextValue {\n value: string;\n onValueChange: (value: string) => void;\n}\n\nconst TabsContext = createContext<TabsContextValue | undefined>(undefined);\n\nconst useTabsContext = () => {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error('Tabs components must be used within a Tabs provider');\n }\n return context;\n};\n\nexport interface TabsProps extends ViewProps {\n /** Currently selected tab value */\n value?: string;\n /** Default selected tab (uncontrolled) */\n defaultValue?: string;\n /** Callback when tab changes */\n onValueChange?: (value: string) => void;\n /** Children (TabsList and TabsContent) */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Tabs Component\n *\n * Tab navigation component for switching between content panels.\n *\n * @example\n * ```tsx\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">\n * <Text>Content for Tab 1</Text>\n * </TabsContent>\n * <TabsContent value=\"tab2\">\n * <Text>Content for Tab 2</Text>\n * </TabsContent>\n * </Tabs>\n * ```\n */\nexport const Tabs: React.FC<TabsProps> = ({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n children,\n className,\n ...viewProps\n}) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n const handleValueChange = useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange]\n );\n\n return (\n <TabsContext.Provider value={{ value, onValueChange: handleValueChange }}>\n <View className={cn('w-full', className)} {...viewProps}>\n {children}\n </View>\n </TabsContext.Provider>\n );\n};\n\nexport interface TabsListProps extends ViewProps {\n /** Tab triggers */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TabsList - Container for tab triggers\n */\nexport const TabsList: React.FC<TabsListProps> = ({\n children,\n className,\n ...viewProps\n}) => (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n className={cn(\n 'flex-row bg-gray-100 dark:bg-gray-800 rounded-lg p-1',\n className\n )}\n contentContainerStyle={{ flexGrow: 1 }}\n {...viewProps}\n >\n {children}\n </ScrollView>\n);\n\nexport interface TabsTriggerProps {\n /** Tab value */\n value: string;\n /** Tab label */\n children: React.ReactNode;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TabsTrigger - Individual tab button\n */\nexport const TabsTrigger: React.FC<TabsTriggerProps> = ({\n value,\n children,\n disabled = false,\n className,\n}) => {\n const { value: selectedValue, onValueChange } = useTabsContext();\n const isSelected = selectedValue === value;\n\n return (\n <Pressable\n onPress={() => !disabled && onValueChange(value)}\n disabled={disabled}\n className={cn(\n 'flex-1 px-4 py-2 rounded-md items-center justify-center',\n isSelected ? 'bg-white dark:bg-gray-700 shadow-sm' : 'bg-transparent',\n disabled && 'opacity-50',\n className\n )}\n accessibilityRole='tab'\n accessibilityState={{ selected: isSelected, disabled }}\n >\n <Text\n className={cn(\n 'text-sm font-medium text-center',\n isSelected\n ? 'text-gray-900 dark:text-white'\n : 'text-gray-600 dark:text-gray-400'\n )}\n >\n {children}\n </Text>\n </Pressable>\n );\n};\n\nexport interface TabsContentProps extends ViewProps {\n /** Tab value this content belongs to */\n value: string;\n /** Content to display */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TabsContent - Content panel for a tab\n */\nexport const TabsContent: React.FC<TabsContentProps> = ({\n value,\n children,\n className,\n ...viewProps\n}) => {\n const { value: selectedValue } = useTabsContext();\n\n if (selectedValue !== value) {\n return null;\n }\n\n return (\n <View className={cn('mt-2', className)} {...viewProps}>\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text, Pressable, Linking } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface LinkProps {\n /** Link URL */\n href: string;\n /** Link content */\n children: React.ReactNode;\n /** Variant style */\n variant?: 'default' | 'primary' | 'secondary' | 'muted' | 'underline';\n /** Show external icon indicator */\n showExternalIcon?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n /** Press handler (if provided, href is not automatically opened) */\n onPress?: () => void;\n}\n\n/**\n * Link Component\n *\n * Versatile link component for React Native with external link handling.\n * Opens URLs using Linking API.\n *\n * @example\n * ```tsx\n * <Link href=\"https://example.com\">External Site</Link>\n * ```\n *\n * @example\n * ```tsx\n * <Link\n * href=\"https://docs.example.com\"\n * variant=\"primary\"\n * showExternalIcon\n * >\n * Documentation\n * </Link>\n * ```\n */\nexport const Link: React.FC<LinkProps> = ({\n href,\n children,\n variant = 'default',\n showExternalIcon = false,\n disabled = false,\n className,\n onPress,\n}) => {\n // Auto-detect external links\n const isExternal = href.startsWith('http://') || href.startsWith('https://');\n\n // Variant configurations\n const variantClasses = {\n default: 'text-blue-600 dark:text-blue-400',\n primary: 'text-blue-600 dark:text-blue-400 font-medium',\n secondary: 'text-gray-600 dark:text-gray-400',\n muted: 'text-gray-500 dark:text-gray-500',\n underline: 'text-blue-600 dark:text-blue-400 underline',\n };\n\n const handlePress = async () => {\n if (disabled) return;\n\n if (onPress) {\n onPress();\n return;\n }\n\n try {\n const supported = await Linking.canOpenURL(href);\n if (supported) {\n await Linking.openURL(href);\n }\n } catch (error) {\n console.error('Failed to open URL:', error);\n }\n };\n\n if (disabled) {\n return (\n <Text className={cn('opacity-50', variantClasses[variant], className)}>\n {children}\n {showExternalIcon && isExternal && <Text className='text-xs'> ↗</Text>}\n </Text>\n );\n }\n\n return (\n <Pressable\n onPress={handlePress}\n accessibilityRole='link'\n accessibilityLabel={typeof children === 'string' ? children : href}\n >\n <Text className={cn(variantClasses[variant], className)}>\n {children}\n {showExternalIcon && isExternal && <Text className='text-xs'> ↗</Text>}\n </Text>\n </Pressable>\n );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Pressable, ScrollView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BreadcrumbItem {\n /** Item label */\n label: string;\n /** Press handler (for navigation) */\n onPress?: () => void;\n /** Icon to display before label */\n icon?: React.ReactNode;\n /** Whether item is current page */\n isCurrent?: boolean;\n}\n\nexport interface BreadcrumbProps {\n /** Breadcrumb items */\n items: BreadcrumbItem[];\n /** Separator between items */\n separator?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Maximum items to display before collapsing */\n maxItems?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * Navigation breadcrumb trail showing current page hierarchy.\n * Supports press handlers, custom separators, and collapsing.\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={[\n * { label: 'Home', onPress: () => navigate('/') },\n * { label: 'Products', onPress: () => navigate('/products') },\n * { label: 'Item', isCurrent: true }\n * ]}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={breadcrumbs}\n * separator={<ChevronRightIcon />}\n * maxItems={4}\n * />\n * ```\n */\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n items,\n separator = '/',\n size = 'md',\n maxItems,\n className,\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n // Size configurations\n const sizeClasses = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n };\n\n // Determine which items to display\n const getDisplayItems = (): (BreadcrumbItem | { type: 'ellipsis' })[] => {\n if (!maxItems || items.length <= maxItems || isExpanded) {\n return items;\n }\n\n // Show first item, ellipsis, and last (maxItems - 2) items\n const firstItems = items.slice(0, 1);\n const lastItems = items.slice(-(maxItems - 2));\n return [...firstItems, { type: 'ellipsis' as const }, ...lastItems];\n };\n\n const displayItems = getDisplayItems();\n\n const renderBreadcrumbItem = (\n item: BreadcrumbItem,\n _index: number,\n isLast: boolean\n ) => {\n const isCurrent = item.isCurrent || isLast;\n\n // Last item should NEVER be pressable\n if (isLast) {\n return (\n <View className='flex-row items-center gap-1.5'>\n {item.icon && <View className='flex-shrink-0'>{item.icon}</View>}\n <Text\n className={cn(\n sizeClasses[size],\n 'text-gray-900 dark:text-white font-medium'\n )}\n accessibilityRole='text'\n >\n {item.label}\n </Text>\n </View>\n );\n }\n\n // Render pressable item\n if (item.onPress) {\n return (\n <Pressable\n onPress={item.onPress}\n className='flex-row items-center gap-1.5 active:opacity-70'\n accessibilityRole='link'\n >\n {item.icon && <View className='flex-shrink-0'>{item.icon}</View>}\n <Text\n className={cn(\n sizeClasses[size],\n 'text-gray-600 dark:text-gray-400'\n )}\n >\n {item.label}\n </Text>\n </Pressable>\n );\n }\n\n return (\n <View className='flex-row items-center gap-1.5'>\n {item.icon && <View className='flex-shrink-0'>{item.icon}</View>}\n <Text\n className={cn(\n sizeClasses[size],\n isCurrent\n ? 'text-gray-900 dark:text-white font-medium'\n : 'text-gray-600 dark:text-gray-400'\n )}\n >\n {item.label}\n </Text>\n </View>\n );\n };\n\n const renderSeparator = () => {\n if (typeof separator === 'string') {\n return (\n <Text className='text-gray-400 dark:text-gray-600 mx-2'>\n {separator}\n </Text>\n );\n }\n return <View className='mx-2'>{separator}</View>;\n };\n\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n className={cn('flex-row', className)}\n contentContainerStyle={{ alignItems: 'center' }}\n accessibilityRole='none'\n accessibilityLabel='Breadcrumb'\n >\n {displayItems.map((item, index) => {\n // Handle ellipsis\n if ('type' in item && item.type === 'ellipsis') {\n return (\n <View key='ellipsis' className='flex-row items-center'>\n <Pressable\n onPress={() => setIsExpanded(true)}\n className='px-1 active:opacity-70'\n accessibilityRole='button'\n accessibilityLabel='Show all breadcrumb items'\n >\n <Text className='text-gray-600 dark:text-gray-400'>...</Text>\n </Pressable>\n {renderSeparator()}\n </View>\n );\n }\n\n const isLast = index === displayItems.length - 1;\n const breadcrumbItem = item as BreadcrumbItem;\n\n return (\n <View key={index} className='flex-row items-center'>\n {renderBreadcrumbItem(breadcrumbItem, index, isLast)}\n {!isLast && renderSeparator()}\n </View>\n );\n })}\n </ScrollView>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PaginationProps {\n /** Current page number (1-indexed) */\n currentPage: number;\n /** Total number of pages */\n totalPages: number;\n /** Page change handler */\n onPageChange: (page: number) => void;\n /** Number of page buttons to show on each side */\n siblingCount?: number;\n /** Show first/last buttons */\n showFirstLast?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Previous icon */\n prevIcon?: React.ReactNode;\n /** Next icon */\n nextIcon?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Pagination Component\n *\n * Flexible pagination controls with page numbers and navigation buttons.\n * Automatically handles ellipsis for large page counts.\n *\n * @example\n * ```tsx\n * <Pagination\n * currentPage={3}\n * totalPages={10}\n * onPageChange={setPage}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <Pagination\n * currentPage={currentPage}\n * totalPages={totalPages}\n * onPageChange={handlePageChange}\n * siblingCount={2}\n * showFirstLast\n * size=\"lg\"\n * />\n * ```\n */\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n showFirstLast = false,\n size = 'md',\n prevIcon,\n nextIcon,\n className,\n}) => {\n // Size configurations\n const sizeConfig = {\n sm: {\n button: 'h-8 w-8',\n text: 'text-xs',\n icon: 'text-xs',\n },\n md: {\n button: 'h-10 w-10',\n text: 'text-sm',\n icon: 'text-sm',\n },\n lg: {\n button: 'h-12 w-12',\n text: 'text-base',\n icon: 'text-base',\n },\n };\n\n const config = sizeConfig[size];\n\n // Generate page numbers to display\n const generatePageNumbers = (): (number | 'ellipsis')[] => {\n const pages: (number | 'ellipsis')[] = [];\n\n // Always show first page\n pages.push(1);\n\n // Calculate range around current page\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 2);\n const rightSiblingIndex = Math.min(\n currentPage + siblingCount,\n totalPages - 1\n );\n\n // Add left ellipsis if needed\n if (leftSiblingIndex > 2) {\n pages.push('ellipsis');\n }\n\n // Add pages around current page\n for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n pages.push(i);\n }\n\n // Add right ellipsis if needed\n if (rightSiblingIndex < totalPages - 1) {\n pages.push('ellipsis');\n }\n\n // Always show last page (if more than 1 page)\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n const pages = generatePageNumbers();\n\n const handlePrevious = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n const handleNext = () => {\n if (currentPage < totalPages) {\n onPageChange(currentPage + 1);\n }\n };\n\n const handleFirst = () => {\n onPageChange(1);\n };\n\n const handleLast = () => {\n onPageChange(totalPages);\n };\n\n const buttonBaseClasses = cn(\n 'items-center justify-center rounded-md border border-gray-300 dark:border-gray-600'\n );\n\n const pageButtonClasses = (isActive: boolean) =>\n cn(\n buttonBaseClasses,\n config.button,\n isActive\n ? 'bg-blue-600 dark:bg-blue-500 border-blue-600 dark:border-blue-500'\n : 'bg-white dark:bg-gray-800'\n );\n\n const navButtonClasses = (disabled: boolean) =>\n cn(\n buttonBaseClasses,\n config.button,\n 'bg-white dark:bg-gray-800',\n disabled && 'opacity-50'\n );\n\n return (\n <View\n className={cn('flex-row items-center gap-1', className)}\n accessibilityRole='none'\n accessibilityLabel='Pagination'\n >\n {/* First button */}\n {showFirstLast && (\n <Pressable\n onPress={handleFirst}\n disabled={currentPage === 1}\n className={navButtonClasses(currentPage === 1)}\n accessibilityRole='button'\n accessibilityLabel='Go to first page'\n accessibilityState={{ disabled: currentPage === 1 }}\n >\n <Text className={cn(config.text, 'text-gray-700 dark:text-gray-300')}>\n First\n </Text>\n </Pressable>\n )}\n\n {/* Previous button */}\n <Pressable\n onPress={handlePrevious}\n disabled={currentPage === 1}\n className={navButtonClasses(currentPage === 1)}\n accessibilityRole='button'\n accessibilityLabel='Go to previous page'\n accessibilityState={{ disabled: currentPage === 1 }}\n >\n {prevIcon || (\n <Text className={cn(config.icon, 'text-gray-700 dark:text-gray-300')}>\n ‹\n </Text>\n )}\n </Pressable>\n\n {/* Page numbers */}\n {pages.map((page, index) => {\n if (page === 'ellipsis') {\n return (\n <View\n key={`ellipsis-${index}`}\n className={cn('items-center justify-center', config.button)}\n >\n <Text className='text-gray-400 dark:text-gray-500'>...</Text>\n </View>\n );\n }\n\n const isActive = page === currentPage;\n return (\n <Pressable\n key={page}\n onPress={() => onPageChange(page)}\n className={pageButtonClasses(isActive)}\n accessibilityRole='button'\n accessibilityLabel={`Go to page ${page}`}\n accessibilityState={{ selected: isActive }}\n >\n <Text\n className={cn(\n config.text,\n isActive ? 'text-white' : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {page}\n </Text>\n </Pressable>\n );\n })}\n\n {/* Next button */}\n <Pressable\n onPress={handleNext}\n disabled={currentPage === totalPages}\n className={navButtonClasses(currentPage === totalPages)}\n accessibilityRole='button'\n accessibilityLabel='Go to next page'\n accessibilityState={{ disabled: currentPage === totalPages }}\n >\n {nextIcon || (\n <Text className={cn(config.icon, 'text-gray-700 dark:text-gray-300')}>\n ›\n </Text>\n )}\n </Pressable>\n\n {/* Last button */}\n {showFirstLast && (\n <Pressable\n onPress={handleLast}\n disabled={currentPage === totalPages}\n className={navButtonClasses(currentPage === totalPages)}\n accessibilityRole='button'\n accessibilityLabel='Go to last page'\n accessibilityState={{ disabled: currentPage === totalPages }}\n >\n <Text className={cn(config.text, 'text-gray-700 dark:text-gray-300')}>\n Last\n </Text>\n </Pressable>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\n/**\n * Setting item interface\n */\nexport interface SettingItem {\n /** Unique identifier */\n id: string;\n /** Setting title */\n title: string;\n /** Icon component or element */\n icon?: React.ReactNode;\n /** Optional description */\n description?: string;\n}\n\nexport interface SettingsListProps {\n /** Array of setting items to display */\n settings: SettingItem[];\n /** Currently selected setting ID */\n selectedSetting?: string;\n /** Callback when a setting is selected */\n onSettingSelect: (settingId: string) => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SettingsList Component\n *\n * Displays a list of setting items for navigation, similar to how\n * mailboxes are displayed in a mail client sidebar.\n *\n * Features:\n * - Each item shows an icon and title\n * - Highlights the currently selected setting\n * - Active states for better UX\n * - Dark mode support\n * - Accessible navigation\n *\n * @example\n * ```tsx\n * <SettingsList\n * settings={[\n * { id: 'general', title: 'General', icon: <CogIcon /> },\n * { id: 'forwarding', title: 'Forwarding', icon: <ArrowRightIcon /> },\n * ]}\n * selectedSetting=\"general\"\n * onSettingSelect={handleSelect}\n * />\n * ```\n */\nexport const SettingsList: React.FC<SettingsListProps> = ({\n settings,\n selectedSetting,\n onSettingSelect,\n className,\n}) => {\n return (\n <View\n className={cn('gap-1', className)}\n accessibilityRole='list'\n accessibilityLabel='Settings navigation'\n >\n {settings.map(setting => {\n const isSelected = selectedSetting === setting.id;\n\n return (\n <Pressable\n key={setting.id}\n onPress={() => onSettingSelect(setting.id)}\n className={cn(\n 'flex-row items-center px-3 py-2.5 rounded-lg min-h-[44px]',\n isSelected\n ? 'bg-orange-100 dark:bg-orange-900/30'\n : 'active:bg-gray-100 dark:active:bg-gray-700'\n )}\n accessibilityRole='button'\n accessibilityState={{ selected: isSelected }}\n accessibilityLabel={setting.title}\n accessibilityHint={setting.description}\n >\n {setting.icon && (\n <View className='w-5 h-5 mr-3 flex-shrink-0'>{setting.icon}</View>\n )}\n <View className='flex-1 min-w-0'>\n <Text\n className={cn(\n 'text-sm',\n isSelected\n ? 'text-orange-700 dark:text-orange-300'\n : 'text-gray-700 dark:text-gray-300'\n )}\n numberOfLines={1}\n >\n {setting.title}\n </Text>\n </View>\n </Pressable>\n );\n })}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface NavigationItem {\n /** Unique identifier for the item */\n id: string;\n /** Display label */\n label: string;\n /** Optional description/subtitle */\n description?: string;\n /** Icon component or element */\n icon: React.ReactNode;\n /** Path or identifier for selection */\n path: string;\n /** Optional badge count */\n badge?: number;\n /** Whether the item is disabled */\n disabled?: boolean;\n}\n\nexport interface NavigationListProps {\n /** Array of navigation items */\n items: NavigationItem[];\n /** Currently selected item path */\n selectedPath?: string;\n /** Callback when an item is selected */\n onSelect: (path: string) => void;\n /** Variant of the navigation list */\n variant?: 'default' | 'compact' | 'sidebar';\n /** Additional className for the container */\n className?: string;\n}\n\n/**\n * NavigationList Component\n *\n * Displays a list of navigation items with icons, labels, and descriptions.\n * Commonly used in settings pages and documentation for master-detail layouts.\n *\n * @example\n * ```tsx\n * const items = [\n * {\n * id: 'general',\n * label: 'General',\n * description: 'Basic account settings',\n * icon: <Cog6ToothIcon />,\n * path: '/settings/general'\n * },\n * // ...\n * ];\n *\n * <NavigationList\n * items={items}\n * selectedPath={currentPath}\n * onSelect={handleSelect}\n * />\n * ```\n */\nexport const NavigationList: React.FC<NavigationListProps> = ({\n items,\n selectedPath,\n onSelect,\n variant = 'default',\n className,\n}) => {\n const containerClass = variant === 'compact' ? 'gap-1' : 'gap-0';\n\n return (\n <View className={cn(containerClass, className)} accessibilityRole='list'>\n {items.map((item, index) => {\n const isSelected = selectedPath === item.path;\n const isDisabled = item.disabled;\n const isLast = index === items.length - 1;\n\n return (\n <Pressable\n key={item.id}\n onPress={() => !isDisabled && onSelect(item.path)}\n disabled={isDisabled}\n className={cn(\n 'flex-row items-start',\n variant === 'compact'\n ? 'p-3 rounded-lg'\n : cn(\n 'p-4',\n !isLast && 'border-b border-gray-200 dark:border-gray-700'\n ),\n isDisabled && 'opacity-50',\n !isDisabled &&\n (isSelected\n ? 'bg-blue-50 dark:bg-blue-900/20'\n : 'active:bg-gray-50 dark:active:bg-gray-700')\n )}\n accessibilityRole='button'\n accessibilityState={{\n selected: isSelected,\n disabled: isDisabled,\n }}\n accessibilityLabel={item.label}\n accessibilityHint={item.description}\n >\n <View className='w-5 h-5 mt-0.5 mr-3 flex-shrink-0'>\n {item.icon}\n </View>\n <View className='flex-1 min-w-0'>\n <View className='flex-row items-center'>\n <Text\n className={cn(\n 'font-medium',\n isSelected\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {item.label}\n </Text>\n {item.badge !== undefined && item.badge > 0 && (\n <View className='ml-2 px-2 py-0.5 bg-blue-100 dark:bg-blue-900 rounded-full'>\n <Text className='text-xs font-medium text-blue-800 dark:text-blue-200'>\n {item.badge}\n </Text>\n </View>\n )}\n </View>\n {item.description && (\n <Text className='text-xs text-gray-500 dark:text-gray-400 mt-0.5'>\n {item.description}\n </Text>\n )}\n </View>\n </Pressable>\n );\n })}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useRef, useCallback } from 'react';\nimport {\n View,\n Pressable,\n Text,\n Modal,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface DropdownItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Icon component */\n icon?: React.ReactNode;\n /** Press handler */\n onPress: () => void;\n /** Whether item is disabled */\n disabled?: boolean;\n /** Whether to render as separator */\n separator?: boolean;\n}\n\nexport interface DropdownProps {\n /** Trigger element */\n trigger: React.ReactNode;\n /** Menu items */\n items: DropdownItem[];\n /** Alignment relative to trigger */\n align?: 'left' | 'right';\n /** Additional className for container */\n className?: string;\n /** Variant style */\n variant?: 'default' | 'bordered';\n}\n\n/**\n * Dropdown Component\n *\n * A dropdown menu that displays a list of actions when triggered.\n * Uses Modal for overlay behavior on React Native.\n *\n * @example\n * ```tsx\n * <Dropdown\n * trigger={<Button>Menu</Button>}\n * items={[\n * { id: '1', label: 'Edit', onPress: handleEdit },\n * { id: '2', label: 'Delete', onPress: handleDelete, variant: 'danger' },\n * ]}\n * />\n * ```\n */\nexport const Dropdown: React.FC<DropdownProps> = ({\n trigger,\n items,\n align = 'right',\n className,\n variant = 'default',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [triggerLayout, setTriggerLayout] = useState({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n });\n const triggerRef = useRef<View>(null);\n\n const handleOpen = useCallback(() => {\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setTriggerLayout({ x, y, width, height });\n setIsOpen(true);\n });\n }, []);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const handleItemPress = useCallback((item: DropdownItem) => {\n if (!item.disabled) {\n item.onPress();\n setIsOpen(false);\n }\n }, []);\n\n // Calculate menu position\n const menuStyle = {\n position: 'absolute' as const,\n top: triggerLayout.y + triggerLayout.height + 4,\n ...(align === 'left'\n ? { left: triggerLayout.x }\n : {\n right: triggerLayout.x > 0 ? undefined : 16,\n left:\n align === 'right'\n ? triggerLayout.x + triggerLayout.width - 200\n : triggerLayout.x,\n }),\n minWidth: 160,\n maxWidth: 280,\n };\n\n return (\n <View className={cn('relative', className)} ref={triggerRef}>\n <Pressable\n onPress={handleOpen}\n className={cn(\n variant === 'bordered' &&\n 'border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2'\n )}\n accessibilityRole='button'\n accessibilityLabel='Open menu'\n accessibilityState={{ expanded: isOpen }}\n >\n {trigger}\n </Pressable>\n\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1'>\n <View\n style={menuStyle}\n className='bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 py-1 overflow-hidden'\n >\n {items.map(item =>\n item.separator ? (\n <View\n key={item.id}\n className='my-1 h-px bg-gray-200 dark:bg-gray-700'\n accessibilityRole='none'\n />\n ) : (\n <Pressable\n key={item.id}\n onPress={() => handleItemPress(item)}\n disabled={item.disabled}\n className={cn(\n 'flex-row items-center gap-2 px-4 py-2.5',\n item.disabled\n ? 'opacity-50'\n : 'active:bg-gray-100 dark:active:bg-gray-700'\n )}\n accessibilityRole='menuitem'\n accessibilityState={{ disabled: item.disabled }}\n >\n {item.icon && <View className='w-5 h-5'>{item.icon}</View>}\n <Text\n className={cn(\n 'text-sm',\n item.disabled\n ? 'text-gray-400 dark:text-gray-500'\n : 'text-gray-700 dark:text-gray-200'\n )}\n >\n {item.label}\n </Text>\n </Pressable>\n )\n )}\n </View>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, useWindowDimensions } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AspectRatioProps {\n /** Content to maintain aspect ratio */\n children: React.ReactNode;\n /** Aspect ratio (width/height or preset) */\n ratio?: number | '16/9' | '4/3' | '1/1' | '21/9' | '3/2';\n /** Additional className */\n className?: string;\n /** Fixed width (optional, defaults to full width) */\n width?: number | 'full';\n}\n\n/**\n * AspectRatio Component\n *\n * Maintains a specific aspect ratio for its content.\n * Useful for responsive images, videos, and embeds.\n *\n * @example\n * ```tsx\n * <AspectRatio ratio=\"16/9\">\n * <Image source={{ uri: '/image.jpg' }} style={{ flex: 1 }} />\n * </AspectRatio>\n * ```\n *\n * @example\n * ```tsx\n * <AspectRatio ratio={1.5} width={200}>\n * <View style={{ backgroundColor: 'blue', flex: 1 }} />\n * </AspectRatio>\n * ```\n */\nexport const AspectRatio: React.FC<AspectRatioProps> = ({\n children,\n ratio = '16/9',\n className,\n width = 'full',\n}) => {\n const { width: screenWidth } = useWindowDimensions();\n\n // Convert preset ratios to numbers\n const ratioMap: Record<string, number> = {\n '16/9': 16 / 9,\n '4/3': 4 / 3,\n '1/1': 1,\n '21/9': 21 / 9,\n '3/2': 3 / 2,\n };\n\n const numericRatio = typeof ratio === 'string' ? ratioMap[ratio] : ratio;\n\n // Calculate container width\n const containerWidth = width === 'full' ? screenWidth : width;\n\n return (\n <View\n className={cn('relative overflow-hidden', className)}\n style={{\n width: width === 'full' ? '100%' : containerWidth,\n aspectRatio: numericRatio,\n }}\n >\n <View className='absolute inset-0'>{children}</View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface QuickAction {\n /** Unique identifier */\n id: string;\n /** Button label */\n label: string;\n /** Icon component or element */\n icon?: React.ReactNode;\n /** Press handler */\n onPress: () => void;\n /** Button variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger';\n /** Whether button is disabled */\n disabled?: boolean;\n}\n\nexport interface QuickActionsProps {\n /** Actions to display */\n actions: QuickAction[];\n /** Layout orientation */\n orientation?: 'horizontal' | 'vertical' | 'grid';\n /** Grid columns (when orientation is grid) */\n columns?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * QuickActions Component\n *\n * Quick action buttons for dashboard.\n * Supports multiple layouts and variants.\n *\n * @example\n * ```tsx\n * <QuickActions\n * actions={[\n * { id: '1', label: 'New Project', icon: <PlusIcon />, onPress: () => {}, variant: 'primary' },\n * { id: '2', label: 'Upload File', icon: <UploadIcon />, onPress: () => {} },\n * { id: '3', label: 'Export Data', icon: <DownloadIcon />, onPress: () => {} }\n * ]}\n * orientation=\"grid\"\n * columns={3}\n * />\n * ```\n */\nexport const QuickActions: React.FC<QuickActionsProps> = ({\n actions,\n orientation = 'horizontal',\n columns = 3,\n className,\n}) => {\n const variantStyles = {\n default: {\n bg: 'bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',\n bgActive: 'active:bg-gray-50 dark:active:bg-gray-800',\n text: 'text-gray-900 dark:text-white',\n },\n primary: {\n bg: 'bg-blue-500 border-blue-500',\n bgActive: 'active:bg-blue-600',\n text: 'text-white',\n },\n success: {\n bg: 'bg-green-500 border-green-500',\n bgActive: 'active:bg-green-600',\n text: 'text-white',\n },\n warning: {\n bg: 'bg-yellow-500 border-yellow-500',\n bgActive: 'active:bg-yellow-600',\n text: 'text-white',\n },\n danger: {\n bg: 'bg-red-500 border-red-500',\n bgActive: 'active:bg-red-600',\n text: 'text-white',\n },\n };\n\n const layoutClasses = {\n horizontal: 'flex-row flex-wrap gap-2',\n vertical: 'flex-col gap-2',\n grid: 'flex-row flex-wrap gap-2',\n };\n\n // Calculate item flex for grid layout\n const getGridFlex = () => {\n if (orientation !== 'grid') return undefined;\n return 1 / columns;\n };\n\n return (\n <View className={cn(layoutClasses[orientation], className)}>\n {actions.map(action => {\n const variant = action.variant || 'default';\n const styles = variantStyles[variant];\n\n return (\n <Pressable\n key={action.id}\n onPress={action.onPress}\n disabled={action.disabled}\n className={cn(\n 'flex-row items-center justify-center gap-2 px-4 py-3 rounded-lg border',\n styles.bg,\n !action.disabled && styles.bgActive,\n action.disabled && 'opacity-50',\n orientation === 'vertical' && 'w-full'\n )}\n style={\n orientation === 'grid'\n ? { flex: getGridFlex(), minWidth: 100 }\n : undefined\n }\n accessibilityRole='button'\n accessibilityLabel={action.label}\n accessibilityState={{ disabled: action.disabled }}\n >\n {action.icon && <View className='w-5 h-5'>{action.icon}</View>}\n <Text className={cn('font-medium', styles.text)}>\n {action.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface EmptyStateProps {\n /** Icon or illustration to display */\n icon?: React.ReactNode;\n /** Main title */\n title: string;\n /** Description text */\n description?: string;\n /** Action button(s) */\n action?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * EmptyState Component\n *\n * Displays a placeholder for empty lists, search results, or content areas.\n * Includes icon, title, description, and optional action button.\n *\n * @example\n * ```tsx\n * <EmptyState\n * icon={<InboxIcon className=\"w-12 h-12\" />}\n * title=\"No messages\"\n * description=\"You don't have any messages yet.\"\n * action={<Button onPress={handleCompose}>Compose</Button>}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <EmptyState\n * icon={<SearchIcon />}\n * title=\"No results found\"\n * description=\"Try adjusting your search or filter to find what you're looking for.\"\n * size=\"sm\"\n * />\n * ```\n */\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n icon,\n title,\n description,\n action,\n size = 'md',\n className,\n}) => {\n // Size configurations\n const sizeConfig = {\n sm: {\n container: 'py-6 px-4',\n iconContainer: 'w-10 h-10 mb-3',\n title: 'text-base',\n description: 'text-sm',\n },\n md: {\n container: 'py-10 px-6',\n iconContainer: 'w-14 h-14 mb-4',\n title: 'text-lg',\n description: 'text-base',\n },\n lg: {\n container: 'py-16 px-8',\n iconContainer: 'w-20 h-20 mb-6',\n title: 'text-xl',\n description: 'text-base',\n },\n };\n\n const config = sizeConfig[size];\n\n return (\n <View\n className={cn('items-center justify-center', config.container, className)}\n accessibilityRole='none'\n >\n {icon && (\n <View\n className={cn(\n 'items-center justify-center',\n config.iconContainer,\n 'text-gray-400 dark:text-gray-500'\n )}\n >\n {icon}\n </View>\n )}\n\n <Text\n className={cn(\n 'font-semibold text-gray-900 dark:text-white text-center',\n config.title\n )}\n >\n {title}\n </Text>\n\n {description && (\n <Text\n className={cn(\n 'text-gray-500 dark:text-gray-400 text-center mt-2 max-w-xs',\n config.description\n )}\n >\n {description}\n </Text>\n )}\n\n {action && <View className='mt-6'>{action}</View>}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CalendarProps {\n /** Selected date */\n value?: Date;\n /** Change handler */\n onChange: (date: Date) => void;\n /** Minimum selectable date */\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Disabled dates */\n disabledDates?: Date[];\n /** Show outside days */\n showOutsideDays?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Calendar Component\n *\n * Interactive calendar for date selection.\n * Supports min/max dates and disabled dates.\n *\n * @example\n * ```tsx\n * <Calendar\n * value={selectedDate}\n * onChange={setSelectedDate}\n * minDate={new Date()}\n * />\n * ```\n */\nexport const Calendar: React.FC<CalendarProps> = ({\n value,\n onChange,\n minDate,\n maxDate,\n disabledDates = [],\n showOutsideDays = true,\n className,\n}) => {\n const [currentMonth, setCurrentMonth] = useState(value || new Date());\n\n // Get days in month\n const getDaysInMonth = (date: Date) => {\n const year = date.getFullYear();\n const month = date.getMonth();\n return new Date(year, month + 1, 0).getDate();\n };\n\n // Get first day of month (0 = Sunday, 6 = Saturday)\n const getFirstDayOfMonth = (date: Date) => {\n const year = date.getFullYear();\n const month = date.getMonth();\n return new Date(year, month, 1).getDay();\n };\n\n // Check if date is same day\n const isSameDay = (date1: Date, date2: Date) => {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n };\n\n // Check if date is disabled\n const isDateDisabled = (date: Date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return disabledDates.some(disabledDate => isSameDay(date, disabledDate));\n };\n\n // Navigate months\n const goToPreviousMonth = () => {\n setCurrentMonth(\n new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1)\n );\n };\n\n const goToNextMonth = () => {\n setCurrentMonth(\n new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1)\n );\n };\n\n // Generate calendar days\n const generateCalendarDays = () => {\n const year = currentMonth.getFullYear();\n const month = currentMonth.getMonth();\n const daysInMonth = getDaysInMonth(currentMonth);\n const firstDay = getFirstDayOfMonth(currentMonth);\n const days: (Date | null)[] = [];\n\n // Add previous month days\n if (showOutsideDays) {\n const prevMonthDays = getDaysInMonth(new Date(year, month - 1));\n for (let i = firstDay - 1; i >= 0; i--) {\n days.push(new Date(year, month - 1, prevMonthDays - i));\n }\n } else {\n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n }\n\n // Add current month days\n for (let day = 1; day <= daysInMonth; day++) {\n days.push(new Date(year, month, day));\n }\n\n // Add next month days to fill grid\n if (showOutsideDays) {\n const remainingDays = 42 - days.length; // 6 rows * 7 days\n for (let day = 1; day <= remainingDays; day++) {\n days.push(new Date(year, month + 1, day));\n }\n }\n\n return days;\n };\n\n const calendarDays = generateCalendarDays();\n const weekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n const handleDayPress = (date: Date | null) => {\n if (!date || isDateDisabled(date)) return;\n onChange(date);\n };\n\n const monthYear = currentMonth.toLocaleDateString('en-US', {\n month: 'long',\n year: 'numeric',\n });\n\n // Split days into weeks for grid layout\n const weeks: (Date | null)[][] = [];\n for (let i = 0; i < calendarDays.length; i += 7) {\n weeks.push(calendarDays.slice(i, i + 7));\n }\n\n return (\n <View className={cn('bg-white dark:bg-gray-900 rounded-lg p-4', className)}>\n {/* Header */}\n <View className='flex-row items-center justify-between mb-4'>\n <Pressable\n onPress={goToPreviousMonth}\n className='p-2 active:bg-gray-100 dark:active:bg-gray-800 rounded-md'\n accessibilityRole='button'\n accessibilityLabel='Previous month'\n >\n <Text className='text-lg text-gray-700 dark:text-gray-300'>‹</Text>\n </Pressable>\n\n <Text className='text-base font-semibold text-gray-900 dark:text-white'>\n {monthYear}\n </Text>\n\n <Pressable\n onPress={goToNextMonth}\n className='p-2 active:bg-gray-100 dark:active:bg-gray-800 rounded-md'\n accessibilityRole='button'\n accessibilityLabel='Next month'\n >\n <Text className='text-lg text-gray-700 dark:text-gray-300'>›</Text>\n </Pressable>\n </View>\n\n {/* Week days header */}\n <View className='flex-row mb-2'>\n {weekDays.map(day => (\n <View key={day} className='flex-1 items-center py-2'>\n <Text className='text-xs font-medium text-gray-600 dark:text-gray-400'>\n {day}\n </Text>\n </View>\n ))}\n </View>\n\n {/* Calendar grid */}\n {weeks.map((week, weekIndex) => (\n <View key={weekIndex} className='flex-row'>\n {week.map((date, dayIndex) => {\n if (!date) {\n return (\n <View\n key={`empty-${dayIndex}`}\n className='flex-1 aspect-square'\n />\n );\n }\n\n const isCurrentMonth = date.getMonth() === currentMonth.getMonth();\n const isSelected = value && isSameDay(date, value);\n const isToday = isSameDay(date, new Date());\n const isDisabled = isDateDisabled(date);\n\n return (\n <Pressable\n key={`${date.getTime()}-${dayIndex}`}\n onPress={() => handleDayPress(date)}\n disabled={isDisabled}\n className={cn(\n 'flex-1 aspect-square items-center justify-center rounded-md m-0.5',\n !isDisabled && 'active:bg-gray-100 dark:active:bg-gray-800',\n isDisabled && 'opacity-40',\n isSelected && 'bg-blue-600 dark:bg-blue-500',\n isToday &&\n !isSelected &&\n 'border-2 border-blue-600 dark:border-blue-400'\n )}\n accessibilityRole='button'\n accessibilityLabel={date.toLocaleDateString()}\n accessibilityState={{\n selected: isSelected,\n disabled: isDisabled,\n }}\n >\n <Text\n className={cn(\n 'text-sm',\n isCurrentMonth\n ? 'text-gray-900 dark:text-white'\n : 'text-gray-400 dark:text-gray-600',\n isSelected && 'text-white font-semibold'\n )}\n >\n {date.getDate()}\n </Text>\n </Pressable>\n );\n })}\n </View>\n ))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable, FlatList } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface DataListColumn<T> {\n /** Column key */\n key: string;\n /** Column label */\n label: string;\n /** Render cell content */\n render?: (row: T, index: number) => React.ReactNode;\n /** Flex value for width */\n flex?: number;\n /** Align content */\n align?: 'left' | 'center' | 'right';\n}\n\nexport interface DataListProps<T> {\n /** Table columns */\n columns: DataListColumn<T>[];\n /** Table data */\n data: T[];\n /** Row key extractor */\n keyExtractor: (row: T, index: number) => string;\n /** Row press handler */\n onRowPress?: (row: T, index: number) => void;\n /** Compact mode */\n compact?: boolean;\n /** Show column headers */\n showHeader?: boolean;\n /** Empty state message */\n emptyMessage?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * DataList Component\n *\n * Mobile-friendly data list component (alternative to table).\n * Uses FlatList for virtualization and performance.\n *\n * @example\n * ```tsx\n * <DataList\n * columns={[\n * { key: 'name', label: 'Name', flex: 2 },\n * { key: 'email', label: 'Email', flex: 3 },\n * { key: 'role', label: 'Role', flex: 1, align: 'right' }\n * ]}\n * data={users}\n * keyExtractor={(user) => user.id}\n * onRowPress={handleRowPress}\n * />\n * ```\n */\nexport function DataList<T extends Record<string, unknown>>({\n columns,\n data,\n keyExtractor,\n onRowPress,\n compact = false,\n showHeader = true,\n emptyMessage = 'No data available',\n className,\n}: DataListProps<T>) {\n const alignClasses = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n };\n\n const renderHeader = () => {\n if (!showHeader) return null;\n\n return (\n <View className='flex-row bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700'>\n {columns.map(column => (\n <View\n key={column.key}\n className={cn(\n compact ? 'px-3 py-2' : 'px-4 py-3',\n alignClasses[column.align || 'left']\n )}\n style={{ flex: column.flex || 1 }}\n >\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider'>\n {column.label}\n </Text>\n </View>\n ))}\n </View>\n );\n };\n\n const renderRow = ({ item, index }: { item: T; index: number }) => {\n const isOdd = index % 2 === 1;\n\n return (\n <Pressable\n onPress={() => onRowPress?.(item, index)}\n className={cn(\n 'flex-row border-b border-gray-200 dark:border-gray-700',\n isOdd && 'bg-gray-50 dark:bg-gray-800/50',\n onRowPress && 'active:bg-gray-100 dark:active:bg-gray-800'\n )}\n disabled={!onRowPress}\n accessibilityRole={onRowPress ? 'button' : 'none'}\n >\n {columns.map(column => (\n <View\n key={column.key}\n className={cn(\n compact ? 'px-3 py-2' : 'px-4 py-3',\n alignClasses[column.align || 'left'],\n 'justify-center'\n )}\n style={{ flex: column.flex || 1 }}\n >\n {column.render ? (\n column.render(item, index)\n ) : (\n <Text\n className='text-sm text-gray-900 dark:text-white'\n numberOfLines={1}\n >\n {String(item[column.key] ?? '')}\n </Text>\n )}\n </View>\n ))}\n </Pressable>\n );\n };\n\n const renderEmpty = () => (\n <View className='py-8 items-center'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n {emptyMessage}\n </Text>\n </View>\n );\n\n return (\n <View className={cn('bg-white dark:bg-gray-900', className)}>\n {renderHeader()}\n <FlatList\n data={data}\n keyExtractor={keyExtractor}\n renderItem={renderRow}\n ListEmptyComponent={renderEmpty}\n showsVerticalScrollIndicator={false}\n />\n </View>\n );\n}\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n TextInput,\n ScrollView,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface MultiSelectOption {\n /** Option value */\n value: string;\n /** Option label */\n label: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps {\n /** Available options */\n options: MultiSelectOption[];\n /** Selected values */\n value: string[];\n /** Change handler */\n onChange: (values: string[]) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** Enable search */\n searchable?: boolean;\n /** Max selected items to show */\n maxDisplay?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * MultiSelect Component\n *\n * Multi-select dropdown with search and tags.\n * Shows selected items as removable tags.\n *\n * @example\n * ```tsx\n * <MultiSelect\n * options={categories}\n * value={selectedCategories}\n * onChange={setSelectedCategories}\n * placeholder=\"Select categories\"\n * searchable\n * />\n * ```\n */\nexport const MultiSelect: React.FC<MultiSelectProps> = ({\n options,\n value,\n onChange,\n placeholder = 'Select items...',\n searchPlaceholder = 'Search...',\n searchable = true,\n maxDisplay = 3,\n disabled = false,\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n // Filter options based on search\n const filteredOptions = searchable\n ? options.filter(opt =>\n opt.label.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : options;\n\n // Get selected option labels\n const selectedOptions = options.filter(opt => value.includes(opt.value));\n\n // Handle option toggle\n const toggleOption = useCallback(\n (optionValue: string) => {\n if (value.includes(optionValue)) {\n onChange(value.filter(v => v !== optionValue));\n } else {\n onChange([...value, optionValue]);\n }\n },\n [value, onChange]\n );\n\n // Remove selected item\n const removeItem = useCallback(\n (optionValue: string) => {\n onChange(value.filter(v => v !== optionValue));\n },\n [value, onChange]\n );\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setSearchQuery('');\n }, []);\n\n const displayedCount = selectedOptions.length;\n const hiddenCount =\n displayedCount > maxDisplay ? displayedCount - maxDisplay : 0;\n\n return (\n <View className={cn('w-full', className)}>\n {/* Trigger */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'min-h-[44px] px-3 py-2',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={placeholder}\n accessibilityState={{ disabled, expanded: isOpen }}\n >\n <View className='flex-row flex-wrap gap-1.5'>\n {selectedOptions.length === 0 ? (\n <Text className='text-sm text-gray-500 dark:text-gray-400 py-0.5'>\n {placeholder}\n </Text>\n ) : (\n <>\n {selectedOptions.slice(0, maxDisplay).map(opt => (\n <View\n key={opt.value}\n className='flex-row items-center gap-1 px-2 py-0.5 bg-blue-100 dark:bg-blue-900/30 rounded'\n >\n <Text className='text-xs font-medium text-blue-700 dark:text-blue-300'>\n {opt.label}\n </Text>\n <Pressable\n onPress={() => removeItem(opt.value)}\n hitSlop={8}\n accessibilityRole='button'\n accessibilityLabel={`Remove ${opt.label}`}\n >\n <Text className='text-blue-700 dark:text-blue-300'>×</Text>\n </Pressable>\n </View>\n ))}\n {hiddenCount > 0 && (\n <View className='px-2 py-0.5 bg-gray-200 dark:bg-gray-700 rounded'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300'>\n +{hiddenCount} more\n </Text>\n </View>\n )}\n </>\n )}\n </View>\n </Pressable>\n\n {/* Dropdown Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1 justify-end bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-t-xl max-h-[70%]'>\n {/* Search */}\n {searchable && (\n <View className='p-3 border-b border-gray-200 dark:border-gray-700'>\n <TextInput\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder={searchPlaceholder}\n placeholderTextColor='#9ca3af'\n className='px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white rounded-md'\n />\n </View>\n )}\n\n {/* Options */}\n <ScrollView className='max-h-80'>\n {filteredOptions.length === 0 ? (\n <View className='px-3 py-4 items-center'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n No options found\n </Text>\n </View>\n ) : (\n filteredOptions.map(option => {\n const isSelected = value.includes(option.value);\n\n return (\n <Pressable\n key={option.value}\n onPress={() =>\n !option.disabled && toggleOption(option.value)\n }\n disabled={option.disabled}\n className={cn(\n 'flex-row items-center gap-3 px-4 py-3',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n option.disabled && 'opacity-50'\n )}\n accessibilityRole='checkbox'\n accessibilityState={{\n checked: isSelected,\n disabled: option.disabled,\n }}\n >\n {/* Checkbox */}\n <View\n className={cn(\n 'w-5 h-5 border-2 rounded items-center justify-center',\n isSelected\n ? 'bg-blue-600 border-blue-600 dark:bg-blue-500 dark:border-blue-500'\n : 'border-gray-300 dark:border-gray-600'\n )}\n >\n {isSelected && (\n <Text className='text-xs text-white font-bold'>\n ✓\n </Text>\n )}\n </View>\n\n {/* Label */}\n <Text className='flex-1 text-sm text-gray-900 dark:text-white'>\n {option.label}\n </Text>\n </Pressable>\n );\n })\n )}\n </ScrollView>\n\n {/* Footer */}\n <View className='p-3 border-t border-gray-200 dark:border-gray-700 flex-row justify-between items-center'>\n <Text className='text-xs text-gray-600 dark:text-gray-400'>\n {value.length} selected\n </Text>\n <View className='flex-row gap-3'>\n {value.length > 0 && (\n <Pressable\n onPress={() => onChange([])}\n accessibilityRole='button'\n accessibilityLabel='Clear all'\n >\n <Text className='text-sm text-blue-600 dark:text-blue-400'>\n Clear all\n </Text>\n </Pressable>\n )}\n <Pressable\n onPress={handleClose}\n accessibilityRole='button'\n accessibilityLabel='Done'\n >\n <Text className='text-sm font-medium text-blue-600 dark:text-blue-400'>\n Done\n </Text>\n </Pressable>\n </View>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ProgressCircleProps {\n /** Progress value (0-100) */\n value: number;\n /** Circle size in pixels */\n size?: number;\n /** Stroke width */\n strokeWidth?: number;\n /** Show percentage text */\n showValue?: boolean;\n /** Custom label */\n label?: string;\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'danger';\n /** Custom color (hex) */\n color?: string;\n /** Background track color (hex) */\n trackColor?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * ProgressCircle Component\n *\n * Circular progress indicator with customizable size and colors.\n * Displays percentage or custom label in the center.\n * Uses View-based approach for React Native compatibility.\n *\n * @example\n * ```tsx\n * <ProgressCircle\n * value={75}\n * size={120}\n * showValue\n * variant=\"success\"\n * />\n * ```\n */\nexport const ProgressCircle: React.FC<ProgressCircleProps> = ({\n value,\n size = 100,\n strokeWidth = 8,\n showValue = true,\n label,\n variant = 'primary',\n color,\n trackColor = '#e5e7eb',\n className,\n}) => {\n // Clamp value between 0 and 100\n const progress = Math.min(100, Math.max(0, value));\n\n // Color variants\n const variantColors = {\n primary: '#2563eb',\n success: '#16a34a',\n warning: '#ca8a04',\n danger: '#dc2626',\n };\n\n const progressColor = color || variantColors[variant];\n const innerSize = size - strokeWidth * 2;\n\n return (\n <View\n className={cn('items-center justify-center', className)}\n style={{ width: size, height: size }}\n >\n {/* Background circle */}\n <View\n style={{\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: strokeWidth,\n borderColor: trackColor,\n position: 'absolute',\n }}\n />\n\n {/* Progress indicator - simplified arc */}\n <View\n style={{\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: strokeWidth,\n borderColor: 'transparent',\n borderTopColor: progressColor,\n borderRightColor: progress > 25 ? progressColor : 'transparent',\n borderBottomColor: progress > 50 ? progressColor : 'transparent',\n borderLeftColor: progress > 75 ? progressColor : 'transparent',\n position: 'absolute',\n transform: [{ rotate: '-90deg' }],\n }}\n />\n\n {/* Center content */}\n <View\n style={{\n width: innerSize,\n height: innerSize,\n borderRadius: innerSize / 2,\n backgroundColor: 'transparent',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {(showValue || label) && (\n <View className='items-center justify-center'>\n {showValue && !label && (\n <Text\n className='font-bold text-gray-900 dark:text-white'\n style={{ fontSize: size * 0.2 }}\n >\n {Math.round(progress)}%\n </Text>\n )}\n {label && (\n <Text\n className='font-medium text-gray-900 dark:text-white text-center px-2'\n style={{ fontSize: size * 0.15 }}\n >\n {label}\n </Text>\n )}\n </View>\n )}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface NavItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Icon component or element */\n icon?: React.ReactNode;\n /** Press handler */\n onPress?: () => void;\n /** Active/selected state */\n active?: boolean;\n /** Badge content */\n badge?: string | number;\n}\n\nexport interface SideNavProps {\n /** Navigation items */\n items: NavItem[];\n /** Additional className */\n className?: string;\n}\n\n/**\n * SideNav Component\n *\n * Side navigation for drawer menus or sidebar layouts.\n * Displays items with icons, labels, and badges.\n *\n * @example\n * ```tsx\n * <SideNav\n * items={[\n * { id: 'home', label: 'Home', icon: <HomeIcon />, active: true },\n * { id: 'settings', label: 'Settings', icon: <CogIcon />, badge: 3 },\n * ]}\n * />\n * ```\n */\nexport const SideNav: React.FC<SideNavProps> = ({ items, className }) => {\n return (\n <View className={cn('gap-1', className)} accessibilityRole='list'>\n {items.map(item => (\n <Pressable\n key={item.id}\n onPress={item.onPress}\n className={cn(\n 'flex-row items-center gap-3 px-4 py-3 rounded-lg',\n item.active\n ? 'bg-blue-50 dark:bg-blue-900/20'\n : 'active:bg-gray-100 dark:active:bg-gray-800'\n )}\n accessibilityRole='button'\n accessibilityState={{ selected: item.active }}\n accessibilityLabel={item.label}\n >\n {item.icon && <View className='w-5 h-5'>{item.icon}</View>}\n <Text\n className={cn(\n 'flex-1 font-medium',\n item.active\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {item.label}\n </Text>\n {item.badge !== undefined && (\n <View className='px-2 py-0.5 bg-gray-200 dark:bg-gray-700 rounded'>\n <Text className='text-xs text-gray-700 dark:text-gray-300'>\n {item.badge}\n </Text>\n </View>\n )}\n </Pressable>\n ))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable, ActivityIndicator } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SectionHeaderProps {\n /** The header text/title */\n title: string;\n /** Optional callback for the \"+\" button */\n onAdd?: () => void;\n /** Optional tooltip/title for the add button */\n addButtonLabel?: string;\n /** Optional loading indicator */\n loading?: boolean;\n /** Right side actions/buttons */\n actions?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SectionHeader Component\n *\n * A reusable header component for sections with consistent styling.\n * Displays a title and an optional \"+\" action button.\n *\n * @example\n * ```tsx\n * <SectionHeader title=\"Emails\" />\n * <SectionHeader\n * title=\"Email Accounts\"\n * onAdd={handleAdd}\n * addButtonLabel=\"Add account\"\n * />\n * ```\n */\nexport const SectionHeader: React.FC<SectionHeaderProps> = ({\n title,\n onAdd,\n addButtonLabel = 'Add',\n loading,\n actions,\n className,\n}) => {\n return (\n <View\n className={cn(\n 'p-4 border-b border-gray-200 dark:border-gray-700',\n className\n )}\n >\n <View className='flex-row items-center justify-between'>\n <Text className='text-lg font-semibold text-gray-900 dark:text-gray-100'>\n {title}\n </Text>\n <View className='flex-row items-center gap-2'>\n {loading && <ActivityIndicator size='small' color='#2563eb' />}\n {actions}\n {onAdd && (\n <Pressable\n onPress={onAdd}\n className='p-2 rounded active:bg-gray-200 dark:active:bg-gray-700'\n accessibilityRole='button'\n accessibilityLabel={addButtonLabel}\n >\n <Text className='text-xl text-gray-600 dark:text-gray-400'>\n +\n </Text>\n </Pressable>\n )}\n </View>\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, ScrollView, SafeAreaView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PageContainerProps {\n /** Page content */\n children: React.ReactNode;\n /** Background variant */\n background?: 'default' | 'surface' | 'transparent';\n /** Enable scrolling */\n scrollable?: boolean;\n /** Use SafeAreaView */\n safeArea?: boolean;\n /** Padding variant */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * PageContainer Component\n *\n * Full-screen page container with background and safe area handling.\n * Provides consistent page layouts across the app.\n *\n * @example\n * ```tsx\n * <PageContainer>\n * <Header />\n * <Content />\n * </PageContainer>\n * ```\n *\n * @example\n * ```tsx\n * <PageContainer\n * background=\"surface\"\n * scrollable\n * safeArea\n * padding=\"md\"\n * >\n * <FormContent />\n * </PageContainer>\n * ```\n */\nexport const PageContainer: React.FC<PageContainerProps> = ({\n children,\n background = 'default',\n scrollable = false,\n safeArea = true,\n padding = 'none',\n className,\n}) => {\n const backgroundClasses = {\n default: 'bg-gray-50 dark:bg-gray-900',\n surface: 'bg-white dark:bg-gray-800',\n transparent: 'bg-transparent',\n };\n\n const paddingClasses = {\n none: '',\n sm: 'p-2',\n md: 'p-4',\n lg: 'p-6',\n };\n\n const containerClasses = cn(\n 'flex-1',\n backgroundClasses[background],\n paddingClasses[padding],\n className\n );\n\n const content = scrollable ? (\n <ScrollView\n className={containerClasses}\n contentContainerStyle={{ flexGrow: 1 }}\n showsVerticalScrollIndicator={false}\n >\n {children}\n </ScrollView>\n ) : (\n <View className={containerClasses}>{children}</View>\n );\n\n if (safeArea) {\n return (\n <SafeAreaView className={cn('flex-1', backgroundClasses[background])}>\n {content}\n </SafeAreaView>\n );\n }\n\n return content;\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { View, Text, Pressable, StyleSheet } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface FloatingPanelProps {\n /** Panel content */\n children: React.ReactNode;\n /** Panel title */\n title?: string;\n /** Initial position */\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n /** Collapsible */\n collapsible?: boolean;\n /** Initially collapsed */\n defaultCollapsed?: boolean;\n /** Close button */\n closeable?: boolean;\n /** Close handler */\n onClose?: () => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FloatingPanel Component\n *\n * Floating panel positioned at screen corners.\n * Useful for chat widgets, help panels, or notifications.\n *\n * @example\n * ```tsx\n * <FloatingPanel\n * title=\"Help & Support\"\n * position=\"bottom-right\"\n * collapsible\n * >\n * <ChatWidget />\n * </FloatingPanel>\n * ```\n */\nexport const FloatingPanel: React.FC<FloatingPanelProps> = ({\n children,\n title,\n position = 'bottom-right',\n collapsible = true,\n defaultCollapsed = false,\n closeable = false,\n onClose,\n className,\n}) => {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n const positionStyles = {\n 'bottom-right': { bottom: 16, right: 16 },\n 'bottom-left': { bottom: 16, left: 16 },\n 'top-right': { top: 16, right: 16 },\n 'top-left': { top: 16, left: 16 },\n };\n\n return (\n <View\n style={[styles.container, positionStyles[position]]}\n className={cn(\n 'w-80 bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 rounded-lg shadow-2xl',\n className\n )}\n >\n {/* Header */}\n {(title || collapsible || closeable) && (\n <View className='flex-row items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700'>\n {title && (\n <Text className='font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n )}\n\n <View className='flex-row items-center gap-2'>\n {collapsible && (\n <Pressable\n onPress={() => setIsCollapsed(!isCollapsed)}\n className='p-1 active:bg-gray-100 dark:active:bg-gray-800 rounded'\n accessibilityRole='button'\n accessibilityLabel={isCollapsed ? 'Expand' : 'Collapse'}\n >\n <Text\n className={cn(\n 'text-gray-600 dark:text-gray-400',\n isCollapsed && 'rotate-180'\n )}\n >\n ▼\n </Text>\n </Pressable>\n )}\n\n {closeable && (\n <Pressable\n onPress={onClose}\n className='p-1 active:bg-gray-100 dark:active:bg-gray-800 rounded'\n accessibilityRole='button'\n accessibilityLabel='Close'\n >\n <Text className='text-gray-600 dark:text-gray-400'>✕</Text>\n </Pressable>\n )}\n </View>\n </View>\n )}\n\n {/* Content */}\n {!isCollapsed && <View className='p-4'>{children}</View>}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n zIndex: 50,\n },\n});\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n TextInput,\n Pressable,\n Modal,\n ScrollView,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface Country {\n /** Country code (ISO 3166-1 alpha-2) */\n code: string;\n /** Country name */\n name: string;\n /** Dial code */\n dialCode: string;\n /** Flag emoji */\n flag: string;\n}\n\nexport interface PhoneInputProps {\n /** Phone value */\n value: string;\n /** Change handler */\n onChange: (value: string) => void;\n /** Selected country code */\n country?: string;\n /** Country change handler */\n onCountryChange?: (country: string) => void;\n /** Available countries (defaults to common countries) */\n countries?: Country[];\n /** Placeholder text */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n// Common countries\nconst DEFAULT_COUNTRIES: Country[] = [\n { code: 'US', name: 'United States', dialCode: '+1', flag: '🇺🇸' },\n { code: 'GB', name: 'United Kingdom', dialCode: '+44', flag: '🇬🇧' },\n { code: 'CA', name: 'Canada', dialCode: '+1', flag: '🇨🇦' },\n { code: 'AU', name: 'Australia', dialCode: '+61', flag: '🇦🇺' },\n { code: 'DE', name: 'Germany', dialCode: '+49', flag: '🇩🇪' },\n { code: 'FR', name: 'France', dialCode: '+33', flag: '🇫🇷' },\n { code: 'IT', name: 'Italy', dialCode: '+39', flag: '🇮🇹' },\n { code: 'ES', name: 'Spain', dialCode: '+34', flag: '🇪🇸' },\n { code: 'MX', name: 'Mexico', dialCode: '+52', flag: '🇲🇽' },\n { code: 'BR', name: 'Brazil', dialCode: '+55', flag: '🇧🇷' },\n { code: 'IN', name: 'India', dialCode: '+91', flag: '🇮🇳' },\n { code: 'CN', name: 'China', dialCode: '+86', flag: '🇨🇳' },\n { code: 'JP', name: 'Japan', dialCode: '+81', flag: '🇯🇵' },\n { code: 'KR', name: 'South Korea', dialCode: '+82', flag: '🇰🇷' },\n { code: 'SG', name: 'Singapore', dialCode: '+65', flag: '🇸🇬' },\n];\n\n/**\n * PhoneInput Component\n *\n * Phone number input with country code selector.\n * Formats phone numbers and shows country flags.\n *\n * @example\n * ```tsx\n * <PhoneInput\n * value={phoneNumber}\n * onChange={setPhoneNumber}\n * country={selectedCountry}\n * onCountryChange={setSelectedCountry}\n * />\n * ```\n */\nexport const PhoneInput: React.FC<PhoneInputProps> = ({\n value,\n onChange,\n country: controlledCountry,\n onCountryChange,\n countries = DEFAULT_COUNTRIES,\n placeholder = 'Phone number',\n disabled = false,\n className,\n}) => {\n const [internalCountry, setInternalCountry] = useState(\n countries[0]?.code || 'US'\n );\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n const selectedCountryCode =\n controlledCountry !== undefined ? controlledCountry : internalCountry;\n\n const selectedCountry = countries.find(c => c.code === selectedCountryCode);\n\n // Handle country selection\n const handleCountrySelect = useCallback(\n (countryCode: string) => {\n if (controlledCountry !== undefined && onCountryChange) {\n onCountryChange(countryCode);\n } else {\n setInternalCountry(countryCode);\n }\n setIsOpen(false);\n setSearchQuery('');\n },\n [controlledCountry, onCountryChange]\n );\n\n // Format phone number (basic formatting)\n const formatPhoneNumber = (input: string): string => {\n // Remove all non-numeric characters\n const cleaned = input.replace(/\\D/g, '');\n\n // Basic US/CA formatting\n if (selectedCountry?.dialCode === '+1') {\n if (cleaned.length <= 3) return cleaned;\n if (cleaned.length <= 6)\n return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3)}`;\n return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3, 6)}-${cleaned.slice(6, 10)}`;\n }\n\n return cleaned;\n };\n\n // Handle input change\n const handleInputChange = (text: string) => {\n const formatted = formatPhoneNumber(text);\n onChange(formatted);\n };\n\n // Filter countries based on search\n const filteredCountries = countries.filter(\n country =>\n country.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n country.dialCode.includes(searchQuery) ||\n country.code.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n return (\n <View className={cn('w-full', className)}>\n <View className='flex-row gap-2'>\n {/* Country selector */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center gap-2 px-3 py-2 min-w-[120px]',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Select country'\n >\n <Text className='text-xl'>{selectedCountry?.flag}</Text>\n <Text className='text-sm font-medium text-gray-900 dark:text-white'>\n {selectedCountry?.dialCode}\n </Text>\n <Text className='text-gray-600 dark:text-gray-400'>▼</Text>\n </Pressable>\n\n {/* Phone number input */}\n <TextInput\n value={value}\n onChangeText={handleInputChange}\n placeholder={placeholder}\n placeholderTextColor='#9ca3af'\n keyboardType='phone-pad'\n editable={!disabled}\n className={cn(\n 'flex-1 px-3 py-2 text-sm',\n 'bg-white dark:bg-gray-900 text-gray-900 dark:text-white',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n />\n </View>\n\n {/* Full number display */}\n {value && selectedCountry && (\n <Text className='mt-1.5 text-xs text-gray-600 dark:text-gray-400'>\n Full number: {selectedCountry.dialCode} {value}\n </Text>\n )}\n\n {/* Country picker modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='slide'\n onRequestClose={() => setIsOpen(false)}\n >\n <TouchableWithoutFeedback onPress={() => setIsOpen(false)}>\n <View className='flex-1 justify-end bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-t-xl max-h-[70%]'>\n {/* Search */}\n <View className='p-3 border-b border-gray-200 dark:border-gray-700'>\n <TextInput\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder='Search countries...'\n placeholderTextColor='#9ca3af'\n className='px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white rounded-md'\n />\n </View>\n\n {/* Countries list */}\n <ScrollView className='max-h-80'>\n {filteredCountries.length === 0 ? (\n <View className='px-3 py-4 items-center'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n No countries found\n </Text>\n </View>\n ) : (\n filteredCountries.map(country => (\n <Pressable\n key={country.code}\n onPress={() => handleCountrySelect(country.code)}\n className={cn(\n 'flex-row items-center gap-3 px-4 py-3',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n country.code === selectedCountryCode &&\n 'bg-blue-50 dark:bg-blue-900/30'\n )}\n accessibilityRole='button'\n >\n <Text className='text-xl'>{country.flag}</Text>\n <Text className='flex-1 text-sm text-gray-900 dark:text-white'>\n {country.name}\n </Text>\n <Text className='text-sm text-gray-600 dark:text-gray-400'>\n {country.dialCode}\n </Text>\n </Pressable>\n ))\n )}\n </ScrollView>\n\n {/* Done button */}\n <View className='p-3 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={() => setIsOpen(false)}\n className='items-center py-3'\n accessibilityRole='button'\n >\n <Text className='text-sm font-medium text-blue-600 dark:text-blue-400'>\n Done\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useEffect } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n ScrollView,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TimePickerProps {\n /** Time value in HH:mm format (24-hour) */\n value: string;\n /** Change handler */\n onChange: (value: string) => void;\n /** Use 12-hour format */\n use12Hour?: boolean;\n /** Minute step interval */\n minuteStep?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TimePicker Component\n *\n * Time selection with scrollable columns.\n * Supports 12-hour and 24-hour formats.\n *\n * @example\n * ```tsx\n * <TimePicker\n * value={time}\n * onChange={setTime}\n * use12Hour\n * minuteStep={15}\n * />\n * ```\n */\nexport const TimePicker: React.FC<TimePickerProps> = ({\n value,\n onChange,\n use12Hour = false,\n minuteStep = 1,\n disabled = false,\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [internalHour, setInternalHour] = useState('12');\n const [internalMinute, setInternalMinute] = useState('00');\n const [period, setPeriod] = useState<'AM' | 'PM'>('AM');\n\n // Parse value to hours and minutes\n useEffect(() => {\n if (value) {\n const [hours, minutes] = value.split(':');\n const hour = parseInt(hours, 10);\n\n if (use12Hour) {\n const isPM = hour >= 12;\n const hour12 = hour === 0 ? 12 : hour > 12 ? hour - 12 : hour;\n setInternalHour(hour12.toString().padStart(2, '0'));\n setPeriod(isPM ? 'PM' : 'AM');\n } else {\n setInternalHour(hours);\n }\n\n setInternalMinute(minutes);\n }\n }, [value, use12Hour]);\n\n // Format display value\n const formatDisplay = (): string => {\n if (!value) return 'Select time';\n\n const [hours, minutes] = value.split(':');\n const hour = parseInt(hours, 10);\n\n if (use12Hour) {\n const hour12 = hour === 0 ? 12 : hour > 12 ? hour - 12 : hour;\n const displayPeriod = hour >= 12 ? 'PM' : 'AM';\n return `${hour12}:${minutes} ${displayPeriod}`;\n }\n\n return `${hours}:${minutes}`;\n };\n\n // Handle time selection\n const handleTimeChange = (\n newHour: string,\n newMinute: string,\n newPeriod?: 'AM' | 'PM'\n ) => {\n let hour = parseInt(newHour, 10);\n const minute = parseInt(newMinute, 10);\n\n if (use12Hour && newPeriod) {\n if (newPeriod === 'PM' && hour !== 12) {\n hour += 12;\n } else if (newPeriod === 'AM' && hour === 12) {\n hour = 0;\n }\n }\n\n const formattedTime = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;\n onChange(formattedTime);\n };\n\n // Generate hour options\n const hourOptions = use12Hour\n ? Array.from({ length: 12 }, (_, i) => (i + 1).toString().padStart(2, '0'))\n : Array.from({ length: 24 }, (_, i) => i.toString().padStart(2, '0'));\n\n // Generate minute options\n const minuteOptions = Array.from(\n { length: Math.ceil(60 / minuteStep) },\n (_, i) => (i * minuteStep).toString().padStart(2, '0')\n );\n\n return (\n <View className={cn('w-full', className)}>\n {/* Input trigger */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center justify-between px-3 py-2',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Select time'\n >\n <Text\n className={cn(\n 'text-sm',\n value\n ? 'text-gray-900 dark:text-white'\n : 'text-gray-500 dark:text-gray-400'\n )}\n >\n {formatDisplay()}\n </Text>\n <Text className='text-gray-600 dark:text-gray-400'>🕐</Text>\n </Pressable>\n\n {/* Time picker modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='slide'\n onRequestClose={() => setIsOpen(false)}\n >\n <TouchableWithoutFeedback onPress={() => setIsOpen(false)}>\n <View className='flex-1 justify-end bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-t-xl'>\n <View className='flex-row p-4 gap-2'>\n {/* Hours */}\n <View className='flex-1'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 text-center mb-2'>\n Hour\n </Text>\n <ScrollView className='h-48 border border-gray-200 dark:border-gray-700 rounded'>\n {hourOptions.map(hour => (\n <Pressable\n key={hour}\n onPress={() => {\n setInternalHour(hour);\n handleTimeChange(\n hour,\n internalMinute,\n use12Hour ? period : undefined\n );\n }}\n className={cn(\n 'px-3 py-2',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n hour === internalHour &&\n 'bg-blue-100 dark:bg-blue-900/30'\n )}\n >\n <Text\n className={cn(\n 'text-sm text-center',\n hour === internalHour\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n {hour}\n </Text>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n\n {/* Minutes */}\n <View className='flex-1'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 text-center mb-2'>\n Min\n </Text>\n <ScrollView className='h-48 border border-gray-200 dark:border-gray-700 rounded'>\n {minuteOptions.map(minute => (\n <Pressable\n key={minute}\n onPress={() => {\n setInternalMinute(minute);\n handleTimeChange(\n internalHour,\n minute,\n use12Hour ? period : undefined\n );\n }}\n className={cn(\n 'px-3 py-2',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n minute === internalMinute &&\n 'bg-blue-100 dark:bg-blue-900/30'\n )}\n >\n <Text\n className={cn(\n 'text-sm text-center',\n minute === internalMinute\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n {minute}\n </Text>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n\n {/* AM/PM */}\n {use12Hour && (\n <View className='w-16'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 text-center mb-2'>\n {' '}\n </Text>\n <View className='h-48 justify-center gap-2'>\n <Pressable\n onPress={() => {\n setPeriod('AM');\n handleTimeChange(\n internalHour,\n internalMinute,\n 'AM'\n );\n }}\n className={cn(\n 'px-3 py-2 rounded',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n period === 'AM' && 'bg-blue-100 dark:bg-blue-900/30'\n )}\n >\n <Text\n className={cn(\n 'text-sm text-center',\n period === 'AM'\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n AM\n </Text>\n </Pressable>\n <Pressable\n onPress={() => {\n setPeriod('PM');\n handleTimeChange(\n internalHour,\n internalMinute,\n 'PM'\n );\n }}\n className={cn(\n 'px-3 py-2 rounded',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n period === 'PM' && 'bg-blue-100 dark:bg-blue-900/30'\n )}\n >\n <Text\n className={cn(\n 'text-sm text-center',\n period === 'PM'\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n PM\n </Text>\n </Pressable>\n </View>\n </View>\n )}\n </View>\n\n {/* Done button */}\n <View className='p-3 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={() => setIsOpen(false)}\n className='items-center py-3'\n >\n <Text className='text-sm font-medium text-blue-600 dark:text-blue-400'>\n Done\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n TextInput,\n Pressable,\n Modal,\n ScrollView,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ComboboxOption {\n /** Option value */\n value: string;\n /** Option label */\n label: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n /** Available options */\n options: ComboboxOption[];\n /** Selected value */\n value?: string;\n /** Change handler */\n onChange: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** Empty state message */\n emptyMessage?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Combobox Component\n *\n * Searchable select dropdown.\n * Combines input and select functionality.\n *\n * @example\n * ```tsx\n * <Combobox\n * options={[\n * { value: 'apple', label: 'Apple' },\n * { value: 'banana', label: 'Banana' },\n * { value: 'orange', label: 'Orange' }\n * ]}\n * value={selectedFruit}\n * onChange={setSelectedFruit}\n * placeholder=\"Select a fruit...\"\n * />\n * ```\n */\nexport const Combobox: React.FC<ComboboxProps> = ({\n options,\n value,\n onChange,\n placeholder = 'Select option...',\n searchPlaceholder = 'Search...',\n emptyMessage = 'No results found.',\n disabled = false,\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n // Filter options based on search query\n const filteredOptions = options.filter(option =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n // Get selected option label\n const selectedOption = options.find(opt => opt.value === value);\n\n const handleSelect = useCallback(\n (optionValue: string, optionDisabled?: boolean) => {\n if (optionDisabled) return;\n onChange(optionValue);\n setIsOpen(false);\n setSearchQuery('');\n },\n [onChange]\n );\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setSearchQuery('');\n }, []);\n\n return (\n <View className={cn('w-full', className)}>\n {/* Trigger Button */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center justify-between px-3 py-2',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={placeholder}\n accessibilityState={{ disabled, expanded: isOpen }}\n >\n <Text\n className={cn(\n 'flex-1 text-sm',\n selectedOption\n ? 'text-gray-900 dark:text-white'\n : 'text-gray-500 dark:text-gray-400'\n )}\n numberOfLines={1}\n >\n {selectedOption ? selectedOption.label : placeholder}\n </Text>\n <Text className='text-gray-600 dark:text-gray-400 ml-2'>▼</Text>\n </Pressable>\n\n {/* Dropdown Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1 justify-center px-4 bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-lg max-h-[70%] shadow-xl'>\n {/* Search Input */}\n <View className='p-3 border-b border-gray-200 dark:border-gray-700'>\n <TextInput\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder={searchPlaceholder}\n placeholderTextColor='#9ca3af'\n autoFocus\n className='px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white rounded-md'\n />\n </View>\n\n {/* Options List */}\n <ScrollView className='max-h-80'>\n {filteredOptions.length === 0 ? (\n <View className='px-3 py-4 items-center'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n {emptyMessage}\n </Text>\n </View>\n ) : (\n filteredOptions.map(option => (\n <Pressable\n key={option.value}\n onPress={() =>\n handleSelect(option.value, option.disabled)\n }\n disabled={option.disabled}\n className={cn(\n 'px-4 py-3',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n option.disabled && 'opacity-50',\n option.value === value &&\n 'bg-blue-50 dark:bg-blue-900/30'\n )}\n accessibilityRole='button'\n accessibilityState={{\n selected: option.value === value,\n disabled: option.disabled,\n }}\n >\n <Text\n className={cn(\n 'text-sm',\n option.value === value\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n {option.label}\n </Text>\n </Pressable>\n ))\n )}\n </ScrollView>\n\n {/* Close button */}\n <View className='p-3 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={handleClose}\n className='items-center py-2'\n accessibilityRole='button'\n accessibilityLabel='Close'\n >\n <Text className='text-sm font-medium text-gray-600 dark:text-gray-400'>\n Cancel\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TreeNode {\n /** Node ID */\n id: string;\n /** Node label */\n label: string;\n /** Node icon */\n icon?: React.ReactNode;\n /** Child nodes */\n children?: TreeNode[];\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport interface TreeViewProps {\n /** Tree data */\n data: TreeNode[];\n /** Selected node ID */\n selectedId?: string;\n /** Selection handler */\n onSelect?: (node: TreeNode) => void;\n /** Expanded node IDs */\n expandedIds?: string[];\n /** Expand handler */\n onExpand?: (nodeId: string) => void;\n /** Default expanded */\n defaultExpanded?: boolean;\n /** Show lines */\n showLines?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TreeView Component\n *\n * Hierarchical tree view with expand/collapse.\n * Supports selection, custom icons, and indentation lines.\n *\n * @example\n * ```tsx\n * <TreeView\n * data={fileTree}\n * selectedId={selectedNode}\n * onSelect={handleSelect}\n * showLines\n * />\n * ```\n */\nexport const TreeView: React.FC<TreeViewProps> = ({\n data,\n selectedId,\n onSelect,\n expandedIds: controlledExpandedIds,\n onExpand,\n defaultExpanded = false,\n showLines = false,\n className,\n}) => {\n const [internalExpandedIds, setInternalExpandedIds] = useState<Set<string>>(\n new Set(defaultExpanded ? data.map(node => node.id) : [])\n );\n\n const expandedIds =\n controlledExpandedIds !== undefined\n ? new Set(controlledExpandedIds)\n : internalExpandedIds;\n\n const toggleExpand = useCallback(\n (nodeId: string) => {\n if (controlledExpandedIds !== undefined && onExpand) {\n onExpand(nodeId);\n } else {\n setInternalExpandedIds(prev => {\n const newSet = new Set(prev);\n if (newSet.has(nodeId)) {\n newSet.delete(nodeId);\n } else {\n newSet.add(nodeId);\n }\n return newSet;\n });\n }\n },\n [controlledExpandedIds, onExpand]\n );\n\n const handleSelect = useCallback(\n (node: TreeNode) => {\n if (!node.disabled && onSelect) {\n onSelect(node);\n }\n },\n [onSelect]\n );\n\n const renderNode = (node: TreeNode, level: number = 0) => {\n const hasChildren = node.children && node.children.length > 0;\n const isExpanded = expandedIds.has(node.id);\n const isSelected = selectedId === node.id;\n\n return (\n <View key={node.id}>\n {/* Node item */}\n <Pressable\n onPress={() => handleSelect(node)}\n disabled={node.disabled}\n className={cn(\n 'flex-row items-center gap-2 px-2 py-1.5 rounded-md',\n !node.disabled && 'active:bg-gray-100 dark:active:bg-gray-800',\n isSelected && 'bg-blue-50 dark:bg-blue-900/30',\n node.disabled && 'opacity-50'\n )}\n style={{ paddingLeft: level * 24 + 8 }}\n accessibilityRole='button'\n accessibilityState={{ selected: isSelected, disabled: node.disabled }}\n >\n {/* Expand/collapse button */}\n {hasChildren ? (\n <Pressable\n onPress={() => toggleExpand(node.id)}\n className='w-4 h-4 items-center justify-center active:bg-gray-200 dark:active:bg-gray-700 rounded'\n hitSlop={8}\n accessibilityRole='button'\n accessibilityLabel={isExpanded ? 'Collapse' : 'Expand'}\n >\n <Text\n className={cn(\n 'text-xs text-gray-600 dark:text-gray-400',\n isExpanded && 'rotate-90'\n )}\n >\n ▶\n </Text>\n </Pressable>\n ) : (\n <View className='w-4 h-4' />\n )}\n\n {/* Icon */}\n {node.icon && (\n <View className='w-4 h-4 flex-shrink-0'>{node.icon}</View>\n )}\n\n {/* Label */}\n <Text\n className={cn(\n 'flex-1 text-sm',\n isSelected\n ? 'text-blue-700 dark:text-blue-300 font-medium'\n : 'text-gray-900 dark:text-white'\n )}\n >\n {node.label}\n </Text>\n </Pressable>\n\n {/* Children */}\n {hasChildren && isExpanded && (\n <View\n className={cn(\n showLines &&\n 'border-l-2 border-gray-200 dark:border-gray-700 ml-2'\n )}\n >\n {node.children!.map(child => renderNode(child, level + 1))}\n </View>\n )}\n </View>\n );\n };\n\n return (\n <View className={cn('w-full', className)}>\n {data.map(node => renderNode(node, 0))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport { View, Text, Pressable, Linking } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AddressLinkProps {\n /** The blockchain address to display */\n address: string;\n /** Chain ID for EVM chains (positive) or Solana chains (negative) */\n chainId?: number;\n /** Block explorer base URL (if not using chainId) */\n explorerUrl?: string;\n /** Label to display before the address */\n label?: string;\n /** Display format: 'short' (default), 'medium', or 'full' */\n format?: 'short' | 'medium' | 'full';\n /** Show copy button */\n showCopy?: boolean;\n /** Show explorer link button */\n showExplorer?: boolean;\n /** Custom copy handler - receives address string */\n onCopy?: (address: string) => Promise<void>;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Get block explorer URL for an address\n */\nconst getExplorerUrl = (\n address: string,\n chainId?: number,\n explorerUrl?: string\n): string | null => {\n if (explorerUrl) {\n return `${explorerUrl}/address/${address}`;\n }\n\n if (!chainId) {\n return null;\n }\n\n // Solana chains (negative chainIds)\n if (chainId < 0) {\n const cluster =\n chainId === -101\n ? ''\n : chainId === -102\n ? '?cluster=devnet'\n : '?cluster=testnet';\n return `https://explorer.solana.com/address/${address}${cluster}`;\n }\n\n // EVM chains\n const explorerMap: Record<number, string> = {\n 1: 'https://etherscan.io',\n 11155111: 'https://sepolia.etherscan.io',\n 5: 'https://goerli.etherscan.io',\n 137: 'https://polygonscan.com',\n 80002: 'https://amoy.polygonscan.com',\n 42161: 'https://arbiscan.io',\n 421614: 'https://sepolia.arbiscan.io',\n 10: 'https://optimistic.etherscan.io',\n 11155420: 'https://sepolia-optimism.etherscan.io',\n 8453: 'https://basescan.org',\n 84532: 'https://sepolia.basescan.org',\n };\n\n const baseUrl = explorerMap[chainId];\n if (!baseUrl) {\n return null;\n }\n\n return `${baseUrl}/address/${address}`;\n};\n\n/**\n * Format address based on display format\n */\nconst formatAddress = (\n address: string,\n format: 'short' | 'medium' | 'full'\n): string => {\n if (format === 'full') {\n return address;\n }\n\n if (format === 'medium') {\n return `${address.substring(0, 10)}...${address.substring(address.length - 8)}`;\n }\n\n return `${address.substring(0, 6)}...${address.substring(address.length - 4)}`;\n};\n\n/**\n * AddressLink Component\n *\n * Displays a blockchain address with copy and block explorer link functionality.\n * Supports both EVM chains and Solana chains.\n *\n * @example\n * ```tsx\n * <AddressLink\n * address=\"0x1234...5678\"\n * chainId={1}\n * showCopy\n * showExplorer\n * />\n * ```\n */\nexport const AddressLink: React.FC<AddressLinkProps> = ({\n address,\n chainId,\n explorerUrl,\n label,\n format = 'short',\n showCopy = true,\n showExplorer = true,\n onCopy,\n className,\n}) => {\n const [copied, setCopied] = useState(false);\n\n const formattedAddress = formatAddress(address, format);\n const explorerLink = getExplorerUrl(address, chainId, explorerUrl);\n\n const handleCopy = useCallback(async () => {\n if (!onCopy) return;\n try {\n await onCopy(address);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Copy failed\n }\n }, [address, onCopy]);\n\n const handleOpenExplorer = useCallback(() => {\n if (explorerLink) {\n Linking.openURL(explorerLink);\n }\n }, [explorerLink]);\n\n return (\n <View className={cn('flex-row items-center gap-2', className)}>\n {label && (\n <Text className='text-sm text-gray-600 dark:text-gray-400'>\n {label}:\n </Text>\n )}\n\n <Text\n className={cn(\n 'font-mono text-sm text-gray-900 dark:text-white',\n format === 'full' && 'flex-1'\n )}\n numberOfLines={format === 'full' ? undefined : 1}\n >\n {formattedAddress}\n </Text>\n\n <View className='flex-row items-center gap-1'>\n {showCopy && onCopy && (\n <Pressable\n onPress={handleCopy}\n className='p-1 rounded active:bg-gray-100 dark:active:bg-gray-800'\n accessibilityRole='button'\n accessibilityLabel={copied ? 'Copied!' : 'Copy address'}\n >\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n {copied ? '✓' : '📋'}\n </Text>\n </Pressable>\n )}\n\n {showExplorer && explorerLink && (\n <Pressable\n onPress={handleOpenExplorer}\n className='p-1 rounded active:bg-gray-100 dark:active:bg-gray-800'\n accessibilityRole='link'\n accessibilityLabel='View on block explorer'\n >\n <Text className='text-sm text-blue-600 dark:text-blue-400'>↗</Text>\n </Pressable>\n )}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, ScrollView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CodeDisplayProps {\n /** Code or text to display */\n children: React.ReactNode;\n /** Visual variant */\n variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'neutral';\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg';\n /** Display as inline or block */\n inline?: boolean;\n /** Text alignment (for block display) */\n align?: 'left' | 'center' | 'right';\n /** Whether to enable text wrapping */\n wrap?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * CodeDisplay Component\n *\n * Displays code, wallet addresses, or monospace text in a styled container.\n * Commonly used for displaying blockchain addresses, code snippets, or\n * technical identifiers.\n *\n * @example\n * ```tsx\n * <CodeDisplay variant=\"primary\" size=\"lg\" align=\"center\">\n * wallet@example.com\n * </CodeDisplay>\n * ```\n *\n * @example\n * ```tsx\n * <CodeDisplay variant=\"success\" inline>\n * 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb\n * </CodeDisplay>\n * ```\n */\nexport const CodeDisplay: React.FC<CodeDisplayProps> = ({\n children,\n variant = 'primary',\n size = 'md',\n inline = false,\n align = 'left',\n wrap = false,\n className,\n}) => {\n // Color variant configurations\n const variantClasses = {\n primary: 'text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/30',\n secondary:\n 'text-purple-600 dark:text-purple-400 bg-purple-50 dark:bg-purple-900/30',\n success:\n 'text-green-600 dark:text-green-400 bg-green-50 dark:bg-green-900/30',\n warning:\n 'text-yellow-700 dark:text-yellow-400 bg-yellow-50 dark:bg-yellow-900/30',\n neutral: 'text-gray-700 dark:text-gray-300 bg-gray-100 dark:bg-gray-800',\n };\n\n // Size configurations\n const sizeClasses = {\n xs: {\n text: 'text-xs',\n padding: inline ? 'px-1.5 py-0.5' : 'px-2 py-1',\n },\n sm: {\n text: 'text-sm',\n padding: inline ? 'px-2 py-0.5' : 'px-3 py-1.5',\n },\n md: {\n text: 'text-base',\n padding: inline ? 'px-2.5 py-1' : 'px-4 py-2',\n },\n lg: {\n text: 'text-lg',\n padding: inline ? 'px-3 py-1' : 'px-4 py-2',\n },\n };\n\n // Text alignment classes\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n\n const sizeConfig = sizeClasses[size];\n\n // Extract background and text color classes\n const [textColorClass, bgClass] = variantClasses[variant].split(' ');\n\n if (inline) {\n return (\n <Text\n className={cn(\n 'font-mono rounded-lg',\n textColorClass,\n bgClass,\n sizeConfig.text,\n sizeConfig.padding,\n className\n )}\n >\n {children}\n </Text>\n );\n }\n\n const content = (\n <Text\n className={cn(\n 'font-mono',\n textColorClass,\n sizeConfig.text,\n !inline && alignClasses[align],\n wrap ? 'flex-wrap' : ''\n )}\n numberOfLines={wrap ? undefined : 1}\n >\n {children}\n </Text>\n );\n\n if (wrap) {\n return (\n <View\n className={cn('rounded-lg', bgClass, sizeConfig.padding, className)}\n >\n {content}\n </View>\n );\n }\n\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n className={cn('rounded-lg', bgClass, className)}\n contentContainerStyle={{ padding: 0 }}\n >\n <View className={sizeConfig.padding}>{content}</View>\n </ScrollView>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { Calendar } from '../Calendar';\n\nexport interface DateInputProps {\n /** Current value (ISO date string YYYY-MM-DD or Date object) */\n value: string | Date;\n /** Callback when value changes */\n onChange: (value: string) => void;\n /** Minimum date */\n minDate?: Date;\n /** Maximum date */\n maxDate?: Date;\n /** Disabled state */\n disabled?: boolean;\n /** Placeholder text */\n placeholder?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * DateInput Component\n *\n * Date input field that opens a calendar picker.\n * Displays selected date in a readable format.\n *\n * @example\n * ```tsx\n * <DateInput\n * value={startDate}\n * onChange={setStartDate}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <DateInput\n * value={appointmentDate}\n * onChange={setAppointmentDate}\n * minDate={new Date()}\n * placeholder=\"Select date\"\n * />\n * ```\n */\nexport const DateInput: React.FC<DateInputProps> = ({\n value,\n onChange,\n minDate,\n maxDate,\n disabled = false,\n placeholder = 'Select date',\n size = 'md',\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Size configurations\n const sizeClasses = {\n sm: 'py-1.5 px-3 text-sm',\n md: 'py-2 px-4 text-base',\n lg: 'py-3 px-4 text-lg',\n };\n\n // Convert value to Date\n const dateValue =\n value instanceof Date ? value : value ? new Date(value) : null;\n\n // Format date for display\n const formatDisplay = (date: Date | null): string => {\n if (!date) return '';\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n };\n\n // Handle date selection\n const handleDateChange = useCallback(\n (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n onChange(`${year}-${month}-${day}`);\n setIsOpen(false);\n },\n [onChange]\n );\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n return (\n <View className={cn('w-full', className)}>\n {/* Trigger Button */}\n <Pressable\n onPress={() => !disabled && setIsOpen(true)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center justify-between',\n 'bg-white dark:bg-gray-800',\n 'border border-gray-300 dark:border-gray-600',\n 'rounded-lg',\n sizeClasses[size],\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={placeholder}\n accessibilityState={{ disabled }}\n >\n <Text\n className={cn(\n 'flex-1',\n dateValue\n ? 'text-gray-900 dark:text-gray-100'\n : 'text-gray-400 dark:text-gray-500'\n )}\n >\n {dateValue ? formatDisplay(dateValue) : placeholder}\n </Text>\n <Text className='text-gray-400 dark:text-gray-500 ml-2'>📅</Text>\n </Pressable>\n\n {/* Calendar Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1 justify-center px-4 bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-lg p-4 shadow-xl'>\n <Calendar\n value={dateValue || new Date()}\n onChange={handleDateChange}\n minDate={minDate}\n maxDate={maxDate}\n />\n\n {/* Close button */}\n <View className='mt-4 pt-4 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={handleClose}\n className='items-center py-2'\n accessibilityRole='button'\n accessibilityLabel='Cancel'\n >\n <Text className='text-sm font-medium text-gray-600 dark:text-gray-400'>\n Cancel\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Modal,\n TouchableWithoutFeedback,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { Calendar } from '../Calendar';\nimport { TimePicker } from '../TimePicker';\n\nexport interface DateTimePickerProps {\n /** Date time value */\n value: Date;\n /** Change handler */\n onChange: (value: Date) => void;\n /** Use 12-hour format for time */\n use12Hour?: boolean;\n /** Minute step interval */\n minuteStep?: number;\n /** Minimum date */\n minDate?: Date;\n /** Maximum date */\n maxDate?: Date;\n /** Disabled state */\n disabled?: boolean;\n /** Placeholder text */\n placeholder?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * DateTimePicker Component\n *\n * Combined date and time picker with calendar and time selection.\n * Supports min/max dates and 12/24 hour formats.\n *\n * @example\n * ```tsx\n * <DateTimePicker\n * value={appointment}\n * onChange={setAppointment}\n * use12Hour\n * minDate={new Date()}\n * />\n * ```\n */\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n value,\n onChange,\n use12Hour = false,\n minuteStep = 1,\n minDate,\n maxDate,\n disabled = false,\n placeholder = 'Select date and time',\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedDate, setSelectedDate] = useState<Date>(value);\n\n // Format date time for display\n const formatDisplay = (date: Date): string => {\n const dateStr = date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n\n const hours = date.getHours();\n const minutes = date.getMinutes();\n\n if (use12Hour) {\n const hour12 = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\n const period = hours >= 12 ? 'PM' : 'AM';\n return `${dateStr}, ${hour12}:${minutes.toString().padStart(2, '0')} ${period}`;\n }\n\n return `${dateStr}, ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n };\n\n // Handle date change\n const handleDateChange = useCallback(\n (date: Date) => {\n const newDateTime = new Date(date);\n newDateTime.setHours(selectedDate.getHours());\n newDateTime.setMinutes(selectedDate.getMinutes());\n setSelectedDate(newDateTime);\n },\n [selectedDate]\n );\n\n // Handle time change\n const handleTimeChange = useCallback(\n (timeStr: string) => {\n const [hours, minutes] = timeStr.split(':').map(Number);\n const newDateTime = new Date(selectedDate);\n newDateTime.setHours(hours);\n newDateTime.setMinutes(minutes);\n setSelectedDate(newDateTime);\n },\n [selectedDate]\n );\n\n // Get time string from date\n const getTimeString = (date: Date): string => {\n const hours = date.getHours();\n const minutes = date.getMinutes();\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n };\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setSelectedDate(value);\n }, [value]);\n\n const handleConfirm = useCallback(() => {\n onChange(selectedDate);\n setIsOpen(false);\n }, [selectedDate, onChange]);\n\n const handleOpen = useCallback(() => {\n setSelectedDate(value);\n setIsOpen(true);\n }, [value]);\n\n return (\n <View className={cn('w-full', className)}>\n {/* Trigger Button */}\n <Pressable\n onPress={() => !disabled && handleOpen()}\n disabled={disabled}\n className={cn(\n 'flex-row items-center justify-between px-3 py-2',\n 'bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={placeholder}\n accessibilityState={{ disabled }}\n >\n <Text className='text-sm text-gray-900 dark:text-white'>\n {formatDisplay(value)}\n </Text>\n <Text className='text-gray-600 dark:text-gray-400'>📅</Text>\n </Pressable>\n\n {/* Picker Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={handleClose}\n >\n <TouchableWithoutFeedback onPress={handleClose}>\n <View className='flex-1 justify-center px-4 bg-black/50'>\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-lg p-4 shadow-xl'>\n {/* Calendar */}\n <View className='mb-4'>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 mb-2'>\n Select Date\n </Text>\n <Calendar\n value={selectedDate}\n onChange={handleDateChange}\n minDate={minDate}\n maxDate={maxDate}\n />\n </View>\n\n {/* Divider */}\n <View className='h-px bg-gray-200 dark:bg-gray-700 my-3' />\n\n {/* Time picker */}\n <View>\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 mb-2'>\n Select Time\n </Text>\n <TimePicker\n value={getTimeString(selectedDate)}\n onChange={handleTimeChange}\n use12Hour={use12Hour}\n minuteStep={minuteStep}\n />\n </View>\n\n {/* Actions */}\n <View className='flex-row gap-2 pt-4 mt-4 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={handleClose}\n className={cn(\n 'flex-1 items-center py-2',\n 'bg-gray-100 dark:bg-gray-800',\n 'rounded-md',\n 'active:bg-gray-200 dark:active:bg-gray-700'\n )}\n accessibilityRole='button'\n accessibilityLabel='Cancel'\n >\n <Text className='text-sm text-gray-700 dark:text-gray-300'>\n Cancel\n </Text>\n </Pressable>\n <Pressable\n onPress={handleConfirm}\n className={cn(\n 'flex-1 items-center py-2',\n 'bg-blue-600 dark:bg-blue-500',\n 'rounded-md',\n 'active:bg-blue-700 dark:active:bg-blue-600'\n )}\n accessibilityRole='button'\n accessibilityLabel='Confirm'\n >\n <Text className='text-sm text-white font-medium'>OK</Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport {\n View,\n Text,\n FlatList,\n ActivityIndicator,\n Pressable,\n RefreshControl,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface InfiniteScrollProps<T> {\n /** Data items to render */\n data: T[];\n /** Render function for each item */\n renderItem: (item: T, index: number) => React.ReactNode;\n /** Key extractor for list items */\n keyExtractor: (item: T, index: number) => string;\n /** Load more callback */\n onLoadMore: () => void | Promise<void>;\n /** Loading state */\n loading?: boolean;\n /** Has more data */\n hasMore?: boolean;\n /** Pull to refresh handler */\n onRefresh?: () => void | Promise<void>;\n /** Refreshing state */\n refreshing?: boolean;\n /** Loading component */\n loader?: React.ReactNode;\n /** End message component */\n endMessage?: React.ReactNode;\n /** Empty state component */\n emptyComponent?: React.ReactNode;\n /** List header component */\n headerComponent?: React.ReactNode;\n /** Threshold to trigger load more (0-1) */\n threshold?: number;\n /** Horizontal scroll */\n horizontal?: boolean;\n /** Show scroll to top button */\n showScrollTop?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * InfiniteScroll Component\n *\n * FlatList wrapper with infinite scrolling support.\n * Automatically loads more data when approaching the end.\n *\n * @example\n * ```tsx\n * <InfiniteScroll\n * data={items}\n * renderItem={(item) => <ItemCard {...item} />}\n * keyExtractor={(item) => item.id}\n * onLoadMore={loadMoreItems}\n * loading={isLoading}\n * hasMore={hasNextPage}\n * />\n * ```\n */\nexport function InfiniteScroll<T>({\n data,\n renderItem,\n keyExtractor,\n onLoadMore,\n loading = false,\n hasMore = true,\n onRefresh,\n refreshing = false,\n loader,\n endMessage,\n emptyComponent,\n headerComponent,\n threshold = 0.5,\n horizontal = false,\n showScrollTop = false,\n className,\n}: InfiniteScrollProps<T>) {\n const flatListRef = React.useRef<FlatList>(null);\n const [showScrollTopButton, setShowScrollTopButton] = React.useState(false);\n\n // Handle end reached\n const handleEndReached = useCallback(() => {\n if (!loading && hasMore) {\n onLoadMore();\n }\n }, [loading, hasMore, onLoadMore]);\n\n // Handle scroll for scroll-to-top button\n const handleScroll = useCallback(\n (event: { nativeEvent: { contentOffset: { y: number } } }) => {\n if (showScrollTop && !horizontal) {\n setShowScrollTopButton(event.nativeEvent.contentOffset.y > 300);\n }\n },\n [showScrollTop, horizontal]\n );\n\n // Scroll to top\n const scrollToTop = useCallback(() => {\n flatListRef.current?.scrollToOffset({ offset: 0, animated: true });\n }, []);\n\n // Default empty component\n const defaultEmptyComponent = (\n <View className='flex-1 justify-center items-center py-8'>\n <Text className='text-gray-500 dark:text-gray-400'>No items found</Text>\n </View>\n );\n\n // Footer component\n const ListFooterComponent = useCallback(() => {\n const footerLoader = (\n <View className='flex-row justify-center items-center py-4'>\n <ActivityIndicator size='small' color='#3b82f6' />\n <Text className='ml-2 text-sm text-gray-600 dark:text-gray-400'>\n Loading...\n </Text>\n </View>\n );\n\n const footerEndMessage = (\n <View className='flex-row justify-center items-center py-4'>\n <Text className='text-sm text-gray-600 dark:text-gray-400'>\n No more items to load\n </Text>\n </View>\n );\n\n if (loading) {\n return <>{loader || footerLoader}</>;\n }\n if (!hasMore && data.length > 0) {\n return <>{endMessage || footerEndMessage}</>;\n }\n return null;\n }, [loading, hasMore, data.length, loader, endMessage]);\n\n return (\n <View className={cn('flex-1', className)}>\n <FlatList\n ref={flatListRef}\n data={data}\n renderItem={({ item, index }: { item: T; index: number }) => (\n <>{renderItem(item, index)}</>\n )}\n keyExtractor={keyExtractor}\n onEndReached={handleEndReached}\n onEndReachedThreshold={threshold}\n horizontal={horizontal}\n showsVerticalScrollIndicator={!horizontal}\n showsHorizontalScrollIndicator={horizontal}\n ListHeaderComponent={headerComponent ? <>{headerComponent}</> : null}\n ListFooterComponent={ListFooterComponent}\n ListEmptyComponent={\n !loading ? <>{emptyComponent || defaultEmptyComponent}</> : null\n }\n onScroll={showScrollTop ? handleScroll : undefined}\n scrollEventThrottle={showScrollTop ? 16 : undefined}\n refreshControl={\n onRefresh ? (\n <RefreshControl refreshing={refreshing} onRefresh={onRefresh} />\n ) : undefined\n }\n />\n\n {/* Scroll to top button */}\n {showScrollTop && showScrollTopButton && (\n <Pressable\n onPress={scrollToTop}\n className={cn(\n 'absolute bottom-4 right-4',\n 'w-12 h-12 rounded-full',\n 'bg-blue-600 dark:bg-blue-500',\n 'items-center justify-center',\n 'shadow-lg',\n 'active:bg-blue-700 dark:active:bg-blue-600'\n )}\n accessibilityRole='button'\n accessibilityLabel='Scroll to top'\n >\n <Text className='text-white text-lg'>↑</Text>\n </Pressable>\n )}\n </View>\n );\n}\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport { Text, Pressable, Linking } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ExternalLinkProps {\n /** Link URL */\n href: string;\n /** Link text content */\n children: React.ReactNode;\n /** Show external icon */\n showIcon?: boolean;\n /** Icon position */\n iconPosition?: 'left' | 'right';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'primary' | 'muted';\n /** Additional className */\n className?: string;\n /** Press handler (called before navigation) */\n onPress?: () => void;\n}\n\n/**\n * ExternalLink Component\n *\n * Opens external URLs in the device browser.\n * Includes optional external link icon indicator.\n *\n * @example\n * ```tsx\n * <ExternalLink href=\"https://example.com\">\n * Visit Example\n * </ExternalLink>\n * ```\n *\n * @example\n * ```tsx\n * <ExternalLink\n * href=\"https://docs.example.com\"\n * variant=\"primary\"\n * iconPosition=\"left\"\n * >\n * Read Documentation\n * </ExternalLink>\n * ```\n */\nexport const ExternalLink: React.FC<ExternalLinkProps> = ({\n href,\n children,\n showIcon = true,\n iconPosition = 'right',\n size = 'md',\n variant = 'default',\n className,\n onPress,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n // Color variant configurations\n const variantClasses = {\n default: 'text-blue-600 dark:text-blue-400',\n primary: 'text-blue-700 dark:text-blue-300 font-semibold',\n muted: 'text-gray-600 dark:text-gray-400',\n };\n\n const handlePress = useCallback(async () => {\n onPress?.();\n try {\n const canOpen = await Linking.canOpenURL(href);\n if (canOpen) {\n await Linking.openURL(href);\n }\n } catch {\n // Failed to open URL\n }\n }, [href, onPress]);\n\n return (\n <Pressable\n onPress={handlePress}\n className={cn('flex-row items-center gap-1', className)}\n accessibilityRole='link'\n accessibilityLabel={\n typeof children === 'string' ? children : 'External link'\n }\n accessibilityHint='Opens in external browser'\n >\n {showIcon && iconPosition === 'left' && (\n <Text className={cn(sizeClasses[size], variantClasses[variant])}>\n ↗\n </Text>\n )}\n <Text\n className={cn(sizeClasses[size], variantClasses[variant], 'underline')}\n >\n {children}\n </Text>\n {showIcon && iconPosition === 'right' && (\n <Text className={cn(sizeClasses[size], variantClasses[variant])}>\n ↗\n </Text>\n )}\n </Pressable>\n );\n};\n","import * as React from 'react';\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n View,\n Text,\n TextInput,\n Pressable,\n Modal,\n TouchableWithoutFeedback,\n KeyboardAvoidingView,\n Platform,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TextInputModalProps {\n /** Modal visibility */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Submit handler */\n onSubmit: (value: string) => void | Promise<void>;\n /** Modal title */\n title: string;\n /** Modal description */\n description: string;\n /** Input placeholder */\n placeholder?: string;\n /** Initial input value */\n initialValue?: string;\n /** Cancel button text */\n cancelText?: string;\n /** Confirm button text */\n confirmText?: string;\n /** Loading state */\n isLoading?: boolean;\n /** Loading button text */\n loadingText?: string;\n /** Max input length */\n maxLength?: number;\n /** Required validation */\n required?: boolean;\n /** Custom validation function */\n validate?: (value: string) => string | null;\n}\n\n/**\n * TextInputModal Component\n *\n * Modal dialog with text input for collecting user input.\n * Supports validation, loading states, and customization.\n *\n * @example\n * ```tsx\n * <TextInputModal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * onSubmit={handleSubmit}\n * title=\"Rename Item\"\n * description=\"Enter a new name for this item\"\n * placeholder=\"New name...\"\n * initialValue={currentName}\n * />\n * ```\n */\nexport const TextInputModal: React.FC<TextInputModalProps> = ({\n isOpen,\n onClose,\n onSubmit,\n title,\n description,\n placeholder = '',\n initialValue = '',\n cancelText = 'Cancel',\n confirmText = 'Confirm',\n isLoading = false,\n loadingText = 'Processing...',\n maxLength,\n required = true,\n validate,\n}) => {\n const [value, setValue] = useState(initialValue);\n const [error, setError] = useState<string | null>(null);\n\n // Reset value when modal opens\n useEffect(() => {\n if (isOpen) {\n setValue(initialValue);\n setError(null);\n }\n }, [isOpen, initialValue]);\n\n const handleSubmit = useCallback(async () => {\n // Clear previous errors\n setError(null);\n\n // Validate required\n if (required && !value.trim()) {\n setError('This field is required');\n return;\n }\n\n // Custom validation\n if (validate) {\n const validationError = validate(value);\n if (validationError) {\n setError(validationError);\n return;\n }\n }\n\n // Submit\n try {\n await onSubmit(value.trim());\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An error occurred');\n }\n }, [value, required, validate, onSubmit]);\n\n const handleCancel = useCallback(() => {\n setValue(initialValue);\n setError(null);\n onClose();\n }, [initialValue, onClose]);\n\n const canSubmit = required ? value.trim().length > 0 : true;\n\n return (\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={isLoading ? undefined : handleCancel}\n >\n <TouchableWithoutFeedback onPress={isLoading ? undefined : handleCancel}>\n <View className='flex-1 justify-center px-4 bg-black/50'>\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n >\n <TouchableWithoutFeedback>\n <View className='bg-white dark:bg-gray-900 rounded-lg shadow-xl'>\n {/* Content */}\n <View className='p-4'>\n <Text className='text-lg font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n <Text className='text-sm text-gray-600 dark:text-gray-400 mt-2 mb-4'>\n {description}\n </Text>\n\n <TextInput\n value={value}\n onChangeText={setValue}\n placeholder={placeholder}\n placeholderTextColor='#9ca3af'\n maxLength={maxLength}\n editable={!isLoading}\n autoFocus\n className={cn(\n 'px-3 py-2 text-sm',\n 'bg-gray-50 dark:bg-gray-800',\n 'text-gray-900 dark:text-white',\n 'border rounded-md',\n error\n ? 'border-red-500 dark:border-red-400'\n : 'border-gray-300 dark:border-gray-600'\n )}\n accessibilityLabel={placeholder || title}\n />\n\n {error && (\n <Text\n className='text-xs text-red-600 dark:text-red-400 mt-2'\n accessibilityRole='alert'\n >\n {error}\n </Text>\n )}\n </View>\n\n {/* Footer */}\n <View className='flex-row gap-2 p-4 border-t border-gray-200 dark:border-gray-700'>\n <Pressable\n onPress={handleCancel}\n disabled={isLoading}\n className={cn(\n 'flex-1 items-center py-2',\n 'bg-gray-100 dark:bg-gray-800',\n 'rounded-md',\n 'active:bg-gray-200 dark:active:bg-gray-700',\n isLoading && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={cancelText}\n >\n <Text className='text-sm text-gray-700 dark:text-gray-300'>\n {cancelText}\n </Text>\n </Pressable>\n\n <Pressable\n onPress={handleSubmit}\n disabled={!canSubmit || isLoading}\n className={cn(\n 'flex-1 items-center py-2',\n 'bg-blue-600 dark:bg-blue-500',\n 'rounded-md',\n 'active:bg-blue-700 dark:active:bg-blue-600',\n (!canSubmit || isLoading) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={confirmText}\n >\n <Text className='text-sm text-white font-medium'>\n {isLoading ? loadingText : confirmText}\n </Text>\n </Pressable>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </KeyboardAvoidingView>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n );\n};\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\nimport { Alert } from '../Alert';\n\nexport interface FormAlertsProps {\n /** Success message to display */\n successMessage?: string;\n /** Error message to display */\n errorMessage?: string;\n /** Title for success alert */\n successTitle?: string;\n /** Title for error alert */\n errorTitle?: string;\n /** Auto-dismiss success message after milliseconds (0 = no auto-dismiss) */\n autoDismissDelay?: number;\n /** Callback when success message should be cleared */\n onSuccessDismiss?: () => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FormAlerts Component\n *\n * Displays success and error alerts for form submissions.\n * Success messages can auto-dismiss after a configured delay.\n *\n * @example\n * ```tsx\n * const [success, setSuccess] = useState('');\n * const [error, setError] = useState('');\n *\n * <FormAlerts\n * successMessage={success}\n * errorMessage={error}\n * onSuccessDismiss={() => setSuccess('')}\n * autoDismissDelay={3000}\n * />\n * ```\n */\nexport const FormAlerts: React.FC<FormAlertsProps> = ({\n successMessage,\n errorMessage,\n successTitle = 'Success',\n errorTitle = 'Error',\n autoDismissDelay = 0,\n onSuccessDismiss,\n className,\n}) => {\n // Auto-dismiss success message\n useEffect(() => {\n if (successMessage && autoDismissDelay > 0 && onSuccessDismiss) {\n const timer = setTimeout(() => {\n onSuccessDismiss();\n }, autoDismissDelay);\n\n return () => clearTimeout(timer);\n }\n }, [successMessage, autoDismissDelay, onSuccessDismiss]);\n\n if (!successMessage && !errorMessage) {\n return null;\n }\n\n return (\n <View className={cn('gap-3', className)}>\n {errorMessage && (\n <Alert variant='error' title={errorTitle} description={errorMessage} />\n )}\n {successMessage && (\n <Alert\n variant='success'\n title={successTitle}\n description={successMessage}\n />\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { ScrollView, View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ScrollAreaProps {\n /** Scrollable content */\n children: React.ReactNode;\n /** Maximum height */\n maxHeight?: number;\n /** Hide scrollbar */\n hideScrollbar?: boolean;\n /** Scroll direction */\n direction?: 'vertical' | 'horizontal' | 'both';\n /** Show scroll indicators */\n showsIndicator?: boolean;\n /** Additional className */\n className?: string;\n /** Content container className */\n contentClassName?: string;\n}\n\n/**\n * ScrollArea Component\n *\n * Container with scrollable content and optional scroll indicators.\n * Provides consistent scrollable areas across the application.\n *\n * @example\n * ```tsx\n * <ScrollArea maxHeight={400}>\n * <View>Long content...</View>\n * </ScrollArea>\n * ```\n *\n * @example\n * ```tsx\n * <ScrollArea direction=\"horizontal\" hideScrollbar>\n * <View className=\"w-[2000px]\">Wide content</View>\n * </ScrollArea>\n * ```\n */\nexport const ScrollArea: React.FC<ScrollAreaProps> = ({\n children,\n maxHeight,\n hideScrollbar = false,\n direction = 'vertical',\n showsIndicator = true,\n className,\n contentClassName,\n}) => {\n const isVertical = direction === 'vertical' || direction === 'both';\n const isHorizontal = direction === 'horizontal' || direction === 'both';\n\n return (\n <View\n className={cn('relative', className)}\n style={maxHeight ? { maxHeight } : undefined}\n >\n <ScrollView\n horizontal={direction === 'horizontal'}\n showsVerticalScrollIndicator={\n isVertical && showsIndicator && !hideScrollbar\n }\n showsHorizontalScrollIndicator={\n isHorizontal && showsIndicator && !hideScrollbar\n }\n scrollEnabled\n nestedScrollEnabled\n contentContainerStyle={\n direction === 'horizontal' ? { flexDirection: 'row' } : undefined\n }\n >\n <View className={contentClassName}>{children}</View>\n </ScrollView>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SectionBadgeProps {\n /** Icon element */\n icon: React.ReactNode;\n /** Badge text */\n text: string;\n /** Visual variant */\n variant?: 'default' | 'premium' | 'primary' | 'light';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * SectionBadge Component\n *\n * Badge with icon for section headers and feature highlights.\n * Commonly used for premium features, new features, or category labels.\n *\n * @example\n * ```tsx\n * <SectionBadge\n * icon={<StarIcon />}\n * text=\"Premium Feature\"\n * variant=\"premium\"\n * />\n * ```\n */\nexport const SectionBadge: React.FC<SectionBadgeProps> = ({\n icon,\n text,\n variant = 'default',\n size = 'md',\n className,\n}) => {\n // Variant color configurations\n const variantClasses = {\n default: 'bg-gray-100 dark:bg-gray-800',\n premium: 'bg-amber-100 dark:bg-amber-900/30',\n primary: 'bg-blue-100 dark:bg-blue-900/30',\n light:\n 'bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700',\n };\n\n const iconColorClasses = {\n default: 'text-gray-600 dark:text-gray-400',\n premium: 'text-amber-600 dark:text-amber-400',\n primary: 'text-blue-600 dark:text-blue-400',\n light: 'text-gray-600 dark:text-gray-400',\n };\n\n const textColorClasses = {\n default: 'text-gray-900 dark:text-white',\n premium: 'text-amber-900 dark:text-amber-100',\n primary: 'text-blue-900 dark:text-blue-100',\n light: 'text-gray-900 dark:text-white',\n };\n\n // Size configurations\n const sizeClasses = {\n sm: {\n container: 'px-4 py-2',\n iconSize: 'w-4 h-4',\n text: 'text-xs',\n },\n md: {\n container: 'px-6 py-3',\n iconSize: 'w-5 h-5',\n text: 'text-sm',\n },\n lg: {\n container: 'px-8 py-4',\n iconSize: 'w-6 h-6',\n text: 'text-base',\n },\n };\n\n const sizeConfig = sizeClasses[size];\n\n return (\n <View\n className={cn(\n 'flex-row items-center rounded-full mb-6',\n variantClasses[variant],\n sizeConfig.container,\n className\n )}\n >\n <View className={cn('mr-2', iconColorClasses[variant])}>{icon}</View>\n <Text\n className={cn(\n 'font-semibold',\n sizeConfig.text,\n textColorClasses[variant]\n )}\n >\n {text}\n </Text>\n </View>\n );\n};\n","import React from 'react';\nimport { View, Text, type ViewProps } from 'react-native';\nimport { cn } from '../lib/utils';\n\nexport type ChainType = 'evm' | 'solana' | 'bitcoin' | 'cosmos';\n\nexport interface ChainBadgeProps extends ViewProps {\n chainType: ChainType;\n size?: 'sm' | 'md' | 'lg';\n showLabel?: boolean;\n}\n\nconst chainConfig: Record<\n ChainType,\n { label: string; emoji: string; bgColor: string; textColor: string }\n> = {\n evm: {\n label: 'EVM',\n emoji: '⟠',\n bgColor:\n 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800',\n textColor: 'text-blue-700 dark:text-blue-300',\n },\n solana: {\n label: 'SOL',\n emoji: '◎',\n bgColor:\n 'bg-purple-50 dark:bg-purple-900/20 border-purple-200 dark:border-purple-800',\n textColor: 'text-purple-700 dark:text-purple-300',\n },\n bitcoin: {\n label: 'BTC',\n emoji: '₿',\n bgColor:\n 'bg-orange-50 dark:bg-orange-900/20 border-orange-200 dark:border-orange-800',\n textColor: 'text-orange-700 dark:text-orange-300',\n },\n cosmos: {\n label: 'ATOM',\n emoji: '⚛',\n bgColor:\n 'bg-indigo-50 dark:bg-indigo-900/20 border-indigo-200 dark:border-indigo-800',\n textColor: 'text-indigo-700 dark:text-indigo-300',\n },\n};\n\nconst sizeConfig = {\n sm: { padding: 'px-1.5 py-0.5', text: 'text-xs', gap: 'gap-0.5' },\n md: { padding: 'px-2 py-1', text: 'text-sm', gap: 'gap-1' },\n lg: { padding: 'px-2.5 py-1.5', text: 'text-base', gap: 'gap-1.5' },\n};\n\nexport const ChainBadge: React.FC<ChainBadgeProps> = ({\n chainType,\n size = 'md',\n showLabel = true,\n className,\n ...props\n}) => {\n const chain = chainConfig[chainType];\n const sizeStyles = sizeConfig[size];\n\n return (\n <View\n className={cn(\n 'flex-row items-center rounded-md border',\n chain.bgColor,\n sizeStyles.padding,\n sizeStyles.gap,\n className\n )}\n accessibilityLabel={`${chain.label} chain`}\n {...props}\n >\n <Text className={cn(sizeStyles.text, chain.textColor)}>\n {chain.emoji}\n </Text>\n {showLabel && (\n <Text className={cn('font-medium', sizeStyles.text, chain.textColor)}>\n {chain.label}\n </Text>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable, ActivityIndicator } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ListItemWithActionProps {\n /** Main content/text to display */\n children: React.ReactNode;\n /** Action to perform */\n onAction: () => void;\n /** Action button text */\n actionText?: string;\n /** Action button icon */\n actionIcon?: React.ReactNode;\n /** Whether the action is destructive */\n destructive?: boolean;\n /** Whether the action is in progress */\n isProcessing?: boolean;\n /** Variant of the list item */\n variant?: 'default' | 'compact' | 'elevated';\n /** Additional className */\n className?: string;\n}\n\n/**\n * ListItemWithAction Component\n *\n * Displays a list item with an action button (typically remove/delete).\n * Commonly used for managing lists of items with actions.\n *\n * @example\n * ```tsx\n * <ListItemWithAction\n * onAction={() => handleRemove(item.id)}\n * actionText=\"Remove\"\n * destructive\n * isProcessing={isDeleting}\n * >\n * user@example.com\n * </ListItemWithAction>\n * ```\n */\nexport const ListItemWithAction: React.FC<ListItemWithActionProps> = ({\n children,\n onAction,\n actionText = 'Remove',\n actionIcon,\n destructive = true,\n isProcessing = false,\n variant = 'default',\n className,\n}) => {\n const variantClasses = {\n default: 'bg-gray-50 dark:bg-gray-700',\n compact: 'bg-gray-50 dark:bg-gray-700 py-2 px-3',\n elevated:\n 'bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 shadow-sm',\n };\n\n return (\n <View\n className={cn(\n 'flex-row items-center justify-between p-4 rounded-lg',\n variantClasses[variant],\n className\n )}\n >\n <View className='flex-1 mr-4'>\n {typeof children === 'string' ? (\n <Text className='text-sm text-gray-900 dark:text-white'>\n {children}\n </Text>\n ) : (\n children\n )}\n </View>\n\n <Pressable\n onPress={onAction}\n disabled={isProcessing}\n className={cn(\n 'flex-row items-center px-3 py-1.5 rounded-md',\n destructive\n ? 'active:bg-red-50 dark:active:bg-red-900/20'\n : 'bg-gray-100 dark:bg-gray-600 active:bg-gray-200 dark:active:bg-gray-500',\n isProcessing && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={actionText}\n accessibilityState={{ disabled: isProcessing }}\n >\n {isProcessing ? (\n <ActivityIndicator\n size='small'\n color={destructive ? '#dc2626' : '#6b7280'}\n />\n ) : (\n <>\n {actionIcon && <View className='mr-1'>{actionIcon}</View>}\n <Text\n className={cn(\n 'text-sm font-medium',\n destructive\n ? 'text-red-600 dark:text-red-400'\n : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {actionText}\n </Text>\n </>\n )}\n </Pressable>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Pressable, Modal, StyleSheet } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface OverlayProps {\n /** Whether overlay is visible */\n isOpen: boolean;\n /** Click handler for overlay backdrop */\n onClose?: () => void;\n /** Overlay content */\n children?: React.ReactNode;\n /** Opacity level */\n opacity?: 'light' | 'medium' | 'dark';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Overlay Component\n *\n * Full-screen backdrop overlay with optional content.\n * Typically used with modals, drawers, and popups.\n *\n * @example\n * ```tsx\n * <Overlay isOpen={isModalOpen} onClose={() => setIsModalOpen(false)}>\n * <Modal>Content</Modal>\n * </Overlay>\n * ```\n *\n * @example\n * ```tsx\n * <Overlay isOpen={true} opacity=\"dark\" />\n * ```\n */\nexport const Overlay: React.FC<OverlayProps> = ({\n isOpen,\n onClose,\n children,\n opacity = 'medium',\n className,\n}) => {\n if (!isOpen) return null;\n\n // Opacity configurations\n const opacityClasses = {\n light: 'bg-black/20',\n medium: 'bg-black/50',\n dark: 'bg-black/75',\n };\n\n return (\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={onClose}\n >\n <View style={styles.container}>\n <Pressable\n style={StyleSheet.absoluteFill}\n className={cn(opacityClasses[opacity], className)}\n onPress={onClose}\n accessibilityRole='button'\n accessibilityLabel='Close overlay'\n />\n {children && (\n <View style={styles.content} pointerEvents='box-none'>\n {children}\n </View>\n )}\n </View>\n </Modal>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n content: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport { View, Text, TextInput, Pressable, ScrollView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TransferListItem {\n /** Item ID */\n id: string;\n /** Item label */\n label: string;\n /** Optional description */\n description?: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport interface TransferListProps {\n /** Available items */\n source: TransferListItem[];\n /** Selected items */\n target: TransferListItem[];\n /** Change handler */\n onChange: (source: TransferListItem[], target: TransferListItem[]) => void;\n /** Source list title */\n sourceTitle?: string;\n /** Target list title */\n targetTitle?: string;\n /** Enable search */\n searchable?: boolean;\n /** Source search placeholder */\n sourceSearchPlaceholder?: string;\n /** Target search placeholder */\n targetSearchPlaceholder?: string;\n /** List height */\n height?: number;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * TransferList Component\n *\n * Dual-list component for moving items between available and selected.\n * Supports search, bulk operations, and individual item transfer.\n *\n * @example\n * ```tsx\n * <TransferList\n * source={availableUsers}\n * target={selectedUsers}\n * onChange={(source, target) => {\n * setAvailableUsers(source);\n * setSelectedUsers(target);\n * }}\n * sourceTitle=\"Available Users\"\n * targetTitle=\"Selected Users\"\n * searchable\n * />\n * ```\n */\nexport const TransferList: React.FC<TransferListProps> = ({\n source,\n target,\n onChange,\n sourceTitle = 'Available',\n targetTitle = 'Selected',\n searchable = true,\n sourceSearchPlaceholder = 'Search available...',\n targetSearchPlaceholder = 'Search selected...',\n height = 300,\n disabled = false,\n className,\n}) => {\n const [sourceSearch, setSourceSearch] = useState('');\n const [targetSearch, setTargetSearch] = useState('');\n const [sourceSelected, setSourceSelected] = useState<Set<string>>(new Set());\n const [targetSelected, setTargetSelected] = useState<Set<string>>(new Set());\n\n // Filter items based on search\n const filteredSource = searchable\n ? source.filter(item =>\n item.label.toLowerCase().includes(sourceSearch.toLowerCase())\n )\n : source;\n\n const filteredTarget = searchable\n ? target.filter(item =>\n item.label.toLowerCase().includes(targetSearch.toLowerCase())\n )\n : target;\n\n // Toggle item selection\n const toggleSourceSelection = useCallback((id: string) => {\n setSourceSelected(prev => {\n const newSet = new Set(prev);\n if (newSet.has(id)) {\n newSet.delete(id);\n } else {\n newSet.add(id);\n }\n return newSet;\n });\n }, []);\n\n const toggleTargetSelection = useCallback((id: string) => {\n setTargetSelected(prev => {\n const newSet = new Set(prev);\n if (newSet.has(id)) {\n newSet.delete(id);\n } else {\n newSet.add(id);\n }\n return newSet;\n });\n }, []);\n\n // Move selected items to target\n const moveToTarget = useCallback(() => {\n const itemsToMove = source.filter(item => sourceSelected.has(item.id));\n const newSource = source.filter(item => !sourceSelected.has(item.id));\n const newTarget = [...target, ...itemsToMove];\n onChange(newSource, newTarget);\n setSourceSelected(new Set());\n }, [source, target, sourceSelected, onChange]);\n\n // Move selected items to source\n const moveToSource = useCallback(() => {\n const itemsToMove = target.filter(item => targetSelected.has(item.id));\n const newTarget = target.filter(item => !targetSelected.has(item.id));\n const newSource = [...source, ...itemsToMove];\n onChange(newSource, newTarget);\n setTargetSelected(new Set());\n }, [source, target, targetSelected, onChange]);\n\n // Move all items\n const moveAllToTarget = useCallback(() => {\n onChange([], [...target, ...source]);\n setSourceSelected(new Set());\n }, [source, target, onChange]);\n\n const moveAllToSource = useCallback(() => {\n onChange([...source, ...target], []);\n setTargetSelected(new Set());\n }, [source, target, onChange]);\n\n // Render list panel\n const renderList = (\n items: TransferListItem[],\n title: string,\n selected: Set<string>,\n onToggle: (id: string) => void,\n searchValue: string,\n onSearchChange: (value: string) => void,\n searchPlaceholder: string\n ) => (\n <View className='flex-1 border border-gray-300 dark:border-gray-700 rounded-md bg-white dark:bg-gray-900'>\n {/* Header */}\n <View className='px-3 py-2 border-b border-gray-300 dark:border-gray-700 bg-gray-50 dark:bg-gray-800'>\n <Text className='text-sm font-semibold text-gray-900 dark:text-white'>\n {title}\n </Text>\n <Text className='text-xs text-gray-600 dark:text-gray-400'>\n {items.length} item{items.length !== 1 ? 's' : ''}\n </Text>\n </View>\n\n {/* Search */}\n {searchable && (\n <View className='p-2 border-b border-gray-200 dark:border-gray-700'>\n <TextInput\n value={searchValue}\n onChangeText={onSearchChange}\n placeholder={searchPlaceholder}\n placeholderTextColor='#9ca3af'\n className='px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white border border-gray-300 dark:border-gray-700 rounded-md'\n />\n </View>\n )}\n\n {/* List */}\n <ScrollView style={{ height: searchable ? height - 120 : height - 60 }}>\n {items.length === 0 ? (\n <View className='flex-1 items-center justify-center py-8'>\n <Text className='text-sm text-gray-500 dark:text-gray-400'>\n No items\n </Text>\n </View>\n ) : (\n items.map(item => {\n const isSelected = selected.has(item.id);\n\n return (\n <Pressable\n key={item.id}\n onPress={() => !item.disabled && !disabled && onToggle(item.id)}\n disabled={item.disabled || disabled}\n className={cn(\n 'mx-2 my-1 px-3 py-2 rounded-md',\n 'active:bg-gray-100 dark:active:bg-gray-800',\n (item.disabled || disabled) && 'opacity-50',\n isSelected &&\n 'bg-blue-50 dark:bg-blue-900/30 border border-blue-200 dark:border-blue-700'\n )}\n accessibilityRole='checkbox'\n accessibilityState={{\n checked: isSelected,\n disabled: item.disabled || disabled,\n }}\n >\n <View className='flex-row items-start gap-2'>\n {/* Checkbox */}\n <View\n className={cn(\n 'w-4 h-4 border-2 rounded items-center justify-center mt-0.5',\n isSelected\n ? 'bg-blue-600 border-blue-600 dark:bg-blue-500 dark:border-blue-500'\n : 'border-gray-300 dark:border-gray-600'\n )}\n >\n {isSelected && (\n <Text className='text-white text-xs'>✓</Text>\n )}\n </View>\n\n {/* Content */}\n <View className='flex-1'>\n <Text className='text-sm font-medium text-gray-900 dark:text-white'>\n {item.label}\n </Text>\n {item.description && (\n <Text className='text-xs text-gray-600 dark:text-gray-400'>\n {item.description}\n </Text>\n )}\n </View>\n </View>\n </Pressable>\n );\n })\n )}\n </ScrollView>\n </View>\n );\n\n return (\n <View className={cn('flex-row gap-4', className)}>\n {/* Source list */}\n {renderList(\n filteredSource,\n sourceTitle,\n sourceSelected,\n toggleSourceSelection,\n sourceSearch,\n setSourceSearch,\n sourceSearchPlaceholder\n )}\n\n {/* Transfer buttons */}\n <View className='justify-center gap-2'>\n <Pressable\n onPress={moveAllToTarget}\n disabled={disabled || source.length === 0}\n className={cn(\n 'px-3 py-2 bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n 'active:bg-gray-50 dark:active:bg-gray-800',\n (disabled || source.length === 0) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Move all to selected'\n >\n <Text className='text-gray-700 dark:text-gray-300'>»</Text>\n </Pressable>\n\n <Pressable\n onPress={moveToTarget}\n disabled={disabled || sourceSelected.size === 0}\n className={cn(\n 'px-3 py-2 bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n 'active:bg-gray-50 dark:active:bg-gray-800',\n (disabled || sourceSelected.size === 0) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Move selected to target'\n >\n <Text className='text-gray-700 dark:text-gray-300'>›</Text>\n </Pressable>\n\n <Pressable\n onPress={moveToSource}\n disabled={disabled || targetSelected.size === 0}\n className={cn(\n 'px-3 py-2 bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n 'active:bg-gray-50 dark:active:bg-gray-800',\n (disabled || targetSelected.size === 0) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Move selected to source'\n >\n <Text className='text-gray-700 dark:text-gray-300'>‹</Text>\n </Pressable>\n\n <Pressable\n onPress={moveAllToSource}\n disabled={disabled || target.length === 0}\n className={cn(\n 'px-3 py-2 bg-white dark:bg-gray-900',\n 'border border-gray-300 dark:border-gray-700',\n 'rounded-md',\n 'active:bg-gray-50 dark:active:bg-gray-800',\n (disabled || target.length === 0) && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel='Move all to available'\n >\n <Text className='text-gray-700 dark:text-gray-300'>«</Text>\n </Pressable>\n </View>\n\n {/* Target list */}\n {renderList(\n filteredTarget,\n targetTitle,\n targetSelected,\n toggleTargetSelection,\n targetSearch,\n setTargetSearch,\n targetSearchPlaceholder\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable, ScrollView } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface FileInfo {\n /** File name */\n name: string;\n /** File size in bytes */\n size: number;\n /** File type/mime */\n type?: string;\n /** File URI (for RN) */\n uri?: string;\n}\n\nexport interface FileInputProps {\n /** Callback when files should be selected (opens picker) */\n onSelectFiles: () => void;\n /** Current files */\n files?: FileInfo[];\n /** Callback to remove a file */\n onRemove?: (index: number) => void;\n /** Disabled state */\n disabled?: boolean;\n /** Show drop zone style */\n showDropZone?: boolean;\n /** Show file list */\n showFileList?: boolean;\n /** Maximum file size in bytes (for display) */\n maxSize?: number;\n /** Button text */\n buttonText?: string;\n /** Drop zone text */\n dropZoneText?: string;\n /** Error message */\n error?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FileInput Component\n *\n * File input button/zone that triggers file selection callback.\n * The actual file picking should be handled by the parent using\n * expo-document-picker or similar library.\n *\n * @example\n * ```tsx\n * <FileInput\n * onSelectFiles={pickDocuments}\n * files={selectedFiles}\n * onRemove={removeFile}\n * showDropZone\n * />\n * ```\n */\nexport const FileInput: React.FC<FileInputProps> = ({\n onSelectFiles,\n files = [],\n onRemove,\n disabled = false,\n showDropZone = false,\n showFileList = true,\n maxSize,\n buttonText = 'Choose Files',\n dropZoneText = 'Tap to select files',\n error,\n className,\n}) => {\n // Format file size to human-readable string\n const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\n };\n\n // Drop zone UI\n if (showDropZone) {\n return (\n <View className={cn('w-full', className)}>\n <Pressable\n onPress={onSelectFiles}\n disabled={disabled}\n className={cn(\n 'border-2 border-dashed rounded-lg p-8',\n 'border-gray-300 dark:border-gray-600',\n 'active:border-blue-500 active:bg-blue-50 dark:active:bg-blue-900/10',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={buttonText}\n accessibilityState={{ disabled }}\n >\n <View className='items-center justify-center gap-3'>\n <Text className='text-4xl text-gray-400 dark:text-gray-500'>\n 📁\n </Text>\n <Text className='text-sm text-gray-600 dark:text-gray-400 text-center'>\n {dropZoneText}\n </Text>\n {maxSize && (\n <Text className='text-xs text-gray-500 dark:text-gray-500'>\n Max file size: {formatFileSize(maxSize)}\n </Text>\n )}\n </View>\n </Pressable>\n\n {error && (\n <Text className='mt-2 text-sm text-red-600 dark:text-red-400'>\n {error}\n </Text>\n )}\n\n {showFileList && files.length > 0 && (\n <FileList\n files={files}\n onRemove={onRemove}\n formatFileSize={formatFileSize}\n />\n )}\n </View>\n );\n }\n\n // Button UI\n return (\n <View className={cn('w-full', className)}>\n <Pressable\n onPress={onSelectFiles}\n disabled={disabled}\n className={cn(\n 'flex-row items-center px-4 py-2',\n 'border border-gray-300 dark:border-gray-600',\n 'rounded-lg',\n 'bg-white dark:bg-gray-800',\n 'active:bg-gray-50 dark:active:bg-gray-700',\n disabled && 'opacity-50'\n )}\n accessibilityRole='button'\n accessibilityLabel={buttonText}\n accessibilityState={{ disabled }}\n >\n <Text className='text-lg mr-2'>📄</Text>\n <Text className='text-sm font-medium text-gray-700 dark:text-gray-300'>\n {buttonText}\n </Text>\n </Pressable>\n\n {error && (\n <Text className='mt-2 text-sm text-red-600 dark:text-red-400'>\n {error}\n </Text>\n )}\n\n {showFileList && files.length > 0 && (\n <FileList\n files={files}\n onRemove={onRemove}\n formatFileSize={formatFileSize}\n />\n )}\n </View>\n );\n};\n\n/**\n * FileList Component - Internal\n */\nconst FileList: React.FC<{\n files: FileInfo[];\n onRemove?: (index: number) => void;\n formatFileSize: (bytes: number) => string;\n}> = ({ files, onRemove, formatFileSize }) => {\n return (\n <ScrollView className='mt-3 max-h-48'>\n {files.map((file, index) => (\n <View\n key={`${file.name}-${index}`}\n className='flex-row items-center justify-between p-2 mb-2 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700'\n >\n <View className='flex-row items-center flex-1 mr-2'>\n <Text className='text-lg mr-2'>📄</Text>\n <View className='flex-1'>\n <Text\n className='text-sm font-medium text-gray-900 dark:text-gray-100'\n numberOfLines={1}\n >\n {file.name}\n </Text>\n <Text className='text-xs text-gray-500 dark:text-gray-400'>\n {formatFileSize(file.size)}\n </Text>\n </View>\n </View>\n\n {onRemove && (\n <Pressable\n onPress={() => onRemove(index)}\n className='p-1 active:bg-red-100 dark:active:bg-red-900/20 rounded'\n accessibilityRole='button'\n accessibilityLabel='Remove file'\n >\n <Text className='text-red-500 dark:text-red-400'>✕</Text>\n </Pressable>\n )}\n </View>\n ))}\n </ScrollView>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n Text,\n Image,\n Pressable,\n ImageSourcePropType,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface LogoProps {\n /** Logo size */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Additional className */\n className?: string;\n /** Show text alongside logo */\n showText?: boolean;\n /** Press handler */\n onPress?: () => void;\n /** Logo image source */\n logoSource?: ImageSourcePropType;\n /** Logo alt text */\n logoAlt?: string;\n /** Logo text (required) */\n logoText: string;\n}\n\n/**\n * Logo Component\n *\n * Displays a logo with optional text.\n * Supports multiple sizes and optional press handler.\n *\n * @example\n * ```tsx\n * <Logo\n * logoText=\"MyApp\"\n * logoSource={require('./assets/logo.png')}\n * size=\"lg\"\n * onPress={() => navigation.navigate('Home')}\n * />\n * ```\n */\nexport const Logo: React.FC<LogoProps> = ({\n size = 'md',\n className,\n showText = true,\n onPress,\n logoSource,\n logoAlt = 'Logo',\n logoText,\n}) => {\n // Size configurations\n const sizeConfig = {\n sm: {\n container: 'gap-2',\n image: { width: 24, height: 24 },\n text: 'text-lg',\n },\n md: {\n container: 'gap-2',\n image: { width: 32, height: 32 },\n text: 'text-2xl',\n },\n lg: {\n container: 'gap-3',\n image: { width: 40, height: 40 },\n text: 'text-3xl',\n },\n xl: {\n container: 'gap-4',\n image: { width: 48, height: 48 },\n text: 'text-4xl',\n },\n };\n\n const config = sizeConfig[size];\n\n const logoContent = (\n <>\n {logoSource && (\n <Image\n source={logoSource}\n style={config.image}\n accessibilityLabel={logoAlt}\n resizeMode='contain'\n />\n )}\n {showText && (\n <Text\n className={cn(\n 'font-bold text-gray-900 dark:text-gray-100',\n config.text\n )}\n >\n {logoText}\n </Text>\n )}\n </>\n );\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n className={cn(\n 'flex-row items-center',\n config.container,\n 'active:opacity-80',\n className\n )}\n accessibilityRole='button'\n accessibilityLabel={`${logoText} logo`}\n >\n {logoContent}\n </Pressable>\n );\n }\n\n return (\n <View\n className={cn('flex-row items-center', config.container, className)}\n accessibilityRole='image'\n accessibilityLabel={`${logoText} logo`}\n >\n {logoContent}\n </View>\n );\n};\n","import * as React from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { Text, Animated } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface AnimatedCounterProps {\n /** Target value to count to */\n value: number;\n /** Animation duration in milliseconds */\n duration?: number;\n /** Number of decimal places */\n decimals?: number;\n /** Prefix (e.g., \"$\") */\n prefix?: string;\n /** Suffix (e.g., \"%\") */\n suffix?: string;\n /** Format with commas */\n formatWithCommas?: boolean;\n /** Additional className */\n className?: string;\n /** Text color className */\n textClassName?: string;\n}\n\n/**\n * AnimatedCounter Component\n *\n * Animated number counter that counts up/down to target value.\n * Useful for statistics, dashboards, and metrics display.\n *\n * @example\n * ```tsx\n * <AnimatedCounter\n * value={1234}\n * duration={2000}\n * prefix=\"$\"\n * formatWithCommas\n * />\n * ```\n *\n * @example\n * ```tsx\n * <AnimatedCounter\n * value={99.9}\n * decimals={1}\n * suffix=\"%\"\n * />\n * ```\n */\nexport const AnimatedCounter: React.FC<AnimatedCounterProps> = ({\n value,\n duration = 1000,\n decimals = 0,\n prefix = '',\n suffix = '',\n formatWithCommas = false,\n className,\n textClassName,\n}) => {\n const [displayValue, setDisplayValue] = useState(0);\n const animatedValue = useRef(new Animated.Value(0)).current;\n const previousValue = useRef(0);\n\n useEffect(() => {\n // Listen to animated value changes\n const listenerId = animatedValue.addListener(({ value: animValue }) => {\n setDisplayValue(animValue);\n });\n\n // Animate from previous value to new value\n Animated.timing(animatedValue, {\n toValue: value,\n duration,\n useNativeDriver: false,\n }).start();\n\n previousValue.current = value;\n\n return () => {\n animatedValue.removeListener(listenerId);\n };\n }, [value, duration, animatedValue]);\n\n // Format the display value\n const formatValue = (val: number): string => {\n const fixed = val.toFixed(decimals);\n\n if (formatWithCommas) {\n const parts = fixed.split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n }\n\n return fixed;\n };\n\n return (\n <Text\n className={cn(\n 'text-2xl font-bold text-gray-900 dark:text-white',\n textClassName,\n className\n )}\n >\n {prefix}\n {formatValue(displayValue)}\n {suffix}\n </Text>\n );\n};\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { Animated, ViewStyle } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport type AnimationType =\n | 'fade-in'\n | 'fade-in-up'\n | 'fade-in-down'\n | 'fade-in-left'\n | 'fade-in-right'\n | 'scale-in';\n\nexport interface AnimatedSectionProps {\n /** Animation type */\n animation?: AnimationType;\n /** Animation delay in milliseconds */\n delay?: number;\n /** Animation duration in milliseconds */\n duration?: number;\n /** Children to animate */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n /** Additional style */\n style?: ViewStyle;\n}\n\n/**\n * AnimatedSection Component\n *\n * Wrapper component that animates its children on mount.\n * Supports various animation types for entrance animations.\n *\n * @example\n * ```tsx\n * <AnimatedSection animation=\"fade-in-up\" delay={200}>\n * <Card>Content</Card>\n * </AnimatedSection>\n * ```\n */\nexport const AnimatedSection: React.FC<AnimatedSectionProps> = ({\n animation = 'fade-in',\n delay = 0,\n duration = 400,\n children,\n className,\n style,\n}) => {\n const opacity = useRef(new Animated.Value(0)).current;\n const translateY = useRef(new Animated.Value(0)).current;\n const translateX = useRef(new Animated.Value(0)).current;\n const scale = useRef(new Animated.Value(1)).current;\n\n useEffect(() => {\n // Set initial values based on animation type\n switch (animation) {\n case 'fade-in':\n opacity.setValue(0);\n break;\n case 'fade-in-up':\n opacity.setValue(0);\n translateY.setValue(20);\n break;\n case 'fade-in-down':\n opacity.setValue(0);\n translateY.setValue(-20);\n break;\n case 'fade-in-left':\n opacity.setValue(0);\n translateX.setValue(-20);\n break;\n case 'fade-in-right':\n opacity.setValue(0);\n translateX.setValue(20);\n break;\n case 'scale-in':\n opacity.setValue(0);\n scale.setValue(0.9);\n break;\n }\n\n // Animate to final values\n const animations: Animated.CompositeAnimation[] = [];\n\n animations.push(\n Animated.timing(opacity, {\n toValue: 1,\n duration,\n delay,\n useNativeDriver: true,\n })\n );\n\n if (animation === 'fade-in-up' || animation === 'fade-in-down') {\n animations.push(\n Animated.timing(translateY, {\n toValue: 0,\n duration,\n delay,\n useNativeDriver: true,\n })\n );\n }\n\n if (animation === 'fade-in-left' || animation === 'fade-in-right') {\n animations.push(\n Animated.timing(translateX, {\n toValue: 0,\n duration,\n delay,\n useNativeDriver: true,\n })\n );\n }\n\n if (animation === 'scale-in') {\n animations.push(\n Animated.timing(scale, {\n toValue: 1,\n duration,\n delay,\n useNativeDriver: true,\n })\n );\n }\n\n Animated.parallel(animations).start();\n }, [animation, delay, duration, opacity, translateY, translateX, scale]);\n\n return (\n <Animated.View\n className={cn(className)}\n style={[\n style,\n {\n opacity,\n transform: [{ translateY }, { translateX }, { scale }],\n },\n ]}\n >\n {children}\n </Animated.View>\n );\n};\n\n// Utility components for common animation patterns\nexport const FadeIn: React.FC<{\n children: React.ReactNode;\n delay?: number;\n className?: string;\n}> = ({ children, delay = 0, className }) => (\n <AnimatedSection animation='fade-in' delay={delay} className={className}>\n {children}\n </AnimatedSection>\n);\n\nexport const FadeInUp: React.FC<{\n children: React.ReactNode;\n delay?: number;\n className?: string;\n}> = ({ children, delay = 0, className }) => (\n <AnimatedSection animation='fade-in-up' delay={delay} className={className}>\n {children}\n </AnimatedSection>\n);\n\nexport const FadeInScale: React.FC<{\n children: React.ReactNode;\n delay?: number;\n className?: string;\n}> = ({ children, delay = 0, className }) => (\n <AnimatedSection animation='scale-in' delay={delay} className={className}>\n {children}\n </AnimatedSection>\n);\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface MasonryProps {\n /** Children elements */\n children: React.ReactNode;\n /** Number of columns */\n columns?: number;\n /** Gap between items */\n gap?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Masonry Component\n *\n * Pinterest-style masonry grid layout for React Native.\n * Distributes items across columns for optimal spacing.\n *\n * @example\n * ```tsx\n * <Masonry columns={2} gap={16}>\n * {items.map(item => <Card key={item.id}>{item.content}</Card>)}\n * </Masonry>\n * ```\n */\nexport const Masonry: React.FC<MasonryProps> = ({\n children,\n columns = 2,\n gap = 16,\n className,\n}) => {\n // Distribute items into columns\n const childArray = React.Children.toArray(children);\n const columnArrays: React.ReactNode[][] = Array.from(\n { length: columns },\n () => []\n );\n\n childArray.forEach((child, index) => {\n columnArrays[index % columns].push(child);\n });\n\n return (\n <View className={cn('flex-row', className)} style={{ gap }}>\n {columnArrays.map((column, columnIndex) => (\n <View key={columnIndex} className='flex-1' style={{ gap }}>\n {column.map((item, itemIndex) => (\n <View key={itemIndex}>{item}</View>\n ))}\n </View>\n ))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface IconContainerProps {\n /** Icon element */\n children: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Color variant */\n variant?:\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'error'\n | 'neutral';\n /** Shape variant */\n shape?: 'square' | 'rounded' | 'circle';\n /** Additional className */\n className?: string;\n}\n\n/**\n * IconContainer Component\n *\n * Styled container for displaying icons with consistent sizing and colors.\n * Commonly used in feature lists, settings, and navigation.\n *\n * @example\n * ```tsx\n * <IconContainer size=\"lg\" variant=\"primary\" shape=\"rounded\">\n * <SettingsIcon />\n * </IconContainer>\n * ```\n */\nexport const IconContainer: React.FC<IconContainerProps> = ({\n children,\n size = 'md',\n variant = 'primary',\n shape = 'rounded',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'w-10 h-10',\n md: 'w-12 h-12',\n lg: 'w-16 h-16',\n xl: 'w-20 h-20',\n };\n\n // Variant configurations\n const variantClasses = {\n primary: 'bg-blue-100 dark:bg-blue-900/30',\n secondary: 'bg-purple-100 dark:bg-purple-900/30',\n success: 'bg-green-100 dark:bg-green-900/30',\n warning: 'bg-yellow-100 dark:bg-yellow-900/30',\n error: 'bg-red-100 dark:bg-red-900/30',\n neutral: 'bg-gray-100 dark:bg-gray-800',\n };\n\n // Shape configurations\n const shapeClasses = {\n square: 'rounded-lg',\n rounded: 'rounded-2xl',\n circle: 'rounded-full',\n };\n\n return (\n <View\n className={cn(\n 'items-center justify-center',\n sizeClasses[size],\n variantClasses[variant],\n shapeClasses[shape],\n className\n )}\n >\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface GradientIconContainerProps {\n /** Icon element */\n children: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Shape variant */\n shape?: 'square' | 'rounded' | 'circle';\n /** Color variant */\n variant?: 'blue' | 'purple' | 'green' | 'orange' | 'gray';\n /** Additional className */\n className?: string;\n}\n\n/**\n * GradientIconContainer Component\n *\n * Container for icons with gradient-like background colors.\n * Note: True gradients require expo-linear-gradient; this uses solid colors.\n *\n * @example\n * ```tsx\n * <GradientIconContainer size=\"lg\" variant=\"blue\" shape=\"rounded\">\n * <ShieldIcon />\n * </GradientIconContainer>\n * ```\n */\nexport const GradientIconContainer: React.FC<GradientIconContainerProps> = ({\n children,\n size = 'md',\n shape = 'rounded',\n variant = 'blue',\n className,\n}) => {\n // Size configurations\n const sizeConfig = {\n sm: { container: 'w-10 h-10', icon: styles.iconSm },\n md: { container: 'w-12 h-12', icon: styles.iconMd },\n lg: { container: 'w-16 h-16', icon: styles.iconLg },\n xl: { container: 'w-20 h-20', icon: styles.iconXl },\n };\n\n // Shape configurations\n const shapeClasses = {\n square: 'rounded-lg',\n rounded: 'rounded-xl',\n circle: 'rounded-full',\n };\n\n // Color variants (solid colors approximating gradients)\n const variantClasses = {\n blue: 'bg-blue-600',\n purple: 'bg-purple-600',\n green: 'bg-green-600',\n orange: 'bg-orange-600',\n gray: 'bg-gray-700 dark:bg-gray-600',\n };\n\n const config = sizeConfig[size];\n\n return (\n <View\n className={cn(\n 'items-center justify-center',\n config.container,\n shapeClasses[shape],\n variantClasses[variant],\n className\n )}\n >\n <View style={config.icon}>{children}</View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n iconSm: { width: 20, height: 20 },\n iconMd: { width: 24, height: 24 },\n iconLg: { width: 32, height: 32 },\n iconXl: { width: 40, height: 40 },\n});\n","import * as React from 'react';\nimport { View, Text, ActivityIndicator } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PageSectionHeaderProps {\n /** Section title */\n title: string;\n /** Optional subtitle/description */\n description?: string;\n /** Item count to display */\n count?: number;\n /** Count label (e.g., \"items\", \"templates\") */\n countLabel?: string;\n /** Action button(s) */\n action?: React.ReactNode;\n /** Show loading indicator */\n loading?: boolean;\n /** Loading text */\n loadingText?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * PageSectionHeader Component\n *\n * A flexible header for page sections with title, description, count, and actions.\n * Commonly used at the top of content sections to provide context and actions.\n *\n * @example\n * ```tsx\n * <PageSectionHeader\n * title=\"Templates\"\n * count={templates.length}\n * action={<Button onPress={handleAdd}>Add Template</Button>}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <PageSectionHeader\n * title=\"Email Filters\"\n * description=\"Manage your email filtering rules\"\n * count={12}\n * countLabel=\"filters\"\n * loading={isRefreshing}\n * />\n * ```\n */\nexport const PageSectionHeader: React.FC<PageSectionHeaderProps> = ({\n title,\n description,\n count,\n countLabel,\n action,\n loading = false,\n loadingText = 'Loading...',\n size = 'md',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: {\n title: 'text-lg font-semibold',\n description: 'text-sm',\n count: 'text-xs',\n },\n md: {\n title: 'text-xl font-semibold',\n description: 'text-base',\n count: 'text-sm',\n },\n lg: {\n title: 'text-2xl font-bold',\n description: 'text-lg',\n count: 'text-base',\n },\n };\n\n const sizeConfig = sizeClasses[size];\n\n return (\n <View\n className={cn('flex-row items-start justify-between gap-4', className)}\n >\n <View className='flex-1'>\n <View className='flex-row items-center gap-3 flex-wrap'>\n <Text\n className={cn(sizeConfig.title, 'text-gray-900 dark:text-gray-100')}\n >\n {title}\n </Text>\n\n {count !== undefined && (\n <Text\n className={cn(\n sizeConfig.count,\n 'text-gray-500 dark:text-gray-400'\n )}\n >\n ({count}\n {countLabel && ` ${countLabel}`})\n </Text>\n )}\n\n {loading && (\n <View className='flex-row items-center gap-2'>\n <ActivityIndicator size='small' color='#3b82f6' />\n <Text\n className={cn(\n sizeConfig.count,\n 'text-gray-500 dark:text-gray-400'\n )}\n >\n {loadingText}\n </Text>\n </View>\n )}\n </View>\n\n {description && (\n <Text\n className={cn(\n sizeConfig.description,\n 'mt-1 text-gray-600 dark:text-gray-400'\n )}\n >\n {description}\n </Text>\n )}\n </View>\n\n {action && <View>{action}</View>}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\n\nexport interface VisuallyHiddenProps {\n /** Content to hide visually but keep accessible to screen readers */\n children: React.ReactNode;\n}\n\n/**\n * VisuallyHidden Component\n *\n * Hides content visually while keeping it accessible to screen readers.\n * In React Native, this uses accessibilityElementsHidden with absolute positioning.\n *\n * @example\n * ```tsx\n * <Pressable onPress={handleDelete}>\n * <TrashIcon />\n * <VisuallyHidden>Delete item</VisuallyHidden>\n * </Pressable>\n * ```\n */\nexport const VisuallyHidden: React.FC<VisuallyHiddenProps> = ({ children }) => {\n return (\n <View\n style={styles.hidden}\n accessibilityElementsHidden={false}\n importantForAccessibility='yes'\n >\n {typeof children === 'string' ? (\n <Text accessibilityRole='text'>{children}</Text>\n ) : (\n children\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n hidden: {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n // clip is deprecated but needed for older devices\n // clipPath: 'inset(50%)', // Not supported in RN\n },\n});\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface BreadcrumbNavItem {\n /** Item label */\n label: string;\n /** Navigation handler */\n onPress?: () => void;\n}\n\nexport interface BreadcrumbNavProps {\n /** Breadcrumb items */\n items: BreadcrumbNavItem[];\n /** Custom separator */\n separator?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * BreadcrumbNav Component\n *\n * Simple breadcrumb navigation for React Native.\n * Shows a trail of navigational links.\n *\n * @example\n * ```tsx\n * <BreadcrumbNav\n * items={[\n * { label: 'Home', onPress: () => navigate('home') },\n * { label: 'Products', onPress: () => navigate('products') },\n * { label: 'Electronics' }\n * ]}\n * />\n * ```\n */\nexport const BreadcrumbNav: React.FC<BreadcrumbNavProps> = ({\n items,\n separator = '/',\n className,\n}) => {\n return (\n <View\n className={cn('flex-row items-center gap-2', className)}\n accessibilityRole='none'\n accessibilityLabel='Breadcrumb navigation'\n >\n {items.map((item, index) => (\n <React.Fragment key={index}>\n {index > 0 && (\n <Text className='text-gray-400 dark:text-gray-600 text-sm'>\n {typeof separator === 'string' ? separator : separator}\n </Text>\n )}\n {index === items.length - 1 ? (\n <Text className='text-gray-900 dark:text-white font-medium text-sm'>\n {item.label}\n </Text>\n ) : (\n <Pressable\n onPress={item.onPress}\n accessibilityRole='link'\n accessibilityLabel={item.label}\n >\n <Text className='text-blue-600 dark:text-blue-400 text-sm'>\n {item.label}\n </Text>\n </Pressable>\n )}\n </React.Fragment>\n ))}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface KbdProps {\n /** Keyboard key(s) to display */\n children: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * Kbd Component\n *\n * Displays keyboard shortcuts with consistent styling.\n * Used to represent user input from keyboard.\n *\n * @example\n * ```tsx\n * <View className=\"flex-row items-center gap-1\">\n * <Kbd>Ctrl</Kbd>\n * <Text>+</Text>\n * <Kbd>C</Kbd>\n * </View>\n * ```\n *\n * @example\n * ```tsx\n * <Text>Press <Kbd size=\"sm\">Enter</Kbd> to submit</Text>\n * ```\n */\nexport const Kbd: React.FC<KbdProps> = ({\n children,\n size = 'md',\n className,\n}) => {\n // Size configurations\n const sizeClasses = {\n sm: 'text-xs px-1.5 py-0.5',\n md: 'text-sm px-2 py-1',\n lg: 'text-base px-2.5 py-1.5',\n };\n\n return (\n <View\n className={cn(\n 'items-center justify-center',\n 'bg-gray-100 dark:bg-gray-800',\n 'border border-gray-300 dark:border-gray-600',\n 'rounded',\n sizeClasses[size],\n className\n )}\n accessibilityRole='text'\n >\n <Text\n className={cn(\n 'font-mono font-semibold',\n 'text-gray-900 dark:text-gray-100',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n size === 'lg' && 'text-base'\n )}\n >\n {children}\n </Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, ScrollView, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface TableColumn<T> {\n /** Column key */\n key: string;\n /** Column label */\n label: React.ReactNode;\n /** Render cell content */\n render?: (row: T, index: number) => React.ReactNode;\n /** Column width */\n width?: number;\n /** Sortable column */\n sortable?: boolean;\n /** Align content */\n align?: 'left' | 'center' | 'right';\n}\n\nexport interface TableProps<T> {\n /** Table columns */\n columns: TableColumn<T>[];\n /** Table data */\n data: T[];\n /** Row key extractor */\n keyExtractor: (row: T, index: number) => string;\n /** Sort configuration */\n sort?: {\n column: string;\n direction: 'asc' | 'desc';\n };\n /** Sort handler */\n onSort?: (column: string) => void;\n /** Row click handler */\n onRowPress?: (row: T, index: number) => void;\n /** Striped rows */\n striped?: boolean;\n /** Compact mode */\n compact?: boolean;\n /** Show border */\n bordered?: boolean;\n /** Empty state message */\n emptyMessage?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Table Component\n *\n * Data table with sorting and customization for React Native.\n * Generic component supporting any data type.\n *\n * @example\n * ```tsx\n * <Table\n * columns={[\n * { key: 'name', label: 'Name', sortable: true },\n * { key: 'email', label: 'Email' },\n * { key: 'role', label: 'Role', align: 'center' }\n * ]}\n * data={users}\n * keyExtractor={(user) => user.id}\n * sort={sort}\n * onSort={handleSort}\n * onRowPress={handleRowPress}\n * />\n * ```\n */\nexport function Table<T extends Record<string, unknown>>({\n columns,\n data,\n keyExtractor,\n sort,\n onSort,\n onRowPress,\n striped = false,\n compact = false,\n bordered = false,\n emptyMessage = 'No data available',\n className,\n}: TableProps<T>) {\n const handleSort = (column: TableColumn<T>) => {\n if (column.sortable && onSort) {\n onSort(column.key);\n }\n };\n\n const alignClasses = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n };\n\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={true}\n className={cn('w-full', className)}\n >\n <View className='flex-1'>\n {/* Header */}\n <View\n className={cn(\n 'flex-row bg-gray-50 dark:bg-gray-800',\n 'border-b border-gray-200 dark:border-gray-700'\n )}\n >\n {columns.map(column => (\n <Pressable\n key={column.key}\n onPress={() => column.sortable && handleSort(column)}\n disabled={!column.sortable}\n className={cn(\n compact ? 'px-3 py-2' : 'px-4 py-3',\n bordered &&\n 'border-r border-gray-200 dark:border-gray-700 last:border-r-0'\n )}\n style={{ width: column.width }}\n accessibilityRole='button'\n accessibilityLabel={`Sort by ${column.label}`}\n >\n <View\n className={cn(\n 'flex-row items-center gap-2',\n alignClasses[column.align || 'left']\n )}\n >\n <Text className='text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider'>\n {column.label}\n </Text>\n {column.sortable && sort?.column === column.key && (\n <Text className='text-xs text-gray-500'>\n {sort.direction === 'asc' ? '↑' : '↓'}\n </Text>\n )}\n </View>\n </Pressable>\n ))}\n </View>\n\n {/* Body */}\n <View className='bg-white dark:bg-gray-900'>\n {data.length === 0 ? (\n <View className='px-4 py-8'>\n <Text className='text-center text-sm text-gray-500 dark:text-gray-400'>\n {emptyMessage}\n </Text>\n </View>\n ) : (\n data.map((row, rowIndex) => (\n <Pressable\n key={keyExtractor(row, rowIndex)}\n onPress={() => onRowPress?.(row, rowIndex)}\n disabled={!onRowPress}\n className={cn(\n 'flex-row',\n 'border-b border-gray-200 dark:border-gray-700',\n striped &&\n rowIndex % 2 === 1 &&\n 'bg-gray-50 dark:bg-gray-800/50'\n )}\n accessibilityRole='button'\n >\n {columns.map(column => (\n <View\n key={column.key}\n className={cn(\n compact ? 'px-3 py-2' : 'px-4 py-3',\n alignClasses[column.align || 'left'],\n bordered &&\n 'border-r border-gray-200 dark:border-gray-700 last:border-r-0'\n )}\n style={{ width: column.width }}\n >\n {column.render ? (\n column.render(row, rowIndex)\n ) : (\n <Text className='text-sm text-gray-900 dark:text-white'>\n {String(row[column.key] ?? '')}\n </Text>\n )}\n </View>\n ))}\n </Pressable>\n ))\n )}\n </View>\n </View>\n </ScrollView>\n );\n}\n","import * as React from 'react';\nimport { useState, useEffect, useRef } from 'react';\nimport {\n View,\n Text,\n TextInput,\n Pressable,\n ScrollView,\n Modal,\n KeyboardAvoidingView,\n Platform,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CommandItem {\n /** Item ID */\n id: string;\n /** Item label */\n label: string;\n /** Item icon */\n icon?: React.ReactNode;\n /** Action handler */\n onSelect: () => void;\n /** Group/category */\n group?: string;\n /** Keyboard shortcut display */\n shortcut?: string;\n /** Keywords for search */\n keywords?: string[];\n}\n\nexport interface CommandProps {\n /** Whether command palette is open */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Available command items */\n items: CommandItem[];\n /** Placeholder text */\n placeholder?: string;\n /** Empty state message */\n emptyMessage?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * Command Component\n *\n * Command palette for quick actions and navigation in React Native.\n * Searchable interface with grouping support.\n *\n * @example\n * ```tsx\n * <Command\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * items={[\n * { id: 'new', label: 'New File', icon: <PlusIcon />, onSelect: handleNew },\n * { id: 'open', label: 'Open File', icon: <FolderIcon />, onSelect: handleOpen }\n * ]}\n * placeholder=\"Type a command or search...\"\n * />\n * ```\n */\nexport const Command: React.FC<CommandProps> = ({\n isOpen,\n onClose,\n items,\n placeholder = 'Type a command or search...',\n emptyMessage = 'No results found.',\n className,\n}) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const inputRef = useRef<TextInput>(null);\n\n // Filter items based on search query\n const filteredItems = items.filter(item => {\n const query = searchQuery.toLowerCase();\n return (\n item.label.toLowerCase().includes(query) ||\n item.keywords?.some(keyword => keyword.toLowerCase().includes(query)) ||\n item.group?.toLowerCase().includes(query)\n );\n });\n\n // Group items\n const groupedItems = filteredItems.reduce(\n (groups, item) => {\n const group = item.group || 'Commands';\n if (!groups[group]) {\n groups[group] = [];\n }\n groups[group].push(item);\n return groups;\n },\n {} as Record<string, CommandItem[]>\n );\n\n // Reset state when closing\n useEffect(() => {\n if (!isOpen) {\n setSearchQuery('');\n setSelectedIndex(0);\n }\n }, [isOpen]);\n\n // Focus input when opening\n useEffect(() => {\n if (isOpen && inputRef.current) {\n setTimeout(() => inputRef.current?.focus(), 100);\n }\n }, [isOpen]);\n\n // Reset selected index when search changes\n useEffect(() => {\n setSelectedIndex(0);\n }, [searchQuery]);\n\n const handleSelect = (item: CommandItem) => {\n item.onSelect();\n onClose();\n };\n\n return (\n <Modal\n visible={isOpen}\n transparent\n animationType='fade'\n onRequestClose={onClose}\n >\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n className='flex-1'\n >\n {/* Backdrop */}\n <Pressable\n className='flex-1 bg-black/50 justify-start pt-20'\n onPress={onClose}\n >\n {/* Command Palette */}\n <Pressable\n className={cn(\n 'mx-4 bg-white dark:bg-gray-900 rounded-xl overflow-hidden',\n 'shadow-xl',\n className\n )}\n onPress={e => e.stopPropagation()}\n >\n {/* Search Input */}\n <View className='border-b border-gray-200 dark:border-gray-700 p-4'>\n <View className='flex-row items-center gap-3'>\n <View className='w-5 h-5 items-center justify-center'>\n <Text className='text-gray-400'>🔍</Text>\n </View>\n <TextInput\n ref={inputRef}\n value={searchQuery}\n onChangeText={setSearchQuery}\n placeholder={placeholder}\n placeholderTextColor='#9ca3af'\n className='flex-1 text-gray-900 dark:text-white text-base'\n autoCapitalize='none'\n autoCorrect={false}\n returnKeyType='search'\n />\n </View>\n </View>\n\n {/* Results */}\n <ScrollView\n className='max-h-96'\n keyboardShouldPersistTaps='handled'\n >\n <View className='p-2'>\n {Object.keys(groupedItems).length === 0 ? (\n <View className='px-4 py-8'>\n <Text className='text-sm text-gray-500 dark:text-gray-400 text-center'>\n {emptyMessage}\n </Text>\n </View>\n ) : (\n Object.entries(groupedItems).map(\n ([groupName, groupItems]) => (\n <View key={groupName} className='mb-4'>\n {/* Group Header */}\n <Text className='px-3 py-2 text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider'>\n {groupName}\n </Text>\n\n {/* Group Items */}\n <View className='gap-1'>\n {groupItems.map(item => {\n const globalIndex = filteredItems.indexOf(item);\n const isSelected = globalIndex === selectedIndex;\n\n return (\n <Pressable\n key={item.id}\n onPress={() => handleSelect(item)}\n className={cn(\n 'flex-row items-center gap-3 px-3 py-2 rounded-md',\n isSelected\n ? 'bg-blue-50 dark:bg-blue-900/30'\n : 'active:bg-gray-100 dark:active:bg-gray-800'\n )}\n accessibilityRole='button'\n accessibilityLabel={item.label}\n >\n {item.icon && (\n <View className='w-4 h-4'>{item.icon}</View>\n )}\n <Text\n className={cn(\n 'flex-1 text-sm',\n isSelected\n ? 'text-blue-700 dark:text-blue-300'\n : 'text-gray-900 dark:text-white'\n )}\n numberOfLines={1}\n >\n {item.label}\n </Text>\n {item.shortcut && (\n <Text className='text-xs text-gray-500 dark:text-gray-400 font-mono'>\n {item.shortcut}\n </Text>\n )}\n </Pressable>\n );\n })}\n </View>\n </View>\n )\n )\n )}\n </View>\n </ScrollView>\n\n {/* Footer */}\n <View className='border-t border-gray-200 dark:border-gray-700 px-4 py-2'>\n <Text className='text-xs text-gray-500 dark:text-gray-400 text-center'>\n Tap an item to select\n </Text>\n </View>\n </Pressable>\n </Pressable>\n </KeyboardAvoidingView>\n </Modal>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n Text,\n Pressable,\n ScrollView,\n useWindowDimensions,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\n/**\n * MasterListItem - Standardized list item with selection styling\n */\nexport interface MasterListItemProps {\n /** Whether this item is currently selected */\n isSelected: boolean;\n /** Press handler */\n onPress: () => void;\n /** Icon element to display (optional) */\n icon?: React.ReactNode;\n /** Main label text */\n label: string;\n /** Description text (optional) */\n description?: string;\n /** Additional className */\n className?: string;\n}\n\nexport const MasterListItem: React.FC<MasterListItemProps> = ({\n isSelected,\n onPress,\n icon,\n label,\n description,\n className,\n}) => {\n return (\n <Pressable\n onPress={onPress}\n className={cn(\n 'relative p-4 border-b border-gray-200 dark:border-gray-700',\n className\n )}\n accessibilityRole='button'\n accessibilityState={{ selected: isSelected }}\n >\n {/* Selection overlay */}\n {isSelected && (\n <View className='absolute inset-1 bg-blue-500/10 dark:bg-blue-400/10 rounded-lg' />\n )}\n\n {/* Content */}\n <View className='relative flex-row items-start'>\n {icon && (\n <View\n className={cn(\n 'mr-3 mt-0.5',\n isSelected\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-500 dark:text-gray-400'\n )}\n >\n {icon}\n </View>\n )}\n <View className='flex-1'>\n <Text\n className={cn(\n 'font-medium',\n isSelected\n ? 'text-blue-600 dark:text-blue-400'\n : 'text-gray-900 dark:text-gray-100'\n )}\n >\n {label}\n </Text>\n {description && (\n <Text\n className={cn(\n 'text-xs mt-0.5',\n isSelected\n ? 'text-blue-500 dark:text-blue-300'\n : 'text-gray-500 dark:text-gray-400'\n )}\n >\n {description}\n </Text>\n )}\n </View>\n </View>\n </Pressable>\n );\n};\n\nexport interface MasterDetailLayoutProps {\n /** Title shown above the master panel */\n masterTitle?: string;\n /** Subtitle shown below master title */\n masterSubtitle?: string;\n /** Text shown in the back button on mobile */\n backButtonText?: string;\n /** Content for the master panel */\n masterContent: React.ReactNode;\n /** Content for the detail panel */\n detailContent: React.ReactNode;\n /** Title for the detail panel */\n detailTitle?: string;\n /** Current mobile view state */\n mobileView?: 'navigation' | 'content';\n /** Callback when user wants to switch to navigation view */\n onBackToNavigation?: () => void;\n /** Custom class for master panel */\n masterClassName?: string;\n /** Custom class for detail panel */\n detailClassName?: string;\n /** Width of master panel on tablet (default: 320) */\n masterWidth?: number;\n /** Breakpoint for tablet layout (default: 768) */\n tabletBreakpoint?: number;\n}\n\n/**\n * MasterDetailLayout Component\n *\n * A responsive master-detail layout for React Native.\n * - Mobile: Toggle between master (navigation) and detail (content) views\n * - Tablet/Desktop: Side-by-side layout\n *\n * @example\n * ```tsx\n * <MasterDetailLayout\n * masterTitle=\"Table of Contents\"\n * masterContent={<NavigationMenu items={sections} />}\n * detailContent={<Article content={currentSection} />}\n * mobileView={view}\n * onBackToNavigation={() => setView('navigation')}\n * />\n * ```\n */\nexport const MasterDetailLayout: React.FC<MasterDetailLayoutProps> = ({\n masterTitle,\n masterSubtitle,\n backButtonText,\n masterContent,\n detailContent,\n detailTitle,\n mobileView = 'navigation',\n onBackToNavigation,\n masterClassName,\n detailClassName,\n masterWidth = 320,\n tabletBreakpoint = 768,\n}) => {\n const { width } = useWindowDimensions();\n const isTablet = width >= tabletBreakpoint;\n\n // Extract first part of title for back button\n const extractFirstPart = (text: string | undefined) => {\n if (!text) return 'Back';\n return text.split('-')[0].trim();\n };\n\n const buttonText = backButtonText\n ? extractFirstPart(backButtonText)\n : masterTitle\n ? extractFirstPart(masterTitle)\n : 'Back';\n\n // Tablet/Desktop: Side-by-side layout\n if (isTablet) {\n return (\n <View className='flex-1 flex-row gap-8 p-4'>\n {/* Master Panel */}\n <View style={{ width: masterWidth }}>\n {masterTitle && (\n <Text className='text-lg font-semibold text-gray-900 dark:text-white mb-4'>\n {masterTitle}\n </Text>\n )}\n {masterSubtitle && (\n <Text className='text-sm text-gray-600 dark:text-gray-400 mb-6'>\n {masterSubtitle}\n </Text>\n )}\n <View\n className={cn(\n 'bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700',\n masterClassName\n )}\n >\n <ScrollView>{masterContent}</ScrollView>\n </View>\n </View>\n\n {/* Detail Panel */}\n <View className='flex-1'>\n <View\n className={cn(\n 'bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-6',\n detailClassName\n )}\n >\n {detailTitle && (\n <Text className='text-2xl font-bold text-gray-900 dark:text-white mb-6'>\n {detailTitle}\n </Text>\n )}\n <ScrollView>{detailContent}</ScrollView>\n </View>\n </View>\n </View>\n );\n }\n\n // Mobile: Toggle between views\n return (\n <View className='flex-1'>\n {/* Mobile Navigation View */}\n {mobileView === 'navigation' && (\n <View className='flex-1 bg-white dark:bg-gray-800 p-6'>\n {masterTitle && (\n <Text className='text-xl font-semibold text-gray-900 dark:text-white mb-4'>\n {masterTitle}\n </Text>\n )}\n {masterSubtitle && (\n <Text className='text-sm text-gray-600 dark:text-gray-400 mb-6'>\n {masterSubtitle}\n </Text>\n )}\n <View className={masterClassName}>\n <ScrollView>{masterContent}</ScrollView>\n </View>\n </View>\n )}\n\n {/* Mobile Content View */}\n {mobileView === 'content' && (\n <View className='flex-1 p-4'>\n {/* Back button */}\n {onBackToNavigation && (\n <Pressable\n onPress={onBackToNavigation}\n className='mb-4 px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-800 self-start'\n accessibilityRole='button'\n accessibilityLabel={`Back to ${buttonText}`}\n >\n <Text className='text-sm font-medium text-gray-700 dark:text-gray-300'>\n ← {buttonText}\n </Text>\n </Pressable>\n )}\n\n {/* Detail content */}\n <View\n className={cn(\n 'flex-1 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-6',\n detailClassName\n )}\n >\n {detailTitle && (\n <Text className='text-2xl font-bold text-gray-900 dark:text-white mb-6'>\n {detailTitle}\n </Text>\n )}\n <ScrollView>{detailContent}</ScrollView>\n </View>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PageHeaderProps {\n /** Page title */\n title?: string;\n /** Page description */\n description?: string;\n /** Additional className */\n className?: string;\n}\n\n/**\n * PageHeader Component\n *\n * Simple page header with title and description.\n *\n * @example\n * ```tsx\n * <PageHeader\n * title=\"Dashboard\"\n * description=\"Welcome back! Here's your overview.\"\n * />\n * ```\n */\nexport const PageHeader: React.FC<PageHeaderProps> = ({\n title,\n description,\n className,\n}) => {\n return (\n <View className={cn('mb-8', className)}>\n {title && (\n <Text className='text-3xl font-bold text-gray-900 dark:text-white'>\n {title}\n </Text>\n )}\n {description && (\n <Text className='mt-2 text-gray-600 dark:text-gray-400'>\n {description}\n </Text>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface StandardPageLayoutProps {\n /** Page content */\n children: React.ReactNode;\n /** Background className */\n backgroundClassName?: string;\n /** Content className */\n contentClassName?: string;\n}\n\n/**\n * StandardPageLayout Component\n *\n * A simple page layout wrapper that applies consistent background\n * and content styling.\n *\n * @example\n * ```tsx\n * <StandardPageLayout\n * backgroundClassName=\"bg-gray-100 dark:bg-gray-900\"\n * contentClassName=\"p-4\"\n * >\n * <YourPageContent />\n * </StandardPageLayout>\n * ```\n */\nexport const StandardPageLayout: React.FC<StandardPageLayoutProps> = ({\n children,\n backgroundClassName,\n contentClassName,\n}) => {\n return (\n <View className={cn('flex-1', backgroundClassName)}>\n <View className={cn('flex-1', contentClassName)}>{children}</View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface StepListItem {\n /** Step content */\n content: React.ReactNode;\n /** Sub-items under this step */\n subItems?: React.ReactNode[];\n}\n\nexport interface StepListProps {\n /** List items (string or StepListItem) */\n items: (string | StepListItem)[];\n /** List type */\n type?: 'ordered' | 'unordered';\n /** Visual variant */\n variant?: 'default' | 'enhanced' | 'minimal';\n /** Additional className */\n className?: string;\n /** Item className */\n itemClassName?: string;\n}\n\n/**\n * StepList Component\n *\n * Displays a list of steps with optional numbering and sub-items.\n * Supports ordered/unordered lists with different visual styles.\n *\n * @example\n * ```tsx\n * <StepList\n * items={[\n * 'First step',\n * 'Second step',\n * { content: 'Third step', subItems: ['Sub-item A', 'Sub-item B'] }\n * ]}\n * type=\"ordered\"\n * variant=\"enhanced\"\n * />\n * ```\n */\nexport const StepList: React.FC<StepListProps> = ({\n items,\n type = 'ordered',\n variant = 'default',\n className,\n itemClassName,\n}) => {\n const renderStepNumber = (index: number) => {\n if (type === 'ordered') {\n if (variant === 'enhanced') {\n return (\n <View className='w-6 h-6 bg-blue-600 rounded-full items-center justify-center mr-3'>\n <Text className='text-white text-sm font-medium'>{index + 1}</Text>\n </View>\n );\n }\n if (variant === 'minimal') {\n return (\n <View className='w-6 h-6 bg-blue-100 dark:bg-blue-900/20 rounded-full items-center justify-center mr-3'>\n <Text className='text-blue-600 dark:text-blue-400 text-sm font-medium'>\n {index + 1}\n </Text>\n </View>\n );\n }\n return (\n <Text className='text-gray-600 dark:text-gray-400 mr-2'>\n {index + 1}.\n </Text>\n );\n }\n\n // Unordered\n if (variant === 'minimal') {\n return <View className='w-2 h-2 bg-blue-600 rounded-full mr-3 mt-2' />;\n }\n return <Text className='text-gray-600 dark:text-gray-400 mr-2'>•</Text>;\n };\n\n const renderItem = (item: string | StepListItem, index: number) => {\n const isStepItem = typeof item === 'object';\n const content = isStepItem ? item.content : item;\n const subItems = isStepItem ? item.subItems : undefined;\n\n return (\n <View\n key={index}\n className={cn(\n 'flex-row',\n variant === 'enhanced' && 'pb-4',\n variant === 'enhanced' &&\n index < items.length - 1 &&\n 'border-l-2 border-gray-200 dark:border-gray-700 ml-3 pl-6',\n itemClassName\n )}\n >\n {/* Step indicator */}\n {variant !== 'enhanced' || type === 'unordered' ? (\n renderStepNumber(index)\n ) : (\n <View className='absolute -left-3'>{renderStepNumber(index)}</View>\n )}\n\n {/* Content */}\n <View className='flex-1'>\n {typeof content === 'string' ? (\n <Text className='text-gray-600 dark:text-gray-400'>{content}</Text>\n ) : (\n content\n )}\n\n {/* Sub-items */}\n {subItems && subItems.length > 0 && (\n <View className='mt-2 ml-4 gap-1'>\n {subItems.map((subItem, subIndex) => (\n <View key={subIndex} className='flex-row'>\n <Text className='text-gray-500 dark:text-gray-500 mr-2'>\n •\n </Text>\n {typeof subItem === 'string' ? (\n <Text className='text-sm text-gray-500 dark:text-gray-500 flex-1'>\n {subItem}\n </Text>\n ) : (\n subItem\n )}\n </View>\n ))}\n </View>\n )}\n </View>\n </View>\n );\n };\n\n return (\n <View\n className={cn(\n variant === 'default' && 'gap-2',\n variant === 'enhanced' && 'gap-0',\n variant === 'minimal' && 'gap-3',\n className\n )}\n >\n {items.map(renderItem)}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport type FeatureCardColor =\n | 'green'\n | 'blue'\n | 'purple'\n | 'orange'\n | 'red'\n | 'indigo'\n | 'cyan'\n | 'emerald'\n | 'pink'\n | 'gray';\n\nexport interface FeatureCardProps {\n /** Icon or emoji to display */\n icon: React.ReactNode;\n /** Title of the feature */\n title: string;\n /** Description of the feature */\n description: string;\n /** List of benefits (shown as bullet points) */\n benefits?: string[];\n /** Metrics to display */\n metrics?: { [key: string]: string };\n /** Color theme */\n color?: FeatureCardColor;\n /** Highlight with gradient background */\n isHighlight?: boolean;\n /** Optional CTA element */\n cta?: React.ReactNode;\n /** Press handler */\n onPress?: () => void;\n /** Show colored left border */\n borderColor?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FeatureCard Component\n *\n * Card component for displaying features with icon, title, description,\n * benefits, and metrics.\n *\n * @example\n * ```tsx\n * <FeatureCard\n * icon={<ShieldIcon />}\n * title=\"Security\"\n * description=\"End-to-end encryption for all your data\"\n * benefits={['256-bit encryption', 'Zero-knowledge architecture']}\n * color=\"blue\"\n * />\n * ```\n */\nexport const FeatureCard: React.FC<FeatureCardProps> = ({\n icon,\n title,\n description,\n benefits,\n metrics,\n color = 'blue',\n isHighlight = false,\n cta,\n onPress,\n borderColor = false,\n className,\n}) => {\n // Color configurations\n const colorClasses: Record<FeatureCardColor, string> = {\n blue: 'text-blue-600 dark:text-blue-400',\n green: 'text-green-600 dark:text-green-400',\n purple: 'text-purple-600 dark:text-purple-400',\n orange: 'text-orange-600 dark:text-orange-400',\n pink: 'text-pink-600 dark:text-pink-400',\n gray: 'text-gray-600 dark:text-gray-400',\n red: 'text-red-600 dark:text-red-400',\n indigo: 'text-indigo-600 dark:text-indigo-400',\n cyan: 'text-cyan-600 dark:text-cyan-400',\n emerald: 'text-emerald-600 dark:text-emerald-400',\n };\n\n const borderColorClasses: Record<FeatureCardColor, string> = {\n green: 'border-l-4 border-l-green-500',\n blue: 'border-l-4 border-l-blue-500',\n purple: 'border-l-4 border-l-purple-500',\n orange: 'border-l-4 border-l-orange-500',\n red: 'border-l-4 border-l-red-500',\n indigo: 'border-l-4 border-l-indigo-500',\n cyan: 'border-l-4 border-l-cyan-500',\n emerald: 'border-l-4 border-l-emerald-500',\n pink: 'border-l-4 border-l-pink-500',\n gray: 'border-l-4 border-l-gray-500',\n };\n\n const iconBackgroundClasses: Record<FeatureCardColor, string> = {\n green: 'bg-green-100 dark:bg-green-900/20',\n blue: 'bg-blue-100 dark:bg-blue-900/20',\n purple: 'bg-purple-100 dark:bg-purple-900/20',\n orange: 'bg-orange-100 dark:bg-orange-900/20',\n red: 'bg-red-100 dark:bg-red-900/20',\n indigo: 'bg-indigo-100 dark:bg-indigo-900/20',\n cyan: 'bg-cyan-100 dark:bg-cyan-900/20',\n emerald: 'bg-emerald-100 dark:bg-emerald-900/20',\n pink: 'bg-pink-100 dark:bg-pink-900/20',\n gray: 'bg-gray-100 dark:bg-gray-900/20',\n };\n\n const bulletColorClasses: Record<FeatureCardColor, string> = {\n green: 'bg-green-500',\n blue: 'bg-blue-500',\n purple: 'bg-purple-500',\n orange: 'bg-orange-500',\n red: 'bg-red-500',\n indigo: 'bg-indigo-500',\n cyan: 'bg-cyan-500',\n emerald: 'bg-emerald-500',\n pink: 'bg-pink-500',\n gray: 'bg-gray-500',\n };\n\n const CardContent = () => (\n <>\n {/* Icon */}\n {borderColor ? (\n <View\n className={cn(\n 'w-12 h-12 rounded-lg items-center justify-center mb-4',\n iconBackgroundClasses[color]\n )}\n >\n <View className={colorClasses[color]}>{icon}</View>\n </View>\n ) : (\n <View className={cn('mb-4', colorClasses[color])}>{icon}</View>\n )}\n\n {/* Title */}\n <Text className='text-xl font-semibold text-gray-900 dark:text-white mb-3'>\n {title}\n </Text>\n\n {/* Description */}\n <Text className='text-gray-600 dark:text-gray-300 mb-4 leading-relaxed'>\n {description}\n </Text>\n\n {/* CTA */}\n {cta && <View className='mt-3 mb-4'>{cta}</View>}\n\n {/* Benefits */}\n {benefits && benefits.length > 0 && (\n <View className='gap-2 mb-4'>\n {benefits.map((benefit, index) => (\n <View key={index} className='flex-row items-start'>\n <View\n className={cn(\n 'w-2 h-2 rounded-full mt-2 mr-3',\n bulletColorClasses[color]\n )}\n />\n <Text className='flex-1 text-sm text-gray-600 dark:text-gray-400'>\n {benefit}\n </Text>\n </View>\n ))}\n </View>\n )}\n\n {/* Metrics */}\n {metrics && Object.keys(metrics).length > 0 && (\n <View className='flex-row flex-wrap gap-4 mt-4'>\n {Object.entries(metrics).map(([key, value], index) => (\n <View\n key={index}\n className='flex-1 min-w-[80px] items-center p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg'\n >\n <Text className={cn('text-lg font-bold', colorClasses[color])}>\n {value}\n </Text>\n <Text className='text-xs text-gray-500 dark:text-gray-400 mt-1'>\n {key}\n </Text>\n </View>\n ))}\n </View>\n )}\n </>\n );\n\n const baseClasses = cn(\n 'p-6 rounded-xl',\n borderColor && borderColorClasses[color],\n isHighlight\n ? 'bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800'\n : 'bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700',\n className\n );\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n className={baseClasses}\n accessibilityRole='button'\n accessibilityLabel={title}\n >\n <CardContent />\n </Pressable>\n );\n }\n\n return (\n <View className={baseClasses}>\n <CardContent />\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface Feature {\n /** Unique identifier */\n id?: string;\n /** Icon element */\n icon: React.ReactNode;\n /** Feature title */\n title: string;\n /** Feature description */\n description: string | React.ReactNode;\n /** Badge text and variant */\n badge?: {\n text: string;\n variant?: 'success' | 'info' | 'warning' | 'default';\n };\n}\n\nexport interface FeatureGridProps {\n /** Array of features to display */\n features: Feature[];\n /** Number of columns */\n columns?: 1 | 2 | 3 | 4;\n /** Gap between items */\n gap?: 'sm' | 'md' | 'lg';\n /** Card style variant */\n cardVariant?: 'default' | 'card' | 'minimal';\n /** Icon size */\n iconSize?: 'sm' | 'md' | 'lg';\n /** Feature press handler */\n onFeaturePress?: (feature: Feature) => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * FeatureGrid Component\n *\n * Grid layout for displaying feature cards.\n *\n * @example\n * ```tsx\n * <FeatureGrid\n * features={[\n * { icon: <Icon1 />, title: 'Feature 1', description: 'Description 1' },\n * { icon: <Icon2 />, title: 'Feature 2', description: 'Description 2' },\n * ]}\n * columns={2}\n * />\n * ```\n */\nexport const FeatureGrid: React.FC<FeatureGridProps> = ({\n features,\n columns = 2,\n gap = 'md',\n cardVariant = 'default',\n iconSize = 'md',\n onFeaturePress,\n className,\n}) => {\n const gapClasses = {\n sm: 'gap-4',\n md: 'gap-6',\n lg: 'gap-8',\n };\n\n const iconSizeClasses = {\n sm: 'w-12 h-12',\n md: 'w-16 h-16',\n lg: 'w-20 h-20',\n };\n\n const badgeVariants = {\n success:\n 'bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-300',\n info: 'bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300',\n warning:\n 'bg-amber-100 dark:bg-amber-900/30 text-amber-800 dark:text-amber-300',\n default: 'bg-gray-100 dark:bg-gray-800 text-gray-800 dark:text-gray-300',\n };\n\n const renderFeature = (feature: Feature, index: number) => {\n const content = (\n <View\n className={cn(\n 'items-center',\n cardVariant === 'card' &&\n 'bg-white dark:bg-gray-800 rounded-2xl p-6 shadow-lg',\n cardVariant === 'minimal' && 'gap-4'\n )}\n >\n {/* Badge */}\n {feature.badge && (\n <View className='mb-4'>\n <View\n className={cn(\n 'px-2.5 py-0.5 rounded-full',\n badgeVariants[feature.badge.variant || 'default']\n )}\n >\n <Text className='text-xs font-medium'>{feature.badge.text}</Text>\n </View>\n </View>\n )}\n\n {/* Icon */}\n <View\n className={cn(\n 'items-center justify-center rounded-2xl mb-4',\n 'bg-blue-100 dark:bg-blue-900/30',\n iconSizeClasses[iconSize]\n )}\n >\n <View className='text-blue-600 dark:text-blue-400'>\n {feature.icon}\n </View>\n </View>\n\n {/* Title */}\n <Text className='text-lg font-bold text-gray-900 dark:text-white mb-2 text-center'>\n {feature.title}\n </Text>\n\n {/* Description */}\n {typeof feature.description === 'string' ? (\n <Text className='text-gray-600 dark:text-gray-300 text-center leading-relaxed'>\n {feature.description}\n </Text>\n ) : (\n feature.description\n )}\n </View>\n );\n\n if (onFeaturePress) {\n return (\n <Pressable\n key={feature.id || index}\n onPress={() => onFeaturePress(feature)}\n className='flex-1'\n style={{ minWidth: `${100 / columns - 5}%` }}\n accessibilityRole='button'\n accessibilityLabel={feature.title}\n >\n {content}\n </Pressable>\n );\n }\n\n return (\n <View\n key={feature.id || index}\n className='flex-1'\n style={{ minWidth: `${100 / columns - 5}%` }}\n >\n {content}\n </View>\n );\n };\n\n return (\n <View className={cn('flex-row flex-wrap', gapClasses[gap], className)}>\n {features.map(renderFeature)}\n </View>\n );\n};\n\n// Helper function to create feature objects\nexport const createFeature = (\n icon: React.ReactNode,\n title: string,\n description: string | React.ReactNode,\n options?: Partial<Feature>\n): Feature => ({\n icon,\n title,\n description,\n ...options,\n});\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface CTAButton {\n /** Button label */\n label: string;\n /** Press handler */\n onPress: () => void;\n /** Button variant */\n variant?: 'primary' | 'secondary' | 'outline';\n}\n\nexport interface CTASectionProps {\n /** Section title */\n title: string;\n /** Section description */\n description: string;\n /** Primary CTA button */\n primaryButton: CTAButton;\n /** Secondary CTA button */\n secondaryButton?: CTAButton;\n /** Gradient preset */\n gradient?: 'blue-purple' | 'green-blue' | 'orange-red' | 'purple-pink';\n /** Text color theme */\n textColor?: 'light' | 'dark';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional className */\n className?: string;\n}\n\n/**\n * CTASection Component\n *\n * Call-to-action section with gradient background and buttons.\n *\n * @example\n * ```tsx\n * <CTASection\n * title=\"Ready to get started?\"\n * description=\"Join thousands of users today.\"\n * primaryButton={{ label: 'Sign Up', onPress: handleSignUp }}\n * secondaryButton={{ label: 'Learn More', onPress: handleLearnMore }}\n * />\n * ```\n */\nexport const CTASection: React.FC<CTASectionProps> = ({\n title,\n description,\n primaryButton,\n secondaryButton,\n gradient = 'blue-purple',\n textColor = 'light',\n size = 'lg',\n className,\n}) => {\n const gradientClasses = {\n 'blue-purple': 'bg-blue-600 dark:bg-blue-700',\n 'green-blue': 'bg-green-600 dark:bg-green-700',\n 'orange-red': 'bg-orange-600 dark:bg-orange-700',\n 'purple-pink': 'bg-purple-600 dark:bg-purple-700',\n };\n\n const sizeClasses = {\n sm: 'py-8 px-4',\n md: 'py-12 px-6',\n lg: 'py-16 px-8',\n };\n\n const titleSizeClasses = {\n sm: 'text-2xl',\n md: 'text-3xl',\n lg: 'text-4xl',\n };\n\n const descriptionSizeClasses = {\n sm: 'text-base',\n md: 'text-lg',\n lg: 'text-xl',\n };\n\n const textColorClass = textColor === 'light' ? 'text-white' : 'text-gray-900';\n\n const renderButton = (button: CTAButton, isPrimary: boolean) => (\n <Pressable\n onPress={button.onPress}\n className={cn(\n 'px-6 py-3 rounded-lg',\n isPrimary ? 'bg-white' : 'bg-white/20 border border-white/30'\n )}\n accessibilityRole='button'\n accessibilityLabel={button.label}\n >\n <Text\n className={cn(\n 'text-base font-semibold text-center',\n isPrimary ? 'text-blue-600' : 'text-white'\n )}\n >\n {button.label}\n </Text>\n </Pressable>\n );\n\n return (\n <View\n className={cn(\n 'rounded-2xl overflow-hidden',\n gradientClasses[gradient],\n sizeClasses[size],\n className\n )}\n >\n <View className='items-center'>\n {/* Title */}\n <Text\n className={cn(\n 'font-bold mb-4 text-center',\n titleSizeClasses[size],\n textColorClass\n )}\n >\n {title}\n </Text>\n\n {/* Description */}\n <Text\n className={cn(\n 'mb-8 text-center opacity-90 max-w-lg',\n descriptionSizeClasses[size],\n textColorClass\n )}\n >\n {description}\n </Text>\n\n {/* Buttons */}\n <View className='flex-row gap-4'>\n {renderButton(primaryButton, true)}\n {secondaryButton && renderButton(secondaryButton, false)}\n </View>\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface PromotionalBannerProps {\n /** Banner title */\n title: string;\n /** Optional subtitle */\n subtitle?: string;\n /** Button text */\n buttonText: string;\n /** Button press handler */\n onButtonPress: () => void;\n /** Visual variant */\n variant?: 'default' | 'prominent';\n /** Badge text */\n badgeText?: string;\n /** Icon element (optional) */\n icon?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * PromotionalBanner Component\n *\n * Banner for promotions, announcements, or CTAs.\n *\n * @example\n * ```tsx\n * <PromotionalBanner\n * title=\"Get Started Free\"\n * subtitle=\"No credit card required\"\n * buttonText=\"Sign Up\"\n * onButtonPress={handleSignUp}\n * badgeText=\"FREE\"\n * />\n * ```\n */\nexport const PromotionalBanner: React.FC<PromotionalBannerProps> = ({\n title,\n subtitle,\n buttonText,\n onButtonPress,\n variant = 'default',\n badgeText = 'FREE',\n icon,\n className,\n}) => {\n const isProminent = variant === 'prominent';\n\n return (\n <View\n className={cn(\n 'bg-green-50 dark:bg-green-900/20',\n 'border-b border-green-200 dark:border-green-700',\n isProminent && 'border-b-2',\n className\n )}\n >\n <View className='px-4 py-4'>\n <View className='flex-row items-center justify-between gap-4 flex-wrap'>\n {/* Left side: Badge + Title */}\n <View className='flex-row items-center flex-1'>\n {/* Badge */}\n <View className='bg-green-500 px-3 py-1 rounded-full mr-3'>\n <Text className='text-white text-xs font-bold'>{badgeText}</Text>\n </View>\n\n {/* Title & Subtitle */}\n <View className='flex-1'>\n <Text\n className={cn(\n 'text-green-800 dark:text-green-200 font-semibold',\n isProminent && 'text-lg'\n )}\n >\n {title}\n </Text>\n {subtitle && (\n <Text className='text-green-700 dark:text-green-300 text-sm'>\n {subtitle}\n </Text>\n )}\n </View>\n </View>\n\n {/* CTA Button */}\n <Pressable\n onPress={onButtonPress}\n className={cn(\n 'bg-green-600 dark:bg-green-700 rounded-lg',\n 'flex-row items-center',\n isProminent ? 'px-6 py-3' : 'px-4 py-2'\n )}\n accessibilityRole='button'\n accessibilityLabel={buttonText}\n >\n {icon && <View className='mr-2'>{icon}</View>}\n <Text\n className={cn(\n 'text-white font-bold',\n isProminent ? 'text-base' : 'text-sm'\n )}\n >\n {buttonText}\n </Text>\n </Pressable>\n </View>\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport { useState, useRef, useEffect } from 'react';\nimport {\n View,\n Text,\n Pressable,\n Animated,\n LayoutAnimation,\n Platform,\n UIManager,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\n// Enable LayoutAnimation on Android\nif (\n Platform.OS === 'android' &&\n UIManager.setLayoutAnimationEnabledExperimental\n) {\n UIManager.setLayoutAnimationEnabledExperimental(true);\n}\n\nexport interface CollapsibleSectionItem {\n /** Unique identifier */\n id: string;\n /** Item title */\n title: string;\n /** Item content */\n content?: React.ReactNode;\n}\n\nexport interface CollapsibleSectionProps {\n /** Section ID */\n id: string;\n /** Section title */\n title: string;\n /** Section content (shown when no subsections) */\n content?: React.ReactNode;\n /** Subsections */\n subsections?: CollapsibleSectionItem[];\n /** Whether section is selected */\n isSelected?: boolean;\n /** Currently selected subsection ID */\n selectedSubsection?: string | null;\n /** Section select handler */\n onSectionSelect?: (sectionId: string) => void;\n /** Subsection select handler */\n onSubsectionSelect?: (subsectionId: string, parentSectionId: string) => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * CollapsibleSection Component\n *\n * Collapsible section with optional subsections.\n * Useful for documentation, FAQs, or navigation.\n *\n * @example\n * ```tsx\n * <CollapsibleSection\n * id=\"getting-started\"\n * title=\"Getting Started\"\n * subsections={[\n * { id: 'install', title: 'Installation' },\n * { id: 'setup', title: 'Setup' },\n * ]}\n * isSelected={selectedSection === 'getting-started'}\n * onSectionSelect={setSelectedSection}\n * onSubsectionSelect={handleSubsectionSelect}\n * />\n * ```\n */\nexport const CollapsibleSection: React.FC<CollapsibleSectionProps> = ({\n id,\n title,\n subsections,\n isSelected = false,\n selectedSubsection = null,\n onSectionSelect,\n onSubsectionSelect,\n className,\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const rotateAnim = useRef(new Animated.Value(0)).current;\n\n const hasSubsections = subsections && subsections.length > 0;\n\n useEffect(() => {\n Animated.timing(rotateAnim, {\n toValue: isExpanded ? 1 : 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }, [isExpanded, rotateAnim]);\n\n const handleToggle = () => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n setIsExpanded(!isExpanded);\n };\n\n const handleSectionPress = () => {\n onSectionSelect?.(id);\n };\n\n const rotation = rotateAnim.interpolate({\n inputRange: [0, 1],\n outputRange: ['0deg', '90deg'],\n });\n\n return (\n <View className={className}>\n {/* Section Header */}\n <View className='flex-row items-center'>\n {/* Selection overlay */}\n {isSelected && !selectedSubsection && (\n <View className='absolute top-1 bottom-1 left-1 right-10 bg-blue-500/20 dark:bg-blue-400/20 rounded-lg' />\n )}\n\n {/* Title button */}\n <Pressable\n onPress={handleSectionPress}\n className='flex-1 py-4 pl-4 pr-2'\n accessibilityRole='button'\n accessibilityLabel={title}\n accessibilityState={{ selected: isSelected && !selectedSubsection }}\n >\n <Text\n className={cn(\n 'text-base font-medium',\n isSelected && !selectedSubsection\n ? 'text-blue-700 dark:text-blue-300'\n : 'text-gray-700 dark:text-gray-300'\n )}\n >\n {title}\n </Text>\n </Pressable>\n\n {/* Expand/collapse button */}\n {hasSubsections && (\n <Pressable\n onPress={handleToggle}\n className='p-2 rounded-md'\n accessibilityRole='button'\n accessibilityLabel={isExpanded ? 'Collapse' : 'Expand'}\n >\n <Animated.View style={{ transform: [{ rotate: rotation }] }}>\n <Text className='text-gray-500 text-lg'>›</Text>\n </Animated.View>\n </Pressable>\n )}\n </View>\n\n {/* Subsections */}\n {hasSubsections && isExpanded && (\n <View className='ml-6 mb-2'>\n {subsections.map(subsection => (\n <View key={subsection.id} className='relative'>\n {/* Selection overlay */}\n {selectedSubsection === subsection.id && (\n <View className='absolute top-0.5 bottom-0.5 left-0 right-8 bg-blue-500/20 dark:bg-blue-400/20 rounded-lg' />\n )}\n\n <Pressable\n onPress={() => onSubsectionSelect?.(subsection.id, id)}\n className='py-2 pl-4 pr-3'\n accessibilityRole='button'\n accessibilityLabel={subsection.title}\n accessibilityState={{\n selected: selectedSubsection === subsection.id,\n }}\n >\n <Text\n className={cn(\n 'text-sm',\n selectedSubsection === subsection.id\n ? 'text-blue-700 dark:text-blue-300'\n : 'text-gray-600 dark:text-gray-400'\n )}\n >\n {subsection.title}\n </Text>\n </Pressable>\n </View>\n ))}\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface DashboardStatCardProps {\n /** Stat title */\n title: string;\n /** Stat value */\n value: string | number;\n /** Change percentage */\n change?: number;\n /** Change period description */\n changePeriod?: string;\n /** Icon element */\n icon?: React.ReactNode;\n /** Color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger';\n /** Additional className */\n className?: string;\n}\n\n/**\n * DashboardStatCard Component\n *\n * Statistics display card for dashboards.\n * Shows value, change indicator, and optional icon.\n *\n * @example\n * ```tsx\n * <DashboardStatCard\n * title=\"Total Revenue\"\n * value=\"$45,231\"\n * change={12.5}\n * changePeriod=\"vs last month\"\n * variant=\"success\"\n * />\n * ```\n */\nexport const DashboardStatCard: React.FC<DashboardStatCardProps> = ({\n title,\n value,\n change,\n changePeriod = 'vs last period',\n icon,\n variant = 'default',\n className,\n}) => {\n const variantClasses = {\n default: 'bg-white dark:bg-gray-900',\n primary: 'bg-blue-50 dark:bg-blue-900/20',\n success: 'bg-green-50 dark:bg-green-900/20',\n warning: 'bg-yellow-50 dark:bg-yellow-900/20',\n danger: 'bg-red-50 dark:bg-red-900/20',\n };\n\n const isPositive = change !== undefined && change >= 0;\n\n return (\n <View\n className={cn(\n 'rounded-lg border border-gray-200 dark:border-gray-700 p-6',\n variantClasses[variant],\n className\n )}\n >\n {/* Header */}\n <View className='flex-row items-start justify-between mb-2'>\n <Text className='text-sm font-medium text-gray-600 dark:text-gray-400'>\n {title}\n </Text>\n {icon && (\n <View className='text-gray-400 dark:text-gray-600'>{icon}</View>\n )}\n </View>\n\n {/* Value */}\n <Text className='text-3xl font-bold text-gray-900 dark:text-white'>\n {value}\n </Text>\n\n {/* Change indicator */}\n {change !== undefined && (\n <View className='flex-row items-center gap-1 mt-2'>\n <Text\n className={cn(\n 'text-sm font-medium',\n isPositive\n ? 'text-green-600 dark:text-green-400'\n : 'text-red-600 dark:text-red-400'\n )}\n >\n {isPositive ? '↑' : '↓'} {Math.abs(change)}%\n </Text>\n <Text className='text-xs text-gray-500 dark:text-gray-400'>\n {changePeriod}\n </Text>\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface StatDisplayProps {\n /** The main value/number to display */\n value: string | number;\n /** Label/description for the stat */\n label: string;\n /** Color variant */\n variant?: 'primary' | 'success' | 'warning' | 'danger' | 'neutral' | 'white';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n /** Icon element */\n icon?: React.ReactNode;\n /** Icon position */\n iconPosition?: 'top' | 'left';\n /** Additional className */\n className?: string;\n}\n\n/**\n * StatDisplay Component\n *\n * Displays a statistic or metric with a value and label.\n * Commonly used in dashboards, hero sections, and analytics.\n *\n * @example\n * ```tsx\n * <StatDisplay value=\"5K\" label=\"Gas Overhead\" variant=\"primary\" />\n * <StatDisplay value=\"42\" label=\"Active Users\" variant=\"success\" size=\"lg\" />\n * ```\n */\nexport const StatDisplay: React.FC<StatDisplayProps> = ({\n value,\n label,\n variant = 'neutral',\n size = 'md',\n align = 'center',\n icon,\n iconPosition = 'top',\n className,\n}) => {\n const variantClasses = {\n primary: {\n value: 'text-blue-600 dark:text-blue-400',\n label: 'text-blue-600/70 dark:text-blue-400/70',\n },\n success: {\n value: 'text-green-600 dark:text-green-400',\n label: 'text-green-600/70 dark:text-green-400/70',\n },\n warning: {\n value: 'text-yellow-600 dark:text-yellow-400',\n label: 'text-yellow-600/70 dark:text-yellow-400/70',\n },\n danger: {\n value: 'text-red-600 dark:text-red-400',\n label: 'text-red-600/70 dark:text-red-400/70',\n },\n neutral: {\n value: 'text-gray-900 dark:text-gray-100',\n label: 'text-gray-600 dark:text-gray-400',\n },\n white: {\n value: 'text-white',\n label: 'text-white/70',\n },\n };\n\n const sizeClasses = {\n sm: { value: 'text-xl', label: 'text-xs' },\n md: { value: 'text-2xl', label: 'text-sm' },\n lg: { value: 'text-3xl', label: 'text-base' },\n xl: { value: 'text-4xl', label: 'text-lg' },\n };\n\n const alignClasses = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n };\n\n const variantConfig = variantClasses[variant];\n const sizeConfig = sizeClasses[size];\n\n if (iconPosition === 'left' && icon) {\n return (\n <View\n className={cn(\n 'flex-row items-center gap-3',\n align === 'center' && 'justify-center',\n className\n )}\n >\n <View className={variantConfig.value}>{icon}</View>\n <View>\n <Text\n className={cn('font-bold', sizeConfig.value, variantConfig.value)}\n >\n {value}\n </Text>\n <Text className={cn(sizeConfig.label, variantConfig.label)}>\n {label}\n </Text>\n </View>\n </View>\n );\n }\n\n return (\n <View className={cn(alignClasses[align], className)}>\n {icon && iconPosition === 'top' && (\n <View className={cn('mb-2', variantConfig.value)}>{icon}</View>\n )}\n <Text className={cn('font-bold', sizeConfig.value, variantConfig.value)}>\n {value}\n </Text>\n <Text className={cn(sizeConfig.label, variantConfig.label)}>{label}</Text>\n </View>\n );\n};\n","import * as React from 'react';\nimport { View, Text } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface KeyValuePairProps {\n /** Label/key text */\n label: string;\n /** Value content */\n value: React.ReactNode;\n /** Layout orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Alignment for horizontal layout */\n align?: 'start' | 'center' | 'between';\n /** Label width (for horizontal layout) */\n labelWidth?: 'auto' | 'sm' | 'md' | 'lg';\n /** Text size */\n size?: 'sm' | 'md' | 'lg';\n /** Show separator */\n separator?: boolean;\n /** Label color variant */\n labelVariant?: 'default' | 'muted' | 'strong';\n /** Value color variant */\n valueVariant?: 'default' | 'muted' | 'strong' | 'primary';\n /** Additional className */\n className?: string;\n}\n\n/**\n * KeyValuePair Component\n *\n * Displays a label-value pair with flexible layout options.\n * Commonly used in forms, details pages, and data displays.\n *\n * @example\n * ```tsx\n * <KeyValuePair label=\"Email\" value=\"user@example.com\" />\n * <KeyValuePair\n * label=\"Status\"\n * value=\"Active\"\n * orientation=\"horizontal\"\n * align=\"between\"\n * />\n * ```\n */\nexport const KeyValuePair: React.FC<KeyValuePairProps> = ({\n label,\n value,\n orientation = 'vertical',\n align = 'start',\n labelWidth = 'auto',\n size = 'md',\n separator = false,\n labelVariant = 'muted',\n valueVariant = 'default',\n className,\n}) => {\n const sizeClasses = {\n sm: { label: 'text-sm', value: 'text-sm', gap: 'gap-1' },\n md: { label: 'text-base', value: 'text-base', gap: 'gap-2' },\n lg: { label: 'text-lg', value: 'text-lg', gap: 'gap-3' },\n };\n\n const labelWidthStyles = {\n auto: undefined,\n sm: 96,\n md: 128,\n lg: 160,\n };\n\n const alignClasses = {\n start: 'justify-start',\n center: 'justify-center',\n between: 'justify-between',\n };\n\n const labelVariantClasses = {\n default: 'text-gray-700 dark:text-gray-300',\n muted: 'text-gray-600 dark:text-gray-400',\n strong: 'text-gray-900 dark:text-gray-100 font-semibold',\n };\n\n const valueVariantClasses = {\n default: 'text-gray-900 dark:text-gray-100',\n muted: 'text-gray-600 dark:text-gray-400',\n strong: 'text-gray-900 dark:text-gray-100 font-semibold',\n primary: 'text-blue-600 dark:text-blue-400',\n };\n\n const sizeConfig = sizeClasses[size];\n\n return (\n <View\n className={cn(\n orientation === 'horizontal' ? 'flex-row items-center' : 'flex-col',\n orientation === 'horizontal' && alignClasses[align],\n sizeConfig.gap,\n separator && 'pb-3 mb-3 border-b border-gray-200 dark:border-gray-700',\n className\n )}\n >\n <Text\n className={cn(sizeConfig.label, labelVariantClasses[labelVariant])}\n style={\n orientation === 'horizontal' && labelWidth !== 'auto'\n ? { width: labelWidthStyles[labelWidth] }\n : undefined\n }\n >\n {label}\n </Text>\n {typeof value === 'string' || typeof value === 'number' ? (\n <Text\n className={cn(\n sizeConfig.value,\n valueVariantClasses[valueVariant],\n orientation === 'horizontal' && 'flex-1'\n )}\n >\n {value}\n </Text>\n ) : (\n <View className={cn(orientation === 'horizontal' && 'flex-1')}>\n {value}\n </View>\n )}\n </View>\n );\n};\n","import * as React from 'react';\nimport { Text, Pressable, Linking, Alert } from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SmartLinkProps {\n /** Link destination - URL or internal path */\n to?: string;\n /** Alternative prop name for destination */\n href?: string;\n /** Force external link behavior */\n external?: boolean;\n /** Link text/content */\n children: React.ReactNode;\n /** Link variant */\n variant?: 'subtle' | 'default' | 'muted' | 'external' | 'inherit';\n /** Text size */\n size?: 'sm' | 'default' | 'lg';\n /** Navigation handler for internal links */\n onNavigate?: (path: string) => void;\n /** Disabled state */\n disabled?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SmartLink Component\n *\n * Intelligent link component that handles both internal and external links.\n * External links open in browser, internal links use the onNavigate callback.\n *\n * @example\n * ```tsx\n * <SmartLink to=\"/profile\" onNavigate={navigate}>\n * View Profile\n * </SmartLink>\n * <SmartLink href=\"https://example.com\" external>\n * Visit Website\n * </SmartLink>\n * ```\n */\nexport const SmartLink: React.FC<SmartLinkProps> = ({\n to,\n href,\n external,\n children,\n variant = 'subtle',\n size = 'default',\n onNavigate,\n disabled = false,\n className,\n}) => {\n const destination = to || href;\n\n const variantClasses = {\n subtle: 'text-gray-700 dark:text-gray-300',\n default: 'text-blue-600 dark:text-blue-400 underline',\n muted: 'text-gray-500 dark:text-gray-500',\n external: 'text-blue-600 dark:text-blue-400 underline',\n inherit: 'text-inherit',\n };\n\n const sizeClasses = {\n sm: 'text-sm',\n default: 'text-base',\n lg: 'text-lg',\n };\n\n const handlePress = async () => {\n if (disabled || !destination) return;\n\n // Check if external\n const isExternal =\n external ||\n destination.startsWith('http') ||\n destination.startsWith('mailto:') ||\n destination.startsWith('tel:');\n\n if (isExternal) {\n // Open in browser\n try {\n const canOpen = await Linking.canOpenURL(destination);\n if (canOpen) {\n await Linking.openURL(destination);\n } else {\n Alert.alert('Error', 'Cannot open this link');\n }\n } catch {\n Alert.alert('Error', 'Failed to open link');\n }\n } else {\n // Internal navigation\n if (onNavigate) {\n onNavigate(destination);\n }\n }\n };\n\n // If no destination, render as plain text\n if (!destination) {\n return (\n <Text\n className={cn(\n variantClasses[variant],\n sizeClasses[size],\n disabled && 'opacity-50',\n className\n )}\n >\n {children}\n </Text>\n );\n }\n\n // Determine if external for styling\n const isExternal =\n external ||\n destination.startsWith('http') ||\n destination.startsWith('mailto:') ||\n destination.startsWith('tel:');\n\n const appliedVariant =\n isExternal && variant === 'subtle' ? 'external' : variant;\n\n return (\n <Pressable\n onPress={handlePress}\n disabled={disabled}\n accessibilityRole='link'\n accessibilityLabel={typeof children === 'string' ? children : undefined}\n accessibilityState={{ disabled }}\n >\n {({ pressed }) => (\n <Text\n className={cn(\n variantClasses[appliedVariant],\n sizeClasses[size],\n pressed && 'opacity-70',\n disabled && 'opacity-50',\n className\n )}\n >\n {children}\n {isExternal && appliedVariant === 'external' && ' ↗'}\n </Text>\n )}\n </Pressable>\n );\n};\n\nexport interface SmartContentProps {\n /** Content with potential links */\n children: string;\n /** Link mappings from text to paths */\n mappings?: Record<string, string>;\n /** Navigation handler for internal links */\n onNavigate?: (path: string) => void;\n /** Link variant */\n variant?: SmartLinkProps['variant'];\n /** Additional className */\n className?: string;\n}\n\n/**\n * SmartContent Component\n *\n * Automatically converts text matches to links based on mappings.\n *\n * @example\n * ```tsx\n * <SmartContent\n * mappings={{ 'privacy policy': '/privacy', 'contact us': '/contact' }}\n * onNavigate={navigate}\n * >\n * Please read our privacy policy or contact us for help.\n * </SmartContent>\n * ```\n */\nexport const SmartContent: React.FC<SmartContentProps> = ({\n children,\n mappings = {},\n onNavigate,\n variant = 'subtle',\n className,\n}) => {\n const processedContent = React.useMemo(() => {\n if (!children || typeof children !== 'string') {\n return {\n parts: [children || ''],\n links: [] as { text: string; path: string; index: number }[],\n };\n }\n\n let content = children;\n const links: { text: string; path: string; index: number }[] = [];\n\n // Sort by length (longest first) to avoid partial replacements\n const sortedMappings = Object.entries(mappings).sort(\n ([a], [b]) => b.length - a.length\n );\n\n let placeholderIndex = 0;\n sortedMappings.forEach(([text, path]) => {\n if (text && path) {\n const regex = new RegExp(\n `\\\\b${text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\b`,\n 'gi'\n );\n content = content.replace(regex, match => {\n links.push({ text: match, path, index: placeholderIndex });\n return `__LINK_${placeholderIndex++}__`;\n });\n }\n });\n\n // Split content by placeholders\n const parts = content.split(/(__LINK_\\d+__)/);\n\n return { parts, links };\n }, [children, mappings]);\n\n const { parts, links } = processedContent;\n\n return (\n <Text className={cn('text-gray-900 dark:text-gray-100', className)}>\n {parts.map((part, index) => {\n const linkMatch = part.match(/__LINK_(\\d+)__/);\n if (linkMatch) {\n const linkIndex = parseInt(linkMatch[1], 10);\n const link = links.find(l => l.index === linkIndex);\n if (link) {\n return (\n <SmartLink\n key={index}\n to={link.path}\n variant={variant}\n onNavigate={onNavigate}\n >\n {link.text}\n </SmartLink>\n );\n }\n }\n return <Text key={index}>{part}</Text>;\n })}\n </Text>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n Text,\n Pressable,\n ScrollView,\n NativeScrollEvent,\n NativeSyntheticEvent,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface ScrollSpySection {\n /** Section ID */\n id: string;\n /** Section label */\n label: string;\n /** Subsections */\n subsections?: ScrollSpySection[];\n}\n\nexport interface ScrollSpyProps {\n /** Sections to track */\n sections: ScrollSpySection[];\n /** Active section ID */\n activeId?: string;\n /** Active section change handler */\n onActiveChange?: (id: string) => void;\n /** Section press handler - called when user taps a section link */\n onSectionPress?: (id: string) => void;\n /** Show subsections */\n showSubsections?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * ScrollSpy Component\n *\n * Navigation that highlights the active section.\n * Pairs with ScrollSpyContainer for automatic scroll tracking.\n *\n * @example\n * ```tsx\n * <ScrollSpy\n * sections={[\n * { id: 'intro', label: 'Introduction' },\n * { id: 'features', label: 'Features' },\n * { id: 'pricing', label: 'Pricing' }\n * ]}\n * activeId={activeSection}\n * onSectionPress={(id) => scrollToSection(id)}\n * />\n * ```\n */\nexport const ScrollSpy: React.FC<ScrollSpyProps> = ({\n sections,\n activeId,\n onActiveChange,\n onSectionPress,\n showSubsections = true,\n className,\n}) => {\n const handlePress = (id: string) => {\n if (onActiveChange) {\n onActiveChange(id);\n }\n if (onSectionPress) {\n onSectionPress(id);\n }\n };\n\n // Render section\n const renderSection = (section: ScrollSpySection, level: number = 0) => {\n const isActive = activeId === section.id;\n const hasActiveChild =\n section.subsections?.some(sub => activeId === sub.id) || false;\n\n return (\n <View key={section.id}>\n <Pressable\n onPress={() => handlePress(section.id)}\n className={cn(\n 'py-2 px-3 rounded-lg',\n isActive\n ? 'bg-blue-50 dark:bg-blue-900/30'\n : 'active:bg-gray-100 dark:active:bg-gray-800'\n )}\n style={{ paddingLeft: level * 12 + 12 }}\n accessibilityRole='button'\n accessibilityLabel={section.label}\n accessibilityState={{ selected: isActive }}\n >\n <Text\n className={cn(\n 'text-sm',\n level === 0 ? 'font-medium' : 'font-normal',\n isActive\n ? 'text-blue-700 dark:text-blue-300'\n : hasActiveChild\n ? 'text-gray-700 dark:text-gray-300'\n : 'text-gray-600 dark:text-gray-400'\n )}\n >\n {section.label}\n </Text>\n </Pressable>\n\n {/* Subsections */}\n {showSubsections &&\n section.subsections &&\n section.subsections.length > 0 && (\n <View className='ml-3 border-l-2 border-gray-200 dark:border-gray-700'>\n {section.subsections.map(subsection =>\n renderSection(subsection, level + 1)\n )}\n </View>\n )}\n </View>\n );\n };\n\n return (\n <View className={cn('gap-1', className)}>\n {sections.map(section => renderSection(section, 0))}\n </View>\n );\n};\n\nexport interface SectionPosition {\n id: string;\n y: number;\n height: number;\n}\n\nexport interface ScrollSpyContainerProps {\n /** Children content with sections */\n children: React.ReactNode;\n /** Sections configuration for tracking */\n sections: ScrollSpySection[];\n /** Active section change handler */\n onActiveChange?: (id: string) => void;\n /** Offset from top for determining active section */\n offset?: number;\n /** Additional className */\n className?: string;\n}\n\n/**\n * ScrollSpyContainer Component\n *\n * Scrollable container that tracks section visibility.\n * Use with ScrollSpySection to mark sections for tracking.\n *\n * @example\n * ```tsx\n * <ScrollSpyContainer\n * sections={tocSections}\n * onActiveChange={setActiveSection}\n * >\n * <ScrollSpySection id=\"intro\">\n * <Introduction />\n * </ScrollSpySection>\n * <ScrollSpySection id=\"features\">\n * <Features />\n * </ScrollSpySection>\n * </ScrollSpyContainer>\n * ```\n */\nexport const ScrollSpyContainer: React.FC<ScrollSpyContainerProps> = ({\n children,\n sections,\n onActiveChange,\n offset = 80,\n className,\n}) => {\n const scrollViewRef = React.useRef<ScrollView>(null);\n const sectionPositions = React.useRef<Map<string, SectionPosition>>(\n new Map()\n );\n\n // Handle scroll event\n const handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const y = event.nativeEvent.contentOffset.y;\n\n // Find active section based on scroll position\n const getAllIds = (secs: ScrollSpySection[]): string[] => {\n return secs.flatMap(section => [\n section.id,\n ...(section.subsections ? getAllIds(section.subsections) : []),\n ]);\n };\n\n const allIds = getAllIds(sections);\n let activeId = allIds[0];\n\n for (const id of allIds) {\n const position = sectionPositions.current.get(id);\n if (position && position.y <= y + offset) {\n activeId = id;\n }\n }\n\n if (onActiveChange) {\n onActiveChange(activeId);\n }\n };\n\n // Scroll to section\n const scrollToSection = React.useCallback(\n (id: string) => {\n const position = sectionPositions.current.get(id);\n if (position && scrollViewRef.current) {\n scrollViewRef.current.scrollTo({\n y: Math.max(0, position.y - offset + 1),\n animated: true,\n });\n }\n },\n [offset]\n );\n\n // Context for child sections to register positions\n const contextValue = React.useMemo(\n () => ({\n registerSection: (id: string, y: number, height: number) => {\n sectionPositions.current.set(id, { id, y, height });\n },\n unregisterSection: (id: string) => {\n sectionPositions.current.delete(id);\n },\n scrollToSection,\n }),\n [scrollToSection]\n );\n\n return (\n <ScrollSpyContext.Provider value={contextValue}>\n <ScrollView\n ref={scrollViewRef}\n onScroll={handleScroll}\n scrollEventThrottle={16}\n className={cn('flex-1', className)}\n >\n {children}\n </ScrollView>\n </ScrollSpyContext.Provider>\n );\n};\n\n// Context for section registration\ninterface ScrollSpyContextType {\n registerSection: (id: string, y: number, height: number) => void;\n unregisterSection: (id: string) => void;\n scrollToSection: (id: string) => void;\n}\n\nconst ScrollSpyContext = React.createContext<ScrollSpyContextType | null>(null);\n\nexport const useScrollSpy = () => {\n const context = React.useContext(ScrollSpyContext);\n return context;\n};\n\nexport interface ScrollSpySectionWrapperProps {\n /** Section ID - must match an ID in ScrollSpy sections */\n id: string;\n /** Section content */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n/**\n * ScrollSpySectionWrapper Component\n *\n * Wrapper for content sections that should be tracked by ScrollSpy.\n *\n * @example\n * ```tsx\n * <ScrollSpySectionWrapper id=\"features\">\n * <FeaturesList />\n * </ScrollSpySectionWrapper>\n * ```\n */\nexport const ScrollSpySectionWrapper: React.FC<\n ScrollSpySectionWrapperProps\n> = ({ id, children, className }) => {\n const context = React.useContext(ScrollSpyContext);\n\n const handleLayout = React.useCallback(\n (event: { nativeEvent: { layout: { y: number; height: number } } }) => {\n if (context) {\n const { y, height } = event.nativeEvent.layout;\n context.registerSection(id, y, height);\n }\n },\n [context, id]\n );\n\n React.useEffect(() => {\n return () => {\n if (context) {\n context.unregisterSection(id);\n }\n };\n }, [context, id]);\n\n return (\n <View onLayout={handleLayout} className={className}>\n {children}\n </View>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n PanResponder,\n GestureResponderEvent,\n PanResponderGestureState,\n LayoutChangeEvent,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface SplitPaneProps {\n /** Left/Top panel content */\n left: React.ReactNode;\n /** Right/Bottom panel content */\n right: React.ReactNode;\n /** Split direction */\n direction?: 'horizontal' | 'vertical';\n /** Initial split position (0-1) */\n initialSplit?: number;\n /** Controlled split position */\n split?: number;\n /** Split change handler */\n onSplitChange?: (split: number) => void;\n /** Minimum left/top panel size (pixels) */\n minLeftSize?: number;\n /** Minimum right/bottom panel size (pixels) */\n minRightSize?: number;\n /** Divider size in pixels */\n dividerSize?: number;\n /** Allow resize */\n resizable?: boolean;\n /** Additional className */\n className?: string;\n}\n\n/**\n * SplitPane Component\n *\n * Resizable split panel layout with draggable divider.\n * Supports horizontal and vertical splits.\n *\n * @example\n * ```tsx\n * <SplitPane\n * left={<Sidebar />}\n * right={<MainContent />}\n * direction=\"horizontal\"\n * initialSplit={0.3}\n * minLeftSize={200}\n * minRightSize={400}\n * />\n * ```\n */\nexport const SplitPane: React.FC<SplitPaneProps> = ({\n left,\n right,\n direction = 'horizontal',\n initialSplit = 0.5,\n split: controlledSplit,\n onSplitChange,\n minLeftSize = 100,\n minRightSize = 100,\n dividerSize = 12,\n resizable = true,\n className,\n}) => {\n const [internalSplit, setInternalSplit] = React.useState(initialSplit);\n const [isDragging, setIsDragging] = React.useState(false);\n const [containerSize, setContainerSize] = React.useState({\n width: 0,\n height: 0,\n });\n\n const split = controlledSplit !== undefined ? controlledSplit : internalSplit;\n const isHorizontal = direction === 'horizontal';\n\n // Handle layout change to get container dimensions\n const handleLayout = (event: LayoutChangeEvent) => {\n const { width, height } = event.nativeEvent.layout;\n setContainerSize({ width, height });\n };\n\n // Calculate new split value from gesture\n const calculateSplit = React.useCallback(\n (gestureState: PanResponderGestureState): number => {\n const totalSize = isHorizontal\n ? containerSize.width\n : containerSize.height;\n if (totalSize === 0) return split;\n\n const delta = isHorizontal ? gestureState.dx : gestureState.dy;\n const currentPosition = split * totalSize + delta;\n let newSplit = currentPosition / totalSize;\n\n // Clamp between 0 and 1\n newSplit = Math.max(0, Math.min(1, newSplit));\n\n // Apply min sizes\n const minLeftRatio = minLeftSize / totalSize;\n const maxLeftRatio = 1 - minRightSize / totalSize;\n\n newSplit = Math.max(minLeftRatio, Math.min(maxLeftRatio, newSplit));\n\n return newSplit;\n },\n [isHorizontal, containerSize, split, minLeftSize, minRightSize]\n );\n\n // Create PanResponder for gesture handling\n const panResponder = React.useMemo(\n () =>\n PanResponder.create({\n onStartShouldSetPanResponder: () => resizable,\n onMoveShouldSetPanResponder: () => resizable,\n onPanResponderGrant: () => {\n setIsDragging(true);\n },\n onPanResponderMove: (\n _event: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n const newSplit = calculateSplit(gestureState);\n\n if (controlledSplit !== undefined && onSplitChange) {\n onSplitChange(newSplit);\n } else {\n setInternalSplit(newSplit);\n }\n },\n onPanResponderRelease: () => {\n setIsDragging(false);\n },\n onPanResponderTerminate: () => {\n setIsDragging(false);\n },\n }),\n [resizable, controlledSplit, onSplitChange, calculateSplit]\n );\n\n // Calculate panel sizes\n const totalSize = isHorizontal ? containerSize.width : containerSize.height;\n const leftSize = Math.max(0, split * totalSize - dividerSize / 2);\n const rightSize = Math.max(0, (1 - split) * totalSize - dividerSize / 2);\n\n return (\n <View\n onLayout={handleLayout}\n className={cn(\n 'flex-1',\n isHorizontal ? 'flex-row' : 'flex-col',\n className\n )}\n >\n {/* Left/Top panel */}\n <View\n className='overflow-hidden'\n style={{\n [isHorizontal ? 'width' : 'height']: leftSize,\n }}\n >\n {left}\n </View>\n\n {/* Divider */}\n <View\n {...(resizable ? panResponder.panHandlers : {})}\n className={cn(\n 'items-center justify-center',\n 'bg-gray-200 dark:bg-gray-700',\n isDragging && 'bg-blue-500 dark:bg-blue-400',\n resizable && 'active:bg-blue-500 dark:active:bg-blue-400'\n )}\n style={{\n [isHorizontal ? 'width' : 'height']: dividerSize,\n }}\n >\n {/* Divider handle indicator */}\n {resizable && (\n <View\n className={cn(\n 'rounded-full',\n 'bg-gray-400 dark:bg-gray-500',\n isDragging && 'bg-white'\n )}\n style={{\n [isHorizontal ? 'width' : 'height']: 4,\n [isHorizontal ? 'height' : 'width']: 40,\n }}\n />\n )}\n </View>\n\n {/* Right/Bottom panel */}\n <View\n className='overflow-hidden flex-1'\n style={{\n [isHorizontal ? 'width' : 'height']: rightSize,\n }}\n >\n {right}\n </View>\n </View>\n );\n};\n","import * as React from 'react';\nimport {\n View,\n FlatList,\n ListRenderItemInfo,\n StyleProp,\n ViewStyle,\n} from 'react-native';\nimport { cn } from '../../lib/utils';\n\nexport interface VirtualListProps<T> {\n /** List items */\n items: T[];\n /** Item height in pixels (for optimization) */\n itemHeight?: number;\n /** Container height */\n height?: number;\n /** Render item function */\n renderItem: (item: T, index: number) => React.ReactNode;\n /** Item key extractor */\n keyExtractor: (item: T, index: number) => string;\n /** Overscan count (items to render outside viewport) */\n overscan?: number;\n /** Show separator between items */\n showSeparator?: boolean;\n /** Separator style */\n separatorClassName?: string;\n /** Empty list message */\n emptyMessage?: React.ReactNode;\n /** Loading state */\n loading?: boolean;\n /** Pull to refresh handler */\n onRefresh?: () => void;\n /** Refreshing state */\n refreshing?: boolean;\n /** End reached handler */\n onEndReached?: () => void;\n /** End reached threshold (0-1) */\n onEndReachedThreshold?: number;\n /** Horizontal list */\n horizontal?: boolean;\n /** Additional className */\n className?: string;\n /** Content container className */\n contentClassName?: string;\n /** Style prop for height */\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * VirtualList Component\n *\n * Virtualized list for rendering large datasets efficiently.\n * Built on top of React Native's FlatList.\n *\n * @example\n * ```tsx\n * <VirtualList\n * items={largeDataset}\n * itemHeight={48}\n * height={600}\n * renderItem={(item) => <Text>{item.name}</Text>}\n * keyExtractor={(item) => item.id}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <VirtualList\n * items={messages}\n * itemHeight={80}\n * renderItem={(msg, index) => <MessageItem message={msg} index={index} />}\n * keyExtractor={(msg) => msg.id}\n * onEndReached={loadMore}\n * onRefresh={refresh}\n * refreshing={isRefreshing}\n * />\n * ```\n */\nexport function VirtualList<T>({\n items,\n itemHeight,\n height,\n renderItem,\n keyExtractor,\n overscan = 5,\n showSeparator = false,\n separatorClassName,\n emptyMessage,\n loading = false,\n onRefresh,\n refreshing = false,\n onEndReached,\n onEndReachedThreshold = 0.5,\n horizontal = false,\n className,\n contentClassName,\n style,\n}: VirtualListProps<T>) {\n // Render a single item\n const renderItemWrapper = React.useCallback(\n ({ item, index }: ListRenderItemInfo<T>) => {\n return <View>{renderItem(item, index)}</View>;\n },\n [renderItem]\n );\n\n // Item separator\n const ItemSeparator = React.useCallback(() => {\n if (!showSeparator) return null;\n return (\n <View\n className={cn(\n horizontal ? 'w-px h-full' : 'h-px w-full',\n 'bg-gray-200 dark:bg-gray-700',\n separatorClassName\n )}\n />\n );\n }, [showSeparator, horizontal, separatorClassName]);\n\n // Empty component\n const ListEmpty = React.useCallback(() => {\n if (loading) return null;\n if (emptyMessage) {\n return (\n <View className='flex-1 items-center justify-center p-4'>\n {emptyMessage}\n </View>\n );\n }\n return null;\n }, [loading, emptyMessage]);\n\n // Get item layout for optimization\n const getItemLayout = React.useMemo(() => {\n if (!itemHeight) return undefined;\n return (_data: T[] | null | undefined, index: number) => ({\n length: itemHeight,\n offset: itemHeight * index,\n index,\n });\n }, [itemHeight]);\n\n return (\n <View\n className={cn('flex-1', className)}\n style={[height ? { height } : undefined, style]}\n >\n <FlatList\n data={items}\n renderItem={renderItemWrapper}\n keyExtractor={keyExtractor}\n horizontal={horizontal}\n showsVerticalScrollIndicator={!horizontal}\n showsHorizontalScrollIndicator={horizontal}\n ItemSeparatorComponent={showSeparator ? ItemSeparator : undefined}\n ListEmptyComponent={ListEmpty}\n onRefresh={onRefresh}\n refreshing={refreshing}\n onEndReached={onEndReached}\n onEndReachedThreshold={onEndReachedThreshold}\n getItemLayout={getItemLayout}\n windowSize={overscan * 2 + 1}\n maxToRenderPerBatch={overscan * 2}\n initialNumToRender={overscan * 2}\n removeClippedSubviews={true}\n contentContainerStyle={contentClassName ? undefined : undefined}\n />\n </View>\n );\n}\n\nexport interface VirtualGridProps<T> {\n /** Grid items */\n items: T[];\n /** Number of columns */\n numColumns: number;\n /** Render item function */\n renderItem: (item: T, index: number) => React.ReactNode;\n /** Item key extractor */\n keyExtractor: (item: T, index: number) => string;\n /** Item height for optimization */\n itemHeight?: number;\n /** Gap between items */\n gap?: number;\n /** Empty list message */\n emptyMessage?: React.ReactNode;\n /** Loading state */\n loading?: boolean;\n /** Pull to refresh handler */\n onRefresh?: () => void;\n /** Refreshing state */\n refreshing?: boolean;\n /** End reached handler */\n onEndReached?: () => void;\n /** Additional className */\n className?: string;\n}\n\n/**\n * VirtualGrid Component\n *\n * Virtualized grid for rendering large datasets in grid layout.\n *\n * @example\n * ```tsx\n * <VirtualGrid\n * items={products}\n * numColumns={2}\n * renderItem={(product) => <ProductCard product={product} />}\n * keyExtractor={(product) => product.id}\n * gap={16}\n * />\n * ```\n */\nexport function VirtualGrid<T>({\n items,\n numColumns,\n renderItem,\n keyExtractor,\n itemHeight,\n gap = 8,\n emptyMessage,\n loading = false,\n onRefresh,\n refreshing = false,\n onEndReached,\n className,\n}: VirtualGridProps<T>) {\n // Render a single item\n const renderItemWrapper = React.useCallback(\n ({ item, index }: ListRenderItemInfo<T>) => {\n return (\n <View style={{ flex: 1, margin: gap / 2 }}>\n {renderItem(item, index)}\n </View>\n );\n },\n [renderItem, gap]\n );\n\n // Empty component\n const ListEmpty = React.useCallback(() => {\n if (loading) return null;\n if (emptyMessage) {\n return (\n <View className='flex-1 items-center justify-center p-4'>\n {emptyMessage}\n </View>\n );\n }\n return null;\n }, [loading, emptyMessage]);\n\n // Get item layout for optimization\n const getItemLayout = React.useMemo(() => {\n if (!itemHeight) return undefined;\n return (_data: T[] | null | undefined, index: number) => ({\n length: itemHeight + gap,\n offset: (itemHeight + gap) * Math.floor(index / numColumns),\n index,\n });\n }, [itemHeight, gap, numColumns]);\n\n return (\n <View className={cn('flex-1', className)}>\n <FlatList\n data={items}\n renderItem={renderItemWrapper}\n keyExtractor={keyExtractor}\n numColumns={numColumns}\n showsVerticalScrollIndicator={true}\n ListEmptyComponent={ListEmpty}\n onRefresh={onRefresh}\n refreshing={refreshing}\n onEndReached={onEndReached}\n onEndReachedThreshold={0.5}\n getItemLayout={getItemLayout}\n contentContainerStyle={{ padding: gap / 2 }}\n removeClippedSubviews={true}\n />\n </View>\n );\n}\n"],"names":["clsx","require$$0","React","ReactDebugCurrentFrame","jsxRuntimeModule","require$$1","sizeMap","cva","v","jsxs","Pressable","jsx","ActivityIndicator","Text","getCardVariantColors","View","textVariants","TextInput","SCREEN_WIDTH","Dimensions","useState","Animated","sizeConfig","useCallback","Fragment","Modal","SafeAreaView","FlatList","RNText","name","Image","useRef","useEffect","RNModal","KeyboardAvoidingView","Platform","ScrollView","createContext","useContext","PanResponder","Linking","pages","TouchableWithoutFeedback","useWindowDimensions","styles","StyleSheet","RefreshControl","CardContent","UIManager","LayoutAnimation","isExternal","Alert","links","parts","totalSize"],"mappings":"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","x_google_ignoreList":[1,2,3]}