@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,58 @@
1
+ import React from 'react';
2
+ import { View, Pressable, Text } from 'react-native';
3
+ import { createComponentContext } from '../utils/create-context';
4
+ import type { PaginationProps, PaginationItemProps, PaginationPreviousProps, PaginationNextProps, PaginationEllipsisProps, PaginationContextValue } from './types';
5
+ import { paginationStyle, paginationItemStyle, paginationItemTextStyle, paginationEllipsisStyle } from './styles';
6
+
7
+ export const [PaginationProvider, usePaginationContext] = createComponentContext<PaginationContextValue>('Pagination');
8
+
9
+ export const Pagination = React.forwardRef<React.ElementRef<typeof View>, PaginationProps>(
10
+ ({ className, size = 'md', children, ...props }, ref) => {
11
+ return (
12
+ <PaginationProvider value={{ size }}>
13
+ <View ref={ref} className={paginationStyle({ class: className })} accessibilityRole="menu" {...props}>{children}</View>
14
+ </PaginationProvider>
15
+ );
16
+ },
17
+ );
18
+ Pagination.displayName = 'Pagination';
19
+
20
+ export const PaginationItem = React.forwardRef<React.ElementRef<typeof Pressable>, PaginationItemProps>(
21
+ ({ className, isActive = false, isDisabled, children, ...props }, ref) => {
22
+ const { size } = usePaginationContext();
23
+ return (
24
+ <Pressable ref={ref} disabled={isDisabled} className={paginationItemStyle({ size, isActive, isDisabled, class: className })} accessibilityRole="button" {...props}>
25
+ {typeof children === 'string' || typeof children === 'number' ? (
26
+ <Text className={paginationItemTextStyle({ size, isActive })}>{children}</Text>
27
+ ) : children}
28
+ </Pressable>
29
+ );
30
+ },
31
+ );
32
+ PaginationItem.displayName = 'PaginationItem';
33
+
34
+ export const PaginationPrevious = React.forwardRef<React.ElementRef<typeof Pressable>, PaginationPreviousProps>(
35
+ ({ children = '‹', ...props }, ref) => {
36
+ return <PaginationItem ref={ref} {...props}>{children}</PaginationItem>;
37
+ },
38
+ );
39
+ PaginationPrevious.displayName = 'PaginationPrevious';
40
+
41
+ export const PaginationNext = React.forwardRef<React.ElementRef<typeof Pressable>, PaginationNextProps>(
42
+ ({ children = '›', ...props }, ref) => {
43
+ return <PaginationItem ref={ref} {...props}>{children}</PaginationItem>;
44
+ },
45
+ );
46
+ PaginationNext.displayName = 'PaginationNext';
47
+
48
+ export const PaginationEllipsis = React.forwardRef<React.ElementRef<typeof View>, PaginationEllipsisProps>(
49
+ ({ className, ...props }, ref) => {
50
+ const { size } = usePaginationContext();
51
+ return (
52
+ <View ref={ref} className={paginationEllipsisStyle({ size, class: className })} {...props}>
53
+ <Text className={paginationItemTextStyle({ size, isActive: false })}>…</Text>
54
+ </View>
55
+ );
56
+ },
57
+ );
58
+ PaginationEllipsis.displayName = 'PaginationEllipsis';
@@ -0,0 +1,27 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const paginationStyle = tv({ base: 'flex-row items-center gap-1', variants: {} });
4
+ export const paginationItemStyle = tv({
5
+ base: 'items-center justify-center rounded-lg',
6
+ variants: {
7
+ size: { sm: 'h-8 w-8', md: 'h-10 w-10', lg: 'h-12 w-12' },
8
+ isActive: { true: 'bg-primary-500', false: 'bg-transparent' },
9
+ isDisabled: { true: 'opacity-50' },
10
+ },
11
+ defaultVariants: { size: 'md', isActive: false },
12
+ });
13
+ export const paginationItemTextStyle = tv({
14
+ base: 'font-medium',
15
+ variants: {
16
+ size: { sm: 'text-xs', md: 'text-sm', lg: 'text-base' },
17
+ isActive: { true: 'text-typography-0', false: 'text-typography-700' },
18
+ },
19
+ defaultVariants: { size: 'md', isActive: false },
20
+ });
21
+ export const paginationEllipsisStyle = tv({
22
+ base: 'items-center justify-center',
23
+ variants: {
24
+ size: { sm: 'h-8 w-8', md: 'h-10 w-10', lg: 'h-12 w-12' },
25
+ },
26
+ defaultVariants: { size: 'md' },
27
+ });
@@ -0,0 +1,19 @@
1
+ import type { View, Pressable, Text as RNText } from 'react-native';
2
+
3
+ export type PaginationSize = 'sm' | 'md' | 'lg';
4
+
5
+ export interface PaginationContextValue { size: PaginationSize; }
6
+
7
+ export interface PaginationProps extends React.ComponentPropsWithoutRef<typeof View> {
8
+ className?: string;
9
+ size?: PaginationSize;
10
+ }
11
+ export interface PaginationItemProps extends React.ComponentPropsWithoutRef<typeof Pressable> {
12
+ className?: string;
13
+ isActive?: boolean;
14
+ isDisabled?: boolean;
15
+ children: React.ReactNode;
16
+ }
17
+ export interface PaginationPreviousProps extends Omit<PaginationItemProps, 'isActive'> {}
18
+ export interface PaginationNextProps extends Omit<PaginationItemProps, 'isActive'> {}
19
+ export interface PaginationEllipsisProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
@@ -0,0 +1,14 @@
1
+ export {
2
+ PasswordInput,
3
+ PasswordInputProvider,
4
+ usePasswordInputContext,
5
+ PasswordInputField,
6
+ PasswordInputToggle,
7
+ } from './password-input';
8
+ export type {
9
+ PasswordInputProps,
10
+ PasswordInputFieldProps,
11
+ PasswordInputToggleProps,
12
+ PasswordInputSize,
13
+ PasswordInputContextValue,
14
+ } from './types';
@@ -0,0 +1,79 @@
1
+ import React, { useState } from 'react';
2
+ import { View, TextInput, Pressable, Text } from 'react-native';
3
+ import { createComponentContext } from '../utils/create-context';
4
+ import type {
5
+ PasswordInputProps,
6
+ PasswordInputFieldProps,
7
+ PasswordInputToggleProps,
8
+ PasswordInputContextValue,
9
+ } from './types';
10
+ import {
11
+ passwordInputStyle,
12
+ passwordInputFieldStyle,
13
+ passwordInputToggleStyle,
14
+ passwordInputToggleTextStyle,
15
+ } from './styles';
16
+
17
+ export const [PasswordInputProvider, usePasswordInputContext] =
18
+ createComponentContext<PasswordInputContextValue>('PasswordInput');
19
+
20
+ export const PasswordInput = React.forwardRef<
21
+ React.ElementRef<typeof View>,
22
+ PasswordInputProps
23
+ >(({ className, size = 'md', isDisabled = false, children, ...props }, ref) => {
24
+ const [isVisible, setIsVisible] = useState(false);
25
+ return (
26
+ <PasswordInputProvider
27
+ value={{ isVisible, onToggle: () => setIsVisible(!isVisible), size }}
28
+ >
29
+ <View
30
+ ref={ref}
31
+ className={passwordInputStyle({ size, isDisabled, class: className })}
32
+ {...props}
33
+ >
34
+ {children}
35
+ </View>
36
+ </PasswordInputProvider>
37
+ );
38
+ });
39
+ PasswordInput.displayName = 'PasswordInput';
40
+
41
+ export const PasswordInputField = React.forwardRef<
42
+ React.ElementRef<typeof TextInput>,
43
+ PasswordInputFieldProps
44
+ >(({ className, ...props }, ref) => {
45
+ const { isVisible, size } = usePasswordInputContext();
46
+ return (
47
+ <TextInput
48
+ ref={ref}
49
+ secureTextEntry={!isVisible}
50
+ className={passwordInputFieldStyle({ size, class: className })}
51
+ {...props}
52
+ />
53
+ );
54
+ });
55
+ PasswordInputField.displayName = 'PasswordInputField';
56
+
57
+ export const PasswordInputToggle = React.forwardRef<
58
+ React.ElementRef<typeof Pressable>,
59
+ PasswordInputToggleProps
60
+ >(({ className, children, ...props }, ref) => {
61
+ const { isVisible, onToggle } = usePasswordInputContext();
62
+ return (
63
+ <Pressable
64
+ ref={ref}
65
+ onPress={onToggle}
66
+ className={passwordInputToggleStyle({ class: className })}
67
+ accessibilityRole="button"
68
+ accessibilityLabel={isVisible ? 'Hide password' : 'Show password'}
69
+ {...props}
70
+ >
71
+ {children ?? (
72
+ <Text className={passwordInputToggleTextStyle({})}>
73
+ {isVisible ? 'Hide' : 'Show'}
74
+ </Text>
75
+ )}
76
+ </Pressable>
77
+ );
78
+ });
79
+ PasswordInputToggle.displayName = 'PasswordInputToggle';
@@ -0,0 +1,25 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const passwordInputStyle = tv({
4
+ base: 'flex-row items-center border border-outline-300 rounded-lg overflow-hidden bg-background-0',
5
+ variants: {
6
+ size: { sm: 'h-8', md: 'h-10', lg: 'h-12' },
7
+ isDisabled: { true: 'opacity-50' },
8
+ },
9
+ defaultVariants: { size: 'md' },
10
+ });
11
+ export const passwordInputFieldStyle = tv({
12
+ base: 'flex-1 text-typography-900 px-3',
13
+ variants: {
14
+ size: { sm: 'text-sm', md: 'text-base', lg: 'text-lg' },
15
+ },
16
+ defaultVariants: { size: 'md' },
17
+ });
18
+ export const passwordInputToggleStyle = tv({
19
+ base: 'items-center justify-center px-3',
20
+ variants: {},
21
+ });
22
+ export const passwordInputToggleTextStyle = tv({
23
+ base: 'text-xs font-medium text-typography-500',
24
+ variants: {},
25
+ });
@@ -0,0 +1,24 @@
1
+ import type { View, TextInput, Pressable } from 'react-native';
2
+
3
+ export type PasswordInputSize = 'sm' | 'md' | 'lg';
4
+
5
+ export interface PasswordInputContextValue {
6
+ isVisible: boolean;
7
+ onToggle: () => void;
8
+ size: PasswordInputSize;
9
+ }
10
+
11
+ export interface PasswordInputProps
12
+ extends React.ComponentPropsWithoutRef<typeof View> {
13
+ className?: string;
14
+ size?: PasswordInputSize;
15
+ isDisabled?: boolean;
16
+ }
17
+ export interface PasswordInputFieldProps
18
+ extends React.ComponentPropsWithoutRef<typeof TextInput> {
19
+ className?: string;
20
+ }
21
+ export interface PasswordInputToggleProps
22
+ extends React.ComponentPropsWithoutRef<typeof Pressable> {
23
+ className?: string;
24
+ }
@@ -0,0 +1,12 @@
1
+ export {
2
+ PinInput,
3
+ PinInputProvider,
4
+ usePinInputContext,
5
+ PinInputField,
6
+ } from './pin-input';
7
+ export type {
8
+ PinInputProps,
9
+ PinInputFieldProps,
10
+ PinInputSize,
11
+ PinInputContextValue,
12
+ } from './types';
@@ -0,0 +1,96 @@
1
+ import React, { useState } from 'react';
2
+ import { View, TextInput } from 'react-native';
3
+ import { createComponentContext } from '../utils/create-context';
4
+ import type {
5
+ PinInputProps,
6
+ PinInputFieldProps,
7
+ PinInputContextValue,
8
+ } from './types';
9
+ import { pinInputStyle, pinInputFieldStyle } from './styles';
10
+
11
+ export const [PinInputProvider, usePinInputContext] =
12
+ createComponentContext<PinInputContextValue>('PinInput');
13
+
14
+ export const PinInput = React.forwardRef<
15
+ React.ElementRef<typeof View>,
16
+ PinInputProps
17
+ >(
18
+ (
19
+ {
20
+ className,
21
+ length = 4,
22
+ value = '',
23
+ onChange,
24
+ size = 'md',
25
+ isDisabled = false,
26
+ children,
27
+ ...props
28
+ },
29
+ ref,
30
+ ) => {
31
+ const [internalValues, setInternalValues] = useState<string[]>(() => {
32
+ const arr = new Array(length).fill('');
33
+ value.split('').forEach((c, i) => {
34
+ if (i < length) arr[i] = c;
35
+ });
36
+ return arr;
37
+ });
38
+ const values = value
39
+ ? value
40
+ .split('')
41
+ .concat(new Array(Math.max(0, length - value.length)).fill(''))
42
+ .slice(0, length)
43
+ : internalValues;
44
+ const onChangeAtIndex = (index: number, char: string) => {
45
+ const newValues = [...values];
46
+ newValues[index] = char.slice(-1);
47
+ setInternalValues(newValues);
48
+ onChange?.(newValues.join(''));
49
+ };
50
+ return (
51
+ <PinInputProvider
52
+ value={{ values, onChangeAtIndex, size, isDisabled, length }}
53
+ >
54
+ <View
55
+ ref={ref}
56
+ className={pinInputStyle({ class: className })}
57
+ {...props}
58
+ >
59
+ {children ??
60
+ Array.from({ length }, (_, i) => (
61
+ <PinInputField key={i} index={i} />
62
+ ))}
63
+ </View>
64
+ </PinInputProvider>
65
+ );
66
+ },
67
+ );
68
+ PinInput.displayName = 'PinInput';
69
+
70
+ export const PinInputField = React.forwardRef<
71
+ React.ElementRef<typeof TextInput>,
72
+ PinInputFieldProps
73
+ >(({ className, index, ...props }, ref) => {
74
+ const { values, onChangeAtIndex, size, isDisabled } =
75
+ usePinInputContext();
76
+ const isFilled = !!values[index];
77
+ return (
78
+ <TextInput
79
+ ref={ref}
80
+ value={values[index] || ''}
81
+ onChangeText={(text) => onChangeAtIndex(index, text)}
82
+ maxLength={1}
83
+ keyboardType="number-pad"
84
+ editable={!isDisabled}
85
+ selectTextOnFocus
86
+ className={pinInputFieldStyle({
87
+ size,
88
+ isFilled,
89
+ isDisabled,
90
+ class: className,
91
+ })}
92
+ {...props}
93
+ />
94
+ );
95
+ });
96
+ PinInputField.displayName = 'PinInputField';
@@ -0,0 +1,16 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const pinInputStyle = tv({ base: 'flex-row gap-2', variants: {} });
4
+ export const pinInputFieldStyle = tv({
5
+ base: 'border border-outline-300 rounded-lg text-center text-typography-900 font-semibold bg-background-0',
6
+ variants: {
7
+ size: {
8
+ sm: 'h-8 w-8 text-sm',
9
+ md: 'h-10 w-10 text-base',
10
+ lg: 'h-12 w-12 text-lg',
11
+ },
12
+ isFilled: { true: 'border-primary-500' },
13
+ isDisabled: { true: 'opacity-50' },
14
+ },
15
+ defaultVariants: { size: 'md' },
16
+ });
@@ -0,0 +1,26 @@
1
+ import type { View, TextInput } from 'react-native';
2
+
3
+ export type PinInputSize = 'sm' | 'md' | 'lg';
4
+
5
+ export interface PinInputContextValue {
6
+ values: string[];
7
+ onChangeAtIndex: (index: number, char: string) => void;
8
+ size: PinInputSize;
9
+ isDisabled: boolean;
10
+ length: number;
11
+ }
12
+
13
+ export interface PinInputProps
14
+ extends React.ComponentPropsWithoutRef<typeof View> {
15
+ className?: string;
16
+ length?: number;
17
+ value?: string;
18
+ onChange?: (value: string) => void;
19
+ size?: PinInputSize;
20
+ isDisabled?: boolean;
21
+ }
22
+ export interface PinInputFieldProps
23
+ extends React.ComponentPropsWithoutRef<typeof TextInput> {
24
+ className?: string;
25
+ index: number;
26
+ }
@@ -0,0 +1,2 @@
1
+ export { Popover, PopoverProvider, usePopoverContext, PopoverTrigger, PopoverContent, PopoverArrow, PopoverHeader, PopoverBody, PopoverFooter, PopoverCloseButton } from './popover';
2
+ export type { PopoverProps, PopoverTriggerProps, PopoverContentProps, PopoverArrowProps, PopoverHeaderProps, PopoverBodyProps, PopoverFooterProps, PopoverCloseButtonProps, PopoverPlacement, PopoverContextValue } from './types';
@@ -0,0 +1,98 @@
1
+ import React, { useState } from 'react';
2
+ import { View, Pressable, Modal, Platform } from 'react-native';
3
+ import { createComponentContext } from '../utils/create-context';
4
+ import type { PopoverProps, PopoverTriggerProps, PopoverContentProps, PopoverArrowProps, PopoverHeaderProps, PopoverBodyProps, PopoverFooterProps, PopoverCloseButtonProps, PopoverContextValue } from './types';
5
+ import { popoverContentStyle, popoverArrowStyle, popoverHeaderStyle, popoverBodyStyle, popoverFooterStyle, popoverCloseButtonStyle } from './styles';
6
+
7
+ export const [PopoverProvider, usePopoverContext] =
8
+ createComponentContext<PopoverContextValue>('Popover');
9
+
10
+ export const Popover: React.FC<PopoverProps> = ({ isOpen: controlledOpen, onOpenChange, defaultOpen = false, placement = 'bottom', children }) => {
11
+ const [internalOpen, setInternalOpen] = useState(defaultOpen);
12
+ const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen;
13
+
14
+ const onToggle = () => {
15
+ const next = !isOpen;
16
+ setInternalOpen(next);
17
+ onOpenChange?.(next);
18
+ };
19
+
20
+ const onClose = () => {
21
+ setInternalOpen(false);
22
+ onOpenChange?.(false);
23
+ };
24
+
25
+ return (
26
+ <PopoverProvider value={{ isOpen, onToggle, onClose, placement }}>
27
+ {children}
28
+ </PopoverProvider>
29
+ );
30
+ };
31
+ Popover.displayName = 'Popover';
32
+
33
+ export const PopoverTrigger: React.FC<PopoverTriggerProps> = ({ children }) => {
34
+ const { onToggle } = usePopoverContext();
35
+
36
+ // Inject onPress directly into the child element via cloneElement.
37
+ // This avoids wrapper nesting issues (Pressable inside Pressable, div onClick
38
+ // not bubbling through RN Web's Responder system, etc.).
39
+ if (React.isValidElement(children)) {
40
+ const child = children as React.ReactElement<any>;
41
+ const existingOnPress = child.props.onPress;
42
+ return React.cloneElement(child, {
43
+ onPress: existingOnPress
44
+ ? (...args: any[]) => { existingOnPress(...args); onToggle(); }
45
+ : onToggle,
46
+ });
47
+ }
48
+
49
+ return (
50
+ <Pressable onPress={onToggle}>
51
+ {children}
52
+ </Pressable>
53
+ );
54
+ };
55
+ PopoverTrigger.displayName = 'PopoverTrigger';
56
+
57
+ export const PopoverContent = React.forwardRef<React.ElementRef<typeof View>, PopoverContentProps>(({ className, children, ...props }, ref) => {
58
+ const { isOpen, onClose } = usePopoverContext();
59
+ if (!isOpen) return null;
60
+ return (
61
+ <Modal visible={isOpen} transparent animationType="fade" onRequestClose={onClose}>
62
+ <Pressable style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }} onPress={onClose}>
63
+ <Pressable onPress={(e) => e.stopPropagation()}>
64
+ <View ref={ref} className={popoverContentStyle({ class: className })} {...props}>
65
+ {children}
66
+ </View>
67
+ </Pressable>
68
+ </Pressable>
69
+ </Modal>
70
+ );
71
+ });
72
+ PopoverContent.displayName = 'PopoverContent';
73
+
74
+ export const PopoverArrow = React.forwardRef<React.ElementRef<typeof View>, PopoverArrowProps>(({ className, ...props }, ref) => {
75
+ return <View ref={ref} className={popoverArrowStyle({ class: className })} {...props} />;
76
+ });
77
+ PopoverArrow.displayName = 'PopoverArrow';
78
+
79
+ export const PopoverHeader = React.forwardRef<React.ElementRef<typeof View>, PopoverHeaderProps>(({ className, ...props }, ref) => {
80
+ return <View ref={ref} className={popoverHeaderStyle({ class: className })} {...props} />;
81
+ });
82
+ PopoverHeader.displayName = 'PopoverHeader';
83
+
84
+ export const PopoverBody = React.forwardRef<React.ElementRef<typeof View>, PopoverBodyProps>(({ className, ...props }, ref) => {
85
+ return <View ref={ref} className={popoverBodyStyle({ class: className })} {...props} />;
86
+ });
87
+ PopoverBody.displayName = 'PopoverBody';
88
+
89
+ export const PopoverFooter = React.forwardRef<React.ElementRef<typeof View>, PopoverFooterProps>(({ className, ...props }, ref) => {
90
+ return <View ref={ref} className={popoverFooterStyle({ class: className })} {...props} />;
91
+ });
92
+ PopoverFooter.displayName = 'PopoverFooter';
93
+
94
+ export const PopoverCloseButton = React.forwardRef<React.ElementRef<typeof Pressable>, PopoverCloseButtonProps>(({ className, ...props }, ref) => {
95
+ const { onClose } = usePopoverContext();
96
+ return <Pressable ref={ref} onPress={onClose} className={popoverCloseButtonStyle({ class: className })} accessibilityRole="button" accessibilityLabel="Close" {...props} />;
97
+ });
98
+ PopoverCloseButton.displayName = 'PopoverCloseButton';
@@ -0,0 +1,31 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const popoverContentStyle = tv({
4
+ base: 'bg-background-0 rounded-lg p-4 shadow-hard-2 border border-outline-100',
5
+ variants: {},
6
+ });
7
+
8
+ export const popoverArrowStyle = tv({
9
+ base: 'w-3 h-3 bg-background-0 border border-outline-100 rotate-45',
10
+ variants: {},
11
+ });
12
+
13
+ export const popoverHeaderStyle = tv({
14
+ base: 'flex-row items-center justify-between mb-2',
15
+ variants: {},
16
+ });
17
+
18
+ export const popoverBodyStyle = tv({
19
+ base: 'mb-2',
20
+ variants: {},
21
+ });
22
+
23
+ export const popoverFooterStyle = tv({
24
+ base: 'flex-row justify-end gap-2 mt-2',
25
+ variants: {},
26
+ });
27
+
28
+ export const popoverCloseButtonStyle = tv({
29
+ base: 'p-1 rounded',
30
+ variants: {},
31
+ });
@@ -0,0 +1,46 @@
1
+ import type { View, Pressable } from 'react-native';
2
+
3
+ export type PopoverPlacement = 'top' | 'bottom' | 'left' | 'right';
4
+
5
+ export interface PopoverContextValue {
6
+ isOpen: boolean;
7
+ onToggle: () => void;
8
+ onClose: () => void;
9
+ placement: PopoverPlacement;
10
+ }
11
+
12
+ export interface PopoverProps {
13
+ isOpen?: boolean;
14
+ onOpenChange?: (open: boolean) => void;
15
+ defaultOpen?: boolean;
16
+ placement?: PopoverPlacement;
17
+ children: React.ReactNode;
18
+ }
19
+
20
+ export interface PopoverTriggerProps extends React.ComponentPropsWithoutRef<typeof Pressable> {
21
+ className?: string;
22
+ }
23
+
24
+ export interface PopoverContentProps extends React.ComponentPropsWithoutRef<typeof View> {
25
+ className?: string;
26
+ }
27
+
28
+ export interface PopoverArrowProps extends React.ComponentPropsWithoutRef<typeof View> {
29
+ className?: string;
30
+ }
31
+
32
+ export interface PopoverHeaderProps extends React.ComponentPropsWithoutRef<typeof View> {
33
+ className?: string;
34
+ }
35
+
36
+ export interface PopoverBodyProps extends React.ComponentPropsWithoutRef<typeof View> {
37
+ className?: string;
38
+ }
39
+
40
+ export interface PopoverFooterProps extends React.ComponentPropsWithoutRef<typeof View> {
41
+ className?: string;
42
+ }
43
+
44
+ export interface PopoverCloseButtonProps extends React.ComponentPropsWithoutRef<typeof Pressable> {
45
+ className?: string;
46
+ }
@@ -0,0 +1,2 @@
1
+ export { Portal } from './portal';
2
+ export type { PortalProps } from './types';
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { PortalProps } from './types';
3
+
4
+ export function Portal({ children }: PortalProps) {
5
+ return <>{children}</>;
6
+ }
7
+
8
+ Portal.displayName = 'Portal';
@@ -0,0 +1,2 @@
1
+ // Portal has no visual styles
2
+ export {};
@@ -0,0 +1,3 @@
1
+ export interface PortalProps {
2
+ children: React.ReactNode;
3
+ }
@@ -0,0 +1,2 @@
1
+ export { Pressable } from './pressable';
2
+ export type { PressableProps } from './types';
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import { Pressable as RNPressable } from 'react-native';
3
+ import type { PressableProps } from './types';
4
+ import { pressableStyle } from './styles';
5
+
6
+ export const Pressable = React.forwardRef<
7
+ React.ElementRef<typeof RNPressable>,
8
+ PressableProps
9
+ >(({ className, disabled, ...props }, ref) => {
10
+ return (
11
+ <RNPressable
12
+ ref={ref}
13
+ disabled={disabled}
14
+ className={pressableStyle({ isDisabled: !!disabled, class: className })}
15
+ {...props}
16
+ />
17
+ );
18
+ });
19
+
20
+ Pressable.displayName = 'Pressable';
@@ -0,0 +1,10 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const pressableStyle = tv({
4
+ base: 'self-start',
5
+ variants: {
6
+ isDisabled: {
7
+ true: 'opacity-50',
8
+ },
9
+ },
10
+ });
@@ -0,0 +1,6 @@
1
+ import type { Pressable as RNPressable } from 'react-native';
2
+
3
+ export interface PressableProps
4
+ extends React.ComponentPropsWithoutRef<typeof RNPressable> {
5
+ className?: string;
6
+ }
@@ -0,0 +1,9 @@
1
+ export { Progress } from './progress';
2
+ export { ProgressFilledTrack } from './progress-filled-track';
3
+
4
+ export type {
5
+ ProgressProps,
6
+ ProgressFilledTrackProps,
7
+ ProgressSize,
8
+ ProgressContextValue,
9
+ } from './types';