@wireservers-ui/react-natives 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (414) hide show
  1. package/assets/logos/react-natives-icon-square-1024.png +0 -0
  2. package/assets/logos/react-natives-logo-1056x320.png +0 -0
  3. package/assets/logos/react-natives-logo-1280x320.png +0 -0
  4. package/assets/logos/react-natives-logo-1840x600.png +0 -0
  5. package/assets/logos/react-natives-logo-1980x600.png +0 -0
  6. package/assets/logos/react-natives-logo-2400x600.png +0 -0
  7. package/assets/logos/react-natives-logo-490x160.png +0 -0
  8. package/assets/logos/react-natives-logo-528x160.png +0 -0
  9. package/assets/logos/react-natives-logo-640x160.png +0 -0
  10. package/assets/logos/react-natives-logo-981x320.png +0 -0
  11. package/assets/logos/react-natives-logo.svg +45 -0
  12. package/assets/logos/react-natives-mark-1024.png +0 -0
  13. package/assets/logos/react-natives-mark-128.png +0 -0
  14. package/assets/logos/react-natives-mark-256.png +0 -0
  15. package/assets/logos/react-natives-mark-512.png +0 -0
  16. package/assets/logos/react-natives-mark.svg +42 -0
  17. package/package.json +57 -0
  18. package/src/accordion/accordion-content.tsx +30 -0
  19. package/src/accordion/accordion-icon.tsx +54 -0
  20. package/src/accordion/accordion-item.tsx +37 -0
  21. package/src/accordion/accordion-title-text.tsx +24 -0
  22. package/src/accordion/accordion-trigger.tsx +38 -0
  23. package/src/accordion/accordion.tsx +91 -0
  24. package/src/accordion/index.ts +24 -0
  25. package/src/accordion/styles.ts +74 -0
  26. package/src/accordion/types.ts +56 -0
  27. package/src/actionsheet/actionsheet-backdrop.tsx +23 -0
  28. package/src/actionsheet/actionsheet-content.tsx +19 -0
  29. package/src/actionsheet/actionsheet-drag-indicator-wrapper.tsx +19 -0
  30. package/src/actionsheet/actionsheet-drag-indicator.tsx +19 -0
  31. package/src/actionsheet/actionsheet-item-text.tsx +19 -0
  32. package/src/actionsheet/actionsheet-item.tsx +20 -0
  33. package/src/actionsheet/actionsheet-scroll-view.tsx +12 -0
  34. package/src/actionsheet/actionsheet.tsx +45 -0
  35. package/src/actionsheet/index.ts +20 -0
  36. package/src/actionsheet/styles.ts +25 -0
  37. package/src/actionsheet/types.ts +49 -0
  38. package/src/alert/alert-body.tsx +19 -0
  39. package/src/alert/alert-close-button.tsx +23 -0
  40. package/src/alert/alert-icon.tsx +40 -0
  41. package/src/alert/alert-text.tsx +22 -0
  42. package/src/alert/alert.tsx +33 -0
  43. package/src/alert/index.ts +15 -0
  44. package/src/alert/styles.ts +112 -0
  45. package/src/alert/types.ts +36 -0
  46. package/src/alert-dialog/alert-dialog.tsx +54 -0
  47. package/src/alert-dialog/index.ts +2 -0
  48. package/src/alert-dialog/styles.ts +40 -0
  49. package/src/alert-dialog/types.ts +40 -0
  50. package/src/aspect-ratio/aspect-ratio.tsx +20 -0
  51. package/src/aspect-ratio/index.ts +2 -0
  52. package/src/aspect-ratio/styles.ts +6 -0
  53. package/src/aspect-ratio/types.ts +7 -0
  54. package/src/avatar/avatar-badge.tsx +22 -0
  55. package/src/avatar/avatar-fallback-text.tsx +33 -0
  56. package/src/avatar/avatar-group.tsx +53 -0
  57. package/src/avatar/avatar-image.tsx +21 -0
  58. package/src/avatar/avatar.tsx +27 -0
  59. package/src/avatar/index.ts +14 -0
  60. package/src/avatar/styles.ts +94 -0
  61. package/src/avatar/types.ts +35 -0
  62. package/src/badge/badge-icon.tsx +20 -0
  63. package/src/badge/badge-text.tsx +24 -0
  64. package/src/badge/badge.tsx +39 -0
  65. package/src/badge/index.ts +11 -0
  66. package/src/badge/styles.ts +175 -0
  67. package/src/badge/types.ts +37 -0
  68. package/src/blockquote/blockquote.tsx +21 -0
  69. package/src/blockquote/index.ts +2 -0
  70. package/src/blockquote/styles.ts +11 -0
  71. package/src/blockquote/types.ts +6 -0
  72. package/src/box/box.tsx +19 -0
  73. package/src/box/index.ts +2 -0
  74. package/src/box/styles.ts +6 -0
  75. package/src/box/types.ts +6 -0
  76. package/src/breadcrumb/breadcrumb-item.tsx +20 -0
  77. package/src/breadcrumb/breadcrumb-link.tsx +20 -0
  78. package/src/breadcrumb/breadcrumb-text.tsx +19 -0
  79. package/src/breadcrumb/breadcrumb.tsx +43 -0
  80. package/src/breadcrumb/index.ts +12 -0
  81. package/src/breadcrumb/styles.ts +36 -0
  82. package/src/breadcrumb/types.ts +33 -0
  83. package/src/button/button-group.tsx +35 -0
  84. package/src/button/button-icon.tsx +37 -0
  85. package/src/button/button-spinner.tsx +12 -0
  86. package/src/button/button-text.tsx +27 -0
  87. package/src/button/button.tsx +42 -0
  88. package/src/button/index.ts +19 -0
  89. package/src/button/styles.ts +250 -0
  90. package/src/button/types.ts +67 -0
  91. package/src/calendar/calendar-day-cell.tsx +67 -0
  92. package/src/calendar/calendar-day-view.tsx +66 -0
  93. package/src/calendar/calendar-event.tsx +59 -0
  94. package/src/calendar/calendar-header.tsx +60 -0
  95. package/src/calendar/calendar-horizontal-view.tsx +372 -0
  96. package/src/calendar/calendar-legend.tsx +41 -0
  97. package/src/calendar/calendar-month-view.tsx +47 -0
  98. package/src/calendar/calendar-vertical-view.tsx +395 -0
  99. package/src/calendar/calendar-view-switcher.tsx +65 -0
  100. package/src/calendar/calendar-week-view.tsx +52 -0
  101. package/src/calendar/calendar.tsx +74 -0
  102. package/src/calendar/index.ts +27 -0
  103. package/src/calendar/styles.ts +367 -0
  104. package/src/calendar/types.ts +101 -0
  105. package/src/calendar/use-calendar.ts +170 -0
  106. package/src/calendar/utils.ts +278 -0
  107. package/src/card/card-body.tsx +22 -0
  108. package/src/card/card-footer.tsx +19 -0
  109. package/src/card/card-header.tsx +22 -0
  110. package/src/card/card.tsx +27 -0
  111. package/src/card/index.ts +13 -0
  112. package/src/card/styles.ts +54 -0
  113. package/src/card/types.ts +31 -0
  114. package/src/carousel/carousel.tsx +360 -0
  115. package/src/carousel/index.ts +2 -0
  116. package/src/carousel/styles.ts +21 -0
  117. package/src/carousel/types.ts +31 -0
  118. package/src/center/center.tsx +19 -0
  119. package/src/center/index.ts +2 -0
  120. package/src/center/styles.ts +6 -0
  121. package/src/center/types.ts +6 -0
  122. package/src/checkbox/checkbox-group.tsx +63 -0
  123. package/src/checkbox/checkbox-icon.tsx +35 -0
  124. package/src/checkbox/checkbox-indicator.tsx +30 -0
  125. package/src/checkbox/checkbox-label.tsx +24 -0
  126. package/src/checkbox/checkbox.tsx +86 -0
  127. package/src/checkbox/index.ts +14 -0
  128. package/src/checkbox/styles.ts +69 -0
  129. package/src/checkbox/types.ts +55 -0
  130. package/src/circular-progress/circular-progress.tsx +82 -0
  131. package/src/circular-progress/index.ts +2 -0
  132. package/src/circular-progress/styles.ts +31 -0
  133. package/src/circular-progress/types.ts +18 -0
  134. package/src/code/code.tsx +36 -0
  135. package/src/code/index.ts +2 -0
  136. package/src/code/styles.ts +25 -0
  137. package/src/code/types.ts +13 -0
  138. package/src/collapsible/collapsible.tsx +58 -0
  139. package/src/collapsible/index.ts +2 -0
  140. package/src/collapsible/styles.ts +5 -0
  141. package/src/collapsible/types.ts +21 -0
  142. package/src/color-picker/color-picker-box.tsx +115 -0
  143. package/src/color-picker/color-picker-slider.tsx +98 -0
  144. package/src/color-picker/color-picker.tsx +162 -0
  145. package/src/color-picker/color-utils.ts +215 -0
  146. package/src/color-picker/index.ts +34 -0
  147. package/src/color-picker/styles.ts +32 -0
  148. package/src/color-picker/types.ts +49 -0
  149. package/src/color-picker/use-pointer-drag.ts +80 -0
  150. package/src/container/container.tsx +19 -0
  151. package/src/container/index.ts +2 -0
  152. package/src/container/styles.ts +21 -0
  153. package/src/container/types.ts +10 -0
  154. package/src/date-picker/date-picker.tsx +136 -0
  155. package/src/date-picker/index.ts +15 -0
  156. package/src/date-picker/styles.ts +18 -0
  157. package/src/date-picker/types.ts +33 -0
  158. package/src/divider/divider.tsx +21 -0
  159. package/src/divider/index.ts +2 -0
  160. package/src/divider/styles.ts +14 -0
  161. package/src/divider/types.ts +7 -0
  162. package/src/drawer/drawer-backdrop.tsx +23 -0
  163. package/src/drawer/drawer-body.tsx +19 -0
  164. package/src/drawer/drawer-close-button.tsx +29 -0
  165. package/src/drawer/drawer-content.tsx +142 -0
  166. package/src/drawer/drawer-footer.tsx +19 -0
  167. package/src/drawer/drawer-header.tsx +19 -0
  168. package/src/drawer/drawer.tsx +54 -0
  169. package/src/drawer/index.ts +22 -0
  170. package/src/drawer/styles.ts +36 -0
  171. package/src/drawer/types.ts +62 -0
  172. package/src/empty/empty.tsx +53 -0
  173. package/src/empty/index.ts +2 -0
  174. package/src/empty/styles.ts +26 -0
  175. package/src/empty/types.ts +22 -0
  176. package/src/fab/fab-icon.tsx +20 -0
  177. package/src/fab/fab-label.tsx +22 -0
  178. package/src/fab/fab.tsx +45 -0
  179. package/src/fab/index.ts +11 -0
  180. package/src/fab/styles.ts +57 -0
  181. package/src/fab/types.ts +33 -0
  182. package/src/form-control/form-control-error-icon.tsx +25 -0
  183. package/src/form-control/form-control-error-message.tsx +40 -0
  184. package/src/form-control/form-control-helper-text.tsx +25 -0
  185. package/src/form-control/form-control-label-text.tsx +25 -0
  186. package/src/form-control/form-control-label.tsx +36 -0
  187. package/src/form-control/form-control.tsx +46 -0
  188. package/src/form-control/index.ts +20 -0
  189. package/src/form-control/styles.ts +105 -0
  190. package/src/form-control/types.ts +45 -0
  191. package/src/heading/heading.tsx +21 -0
  192. package/src/heading/index.ts +2 -0
  193. package/src/heading/styles.ts +24 -0
  194. package/src/heading/types.ts +19 -0
  195. package/src/icon/icon.tsx +21 -0
  196. package/src/icon/index.ts +2 -0
  197. package/src/icon/styles.ts +18 -0
  198. package/src/icon/types.ts +8 -0
  199. package/src/icon-button/icon-button.tsx +23 -0
  200. package/src/icon-button/index.ts +2 -0
  201. package/src/icon-button/styles.ts +78 -0
  202. package/src/icon-button/types.ts +15 -0
  203. package/src/image/image.tsx +20 -0
  204. package/src/image/index.ts +2 -0
  205. package/src/image/styles.ts +28 -0
  206. package/src/image/types.ts +11 -0
  207. package/src/index.ts +1039 -0
  208. package/src/input/index.ts +13 -0
  209. package/src/input/input-field.tsx +35 -0
  210. package/src/input/input-icon.tsx +25 -0
  211. package/src/input/input-slot.tsx +24 -0
  212. package/src/input/input.tsx +73 -0
  213. package/src/input/styles.ts +90 -0
  214. package/src/input/types.ts +39 -0
  215. package/src/kbd/index.ts +2 -0
  216. package/src/kbd/kbd.tsx +21 -0
  217. package/src/kbd/styles.ts +11 -0
  218. package/src/kbd/types.ts +7 -0
  219. package/src/link/index.ts +4 -0
  220. package/src/link/link-text.tsx +19 -0
  221. package/src/link/link.tsx +31 -0
  222. package/src/link/styles.ts +19 -0
  223. package/src/link/types.ts +13 -0
  224. package/src/list/index.ts +2 -0
  225. package/src/list/list.tsx +55 -0
  226. package/src/list/styles.ts +8 -0
  227. package/src/list/types.ts +17 -0
  228. package/src/menu/index.ts +2 -0
  229. package/src/menu/menu.tsx +99 -0
  230. package/src/menu/styles.ts +14 -0
  231. package/src/menu/types.ts +30 -0
  232. package/src/modal/index.ts +18 -0
  233. package/src/modal/modal-backdrop.tsx +23 -0
  234. package/src/modal/modal-body.tsx +19 -0
  235. package/src/modal/modal-close-button.tsx +29 -0
  236. package/src/modal/modal-content.tsx +22 -0
  237. package/src/modal/modal-footer.tsx +19 -0
  238. package/src/modal/modal-header.tsx +19 -0
  239. package/src/modal/modal.tsx +50 -0
  240. package/src/modal/styles.ts +37 -0
  241. package/src/modal/types.ts +49 -0
  242. package/src/nativewind-env.d.ts +1 -0
  243. package/src/number-input/index.ts +18 -0
  244. package/src/number-input/number-input.tsx +161 -0
  245. package/src/number-input/styles.ts +35 -0
  246. package/src/number-input/types.ts +44 -0
  247. package/src/overlay/index.ts +2 -0
  248. package/src/overlay/overlay.tsx +21 -0
  249. package/src/overlay/styles.ts +6 -0
  250. package/src/overlay/types.ts +7 -0
  251. package/src/pagination/index.ts +2 -0
  252. package/src/pagination/pagination.tsx +58 -0
  253. package/src/pagination/styles.ts +27 -0
  254. package/src/pagination/types.ts +19 -0
  255. package/src/password-input/index.ts +14 -0
  256. package/src/password-input/password-input.tsx +79 -0
  257. package/src/password-input/styles.ts +25 -0
  258. package/src/password-input/types.ts +24 -0
  259. package/src/pin-input/index.ts +12 -0
  260. package/src/pin-input/pin-input.tsx +96 -0
  261. package/src/pin-input/styles.ts +16 -0
  262. package/src/pin-input/types.ts +26 -0
  263. package/src/popover/index.ts +2 -0
  264. package/src/popover/popover.tsx +98 -0
  265. package/src/popover/styles.ts +31 -0
  266. package/src/popover/types.ts +46 -0
  267. package/src/portal/index.ts +2 -0
  268. package/src/portal/portal.tsx +8 -0
  269. package/src/portal/styles.ts +2 -0
  270. package/src/portal/types.ts +3 -0
  271. package/src/pressable/index.ts +2 -0
  272. package/src/pressable/pressable.tsx +20 -0
  273. package/src/pressable/styles.ts +10 -0
  274. package/src/pressable/types.ts +6 -0
  275. package/src/progress/index.ts +9 -0
  276. package/src/progress/progress-filled-track.tsx +26 -0
  277. package/src/progress/progress.tsx +52 -0
  278. package/src/progress/styles.ts +34 -0
  279. package/src/progress/types.ts +28 -0
  280. package/src/radio/index.ts +14 -0
  281. package/src/radio/radio-group.tsx +61 -0
  282. package/src/radio/radio-icon.tsx +24 -0
  283. package/src/radio/radio-indicator.tsx +30 -0
  284. package/src/radio/radio-label.tsx +24 -0
  285. package/src/radio/radio.tsx +68 -0
  286. package/src/radio/styles.ts +69 -0
  287. package/src/radio/types.ts +51 -0
  288. package/src/rating/index.ts +7 -0
  289. package/src/rating/rating.tsx +93 -0
  290. package/src/rating/styles.ts +13 -0
  291. package/src/rating/types.ts +29 -0
  292. package/src/search-input/index.ts +16 -0
  293. package/src/search-input/search-input.tsx +119 -0
  294. package/src/search-input/styles.ts +28 -0
  295. package/src/search-input/types.ts +31 -0
  296. package/src/segmented-control/index.ts +2 -0
  297. package/src/segmented-control/segmented-control.tsx +34 -0
  298. package/src/segmented-control/styles.ts +22 -0
  299. package/src/segmented-control/types.ts +22 -0
  300. package/src/select/index.ts +28 -0
  301. package/src/select/select-backdrop.tsx +25 -0
  302. package/src/select/select-content.tsx +49 -0
  303. package/src/select/select-drag-indicator.tsx +19 -0
  304. package/src/select/select-icon.tsx +25 -0
  305. package/src/select/select-input.tsx +32 -0
  306. package/src/select/select-item-text.tsx +30 -0
  307. package/src/select/select-item.tsx +72 -0
  308. package/src/select/select-portal.tsx +22 -0
  309. package/src/select/select-scroll-view.tsx +22 -0
  310. package/src/select/select-trigger.tsx +64 -0
  311. package/src/select/select.tsx +101 -0
  312. package/src/select/styles.ts +114 -0
  313. package/src/select/types.ts +92 -0
  314. package/src/skeleton/index.ts +2 -0
  315. package/src/skeleton/skeleton.tsx +29 -0
  316. package/src/skeleton/styles.ts +14 -0
  317. package/src/skeleton/types.ts +12 -0
  318. package/src/slider/index.ts +12 -0
  319. package/src/slider/slider-filled-track.tsx +31 -0
  320. package/src/slider/slider-thumb.tsx +52 -0
  321. package/src/slider/slider-track.tsx +154 -0
  322. package/src/slider/slider.tsx +193 -0
  323. package/src/slider/styles.ts +71 -0
  324. package/src/slider/types.ts +47 -0
  325. package/src/snackbar/index.ts +2 -0
  326. package/src/snackbar/snackbar.tsx +39 -0
  327. package/src/snackbar/styles.ts +29 -0
  328. package/src/snackbar/types.ts +21 -0
  329. package/src/spinner/index.ts +2 -0
  330. package/src/spinner/spinner.tsx +29 -0
  331. package/src/spinner/styles.ts +15 -0
  332. package/src/spinner/types.ts +10 -0
  333. package/src/stack/index.ts +2 -0
  334. package/src/stack/stack.tsx +49 -0
  335. package/src/stack/styles.ts +25 -0
  336. package/src/stack/types.ts +15 -0
  337. package/src/stat/index.ts +2 -0
  338. package/src/stat/stat.tsx +48 -0
  339. package/src/stat/styles.ts +34 -0
  340. package/src/stat/types.ts +24 -0
  341. package/src/stepper/index.ts +2 -0
  342. package/src/stepper/stepper.tsx +95 -0
  343. package/src/stepper/styles.ts +49 -0
  344. package/src/stepper/types.ts +20 -0
  345. package/src/switch/index.ts +2 -0
  346. package/src/switch/styles.ts +24 -0
  347. package/src/switch/switch.tsx +67 -0
  348. package/src/switch/types.ts +23 -0
  349. package/src/table/index.ts +2 -0
  350. package/src/table/styles.ts +12 -0
  351. package/src/table/table.tsx +52 -0
  352. package/src/table/types.ts +10 -0
  353. package/src/tabs/index.ts +18 -0
  354. package/src/tabs/styles.ts +113 -0
  355. package/src/tabs/tab-list.tsx +29 -0
  356. package/src/tabs/tab-panel.tsx +29 -0
  357. package/src/tabs/tab-panels.tsx +21 -0
  358. package/src/tabs/tab-text.tsx +26 -0
  359. package/src/tabs/tab.tsx +56 -0
  360. package/src/tabs/tabs.tsx +71 -0
  361. package/src/tabs/types.ts +53 -0
  362. package/src/tag/index.ts +14 -0
  363. package/src/tag/styles.ts +115 -0
  364. package/src/tag/tag-close-button.tsx +26 -0
  365. package/src/tag/tag-icon.tsx +20 -0
  366. package/src/tag/tag-text.tsx +22 -0
  367. package/src/tag/tag.tsx +40 -0
  368. package/src/tag/types.ts +33 -0
  369. package/src/tags-input/index.ts +18 -0
  370. package/src/tags-input/styles.ts +29 -0
  371. package/src/tags-input/tags-input.tsx +149 -0
  372. package/src/tags-input/types.ts +37 -0
  373. package/src/text/index.ts +2 -0
  374. package/src/text/styles.ts +54 -0
  375. package/src/text/text.tsx +51 -0
  376. package/src/text/types.ts +36 -0
  377. package/src/textarea/index.ts +2 -0
  378. package/src/textarea/styles.ts +37 -0
  379. package/src/textarea/textarea.tsx +68 -0
  380. package/src/textarea/types.ts +14 -0
  381. package/src/timeline/index.ts +2 -0
  382. package/src/timeline/styles.ts +57 -0
  383. package/src/timeline/timeline.tsx +52 -0
  384. package/src/timeline/types.ts +30 -0
  385. package/src/toast/index.ts +17 -0
  386. package/src/toast/styles.ts +118 -0
  387. package/src/toast/toast-description.tsx +22 -0
  388. package/src/toast/toast-provider.tsx +136 -0
  389. package/src/toast/toast-title.tsx +22 -0
  390. package/src/toast/toast.tsx +43 -0
  391. package/src/toast/types.ts +50 -0
  392. package/src/toast/use-toast.ts +7 -0
  393. package/src/toggle/index.ts +2 -0
  394. package/src/toggle/styles.ts +30 -0
  395. package/src/toggle/toggle.tsx +25 -0
  396. package/src/toggle/types.ts +15 -0
  397. package/src/toggle-group/index.ts +2 -0
  398. package/src/toggle-group/styles.ts +35 -0
  399. package/src/toggle-group/toggle-group.tsx +60 -0
  400. package/src/toggle-group/types.ts +29 -0
  401. package/src/tooltip/index.ts +11 -0
  402. package/src/tooltip/styles.ts +9 -0
  403. package/src/tooltip/tooltip-content.tsx +19 -0
  404. package/src/tooltip/tooltip-text.tsx +19 -0
  405. package/src/tooltip/tooltip.tsx +116 -0
  406. package/src/tooltip/types.ts +35 -0
  407. package/src/utils/brand.ts +5 -0
  408. package/src/utils/create-context.ts +17 -0
  409. package/src/utils/index.ts +8 -0
  410. package/src/utils/types.ts +20 -0
  411. package/src/visually-hidden/index.ts +2 -0
  412. package/src/visually-hidden/styles.ts +6 -0
  413. package/src/visually-hidden/types.ts +6 -0
  414. package/src/visually-hidden/visually-hidden.tsx +22 -0
@@ -0,0 +1,95 @@
1
+ import React from 'react';
2
+ import { View, Text } from 'react-native';
3
+ import { createComponentContext } from '../utils/create-context';
4
+ import type { StepperProps, StepProps, StepIndicatorProps, StepSeparatorProps, StepTitleProps, StepDescriptionProps, StepperContextValue, StepContextValue } from './types';
5
+ import { stepperStyle, stepStyle, stepIndicatorStyle, stepIndicatorTextStyle, stepSeparatorStyle, stepTitleStyle, stepDescriptionStyle } from './styles';
6
+
7
+ export const [StepperProvider, useStepperContext] = createComponentContext<StepperContextValue>('Stepper');
8
+ export const [StepProvider, useStepContext] = createComponentContext<StepContextValue>('Step');
9
+
10
+ export const Stepper = React.forwardRef<React.ElementRef<typeof View>, StepperProps>(
11
+ ({ className, activeStep = 0, orientation = 'horizontal', children, ...props }, ref) => {
12
+ return (
13
+ <StepperProvider value={{ activeStep, orientation }}>
14
+ <View ref={ref} className={stepperStyle({ orientation, class: className })} {...props}>{children}</View>
15
+ </StepperProvider>
16
+ );
17
+ },
18
+ );
19
+ Stepper.displayName = 'Stepper';
20
+
21
+ export const Step = React.forwardRef<React.ElementRef<typeof View>, StepProps>(
22
+ ({ className, index, children, ...props }, ref) => {
23
+ const { activeStep, orientation } = useStepperContext();
24
+ const isActive = index === activeStep;
25
+ const isCompleted = index < activeStep;
26
+
27
+ if (orientation === 'vertical') {
28
+ const childArray = React.Children.toArray(children);
29
+ const isSep = (c: React.ReactNode) =>
30
+ React.isValidElement(c) && (c.type as any).displayName === 'StepSeparator';
31
+ const separatorChild = childArray.find(isSep);
32
+ const otherChildren = childArray.filter(c => !isSep(c));
33
+ return (
34
+ <StepProvider value={{ index, isActive, isCompleted }}>
35
+ <View ref={ref} className={stepStyle({ orientation, class: className })} {...props}>
36
+ <View className="items-center">
37
+ {otherChildren[0]}
38
+ {separatorChild}
39
+ </View>
40
+ <View className="pt-1.5 gap-0.5">
41
+ {otherChildren.slice(1)}
42
+ </View>
43
+ </View>
44
+ </StepProvider>
45
+ );
46
+ }
47
+
48
+ return (
49
+ <StepProvider value={{ index, isActive, isCompleted }}>
50
+ <View ref={ref} className={stepStyle({ orientation, class: className })} {...props}>{children}</View>
51
+ </StepProvider>
52
+ );
53
+ },
54
+ );
55
+ Step.displayName = 'Step';
56
+
57
+ export const StepIndicator = React.forwardRef<React.ElementRef<typeof View>, StepIndicatorProps>(
58
+ ({ className, children, ...props }, ref) => {
59
+ const { index, isActive, isCompleted } = useStepContext();
60
+ return (
61
+ <View ref={ref} className={stepIndicatorStyle({ isActive, isCompleted: !isActive && isCompleted, class: className })} {...props}>
62
+ {children ?? (
63
+ <Text className={stepIndicatorTextStyle({ isActive: isActive || isCompleted })}>
64
+ {isCompleted ? '✓' : index + 1}
65
+ </Text>
66
+ )}
67
+ </View>
68
+ );
69
+ },
70
+ );
71
+ StepIndicator.displayName = 'StepIndicator';
72
+
73
+ export const StepSeparator = React.forwardRef<React.ElementRef<typeof View>, StepSeparatorProps>(
74
+ ({ className, ...props }, ref) => {
75
+ const { orientation } = useStepperContext();
76
+ const { isCompleted } = useStepContext();
77
+ return <View ref={ref} className={stepSeparatorStyle({ orientation, isCompleted, class: className })} {...props} />;
78
+ },
79
+ );
80
+ StepSeparator.displayName = 'StepSeparator';
81
+
82
+ export const StepTitle = React.forwardRef<React.ElementRef<typeof Text>, StepTitleProps>(
83
+ ({ className, ...props }, ref) => {
84
+ const { isActive, isCompleted } = useStepContext();
85
+ return <Text ref={ref} className={stepTitleStyle({ isActive, isCompleted: !isActive && isCompleted, class: className })} {...props} />;
86
+ },
87
+ );
88
+ StepTitle.displayName = 'StepTitle';
89
+
90
+ export const StepDescription = React.forwardRef<React.ElementRef<typeof Text>, StepDescriptionProps>(
91
+ ({ className, ...props }, ref) => {
92
+ return <Text ref={ref} className={stepDescriptionStyle({ class: className })} {...props} />;
93
+ },
94
+ );
95
+ StepDescription.displayName = 'StepDescription';
@@ -0,0 +1,49 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const stepperStyle = tv({
4
+ base: '',
5
+ variants: {
6
+ orientation: { horizontal: 'flex-row items-center', vertical: 'flex-col' },
7
+ },
8
+ defaultVariants: { orientation: 'horizontal' },
9
+ });
10
+ export const stepStyle = tv({
11
+ base: 'items-center',
12
+ variants: {
13
+ orientation: { horizontal: 'flex-row gap-2 flex-1', vertical: 'flex-row gap-3 items-start' },
14
+ },
15
+ defaultVariants: { orientation: 'horizontal' },
16
+ });
17
+ export const stepIndicatorStyle = tv({
18
+ base: 'h-8 w-8 rounded-full items-center justify-center border-2',
19
+ variants: {
20
+ isActive: { true: 'bg-primary-500 border-primary-500' },
21
+ isCompleted: { true: 'bg-primary-500 border-primary-500' },
22
+ },
23
+ defaultVariants: { isActive: false, isCompleted: false },
24
+ });
25
+ export const stepIndicatorTextStyle = tv({
26
+ base: 'text-sm font-semibold',
27
+ variants: {
28
+ isActive: { true: 'text-typography-0', false: 'text-typography-500' },
29
+ isCompleted: { true: 'text-typography-0' },
30
+ },
31
+ defaultVariants: { isActive: false },
32
+ });
33
+ export const stepSeparatorStyle = tv({
34
+ base: 'bg-outline-200',
35
+ variants: {
36
+ orientation: { horizontal: 'h-0.5 flex-1', vertical: 'w-0.5 min-h-[24px]' },
37
+ isCompleted: { true: 'bg-primary-500' },
38
+ },
39
+ defaultVariants: { orientation: 'horizontal', isCompleted: false },
40
+ });
41
+ export const stepTitleStyle = tv({
42
+ base: 'text-sm font-medium',
43
+ variants: {
44
+ isActive: { true: 'text-typography-900', false: 'text-typography-500' },
45
+ isCompleted: { true: 'text-typography-900' },
46
+ },
47
+ defaultVariants: { isActive: false },
48
+ });
49
+ export const stepDescriptionStyle = tv({ base: 'text-xs text-typography-400', variants: {} });
@@ -0,0 +1,20 @@
1
+ import type { View, Text as RNText } from 'react-native';
2
+
3
+ export type StepperOrientation = 'horizontal' | 'vertical';
4
+
5
+ export interface StepperContextValue { activeStep: number; orientation: StepperOrientation; }
6
+ export interface StepContextValue { index: number; isActive: boolean; isCompleted: boolean; }
7
+
8
+ export interface StepperProps extends React.ComponentPropsWithoutRef<typeof View> {
9
+ className?: string;
10
+ activeStep?: number;
11
+ orientation?: StepperOrientation;
12
+ }
13
+ export interface StepProps extends React.ComponentPropsWithoutRef<typeof View> {
14
+ className?: string;
15
+ index: number;
16
+ }
17
+ export interface StepIndicatorProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
18
+ export interface StepSeparatorProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
19
+ export interface StepTitleProps extends React.ComponentPropsWithoutRef<typeof RNText> { className?: string; }
20
+ export interface StepDescriptionProps extends React.ComponentPropsWithoutRef<typeof RNText> { className?: string; }
@@ -0,0 +1,2 @@
1
+ export { Switch } from './switch';
2
+ export type { SwitchProps, SwitchLabelProps, SwitchSize } from './types';
@@ -0,0 +1,24 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const switchContainerStyle = tv({
4
+ base: 'flex-row items-center gap-2',
5
+ variants: {
6
+ isDisabled: {
7
+ true: 'opacity-40',
8
+ },
9
+ },
10
+ });
11
+
12
+ export const switchLabelStyle = tv({
13
+ base: 'text-typography-900',
14
+ variants: {
15
+ size: {
16
+ sm: 'text-sm',
17
+ md: 'text-base',
18
+ lg: 'text-lg',
19
+ },
20
+ },
21
+ defaultVariants: {
22
+ size: 'md',
23
+ },
24
+ });
@@ -0,0 +1,67 @@
1
+ import React, { useState } from 'react';
2
+ import { View, Switch as RNSwitch } from 'react-native';
3
+ import { useFormControlContext } from '../form-control/form-control';
4
+ import type { SwitchProps } from './types';
5
+ import { switchContainerStyle } from './styles';
6
+
7
+ export const Switch = React.forwardRef<
8
+ React.ElementRef<typeof View>,
9
+ SwitchProps
10
+ >(
11
+ (
12
+ {
13
+ className,
14
+ size = 'md',
15
+ isDisabled: isDisabledProp,
16
+ value: valueProp,
17
+ defaultValue = false,
18
+ onToggle,
19
+ trackColor: trackColorProp,
20
+ thumbColor: thumbColorProp,
21
+ children,
22
+ ...props
23
+ },
24
+ ref,
25
+ ) => {
26
+ const [internalValue, setInternalValue] = useState(defaultValue);
27
+ const formControl = useFormControlContext();
28
+
29
+ const isDisabled = isDisabledProp ?? formControl?.isDisabled ?? false;
30
+ const isControlled = valueProp !== undefined;
31
+ const isOn = isControlled ? valueProp : internalValue;
32
+
33
+ const handleToggle = (newValue: boolean) => {
34
+ if (isDisabled) return;
35
+ if (!isControlled) {
36
+ setInternalValue(newValue);
37
+ }
38
+ onToggle?.(newValue);
39
+ };
40
+
41
+ const defaultTrackColor = {
42
+ false: 'rgb(var(--color-background-300))',
43
+ true: 'rgb(var(--color-primary-500))',
44
+ };
45
+
46
+ const defaultThumbColor = 'rgb(var(--color-background-0))';
47
+
48
+ return (
49
+ <View
50
+ ref={ref}
51
+ className={switchContainerStyle({ isDisabled, class: className })}
52
+ {...props}
53
+ >
54
+ <RNSwitch
55
+ value={isOn}
56
+ onValueChange={handleToggle}
57
+ disabled={isDisabled}
58
+ trackColor={trackColorProp ?? defaultTrackColor}
59
+ thumbColor={thumbColorProp ?? defaultThumbColor}
60
+ />
61
+ {children}
62
+ </View>
63
+ );
64
+ },
65
+ );
66
+
67
+ Switch.displayName = 'Switch';
@@ -0,0 +1,23 @@
1
+ import type { View, Switch as RNSwitch } from 'react-native';
2
+
3
+ export type SwitchSize = 'sm' | 'md' | 'lg';
4
+
5
+ export interface SwitchProps
6
+ extends React.ComponentPropsWithoutRef<typeof View> {
7
+ className?: string;
8
+ size?: SwitchSize;
9
+ isDisabled?: boolean;
10
+ value?: boolean;
11
+ defaultValue?: boolean;
12
+ onToggle?: (value: boolean) => void;
13
+ trackColor?: {
14
+ false?: string;
15
+ true?: string;
16
+ };
17
+ thumbColor?: string;
18
+ }
19
+
20
+ export interface SwitchLabelProps
21
+ extends React.ComponentPropsWithoutRef<typeof View> {
22
+ className?: string;
23
+ }
@@ -0,0 +1,2 @@
1
+ export { Table, TableHead, TableBody, TableFooter, TableRow, TableCell, TableHeaderCell, TableCaption } from './table';
2
+ export type { TableProps, TableHeadProps, TableBodyProps, TableFooterProps, TableRowProps, TableCellProps, TableHeaderCellProps, TableCaptionProps } from './types';
@@ -0,0 +1,12 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const tableStyle = tv({ base: 'w-full flex-col', variants: {} });
4
+ export const tableHeadStyle = tv({ base: 'flex-col bg-background-50', variants: {} });
5
+ export const tableBodyStyle = tv({ base: 'flex-col', variants: {} });
6
+ export const tableFooterStyle = tv({ base: 'bg-background-50', variants: {} });
7
+ export const tableRowStyle = tv({ base: 'flex-row border-b border-outline-100', variants: {} });
8
+ export const tableCellStyle = tv({ base: 'flex-1 px-4 py-3 justify-center', variants: {} });
9
+ export const tableHeaderCellStyle = tv({ base: 'flex-1 px-4 py-3 justify-center', variants: {} });
10
+ export const tableHeaderCellTextStyle = tv({ base: 'text-xs font-semibold text-typography-500 uppercase', variants: {} });
11
+ export const tableCellTextStyle = tv({ base: 'text-sm text-typography-700', variants: {} });
12
+ export const tableCaptionStyle = tv({ base: 'text-sm text-typography-400 py-3 text-center', variants: {} });
@@ -0,0 +1,52 @@
1
+ import React from 'react';
2
+ import { View, Text } from 'react-native';
3
+ import type { TableProps, TableHeadProps, TableBodyProps, TableFooterProps, TableRowProps, TableCellProps, TableHeaderCellProps, TableCaptionProps } from './types';
4
+ import { tableStyle, tableHeadStyle, tableBodyStyle, tableFooterStyle, tableRowStyle, tableCellStyle, tableHeaderCellStyle, tableHeaderCellTextStyle, tableCellTextStyle, tableCaptionStyle } from './styles';
5
+
6
+ export const Table = React.forwardRef<React.ElementRef<typeof View>, TableProps>(({ className, ...props }, ref) => {
7
+ return <View ref={ref} className={tableStyle({ class: className })} {...props} />;
8
+ });
9
+ Table.displayName = 'Table';
10
+
11
+ export const TableHead = React.forwardRef<React.ElementRef<typeof View>, TableHeadProps>(({ className, ...props }, ref) => {
12
+ return <View ref={ref} className={tableHeadStyle({ class: className })} {...props} />;
13
+ });
14
+ TableHead.displayName = 'TableHead';
15
+
16
+ export const TableBody = React.forwardRef<React.ElementRef<typeof View>, TableBodyProps>(({ className, ...props }, ref) => {
17
+ return <View ref={ref} className={tableBodyStyle({ class: className })} {...props} />;
18
+ });
19
+ TableBody.displayName = 'TableBody';
20
+
21
+ export const TableFooter = React.forwardRef<React.ElementRef<typeof View>, TableFooterProps>(({ className, ...props }, ref) => {
22
+ return <View ref={ref} className={tableFooterStyle({ class: className })} {...props} />;
23
+ });
24
+ TableFooter.displayName = 'TableFooter';
25
+
26
+ export const TableRow = React.forwardRef<React.ElementRef<typeof View>, TableRowProps>(({ className, ...props }, ref) => {
27
+ return <View ref={ref} className={tableRowStyle({ class: className })} {...props} />;
28
+ });
29
+ TableRow.displayName = 'TableRow';
30
+
31
+ export const TableCell = React.forwardRef<React.ElementRef<typeof View>, TableCellProps>(({ className, children, ...props }, ref) => {
32
+ return (
33
+ <View ref={ref} className={tableCellStyle({ class: className })} {...props}>
34
+ {typeof children === 'string' ? <Text className={tableCellTextStyle({})}>{children}</Text> : children}
35
+ </View>
36
+ );
37
+ });
38
+ TableCell.displayName = 'TableCell';
39
+
40
+ export const TableHeaderCell = React.forwardRef<React.ElementRef<typeof View>, TableHeaderCellProps>(({ className, children, ...props }, ref) => {
41
+ return (
42
+ <View ref={ref} className={tableHeaderCellStyle({ class: className })} {...props}>
43
+ {typeof children === 'string' ? <Text className={tableHeaderCellTextStyle({})}>{children}</Text> : children}
44
+ </View>
45
+ );
46
+ });
47
+ TableHeaderCell.displayName = 'TableHeaderCell';
48
+
49
+ export const TableCaption = React.forwardRef<React.ElementRef<typeof Text>, TableCaptionProps>(({ className, ...props }, ref) => {
50
+ return <Text ref={ref} className={tableCaptionStyle({ class: className })} {...props} />;
51
+ });
52
+ TableCaption.displayName = 'TableCaption';
@@ -0,0 +1,10 @@
1
+ import type { View, Text as RNText } from 'react-native';
2
+
3
+ export interface TableProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
4
+ export interface TableHeadProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
5
+ export interface TableBodyProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
6
+ export interface TableFooterProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
7
+ export interface TableRowProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
8
+ export interface TableCellProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
9
+ export interface TableHeaderCellProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
10
+ export interface TableCaptionProps extends React.ComponentPropsWithoutRef<typeof RNText> { className?: string; }
@@ -0,0 +1,18 @@
1
+ export { Tabs, TabsProvider, useTabsContext } from './tabs';
2
+ export { TabList } from './tab-list';
3
+ export { Tab, TabProvider, useTabContext } from './tab';
4
+ export { TabText } from './tab-text';
5
+ export { TabPanels } from './tab-panels';
6
+ export { TabPanel } from './tab-panel';
7
+
8
+ export type {
9
+ TabsProps,
10
+ TabListProps,
11
+ TabProps,
12
+ TabTextProps,
13
+ TabPanelsProps,
14
+ TabPanelProps,
15
+ TabsVariant,
16
+ TabsSize,
17
+ TabsContextValue,
18
+ } from './types';
@@ -0,0 +1,113 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const tabsStyle = tv({
4
+ base: 'w-full',
5
+ });
6
+
7
+ export const tabListStyle = tv({
8
+ base: 'flex-row',
9
+ variants: {
10
+ orientation: {
11
+ horizontal: 'flex-row',
12
+ vertical: 'flex-col',
13
+ },
14
+ variant: {
15
+ underlined: 'border-b border-outline-200',
16
+ outline: 'gap-1',
17
+ rounded: 'bg-background-100 rounded-lg p-0.5 gap-0.5',
18
+ },
19
+ },
20
+ defaultVariants: {
21
+ orientation: 'horizontal',
22
+ variant: 'underlined',
23
+ },
24
+ });
25
+
26
+ export const tabStyle = tv({
27
+ base: 'items-center justify-center',
28
+ variants: {
29
+ size: {
30
+ sm: 'px-3 py-1.5',
31
+ md: 'px-4 py-2',
32
+ lg: 'px-5 py-2.5',
33
+ },
34
+ variant: {
35
+ underlined: '',
36
+ outline: '',
37
+ rounded: '',
38
+ },
39
+ active: {
40
+ true: '',
41
+ false: '',
42
+ },
43
+ isFitted: {
44
+ true: 'flex-1',
45
+ false: '',
46
+ },
47
+ },
48
+ compoundVariants: [
49
+ {
50
+ variant: 'underlined',
51
+ active: true,
52
+ class: 'border-b-2 border-primary-500',
53
+ },
54
+ {
55
+ variant: 'underlined',
56
+ active: false,
57
+ class: 'border-b-2 border-transparent',
58
+ },
59
+ {
60
+ variant: 'outline',
61
+ active: true,
62
+ class: 'border border-outline-300 rounded-md bg-background-0',
63
+ },
64
+ {
65
+ variant: 'outline',
66
+ active: false,
67
+ class: 'bg-transparent',
68
+ },
69
+ {
70
+ variant: 'rounded',
71
+ active: true,
72
+ class: 'bg-background-0 rounded-md shadow-hard-5',
73
+ },
74
+ {
75
+ variant: 'rounded',
76
+ active: false,
77
+ class: 'bg-transparent',
78
+ },
79
+ ],
80
+ defaultVariants: {
81
+ size: 'md',
82
+ variant: 'underlined',
83
+ active: false,
84
+ isFitted: false,
85
+ },
86
+ });
87
+
88
+ export const tabTextStyle = tv({
89
+ base: 'font-medium',
90
+ variants: {
91
+ size: {
92
+ sm: 'text-sm',
93
+ md: 'text-base',
94
+ lg: 'text-lg',
95
+ },
96
+ active: {
97
+ true: 'text-typography-900',
98
+ false: 'text-typography-500',
99
+ },
100
+ },
101
+ defaultVariants: {
102
+ size: 'md',
103
+ active: false,
104
+ },
105
+ });
106
+
107
+ export const tabPanelsStyle = tv({
108
+ base: 'mt-3',
109
+ });
110
+
111
+ export const tabPanelStyle = tv({
112
+ base: '',
113
+ });
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import { useTabsContext } from './tabs';
4
+ import type { TabListProps } from './types';
5
+ import { tabListStyle } from './styles';
6
+
7
+ export const TabList = React.forwardRef<
8
+ React.ElementRef<typeof View>,
9
+ TabListProps
10
+ >(({ className, children, ...props }, ref) => {
11
+ const { orientation, variant } = useTabsContext();
12
+
13
+ return (
14
+ <View
15
+ ref={ref}
16
+ className={tabListStyle({ orientation, variant, class: className })}
17
+ {...props}
18
+ >
19
+ {React.Children.map(children, (child, index) => {
20
+ if (React.isValidElement(child)) {
21
+ return React.cloneElement(child, { _index: index } as any);
22
+ }
23
+ return child;
24
+ })}
25
+ </View>
26
+ );
27
+ });
28
+
29
+ TabList.displayName = 'TabList';
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import { useTabsContext } from './tabs';
4
+ import type { TabPanelProps } from './types';
5
+ import { tabPanelStyle } from './styles';
6
+
7
+ export const TabPanel = React.forwardRef<
8
+ React.ElementRef<typeof View>,
9
+ TabPanelProps
10
+ >(({ className, index, children, ...props }, ref) => {
11
+ const { selectedIndex } = useTabsContext();
12
+
13
+ if (index !== selectedIndex) {
14
+ return null;
15
+ }
16
+
17
+ return (
18
+ <View
19
+ ref={ref}
20
+ className={tabPanelStyle({ class: className })}
21
+ accessibilityRole="summary"
22
+ {...props}
23
+ >
24
+ {children}
25
+ </View>
26
+ );
27
+ });
28
+
29
+ TabPanel.displayName = 'TabPanel';
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import type { TabPanelsProps } from './types';
4
+ import { tabPanelsStyle } from './styles';
5
+
6
+ export const TabPanels = React.forwardRef<
7
+ React.ElementRef<typeof View>,
8
+ TabPanelsProps
9
+ >(({ className, children, ...props }, ref) => {
10
+ return (
11
+ <View
12
+ ref={ref}
13
+ className={tabPanelsStyle({ class: className })}
14
+ {...props}
15
+ >
16
+ {children}
17
+ </View>
18
+ );
19
+ });
20
+
21
+ TabPanels.displayName = 'TabPanels';
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { Text } from 'react-native';
3
+ import { useTabsContext } from './tabs';
4
+ import { useTabContext } from './tab';
5
+ import type { TabTextProps } from './types';
6
+ import { tabTextStyle } from './styles';
7
+
8
+ export const TabText = React.forwardRef<
9
+ React.ElementRef<typeof Text>,
10
+ TabTextProps
11
+ >(({ className, children, ...props }, ref) => {
12
+ const { size } = useTabsContext();
13
+ const { isActive } = useTabContext();
14
+
15
+ return (
16
+ <Text
17
+ ref={ref}
18
+ className={tabTextStyle({ size, active: isActive, class: className })}
19
+ {...props}
20
+ >
21
+ {children}
22
+ </Text>
23
+ );
24
+ });
25
+
26
+ TabText.displayName = 'TabText';
@@ -0,0 +1,56 @@
1
+ import React from 'react';
2
+ import { Pressable } from 'react-native';
3
+ import { createComponentContext } from '../utils/create-context';
4
+ import { useTabsContext } from './tabs';
5
+ import type { TabProps } from './types';
6
+ import { tabStyle } from './styles';
7
+
8
+ export interface TabContextValue {
9
+ isActive: boolean;
10
+ }
11
+
12
+ export const [TabProvider, useTabContext] =
13
+ createComponentContext<TabContextValue>('Tab');
14
+
15
+ export const Tab = React.forwardRef<
16
+ React.ElementRef<typeof Pressable>,
17
+ TabProps
18
+ >(({ className, _index = 0, children, onPress, ...props }, ref) => {
19
+ const { selectedIndex, onChange, variant, size, isFitted } =
20
+ useTabsContext();
21
+
22
+ const isActive = _index === selectedIndex;
23
+
24
+ const handlePress = React.useCallback(
25
+ (e: any) => {
26
+ onChange(_index);
27
+ onPress?.(e);
28
+ },
29
+ [_index, onChange, onPress],
30
+ );
31
+
32
+ return (
33
+ <TabProvider value={{ isActive }}>
34
+ <Pressable
35
+ ref={ref}
36
+ className={tabStyle({
37
+ variant,
38
+ size,
39
+ active: isActive,
40
+ isFitted,
41
+ class: className,
42
+ })}
43
+ onPress={handlePress}
44
+ accessibilityRole="tab"
45
+ accessibilityState={{ selected: isActive }}
46
+ {...props}
47
+ >
48
+ {typeof children === 'function'
49
+ ? children({ pressed: false } as any)
50
+ : children}
51
+ </Pressable>
52
+ </TabProvider>
53
+ );
54
+ });
55
+
56
+ Tab.displayName = 'Tab';