@wireservers-ui/react-natives 2.0.1 → 2.0.2-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/CHANGELOG.md +87 -71
  2. package/LICENSE +21 -21
  3. package/README.md +642 -613
  4. package/bin/cli.js +83 -5
  5. package/bin/init.js +470 -324
  6. package/package.json +1 -1
  7. package/src/accordion/accordion-content.tsx +30 -30
  8. package/src/accordion/accordion-icon.tsx +54 -54
  9. package/src/accordion/accordion-item.tsx +37 -37
  10. package/src/accordion/accordion-title-text.tsx +24 -24
  11. package/src/accordion/accordion-trigger.tsx +38 -38
  12. package/src/accordion/accordion.tsx +91 -91
  13. package/src/accordion/index.ts +24 -24
  14. package/src/accordion/styles.ts +74 -74
  15. package/src/accordion/types.ts +56 -56
  16. package/src/actionsheet/actionsheet-backdrop.tsx +23 -23
  17. package/src/actionsheet/actionsheet-content.tsx +19 -19
  18. package/src/actionsheet/actionsheet-drag-indicator-wrapper.tsx +19 -19
  19. package/src/actionsheet/actionsheet-drag-indicator.tsx +19 -19
  20. package/src/actionsheet/actionsheet-item-text.tsx +19 -19
  21. package/src/actionsheet/actionsheet-item.tsx +20 -20
  22. package/src/actionsheet/actionsheet-scroll-view.tsx +12 -12
  23. package/src/actionsheet/actionsheet.tsx +45 -45
  24. package/src/actionsheet/index.ts +20 -20
  25. package/src/actionsheet/styles.ts +25 -25
  26. package/src/actionsheet/types.ts +49 -49
  27. package/src/alert/alert-body.tsx +19 -19
  28. package/src/alert/alert-close-button.tsx +23 -23
  29. package/src/alert/alert-icon.tsx +40 -40
  30. package/src/alert/alert-text.tsx +22 -22
  31. package/src/alert/alert.tsx +33 -33
  32. package/src/alert/index.ts +15 -15
  33. package/src/alert/styles.ts +112 -112
  34. package/src/alert/types.ts +36 -36
  35. package/src/alert-dialog/alert-dialog.tsx +54 -54
  36. package/src/alert-dialog/index.ts +2 -2
  37. package/src/alert-dialog/styles.ts +40 -40
  38. package/src/alert-dialog/types.ts +40 -40
  39. package/src/aspect-ratio/aspect-ratio.tsx +20 -20
  40. package/src/aspect-ratio/index.ts +2 -2
  41. package/src/aspect-ratio/styles.ts +6 -6
  42. package/src/aspect-ratio/types.ts +7 -7
  43. package/src/avatar/avatar-badge.tsx +22 -22
  44. package/src/avatar/avatar-fallback-text.tsx +33 -33
  45. package/src/avatar/avatar-group.tsx +53 -53
  46. package/src/avatar/avatar-image.tsx +21 -21
  47. package/src/avatar/avatar.tsx +27 -27
  48. package/src/avatar/index.ts +14 -14
  49. package/src/avatar/styles.ts +94 -94
  50. package/src/avatar/types.ts +35 -35
  51. package/src/badge/badge-icon.tsx +20 -20
  52. package/src/badge/badge-text.tsx +24 -24
  53. package/src/badge/badge.tsx +39 -39
  54. package/src/badge/index.ts +11 -11
  55. package/src/badge/styles.ts +175 -175
  56. package/src/badge/types.ts +37 -37
  57. package/src/blockquote/blockquote.tsx +21 -21
  58. package/src/blockquote/index.ts +2 -2
  59. package/src/blockquote/styles.ts +11 -11
  60. package/src/blockquote/types.ts +6 -6
  61. package/src/box/box.tsx +19 -19
  62. package/src/box/index.ts +2 -2
  63. package/src/box/styles.ts +6 -6
  64. package/src/box/types.ts +6 -6
  65. package/src/breadcrumb/breadcrumb-item.tsx +20 -20
  66. package/src/breadcrumb/breadcrumb-link.tsx +20 -20
  67. package/src/breadcrumb/breadcrumb-text.tsx +19 -19
  68. package/src/breadcrumb/breadcrumb.tsx +43 -43
  69. package/src/breadcrumb/index.ts +12 -12
  70. package/src/breadcrumb/styles.ts +36 -36
  71. package/src/breadcrumb/types.ts +33 -33
  72. package/src/button/button-group.tsx +35 -35
  73. package/src/button/button-icon.tsx +37 -37
  74. package/src/button/button-spinner.tsx +12 -12
  75. package/src/button/button-text.tsx +27 -27
  76. package/src/button/button.tsx +42 -42
  77. package/src/button/index.ts +19 -19
  78. package/src/button/styles.ts +250 -250
  79. package/src/button/types.ts +67 -67
  80. package/src/calendar/calendar-day-cell.tsx +67 -67
  81. package/src/calendar/calendar-day-view.tsx +66 -66
  82. package/src/calendar/calendar-event.tsx +59 -59
  83. package/src/calendar/calendar-header.tsx +60 -60
  84. package/src/calendar/calendar-horizontal-view.tsx +372 -372
  85. package/src/calendar/calendar-legend.tsx +41 -41
  86. package/src/calendar/calendar-month-view.tsx +47 -47
  87. package/src/calendar/calendar-vertical-view.tsx +395 -395
  88. package/src/calendar/calendar-view-switcher.tsx +65 -65
  89. package/src/calendar/calendar-week-view.tsx +52 -52
  90. package/src/calendar/calendar.tsx +74 -74
  91. package/src/calendar/index.ts +27 -27
  92. package/src/calendar/styles.ts +367 -367
  93. package/src/calendar/types.ts +101 -101
  94. package/src/calendar/use-calendar.ts +170 -170
  95. package/src/calendar/utils.ts +278 -278
  96. package/src/card/card-body.tsx +22 -22
  97. package/src/card/card-footer.tsx +19 -19
  98. package/src/card/card-header.tsx +22 -22
  99. package/src/card/card.tsx +27 -27
  100. package/src/card/index.ts +13 -13
  101. package/src/card/styles.ts +54 -54
  102. package/src/card/types.ts +31 -31
  103. package/src/carousel/carousel.tsx +436 -436
  104. package/src/carousel/index.ts +2 -2
  105. package/src/carousel/styles.ts +21 -21
  106. package/src/carousel/types.ts +41 -41
  107. package/src/center/center.tsx +19 -19
  108. package/src/center/index.ts +2 -2
  109. package/src/center/styles.ts +6 -6
  110. package/src/center/types.ts +6 -6
  111. package/src/checkbox/checkbox-group.tsx +63 -63
  112. package/src/checkbox/checkbox-icon.tsx +35 -35
  113. package/src/checkbox/checkbox-indicator.tsx +30 -30
  114. package/src/checkbox/checkbox-label.tsx +24 -24
  115. package/src/checkbox/checkbox.tsx +86 -86
  116. package/src/checkbox/index.ts +14 -14
  117. package/src/checkbox/styles.ts +69 -69
  118. package/src/checkbox/types.ts +55 -55
  119. package/src/circular-progress/circular-progress.tsx +82 -82
  120. package/src/circular-progress/index.ts +2 -2
  121. package/src/circular-progress/styles.ts +31 -31
  122. package/src/circular-progress/types.ts +18 -18
  123. package/src/code/code.tsx +36 -36
  124. package/src/code/index.ts +2 -2
  125. package/src/code/styles.ts +25 -25
  126. package/src/code/types.ts +13 -13
  127. package/src/collapsible/collapsible.tsx +58 -58
  128. package/src/collapsible/index.ts +2 -2
  129. package/src/collapsible/styles.ts +5 -5
  130. package/src/collapsible/types.ts +21 -21
  131. package/src/color-picker/color-picker-box.tsx +115 -115
  132. package/src/color-picker/color-picker-slider.tsx +98 -98
  133. package/src/color-picker/color-picker.tsx +162 -162
  134. package/src/color-picker/color-utils.ts +215 -215
  135. package/src/color-picker/index.ts +34 -34
  136. package/src/color-picker/styles.ts +32 -32
  137. package/src/color-picker/types.ts +49 -49
  138. package/src/color-picker/use-pointer-drag.ts +80 -80
  139. package/src/container/container.tsx +19 -19
  140. package/src/container/index.ts +2 -2
  141. package/src/container/styles.ts +21 -21
  142. package/src/container/types.ts +10 -10
  143. package/src/date-picker/date-picker.tsx +136 -136
  144. package/src/date-picker/index.ts +15 -15
  145. package/src/date-picker/styles.ts +18 -18
  146. package/src/date-picker/types.ts +33 -33
  147. package/src/divider/divider.tsx +21 -21
  148. package/src/divider/index.ts +2 -2
  149. package/src/divider/styles.ts +14 -14
  150. package/src/divider/types.ts +7 -7
  151. package/src/drawer/drawer-backdrop.tsx +23 -23
  152. package/src/drawer/drawer-body.tsx +19 -19
  153. package/src/drawer/drawer-close-button.tsx +29 -29
  154. package/src/drawer/drawer-content.tsx +142 -142
  155. package/src/drawer/drawer-footer.tsx +19 -19
  156. package/src/drawer/drawer-header.tsx +19 -19
  157. package/src/drawer/drawer.tsx +54 -54
  158. package/src/drawer/index.ts +22 -22
  159. package/src/drawer/styles.ts +36 -36
  160. package/src/drawer/types.ts +62 -62
  161. package/src/empty/empty.tsx +53 -53
  162. package/src/empty/index.ts +2 -2
  163. package/src/empty/styles.ts +26 -26
  164. package/src/empty/types.ts +22 -22
  165. package/src/fab/fab-icon.tsx +20 -20
  166. package/src/fab/fab-label.tsx +22 -22
  167. package/src/fab/fab.tsx +45 -45
  168. package/src/fab/index.ts +11 -11
  169. package/src/fab/styles.ts +57 -57
  170. package/src/fab/types.ts +33 -33
  171. package/src/form-control/form-control-error-icon.tsx +25 -25
  172. package/src/form-control/form-control-error-message.tsx +40 -40
  173. package/src/form-control/form-control-helper-text.tsx +25 -25
  174. package/src/form-control/form-control-label-text.tsx +25 -25
  175. package/src/form-control/form-control-label.tsx +36 -36
  176. package/src/form-control/form-control.tsx +46 -46
  177. package/src/form-control/index.ts +20 -20
  178. package/src/form-control/styles.ts +105 -105
  179. package/src/form-control/types.ts +45 -45
  180. package/src/heading/heading.tsx +21 -21
  181. package/src/heading/index.ts +2 -2
  182. package/src/heading/styles.ts +24 -24
  183. package/src/heading/types.ts +19 -19
  184. package/src/icon/icon.tsx +21 -21
  185. package/src/icon/index.ts +2 -2
  186. package/src/icon/styles.ts +18 -18
  187. package/src/icon/types.ts +8 -8
  188. package/src/icon-button/icon-button.tsx +23 -23
  189. package/src/icon-button/index.ts +2 -2
  190. package/src/icon-button/styles.ts +78 -78
  191. package/src/icon-button/types.ts +15 -15
  192. package/src/image/image.tsx +20 -20
  193. package/src/image/index.ts +2 -2
  194. package/src/image/styles.ts +28 -28
  195. package/src/image/types.ts +11 -11
  196. package/src/index.ts +1039 -1039
  197. package/src/input/index.ts +13 -13
  198. package/src/input/input-field.tsx +35 -35
  199. package/src/input/input-icon.tsx +25 -25
  200. package/src/input/input-slot.tsx +24 -24
  201. package/src/input/input.tsx +73 -73
  202. package/src/input/styles.ts +90 -90
  203. package/src/input/types.ts +39 -39
  204. package/src/kbd/index.ts +2 -2
  205. package/src/kbd/kbd.tsx +21 -21
  206. package/src/kbd/styles.ts +11 -11
  207. package/src/kbd/types.ts +7 -7
  208. package/src/link/index.ts +4 -4
  209. package/src/link/link-text.tsx +19 -19
  210. package/src/link/link.tsx +31 -31
  211. package/src/link/styles.ts +19 -19
  212. package/src/link/types.ts +13 -13
  213. package/src/list/index.ts +2 -2
  214. package/src/list/list.tsx +55 -55
  215. package/src/list/styles.ts +8 -8
  216. package/src/list/types.ts +17 -17
  217. package/src/menu/index.ts +2 -2
  218. package/src/menu/menu.tsx +99 -99
  219. package/src/menu/styles.ts +14 -14
  220. package/src/menu/types.ts +30 -30
  221. package/src/modal/index.ts +18 -18
  222. package/src/modal/modal-backdrop.tsx +23 -23
  223. package/src/modal/modal-body.tsx +19 -19
  224. package/src/modal/modal-close-button.tsx +29 -29
  225. package/src/modal/modal-content.tsx +22 -22
  226. package/src/modal/modal-footer.tsx +19 -19
  227. package/src/modal/modal-header.tsx +19 -19
  228. package/src/modal/modal.tsx +50 -50
  229. package/src/modal/styles.ts +37 -37
  230. package/src/modal/types.ts +49 -49
  231. package/src/nativewind-env.d.ts +1 -1
  232. package/src/number-input/index.ts +18 -18
  233. package/src/number-input/number-input.tsx +161 -161
  234. package/src/number-input/styles.ts +35 -35
  235. package/src/number-input/types.ts +44 -44
  236. package/src/overlay/index.ts +2 -2
  237. package/src/overlay/overlay.tsx +21 -21
  238. package/src/overlay/styles.ts +6 -6
  239. package/src/overlay/types.ts +7 -7
  240. package/src/pagination/index.ts +2 -2
  241. package/src/pagination/pagination.tsx +58 -58
  242. package/src/pagination/styles.ts +27 -27
  243. package/src/pagination/types.ts +19 -19
  244. package/src/password-input/index.ts +14 -14
  245. package/src/password-input/password-input.tsx +79 -79
  246. package/src/password-input/styles.ts +25 -25
  247. package/src/password-input/types.ts +24 -24
  248. package/src/pin-input/index.ts +12 -12
  249. package/src/pin-input/pin-input.tsx +96 -96
  250. package/src/pin-input/styles.ts +16 -16
  251. package/src/pin-input/types.ts +26 -26
  252. package/src/popover/index.ts +2 -2
  253. package/src/popover/popover.tsx +98 -98
  254. package/src/popover/styles.ts +31 -31
  255. package/src/popover/types.ts +46 -46
  256. package/src/portal/index.ts +2 -2
  257. package/src/portal/portal.tsx +8 -8
  258. package/src/portal/styles.ts +2 -2
  259. package/src/portal/types.ts +3 -3
  260. package/src/pressable/index.ts +2 -2
  261. package/src/pressable/pressable.tsx +20 -20
  262. package/src/pressable/styles.ts +10 -10
  263. package/src/pressable/types.ts +6 -6
  264. package/src/progress/index.ts +9 -9
  265. package/src/progress/progress-filled-track.tsx +26 -26
  266. package/src/progress/progress.tsx +52 -52
  267. package/src/progress/styles.ts +34 -34
  268. package/src/progress/types.ts +28 -28
  269. package/src/radio/index.ts +14 -14
  270. package/src/radio/radio-group.tsx +61 -61
  271. package/src/radio/radio-icon.tsx +24 -24
  272. package/src/radio/radio-indicator.tsx +30 -30
  273. package/src/radio/radio-label.tsx +24 -24
  274. package/src/radio/radio.tsx +68 -68
  275. package/src/radio/styles.ts +69 -69
  276. package/src/radio/types.ts +51 -51
  277. package/src/rating/index.ts +7 -7
  278. package/src/rating/rating.tsx +93 -93
  279. package/src/rating/styles.ts +13 -13
  280. package/src/rating/types.ts +29 -29
  281. package/src/search-input/index.ts +16 -16
  282. package/src/search-input/search-input.tsx +119 -119
  283. package/src/search-input/styles.ts +28 -28
  284. package/src/search-input/types.ts +31 -31
  285. package/src/segmented-control/index.ts +2 -2
  286. package/src/segmented-control/segmented-control.tsx +34 -34
  287. package/src/segmented-control/styles.ts +22 -22
  288. package/src/segmented-control/types.ts +22 -22
  289. package/src/select/index.ts +28 -28
  290. package/src/select/select-backdrop.tsx +25 -25
  291. package/src/select/select-content.tsx +49 -49
  292. package/src/select/select-drag-indicator.tsx +19 -19
  293. package/src/select/select-icon.tsx +25 -25
  294. package/src/select/select-input.tsx +32 -32
  295. package/src/select/select-item-text.tsx +30 -30
  296. package/src/select/select-item.tsx +72 -72
  297. package/src/select/select-portal.tsx +22 -22
  298. package/src/select/select-scroll-view.tsx +22 -22
  299. package/src/select/select-trigger.tsx +64 -64
  300. package/src/select/select.tsx +101 -101
  301. package/src/select/styles.ts +114 -114
  302. package/src/select/types.ts +92 -92
  303. package/src/skeleton/index.ts +2 -2
  304. package/src/skeleton/skeleton.tsx +29 -29
  305. package/src/skeleton/styles.ts +14 -14
  306. package/src/skeleton/types.ts +12 -12
  307. package/src/slider/index.ts +12 -12
  308. package/src/slider/slider-filled-track.tsx +31 -31
  309. package/src/slider/slider-thumb.tsx +52 -52
  310. package/src/slider/slider-track.tsx +154 -154
  311. package/src/slider/slider.tsx +193 -193
  312. package/src/slider/styles.ts +71 -71
  313. package/src/slider/types.ts +47 -47
  314. package/src/snackbar/index.ts +2 -2
  315. package/src/snackbar/snackbar.tsx +39 -39
  316. package/src/snackbar/styles.ts +29 -29
  317. package/src/snackbar/types.ts +21 -21
  318. package/src/spinner/index.ts +2 -2
  319. package/src/spinner/spinner.tsx +29 -29
  320. package/src/spinner/styles.ts +15 -15
  321. package/src/spinner/types.ts +10 -10
  322. package/src/stack/index.ts +2 -2
  323. package/src/stack/stack.tsx +49 -49
  324. package/src/stack/styles.ts +25 -25
  325. package/src/stack/types.ts +15 -15
  326. package/src/stat/index.ts +2 -2
  327. package/src/stat/stat.tsx +48 -48
  328. package/src/stat/styles.ts +34 -34
  329. package/src/stat/types.ts +24 -24
  330. package/src/stepper/index.ts +2 -2
  331. package/src/stepper/stepper.tsx +95 -95
  332. package/src/stepper/styles.ts +49 -49
  333. package/src/stepper/types.ts +20 -20
  334. package/src/switch/index.ts +2 -2
  335. package/src/switch/styles.ts +24 -24
  336. package/src/switch/switch.tsx +67 -67
  337. package/src/switch/types.ts +23 -23
  338. package/src/table/index.ts +2 -2
  339. package/src/table/styles.ts +12 -12
  340. package/src/table/table.tsx +52 -52
  341. package/src/table/types.ts +10 -10
  342. package/src/tabs/index.ts +18 -18
  343. package/src/tabs/styles.ts +113 -113
  344. package/src/tabs/tab-list.tsx +29 -29
  345. package/src/tabs/tab-panel.tsx +29 -29
  346. package/src/tabs/tab-panels.tsx +21 -21
  347. package/src/tabs/tab-text.tsx +26 -26
  348. package/src/tabs/tab.tsx +56 -56
  349. package/src/tabs/tabs.tsx +71 -71
  350. package/src/tabs/types.ts +53 -53
  351. package/src/tag/index.ts +14 -14
  352. package/src/tag/styles.ts +115 -115
  353. package/src/tag/tag-close-button.tsx +26 -26
  354. package/src/tag/tag-icon.tsx +20 -20
  355. package/src/tag/tag-text.tsx +22 -22
  356. package/src/tag/tag.tsx +40 -40
  357. package/src/tag/types.ts +33 -33
  358. package/src/tags-input/index.ts +18 -18
  359. package/src/tags-input/styles.ts +29 -29
  360. package/src/tags-input/tags-input.tsx +149 -149
  361. package/src/tags-input/types.ts +37 -37
  362. package/src/text/index.ts +2 -2
  363. package/src/text/styles.ts +54 -54
  364. package/src/text/text.tsx +51 -51
  365. package/src/text/types.ts +36 -36
  366. package/src/textarea/index.ts +2 -2
  367. package/src/textarea/styles.ts +37 -37
  368. package/src/textarea/textarea.tsx +68 -68
  369. package/src/textarea/types.ts +14 -14
  370. package/src/timeline/index.ts +2 -2
  371. package/src/timeline/styles.ts +57 -57
  372. package/src/timeline/timeline.tsx +52 -52
  373. package/src/timeline/types.ts +30 -30
  374. package/src/toast/index.ts +17 -17
  375. package/src/toast/styles.ts +118 -118
  376. package/src/toast/toast-description.tsx +22 -22
  377. package/src/toast/toast-provider.tsx +136 -136
  378. package/src/toast/toast-title.tsx +22 -22
  379. package/src/toast/toast.tsx +43 -43
  380. package/src/toast/types.ts +50 -50
  381. package/src/toast/use-toast.ts +7 -7
  382. package/src/toggle/index.ts +2 -2
  383. package/src/toggle/styles.ts +30 -30
  384. package/src/toggle/toggle.tsx +25 -25
  385. package/src/toggle/types.ts +15 -15
  386. package/src/toggle-group/index.ts +2 -2
  387. package/src/toggle-group/styles.ts +35 -35
  388. package/src/toggle-group/toggle-group.tsx +60 -60
  389. package/src/toggle-group/types.ts +29 -29
  390. package/src/tooltip/index.ts +11 -11
  391. package/src/tooltip/styles.ts +9 -9
  392. package/src/tooltip/tooltip-content.tsx +19 -19
  393. package/src/tooltip/tooltip-text.tsx +19 -19
  394. package/src/tooltip/tooltip.tsx +116 -116
  395. package/src/tooltip/types.ts +35 -35
  396. package/src/utils/brand.ts +5 -5
  397. package/src/utils/create-context.ts +17 -17
  398. package/src/utils/index.ts +8 -8
  399. package/src/utils/types.ts +20 -20
  400. package/src/visually-hidden/index.ts +2 -2
  401. package/src/visually-hidden/styles.ts +6 -6
  402. package/src/visually-hidden/types.ts +6 -6
  403. package/src/visually-hidden/visually-hidden.tsx +22 -22
  404. package/tailwind-preset.js +212 -203
package/README.md CHANGED
@@ -1,613 +1,642 @@
1
- # React-Natives
2
-
3
- **A comprehensive React Native component library built with NativeWind and Tailwind Variants.**
4
-
5
- > **Note:** This project is in active development (v2.0.1). We're building out components, documentation, and tooling. Contributions and feedback are welcome!
6
-
7
- [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
8
- [![npm version](https://img.shields.io/npm/v/@wireservers-ui/react-natives.svg)](https://www.npmjs.com/package/@wireservers-ui/react-natives)
9
-
10
- ---
11
-
12
- ## Release Notes (v2.0.1)
13
-
14
- ### What was updated
15
-
16
- - Published package contents now include `bin/init.js` (packaging parity fix)
17
- - This ensures the installed npm artifact contains the same CLI helper file expected by local package contents
18
-
19
- ### Changelog
20
-
21
- - Full changelog is included in the package at `CHANGELOG.md`
22
- - GitHub: https://github.com/wireservers/wireservers-ui/blob/dev/packages/react-natives/CHANGELOG.md
23
- - npm package page: open the `CHANGELOG.md` file from the package contents/files list
24
-
25
- ---
26
-
27
- ## What is React-Natives?
28
-
29
- React-Natives is a collection of 70+ production-ready, accessible React Native components. Every component is TypeScript-first, themeable via CSS variables, and styled with NativeWind (Tailwind CSS for React Native).
30
-
31
- **Live Demo:** [www.reactnatives.dev](https://www.reactnatives.dev)
32
-
33
- ### Key Features
34
-
35
- - **70+ Components** — Buttons, forms, modals, tables, calendars, color pickers, and more
36
- - **TypeScript First** — Fully typed with excellent IDE autocomplete
37
- - **NativeWind + Tailwind Variants** — Utility-first styling with type-safe variant APIs
38
- - **Themeable** — CSS variable-based color system with light/dark mode support
39
- - **Accessible** — Built with accessibility in mind
40
- - **Cross Platform** — iOS, Android, and Web via React Native
41
-
42
- ### Tech Stack
43
-
44
- | Layer | Technology |
45
- | --- | --- |
46
- | Components | React Native |
47
- | Styling | NativeWind v4, Tailwind CSS 3, Tailwind Variants |
48
- | Types | TypeScript |
49
-
50
- ---
51
-
52
- ## Setup
53
-
54
- ### 1. Easy Setup (Recommended)
55
-
56
- Use this for the fastest first-time setup in a new Expo app.
57
-
58
- ```bash
59
- npx create-expo-app@latest wsui-init --template blank-typescript
60
- cd wsui-init
61
- npm install @wireservers-ui/react-natives@2.0.0
62
- npx @wireservers-ui/react-natives@2.0.1 init
63
- npx expo start --clear --web
64
- ```
65
-
66
- What `init` does for you:
67
-
68
- - Installs required runtime dependencies
69
- - Matches `react-dom` exactly to your installed `react` version
70
- - Creates setup files only if missing
71
- - Never overwrites existing files in your project
72
-
73
- ### 2. Manual Setup (Detailed)
74
-
75
- Use this path if you want full control over every file.
76
-
77
- #### Step A: Install packages
78
-
79
- ```bash
80
- npm install @wireservers-ui/react-natives@2.0.1
81
- npm install nativewind tailwindcss tailwind-variants tailwind-merge react-native-reanimated react-native-worklets react-native-svg react-native-web react-dom
82
- ```
83
-
84
- Important:
85
-
86
- - Ensure `react-dom` matches your `react` version exactly.
87
- - Example: if `react` is `19.2.0`, use `react-dom@19.2.0`.
88
-
89
- #### Step B: Create or update `tailwind.config.js`
90
-
91
- ```js
92
- /** @type {import('tailwindcss').Config} */
93
- module.exports = {
94
- content: [
95
- "./App.{js,jsx,ts,tsx}",
96
- "./app/**/*.{js,jsx,ts,tsx}",
97
- "./components/**/*.{js,jsx,ts,tsx}",
98
- "./node_modules/@wireservers-ui/react-natives/src/**/*.{js,jsx,ts,tsx}",
99
- ],
100
- presets: [require("@wireservers-ui/react-natives/tailwind-preset")],
101
- };
102
- ```
103
-
104
- #### Step C: Create `global.css`
105
-
106
- GitHub README does not support real tabs, so the sections below use collapsible blocks (tab-like) for Light and Dark theme tokens.
107
-
108
- Use this full file content in `global.css`:
109
-
110
- ```css
111
- @tailwind base;
112
- @tailwind components;
113
- @tailwind utilities;
114
-
115
- :root {
116
- --color-primary-0: 255 255 255;
117
- --color-primary-50: 238 237 253;
118
- --color-primary-100: 214 211 249;
119
- --color-primary-200: 172 166 242;
120
- --color-primary-300: 132 122 235;
121
- --color-primary-400: 105 95 233;
122
- --color-primary-500: 80 70 230;
123
- --color-primary-600: 63 55 198;
124
- --color-primary-700: 47 41 163;
125
- --color-primary-800: 33 29 128;
126
- --color-primary-900: 22 20 96;
127
- --color-primary-950: 13 11 64;
128
-
129
- --color-secondary-0: 255 255 255;
130
- --color-secondary-50: 241 241 243;
131
- --color-secondary-100: 220 220 224;
132
- --color-secondary-200: 186 186 194;
133
- --color-secondary-300: 152 152 163;
134
- --color-secondary-400: 121 121 137;
135
- --color-secondary-500: 92 92 112;
136
- --color-secondary-600: 72 72 92;
137
- --color-secondary-700: 54 54 72;
138
- --color-secondary-800: 38 38 54;
139
- --color-secondary-900: 24 24 38;
140
- --color-secondary-950: 14 14 24;
141
-
142
- --color-tertiary-50: 250 245 255;
143
- --color-tertiary-100: 243 232 255;
144
- --color-tertiary-200: 222 200 252;
145
- --color-tertiary-300: 196 160 246;
146
- --color-tertiary-400: 168 120 238;
147
- --color-tertiary-500: 140 80 228;
148
- --color-tertiary-600: 114 58 200;
149
- --color-tertiary-700: 90 40 170;
150
- --color-tertiary-800: 68 28 138;
151
- --color-tertiary-900: 48 18 106;
152
- --color-tertiary-950: 30 8 72;
153
-
154
- --color-error-0: 255 255 255;
155
- --color-error-50: 254 242 242;
156
- --color-error-100: 254 226 226;
157
- --color-error-200: 252 165 165;
158
- --color-error-300: 248 113 113;
159
- --color-error-400: 240 82 82;
160
- --color-error-500: 230 53 53;
161
- --color-error-600: 204 37 37;
162
- --color-error-700: 178 24 24;
163
- --color-error-800: 150 16 16;
164
- --color-error-900: 122 10 10;
165
- --color-error-950: 80 5 5;
166
-
167
- --color-success-0: 255 255 255;
168
- --color-success-50: 237 252 241;
169
- --color-success-100: 210 245 221;
170
- --color-success-200: 147 226 172;
171
- --color-success-300: 96 207 128;
172
- --color-success-400: 56 189 92;
173
- --color-success-500: 34 168 66;
174
- --color-success-600: 24 140 52;
175
- --color-success-700: 18 112 40;
176
- --color-success-800: 14 88 32;
177
- --color-success-900: 10 64 22;
178
- --color-success-950: 5 40 12;
179
-
180
- --color-warning-0: 255 255 255;
181
- --color-warning-50: 255 249 235;
182
- --color-warning-100: 255 240 198;
183
- --color-warning-200: 252 217 119;
184
- --color-warning-300: 247 195 56;
185
- --color-warning-400: 240 176 14;
186
- --color-warning-500: 220 155 6;
187
- --color-warning-600: 182 123 4;
188
- --color-warning-700: 145 96 4;
189
- --color-warning-800: 112 72 5;
190
- --color-warning-900: 82 52 6;
191
- --color-warning-950: 48 30 4;
192
-
193
- --color-info-0: 255 255 255;
194
- --color-info-50: 240 248 255;
195
- --color-info-100: 224 240 253;
196
- --color-info-200: 168 213 248;
197
- --color-info-300: 110 184 240;
198
- --color-info-400: 66 158 232;
199
- --color-info-500: 34 134 220;
200
- --color-info-600: 22 110 190;
201
- --color-info-700: 14 88 158;
202
- --color-info-800: 10 68 126;
203
- --color-info-900: 6 50 96;
204
- --color-info-950: 2 32 64;
205
-
206
- --color-typography-0: 255 255 255;
207
- --color-typography-50: 245 245 245;
208
- --color-typography-100: 229 229 229;
209
- --color-typography-200: 212 212 212;
210
- --color-typography-300: 163 163 163;
211
- --color-typography-400: 140 140 140;
212
- --color-typography-500: 115 115 115;
213
- --color-typography-600: 82 82 82;
214
- --color-typography-700: 64 64 64;
215
- --color-typography-800: 38 38 38;
216
- --color-typography-900: 23 23 23;
217
- --color-typography-950: 10 10 10;
218
-
219
- --color-outline-0: 255 255 255;
220
- --color-outline-50: 245 245 245;
221
- --color-outline-100: 229 229 229;
222
- --color-outline-200: 212 212 212;
223
- --color-outline-300: 196 196 196;
224
- --color-outline-400: 163 163 163;
225
- --color-outline-500: 140 140 140;
226
- --color-outline-600: 115 115 115;
227
- --color-outline-700: 82 82 82;
228
- --color-outline-800: 51 51 51;
229
- --color-outline-900: 33 33 33;
230
- --color-outline-950: 18 18 18;
231
-
232
- --color-background-0: 255 255 255;
233
- --color-background-50: 249 249 249;
234
- --color-background-100: 242 242 242;
235
- --color-background-200: 228 228 228;
236
- --color-background-300: 212 212 212;
237
- --color-background-400: 189 189 189;
238
- --color-background-500: 163 163 163;
239
- --color-background-600: 115 115 115;
240
- --color-background-700: 82 82 82;
241
- --color-background-800: 51 51 51;
242
- --color-background-900: 33 33 33;
243
- --color-background-950: 18 18 18;
244
- --color-background-error: 254 226 226;
245
- --color-background-warning: 255 243 224;
246
- --color-background-muted: 245 245 245;
247
- --color-background-success: 228 247 235;
248
- --color-background-info: 224 240 253;
249
-
250
- --color-indicator-primary: 80 70 230;
251
- --color-indicator-info: 34 134 220;
252
- --color-indicator-error: 230 53 53;
253
- }
254
-
255
- .dark {
256
- --color-primary-0: 13 11 64;
257
- --color-primary-50: 22 20 96;
258
- --color-primary-100: 33 29 128;
259
- --color-primary-200: 47 41 163;
260
- --color-primary-300: 63 55 198;
261
- --color-primary-400: 80 70 230;
262
- --color-primary-500: 105 95 233;
263
- --color-primary-600: 132 122 235;
264
- --color-primary-700: 172 166 242;
265
- --color-primary-800: 214 211 249;
266
- --color-primary-900: 238 237 253;
267
- --color-primary-950: 255 255 255;
268
-
269
- --color-secondary-0: 14 14 24;
270
- --color-secondary-50: 24 24 38;
271
- --color-secondary-100: 38 38 54;
272
- --color-secondary-200: 54 54 72;
273
- --color-secondary-300: 72 72 92;
274
- --color-secondary-400: 92 92 112;
275
- --color-secondary-500: 121 121 137;
276
- --color-secondary-600: 152 152 163;
277
- --color-secondary-700: 186 186 194;
278
- --color-secondary-800: 220 220 224;
279
- --color-secondary-900: 241 241 243;
280
- --color-secondary-950: 255 255 255;
281
-
282
- --color-tertiary-50: 30 8 72;
283
- --color-tertiary-100: 48 18 106;
284
- --color-tertiary-200: 68 28 138;
285
- --color-tertiary-300: 90 40 170;
286
- --color-tertiary-400: 114 58 200;
287
- --color-tertiary-500: 140 80 228;
288
- --color-tertiary-600: 168 120 238;
289
- --color-tertiary-700: 196 160 246;
290
- --color-tertiary-800: 222 200 252;
291
- --color-tertiary-900: 243 232 255;
292
- --color-tertiary-950: 250 245 255;
293
-
294
- --color-error-0: 80 5 5;
295
- --color-error-50: 122 10 10;
296
- --color-error-100: 150 16 16;
297
- --color-error-200: 178 24 24;
298
- --color-error-300: 204 37 37;
299
- --color-error-400: 230 53 53;
300
- --color-error-500: 240 82 82;
301
- --color-error-600: 248 113 113;
302
- --color-error-700: 252 165 165;
303
- --color-error-800: 254 226 226;
304
- --color-error-900: 254 242 242;
305
- --color-error-950: 255 255 255;
306
-
307
- --color-success-0: 5 40 12;
308
- --color-success-50: 10 64 22;
309
- --color-success-100: 14 88 32;
310
- --color-success-200: 18 112 40;
311
- --color-success-300: 24 140 52;
312
- --color-success-400: 34 168 66;
313
- --color-success-500: 56 189 92;
314
- --color-success-600: 96 207 128;
315
- --color-success-700: 147 226 172;
316
- --color-success-800: 210 245 221;
317
- --color-success-900: 237 252 241;
318
- --color-success-950: 255 255 255;
319
-
320
- --color-warning-0: 48 30 4;
321
- --color-warning-50: 82 52 6;
322
- --color-warning-100: 112 72 5;
323
- --color-warning-200: 145 96 4;
324
- --color-warning-300: 182 123 4;
325
- --color-warning-400: 220 155 6;
326
- --color-warning-500: 240 176 14;
327
- --color-warning-600: 247 195 56;
328
- --color-warning-700: 252 217 119;
329
- --color-warning-800: 255 240 198;
330
- --color-warning-900: 255 249 235;
331
- --color-warning-950: 255 255 255;
332
-
333
- --color-info-0: 2 32 64;
334
- --color-info-50: 6 50 96;
335
- --color-info-100: 10 68 126;
336
- --color-info-200: 14 88 158;
337
- --color-info-300: 22 110 190;
338
- --color-info-400: 34 134 220;
339
- --color-info-500: 66 158 232;
340
- --color-info-600: 110 184 240;
341
- --color-info-700: 168 213 248;
342
- --color-info-800: 224 240 253;
343
- --color-info-900: 240 248 255;
344
- --color-info-950: 255 255 255;
345
-
346
- --color-typography-0: 10 10 10;
347
- --color-typography-50: 23 23 23;
348
- --color-typography-100: 38 38 38;
349
- --color-typography-200: 64 64 64;
350
- --color-typography-300: 82 82 82;
351
- --color-typography-400: 115 115 115;
352
- --color-typography-500: 140 140 140;
353
- --color-typography-600: 163 163 163;
354
- --color-typography-700: 212 212 212;
355
- --color-typography-800: 229 229 229;
356
- --color-typography-900: 245 245 245;
357
- --color-typography-950: 255 255 255;
358
-
359
- --color-outline-0: 18 18 18;
360
- --color-outline-50: 33 33 33;
361
- --color-outline-100: 51 51 51;
362
- --color-outline-200: 82 82 82;
363
- --color-outline-300: 115 115 115;
364
- --color-outline-400: 140 140 140;
365
- --color-outline-500: 163 163 163;
366
- --color-outline-600: 196 196 196;
367
- --color-outline-700: 212 212 212;
368
- --color-outline-800: 229 229 229;
369
- --color-outline-900: 245 245 245;
370
- --color-outline-950: 255 255 255;
371
-
372
- --color-background-0: 24 23 25;
373
- --color-background-50: 38 38 40;
374
- --color-background-100: 51 51 53;
375
- --color-background-200: 66 66 68;
376
- --color-background-300: 82 82 85;
377
- --color-background-400: 104 104 108;
378
- --color-background-500: 130 130 135;
379
- --color-background-600: 163 163 169;
380
- --color-background-700: 196 196 201;
381
- --color-background-800: 221 221 226;
382
- --color-background-900: 240 240 245;
383
- --color-background-950: 255 255 255;
384
- --color-background-error: 80 5 5;
385
- --color-background-warning: 48 30 4;
386
- --color-background-muted: 38 38 40;
387
- --color-background-success: 5 40 12;
388
- --color-background-info: 2 32 64;
389
-
390
- --color-indicator-primary: 132 122 235;
391
- --color-indicator-info: 66 158 232;
392
- --color-indicator-error: 240 82 82;
393
- }
394
- ```
395
-
396
- Optional tab-like reference blocks (same values split by mode):
397
-
398
- <details>
399
- <summary>Light Theme Tokens (:root)</summary>
400
-
401
- ```css
402
- /* Use the :root block from the full file above */
403
- ```
404
-
405
- </details>
406
-
407
- <details>
408
- <summary>Dark Theme Tokens (.dark)</summary>
409
-
410
- ```css
411
- /* Use the .dark block from the full file above */
412
- ```
413
-
414
- </details>
415
-
416
- #### Step D: Create or update `babel.config.js`
417
-
418
- ```js
419
- module.exports = function (api) {
420
- api.cache(true);
421
- return {
422
- presets: [
423
- ["babel-preset-expo", { jsxImportSource: "nativewind" }],
424
- "nativewind/babel",
425
- ],
426
- };
427
- };
428
- ```
429
-
430
- #### Step E: Create or update `metro.config.js`
431
-
432
- ```js
433
- const { getDefaultConfig } = require("expo/metro-config");
434
- const { withNativeWind } = require("nativewind/metro");
435
-
436
- const config = getDefaultConfig(__dirname);
437
-
438
- module.exports = withNativeWind(config, { input: "./global.css" });
439
- ```
440
-
441
- #### Step F: Add NativeWind types file `nativewind-env.d.ts`
442
-
443
- ```ts
444
- /// <reference types="nativewind/types" />
445
- ```
446
-
447
- #### Step G: Import `global.css` in your app entry
448
-
449
- Example `App.tsx`:
450
-
451
- ```tsx
452
- import "./global.css";
453
- import React from "react";
454
- import { View, Text } from "react-native";
455
-
456
- export default function App() {
457
- return (
458
- <View className="flex-1 items-center justify-center bg-background-0">
459
- <Text className="text-typography-900">React-Natives ready</Text>
460
- </View>
461
- );
462
- }
463
- ```
464
-
465
- #### Step H: Optional pnpm compatibility (`.npmrc`)
466
-
467
- If you use pnpm with Expo/Metro, add:
468
-
469
- ```ini
470
- node-linker=hoisted
471
- ```
472
-
473
- Then run:
474
-
475
- ```bash
476
- pnpm install
477
- ```
478
-
479
- #### Step I: Start the app
480
-
481
- ```bash
482
- npx expo start --clear --web
483
- ```
484
-
485
- ---
486
-
487
- ## Example Usage
488
-
489
- ```tsx
490
- import { Button, ButtonText, Card, CardHeader, CardBody } from "@wireservers-ui/react-natives";
491
-
492
- export default function App() {
493
- return (
494
- <Card>
495
- <CardHeader>
496
- <Text variant="h2">Welcome</Text>
497
- </CardHeader>
498
- <CardBody>
499
- <Button action="primary" variant="solid" size="md">
500
- <ButtonText>Get Started</ButtonText>
501
- </Button>
502
- </CardBody>
503
- </Card>
504
- );
505
- }
506
- ```
507
-
508
- ---
509
-
510
- ## Components
511
-
512
- ### Core Primitives
513
-
514
- Text, Heading, Icon, Divider, Badge, Spinner, Image, Avatar, Card, Button, Kbd, Code, Blockquote
515
-
516
- ### Form Controls
517
-
518
- Input, Textarea, Switch, Checkbox, Radio, Slider, Select, FormControl, NumberInput, PasswordInput, SearchInput, Rating, TagsInput, DatePicker, PinInput, ColorPicker
519
-
520
- ### Feedback & Overlay
521
-
522
- Alert, Progress, CircularProgress, Modal, Toast, Tooltip, Drawer, ActionSheet, AlertDialog, Popover, Snackbar, Overlay
523
-
524
- ### Navigation & Disclosure
525
-
526
- Tabs, Accordion, Breadcrumb, Menu, Pagination, Stepper, SegmentedControl, Fab, Link
527
-
528
- ### Data Display
529
-
530
- Tag, Skeleton, Empty, Stat, Table, List, Timeline, Carousel
531
-
532
- ### Layout
533
-
534
- Box, Stack (VStack, HStack), Center, AspectRatio, Container, Pressable, Portal, VisuallyHidden
535
-
536
- ### Interactive
537
-
538
- Toggle, ToggleGroup, Collapsible, Calendar
539
-
540
- ---
541
-
542
- ## Theming
543
-
544
- Components use CSS variables for theming.
545
-
546
- For the complete theming file (full `:root` + `.dark` token sets), use the manual setup instructions in **Step C: Create `global.css`** above.
547
-
548
- Token groups include `primary`, `secondary`, `tertiary`, `error`, `success`, `warning`, `info`, `typography`, `outline`, `background`, and `indicator`.
549
-
550
- ---
551
-
552
- ## Repository Structure
553
-
554
- ```text
555
- react-natives/
556
- ├── src/ # TypeScript source — ships as-is (no build step)
557
- ├── tailwind-preset.js # Tailwind CSS preset for consumers
558
- ├── tsconfig.json
559
- └── package.json # npm package definition
560
- ```
561
-
562
- ## Development
563
-
564
- ### Prerequisites
565
-
566
- - Node.js 18+
567
-
568
- ### Setup
569
-
570
- ```bash
571
- # Clone the repository
572
- git clone https://github.com/wireservers/wireservers-ui.git
573
- cd wireservers-ui/packages/react-natives
574
-
575
- # Install dependencies
576
- npm install
577
- ```
578
-
579
- No build step — the library ships TypeScript source directly.
580
-
581
- ### Branches
582
-
583
- | Branch | Purpose |
584
- | --- | --- |
585
- | `sot` | Source of truth (main) |
586
- | `dev` | Development |
587
- | `prod` | Production |
588
-
589
- ---
590
-
591
- ## Roadmap
592
-
593
- This project just started — here's what's ahead:
594
-
595
- - [ ] Comprehensive documentation for every component
596
- - [ ] Prop tables and interactive examples
597
- - [ ] CLI scaffolding tool (`npx create-react-natives`)
598
- - [ ] More theme presets (Material, iOS native, etc.)
599
- - [ ] Component testing suite
600
- - [ ] Storybook integration
601
- - [ ] Animation presets with Reanimated
602
-
603
- ---
604
-
605
- ## Contributing
606
-
607
- See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
608
-
609
- We're in the early stages and welcome contributions of all kinds — bug reports, component requests, documentation improvements, and code contributions.
610
-
611
- ## License
612
-
613
- [MIT](LICENSE) Copyright (c) 2026 Wireservers
1
+ # React-Natives
2
+
3
+ **A comprehensive React Native component library built with NativeWind and Tailwind Variants.**
4
+
5
+ > **Note:** This project is in active development (v2.0.1). We're building out components, documentation, and tooling. Contributions and feedback are welcome!
6
+
7
+ [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
8
+ [![npm version](https://img.shields.io/npm/v/@wireservers-ui/react-natives.svg)](https://www.npmjs.com/package/@wireservers-ui/react-natives)
9
+
10
+ ---
11
+
12
+ ## Release Notes (v2.0.1)
13
+
14
+ ### What was updated
15
+
16
+ - Published package contents now include `bin/init.js` (packaging parity fix)
17
+ - This ensures the installed npm artifact contains the same CLI helper file expected by local package contents
18
+
19
+ ### Changelog
20
+
21
+ - Full changelog is included in the package at `CHANGELOG.md`
22
+ - GitHub: https://github.com/wireservers/wireservers-ui/blob/dev/packages/react-natives/CHANGELOG.md
23
+ - npm package page: open the `CHANGELOG.md` file from the package contents/files list
24
+
25
+ ---
26
+
27
+ ## What is React-Natives?
28
+
29
+ React-Natives is a collection of 70+ production-ready, accessible React Native components. Every component is TypeScript-first, themeable via CSS variables, and styled with NativeWind (Tailwind CSS for React Native).
30
+
31
+ **Live Demo:** [www.reactnatives.dev](https://www.reactnatives.dev)
32
+
33
+ ### Key Features
34
+
35
+ - **70+ Components** — Buttons, forms, modals, tables, calendars, color pickers, and more
36
+ - **TypeScript First** — Fully typed with excellent IDE autocomplete
37
+ - **NativeWind + Tailwind Variants** — Utility-first styling with type-safe variant APIs
38
+ - **Themeable** — CSS variable-based color system with light/dark mode support
39
+ - **Accessible** — Built with accessibility in mind
40
+ - **Cross Platform** — iOS, Android, and Web via React Native
41
+
42
+ ### Tech Stack
43
+
44
+ | Layer | Technology |
45
+ | --- | --- |
46
+ | Components | React Native |
47
+ | Styling | NativeWind v4, Tailwind CSS 3, Tailwind Variants |
48
+ | Types | TypeScript |
49
+
50
+ ---
51
+
52
+ ## Setup
53
+
54
+ ### 1. Easy Setup (Recommended)
55
+
56
+ Use this for the fastest first-time setup in a new Expo app.
57
+
58
+ ```bash
59
+ mkdir -p demos/react-natives
60
+ npx create-expo-app@latest demos/react-natives/project --template blank-typescript
61
+ cd demos/react-natives/project
62
+ npm install @wireservers-ui/react-natives@2.0.1
63
+ npx @wireservers-ui/react-natives@2.0.1 init
64
+ npm exec expo -- start --clear --web
65
+ ```
66
+
67
+ This sequence keeps all generated files inside `demos/react-natives/project`.
68
+ No setup files are written outside the generated project folder when run exactly as above.
69
+
70
+ If `npm exec` prompts to install `expo`, answer `y`.
71
+
72
+ If you hit npm cache errors like `ENOTEMPTY` or `EACCES` while running the command above, run:
73
+
74
+ ```bash
75
+ sudo chown -R "$(id -u):$(id -g)" ~/.npm
76
+ ```
77
+
78
+ Then retry:
79
+
80
+ ```bash
81
+ npm exec expo -- start --clear --web
82
+ ```
83
+
84
+ ### Folder Safety Rule
85
+
86
+ Always run the init command from inside your generated project folder:
87
+
88
+ ```bash
89
+ cd demos/react-natives/project
90
+ npx @wireservers-ui/react-natives@2.0.1 init
91
+ ```
92
+
93
+ Do not run `init` from the repository root.
94
+
95
+ What `init` does for you:
96
+
97
+ - Installs required runtime dependencies
98
+ - Matches `react-dom` exactly to your installed `react` version
99
+ - Creates setup files only if missing
100
+ - Never overwrites existing files in your project
101
+
102
+ ### 2. Manual Setup (Detailed)
103
+
104
+ Use this path if you want full control over every file.
105
+
106
+ #### Step A: Install packages
107
+
108
+ ```bash
109
+ npm install @wireservers-ui/react-natives@2.0.1
110
+ npm install nativewind babel-preset-expo tailwindcss tailwind-variants tailwind-merge react-native-reanimated react-native-worklets react-native-svg react-native-web react-dom
111
+ ```
112
+
113
+ Important:
114
+
115
+ - Ensure `react-dom` matches your `react` version exactly.
116
+ - Example: if `react` is `19.2.0`, use `react-dom@19.2.0`.
117
+
118
+ #### Step B: Create or update `tailwind.config.js`
119
+
120
+ ```js
121
+ /** @type {import('tailwindcss').Config} */
122
+ module.exports = {
123
+ content: [
124
+ "./App.{js,jsx,ts,tsx}",
125
+ "./app/**/*.{js,jsx,ts,tsx}",
126
+ "./components/**/*.{js,jsx,ts,tsx}",
127
+ "./node_modules/@wireservers-ui/react-natives/src/**/*.{js,jsx,ts,tsx}",
128
+ ],
129
+ presets: [require("@wireservers-ui/react-natives/tailwind-preset")],
130
+ };
131
+ ```
132
+
133
+ #### Step C: Create `global.css`
134
+
135
+ GitHub README does not support real tabs, so the sections below use collapsible blocks (tab-like) for Light and Dark theme tokens.
136
+
137
+ Use this full file content in `global.css`:
138
+
139
+ ```css
140
+ @tailwind base;
141
+ @tailwind components;
142
+ @tailwind utilities;
143
+
144
+ :root {
145
+ --color-primary-0: 255 255 255;
146
+ --color-primary-50: 238 237 253;
147
+ --color-primary-100: 214 211 249;
148
+ --color-primary-200: 172 166 242;
149
+ --color-primary-300: 132 122 235;
150
+ --color-primary-400: 105 95 233;
151
+ --color-primary-500: 80 70 230;
152
+ --color-primary-600: 63 55 198;
153
+ --color-primary-700: 47 41 163;
154
+ --color-primary-800: 33 29 128;
155
+ --color-primary-900: 22 20 96;
156
+ --color-primary-950: 13 11 64;
157
+
158
+ --color-secondary-0: 255 255 255;
159
+ --color-secondary-50: 241 241 243;
160
+ --color-secondary-100: 220 220 224;
161
+ --color-secondary-200: 186 186 194;
162
+ --color-secondary-300: 152 152 163;
163
+ --color-secondary-400: 121 121 137;
164
+ --color-secondary-500: 92 92 112;
165
+ --color-secondary-600: 72 72 92;
166
+ --color-secondary-700: 54 54 72;
167
+ --color-secondary-800: 38 38 54;
168
+ --color-secondary-900: 24 24 38;
169
+ --color-secondary-950: 14 14 24;
170
+
171
+ --color-tertiary-50: 250 245 255;
172
+ --color-tertiary-100: 243 232 255;
173
+ --color-tertiary-200: 222 200 252;
174
+ --color-tertiary-300: 196 160 246;
175
+ --color-tertiary-400: 168 120 238;
176
+ --color-tertiary-500: 140 80 228;
177
+ --color-tertiary-600: 114 58 200;
178
+ --color-tertiary-700: 90 40 170;
179
+ --color-tertiary-800: 68 28 138;
180
+ --color-tertiary-900: 48 18 106;
181
+ --color-tertiary-950: 30 8 72;
182
+
183
+ --color-error-0: 255 255 255;
184
+ --color-error-50: 254 242 242;
185
+ --color-error-100: 254 226 226;
186
+ --color-error-200: 252 165 165;
187
+ --color-error-300: 248 113 113;
188
+ --color-error-400: 240 82 82;
189
+ --color-error-500: 230 53 53;
190
+ --color-error-600: 204 37 37;
191
+ --color-error-700: 178 24 24;
192
+ --color-error-800: 150 16 16;
193
+ --color-error-900: 122 10 10;
194
+ --color-error-950: 80 5 5;
195
+
196
+ --color-success-0: 255 255 255;
197
+ --color-success-50: 237 252 241;
198
+ --color-success-100: 210 245 221;
199
+ --color-success-200: 147 226 172;
200
+ --color-success-300: 96 207 128;
201
+ --color-success-400: 56 189 92;
202
+ --color-success-500: 34 168 66;
203
+ --color-success-600: 24 140 52;
204
+ --color-success-700: 18 112 40;
205
+ --color-success-800: 14 88 32;
206
+ --color-success-900: 10 64 22;
207
+ --color-success-950: 5 40 12;
208
+
209
+ --color-warning-0: 255 255 255;
210
+ --color-warning-50: 255 249 235;
211
+ --color-warning-100: 255 240 198;
212
+ --color-warning-200: 252 217 119;
213
+ --color-warning-300: 247 195 56;
214
+ --color-warning-400: 240 176 14;
215
+ --color-warning-500: 220 155 6;
216
+ --color-warning-600: 182 123 4;
217
+ --color-warning-700: 145 96 4;
218
+ --color-warning-800: 112 72 5;
219
+ --color-warning-900: 82 52 6;
220
+ --color-warning-950: 48 30 4;
221
+
222
+ --color-info-0: 255 255 255;
223
+ --color-info-50: 240 248 255;
224
+ --color-info-100: 224 240 253;
225
+ --color-info-200: 168 213 248;
226
+ --color-info-300: 110 184 240;
227
+ --color-info-400: 66 158 232;
228
+ --color-info-500: 34 134 220;
229
+ --color-info-600: 22 110 190;
230
+ --color-info-700: 14 88 158;
231
+ --color-info-800: 10 68 126;
232
+ --color-info-900: 6 50 96;
233
+ --color-info-950: 2 32 64;
234
+
235
+ --color-typography-0: 255 255 255;
236
+ --color-typography-50: 245 245 245;
237
+ --color-typography-100: 229 229 229;
238
+ --color-typography-200: 212 212 212;
239
+ --color-typography-300: 163 163 163;
240
+ --color-typography-400: 140 140 140;
241
+ --color-typography-500: 115 115 115;
242
+ --color-typography-600: 82 82 82;
243
+ --color-typography-700: 64 64 64;
244
+ --color-typography-800: 38 38 38;
245
+ --color-typography-900: 23 23 23;
246
+ --color-typography-950: 10 10 10;
247
+
248
+ --color-outline-0: 255 255 255;
249
+ --color-outline-50: 245 245 245;
250
+ --color-outline-100: 229 229 229;
251
+ --color-outline-200: 212 212 212;
252
+ --color-outline-300: 196 196 196;
253
+ --color-outline-400: 163 163 163;
254
+ --color-outline-500: 140 140 140;
255
+ --color-outline-600: 115 115 115;
256
+ --color-outline-700: 82 82 82;
257
+ --color-outline-800: 51 51 51;
258
+ --color-outline-900: 33 33 33;
259
+ --color-outline-950: 18 18 18;
260
+
261
+ --color-background-0: 255 255 255;
262
+ --color-background-50: 249 249 249;
263
+ --color-background-100: 242 242 242;
264
+ --color-background-200: 228 228 228;
265
+ --color-background-300: 212 212 212;
266
+ --color-background-400: 189 189 189;
267
+ --color-background-500: 163 163 163;
268
+ --color-background-600: 115 115 115;
269
+ --color-background-700: 82 82 82;
270
+ --color-background-800: 51 51 51;
271
+ --color-background-900: 33 33 33;
272
+ --color-background-950: 18 18 18;
273
+ --color-background-error: 254 226 226;
274
+ --color-background-warning: 255 243 224;
275
+ --color-background-muted: 245 245 245;
276
+ --color-background-success: 228 247 235;
277
+ --color-background-info: 224 240 253;
278
+
279
+ --color-indicator-primary: 80 70 230;
280
+ --color-indicator-info: 34 134 220;
281
+ --color-indicator-error: 230 53 53;
282
+ }
283
+
284
+ .dark {
285
+ --color-primary-0: 13 11 64;
286
+ --color-primary-50: 22 20 96;
287
+ --color-primary-100: 33 29 128;
288
+ --color-primary-200: 47 41 163;
289
+ --color-primary-300: 63 55 198;
290
+ --color-primary-400: 80 70 230;
291
+ --color-primary-500: 105 95 233;
292
+ --color-primary-600: 132 122 235;
293
+ --color-primary-700: 172 166 242;
294
+ --color-primary-800: 214 211 249;
295
+ --color-primary-900: 238 237 253;
296
+ --color-primary-950: 255 255 255;
297
+
298
+ --color-secondary-0: 14 14 24;
299
+ --color-secondary-50: 24 24 38;
300
+ --color-secondary-100: 38 38 54;
301
+ --color-secondary-200: 54 54 72;
302
+ --color-secondary-300: 72 72 92;
303
+ --color-secondary-400: 92 92 112;
304
+ --color-secondary-500: 121 121 137;
305
+ --color-secondary-600: 152 152 163;
306
+ --color-secondary-700: 186 186 194;
307
+ --color-secondary-800: 220 220 224;
308
+ --color-secondary-900: 241 241 243;
309
+ --color-secondary-950: 255 255 255;
310
+
311
+ --color-tertiary-50: 30 8 72;
312
+ --color-tertiary-100: 48 18 106;
313
+ --color-tertiary-200: 68 28 138;
314
+ --color-tertiary-300: 90 40 170;
315
+ --color-tertiary-400: 114 58 200;
316
+ --color-tertiary-500: 140 80 228;
317
+ --color-tertiary-600: 168 120 238;
318
+ --color-tertiary-700: 196 160 246;
319
+ --color-tertiary-800: 222 200 252;
320
+ --color-tertiary-900: 243 232 255;
321
+ --color-tertiary-950: 250 245 255;
322
+
323
+ --color-error-0: 80 5 5;
324
+ --color-error-50: 122 10 10;
325
+ --color-error-100: 150 16 16;
326
+ --color-error-200: 178 24 24;
327
+ --color-error-300: 204 37 37;
328
+ --color-error-400: 230 53 53;
329
+ --color-error-500: 240 82 82;
330
+ --color-error-600: 248 113 113;
331
+ --color-error-700: 252 165 165;
332
+ --color-error-800: 254 226 226;
333
+ --color-error-900: 254 242 242;
334
+ --color-error-950: 255 255 255;
335
+
336
+ --color-success-0: 5 40 12;
337
+ --color-success-50: 10 64 22;
338
+ --color-success-100: 14 88 32;
339
+ --color-success-200: 18 112 40;
340
+ --color-success-300: 24 140 52;
341
+ --color-success-400: 34 168 66;
342
+ --color-success-500: 56 189 92;
343
+ --color-success-600: 96 207 128;
344
+ --color-success-700: 147 226 172;
345
+ --color-success-800: 210 245 221;
346
+ --color-success-900: 237 252 241;
347
+ --color-success-950: 255 255 255;
348
+
349
+ --color-warning-0: 48 30 4;
350
+ --color-warning-50: 82 52 6;
351
+ --color-warning-100: 112 72 5;
352
+ --color-warning-200: 145 96 4;
353
+ --color-warning-300: 182 123 4;
354
+ --color-warning-400: 220 155 6;
355
+ --color-warning-500: 240 176 14;
356
+ --color-warning-600: 247 195 56;
357
+ --color-warning-700: 252 217 119;
358
+ --color-warning-800: 255 240 198;
359
+ --color-warning-900: 255 249 235;
360
+ --color-warning-950: 255 255 255;
361
+
362
+ --color-info-0: 2 32 64;
363
+ --color-info-50: 6 50 96;
364
+ --color-info-100: 10 68 126;
365
+ --color-info-200: 14 88 158;
366
+ --color-info-300: 22 110 190;
367
+ --color-info-400: 34 134 220;
368
+ --color-info-500: 66 158 232;
369
+ --color-info-600: 110 184 240;
370
+ --color-info-700: 168 213 248;
371
+ --color-info-800: 224 240 253;
372
+ --color-info-900: 240 248 255;
373
+ --color-info-950: 255 255 255;
374
+
375
+ --color-typography-0: 10 10 10;
376
+ --color-typography-50: 23 23 23;
377
+ --color-typography-100: 38 38 38;
378
+ --color-typography-200: 64 64 64;
379
+ --color-typography-300: 82 82 82;
380
+ --color-typography-400: 115 115 115;
381
+ --color-typography-500: 140 140 140;
382
+ --color-typography-600: 163 163 163;
383
+ --color-typography-700: 212 212 212;
384
+ --color-typography-800: 229 229 229;
385
+ --color-typography-900: 245 245 245;
386
+ --color-typography-950: 255 255 255;
387
+
388
+ --color-outline-0: 18 18 18;
389
+ --color-outline-50: 33 33 33;
390
+ --color-outline-100: 51 51 51;
391
+ --color-outline-200: 82 82 82;
392
+ --color-outline-300: 115 115 115;
393
+ --color-outline-400: 140 140 140;
394
+ --color-outline-500: 163 163 163;
395
+ --color-outline-600: 196 196 196;
396
+ --color-outline-700: 212 212 212;
397
+ --color-outline-800: 229 229 229;
398
+ --color-outline-900: 245 245 245;
399
+ --color-outline-950: 255 255 255;
400
+
401
+ --color-background-0: 24 23 25;
402
+ --color-background-50: 38 38 40;
403
+ --color-background-100: 51 51 53;
404
+ --color-background-200: 66 66 68;
405
+ --color-background-300: 82 82 85;
406
+ --color-background-400: 104 104 108;
407
+ --color-background-500: 130 130 135;
408
+ --color-background-600: 163 163 169;
409
+ --color-background-700: 196 196 201;
410
+ --color-background-800: 221 221 226;
411
+ --color-background-900: 240 240 245;
412
+ --color-background-950: 255 255 255;
413
+ --color-background-error: 80 5 5;
414
+ --color-background-warning: 48 30 4;
415
+ --color-background-muted: 38 38 40;
416
+ --color-background-success: 5 40 12;
417
+ --color-background-info: 2 32 64;
418
+
419
+ --color-indicator-primary: 132 122 235;
420
+ --color-indicator-info: 66 158 232;
421
+ --color-indicator-error: 240 82 82;
422
+ }
423
+ ```
424
+
425
+ Optional tab-like reference blocks (same values split by mode):
426
+
427
+ <details>
428
+ <summary>Light Theme Tokens (:root)</summary>
429
+
430
+ ```css
431
+ /* Use the :root block from the full file above */
432
+ ```
433
+
434
+ </details>
435
+
436
+ <details>
437
+ <summary>Dark Theme Tokens (.dark)</summary>
438
+
439
+ ```css
440
+ /* Use the .dark block from the full file above */
441
+ ```
442
+
443
+ </details>
444
+
445
+ #### Step D: Create or update `babel.config.js`
446
+
447
+ ```js
448
+ module.exports = function (api) {
449
+ api.cache(true);
450
+ return {
451
+ presets: [
452
+ ["babel-preset-expo", { jsxImportSource: "nativewind" }],
453
+ "nativewind/babel",
454
+ ],
455
+ };
456
+ };
457
+ ```
458
+
459
+ #### Step E: Create or update `metro.config.js`
460
+
461
+ ```js
462
+ const { getDefaultConfig } = require("expo/metro-config");
463
+ const { withNativeWind } = require("nativewind/metro");
464
+
465
+ const config = getDefaultConfig(__dirname);
466
+
467
+ module.exports = withNativeWind(config, { input: "./global.css" });
468
+ ```
469
+
470
+ #### Step F: Add NativeWind types file `nativewind-env.d.ts`
471
+
472
+ ```ts
473
+ /// <reference types="nativewind/types" />
474
+ ```
475
+
476
+ #### Step G: Import `global.css` in your app entry
477
+
478
+ Example `App.tsx`:
479
+
480
+ ```tsx
481
+ import "./global.css";
482
+ import React from "react";
483
+ import { View, Text } from "react-native";
484
+
485
+ export default function App() {
486
+ return (
487
+ <View className="flex-1 items-center justify-center bg-background-0">
488
+ <Text className="text-typography-900">React-Natives ready</Text>
489
+ </View>
490
+ );
491
+ }
492
+ ```
493
+
494
+ #### Step H: Optional pnpm compatibility (`.npmrc`)
495
+
496
+ If you use pnpm with Expo/Metro, add:
497
+
498
+ ```ini
499
+ node-linker=hoisted
500
+ ```
501
+
502
+ Then run:
503
+
504
+ ```bash
505
+ pnpm install
506
+ ```
507
+
508
+ #### Step I: Start the app
509
+
510
+ ```bash
511
+ npx expo start --clear --web
512
+ ```
513
+
514
+ ---
515
+
516
+ ## Example Usage
517
+
518
+ ```tsx
519
+ import { Button, ButtonText, Card, CardHeader, CardBody } from "@wireservers-ui/react-natives";
520
+
521
+ export default function App() {
522
+ return (
523
+ <Card>
524
+ <CardHeader>
525
+ <Text variant="h2">Welcome</Text>
526
+ </CardHeader>
527
+ <CardBody>
528
+ <Button action="primary" variant="solid" size="md">
529
+ <ButtonText>Get Started</ButtonText>
530
+ </Button>
531
+ </CardBody>
532
+ </Card>
533
+ );
534
+ }
535
+ ```
536
+
537
+ ---
538
+
539
+ ## Components
540
+
541
+ ### Core Primitives
542
+
543
+ Text, Heading, Icon, Divider, Badge, Spinner, Image, Avatar, Card, Button, Kbd, Code, Blockquote
544
+
545
+ ### Form Controls
546
+
547
+ Input, Textarea, Switch, Checkbox, Radio, Slider, Select, FormControl, NumberInput, PasswordInput, SearchInput, Rating, TagsInput, DatePicker, PinInput, ColorPicker
548
+
549
+ ### Feedback & Overlay
550
+
551
+ Alert, Progress, CircularProgress, Modal, Toast, Tooltip, Drawer, ActionSheet, AlertDialog, Popover, Snackbar, Overlay
552
+
553
+ ### Navigation & Disclosure
554
+
555
+ Tabs, Accordion, Breadcrumb, Menu, Pagination, Stepper, SegmentedControl, Fab, Link
556
+
557
+ ### Data Display
558
+
559
+ Tag, Skeleton, Empty, Stat, Table, List, Timeline, Carousel
560
+
561
+ ### Layout
562
+
563
+ Box, Stack (VStack, HStack), Center, AspectRatio, Container, Pressable, Portal, VisuallyHidden
564
+
565
+ ### Interactive
566
+
567
+ Toggle, ToggleGroup, Collapsible, Calendar
568
+
569
+ ---
570
+
571
+ ## Theming
572
+
573
+ Components use CSS variables for theming.
574
+
575
+ For the complete theming file (full `:root` + `.dark` token sets), use the manual setup instructions in **Step C: Create `global.css`** above.
576
+
577
+ Token groups include `primary`, `secondary`, `tertiary`, `error`, `success`, `warning`, `info`, `typography`, `outline`, `background`, and `indicator`.
578
+
579
+ ---
580
+
581
+ ## Repository Structure
582
+
583
+ ```text
584
+ react-natives/
585
+ ├── src/ # TypeScript source ships as-is (no build step)
586
+ ├── tailwind-preset.js # Tailwind CSS preset for consumers
587
+ ├── tsconfig.json
588
+ └── package.json # npm package definition
589
+ ```
590
+
591
+ ## Development
592
+
593
+ ### Prerequisites
594
+
595
+ - Node.js 18+
596
+
597
+ ### Setup
598
+
599
+ ```bash
600
+ # Clone the repository
601
+ git clone https://github.com/wireservers/wireservers-ui.git
602
+ cd wireservers-ui/packages/react-natives
603
+
604
+ # Install dependencies
605
+ npm install
606
+ ```
607
+
608
+ No build step — the library ships TypeScript source directly.
609
+
610
+ ### Branches
611
+
612
+ | Branch | Purpose |
613
+ | --- | --- |
614
+ | `sot` | Source of truth (main) |
615
+ | `dev` | Development |
616
+ | `prod` | Production |
617
+
618
+ ---
619
+
620
+ ## Roadmap
621
+
622
+ This project just started — here's what's ahead:
623
+
624
+ - [ ] Comprehensive documentation for every component
625
+ - [ ] Prop tables and interactive examples
626
+ - [ ] CLI scaffolding tool (`npx create-react-natives`)
627
+ - [ ] More theme presets (Material, iOS native, etc.)
628
+ - [ ] Component testing suite
629
+ - [ ] Storybook integration
630
+ - [ ] Animation presets with Reanimated
631
+
632
+ ---
633
+
634
+ ## Contributing
635
+
636
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
637
+
638
+ We're in the early stages and welcome contributions of all kinds — bug reports, component requests, documentation improvements, and code contributions.
639
+
640
+ ## License
641
+
642
+ [MIT](LICENSE) — Copyright (c) 2026 Wireservers